diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 2c79a8cea03..57628ed8ac5 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -19,20 +19,9 @@ body: - type: input id: environment-version attributes: - label: Environment Version + label: Dolibarr Version description: Affected Dolibarr version(s) - - - type: input - id: environment-os - attributes: - label: Environment OS - description: Server OS type and version - - - type: input - id: environment-webserver - attributes: - label: Environment Web server - description: Webserver type and version + placeholder: 19.0, develop, ... - type: input id: environment-php @@ -46,22 +35,10 @@ body: label: Environment Database description: Database type and version - - type: input - id: environment-urls - attributes: - label: Environment URL(s) - description: Affected URL(s) - - - type: textarea - id: expected-behaviour - attributes: - label: Expected and actual behavior - description: Verbose description - - type: textarea id: reproduce attributes: - label: Steps to reproduce the behavior + label: Steps to reproduce the behavior and expected behavior description: Verbose description - type: textarea diff --git a/.github/logToCs.py b/.github/logToCs.py deleted file mode 100755 index 7befd310a0a..00000000000 --- a/.github/logToCs.py +++ /dev/null @@ -1,588 +0,0 @@ -#!/usr/bin/env python3 -# pylint: disable=invalid-name -""" -Convert a log to CheckStyle format. - -Url: https://github.com/mdeweerd/LogToCheckStyle - -The log can then be used for generating annotations in a github action. - -Note: this script is very young and "quick and dirty". - Patterns can be added to "PATTERNS" to match more messages. - -# Examples - -Assumes that logToCs.py is available as .github/logToCs.py. - -## Example 1: - - -```yaml - - run: | - pre-commit run -all-files | tee pre-commit.log - .github/logToCs.py pre-commit.log pre-commit.xml - - uses: staabm/annotate-pull-request-from-checkstyle-action@v1 - with: - files: pre-commit.xml - notices-as-warnings: true # optional -``` - -## Example 2: - - -```yaml - - run: | - pre-commit run --all-files | tee pre-commit.log - - name: Add results to PR - if: ${{ always() }} - run: | - .github/logToCs.py pre-commit.log | cs2pr -``` - -Author(s): - - https://github.com/mdeweerd - -License: MIT License - -""" - -import argparse -import datetime as dt -import json -import os -import re -import sys -import xml.etree.ElementTree as ET # nosec - - -def remove_prefix(string, prefix): - """ - Remove prefix from string - - Provided for backward compatibility. - """ - if prefix and string.startswith(prefix): - return string[len(prefix) :] - return string - - -def convert_notices_to_checkstyle(notices, root_path=None): - """ - Convert annotation list to CheckStyle xml string - """ - root = ET.Element("checkstyle") - for fields in notices: - add_error_entry(root, **fields, root_path=root_path) - return ET.tostring(root, encoding="utf_8").decode("utf_8") - - -def convert_lines_to_notices(lines): - """ - Convert provided message to CheckStyle format. - """ - notices = [] - for line in lines: - fields = parse_message(line) - if fields: - notices.append(fields) - return notices - - -def convert_text_to_notices(text): - """ - Convert provided message to CheckStyle format. - """ - return parse_file(text) - - -# Initial version for Checkrun from: -# https://github.com/tayfun/flake8-your-pr/blob/50a175cde4dd26a656734c5b64ba1e5bb27151cb/src/main.py#L7C1-L123C36 -# MIT Licence -class CheckRun: - """ - Represents the check run - """ - - GITHUB_TOKEN = os.environ.get("GITHUB_TOKEN", None) - GITHUB_EVENT_PATH = os.environ.get("GITHUB_EVENT_PATH", None) - - URI = "https://api.github.com" - API_VERSION = "2022-11-28" - ACCEPT_HEADER_VALUE = "application/vnd.github+json" - AUTH_HEADER_VALUE = f"Bearer {GITHUB_TOKEN}" - # This is the max annotations Github API accepts in one go. - MAX_ANNOTATIONS = 50 - - def __init__(self): - """ - Initialise Check Run object with information from checkrun - """ - self.read_event_file() - self.read_meta_data() - - def read_event_file(self): - """ - Read the event file to get the event information later. - """ - if self.GITHUB_EVENT_PATH is None: - raise ValueError("Not running in github workflow") - with open(self.GITHUB_EVENT_PATH, encoding="utf_8") as event_file: - self.event = json.loads(event_file.read()) - - def read_meta_data(self): - """ - Get meta data from event information - """ - self.repo_full_name = self.event["repository"]["full_name"] - pull_request = self.event.get("pull_request") - print("%r", self.event) - if pull_request: - self.head_sha = pull_request["head"]["sha"] - else: - print("%r", self.event) - check_suite = self.event.get("check_suite", None) - if check_suite is not None: - self.head_sha = check_suite["pull_requests"][0]["base"]["sha"] - else: - self.head_sha = None # Can't annotate? - - def submit( # pylint: disable=too-many-arguments - self, - notices, - title=None, - summary=None, - text=None, - conclusion=None, - ): - """ - Submit annotations to github - - See: - https://docs.github.com/en/rest/checks/runs?apiVersion=2022-11-28 - #update-a-check-run - - :param conclusion: success, failure - """ - # pylint: disable=import-outside-toplevel - import requests # Import here to not impose presence of module - - if self.head_sha is None: - return - - output = { - "annotations": notices[: CheckRun.MAX_ANNOTATIONS], - } - if title is not None: - output["title"] = title - if summary is not None: - output["summary"] = summary - if text is not None: - output["text"] = text - if conclusion is None: - # action_required, cancelled, failure, neutral, success - # skipped, stale, timed_out - if bool(notices): - conclusion = "failure" - else: - conclusion = "success" - - payload = { - "name": "log-to-pr-annotation", - "head_sha": self.head_sha, - "status": "completed", # queued, in_progress, completed - "conclusion": conclusion, - # "started_at": dt.datetime.now(dt.timezone.utc).isoformat(), - "completed_at": dt.datetime.now(dt.timezone.utc).isoformat(), - "output": output, - } - - # Create the check-run - response = requests.post( - f"{self.URI}/repos/{self.repo_full_name}/check-runs", - headers={ - "Accept": self.ACCEPT_HEADER_VALUE, - "Authorization": self.AUTH_HEADER_VALUE, - "X-GitHub-Api-Version": self.API_VERSION, - }, - json=payload, - timeout=30, - ) - print(response.content) - response.raise_for_status() - - -ANY_REGEX = r".*?" -FILE_REGEX = r"\s*(?P\S.*?)\s*?" -FILEGROUP_REGEX = r"\s*(?P\S.*?)\s*?" -EOL_REGEX = r"[\r\n]" -LINE_REGEX = r"\s*(?P\d+?)\s*?" -COLUMN_REGEX = r"\s*(?P\d+?)\s*?" -SEVERITY_REGEX = r"\s*(?Perror|warning|notice|style|info)\s*?" -MSG_REGEX = r"\s*(?P.+?)\s*?" -MULTILINE_MSG_REGEX = r"\s*(?P(?:.|.[\r\n])+)" -# cpplint confidence index -CONFIDENCE_REGEX = r"\s*\[(?P\d+)\]\s*?" - - -# List of message patterns, add more specific patterns earlier in the list -# Creating patterns by using constants makes them easier to define and read. -PATTERNS = [ - # beautysh - # File ftp.sh: error: "esac" before "case" in line 90. - re.compile( - f"^File {FILE_REGEX}:{SEVERITY_REGEX}:" - f" {MSG_REGEX} in line {LINE_REGEX}.$" - ), - # beautysh - # File socks4echo.sh: error: indent/outdent mismatch: -2. - re.compile(f"^File {FILE_REGEX}:{SEVERITY_REGEX}: {MSG_REGEX}$"), - # yamllint - # ##[group].pre-commit-config.yaml - # ##[error]97:14 [trailing-spaces] trailing spaces - # ##[endgroup] - re.compile(rf"^##\[group\]{FILEGROUP_REGEX}$"), # Start file group - re.compile( - rf"^##\[{SEVERITY_REGEX}\]{LINE_REGEX}:{COLUMN_REGEX}{MSG_REGEX}$" - ), # Msg - re.compile(r"^##(?P\[endgroup\])$"), # End file group - # File socks4echo.sh: error: indent/outdent mismatch: -2. - re.compile(f"^File {FILE_REGEX}:{SEVERITY_REGEX}: {MSG_REGEX}$"), - # Emacs style - # path/to/file:845:5: error - Expected 1 space after closing brace - re.compile( - rf"^{FILE_REGEX}:{LINE_REGEX}:{COLUMN_REGEX}:{SEVERITY_REGEX}" - rf"-?\s{MSG_REGEX}$" - ), - # ESLint (JavaScript Linter), RoboCop, shellcheck - # path/to/file.js:10:2: Some linting issue - # path/to/file.rb:10:5: Style/Indentation: Incorrect indentation detected - # path/to/script.sh:10:1: SC2034: Some shell script issue - re.compile(f"^{FILE_REGEX}:{LINE_REGEX}:{COLUMN_REGEX}: {MSG_REGEX}$"), - # Cpplint default output: - # '%s:%s: %s [%s] [%d]\n' - # % (filename, linenum, message, category, confidence) - re.compile(f"^{FILE_REGEX}:{LINE_REGEX}:{MSG_REGEX}{CONFIDENCE_REGEX}$"), - # MSVC - # file.cpp(10): error C1234: Some error message - re.compile( - f"^{FILE_REGEX}\\({LINE_REGEX}\\):{SEVERITY_REGEX}{MSG_REGEX}$" - ), - # Java compiler - # File.java:10: error: Some error message - re.compile(f"^{FILE_REGEX}:{LINE_REGEX}:{SEVERITY_REGEX}:{MSG_REGEX}$"), - # Python - # File ".../logToCs.py", line 90 (note: code line follows) - re.compile(f'^File "{FILE_REGEX}", line {LINE_REGEX}$'), - # Pylint, others - # path/to/file.py:10: [C0111] Missing docstring - # others - re.compile(f"^{FILE_REGEX}:{LINE_REGEX}: {MSG_REGEX}$"), - # Shellcheck: - # In script.sh line 76: - re.compile( - f"^In {FILE_REGEX} line {LINE_REGEX}:{EOL_REGEX}?" - f"({MULTILINE_MSG_REGEX})?{EOL_REGEX}{EOL_REGEX}" - ), - # eslint: - # /path/to/filename - # 14:5 error Unexpected trailing comma comma-dangle - re.compile( - f"^{FILE_REGEX}{EOL_REGEX}" - rf"\s+{LINE_REGEX}:{COLUMN_REGEX}\s+{SEVERITY_REGEX}\s+{MSG_REGEX}$" - ), -] - -# Exceptionnaly some regexes match messages that are not error. -# This pattern matches those exceptions -EXCLUDE_MSG_PATTERN = re.compile( - r"^(" - r"Placeholder pattern" # To remove on first message pattern - r")" -) - -# Exceptionnaly some regexes match messages that are not error. -# This pattern matches those exceptions -EXCLUDE_FILE_PATTERN = re.compile( - r"^(" - # Codespell: (appears as a file name): - r"Used config files\b" - r")" -) - -# Severities available in CodeSniffer report format -SEVERITY_NOTICE = "notice" -SEVERITY_WARNING = "warning" -SEVERITY_ERROR = "error" - - -def strip_ansi(text: str): - """ - Strip ANSI escape sequences from string (colors, etc) - """ - return re.sub(r"\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])", "", text) - - -def parse_file(text): - """ - Parse all messages in a file - - Returns the fields in a dict. - """ - # pylint: disable=too-many-branches,too-many-statements - # regex required to allow same group names - try: - import regex # pylint: disable=import-outside-toplevel - except ImportError as exc: - raise ImportError( - "The 'parsefile' method requires 'python -m pip install regex'" - ) from exc - - patterns = [pattern.pattern for pattern in PATTERNS] - # patterns = [PATTERNS[0].pattern] - - file_group = None # The file name for the group (if any) - full_regex = "(?:(?:" + (")|(?:".join(patterns)) + "))" - results = [] - - for fields in regex.finditer( - full_regex, strip_ansi(text), regex.MULTILINE | regex.IGNORECASE - ): - if not fields: - continue - result = fields.groupdict() - - if len(result) == 0: - continue - - severity = result.get("severity", None) - file_name = result.get("file_name", None) - confidence = result.pop("confidence", None) - new_file_group = result.pop("file_group", None) - file_endgroup = result.pop("file_endgroup", None) - message = result.get("message", None) - - if new_file_group is not None: - # Start of file_group, just store file - file_group = new_file_group - continue - - if file_endgroup is not None: - file_group = None - continue - - if file_name is None: - if file_group is not None: - file_name = file_group - result["file_name"] = file_name - else: - # No filename, skip - continue - else: - if EXCLUDE_FILE_PATTERN.search(file_name): - # This file_name is excluded - continue - - if message is not None: - if EXCLUDE_MSG_PATTERN.search(message): - # This message is excluded - continue - - if confidence is not None: - # Convert confidence level of cpplint - # to warning, etc. - confidence = int(confidence) - - if confidence <= 1: - severity = SEVERITY_NOTICE - elif confidence >= 5: - severity = SEVERITY_ERROR - else: - severity = SEVERITY_WARNING - - if severity is None: - severity = SEVERITY_ERROR - else: - severity = severity.lower() - - if severity in ["info", "style"]: - severity = SEVERITY_NOTICE - - result["severity"] = severity - - results.append(result) - - return results - - -def parse_message(message): - """ - Parse message until it matches a pattern. - - Returns the fields in a dict. - """ - for pattern in PATTERNS: - fields = pattern.match(message, re.IGNORECASE) - if not fields: - continue - result = fields.groupdict() - if len(result) == 0: - continue - - if "confidence" in result: - # Convert confidence level of cpplint - # to warning, etc. - confidence = int(result["confidence"]) - del result["confidence"] - - if confidence <= 1: - severity = SEVERITY_NOTICE - elif confidence >= 5: - severity = SEVERITY_ERROR - else: - severity = SEVERITY_WARNING - result["severity"] = severity - - if "severity" not in result: - result["severity"] = SEVERITY_ERROR - else: - result["severity"] = result["severity"].lower() - - if result["severity"] in ["info", "style"]: - result["severity"] = SEVERITY_NOTICE - - return result - - # Nothing matched - return None - - -def add_error_entry( # pylint: disable=too-many-arguments - root, - severity, - file_name, - line=None, - column=None, - message=None, - source=None, - root_path=None, -): - """ - Add error information to the CheckStyle output being created. - """ - file_element = find_or_create_file_element( - root, file_name, root_path=root_path - ) - error_element = ET.SubElement(file_element, "error") - error_element.set("severity", severity) - if line: - error_element.set("line", line) - if column: - error_element.set("column", column) - if message: - error_element.set("message", message) - if source: - # To verify if this is a valid attribute - error_element.set("source", source) - - -def find_or_create_file_element(root, file_name: str, root_path=None): - """ - Find/create file element in XML document tree. - """ - - if root_path is not None: - file_name = remove_prefix(file_name, root_path) - for file_element in root.findall("file"): - if file_element.get("name") == file_name: - return file_element - file_element = ET.SubElement(root, "file") - file_element.set("name", file_name) - return file_element - - -def main(): - """ - Parse the script arguments and get the conversion done. - """ - parser = argparse.ArgumentParser( - description="Convert messages to Checkstyle XML format." - ) - parser.add_argument( - "input", help="Input file. Use '-' for stdin.", nargs="?", default="-" - ) - parser.add_argument( - "output", - help="Output file. Use '-' for stdout.", - nargs="?", - default="-", - ) - parser.add_argument( - "-i", - "--in", - dest="input_named", - help="Input filename. Overrides positional input.", - ) - parser.add_argument( - "-o", - "--out", - dest="output_named", - help="Output filename. Overrides positional output.", - ) - parser.add_argument( - "--root", - metavar="ROOT_PATH", - help="Root directory to remove from file paths." - " Defaults to working directory.", - default=os.getcwd(), - ) - parser.add_argument( - "--github-annotate", - action=argparse.BooleanOptionalAction, - help="Annotate when in Github workflow.", - # Currently disabled, - # Future: (os.environ.get("GITHUB_EVENT_PATH", None) is not None), - default=False, - ) - - args = parser.parse_args() - - if args.input == "-" and args.input_named: - with open( - args.input_named, encoding="utf_8", errors="surrogateescape" - ) as input_file: - text = input_file.read() - elif args.input != "-": - with open( - args.input, encoding="utf_8", errors="surrogateescape" - ) as input_file: - text = input_file.read() - else: - text = sys.stdin.read() - - root_path = os.path.join(args.root, "") - - try: - notices = convert_text_to_notices(text) - except ImportError: - notices = convert_lines_to_notices(re.split(r"[\r\n]+", text)) - - checkstyle_xml = convert_notices_to_checkstyle( - notices, root_path=root_path - ) - - if args.output == "-" and args.output_named: - with open(args.output_named, "w", encoding="utf_8") as output_file: - output_file.write(checkstyle_xml) - elif args.output != "-": - with open(args.output, "w", encoding="utf_8") as output_file: - output_file.write(checkstyle_xml) - else: - print(checkstyle_xml) - - if args.github_annotate: - checkrun = CheckRun() - checkrun.submit(notices) - - -if __name__ == "__main__": - main() diff --git a/.github/workflows/cache-clean-pr.yml b/.github/workflows/cache-clean-pr.yml new file mode 100644 index 00000000000..51a4282a0e9 --- /dev/null +++ b/.github/workflows/cache-clean-pr.yml @@ -0,0 +1,36 @@ +--- +name: Cleanup caches of a closed branch +# See https://github.com/actions/cache/blob/main/tips-and-workarounds.md#force-deletion-of-caches-overriding-default-cache-eviction-policy +on: + pull_request: + types: [closed] + workflow_dispatch: +jobs: + cleanup: + runs-on: ubuntu-latest + permissions: + # `actions:write` permission is required to delete caches + # See also: https://docs.github.com/en/rest/actions/cache?apiVersion=2022-11-28#delete-a-github-actions-cache-for-a-repository-using-a-cache-id + actions: write + contents: read + steps: + - name: Check out code + uses: actions/checkout@v4 + - name: Cleanup + run: | + gh extension install actions/gh-actions-cache + REPO=${{ github.repository }} + BRANCH=refs/pull/${{ github.event.pull_request.number }}/merge + echo "Fetching list of cache key" + cacheKeysForPR=$(gh actions-cache list -R $REPO -B $BRANCH | cut -f 1 ) + + ## Setting this to not fail the workflow while deleting cache keys. + set +e + echo "Deleting caches..." + for cacheKey in $cacheKeysForPR + do + gh actions-cache delete $cacheKey -R $REPO -B $BRANCH --confirm + done + echo "Done" + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/exakat.yml b/.github/workflows/exakat.yml index 16e87acd81a..3b1b2f656e0 100644 --- a/.github/workflows/exakat.yml +++ b/.github/workflows/exakat.yml @@ -22,7 +22,7 @@ jobs: - name: Exakat uses: docker://exakat/exakat-ga with: - ignore_rules: 'Classes/UseInstanceof,Performances/PrePostIncrement,Functions/UndefinedFunctions,Functions/WrongNumberOfArguments,Functions/WrongTypeWithCall,Variables/UndefinedVariable,Classes/DontUnsetProperties,Classes/NonPpp,Classes/StaticMethodsCalledFromObject,Classes/UseClassOperator,Functions/UsesDefaultArguments,Php/NoClassInGlobal,Php/ShouldUseCoalesce,Php/WrongTypeForNativeFunction,Structures/AddZero,Structures/DropElseAfterReturn,Structures/IfWithSameConditions,Structures/MergeIfThen,Structures/NestedTernary,Structures/ElseIfElseif,Structures/ExitUsage,Structures/RepeatedPrint,Structures/RepeatedRegex,Structures/SameConditions,Structures/SwitchWithoutDefault,Structures/ShouldMakeTernary,Structures/UselessParenthesis,Structures/UseConstant' + ignore_rules: 'Classes/UseInstanceof,Constants/ConstantStrangeNames,Performances/PrePostIncrement,Functions/UndefinedFunctions,Functions/WrongNumberOfArguments,Functions/WrongTypeWithCall,Variables/UndefinedVariable,Classes/DontUnsetProperties,Classes/NonPpp,Classes/StaticMethodsCalledFromObject,Classes/UseClassOperator,Functions/UsesDefaultArguments,Php/NoClassInGlobal,Php/ShouldUseCoalesce,Php/WrongTypeForNativeFunction,Structures/AddZero,Structures/DropElseAfterReturn,Structures/IfWithSameConditions,Structures/MergeIfThen,Structures/NestedTernary,Structures/ElseIfElseif,Structures/ExitUsage,Structures/RepeatedPrint,Structures/RepeatedRegex,Structures/SameConditions,Structures/SwitchWithoutDefault,Structures/ShouldMakeTernary,Structures/UselessParenthesis,Structures/UseConstant' ignore_dirs: '/htdocs/includes/,/htdocs/install/doctemplates/,/build/,/dev/,/doc/,/scripts/,/test/' file_extensions: php project_reports: Perfile diff --git a/.github/workflows/phan.yml b/.github/workflows/phan.yml new file mode 100644 index 00000000000..67bec077a13 --- /dev/null +++ b/.github/workflows/phan.yml @@ -0,0 +1,55 @@ +--- +on: + pull_request: + push: + schedule: + # execute once a day, the 1st + - cron: 10 9 * * * + workflow_dispatch: +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true +env: + # Do pull analysis on schedule or manual dispatch + PHAN_CONFIG: > + ${{ + ( github.event.schedule || github.event_name == 'workflow_dispatch' ) + && 'dev/tools/phan/config_extended.php' + || 'dev/tools/phan/config.php' + }} + PHAN_BASELINE: dev/tools/phan/baseline.txt + PHAN_MIN_PHP: 7.0 + PHAN_QUICK: ${{ github.event.schedule && '' || '--quick' }} + GITHUB_JSON: ${{ toJSON(github) }} # Helps in debugging Github Action +name: phan +jobs: + phan: + name: Run phan + runs-on: ubuntu-latest + # Do not run schedule on forks + if: | + github.repository == 'Dolibarr/dolibarr' + || github.event.schedule == false + steps: + - uses: actions/checkout@v4 + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: 8.2 + coverage: none # disable xdebug, pcov + tools: cs2pr,phan + - name: Run Phan analysis + run: | + phan $PHAN_QUICK -k $PHAN_CONFIG -B $PHAN_BASELINE --analyze-twice --minimum-target-php-version $PHAN_MIN_PHP --output-mode=checkstyle -o _phan.xml + - name: Add results to PR + if: ${{ always() }} + run: | + cs2pr --prepend-filename --prepend-source --notices-as-warnings _phan.xml + - name: Provide phan log as artifact + uses: actions/upload-artifact@v4 + if: ${{ always() }} + with: + name: phan-srcrt + # path: ${{ github.workspace }}/phan.log + path: ${{ github.workspace }}/_phan.xml + retention-days: 2 diff --git a/.github/workflows/phpstan.yml b/.github/workflows/phpstan.yml index 156da172ac7..cbe0f4b2732 100644 --- a/.github/workflows/phpstan.yml +++ b/.github/workflows/phpstan.yml @@ -9,9 +9,7 @@ concurrency: cancel-in-progress: true env: - CACHE_KEY_PART: > - ${{ ( github.event_name == 'pull_request' ) && github.base_ref - }}${{ ( github.event_name == 'pull_request' ) && '-' }}${{ github.head_ref }} + CACHE_KEY_PART: ${{ github.event_name == 'pull_request' && format('{0}-{1}', github.base_ref, github.head_ref) || github.ref_name }} GITHUB_JSON: ${{ toJSON(github) }} # Helps in debugging Github Action # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: @@ -58,7 +56,8 @@ jobs: # Run PHPStan - name: Run PHPStan id: phpstan - run: phpstan -vvv analyse --error-format=checkstyle --memory-limit 4G -a build/phpstan/bootstrap_action.php -c phpstan.neon | cs2pr --graceful-warnings + run: | + phpstan -vvv analyse --error-format=checkstyle --memory-limit 7G -a build/phpstan/bootstrap_action.php | tee _stan.xml | cs2pr --graceful-warnings # continue-on-error: true # Save cache @@ -68,3 +67,10 @@ jobs: with: path: ./.github/tmp key: phpstan-cache-${{ matrix.php-version }}-${{ env.CACHE_KEY_PART }}-${{ github.run_id }} + - name: Provide phpstan log as artifact + uses: actions/upload-artifact@v4 + if: ${{ always() }} + with: + name: phpstan-srcrt + path: ${{ github.workspace }}/_stan.xml + retention-days: 2 diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index 9127b43c005..b29ae8aa809 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -7,7 +7,6 @@ jobs: pre-commit: runs-on: ubuntu-latest env: - LOG_TO_CS: .github/logToCs.py RAW_LOG: pre-commit.log CS_XML: pre-commit.xml steps: @@ -20,7 +19,7 @@ jobs: # This is faster for a big repo. - name: Get all changed php files (if PR) id: changed-php - uses: tj-actions/changed-files@v42 + uses: tj-actions/changed-files@v43 if: github.event_name == 'pull_request' with: files: | @@ -38,7 +37,7 @@ jobs: with: cache: pip python-version: "3.11" - - run: python -m pip install pre-commit regex + - run: python -m pip install pre-commit # Restore previous cache of precommit - uses: actions/cache/restore@v4 with: @@ -58,7 +57,7 @@ jobs: # The next uses git, which is slow for a bit repo. # - name: Get all changed php files (if PR) # id: changed-php - # uses: tj-actions/changed-files@v42 + # uses: tj-actions/changed-files@v43 # if: github.event_name == 'pull_request' # with: # files: | @@ -68,13 +67,16 @@ jobs: uses: shivammathur/setup-php@v2 # Install when we're going to run phpcs if: | - steps.changed-php.outputs.any_changed == 'true' - || + ! cancelled() && ( - github.event_name == 'push' - && ( - github.event.ref == 'refs/heads/develop' - || endsWith(github.event.ref, '.0') + steps.changed-php.outputs.any_changed == 'true' + || + ( + github.event_name == 'push' + && ( + github.event.ref == 'refs/heads/develop' + || endsWith(github.event.ref, '.0') + ) ) ) with: @@ -83,7 +85,7 @@ jobs: tools: phpcs - name: Run some pre-commit hooks on selected changed files only - if: steps.changed-php.outputs.any_changed == 'true' + if: "! cancelled() && steps.changed-php.outputs.any_changed == 'true'" env: ALL_CHANGED_FILES: ${{ steps.changed-php.outputs.all_changed_files }} run: | @@ -103,19 +105,12 @@ jobs: pre-commit run --hook-stage manual -a php-cs-with-cache | tee -a ${RAW_LOG} ls -l ~/.cache/pre-commit/ - # If error, we convert log in the checkstyle format - - name: Convert Raw Log to CheckStyle format - if: ${{ failure() }} - run: | - python ${LOG_TO_CS} ${RAW_LOG} ${CS_XML} - # Annotate the git sources with the log messages - - name: Annotate Source Code with Messages - uses: staabm/annotate-pull-request-from-checkstyle-action@v1 + - name: Convert Raw Log to Annotations + uses: mdeweerd/logToCheckStyle@2024.3.2 if: ${{ failure() }} with: - files: ${{ env.CS_XML }} - notices-as-warnings: true # optional - prepend-filename: true # optional + in: ${{ env.RAW_LOG }} + # Save the precommit cache - uses: actions/cache/save@v4 if: ${{ ! cancelled() }} diff --git a/.github/workflows/windows-ci.yaml b/.github/workflows/windows-ci.yaml index 4d125a29497..927378fab59 100644 --- a/.github/workflows/windows-ci.yaml +++ b/.github/workflows/windows-ci.yaml @@ -1,36 +1,39 @@ --- name: Win CI +# yamllint disable-line rule:truthy on: push: - # branches: - # - main pull_request: - # branches: - # - main workflow_dispatch: - concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true - + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref + }} + cancel-in-progress: true +env: + PHPUNIT_LOG: phpunit_tests.log + DOLIBARR_LOG: documents/dolibarr.log + PHPSERVER_LOG: phpserver.log + PHPSERVER_DOMAIN_PORT: 127.0.0.1:8000 # could be 127.0.0.1:8000 if config modified + CACHE_KEY_PART: ${{ github.event_name == 'pull_request' && format('{0}-{1}', github.base_ref, github.head_ref) || github.ref_name }} + PHP_INI_SCAN_DIR: C:\myphpini + CKEY: win-ci-2 + GITHUB_JSON: ${{ toJSON(github) }} # Helps in debugging Github Action jobs: - test: + win-test: strategy: matrix: os: [windows-latest] - #php_version: [7.4, 8.0] # Add more versions if needed - php_version: [7.4] # Add more versions if needed + # php_version: [7.4, 8.0] # Add more versions if needed + php_version: [7.4] # Add more versions if needed runs-on: ${{ matrix.os }} steps: - name: Checkout code uses: actions/checkout@v4 - - name: Setup MariaDB uses: ankane/setup-mariadb@v1 with: # mariadb-version: ${{ matrix.mariadb-version }} - database: travis # Specify your database name - + database: travis # Specify your database name - name: Setup PHP uses: shivammathur/setup-php@v2 with: @@ -47,81 +50,131 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # phpts: ts # ts for thread-safe, default nts - - name: Get composer cache directory - id: composer-cache - if: false - run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT - - - name: Cache dependencies - uses: actions/cache@v4 - if: false + # Restore cache + - name: Restore cache + id: cache + uses: actions/cache/restore@v4 with: - path: ${{ steps.composer-cache.outputs.dir }} - key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} - restore-keys: ${{ runner.os }}-composer- - - - name: Install Composer dependencies - if: false - run: | - composer -n config -g vendor-dir htdocs/includes - # composer self-update 2.4.4 - composer -n require \ - php-parallel-lint/php-parallel-lint ^1.2 \ - php-parallel-lint/php-console-highlighter ^0 \ - php-parallel-lint/php-var-dump-check ~0.4 - # which phpunit phpcs php-parallel-lint - - run: | - where php - php -v - php -r 'phpinfo();' - echo ok - - - name: "Windows: Cygwin download" - if: false && runner.os == 'Windows' - run: | - Invoke-WebRequest 'https://cygwin.com/setup-x86_64.exe' -OutFile 'setup-x86_64.exe' - - - name: "Windows: Cygwin setup" - if: false && runner.os == 'Windows' + # See https://github.com/actions/cache/issues/1275#issuecomment-1925217178 + enableCrossOsArchive: true + path: | + db_init.sql + db_init.sql.md5 + key: ${{ matrix.os }}-${{ env.ckey }}-${{ matrix.php_version }}-${{ env.CACHE_KEY_PART + }}-${{ github.run_id }} + restore-keys: | + ${{ matrix.os }}-${{ env.ckey }}-${{ matrix.php_version }}-${{ env.CACHE_KEY_PART }}- + ${{ matrix.os }}-${{ env.ckey }}-${{ matrix.php_version }}-${{ github.head_ref }}- + ${{ matrix.os }}-${{ env.ckey }}-${{ matrix.php_version }}-${{ github.base_ref }}- + ${{ matrix.os }}-${{ env.ckey }}-${{ matrix.php_version }}- + - name: Create local php.ini shell: cmd - #run: .\setup-x86_64.exe --quiet-mode --site http://cygwin.mirror.constant.com --symlink-type=sys --packages mingw64-i686-binutils=2.37-2,mingw64-x86_64-binutils=2.37-2,curl,diffutils,git,m4,make,mercurial,mingw64-i686-gcc-core,mingw64-i686-gcc-g++,mingw64-x86_64-gcc-core,mingw64-x86_64-gcc-g++,patch,perl,rsync,unzip - run: .\setup-x86_64.exe --quiet-mode --site http://cygwin.mirror.constant.com --symlink-type=sys --packages sed - - - name: Setup MSYS (provides 'bash' and other unix-tools on windows) - uses: msys2/setup-msys2@v2 if: false - with: - path-type: inherit - cache: true - release: false - msystem: UCRT64 - update: false - install: git mingw-w64-ucrt-x86_64-gcc - + # Note: Setting the basedir before initialising the database results in open_basedir errors + # Objective: separate step, and before database initialisation to verify open_basedir restrictions + run: |- + ECHO "==== Show INI file usage before our configuration ===" + php --ini + ECHO "==== Set PHP_INI_SCAN_DIR to include the INI File we create ===" + mkdir %PHP_INI_SCAN_DIR% + SET INIFILE="%PHP_INI_SCAN_DIR%\dolibarr.ini" + SET HTDOCS_DIR=%CD%\htdocs + SET DATA_DIR=%CD%\documents + SET TEST_DIR=%CD%\test + SET INITDEMO_DIR=%CD%\dev\initdemo + ECHO "==== Create INI file to set open_basedir ===" + echo [php] > %INIFILE% + echo open_basedir^="%HTDOCS_DIR%;%DATA_DIR%;%TEST_DIR%;%INITDEMO_DIR%;%PHPROOT%" >> %INIFILE% + ECHO "==== Show contents of INI file to set open_basedir ===" + type %INIFILE% + REM Next line disables open_basedir limitation (to limit errors) + SET PHP_INI_SCAN_DIR= + ECHO "==== Verify it is used by PHP ===" + php --ini - name: Run Bash script - # shell: msys2 {0} + # Note this is bash (MSYS) on Windows shell: bash + # Note: Initialise the database (possibly from cache) and set some variables. run: | - # Replace the following commands with your bash script commands - # Example: - # ./script.sh arg1 arg2 - # would be - # bash script.sh arg1 arg2 - # env - php -r 'phpinfo();' + # Check if database cache is present (visually, to remove once ok) + ls -l + # Run bash script to initialise database ${SHELL} -xv dev/setup/phpunit/setup_conf.sh sed -i -e 's/stopOnFailure="[^"]*"/stopOnFailure="false"/' test/phpunit/phpunittest.xml - + # Check if database cache is present after the script (visually, to remove once ok) + ls -l + echo "TAIL=$(cygpath -w "$(which tail)")" >> "$GITHUB_ENV" + echo "GREP=$(cygpath -w "$(which grep)")" >> "$GITHUB_ENV" + echo "TEE=$(cygpath -w "$(which tee)")" >> "$GITHUB_ENV" + echo "BASEDIR=$(realpath .)" >> "$GITHUB_ENV" + - name: Start web server + id: server + if: false + # Objective: Start php server in separate step (but after open_basedir restriction setup!) + run: | + Start-Process -FilePath "php.exe" -WindowStyle Hidden -ArgumentList "-S ${{ env.PHPSERVER_DOMAIN_PORT }} -t htdocs > ${{ env.PHPSERVER_LOG }}" -PassThru + curl "http://${{ env.PHPSERVER_DOMAIN_PORT }}" + shell: powershell - name: Run PHPUnit tests + # continue-on-error: true shell: cmd + # setting up php.ini, starting the php server are currently in this step run: |- + echo "BASEDIR=%CD%" >> %GITHUB_ENV% + start /B php -S %PHPSERVER_DOMAIN_PORT% -t htdocs >> %PHPSERVER_LOG% 2>&1 + curl "http://${{ env.PHPSERVER_DOMAIN_PORT }}" + ECHO "==== Show INI file usage before our configuration ===" php --ini - REM TODO Uncomment next line to restrict directory access - REM SET PHP_INI_SCAN_DIR=C:\myphpini - SET INIFILE="C:\myphpini\dolibarr.ini" - mkdir c:\myphpini + ECHO "==== Set PHP_INI_SCAN_DIR to include the INI File we create ===" + mkdir %PHP_INI_SCAN_DIR% + SET INIFILE="%PHP_INI_SCAN_DIR%\dolibarr.ini" + SET HTDOCS_DIR=%CD%\htdocs + SET DATA_DIR=%CD%\documents + SET TEST_DIR=%CD%\test + SET INITDEMO_DIR=%CD%\dev\initdemo + ECHO "==== Create INI file to set open_basedir ===" echo [php] > %INIFILE% - echo open_basedir^="%CD%;%PHPROOT%" >> %INIFILE% + echo open_basedir^="%HTDOCS_DIR%;%DATA_DIR%;%TEST_DIR%;%INITDEMO_DIR%;%PHPROOT%" >> %INIFILE% + REM Unset PHP_INI_SCAN_DIR to disable open_basedir restritions (to limit debug effort) + REM SET PHP_INI_SCAN_DIR= + ECHO "==== Show contents of INI file to set open_basedir ===" type %INIFILE% + ECHO "==== Verify it is used by PHP ===" php --ini - php "%PHPROOT%\phpunit" -d memory_limit=-1 -c "test\phpunit\phpunittest.xml" "test\phpunit\AllTests.php" + echo $dolibarr_main_url_root="http://${{ env.PHPSERVER_DOMAIN_PORT }}"; >> htdocs/conf/conf.php + cat htdocs/conf/conf.php + curl "http://${{ env.PHPSERVER_DOMAIN_PORT }}" + REM 'DOSKEY' USED to recover error code (no pipefile equivalent in windows?) + ( php "%PHPROOT%\phpunit" -d memory_limit=-1 -c %CD%\test\phpunit\phpunittest.xml "test\phpunit\AllTests.php" --exclude-group WindowsWaitingForFix & call doskey /exename=err err=%%^^errorlevel%% ) | "${{ env.TEE }}" "${{ env.PHPUNIT_LOG }}" + echo "" + echo "Ensure that PHPUNIT completed (no early exit from code)" + "${{ env.TAIL }}" -5 "${{ env.PHPUNIT_LOG }}" | "${{ env.GREP }}" -qE "(OK .*[0-9]+ tests.*[0-9]+ assertions|Tests: [0-9]+)" || EXIT /B 1 + echo "PHPUNIT seems to have completed with a test result, reuse the exit code" + for /f "tokens=2 delims==" %%A in ('doskey /m:err') do EXIT /B %%A + - name: Convert Raw Log to Annotations + uses: mdeweerd/logToCheckStyle@2024.3.2 + if: ${{ failure() }} + with: + in: ${{ env.PHPUNIT_LOG }} + - name: Provide dolibarr and phpunit logs as artifact + uses: actions/upload-artifact@v4 + if: ${{ ! cancelled() }} + with: + name: win-ci-logs + path: | + ${{ env.PHPUNIT_LOG }} + ${{ env.DOLIBARR_LOG }} + ${{ env.PHPSERVER_LOG }} + db_init.sql + db_init.sql.md5 + retention-days: 2 + + # Save cache + - name: Save cache + uses: actions/cache/save@v4 + if: ${{ ! cancelled() }} + with: + # See https://github.com/actions/cache/issues/1275#issuecomment-1925217178 + enableCrossOsArchive: true + key: ${{ steps.cache.outputs.cache-primary-key }} + path: db_init.* diff --git a/.gitignore b/.gitignore index ea477725a2c..2964b1ead0f 100644 --- a/.gitignore +++ b/.gitignore @@ -66,8 +66,26 @@ doc/install.lock /composer.json /composer.lock +# Local script, executed during pre-commit +/local.sh + +# Local phpstan configuration +/phpstan.neon +/phpstan-baseline.neon + +# Logs +/*.log + +# Vim swap files +*.sw? + +# Generated by PHPUNIT.BAT +/INI_PHPUNIT + +# ignore cache builds /build/phpstan/phpstan /build/phpstan/bootstrap_custom.php phpstan_custom.neon /.php-cs-fixer.cache /.php_cs.cache +/.cache diff --git a/.phan/config.php b/.phan/config.php new file mode 100644 index 00000000000..3dc6661f566 --- /dev/null +++ b/.phan/config.php @@ -0,0 +1,4 @@ + + */ +return include __DIR__ . "/../dev/tools/phan/config.php"; diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 866efcc2928..814f144508c 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -5,22 +5,30 @@ repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.5.0 hooks: - # This hook test the name of the branch and return error if the name is 'develop' or an official version 'x.y' - # so you can't commit if your branch name is not a custom branch name. Using a custom branch name is good - # practice that make easier to manage PR. You can enable/disable this if you want to commit or not on branch - # with common names. - #- id: no-commit-to-branch - # args: [--branch, develop, --pattern, \d+.0] - # This check format of xml files + # This hook tests the name of the branch and return an error if the name is + # 'develop' or an official version 'x.y' + # So you can't commit if your branch name is not a custom branch name. + # Using a custom branch name is good practice that makes it easier to manage PRs. + # You can skip this: + # - Permanently: + # export SKIP=no-commit-to-branch # In your .bashrc or session. + # - Only this for one commit: + # SKIP=no-commit-to-branch git commit -a -m "My message" + # - Skipping all checks for a commit: + # git commit -a -m "My message" --no-verify + # (Recommendation: run git commit -a .. once, then with `--no-verify`) + - id: no-commit-to-branch + args: [--branch, develop, --pattern, \d+.0] + # This checks that xml files are correct - id: check-xml exclude: | (?x)^(htdocs/includes/.*)$ - # This check format of yaml files + # This checks that yaml files are correct - id: check-yaml args: [--unsafe] - # This checl format of json files + # This checks that json files are correct - id: check-json - # Fix DOS end of files to get Unix end of files + # Fixes Fix files that have DOS end of line endings - id: mixed-line-ending # alternative for dev/tools/fixdosfiles.sh exclude: | @@ -28,14 +36,14 @@ repos: |.*/CRLF.*.php # Files in swiftmailer )$ args: [--fix=lf] - # Remove trailing whitespace. + # Remove trailing whitespace - id: trailing-whitespace exclude_types: [markdown] # Fix the end of file - id: end-of-file-fixer - # Check if there is not completly merged conflict + # Check that there are no completely merged file conflicts - id: check-merge-conflict - # Chech the shebangs of shell files + # Check that files with shebangs have the executable bit set (in git) - id: check-executables-have-shebangs # Check that shell files are executables - id: check-shebang-scripts-are-executable @@ -46,7 +54,7 @@ repos: |build/debian/dolibarr.config )$ # Fix the first UTF8 byte - id: fix-byte-order-marker - # ??? + # Check that there are no files that have are the same when uppercased (conflict on windows) - id: check-case-conflict # Beautify shell scripts @@ -54,21 +62,30 @@ repos: rev: v6.2.1 hooks: - id: beautysh - exclude: (?x)^(dev/setup/git/hooks/pre-commit)$ + exclude: | + (?x)^(dev/setup/git/hooks/pre-commit + )$ args: [--tab] # Run local script # - # For instance to update the license in edited files, you could add to local.sh: + # For example, to update the license in edited files, you could add to local.sh: # # ```shell - # #!/bin/bash + # #!/bin/bash # MYDIR=$(dirname "$0") # git diff HEAD --name-only | grep -v includes | \ # xargs "$MYDIR/dev/tools/updatelicense.php" # ``` - repo: local hooks: + - name: Find missing/unused/duplicate language keys + id: check-translations + files: (?x)^(htdocs/langs/en_US/.*\.lang) + language: script + entry: ./dev/translation/sanity_check_trans_missing_unused.sh + pass_filenames: false + args: [list] - id: local-precommit-script name: Run local script before commit if it exists language: system @@ -183,8 +200,6 @@ repos: - dev/tools/codespell/codespell-ignore.txt - -x - dev/tools/codespell/codespell-lines-ignore.txt - - --uri-ignore-words-list - - ned exclude_types: [image] exclude: (?x)^(.phan/stubs/.*)$ additional_dependencies: [tomli] diff --git a/.travis.yml b/.travis.yml index e86bb24cdb1..267f37a370a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -556,18 +556,18 @@ after_failure: # Show upgrade log files #for ficlog in `ls $TRAVIS_BUILD_DIR/*.log` #do - #echo "Debugging informations for file $ficlog" + #echo "Debugging information for file $ficlog" #cat $ficlog #done # Show Apache log file - echo "Debugging informations for file apache error.log" + echo "Debugging information for file apache error.log" sudo tail -n 200 /var/log/apache2/travis_error_log if [ "$DEBUG" = true ]; then # Dolibarr log file - echo "Debugging informations for file dolibarr.log (latest 50 lines)" + echo "Debugging information for file dolibarr.log (latest 50 lines)" tail -n 200 $TRAVIS_BUILD_DIR/documents/dolibarr.log # Database log file - echo "Debugging informations for file mysql error.log" + echo "Debugging information for file mysql error.log" sudo tail -n 200 /var/log/mysql/error.log # TODO: PostgreSQL log file echo diff --git a/ChangeLog b/ChangeLog index 4b310ddc3fe..60efdf1093b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,7 +3,7 @@ English Dolibarr ChangeLog -------------------------------------------------------------- -***** ChangeLog for 20.0.0 compared to 19.0.0 ***** +***** ChangeLog for 20.0.0 compared to 19.0 ***** For users: ---------- @@ -23,8 +23,82 @@ The following changes may create regressions for some external modules, but were * Some API HTTP return code were moved from 401 to 403 to better follow REST specification. * dolibarrtriggers class VERSION_XXX constants have been deprecated. Please use array dictionary VERSIONS['XXX']. * Properties ->date_update and ->date_modification were merged into date_modification. +* All CLI tools (into /scripts) return a positive value to the shell if error (0 remains success) for a better + cross platform compatibility. On linux the exit(-1) was caught as 255, it may be now exit(1) so will be caught as 1. +* The parameter $filter of method fetchAll does not accept array of SQL but must be a string of an Universal Search Filter syntax. +* Use of dol_eval with parameter $returnvalue=0 is deprecated. +* The signature for all ->delete() method has been modified to match the modulebuilder template (so first paramis now always $user), except + the delete for thirdparty (still accept the id of thirdparty to delete as first parameter). Will probably be modified into another version. +* Route for API /thirdparties/gateways has been renamed into /thirdparties/accounts to better match the api object name. +* The AGENDA_ENABLE_DONEBY hidden option has been removed. So $userdoneid in actioncomm class is deprecated. Please use $userownerid instead. Also, + the field $fk_user_done in actioncomm table is deprecated. Please use $fk_user_action instead. +* The table commande_fournisseur_dispatch has been renamed into receptiondet_batch to better match its goal. +***** ChangeLog for 19.0.1 compared to 19.0.0 ***** + +FIX: 16.0 - parent company gets emptied when updating a third party from the card in edit mode (#28269) +FIX: 17.0: $num doesn't take trigger-modified newref into account, leading to inconsistencies if BILL_SUPPLIER_VALIDATE changes the invoice's ref (#28684) +FIX: #22948 +FIX: #24265 regression cannot see all product on takepos (#28753) +FIX: #28205 +FIX: #28251 Fixing subpermission name on api_multicurrencies.class.php (#28252) +FIX: #28369 +FIX: #28429 +FIX: #28491 (#28522) +FIX: #28518 (#28520) +FIX: #28533 Mo::deleteLine removes the "main" MoLine if consumed line is delete (#28535) +FIX: #28564 +FIX: Adding the dependencies list feature for extrafields "select" (#28549) +FIX: Add new hidden conf "DISABLE_QTY_OVERWRITTEN" (#28523) +FIX: Amount of localtaxes in foreign currency was wrong on screen and PDF +FIX: an error in a complex else condition +FIX: avoid error "Column 'entity' in where clause is ambiguous" (#28270) +FIX: avoid Unknown column 'pfp.ref_fourn' (#28145) +FIX: avoid warning "error parsing attribute name in Entity" (#28543) +FIX: Bad column for total in bom list +FIX: Bad condition on button back to draft on recruitment job. +FIX: Bad CRLF when sending text only content. Fix dol_htmlwithnojs() +FIX: Bad picto on list of permission of a user when user not admin +FIX: bad timezone for the start/end date of an event +FIX: Better test on validity of compute field syntax with parenthesis +FIX: close #28279 +FIX: Count of virtual stock at Services and MoLine with disabled stock change (#28580) +FIX: disabled picto of menu must be greyed. +FIX: Don't display column when it's out of date (#28271) +FIX: duplicate with lines: 414-416 (#28358) +FIX: edit bank suggested for credit transfer payment in invoice setup +FIX: Error When cloning fourn price no default value for tva_tx (#28368) +FIX: fatal error Unsupported operand types when recording load payment +FIX: Fix create shipping with product who have negative stocks on warehouse but the negative stock transfer is allowed (#26217) +FIX: migration missing 2 columns in llx_resource and 1 in llx_user +FIX: missing trans +FIX: notification module: for supplier orders (any of the 3 triggers), user can choose an e-mail template in conf, but the conf is not used when sending the notification (#28216) +FIX: Not trancate the multicurrency rate shown on cards (even if the global MAIN_MAX_DECIMALS_SHOWN is set to 0) (#28211) +FIX: Option MAIN_DOC_USE_TIMING can be a string with date format +FIX: Payment on customer invoice - Remove accountid in url if empty for apply default value (#28156) +FIX: Pb in redirect of a website page in USEDOLIBARRSERVER mode +FIX: permission on payment file of a tax +FIX: PHP Warning: Undefined variable $lib (#28342) +FIX: PHP Warning: Undefined variable $mode (#28697) +FIX: Picto for mime +FIX: Picto in top menu +FIX: position of field in list of field in shipment list +FIX: postgresql error (#28542) +FIX: quote in sql request +FIX: Responsive on admin project +FIX: Shipment closing action has wrong value (#28174) +FIX: skip adding tab if user doesn't have permission (#28698) +FIX: some tooltips has disappeared on invoice action button +FIX: Special code is now transmitted by args only in order supplier (#28546) +FIX: Special code is now transmitted by args only in order supplier (#28619) +FIX: subscription must be editable when accounting isn't reconciled (#28469) +FIX: Translation for select (#28677) +FIX: upload odt files should not start/end with space +FIX: Value of field int = 0 from modulebuilder must not be set to null +FIX: Wrong currency shown in TakePOS payment page +FIX: #yogosha21416 + ***** ChangeLog for 19.0.0 compared to 18.0.0 ***** @@ -353,6 +427,7 @@ FIX: update price extrafield on propal card FIX: user filter in per user view of event list (#28049) FIX: use the currency for propal signature page + ***** ChangeLog for 18.0.4 compared to 18.0.3 ***** FIX: $this->newref already exists and could have been modified by trigger but we still use a local variable for the filesystem-based renaming FIX: 16.0 only, backport fix for SQL error on global search product @@ -541,7 +616,7 @@ FIX: url to check keyword not saved on partnership from public form FIX: when adding new times on a survey, all hours would be erased. -***** ChangeLog for 18.0.0 compared to 17.0.0 ***** +***** ChangeLog for 18.0.0 compared to 17.0 ***** For users: ---------- @@ -10048,7 +10123,7 @@ For developers: WARNING: - A lot of class files (*.class.php) has moved into subdirectories. So If you use or develop non official modules that includes Dolibarr classes, you will have to rename - path to thoose classes into the include function. + path to those classes into the include function. - Also, parameters of the "fetch()" method for class "User" has changed to reflect other fetch methods. - If you build a personalised themes, you must rename the style sheet into style.css.php. diff --git a/README.md b/README.md index f4087ec5a93..52b74a1fcdf 100644 --- a/README.md +++ b/README.md @@ -5,13 +5,13 @@ [![GitHub release](https://img.shields.io/github/v/release/Dolibarr/dolibarr)](https://github.com/Dolibarr/dolibarr) [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/5521/badge)](https://bestpractices.coreinfrastructure.org/projects/5521) -Dolibarr ERP & CRM is a modern software package that helps manage your organization's activity (contacts, suppliers, invoices, orders, stocks, agenda…). +Dolibarr ERP & CRM is a modern software package that helps manage your organization's activities (contacts, suppliers, invoices, orders, stocks, agenda…). -It's an Open Source Software suite (written in PHP with optional JavaScript enhancements) designed for small, medium or large companies, foundations and freelancers. +It's an Open-Source Software suite (written in PHP with optional JavaScript enhancements) designed for small, medium or large companies, foundations and freelancers. You can freely use, study, modify or distribute it according to its license. -You can use it as a standalone application or as a web application to access it from the Internet or a LAN. +You can use it as a standalone application or as a web application to access it from the Internet or from a LAN. Dolibarr has a large community ready to help you, free forums and [preferred partners ready to offer commercial support should you need it](https://partners.dolibarr.org) @@ -19,7 +19,7 @@ Dolibarr has a large community ready to help you, free forums and [preferred par ## LICENSE -Dolibarr is released under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version (GPL-3+). +Dolibarr is released under the terms of the GNU General Public License as published by the Free Software Foundation; either Version 3 of the License, or (at your option) any later version (GPL-3+). See the [COPYING](https://github.com/Dolibarr/dolibarr/blob/develop/COPYING) file for a full copy of the license. @@ -29,7 +29,7 @@ Other licenses apply for some included dependencies. See [COPYRIGHT](https://git ### Simple setup -If you have low technical skills and you're looking to install Dolibarr ERP/CRM in just a few clicks, you can use one of the packaged versions: +If you have low technical skills and you're looking to install Dolibarr ERP/CRM with just a few clicks, you can use one of the packaged versions: - [DoliWamp for Windows](https://wiki.dolibarr.org/index.php/Dolibarr_for_Windows_(DoliWamp)) - [DoliDeb for Debian](https://wiki.dolibarr.org/index.php/Dolibarr_for_Ubuntu_or_Debian) diff --git a/SECURITY.md b/SECURITY.md index 758abfc6fb4..02a015756cf 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -11,7 +11,9 @@ Security report are valid only on current stable version (see https://dolibarr.o To report a vulnerability, for a private report, you can: - Send your report on Vulnerability Disclosure Program (VDP) [https://app.yogosha.com/cvd/dolibarr/10VxeNx6Ui3rSEhAgX63US](https://app.yogosha.com/cvd/dolibarr/10VxeNx6Ui3rSEhAgX63US) (recommended for everybody) + - Or send an email to security@dolibarr.org with clear textual description of the report along with steps to reproduce the issue, include attachments such as screenshots or proof of concept code as necessary. ## Hunting vulnerabilities on Dolibarr @@ -102,3 +104,5 @@ Scope is the web application (backoffice) and the APIs. * SSL/TLS best practices * Invalid or missing SPF (Sender Policy Framework) records (Incomplete or missing SPF/DKIM/DMARC) * Physical or social engineering attempts or issues that require physical access to a victim’s computer/device +* Vulnerabilities of type XSS exploited by using javascript into a website page (with permission to edit website pages) or by using php code into a website page + using the permission to edit php code are not qualified, except if this allow to get higher privileges (being able to set javascript or php code is the expected behaviour). diff --git a/build/debian/apache/.htaccess b/build/debian/apache/.htaccess index 3c3d2e02683..67a70b47e51 100644 --- a/build/debian/apache/.htaccess +++ b/build/debian/apache/.htaccess @@ -8,7 +8,7 @@ Denied from all -# OPTIMIZE: To use cache on static pages (A259200 = 1 month, A7200 = 2 hours, A691600 = 8 days = recommanded for static resources). +# OPTIMIZE: To use cache on static pages (A259200 = 1 month, A7200 = 2 hours, A691600 = 8 days = recommended for static resources). # Note that you must also enable the module mod_expires. #ExpiresActive On #ExpiresByType image/x-icon A2592000 diff --git a/build/exe/doliwamp/Languages/MyCatalan.isl b/build/exe/doliwamp/Languages/MyCatalan.isl index cb1066b5f91..c2f8ad5791d 100644 --- a/build/exe/doliwamp/Languages/MyCatalan.isl +++ b/build/exe/doliwamp/Languages/MyCatalan.isl @@ -43,5 +43,5 @@ DoliWampWillStartApacheMysql=L'instal·lador DoliWamp intentarà iniciar o reini OldVersionFoundAndMoveInNew=S'ha trobat una versió antiga de base de dades i ha estat moguda per a ser utilitzada per la nova versió de Dolibarr OldVersionFoundButFailedToMoveInNew=S'ha trobat una versió antiga de base de dades, però no es pot moure per a ser utilitzada per la nova versió de Dolibarr -DLLMissing=La teva instal·lació windows no té el component "Microsoft Visual C++ Redistributable for Visual Studio 2015". Instal·la primer la versió de 32-bit (vcredist_x86.exe) (pots trobar-la a https://www.microsoft.com/en-us/download/) i reiniciar després la instal·lació/actualització de DoliWamp. +DLLMissing=La teva instal·lació windows no té el component "Microsoft Visual C++ Redistributable for Visual Studio 2017". Instal·la primer la versió de 32-bit (vcredist_x86.exe) (pots trobar-la a https://www.microsoft.com/en-us/download/) i reiniciar després la instal·lació/actualització de DoliWamp. ContinueAnyway=Continua igualment (el procés d'instal·lació podria fallar sense aquest prerequisit) diff --git a/build/exe/doliwamp/Languages/MyEnglish.isl b/build/exe/doliwamp/Languages/MyEnglish.isl index 2a6c8b9a4ba..566d4410334 100644 --- a/build/exe/doliwamp/Languages/MyEnglish.isl +++ b/build/exe/doliwamp/Languages/MyEnglish.isl @@ -44,5 +44,5 @@ DoliWampWillStartApacheMysql=DoliWamp installer will now start or restart Apache OldVersionFoundAndMoveInNew=An old database version has been found and moved to be used by the new Dolibarr version OldVersionFoundButFailedToMoveInNew=An old database version has been found but could not be moved to be used with the new Dolibarr version -DLLMissing=Your Windows installation is missing The "Microsoft Visual C++ Redistributable for Visual Studio 2015" component. Please install the 32-bit version (vcredist_x86.exe) first (you can find it at https://www.microsoft.com/en-us/download/) and restart DoliWamp installation/upgrade after. +DLLMissing=Your Windows installation is missing The "Microsoft Visual C++ Redistributable for Visual Studio 2017" component. Please install the 32-bit version (vcredist_x86.exe) first (you can find it at https://learn.microsoft.com/en-US/cpp/windows/latest-supported-vc-redist?view=msvc-170) and restart DoliWamp installation/upgrade after. ContinueAnyway=Continue anyway (install process may fail without this prerequisite) diff --git a/build/exe/doliwamp/Languages/MyFrench.isl b/build/exe/doliwamp/Languages/MyFrench.isl index 6c6294fb7c4..2fb684657a5 100644 --- a/build/exe/doliwamp/Languages/MyFrench.isl +++ b/build/exe/doliwamp/Languages/MyFrench.isl @@ -44,5 +44,5 @@ DoliWampWillStartApacheMysql=L'installeur DoliWamp va maintenant d OldVersionFoundAndMoveInNew=Une ancienne version de base a t trouve et dplace pour fonctionner avec la nouvelle version de Dolibarr. OldVersionFoundButFailedToMoveInNew=Une ancienne version de base a t trouve mais ne peut tre dplace pour tre utilise avec la nouvelle version de Dolibarr. -DLLMissing=L'installation de votre Windows est incomplte. Il manque le composant "Micrsoft Visual C++ Redistributable for Visual Studio 2015". Installer la version 32-bit (vcredist_x86.exe) d'abord (vous pourrez le trouver https://www.microsoft.com/fr-fr/download/) puis relancer l'installation de DoliWamp aprs. +DLLMissing=L'installation de votre Windows est incomplte. Il manque le composant "Micrsoft Visual C++ Redistributable for Visual Studio 2017". Installer la version 32-bit (vcredist_x86.exe) d'abord (vous pourrez le trouver https://www.microsoft.com/fr-fr/download/) puis relancer l'installation de DoliWamp aprs. ContinueAnyway=Continuer malgr tout (le process d'installaton chouera) diff --git a/build/exe/doliwamp/Languages/MyGerman.isl b/build/exe/doliwamp/Languages/MyGerman.isl index 132260b7273..7d7fa1662a8 100644 --- a/build/exe/doliwamp/Languages/MyGerman.isl +++ b/build/exe/doliwamp/Languages/MyGerman.isl @@ -43,5 +43,5 @@ DoliWampWillStartApacheMysql=Die DoliWamp-Installation wird nun starten oder Apa OldVersionFoundAndMoveInNew=Eine alte Datenbankversion wurde gefunden und verschoben, um von der neuen Dolibarr-Version verwendet zu werden. OldVersionFoundButFailedToMoveInNew=Eine alte Datenbankversion wurde gefunden, konnte jedoch nicht verschoben werden, um mit der neuen Dolibarr-Version verwendet zu werden. -DLLMissing=Your Windows installation is missing The "Micrsoft Visual C++ Redistributable for Visual Studio 2015" component. Please install the 32-bit version (vcredist_x86.exe) first (you can find it at https://www.microsoft.com/en-us/download/) and restart DoliWamp installation/upgrade after. +DLLMissing=Your Windows installation is missing The "Micrsoft Visual C++ Redistributable for Visual Studio 2017" component. Please install the 32-bit version (vcredist_x86.exe) first (you can find it at https://www.microsoft.com/en-us/download/) and restart DoliWamp installation/upgrade after. ContinueAnyway=Fahren Sie trotzdem fort (der Installationsvorgang kann ohne diese Voraussetzung fehlschlagen). diff --git a/build/exe/doliwamp/Languages/MySpanish.isl b/build/exe/doliwamp/Languages/MySpanish.isl index 6880a9263e1..4500e776672 100644 --- a/build/exe/doliwamp/Languages/MySpanish.isl +++ b/build/exe/doliwamp/Languages/MySpanish.isl @@ -43,5 +43,5 @@ DoliWampWillStartApacheMysql=El instalador DoliWamp intentará iniciar o reinici OldVersionFoundAndMoveInNew=Se ha encontrado una versión antigua de base de datos y ha sido movida para ser utilizada por la nueva versión de Dolibarr OldVersionFoundButFailedToMoveInNew=Se ha encontrado una versión antigua de base de datos, pero no se pudo mover para ser utilizada por la nueva versión de Dolibarr -DLLMissing=Su instalación Windows no tiene el componente "Microsoft Visual C++ Redistributable for Visual Studio 2015". Instale primero la versión de 32-bit (vcredist_x86.exe) (puedes encontrarlo en https://www.microsoft.com/en-us/download/) y reiniciar después la instalación/actualización de DoliWamp. +DLLMissing=Su instalación Windows no tiene el componente "Microsoft Visual C++ Redistributable for Visual Studio 2017". Instale primero la versión de 32-bit (vcredist_x86.exe) (puedes encontrarlo en https://www.microsoft.com/en-us/download/) y reiniciar después la instalación/actualización de DoliWamp. ContinueAnyway=Continua igualmente (el proceso de instalación podría fallar sin este prerequisito) diff --git a/build/exe/doliwamp/doliwamp.iss b/build/exe/doliwamp/doliwamp.iss index beeec222c2a..1a14058de68 100644 --- a/build/exe/doliwamp/doliwamp.iss +++ b/build/exe/doliwamp/doliwamp.iss @@ -100,9 +100,9 @@ Source: "build\exe\doliwamp\UsedPort.exe"; DestDir: "{app}\"; Flags: ignoreversi ; Apache, Php, Mysql ; Put here path of Wampserver applications -; Value OK: apache 2.4.51, php 7.3.33, mariadb10.6.5 (wampserver3.2.6_x64.exe) +; Value OK: apache 2.4.51, php 7.4.26, mariadb10.6.5 (wampserver3.2.6_x64.exe) Source: "C:\wamp64\bin\apache\apache2.4.51\*.*"; DestDir: "{app}\bin\apache\apache2.4.51"; Flags: ignoreversion recursesubdirs; Excludes: "php.ini,httpd.conf,wampserver.conf,*.log,*_log" -Source: "C:\wamp64\bin\php\php7.3.33\*.*"; DestDir: "{app}\bin\php\php7.3.33"; Flags: ignoreversion recursesubdirs; Excludes: "php.ini,phpForApache.ini,wampserver.conf,*.log,*_log" +Source: "C:\wamp64\bin\php\php7.4.26\*.*"; DestDir: "{app}\bin\php\php7.4.26"; Flags: ignoreversion recursesubdirs; Excludes: "php.ini,phpForApache.ini,wampserver.conf,*.log,*_log" Source: "C:\wamp64\bin\mariadb\mariadb10.6.5\*.*"; DestDir: "{app}\bin\mariadb\mariadb10.6.5"; Flags: ignoreversion recursesubdirs; Excludes: "my.ini,data\*,wampserver.conf,*.log,*_log,MySQLInstanceConfig.exe" ; Mysql data files (does not overwrite if exists) @@ -121,7 +121,7 @@ Source: "build\exe\doliwamp\dolibarr.conf.install"; DestDir: "{app}\alias"; Flag Source: "build\exe\doliwamp\httpd.conf.install"; DestDir: "{app}\bin\apache\apache2.4.51\conf"; Flags: ignoreversion; Source: "build\exe\doliwamp\my.ini.install"; DestDir: "{app}\bin\mysql\mysql5.0.45"; Flags: ignoreversion; Source: "build\exe\doliwamp\my.ini.install"; DestDir: "{app}\bin\mariadb\mariadb10.6.5"; Flags: ignoreversion; -Source: "build\exe\doliwamp\php.ini.install"; DestDir: "{app}\bin\php\php7.3.33"; Flags: ignoreversion; +Source: "build\exe\doliwamp\php.ini.install"; DestDir: "{app}\bin\php\php7.4.26"; Flags: ignoreversion; Source: "build\exe\doliwamp\index.php.install"; DestDir: "{app}\www"; Flags: ignoreversion; Source: "build\exe\doliwamp\install.forced.php.install"; DestDir: "{app}\www\dolibarr\htdocs\install"; Flags: ignoreversion; Source: "build\exe\doliwamp\openssl.conf"; DestDir: "{app}"; Flags: ignoreversion; @@ -228,7 +228,7 @@ begin //version des applis, a modifier pour chaque version de WampServer 2 apacheVersion := '2.4.51'; - phpVersion := '7.3.33' ; + phpVersion := '7.4.26' ; mysqlVersion := '10.6.5'; smtpServer := 'localhost'; diff --git a/build/makepack-howto.txt b/build/makepack-howto.txt index 654bca95256..674d6e2fd01 100644 --- a/build/makepack-howto.txt +++ b/build/makepack-howto.txt @@ -14,11 +14,11 @@ Prerequisites to build autoexe DoliWamp package from Linux (solution seems broke > Install InnoSetup For example by running isetup-5.5.8.exe (https://www.jrsoftware.org) https://files.jrsoftware.org/is/5/ > Install WampServer into "C:\wamp64" to have Apache, PHP and MariaDB - For example by running wampserver3.2.6_x64.exe (https://www.wampserver.com). + For example by running wampserver3.2.6_x64.exe (https://www.wampserver.com). See file build/exe/doliwamp.iss to know the doliwamp version currently setup. > Add path to ISCC into PATH windows var: Launch wine cmd, then regedit and add entry int HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment\PATH -> To build manually the .exe from Windows (running from makepack-dolibarr.pl script is however recommended), +> To build manually the .exe from Windows (running from makepack-dolibarr.pl script is however recommended), open file build/exe/doliwamp.iss and click on button "Compile". The .exe file will be build into directory build. @@ -29,12 +29,13 @@ Prerequisites to build autoexe DoliWamp package from Windows: > Install Perl for Windows (https://strawberryperl.com/) > Install isetup-5.5.8.exe (https://www.jrsoftware.org) -> Install WampServer-3.2.*-64.exe (Apache 2.4.51, PHP 7.3.33, MariaDB 10.6.5 for example. Version must match the values found into doliwamp.iss) +> Install Microsoft Visual C++ Redistributable 2017 (https://learn.microsoft.com/en-US/cpp/windows/latest-supported-vc-redist?view=msvc-170) +> Install WampServer-3.2.6-64.exe (Apache 2.4.51, PHP 7.4.26, MariaDB 10.6.5 for example. Version must match the values found into doliwamp.iss) > Install GIT for Windows (https://git-scm.com/ => You must choose option "Add Git bash profile", "Git commit as-is") -> Install Dolibarr current version: - git clone https://github.com/dolibarr/dolibarr or git clone --branch X.Y https://github.com/dolibarr/dolibarr +> Install Dolibarr current version: + git clone https://github.com/dolibarr/dolibarr or git clone --branch X.Y https://github.com/dolibarr/dolibarr -> Add the path of PHP (C:\wamp64\bin\php\php7.3.33) and InnoSetup (C:\Program Files (x86)\Inno Setup 5) into the %PATH% of Windows. +> Add the path of PHP (C:\wamp64\bin\php\php7.4.26) and InnoSetup (C:\Program Files (x86)\Inno Setup 5) into the %PATH% of Windows. > Create a config file c:\dolibarr\dolibarr\htdocs\conf\conf.php with content /tmp/aaa" To generate a changelog of a major new version x.y.0 (from a repo on branch x.y repo), you can do "cd ~/git/dolibarr_x.y; git log `diff -u <(git rev-list --first-parent x.(y-1).0) <(git rev-list --first-parent x.y.0) | sed -ne 's/^ //p' | head -1`.. --no-merges --pretty=short --oneline | sed -e "s/^[0-9a-z]* //" | grep -e '^FIX\|NEW' | sort -u | sed 's/FIXED:/FIX:/g' | sed 's/FIXED :/FIX:/g' | sed 's/FIX :/FIX:/g' | sed 's/FIX /FIX: /g' | sed 's/NEW :/NEW:/g' | sed 's/NEW /NEW: /g' > /tmp/aaa" To generate a changelog of a maintenance version x.y.z, you can do "cd ~/git/dolibarr_x.y; git log x.y.z-1.. --no-merges --pretty=short --oneline | sed -e "s/^[0-9a-z]* //" | grep -e '^FIX\|NEW' | sort -u | sed 's/FIXED:/FIX:/g' | sed 's/FIXED :/FIX:/g' | sed 's/FIX :/FIX:/g' | sed 's/FIX /FIX: /g' | sed 's/NEW :/NEW:/g' | sed 's/NEW /NEW: /g' > /tmp/aaa" @@ -69,7 +70,7 @@ Recopy the content of the output file into the file ChangeLog. ***** Actions to do a RELEASE ***** -This files describe steps made by Dolibarr packaging team to make a +This files describe steps made by Dolibarr packaging team to make a complete release of Dolibarr, step by step. - Check all files are committed. @@ -86,9 +87,9 @@ Recopy the content of the output file into the file ChangeLog. - Check content of built packages. -- Run makepack-dolibarr.pl again with option to publish files on +- Run makepack-dolibarr.pl again with option to publish files on dolibarr foundation server (Dir /home/dolibarr/wwwroot/files/stable on www.dolibarr.org). -- Run makepack-dolibarr.pl again with option to publish files on +- Run makepack-dolibarr.pl again with option to publish files on sourceforge. This will also add official tag. - Edit symbolic links in directory "/home/dolibarr/wwwroot/files/stable/xxx" on server to point to new files (used by some web sites). diff --git a/dev/initdemo/initdemopassword.sh b/dev/initdemo/initdemopassword.sh index e2929441e76..b70c97a831e 100755 --- a/dev/initdemo/initdemopassword.sh +++ b/dev/initdemo/initdemopassword.sh @@ -145,12 +145,16 @@ fi # ---------------------------- run sql file +if [ "x$port" != "x0" ] +then + export Pport="-P$port" +fi if [ "x$passwd" != "x" ] then export passwd="-p$passwd" fi -#echo "mysql -P$port -u$admin $passwd $base < $mydir/$dumpfile" -#mysql -P$port -u$admin $passwd $base < $mydir/$dumpfile +#echo "mysql $Pport -u$admin $passwd $base < $mydir/$dumpfile" +#mysql $Pport -u$admin $passwd $base < $mydir/$dumpfile if [ "x${demopasshash}" != "xpassword_hash" ] then @@ -162,19 +166,19 @@ else fi #rm /tmp/tmp.php -echo "echo \"UPDATE llx_user SET pass_crypted = '$newpass' WHERE login = '$demologin';\" | mysql -P$port $base" -echo "UPDATE llx_user SET pass_crypted = '$newpass' WHERE login = '$demologin';" | mysql -P$port $base +echo "echo \"UPDATE llx_user SET pass_crypted = '$newpass' WHERE login = '$demologin';\" | mysql $Pport $base" +echo "UPDATE llx_user SET pass_crypted = '$newpass' WHERE login = '$demologin';" | mysql $Pport $base export res=$? if [ $res -ne 0 ]; then - echo "Error to execute sql with mysql -P$port -u$admin -p***** $base" + echo "Error to execute sql with mysql $Pport -u$admin -p***** $base" exit fi if [ -s "$mydir/initdemopostsql.sql" ]; then echo A file initdemopostsql.sql was found, we execute it. - echo "mysql -P$port $base < \"$mydir/initdemopostsql.sql\"" - mysql -P$port $base < "$mydir/initdemopostsql.sql" + echo "mysql $Pport $base < \"$mydir/initdemopostsql.sql\"" + mysql $Pport $base < "$mydir/initdemopostsql.sql" else echo No file initdemopostsql.sql found, so no extra sql action done. fi diff --git a/dev/initdemo/mysqldump_dolibarr_19.0.0.sql b/dev/initdemo/mysqldump_dolibarr_19.0.0.sql index 83d4645572a..78a4358879e 100644 --- a/dev/initdemo/mysqldump_dolibarr_19.0.0.sql +++ b/dev/initdemo/mysqldump_dolibarr_19.0.0.sql @@ -1389,7 +1389,7 @@ CREATE TABLE `llx_c_action_trigger` ( LOCK TABLES `llx_c_action_trigger` WRITE; /*!40000 ALTER TABLE `llx_c_action_trigger` DISABLE KEYS */; -INSERT INTO `llx_c_action_trigger` VALUES (131,'COMPANY_SENTBYMAIL','Mails sent from third party card','Executed when you send email from third party card','societe',1,NULL),(132,'COMPANY_CREATE','Third party created','Executed when a third party is created','societe',1,NULL),(133,'PROPAL_VALIDATE','Customer proposal validated','Executed when a commercial proposal is validated','propal',2,NULL),(134,'PROPAL_SENTBYMAIL','Commercial proposal sent by mail','Executed when a commercial proposal is sent by mail','propal',3,NULL),(135,'ORDER_VALIDATE','Customer order validate','Executed when a customer order is validated','commande',4,NULL),(136,'ORDER_CLOSE','Customer order classify delivered','Executed when a customer order is set delivered','commande',5,NULL),(137,'ORDER_CLASSIFY_BILLED','Customer order classify billed','Executed when a customer order is set to billed','commande',5,NULL),(138,'ORDER_CANCEL','Customer order canceled','Executed when a customer order is canceled','commande',5,NULL),(139,'ORDER_SENTBYMAIL','Customer order sent by mail','Executed when a customer order is sent by mail ','commande',5,NULL),(140,'BILL_VALIDATE','Customer invoice validated','Executed when a customer invoice is approved','facture',6,NULL),(141,'BILL_PAYED','Customer invoice payed','Executed when a customer invoice is payed','facture',7,NULL),(142,'BILL_CANCEL','Customer invoice canceled','Executed when a customer invoice is conceled','facture',8,NULL),(143,'BILL_SENTBYMAIL','Customer invoice sent by mail','Executed when a customer invoice is sent by mail','facture',9,NULL),(144,'BILL_UNVALIDATE','Customer invoice unvalidated','Executed when a customer invoice status set back to draft','facture',9,NULL),(145,'ORDER_SUPPLIER_VALIDATE','Supplier order validated','Executed when a supplier order is validated','order_supplier',11,NULL),(146,'ORDER_SUPPLIER_APPROVE','Supplier order request approved','Executed when a supplier order is approved','order_supplier',12,NULL),(147,'ORDER_SUPPLIER_REFUSE','Supplier order request refused','Executed when a supplier order is refused','order_supplier',13,NULL),(148,'ORDER_SUPPLIER_SENTBYMAIL','Supplier order sent by mail','Executed when a supplier order is sent by mail','order_supplier',14,NULL),(149,'BILL_SUPPLIER_VALIDATE','Supplier invoice validated','Executed when a supplier invoice is validated','invoice_supplier',15,NULL),(150,'BILL_SUPPLIER_PAYED','Supplier invoice payed','Executed when a supplier invoice is payed','invoice_supplier',16,NULL),(151,'BILL_SUPPLIER_SENTBYMAIL','Supplier invoice sent by mail','Executed when a supplier invoice is sent by mail','invoice_supplier',17,NULL),(152,'BILL_SUPPLIER_CANCELED','Supplier invoice cancelled','Executed when a supplier invoice is cancelled','invoice_supplier',17,NULL),(153,'CONTRACT_VALIDATE','Contract validated','Executed when a contract is validated','contrat',18,NULL),(154,'SHIPPING_VALIDATE','Shipping validated','Executed when a shipping is validated','shipping',20,NULL),(155,'SHIPPING_SENTBYMAIL','Shipping sent by mail','Executed when a shipping is sent by mail','shipping',21,NULL),(156,'MEMBER_VALIDATE','Member validated','Executed when a member is validated','member',22,NULL),(158,'MEMBER_RESILIATE','Member resiliated','Executed when a member is resiliated','member',24,NULL),(159,'MEMBER_MODIFY','Member modified','Executed when a member is modified','member',24,NULL),(160,'MEMBER_DELETE','Member deleted','Executed when a member is deleted','member',25,NULL),(161,'FICHINTER_VALIDATE','Intervention validated','Executed when a intervention is validated','ficheinter',19,NULL),(162,'FICHINTER_CLASSIFY_BILLED','Intervention set billed','Executed when a intervention is set to billed (when option FICHINTER_CLASSIFY_BILLED is set)','ficheinter',19,NULL),(163,'FICHINTER_CLASSIFY_UNBILLED','Intervention set unbilled','Executed when a intervention is set to unbilled (when option FICHINTER_CLASSIFY_BILLED is set)','ficheinter',19,NULL),(164,'FICHINTER_REOPEN','Intervention opened','Executed when a intervention is re-opened','ficheinter',19,NULL),(165,'FICHINTER_SENTBYMAIL','Intervention sent by mail','Executed when a intervention is sent by mail','ficheinter',19,NULL),(166,'PROJECT_CREATE','Project creation','Executed when a project is created','project',140,NULL),(167,'PROPAL_CLOSE_SIGNED','Customer proposal closed signed','Executed when a customer proposal is closed signed','propal',2,NULL),(168,'PROPAL_CLOSE_REFUSED','Customer proposal closed refused','Executed when a customer proposal is closed refused','propal',2,NULL),(169,'PROPAL_CLASSIFY_BILLED','Customer proposal set billed','Executed when a customer proposal is set to billed','propal',2,NULL),(170,'TASK_CREATE','Task created','Executed when a project task is created','project',35,NULL),(171,'TASK_MODIFY','Task modified','Executed when a project task is modified','project',36,NULL),(172,'TASK_DELETE','Task deleted','Executed when a project task is deleted','project',37,NULL),(173,'BILL_SUPPLIER_UNVALIDATE','Supplier invoice unvalidated','Executed when a supplier invoice status is set back to draft','invoice_supplier',15,NULL),(174,'PROJECT_MODIFY','Project modified','Executed when a project is modified','project',141,NULL),(175,'PROJECT_DELETE','Project deleted','Executed when a project is deleted','project',142,NULL),(176,'ORDER_SUPPLIER_CREATE','Supplier order validated','Executed when a supplier order is validated','order_supplier',11,NULL),(177,'ORDER_SUPPLIER_SUBMIT','Supplier order request submited','Executed when a supplier order is approved','order_supplier',12,NULL),(178,'ORDER_SUPPLIER_RECEIVE','Supplier order request received','Executed when a supplier order is received','order_supplier',12,NULL),(179,'ORDER_SUPPLIER_CLASSIFY_BILLED','Supplier order set billed','Executed when a supplier order is set as billed','order_supplier',14,NULL),(180,'PRODUCT_CREATE','Product or service created','Executed when a product or sevice is created','product',30,NULL),(181,'PRODUCT_MODIFY','Product or service modified','Executed when a product or sevice is modified','product',30,NULL),(182,'PRODUCT_DELETE','Product or service deleted','Executed when a product or sevice is deleted','product',30,NULL),(183,'EXPENSE_REPORT_CREATE','Expense report created','Executed when an expense report is created','expensereport',201,NULL),(185,'EXPENSE_REPORT_VALIDATE','Expense report validated','Executed when an expense report is validated','expensereport',202,NULL),(186,'EXPENSE_REPORT_APPROVE','Expense report approved','Executed when an expense report is approved','expensereport',203,NULL),(187,'EXPENSE_REPORT_PAID','Expense report billed','Executed when an expense report is set as billed','expensereport',204,NULL),(192,'HOLIDAY_CREATE','Leave request created','Executed when a leave request is created','holiday',221,NULL),(193,'HOLIDAY_VALIDATE','Leave request validated','Executed when a leave request is validated','holiday',222,NULL),(194,'HOLIDAY_APPROVE','Leave request approved','Executed when a leave request is approved','holiday',223,NULL),(210,'MEMBER_SENTBYMAIL','Mails sent from member card','Executed when you send email from member card','member',23,NULL),(211,'CONTRACT_SENTBYMAIL','Contract sent by mail','Executed when a contract is sent by mail','contrat',18,NULL),(212,'PROPOSAL_SUPPLIER_VALIDATE','Price request validated','Executed when a commercial proposal is validated','proposal_supplier',10,NULL),(213,'PROPOSAL_SUPPLIER_SENTBYMAIL','Price request sent by mail','Executed when a commercial proposal is sent by mail','proposal_supplier',10,NULL),(214,'PROPOSAL_SUPPLIER_CLOSE_SIGNED','Price request closed signed','Executed when a customer proposal is closed signed','proposal_supplier',10,NULL),(215,'PROPOSAL_SUPPLIER_CLOSE_REFUSED','Price request closed refused','Executed when a customer proposal is closed refused','proposal_supplier',10,NULL),(216,'MEMBER_SUBSCRIPTION_CREATE','Member subscribtion recorded','Executed when a member subscribtion is deleted','member',24,NULL),(217,'MEMBER_SUBSCRIPTION_MODIFY','Member subscribtion modified','Executed when a member subscribtion is modified','member',24,NULL),(218,'MEMBER_SUBSCRIPTION_DELETE','Member subscribtion deleted','Executed when a member subscribtion is deleted','member',24,NULL),(225,'COMPANY_DELETE','Third party deleted','Executed when you delete third party','societe',1,NULL),(226,'PROPAL_DELETE','Customer proposal deleted','Executed when a customer proposal is deleted','propal',2,NULL),(227,'ORDER_DELETE','Customer order deleted','Executed when a customer order is deleted','commande',5,NULL),(228,'BILL_DELETE','Customer invoice deleted','Executed when a customer invoice is deleted','facture',9,NULL),(229,'PROPOSAL_SUPPLIER_DELETE','Price request deleted','Executed when a customer proposal delete','proposal_supplier',10,NULL),(230,'ORDER_SUPPLIER_DELETE','Supplier order deleted','Executed when a supplier order is deleted','order_supplier',14,NULL),(231,'BILL_SUPPLIER_DELETE','Supplier invoice deleted','Executed when a supplier invoice is deleted','invoice_supplier',17,NULL),(232,'CONTRACT_DELETE','Contract deleted','Executed when a contract is deleted','contrat',18,NULL),(233,'FICHINTER_DELETE','Intervention is deleted','Executed when a intervention is deleted','ficheinter',35,NULL),(234,'EXPENSE_REPORT_DELETE','Expense report deleted','Executed when an expense report is deleted','expensereport',204,NULL),(249,'TICKET_CREATE','Ticket created','Executed when a ticket is created','ticket',161,NULL),(250,'TICKET_MODIFY','Ticket modified','Executed when a ticket is modified','ticket',163,NULL),(251,'TICKET_ASSIGNED','Ticket assigned','Executed when a ticket is assigned to another user','ticket',164,NULL),(252,'TICKET_CLOSE','Ticket closed','Executed when a ticket is closed','ticket',165,NULL),(253,'TICKET_SENTBYMAIL','Ticket message sent by email','Executed when a message is sent from the ticket record','ticket',166,NULL),(254,'TICKET_DELETE','Ticket deleted','Executed when a ticket is deleted','ticket',167,NULL),(261,'USER_SENTBYMAIL','Email sent','Executed when an email is sent from user card','user',300,NULL),(262,'BOM_VALIDATE','BOM validated','Executed when a BOM is validated','bom',650,NULL),(263,'BOM_UNVALIDATE','BOM unvalidated','Executed when a BOM is unvalidated','bom',651,NULL),(264,'BOM_CLOSE','BOM disabled','Executed when a BOM is disabled','bom',652,NULL),(265,'BOM_REOPEN','BOM reopen','Executed when a BOM is re-open','bom',653,NULL),(266,'BOM_DELETE','BOM deleted','Executed when a BOM deleted','bom',654,NULL),(351,'MRP_MO_VALIDATE','MO validated','Executed when a MO is validated','bom',660,NULL),(352,'MRP_MO_PRODUCED','MO produced','Executed when a MO is produced','bom',661,NULL),(353,'MRP_MO_DELETE','MO deleted','Executed when a MO is deleted','bom',662,NULL),(354,'MRP_MO_CANCEL','MO canceled','Executed when a MO is canceled','bom',663,NULL),(365,'CONTACT_CREATE','Contact address created','Executed when a contact is created','contact',50,NULL),(366,'CONTACT_SENTBYMAIL','Mails sent from third party card','Executed when you send email from contact adress card','contact',51,NULL),(367,'CONTACT_DELETE','Contact address deleted','Executed when a contact is deleted','contact',52,NULL),(368,'RECRUITMENTJOBPOSITION_CREATE','Job created','Executed when a job is created','recruitment',7500,NULL),(369,'RECRUITMENTJOBPOSITION_MODIFY','Job modified','Executed when a job is modified','recruitment',7502,NULL),(370,'RECRUITMENTJOBPOSITION_SENTBYMAIL','Mails sent from job record','Executed when you send email from job record','recruitment',7504,NULL),(371,'RECRUITMENTJOBPOSITION_DELETE','Job deleted','Executed when a job is deleted','recruitment',7506,NULL),(372,'RECRUITMENTCANDIDATURE_CREATE','Candidature created','Executed when a candidature is created','recruitment',7510,NULL),(373,'RECRUITMENTCANDIDATURE_MODIFY','Candidature modified','Executed when a candidature is modified','recruitment',7512,NULL),(374,'RECRUITMENTCANDIDATURE_SENTBYMAIL','Mails sent from candidature record','Executed when you send email from candidature record','recruitment',7514,NULL),(375,'RECRUITMENTCANDIDATURE_DELETE','Candidature deleted','Executed when a candidature is deleted','recruitment',7516,NULL),(392,'COMPANY_MODIFY','Third party update','Executed when you update third party','societe',1,NULL),(393,'CONTACT_MODIFY','Contact address update','Executed when a contact is updated','contact',51,NULL),(394,'ORDER_SUPPLIER_CANCEL','Supplier order request canceled','Executed when a supplier order is canceled','order_supplier',13,NULL),(395,'MEMBER_EXCLUDE','Member excluded','Executed when a member is excluded','member',27,NULL),(396,'USER_CREATE','User created','Executed when a user is created','user',301,NULL),(397,'USER_MODIFY','User update','Executed when a user is updated','user',302,NULL),(398,'USER_DELETE','User update','Executed when a user is deleted','user',303,NULL),(399,'USER_NEW_PASSWORD','User update','Executed when a user is change password','user',304,NULL),(400,'USER_ENABLEDISABLE','User update','Executed when a user is enable or disable','user',305,NULL),(402,'HOLIDAY_MODIFY','Holiday modified','Executed when a holiday is modified','holiday',801,NULL),(405,'HOLIDAY_CANCEL','Holiday canceled','Executed when a holiday is canceled','holiday',802,NULL),(406,'HOLIDAY_DELETE','Holiday deleted','Executed when a holiday is deleted','holiday',804,NULL),(407,'PROPAL_MODIFY','Customer proposal modified','Executed when a customer proposal is modified','propal',2,NULL),(408,'ORDER_MODIFY','Customer order modified','Executed when a customer order is set modified','commande',5,NULL),(409,'BILL_MODIFY','Customer invoice modified','Executed when a customer invoice is modified','facture',7,NULL),(410,'PROPOSAL_SUPPLIER_MODIFY','Price request modified','Executed when a commercial proposal is modified','proposal_supplier',10,NULL),(411,'ORDER_SUPPLIER_MODIFY','Supplier order request modified','Executed when a supplier order is modified','order_supplier',13,NULL),(412,'BILL_SUPPLIER_MODIFY','Supplier invoice modified','Executed when a supplier invoice is modified','invoice_supplier',15,NULL),(413,'CONTRACT_MODIFY','Contract modified','Executed when a contract is modified','contrat',18,NULL),(414,'SHIPPING_MODIFY','Shipping modified','Executed when a shipping is modified','shipping',20,NULL),(415,'FICHINTER_MODIFY','Intervention modify','Executed when a intervention is modify','ficheinter',30,NULL),(417,'EXPENSE_REPORT_MODIFY','Expense report modified','Executed when an expense report is modified','expensereport',202,NULL),(455,'PROJECT_SENTBYMAIL','Project sent by mail','Executed when a project is sent by email','project',144,NULL),(511,'SHIPPING_DELETE','Shipping sent is deleted','Executed when a shipping is deleted','shipping',21,NULL),(512,'RECEPTION_VALIDATE','Reception validated','Executed when a reception is validated','reception',22,NULL),(513,'RECEPTION_SENTBYMAIL','Reception sent by mail','Executed when a reception is sent by mail','reception',22,NULL),(543,'PROJECT_VALIDATE','Project validation','Executed when a project is validated','project',141,NULL),(584,'ACTION_CREATE','Action added','Executed when an action is added to the agenda','agenda',700,NULL),(591,'BILLREC_CREATE','Template invoices created','Executed when a Template invoices is created','facturerec',900,NULL),(592,'BILLREC_MODIFY','Template invoices update','Executed when a Template invoices is updated','facturerec',901,NULL),(593,'BILLREC_DELETE','Template invoices deleted','Executed when a Template invoices is deleted','facturerec',902,NULL),(594,'BILLREC_AUTOCREATEBILL','Template invoices use to create invoices with auto batch','Executed when a Template invoices is use to create invoice with auto batch','facturerec',903,NULL),(875,'PARTNERSHIP_CREATE','Partnership created','Executed when a partnership is created','partnership',58000,NULL),(876,'PARTNERSHIP_MODIFY','Partnership modified','Executed when a partnership is modified','partnership',58002,NULL),(877,'PARTNERSHIP_SENTBYMAIL','Mails sent from partnership file','Executed when you send email from partnership file','partnership',58004,NULL),(878,'PARTNERSHIP_DELETE','Partnership deleted','Executed when a partnership is deleted','partnership',58006,NULL),(879,'PROJECT_CLOSE','Project closed','Executed when a project is closed','project',145,NULL),(881,'COMPANY_RIB_CREATE','Third party payment information created','Executed when a third party payment information is created','societe',1,NULL),(882,'COMPANY_RIB_MODIFY','Third party payment information updated','Executed when a third party payment information is updated','societe',1,NULL),(883,'COMPANY_RIB_DELETE','Third party payment information deleted','Executed when a third party payment information is deleted','societe',1,NULL),(884,'FICHINTER_CLOSE','Intervention is done','Executed when a intervention is done','ficheinter',36,NULL); +INSERT INTO `llx_c_action_trigger` VALUES (131,'COMPANY_SENTBYMAIL','Mails sent from third party card','Executed when you send email from third party card','societe',1,NULL),(132,'COMPANY_CREATE','Third party created','Executed when a third party is created','societe',1,NULL),(133,'PROPAL_VALIDATE','Customer proposal validated','Executed when a commercial proposal is validated','propal',2,NULL),(134,'PROPAL_SENTBYMAIL','Commercial proposal sent by mail','Executed when a commercial proposal is sent by mail','propal',3,NULL),(135,'ORDER_VALIDATE','Customer order validate','Executed when a customer order is validated','commande',4,NULL),(136,'ORDER_CLOSE','Customer order classify delivered','Executed when a customer order is set delivered','commande',5,NULL),(137,'ORDER_CLASSIFY_BILLED','Customer order classify billed','Executed when a customer order is set to billed','commande',5,NULL),(138,'ORDER_CANCEL','Customer order canceled','Executed when a customer order is canceled','commande',5,NULL),(139,'ORDER_SENTBYMAIL','Customer order sent by mail','Executed when a customer order is sent by mail ','commande',5,NULL),(140,'BILL_VALIDATE','Customer invoice validated','Executed when a customer invoice is approved','facture',6,NULL),(141,'BILL_PAYED','Customer invoice payed','Executed when a customer invoice is payed','facture',7,NULL),(142,'BILL_CANCEL','Customer invoice canceled','Executed when a customer invoice is canceled','facture',8,NULL),(143,'BILL_SENTBYMAIL','Customer invoice sent by mail','Executed when a customer invoice is sent by mail','facture',9,NULL),(144,'BILL_UNVALIDATE','Customer invoice unvalidated','Executed when a customer invoice status set back to draft','facture',9,NULL),(145,'ORDER_SUPPLIER_VALIDATE','Supplier order validated','Executed when a supplier order is validated','order_supplier',11,NULL),(146,'ORDER_SUPPLIER_APPROVE','Supplier order request approved','Executed when a supplier order is approved','order_supplier',12,NULL),(147,'ORDER_SUPPLIER_REFUSE','Supplier order request refused','Executed when a supplier order is refused','order_supplier',13,NULL),(148,'ORDER_SUPPLIER_SENTBYMAIL','Supplier order sent by mail','Executed when a supplier order is sent by mail','order_supplier',14,NULL),(149,'BILL_SUPPLIER_VALIDATE','Supplier invoice validated','Executed when a supplier invoice is validated','invoice_supplier',15,NULL),(150,'BILL_SUPPLIER_PAYED','Supplier invoice payed','Executed when a supplier invoice is payed','invoice_supplier',16,NULL),(151,'BILL_SUPPLIER_SENTBYMAIL','Supplier invoice sent by mail','Executed when a supplier invoice is sent by mail','invoice_supplier',17,NULL),(152,'BILL_SUPPLIER_CANCELED','Supplier invoice cancelled','Executed when a supplier invoice is cancelled','invoice_supplier',17,NULL),(153,'CONTRACT_VALIDATE','Contract validated','Executed when a contract is validated','contrat',18,NULL),(154,'SHIPPING_VALIDATE','Shipping validated','Executed when a shipping is validated','shipping',20,NULL),(155,'SHIPPING_SENTBYMAIL','Shipping sent by mail','Executed when a shipping is sent by mail','shipping',21,NULL),(156,'MEMBER_VALIDATE','Member validated','Executed when a member is validated','member',22,NULL),(158,'MEMBER_RESILIATE','Member resiliated','Executed when a member is resiliated','member',24,NULL),(159,'MEMBER_MODIFY','Member modified','Executed when a member is modified','member',24,NULL),(160,'MEMBER_DELETE','Member deleted','Executed when a member is deleted','member',25,NULL),(161,'FICHINTER_VALIDATE','Intervention validated','Executed when a intervention is validated','ficheinter',19,NULL),(162,'FICHINTER_CLASSIFY_BILLED','Intervention set billed','Executed when a intervention is set to billed (when option FICHINTER_CLASSIFY_BILLED is set)','ficheinter',19,NULL),(163,'FICHINTER_CLASSIFY_UNBILLED','Intervention set unbilled','Executed when a intervention is set to unbilled (when option FICHINTER_CLASSIFY_BILLED is set)','ficheinter',19,NULL),(164,'FICHINTER_REOPEN','Intervention opened','Executed when a intervention is re-opened','ficheinter',19,NULL),(165,'FICHINTER_SENTBYMAIL','Intervention sent by mail','Executed when a intervention is sent by mail','ficheinter',19,NULL),(166,'PROJECT_CREATE','Project creation','Executed when a project is created','project',140,NULL),(167,'PROPAL_CLOSE_SIGNED','Customer proposal closed signed','Executed when a customer proposal is closed signed','propal',2,NULL),(168,'PROPAL_CLOSE_REFUSED','Customer proposal closed refused','Executed when a customer proposal is closed refused','propal',2,NULL),(169,'PROPAL_CLASSIFY_BILLED','Customer proposal set billed','Executed when a customer proposal is set to billed','propal',2,NULL),(170,'TASK_CREATE','Task created','Executed when a project task is created','project',35,NULL),(171,'TASK_MODIFY','Task modified','Executed when a project task is modified','project',36,NULL),(172,'TASK_DELETE','Task deleted','Executed when a project task is deleted','project',37,NULL),(173,'BILL_SUPPLIER_UNVALIDATE','Supplier invoice unvalidated','Executed when a supplier invoice status is set back to draft','invoice_supplier',15,NULL),(174,'PROJECT_MODIFY','Project modified','Executed when a project is modified','project',141,NULL),(175,'PROJECT_DELETE','Project deleted','Executed when a project is deleted','project',142,NULL),(176,'ORDER_SUPPLIER_CREATE','Supplier order validated','Executed when a supplier order is validated','order_supplier',11,NULL),(177,'ORDER_SUPPLIER_SUBMIT','Supplier order request submited','Executed when a supplier order is approved','order_supplier',12,NULL),(178,'ORDER_SUPPLIER_RECEIVE','Supplier order request received','Executed when a supplier order is received','order_supplier',12,NULL),(179,'ORDER_SUPPLIER_CLASSIFY_BILLED','Supplier order set billed','Executed when a supplier order is set as billed','order_supplier',14,NULL),(180,'PRODUCT_CREATE','Product or service created','Executed when a product or sevice is created','product',30,NULL),(181,'PRODUCT_MODIFY','Product or service modified','Executed when a product or sevice is modified','product',30,NULL),(182,'PRODUCT_DELETE','Product or service deleted','Executed when a product or sevice is deleted','product',30,NULL),(183,'EXPENSE_REPORT_CREATE','Expense report created','Executed when an expense report is created','expensereport',201,NULL),(185,'EXPENSE_REPORT_VALIDATE','Expense report validated','Executed when an expense report is validated','expensereport',202,NULL),(186,'EXPENSE_REPORT_APPROVE','Expense report approved','Executed when an expense report is approved','expensereport',203,NULL),(187,'EXPENSE_REPORT_PAID','Expense report billed','Executed when an expense report is set as billed','expensereport',204,NULL),(192,'HOLIDAY_CREATE','Leave request created','Executed when a leave request is created','holiday',221,NULL),(193,'HOLIDAY_VALIDATE','Leave request validated','Executed when a leave request is validated','holiday',222,NULL),(194,'HOLIDAY_APPROVE','Leave request approved','Executed when a leave request is approved','holiday',223,NULL),(210,'MEMBER_SENTBYMAIL','Mails sent from member card','Executed when you send email from member card','member',23,NULL),(211,'CONTRACT_SENTBYMAIL','Contract sent by mail','Executed when a contract is sent by mail','contrat',18,NULL),(212,'PROPOSAL_SUPPLIER_VALIDATE','Price request validated','Executed when a commercial proposal is validated','proposal_supplier',10,NULL),(213,'PROPOSAL_SUPPLIER_SENTBYMAIL','Price request sent by mail','Executed when a commercial proposal is sent by mail','proposal_supplier',10,NULL),(214,'PROPOSAL_SUPPLIER_CLOSE_SIGNED','Price request closed signed','Executed when a customer proposal is closed signed','proposal_supplier',10,NULL),(215,'PROPOSAL_SUPPLIER_CLOSE_REFUSED','Price request closed refused','Executed when a customer proposal is closed refused','proposal_supplier',10,NULL),(216,'MEMBER_SUBSCRIPTION_CREATE','Member subscribtion recorded','Executed when a member subscribtion is deleted','member',24,NULL),(217,'MEMBER_SUBSCRIPTION_MODIFY','Member subscribtion modified','Executed when a member subscribtion is modified','member',24,NULL),(218,'MEMBER_SUBSCRIPTION_DELETE','Member subscribtion deleted','Executed when a member subscribtion is deleted','member',24,NULL),(225,'COMPANY_DELETE','Third party deleted','Executed when you delete third party','societe',1,NULL),(226,'PROPAL_DELETE','Customer proposal deleted','Executed when a customer proposal is deleted','propal',2,NULL),(227,'ORDER_DELETE','Customer order deleted','Executed when a customer order is deleted','commande',5,NULL),(228,'BILL_DELETE','Customer invoice deleted','Executed when a customer invoice is deleted','facture',9,NULL),(229,'PROPOSAL_SUPPLIER_DELETE','Price request deleted','Executed when a customer proposal delete','proposal_supplier',10,NULL),(230,'ORDER_SUPPLIER_DELETE','Supplier order deleted','Executed when a supplier order is deleted','order_supplier',14,NULL),(231,'BILL_SUPPLIER_DELETE','Supplier invoice deleted','Executed when a supplier invoice is deleted','invoice_supplier',17,NULL),(232,'CONTRACT_DELETE','Contract deleted','Executed when a contract is deleted','contrat',18,NULL),(233,'FICHINTER_DELETE','Intervention is deleted','Executed when a intervention is deleted','ficheinter',35,NULL),(234,'EXPENSE_REPORT_DELETE','Expense report deleted','Executed when an expense report is deleted','expensereport',204,NULL),(249,'TICKET_CREATE','Ticket created','Executed when a ticket is created','ticket',161,NULL),(250,'TICKET_MODIFY','Ticket modified','Executed when a ticket is modified','ticket',163,NULL),(251,'TICKET_ASSIGNED','Ticket assigned','Executed when a ticket is assigned to another user','ticket',164,NULL),(252,'TICKET_CLOSE','Ticket closed','Executed when a ticket is closed','ticket',165,NULL),(253,'TICKET_SENTBYMAIL','Ticket message sent by email','Executed when a message is sent from the ticket record','ticket',166,NULL),(254,'TICKET_DELETE','Ticket deleted','Executed when a ticket is deleted','ticket',167,NULL),(261,'USER_SENTBYMAIL','Email sent','Executed when an email is sent from user card','user',300,NULL),(262,'BOM_VALIDATE','BOM validated','Executed when a BOM is validated','bom',650,NULL),(263,'BOM_UNVALIDATE','BOM unvalidated','Executed when a BOM is unvalidated','bom',651,NULL),(264,'BOM_CLOSE','BOM disabled','Executed when a BOM is disabled','bom',652,NULL),(265,'BOM_REOPEN','BOM reopen','Executed when a BOM is re-open','bom',653,NULL),(266,'BOM_DELETE','BOM deleted','Executed when a BOM deleted','bom',654,NULL),(351,'MRP_MO_VALIDATE','MO validated','Executed when a MO is validated','bom',660,NULL),(352,'MRP_MO_PRODUCED','MO produced','Executed when a MO is produced','bom',661,NULL),(353,'MRP_MO_DELETE','MO deleted','Executed when a MO is deleted','bom',662,NULL),(354,'MRP_MO_CANCEL','MO canceled','Executed when a MO is canceled','bom',663,NULL),(365,'CONTACT_CREATE','Contact address created','Executed when a contact is created','contact',50,NULL),(366,'CONTACT_SENTBYMAIL','Mails sent from third party card','Executed when you send email from contact adress card','contact',51,NULL),(367,'CONTACT_DELETE','Contact address deleted','Executed when a contact is deleted','contact',52,NULL),(368,'RECRUITMENTJOBPOSITION_CREATE','Job created','Executed when a job is created','recruitment',7500,NULL),(369,'RECRUITMENTJOBPOSITION_MODIFY','Job modified','Executed when a job is modified','recruitment',7502,NULL),(370,'RECRUITMENTJOBPOSITION_SENTBYMAIL','Mails sent from job record','Executed when you send email from job record','recruitment',7504,NULL),(371,'RECRUITMENTJOBPOSITION_DELETE','Job deleted','Executed when a job is deleted','recruitment',7506,NULL),(372,'RECRUITMENTCANDIDATURE_CREATE','Candidature created','Executed when a candidature is created','recruitment',7510,NULL),(373,'RECRUITMENTCANDIDATURE_MODIFY','Candidature modified','Executed when a candidature is modified','recruitment',7512,NULL),(374,'RECRUITMENTCANDIDATURE_SENTBYMAIL','Mails sent from candidature record','Executed when you send email from candidature record','recruitment',7514,NULL),(375,'RECRUITMENTCANDIDATURE_DELETE','Candidature deleted','Executed when a candidature is deleted','recruitment',7516,NULL),(392,'COMPANY_MODIFY','Third party update','Executed when you update third party','societe',1,NULL),(393,'CONTACT_MODIFY','Contact address update','Executed when a contact is updated','contact',51,NULL),(394,'ORDER_SUPPLIER_CANCEL','Supplier order request canceled','Executed when a supplier order is canceled','order_supplier',13,NULL),(395,'MEMBER_EXCLUDE','Member excluded','Executed when a member is excluded','member',27,NULL),(396,'USER_CREATE','User created','Executed when a user is created','user',301,NULL),(397,'USER_MODIFY','User update','Executed when a user is updated','user',302,NULL),(398,'USER_DELETE','User update','Executed when a user is deleted','user',303,NULL),(399,'USER_NEW_PASSWORD','User update','Executed when a user is change password','user',304,NULL),(400,'USER_ENABLEDISABLE','User update','Executed when a user is enable or disable','user',305,NULL),(402,'HOLIDAY_MODIFY','Holiday modified','Executed when a holiday is modified','holiday',801,NULL),(405,'HOLIDAY_CANCEL','Holiday canceled','Executed when a holiday is canceled','holiday',802,NULL),(406,'HOLIDAY_DELETE','Holiday deleted','Executed when a holiday is deleted','holiday',804,NULL),(407,'PROPAL_MODIFY','Customer proposal modified','Executed when a customer proposal is modified','propal',2,NULL),(408,'ORDER_MODIFY','Customer order modified','Executed when a customer order is set modified','commande',5,NULL),(409,'BILL_MODIFY','Customer invoice modified','Executed when a customer invoice is modified','facture',7,NULL),(410,'PROPOSAL_SUPPLIER_MODIFY','Price request modified','Executed when a commercial proposal is modified','proposal_supplier',10,NULL),(411,'ORDER_SUPPLIER_MODIFY','Supplier order request modified','Executed when a supplier order is modified','order_supplier',13,NULL),(412,'BILL_SUPPLIER_MODIFY','Supplier invoice modified','Executed when a supplier invoice is modified','invoice_supplier',15,NULL),(413,'CONTRACT_MODIFY','Contract modified','Executed when a contract is modified','contrat',18,NULL),(414,'SHIPPING_MODIFY','Shipping modified','Executed when a shipping is modified','shipping',20,NULL),(415,'FICHINTER_MODIFY','Intervention modify','Executed when a intervention is modify','ficheinter',30,NULL),(417,'EXPENSE_REPORT_MODIFY','Expense report modified','Executed when an expense report is modified','expensereport',202,NULL),(455,'PROJECT_SENTBYMAIL','Project sent by mail','Executed when a project is sent by email','project',144,NULL),(511,'SHIPPING_DELETE','Shipping sent is deleted','Executed when a shipping is deleted','shipping',21,NULL),(512,'RECEPTION_VALIDATE','Reception validated','Executed when a reception is validated','reception',22,NULL),(513,'RECEPTION_SENTBYMAIL','Reception sent by mail','Executed when a reception is sent by mail','reception',22,NULL),(543,'PROJECT_VALIDATE','Project validation','Executed when a project is validated','project',141,NULL),(584,'ACTION_CREATE','Action added','Executed when an action is added to the agenda','agenda',700,NULL),(591,'BILLREC_CREATE','Template invoices created','Executed when a Template invoices is created','facturerec',900,NULL),(592,'BILLREC_MODIFY','Template invoices update','Executed when a Template invoices is updated','facturerec',901,NULL),(593,'BILLREC_DELETE','Template invoices deleted','Executed when a Template invoices is deleted','facturerec',902,NULL),(594,'BILLREC_AUTOCREATEBILL','Template invoices use to create invoices with auto batch','Executed when a Template invoices is use to create invoice with auto batch','facturerec',903,NULL),(875,'PARTNERSHIP_CREATE','Partnership created','Executed when a partnership is created','partnership',58000,NULL),(876,'PARTNERSHIP_MODIFY','Partnership modified','Executed when a partnership is modified','partnership',58002,NULL),(877,'PARTNERSHIP_SENTBYMAIL','Mails sent from partnership file','Executed when you send email from partnership file','partnership',58004,NULL),(878,'PARTNERSHIP_DELETE','Partnership deleted','Executed when a partnership is deleted','partnership',58006,NULL),(879,'PROJECT_CLOSE','Project closed','Executed when a project is closed','project',145,NULL),(881,'COMPANY_RIB_CREATE','Third party payment information created','Executed when a third party payment information is created','societe',1,NULL),(882,'COMPANY_RIB_MODIFY','Third party payment information updated','Executed when a third party payment information is updated','societe',1,NULL),(883,'COMPANY_RIB_DELETE','Third party payment information deleted','Executed when a third party payment information is deleted','societe',1,NULL),(884,'FICHINTER_CLOSE','Intervention is done','Executed when a intervention is done','ficheinter',36,NULL); /*!40000 ALTER TABLE `llx_c_action_trigger` ENABLE KEYS */; UNLOCK TABLES; diff --git a/dev/setup/codesniffer/ruleset.xml b/dev/setup/codesniffer/ruleset.xml index ce59db18665..50b107f5fcc 100644 --- a/dev/setup/codesniffer/ruleset.xml +++ b/dev/setup/codesniffer/ruleset.xml @@ -9,6 +9,7 @@ /build/(html|aps)/ /dev/tools/test/namespacemig/ + /dev/tools/phan/stubs/ /documents/ /htdocs/core/class/lessc\.class\.php diff --git a/dev/setup/phpunit/PHPUNIT.BAT b/dev/setup/phpunit/PHPUNIT.BAT index 1df767c6c7e..cd36711f8b0 100644 --- a/dev/setup/phpunit/PHPUNIT.BAT +++ b/dev/setup/phpunit/PHPUNIT.BAT @@ -1,6 +1,73 @@ -REM SAMPLE WINDOWS SCRIPT TO START TESTS -REM -REM CURRENTLY THIS SCRIPT MUST BE LOCATED AT THE ROOT OF THE PROJECT. -REM A copy of phpunit-9.5.phar is required +REM @ECHO OFF + SET OPEN_BASEDIR=%~dp0 -c:\wamp64\bin\php\php7.4.33\php -dopen_basedir=%OPEN_BASEDIR% .\phpunit-9.5.phar -d memory_limit=-1 -c test\phpunit\phpunittest.xml test\phpunit\AllTests.php +SET DD_TRACE_CLI_ENABLED=1 +SET DD_TRACE_CLI_LOG_FILE=%~dp0/trace.log +SET PHP=c:\wamp64\bin\php\php7.4.33\php + +REM c:\wamp64\bin\php\php7.4.33\php -dopen_basedir=%OPEN_BASEDIR% .\phpunit-9.5.phar -d memory_limit=-1 -c test\phpunit\phpunittest.xml test\phpunit\AllTests.php --filter FilesLibTest --migrate-configuration +REM Example: phpunit.bat test/phpunit/FilesLibTest.php --filter FilesLibTest::testDolDirMove +REM + +REM The DOMAIN/Port value should be the same as in htdocs/conf/conf.php +REM (This is only needed if did not set up another server locally +REM for your test installation database). +SET PHPSERVER_DOMAIN_PORT=127.0.0.1:8080 +SET PHPSERVER_LOG=%~dp0/php_serv.log + +echo if (class_exists('PHPUnit\Framework\TestSuite')) { $dolibarr_main_url_root='http://%PHPSERVER_DOMAIN_PORT%'; } >> %~dp0\htdocs\conf\conf.php +GOTO :START + +REM The error handler +:ERROR_HANDLER +echo An error occurred. Stop php server +taskkill /F /PID %php_pid% +exit /b 1 + +:START + +start /B php -S %PHPSERVER_DOMAIN_PORT% -t htdocs > %PHPSERVER_LOG% 2>&1 +for /F "tokens=2 delims=," %%i in ('tasklist /FI "IMAGENAME eq php.exe" /FO CSV /NH') do ( + set "php_pid=%%~i" + goto :FOUND_PID +) + +:FOUND_PID +echo "Server PID: %php_pid%" +REM curl "http://%PHPSERVER_DOMAIN_PORT%" + + +SET MEMOPT=-d memory-limit=-1 +SET CONFOPT=-c test\phpunit\phpunittest.xml +SET TESTS=test\phpunit\AllTests.php + +setlocal enabledelayedexpansion + +for %%i in (%*) do ( + set "f=%%i" + if "!f:~0,12!"=="memory-limit" ( + SET MEMOPT="" + goto :continue + ) + if "%%i"=="-c" ( + SET CONFOPT="" + goto :continue + ) + if "!f:~-4!"==".php" ( + set TESTS="" + goto :continue + ) + :continue + REM NEEDED FOR CONTINUE + +) + +%PHP% -d display_errors=on -dopen_basedir=%OPEN_BASEDIR% .\phpunit-9.5.phar %MEMOPT% %CONFOPT% %TESTS% %* + +REM c:\wamp64\bin\php\php7.4.33\php -dopen_basedir=%OPEN_BASEDIR% .\phpunit-9.5.phar -d memory_limit=-1 -c test\phpunit\phpunittest.xml test\phpunit\SecurityTest.php + +REM c:\wamp64\bin\php\php7.4.33\php -dopen_basedir=%OPEN_BASEDIR% .\phpunit-9.5.phar -d memory_limit=-1 -c test\phpunit\phpunittest.xml +REM c:\wamp64\bin\php\php7.4.33\php -dopen_basedir=%OPEN_BASEDIR% .\phpunit-9.5.phar -d memory_limit=-1 test\phpunit\AllTests.php --filter FilesLibTest + + +taskkill /F /PID %php_pid% diff --git a/dev/setup/phpunit/setup_conf.sh b/dev/setup/phpunit/setup_conf.sh index 7a23baab5db..9c11bb5f332 100755 --- a/dev/setup/phpunit/setup_conf.sh +++ b/dev/setup/phpunit/setup_conf.sh @@ -4,10 +4,12 @@ TRAVIS_BUILD_DIR=${TRAVIS_BUILD_DIR:=$(realpath "$(dirname "$0")/../../..")} MYSQL=${MYSQL:=mysql} +MYSQLDUMP=${MYSQLDUMP:="${MYSQL}dump"} DB=${DB:=mariadb} DB_ROOT=${DB_ROOT:=root} DB_PASS=${DB_PASS:=} +DB_CACHE_FILE="${TRAVIS_BUILD_DIR}/db_init.sql" TRAVIS_DOC_ROOT_PHP="${TRAVIS_DOC_ROOT_PHP:=$TRAVIS_BUILD_DIR/htdocs}" TRAVIS_DATA_ROOT_PHP="${TRAVIS_DATA_ROOT_PHP:=$TRAVIS_BUILD_DIR/documents}" @@ -23,6 +25,18 @@ else fi CONF_FILE=${CONF_FILE:=${TRAVIS_BUILD_DIR}/htdocs/conf/conf.php} +function save_db_cache() ( + set -x + rm "${DB_CACHE_FILE}".md5 2>/dev/null + echo "Saving DB to cache file '${DB_CACHE_FILE}'" + ${SUDO} "${MYSQLDUMP}" -u "$DB_ROOT" -h 127.0.0.1 $PASS_OPT travis \ + --hex-blob --lock-tables=false --skip-add-locks \ + | sed -e 's/DEFINER=[^ ]* / /' > ${DB_CACHE_FILE} + echo "${sum}" > "${DB_CACHE_FILE}".md5 + set +x +) + + if [ -r "${CONF_FILE}" ] ; then echo "'${CONF_FILE} exists, not overwriting!" @@ -55,6 +69,7 @@ else echo fi +load_cache=0 echo "Setting up database '$DB'" if [ "$DB" = 'mysql' ] || [ "$DB" = 'mariadb' ] || [ "$DB" = 'postgresql' ]; then echo "MySQL stop" @@ -71,6 +86,7 @@ if [ "$DB" = 'mysql' ] || [ "$DB" = 'mariadb' ] || [ "$DB" = 'postgresql' ]; the PASS_OPT="'-password=${DB_PASS}'" fi echo "MySQL set root password" + if [ 1 = 1 ] ; then CMDS=( \ "" @@ -110,8 +126,20 @@ if [ "$DB" = 'mysql' ] || [ "$DB" = 'mariadb' ] || [ "$DB" = 'postgresql' ]; the echo "MySQL flush" ${SUDO} "${MYSQL}" -u "$DB_ROOT" -h 127.0.0.1 $PASS_OPT -e 'FLUSH PRIVILEGES;' - echo "MySQL load sql" - ${SUDO} "${MYSQL}" --force -u "$DB_ROOT" -h 127.0.0.1 $PASS_OPT -D travis < ${TRAVIS_BUILD_DIR}/dev/initdemo/mysqldump_dolibarr_3.5.0.sql | tee $TRAVIS_BUILD_DIR/initial_350.log + sum=$(find "${TRAVIS_BUILD_DIR}/htdocs/install" -type f -exec md5sum {} + | LC_ALL=C sort | md5sum) + load_cache=0 + if [ -r "$DB_CACHE_FILE".md5 ] && [ -r "$DB_CACHE_FILE" ] && [ -x "$(which "${MYSQLDUMP}")" ] ; then + cache_sum="$(<"$DB_CACHE_FILE".md5)" + [ "$sum" = "$cache_sum" ] && load_cache=1 + fi + + if [ "$load_cache" = "1" ] ; then + echo "MySQL load cached sql" + ${SUDO} "${MYSQL}" --force -u "$DB_ROOT" -h 127.0.0.1 $PASS_OPT -D travis < ${DB_CACHE_FILE} | tee $TRAVIS_BUILD_DIR/db_from_cacheinit.log + else + echo "MySQL load initial sql" + ${SUDO} "${MYSQL}" --force -u "$DB_ROOT" -h 127.0.0.1 $PASS_OPT -D travis < ${TRAVIS_BUILD_DIR}/dev/initdemo/mysqldump_dolibarr_3.5.0.sql | tee $TRAVIS_BUILD_DIR/initial_350.log + fi elif [ "$DB" = 'postgresql' ]; then echo Install pgsql if run is for pgsql @@ -158,32 +186,33 @@ set +e echo '$'force_install_prefix=\'llx_\'';' } > "$INSTALL_FORCED_FILE" -( - cd "${TRAVIS_BUILD_DIR}/htdocs/install" || exit 1 +if [ "$load_cache" != "1" ] ; then + ( + cd "${TRAVIS_BUILD_DIR}/htdocs/install" || exit 1 - VERSIONS=("3.5.0" "3.6.0" "3.7.0" "3.8.0" "3.9.0") - VERSIONS+=("4.0.0") - VERSIONS+=("5.0.0" "6.0.0" "7.0.0" "8.0.0" "9.0.0") - VERSIONS+=("10.0.0" "11.0.0" "12.0.0" "13.0.0" "14.0.0") - VERSIONS+=("15.0.0" "16.0.0" "18.0.0" "19.0.0" "20.0.0") - pVer=${VERSIONS[0]} - for v in "${VERSIONS[@]:1}" ; do - LOGNAME="${TRAVIS_BUILD_DIR}/upgrade${pVer//./}${v//./}" - php upgrade.php "$pVer" "$v" ignoredbversion > "${LOGNAME}.log" - php upgrade2.php "$pVer" "$v" ignoredbversion > "${LOGNAME}-2.log" - php step5.php "$pVer" "$v" ignoredbversion > "${LOGNAME}-3.log" - pVer="$v" - done + VERSIONS=("3.5.0" "3.6.0" "3.7.0" "3.8.0" "3.9.0") + VERSIONS+=("4.0.0") + VERSIONS+=("5.0.0" "6.0.0" "7.0.0" "8.0.0" "9.0.0") + VERSIONS+=("10.0.0" "11.0.0" "12.0.0" "13.0.0" "14.0.0") + VERSIONS+=("15.0.0" "16.0.0" "18.0.0" "19.0.0" "20.0.0") + pVer=${VERSIONS[0]} + for v in "${VERSIONS[@]:1}" ; do + LOGNAME="${TRAVIS_BUILD_DIR}/upgrade${pVer//./}${v//./}" + php upgrade.php "$pVer" "$v" ignoredbversion > "${LOGNAME}.log" + php upgrade2.php "$pVer" "$v" ignoredbversion > "${LOGNAME}-2.log" + php step5.php "$pVer" "$v" ignoredbversion > "${LOGNAME}-3.log" + pVer="$v" + done - ${SUDO} "${MYSQL}" --force -u "$DB_ROOT" -h 127.0.0.1 $PASS_OPT -D travis < "${TRAVIS_BUILD_DIR}/htdocs/install/mysql/migration/repair.sql" + ${SUDO} "${MYSQL}" --force -u "$DB_ROOT" -h 127.0.0.1 $PASS_OPT -D travis < "${TRAVIS_BUILD_DIR}/htdocs/install/mysql/migration/repair.sql" - { - php upgrade2.php 0.0.0 0.0.0 MAIN_MODULE_API,MAIN_MODULE_ProductBatch,MAIN_MODULE_SupplierProposal,MAIN_MODULE_STRIPE,MAIN_MODULE_ExpenseReport - php upgrade2.php 0.0.0 0.0.0 MAIN_MODULE_WEBSITE,MAIN_MODULE_TICKET,MAIN_MODULE_ACCOUNTING,MAIN_MODULE_MRP - php upgrade2.php 0.0.0 0.0.0 MAIN_MODULE_RECEPTION,MAIN_MODULE_RECRUITMENT - php upgrade2.php 0.0.0 0.0.0 MAIN_MODULE_KnowledgeManagement,MAIN_MODULE_EventOrganization,MAIN_MODULE_PARTNERSHIP - php upgrade2.php 0.0.0 0.0.0 MAIN_MODULE_EmailCollector - } > $TRAVIS_BUILD_DIR/enablemodule.log - -) + { + php upgrade2.php 0.0.0 0.0.0 MAIN_MODULE_API,MAIN_MODULE_ProductBatch,MAIN_MODULE_SupplierProposal,MAIN_MODULE_STRIPE,MAIN_MODULE_ExpenseReport + php upgrade2.php 0.0.0 0.0.0 MAIN_MODULE_WEBSITE,MAIN_MODULE_TICKET,MAIN_MODULE_ACCOUNTING,MAIN_MODULE_MRP + php upgrade2.php 0.0.0 0.0.0 MAIN_MODULE_RECEPTION,MAIN_MODULE_RECRUITMENT + php upgrade2.php 0.0.0 0.0.0 MAIN_MODULE_KnowledgeManagement,MAIN_MODULE_EventOrganization,MAIN_MODULE_PARTNERSHIP + php upgrade2.php 0.0.0 0.0.0 MAIN_MODULE_EmailCollector + } > $TRAVIS_BUILD_DIR/enablemodule.log + ) && save_db_cache +fi diff --git a/dev/setup/pre-commit/README.md b/dev/setup/pre-commit/README.md index 9db2d529b8e..c5c35e81829 100644 --- a/dev/setup/pre-commit/README.md +++ b/dev/setup/pre-commit/README.md @@ -23,23 +23,24 @@ the project: `pre-commit-config.yaml`. ### Installation in your git project -1. Install `pre-commit` tool.\ +1. Install pre-commit tool.\ If you do not have python installed, install [python](https://www.python.org) first.\ If you do not have [`pip`](https://pypi.org/project/pip), install that as well.\\ - Then you can install pre-commit tool: `python -m pip install pre-commit`. + Then you can install pre-commit tool: + `python3 -m pip install pre-commit` -2. In your local git clone of the project, run `pre-commit install` to add the hooks.\ - or copy the file git/hooks/pre-commit manually. (recommended because this file differs - from the file installed with pre-commit install as it redirects output to the error - channel so your IDE will be able to catch the error. +2. In your local git clone of the project, run `pre-commit install` to add the hooks + or copy the file *dev/setup/git/hooks/pre-commit* manually into *.git/hooks/pre-commit* + (recommended because this file may differ from the file installed with the pre-commit install). + The good file redirects output to the error channel so your IDE will be able to catch the error. ### Tips After installing `pre-commit` onto your local git clone, pre-commit will run -on every commit. The first time, all tools required by pre-commit will be installed -into ~/.cache/pre-commit +on every commit. The first time, all tools required by pre-commit will be installed +into ~/.cache/pre-commit When it finds some issue, the git commit will be aborted, so you can fix it, or verify it. @@ -87,3 +88,7 @@ There is much more you can do with pre-commit, check out its Now your commit is less likely to fail in the Continuous Intagration (CI) run on github.\ CI also runs pre-commit to help maintain code quality. + +Note: +Code for precommits are saved into: +.cache/pre-commit/repoyXXXXX/py_env-python3/lib/pythonX.Y/site-packages/pre_commit_hooks/no_commit_to_branch.py diff --git a/dev/tools/apstats.php b/dev/tools/apstats.php index 4fb20de6c66..3a31b4b232b 100755 --- a/dev/tools/apstats.php +++ b/dev/tools/apstats.php @@ -3,6 +3,7 @@ /* * Copyright (C) 2023 Laurent Destailleur * Copyright (C) 2024 MDW + * Copyright (C) 2024 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -650,7 +651,8 @@ $html .= ''; $html .= ''."\n"; -$tmp = ''; + +$tmpstan = ''; $nblines = 0; if (!empty($output_arrtd)) { foreach ($output_arrtd as $line) { @@ -659,22 +661,23 @@ if (!empty($output_arrtd)) { preg_match('/^::error file=(.*),line=(\d+),col=(\d+)::(.*)$/', $line, $reg); if (!empty($reg[1])) { if ($nblines < 20) { - $tmp .= ''; + $tmpstan .= ''; } else { - $tmp .= ''; + $tmpstan .= ''; } - $tmp .= ''.dolPrintLabel($reg[1]).''; - $tmp .= ''; - $tmp .= ''.dolPrintLabel($reg[2]).''; - $tmp .= ''; - $tmp .= ''.dolPrintLabel($reg[4]).''; - $tmp .= ''."\n"; + $tmpstan .= ''.dolPrintLabel($reg[1]).''; + $tmpstan .= ''; + $tmpstan .= ''.dolPrintLabel($reg[2]).''; + $tmpstan .= ''; + $tmpstan .= ''.dolPrintLabel($reg[4]).''; + $tmpstan .= ''."\n"; + $nblines++; } } } - +$tmpphan = ''; $phan_nblines = 0; if (count($output_phan_json) != 0) { $phan_notices = json_decode($output_phan_json[count($output_phan_json) - 1], true); @@ -684,6 +687,9 @@ if (count($output_phan_json) != 0) { foreach ($phan_notices as $notice) { if (!empty($notice['location'])) { $path = $notice['location']['path']; + if ($path == 'internal') { + continue; + } $line_start = $notice['location']['lines']['begin']; $line_end = $notice['location']['lines']['end']; if ($line_start == $line_end) { @@ -695,18 +701,18 @@ if (count($output_phan_json) != 0) { } $code_url_attr = dol_escape_htmltag($urlgit.$path.$line_range); if ($phan_nblines < 20) { - $tmp = ''; + $tmpphan .= ''; } else { - $tmp = ''; + $tmpphan .= ''; } - $tmp .= ''.dolPrintLabel($path).''; - $tmp .= ''; - $tmp .= ''.$line_range_txt.''; - $tmp .= ''; - $tmp .= ''.dolPrintLabel($notice['description']).''; - $tmp .= ''; + $tmpphan .= ''.dolPrintLabel($path).''; + $tmpphan .= ''; + $tmpphan .= ''.$line_range_txt.''; + $tmpphan .= ''; + $tmpphan .= ''.dolPrintLabel($notice['description']).''; + $tmpphan .= ''; + $tmpphan .= "\n"; - $phan_items[] = $tmp; $phan_nblines++; } } @@ -769,10 +775,15 @@ $html .= ''; // Technical debt PHPstan -if ($nblines != 0) { + +if ($dirphpstan != 'disabled') { $datatable_script .= ' if (typeof(DataTable)==="function") {jQuery(".sourcephpstan").toggle(true);} - let phpstantable = new DataTable("#technicaldebt table"); + let phpstantable = new DataTable("#technicaldebt table", { + lengthMenu: [ + [10, 25, 50, 100, -1], + [10, 25, 50, 100, \'All\'] + ]}); '; $html .= '
'."\n"; $html .= '

Technical debt (PHPStan level '.$phpstanlevel.' -> '.$nblines.' warnings)

'."\n"; @@ -781,9 +792,10 @@ if ($nblines != 0) { $html .= '
'."\n"; $html .= ''."\n"; $html .= ''."\n"; - $html .= $tmp; + $html .= $tmpstan; $html .= '
FileLineType
'; - $html .= '
Show all...
'; + // Disabled, no more required as list is managed with datatable + //$html .= '
Show all...
'; $html .= '
'; $html .= '
'."\n"; @@ -792,7 +804,7 @@ if ($nblines != 0) { // Technical debt Phan -if ($phan_nblines != 0) { +if ($dir_phan != 'disabled') { $datatable_script .= ' if (typeof(DataTable)==="function") {jQuery(".sourcephan").toggle(true);} let phantable = new DataTable("#technicaldebtphan table", { @@ -808,7 +820,7 @@ if ($phan_nblines != 0) { $html .= '
'."\n"; $html .= ''."\n"; $html .= ''."\n"; - $html .= implode("\n", $phan_items); + $html .= $tmpphan; $html .= '
FileLineDetail
'; // Disabled, no more required as list is managed with datatable //$html .= '
Show all...
'; diff --git a/dev/tools/codespell/codespell-dict.txt b/dev/tools/codespell/codespell-dict.txt index 00764f45d53..047de65a4a8 100644 --- a/dev/tools/codespell/codespell-dict.txt +++ b/dev/tools/codespell/codespell-dict.txt @@ -9,9 +9,13 @@ aploha->alpha aplohanothtml->alphanohtml aplphanothtml->alphanohtml choosed->chosen +cumuled->cumulative +dokument->document dolibar->dolibarr +dolibarrr->dolibarr dollibar->dolibarr dollibarr->dolibarr +thoose->those # fiche->card mot de passe->password not de passe->password diff --git a/dev/tools/codespell/codespell-ignore.txt b/dev/tools/codespell/codespell-ignore.txt index c71e990a467..0c84807010b 100644 --- a/dev/tools/codespell/codespell-ignore.txt +++ b/dev/tools/codespell/codespell-ignore.txt @@ -57,3 +57,4 @@ dur fonction espace methode +datee diff --git a/dev/tools/codespell/codespell-lines-ignore.txt b/dev/tools/codespell/codespell-lines-ignore.txt index 77b603de8a9..5fa92f8c13e 100644 --- a/dev/tools/codespell/codespell-lines-ignore.txt +++ b/dev/tools/codespell/codespell-lines-ignore.txt @@ -28,7 +28,7 @@ $tmpprojtime = $element->getSumOfAmount($idofelementuser ? $elementuser : '', $dates, $datee); // $element is a task. $elementuser may be empty $typea = ($data[$j]->typea == 'birth') ? $picb : $pice; //var_dump("$key, $tablename, $datefieldname, $dates, $datee"); - GETPOST("mouvement", 'int'), + GETPOSTINT("mouvement"), dol_syslog("msgid=".$overview[0]->message_id." date=".dol_print_date($overview[0]->udate, 'dayrfc', 'gmt')." from=".$overview[0]->from." to=".$overview[0]->to." subject=".$overview[0]->subject); if ((empty($dates) && empty($datee)) || (intval($dates) <= $element->datestart && intval($datee) >= $element->dateend)) { jQuery("#mouvement option").removeAttr("selected").change(); @@ -56,28 +56,30 @@ $this->datea = $this->db->jdate($obj->datea); $this->datee = $this->db->jdate($obj->datee); $this->periode = $this->db->jdate($obj->period); - $tmp = array('id_users'=>$obj->id_users, 'nom'=>$obj->name, 'reponses'=>$obj->reponses); + $tmp = array('id_users' => $obj->id_users, 'nom' => $obj->name, 'reponses' => $obj->reponses); $tmpfiles = dol_dir_list($tmpdir, 'files', 0, '\.od(s|t)$', '', 'name', SORT_ASC, 0, true); // Disable hook for the moment //si les reponses ne concerne pas la colonne effacée, on concatenate - GETPOST("mouvement", "int"), GETPOST("mouvement", 'alpha'), - GETPOST("mouvement", 'int'), + GETPOSTINT("mouvement"), foreach ($TWeek as $weekIndex => $weekNb) { if (count($arrayfields) > 0 && !empty($arrayfields['t.datee']['checked'])) { if (jQuery("#mouvement").val() == \'0\') jQuery("#unitprice").removeAttr("disabled"); print ''.$langs->trans("TransferStock").''; print ''.dol_print_date($link->datea, "dayhour", "tzuser").''; $action = 'transfert'; - $date_com = dol_mktime(GETPOST('rehour', 'int'), GETPOST('remin', 'int'), GETPOST('resec', 'int'), GETPOST('remonth', 'int'), GETPOST('reday', 'int'), GETPOST('reyear', 'int')); + $date_com = dol_mktime(GETPOSTINT('rehour'), GETPOSTINT('remin'), GETPOSTINT('resec'), GETPOSTINT('remonth'), GETPOSTINT('reday'), GETPOSTINT('reyear')); $date_next_execution = (GETPOST('remonth') ? dol_mktime(12, 0, 0, GETPOST('remonth'), GETPOST('reday'), GETPOST('reyear')) : -1); $date_next_execution = dol_mktime($rehour, $remin, 0, $remonth, $reday, $reyear); - $datee = dol_get_last_day(GETPOST('yeartoexport', 'int'), GETPOST('monthtoexport', 'int') ? GETPOST('monthtoexport', 'int') : 12); - $datesubscription = dol_mktime(12, 0, 0, GETPOST("remonth", 'int'), GETPOST("reday", "int"), GETPOST("reyear", "int")); + $datee = dol_get_last_day(GETPOSTINT('yeartoexport'), GETPOSTINT('monthtoexport') ? GETPOSTINT('monthtoexport') : 12); + $datesubscription = dol_mktime(12, 0, 0, GETPOSTINT("remonth"), GETPOSTINT("reday"), GETPOSTINT("reyear")); $ensemblereponses = $obj->reponses; + $field = preg_replace('/(:[!<>=\s]+:|:in:|:notin:|:like:|:notlike:).*$/', '', $tmpcrit); // the name of the field + $newcrit = preg_replace('/(:[!<>=\s]+:|:in:|:notin:|:like:|:notlike:)/', '', $tmpcrit); $object->datee = $datee; $object->periode = $dateperiod; $return .= '
'.$langs->trans("Payement").' : '.$this->type_payment.''; $sortfield = "datea"; + $sql = "SELECT p.rowid as id, p.entity, p.title, p.ref, p.public, p.dateo as do, p.datee as de, p.fk_statut as status, p.fk_opp_status, p.opp_amount, p.opp_percent, p.tms as date_update, p.budget_amount"; $sql .= " '".$db->escape($conf->currency)."' as currency, 0 as fk_soc, t.date_ech as date, t.periode as date_due, 'SocialContributions' as item, '' as thirdparty_name, '' as thirdparty_code, '' as country_code, '' as vatnum, ".PAY_DEBIT." as sens"; $sql .= " , datee = ".(!empty($obj->datee) ? "'".$this->db->escape($obj->datee)."'" : "null"); $sql .= " AND (".$datefieldname." <= '".$this->db->idate($datee)."' OR ".$datefieldname." IS NULL)"; @@ -98,36 +100,36 @@ $taskstatic->datee = $db->jdate($obj->date_end); $this->category->childs = array(); $this->datea = dol_now(); + $tmpcrit = preg_replace('/^.*(:[!<>=\s]+:|:in:|:notin:|:like:|:notlike:)/', '\1', $tmpcrit); // the condition after the name of the field 'datee' => $date_end, // mise a jour des reponses utilisateurs dans la base if (!empty($arrayfields['t.datee']['checked'])) { if ($user->hasRight('stock', 'mouvement', 'lire')) { if (empty($reyear) || empty($remonth) || empty($reday)) { jQuery("#mouvement").change(function() { + preg_match('/:([!<>=\s]+|in|notin|like|notlike):/', $tmpcrit, $reg); print $form->selectDate($object->periode, 'period', 0, 0, 0, 'charge', 1); print ''.$langs->trans("TransferStock").''; print ''.$langs->trans("ClinkOnALinkOfColumn", $langs->transnoentitiesnoconv("Referers")).''; print ''.dol_print_date($db->jdate($obj->periode), 'day').''; + print ''.$langs->trans("AddIn").''; print dol_print_date($object->periode, "day"); $TWeek[$week_number] = $week_number; $action = 'transfert'; $cle_rib = strtolower(checkES($rib, $CCC)); $date_com = dol_mktime(GETPOST('rehour'), GETPOST('remin'), GETPOST('resec'), GETPOST("remonth"), GETPOST("reday"), GETPOST("reyear")); $date_next_execution = isset($date_next_execution) ? $date_next_execution : (GETPOST('remonth') ? dol_mktime(12, 0, 0, GETPOST('remonth'), GETPOST('reday'), GETPOST('reyear')) : -1); - $datefrom = dol_mktime(0, 0, 0, GETPOST('remonth', 'int'), GETPOST('reday', 'int'), GETPOST('reyear', 'int')); - $datesubscription = dol_mktime(0, 0, 0, GETPOST("remonth", "int"), GETPOST("reday", "int"), GETPOST("reyear", "int")); + $datefrom = dol_mktime(0, 0, 0, GETPOSTINT('remonth'), GETPOSTINT('reday'), GETPOSTINT('reyear')); + $datesubscription = dol_mktime(0, 0, 0, GETPOSTINT("remonth"), GETPOSTINT("reday"), GETPOSTINT("reyear")); $datetouse = ($this->date_end > 0) ? $this->date_end : ((isset($this->datee) && $this->datee > 0) ? $this->datee : 0); $elementarray = $object->get_element_list($key, $tablename, $datefieldname, $dates, $datee, !empty($project_field) ? $project_field : 'fk_projet'); $ensemblereponses = $obj->reponses; $head[$h][1] = $langs->trans("Referers"); $head[$tab][1] = $langs->trans("Referers"); $out .= "".$langs->trans("Referer").": ".(isset($_SERVER["HTTP_REFERER"]) ? dol_htmlentities($_SERVER["HTTP_REFERER"], ENT_COMPAT) : '')."
\n"; - $reday = GETPOST('reday', 'int'); $reday = GETPOSTINT('reday'); $sql = "SELECT p.rowid as id, p.entity, p.title, p.ref, p.public, p.dateo as do, p.datee as de, p.fk_statut as status, p.fk_opp_status, p.opp_amount, p.opp_percent, p.tms as date_modification, p.budget_amount"; - $sql = "SELECT p.rowid as id, p.entity, p.title, p.ref, p.public, p.dateo as do, p.datee as de, p.fk_statut as status, p.fk_opp_status, p.opp_amount, p.opp_percent, p.tms as date_update, p.budget_amount"; $sql = 'SELECT p.rowid as id, p.entity, p.title, p.ref, p.public, p.dateo as do, p.datee as de, p.fk_statut as status, p.fk_opp_status, p.opp_amount, p.opp_percent, p.tms as date_modification, p.budget_amount'; - $sql = 'SELECT p.rowid as id, p.entity, p.title, p.ref, p.public, p.dateo as do, p.datee as de, p.fk_statut as status, p.fk_opp_status, p.opp_amount, p.opp_percent, p.tms as date_update, p.budget_amount'; $sql .= " (cs.periode IS NOT NULL AND cs.periode between '".$db->idate(dol_get_first_day($year))."' AND '".$db->idate(dol_get_last_day($year))."')"; $sql .= " OR (cs.periode IS NULL AND cs.date_ech between '".$db->idate(dol_get_first_day($year))."' AND '".$db->idate(dol_get_last_day($year))."')"; $sql .= " VALUES (".$conf->entity.", '".$this->db->idate($this->datea)."'"; @@ -177,7 +179,10 @@ if (empty($this->datea)) { if (in_array('01', $TWeek) && in_array('52', $TWeek) && $weekNb == '01') { print $form->selectDate(strtotime(date('Y-m-d', $object->datee)), 'end', '', '', 0, '', 1, 0); + print $form->selectDate(strtotime(date('Y-m-d', $object->datee)), 'end', 0, 0, 0, '', 1, 0); print $object->datee ? dol_print_date($object->datee, 'daytext') : ' '; + print ''; + print ''.$langs->trans("AddIn").''; print ''.$langs->trans("Datee").''; print_liste_field_titre($arrayfields['t.datee']['label'], $_SERVER["PHP_SELF"], "t.datee", '', $param, '', $sortfield, $sortorder, 'center '); * @param string $datee End date (ex 23:59:59) @@ -187,13 +192,14 @@ $datee = dol_mktime(12, 0, 0, GETPOST('endmonth'), GETPOST('endday'), GETPOST('endyear')); $datee = dol_stringtotime($dateerfc); $datepaid = dol_mktime(12, 0, 0, GETPOST("remonth"), GETPOST("reday"), GETPOST("reyear")); - $datepaid = dol_mktime(12, 0, 0, GETPOST("remonth", 'int'), GETPOST("reday", 'int'), GETPOST("reyear", 'int')); - $datepaye = dol_mktime(12, 0, 0, GETPOST("remonth", "int"), GETPOST("reday", "int"), GETPOST("reyear", "int")); - $datepaye = dol_mktime(12, 0, 0, GETPOST("remonth", 'int'), GETPOST("reday", 'int'), GETPOST("reyear", 'int')); - $datepaye = dol_mktime(GETPOST("rehour", 'int'), GETPOST("remin", 'int'), GETPOST("resec", 'int'), GETPOST("remonth", 'int'), GETPOST("reday", 'int'), GETPOST("reyear", 'int')); - $datepaye = dol_mktime(GETPOST("rehour", 'int'), GETPOST("remin", 'int'), GETPOST("resec", 'int'), GETPOST("remonth", 'int'), GETPOST("reday", 'int'), GETPOST("reyear", 'int'), 'tzuserrel'); + $datepaid = dol_mktime(12, 0, 0, GETPOSTINT("remonth"), GETPOSTINT("reday"), GETPOSTINT("reyear")); + $datepaye = dol_mktime(12, 0, 0, GETPOSTINT("remonth"), GETPOSTINT("reday"), GETPOSTINT("reyear")); + $datepaye = dol_mktime(GETPOSTINT("rehour"), GETPOSTINT("remin"), GETPOSTINT("resec"), GETPOSTINT("remonth"), GETPOSTINT("reday"), GETPOSTINT("reyear")); + $datepaye = dol_mktime(GETPOSTINT("rehour"), GETPOSTINT("remin"), GETPOSTINT("resec"), GETPOSTINT("remonth"), GETPOSTINT("reday"), GETPOSTINT("reyear"), 'tzuserrel'); $ensemblereponses = $obj->reponses; $head[$h][1] = $langs->trans('Referers'); + $inj += preg_match('/on(dblclick|drop|durationchange|emptied|end|ended|error|focus|focusin|focusout|formdata|gotpointercapture|hashchange|input|invalid)[a-z]*\s*=/i', $tmpval); + $inj += preg_match('/on(dblclick|drop|durationchange|emptied|end|ended|error|focus|focusin|focusout|formdata|gotpointercapture|hashchange|input|invalid)[a-z]*\s*=/i', $val); $morewherefilterarray[] = " t.datee <= '".$db->idate($search_date_end_end)."'"; $morewherefilterarray[] = " t.datee >= '".$db->idate($search_date_end_start)."'"; $opensurveysondage->mail_admin = $_SESSION['adresse']; @@ -226,7 +232,8 @@ $sql2 .= " s.logo, s.email, s.entity, p.fk_user_creat, p.public, p.fk_statut, p.fk_opp_status, p.opp_percent, p.opp_amount, p.dateo, p.datee"; $title = $langs->trans('Batch')." ".$shortlabel." - ".$langs->trans('Referers'); $totalforvisibletasks = projectLinesPerMonth($j, $firstdaytoshow, $usertoprocess, 0, $tasksarray, $level, $projectsrole, $tasksrole, $mine, $restrictviewformytask, $isavailable, 0, $TWeek); - 'cs.periode' =>array('label'=>"PeriodEndDate", 'checked'=>1, 'position'=>50), + $value = preg_replace('/([a-z\.]+)\s*([!<>=]+|in|notin|like|notlike)\s*/', '\1:\2:', $value); // Clean string 'x < 10' into 'x:<:10' so we can then explode on space to get all AND tests to do + 'cs.periode' => array('label' => "PeriodEndDate", 'checked' => 1, 'position' => 50), 't.datee'=>array('label'=>"Deadline", 'checked'=>1, 'position'=>101), 't.datee'=>array('label'=>"Deadline", 'checked'=>1, 'position'=>5), // Ligne de la periode d'analyse du rapport @@ -238,13 +245,15 @@ foreach ($TWeek as $week_number) { if (!empty($arrayfields['t.datee']['checked'])) { if ($action == "transfert") { - if (GETPOST("reyear", "int") && GETPOST("remonth", "int") && GETPOST("reday", "int")) { + if ($object->id > 0 && $action == 'addin') { if (GETPOST('reday')) { + if (GETPOSTINT("reyear") && GETPOSTINT("remonth") && GETPOSTINT("reday")) { print $form->selectDate($datee, 'datee', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("to")); print ''; print ''; print ''; + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder print_barre_liste($langs->trans('ListAccounts'), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'accounting_account', 0, $newcardbutton, '', $limit, 0, 0, 1); include DOL_DOCUMENT_ROOT.'/core/tpl/massactions_pre.tpl.php'; @@ -452,7 +456,7 @@ if ($resql) { print '
'; $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; - $selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')) : ''); // This also change content of $arrayfields + $selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) : ''); // This also change content of $arrayfields $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); $moreforfilter = ''; @@ -505,7 +509,7 @@ if ($resql) { } // Fields from hook - $parameters = array('arrayfields'=>$arrayfields); + $parameters = array('arrayfields' => $arrayfields); $reshook = $hookmanager->executeHooks('printFieldListOption', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; @@ -567,7 +571,7 @@ if ($resql) { } // Hook fields - $parameters = array('arrayfields'=>$arrayfields, 'param'=>$param, 'sortfield'=>$sortfield, 'sortorder'=>$sortorder); + $parameters = array('arrayfields' => $arrayfields, 'param' => $param, 'sortfield' => $sortfield, 'sortorder' => $sortorder); $reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; @@ -708,7 +712,7 @@ if ($resql) { } // Fields from hook - $parameters = array('arrayfields'=>$arrayfields, 'obj'=>$obj, 'i'=>$i, 'totalarray'=>&$totalarray); + $parameters = array('arrayfields' => $arrayfields, 'obj' => $obj, 'i' => $i, 'totalarray' => &$totalarray); $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; @@ -802,7 +806,7 @@ if ($resql) { $db->free($resql); - $parameters = array('arrayfields'=>$arrayfields, 'sql'=>$sql); + $parameters = array('arrayfields' => $arrayfields, 'sql' => $sql); $reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; diff --git a/htdocs/accountancy/admin/accountmodel.php b/htdocs/accountancy/admin/accountmodel.php index 6035188be5d..e14477b9158 100644 --- a/htdocs/accountancy/admin/accountmodel.php +++ b/htdocs/accountancy/admin/accountmodel.php @@ -53,18 +53,20 @@ $id = 31; $rowid = GETPOST('rowid', 'alpha'); $code = GETPOST('code', 'alpha'); +$acts = array(); +$actl = array(); $acts[0] = "activate"; $acts[1] = "disable"; $actl[0] = img_picto($langs->trans("Disabled"), 'switch_off', 'class="size15x"'); $actl[1] = img_picto($langs->trans("Activated"), 'switch_on', 'class="size15x"'); $listoffset = GETPOST('listoffset', 'alpha'); -$listlimit = GETPOST('listlimit', 'int') > 0 ? GETPOST('listlimit', 'int') : 1000; +$listlimit = GETPOSTINT('listlimit') > 0 ? GETPOSTINT('listlimit') : 1000; $active = 1; $sortfield = GETPOST("sortfield", 'aZ09comma'); $sortorder = GETPOST("sortorder", 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -72,7 +74,7 @@ $offset = $listlimit * $page; $pageprev = $page - 1; $pagenext = $page + 1; -$search_country_id = GETPOST('search_country_id', 'int'); +$search_country_id = GETPOSTINT('search_country_id'); // Security check @@ -127,7 +129,7 @@ $tabrowid[31] = ""; // List of help for fields $tabhelp = array(); -$tabhelp[31] = array('pcg_version'=>$langs->trans("EnterAnyCode")); +$tabhelp[31] = array('pcg_version' => $langs->trans("EnterAnyCode")); // Define elementList and sourceList (used for dictionary type of contacts "llx_c_type_contact") @@ -189,10 +191,10 @@ if (GETPOST('actionadd', 'alpha') || GETPOST('actionmodify', 'alpha')) { // Si verif ok et action add, on ajoute la ligne if ($ok && GETPOST('actionadd', 'alpha')) { + $newid = 0; if ($tabrowid[$id]) { // Get free id for insert - $newid = 0; - $sql = "SELECT MAX(".$tabrowid[$id].") newid from ".$tabname[$id]; + $sql = "SELECT MAX(".$db->sanitize($tabrowid[$id]).") as newid FROM ".$db->sanitize($tabname[$id]); $result = $db->query($sql); if ($result) { $obj = $db->fetch_object($result); @@ -203,12 +205,12 @@ if (GETPOST('actionadd', 'alpha') || GETPOST('actionmodify', 'alpha')) { } // Add new entry - $sql = "INSERT INTO ".$tabname[$id]." ("; + $sql = "INSERT INTO ".$db->sanitize($tabname[$id])." ("; // List of fields if ($tabrowid[$id] && !in_array($tabrowid[$id], $listfieldinsert)) { - $sql .= $tabrowid[$id].","; + $sql .= $db->sanitize($tabrowid[$id]).","; } - $sql .= $tabfieldinsert[$id]; + $sql .= $db->sanitize($tabfieldinsert[$id]); $sql .= ",active)"; $sql .= " VALUES("; @@ -239,7 +241,7 @@ if (GETPOST('actionadd', 'alpha') || GETPOST('actionmodify', 'alpha')) { $result = $db->query($sql); if ($result) { // Add is ok setEventMessages($langs->transnoentities("RecordSaved"), null, 'mesgs'); - $_POST = array('id'=>$id); // Clean $_POST array, we keep only + $_POST = array('id' => $id); // Clean $_POST array, we keep only } else { if ($db->errno() == 'DB_ERROR_RECORD_ALREADY_EXISTS') { setEventMessages($langs->transnoentities("ErrorRecordAlreadyExists"), null, 'errors'); @@ -258,10 +260,10 @@ if (GETPOST('actionadd', 'alpha') || GETPOST('actionmodify', 'alpha')) { } // Modify entry - $sql = "UPDATE ".$tabname[$id]." SET "; + $sql = "UPDATE ".$db->sanitize($tabname[$id])." SET "; // Modifie valeur des champs if ($tabrowid[$id] && !in_array($tabrowid[$id], $listfieldmodify)) { - $sql .= $tabrowid[$id]."="; + $sql .= $db->sanitize($tabrowid[$id])." = "; $sql .= "'".$db->escape($rowid)."', "; } $i = 0; @@ -300,7 +302,7 @@ if ($action == 'confirm_delete' && $confirm == 'yes') { // delete $rowidcol = "rowid"; } - $sql = "DELETE from ".$tabname[$id]." WHERE ".$rowidcol." = ".((int) $rowid); + $sql = "DELETE from ".$db->sanitize($tabname[$id])." WHERE ".$db->sanitize($rowidcol)." = ".((int) $rowid); dol_syslog("delete", LOG_DEBUG); $result = $db->query($sql); @@ -314,19 +316,8 @@ if ($action == 'confirm_delete' && $confirm == 'yes') { // delete } // activate -if ($action == $acts[0]) { - if ($tabrowid[$id]) { - $rowidcol = $tabrowid[$id]; - } else { - $rowidcol = "rowid"; - } - - if ($rowid) { - $sql = "UPDATE ".$tabname[$id]." SET active = 1 WHERE ".$rowidcol." = ".((int) $rowid); - } elseif ($code) { - $sql = "UPDATE ".$tabname[$id]." SET active = 1 WHERE code='".$db->escape($code)."'"; - } - +if ($action == 'activate') { + $sql = "UPDATE ".$db->sanitize($tabname[$id])." SET active = 1 WHERE rowid = ".((int) $rowid); $result = $db->query($sql); if (!$result) { dol_print_error($db); @@ -335,58 +326,7 @@ if ($action == $acts[0]) { // disable if ($action == $acts[1]) { - if ($tabrowid[$id]) { - $rowidcol = $tabrowid[$id]; - } else { - $rowidcol = "rowid"; - } - - if ($rowid) { - $sql = "UPDATE ".$tabname[$id]." SET active = 0 WHERE ".$rowidcol." = ".((int) $rowid); - } elseif ($code) { - $sql = "UPDATE ".$tabname[$id]." SET active = 0 WHERE code='".$db->escape($code)."'"; - } - - $result = $db->query($sql); - if (!$result) { - dol_print_error($db); - } -} - -// favorite -if ($action == 'activate_favorite') { - if ($tabrowid[$id]) { - $rowidcol = $tabrowid[$id]; - } else { - $rowidcol = "rowid"; - } - - if ($rowid) { - $sql = "UPDATE ".$tabname[$id]." SET favorite = 1 WHERE ".$rowidcol." = ".((int) $rowid); - } elseif ($code) { - $sql = "UPDATE ".$tabname[$id]." SET favorite = 1 WHERE code='".$db->escape($code)."'"; - } - - $result = $db->query($sql); - if (!$result) { - dol_print_error($db); - } -} - -// disable favorite -if ($action == 'disable_favorite') { - if ($tabrowid[$id]) { - $rowidcol = $tabrowid[$id]; - } else { - $rowidcol = "rowid"; - } - - if ($rowid) { - $sql = "UPDATE ".$tabname[$id]." SET favorite = 0 WHERE ".$rowidcol." = ".((int) $rowid); - } elseif ($code) { - $sql = "UPDATE ".$tabname[$id]." SET favorite = 0 WHERE code='".$db->escape($code)."'"; - } - + $sql = "UPDATE ".$db->sanitize($tabname[$id])." SET active = 0 WHERE rowid = ".((int) $rowid); $result = $db->query($sql); if (!$result) { dol_print_error($db); @@ -413,7 +353,7 @@ print load_fiche_titre($titre, $linkback, 'title_accountancy'); // Confirmation de la suppression de la ligne if ($action == 'delete') { - print $form->formconfirm($_SERVER["PHP_SELF"].'?'.($page ? 'page='.urlencode($page).'&' : '').'sortfield='.urlencode($sortfield).'&sortorder='.urlencode($sortorder).'&rowid='.urlencode($rowid).'&code='.urlencode($code).'&id='.urlencode($id), $langs->trans('DeleteLine'), $langs->trans('ConfirmDeleteLine'), 'confirm_delete', '', 0, 1); + print $form->formconfirm($_SERVER["PHP_SELF"].'?'.($page ? 'page='.urlencode((string) ($page)).'&' : '').'sortfield='.urlencode((string) ($sortfield)).'&sortorder='.urlencode((string) ($sortorder)).'&rowid='.urlencode((string) ($rowid)).'&code='.urlencode((string) ($code)).'&id='.urlencode((string) ($id)), $langs->trans('DeleteLine'), $langs->trans('ConfirmDeleteLine'), 'confirm_delete', '', 0, 1); } //var_dump($elementList); @@ -518,7 +458,7 @@ if ($id) { } $tmpaction = 'create'; - $parameters = array('fieldlist'=>$fieldlist, 'tabname'=>$tabname[$id]); + $parameters = array('fieldlist' => $fieldlist, 'tabname' => $tabname[$id]); $reshook = $hookmanager->executeHooks('createDictionaryFieldlist', $parameters, $obj, $tmpaction); // Note that $action and $object may have been modified by some hooks $error = $hookmanager->error; $errors = $hookmanager->errors; @@ -546,9 +486,9 @@ if ($id) { $num = $db->num_rows($resql); $i = 0; - $param = '&id='.urlencode($id); + $param = '&id='.urlencode((string) ($id)); if ($search_country_id > 0) { - $param .= '&search_country_id='.urlencode($search_country_id); + $param .= '&search_country_id='.urlencode((string) ($search_country_id)); } $paramwithsearch = $param; if ($sortorder) { @@ -616,7 +556,7 @@ if ($id) { print ''; $tmpaction = 'edit'; - $parameters = array('fieldlist'=>$fieldlist, 'tabname'=>$tabname[$id]); + $parameters = array('fieldlist' => $fieldlist, 'tabname' => $tabname[$id]); $reshook = $hookmanager->executeHooks('editDictionaryFieldlist', $parameters, $obj, $tmpaction); // Note that $action and $object may have been modified by some hooks $error = $hookmanager->error; $errors = $hookmanager->errors; @@ -631,7 +571,7 @@ if ($id) { print ''; } else { $tmpaction = 'view'; - $parameters = array('fieldlist'=>$fieldlist, 'tabname'=>$tabname[$id]); + $parameters = array('fieldlist' => $fieldlist, 'tabname' => $tabname[$id]); $reshook = $hookmanager->executeHooks('viewDictionaryFieldlist', $parameters, $obj, $tmpaction); // Note that $action and $object may have been modified by some hooks $error = $hookmanager->error; @@ -778,7 +718,7 @@ function fieldListAccountModel($fieldlist, $obj = null, $tabname = '', $context print ''; } if ($fieldlist[$field] == 'type_cdr') { - print $form->selectarray($fieldlist[$field], array(0=>$langs->trans('None'), 1=>$langs->trans('AtEndOfMonth'), 2=>$langs->trans('CurrentNext')), (!empty($obj->{$fieldlist[$field]}) ? $obj->{$fieldlist[$field]} : '')); + print $form->selectarray($fieldlist[$field], array(0 => $langs->trans('None'), 1 => $langs->trans('AtEndOfMonth'), 2 => $langs->trans('CurrentNext')), (!empty($obj->{$fieldlist[$field]}) ? $obj->{$fieldlist[$field]} : '')); } else { print $form->selectyesno($fieldlist[$field], (!empty($obj->{$fieldlist[$field]}) ? $obj->{$fieldlist[$field]} : ''), 1); } diff --git a/htdocs/accountancy/admin/card.php b/htdocs/accountancy/admin/card.php index 125261bdd8f..59a412fa3a4 100644 --- a/htdocs/accountancy/admin/card.php +++ b/htdocs/accountancy/admin/card.php @@ -2,6 +2,7 @@ /* Copyright (C) 2013-2014 Olivier Geffroy * Copyright (C) 2013-2024 Alexandre Spangaro * Copyright (C) 2014 Florian Henry + * Copyright (C) 2024 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -37,9 +38,9 @@ $langs->loadLangs(array('accountancy', 'bills', 'compta')); $action = GETPOST('action', 'aZ09'); $backtopage = GETPOST('backtopage', 'alpha'); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); -$rowid = GETPOST('rowid', 'int'); +$rowid = GETPOSTINT('rowid'); $cancel = GETPOST('cancel', 'alpha'); $account_number = GETPOST('account_number', 'alphanohtml'); @@ -85,17 +86,11 @@ if ($action == 'add' && $user->hasRight('accounting', 'chartofaccount')) { // Clean code // To manage zero or not at the end of the accounting account - if (getDolGlobalString('ACCOUNTING_MANAGE_ZERO')) { - $account_number = $account_number; - } else { + if (!getDolGlobalString('ACCOUNTING_MANAGE_ZERO')) { $account_number = clean_account($account_number); } - if (GETPOSTINT('account_parent') <= 0) { - $account_parent = 0; - } else { - $account_parent = GETPOSTINT('account_parent'); - } + $account_parent = (GETPOSTINT('account_parent') > 0) ? GETPOSTINT('account_parent') : 0; $object->fk_pcg_version = $obj->pcg_version; $object->pcg_type = GETPOST('pcg_type', 'alpha'); @@ -148,17 +143,11 @@ if ($action == 'add' && $user->hasRight('accounting', 'chartofaccount')) { // Clean code // To manage zero or not at the end of the accounting account - if (getDolGlobalString('ACCOUNTING_MANAGE_ZERO')) { - $account_number = $account_number; - } else { + if (!getDolGlobalString('ACCOUNTING_MANAGE_ZERO')) { $account_number = clean_account($account_number); } - if (GETPOSTINT('account_parent') <= 0) { - $account_parent = 0; - } else { - $account_parent = GETPOSTINT('account_parent'); - } + $account_parent = (GETPOSTINT('account_parent') > 0) ? GETPOSTINT('account_parent') : 0; $object->fk_pcg_version = $obj->pcg_version; $object->pcg_type = GETPOST('pcg_type', 'alpha'); @@ -253,7 +242,7 @@ if ($action == 'create') { // Account parent print ''.$langs->trans("Accountparent").''; print ''; - print $formaccounting->select_account($object->account_parent, 'account_parent', 1, null, 0, 0, 'minwidth200'); + print $formaccounting->select_account($object->account_parent, 'account_parent', 1, [], 0, 0, 'minwidth200'); print ''; // Chart of accounts type diff --git a/htdocs/accountancy/admin/categories.php b/htdocs/accountancy/admin/categories.php index fbf21b04f56..0231856071a 100644 --- a/htdocs/accountancy/admin/categories.php +++ b/htdocs/accountancy/admin/categories.php @@ -2,6 +2,7 @@ /* Copyright (C) 2016 Jamal Elbaz * Copyright (C) 2017-2024 Alexandre Spangaro * Copyright (C) 2022 Laurent Destailleur + * Copyright (C) 2024 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -34,22 +35,22 @@ $error = 0; // Load translation files required by the page $langs->loadLangs(array("bills", "accountancy", "compta")); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $cancel = GETPOST('cancel', 'alpha'); $action = GETPOST('action', 'aZ09'); -$cat_id = GETPOST('account_category', 'int'); +$cat_id = GETPOSTINT('account_category'); $selectcpt = GETPOST('cpt_bk', 'array'); -$cpt_id = GETPOST('cptid', 'int'); +$cpt_id = GETPOSTINT('cptid'); if ($cat_id == 0) { $cat_id = null; } // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // If $page is not defined, or '' or -1 or if we click on clear filters $page = 0; @@ -164,7 +165,7 @@ if (!empty($cat_id)) { if (is_array($accountingcategory->lines_cptbk) && count($accountingcategory->lines_cptbk) > 0) { print img_picto($langs->trans("AccountingAccount"), 'accounting_account', 'class="pictofixedwith"'); - print $form->multiselectarray('cpt_bk', $arraykeyvalue, GETPOST('cpt_bk', 'array'), null, null, '', 0, "80%", '', '', $langs->transnoentitiesnoconv("AddAccountFromBookKeepingWithNoCategories")); + print $form->multiselectarray('cpt_bk', $arraykeyvalue, GETPOST('cpt_bk', 'array'), 0, 0, '', 0, "80%", '', '', $langs->transnoentitiesnoconv("AddAccountFromBookKeepingWithNoCategories")); print ' '; } } diff --git a/htdocs/accountancy/admin/categories_list.php b/htdocs/accountancy/admin/categories_list.php index 7306dae94a6..2f1b22cf778 100644 --- a/htdocs/accountancy/admin/categories_list.php +++ b/htdocs/accountancy/admin/categories_list.php @@ -1,6 +1,7 @@ * Copyright (C) 2011-2024 Alexandre Spangaro + * Copyright (C) 2024 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -47,17 +48,19 @@ if (!$user->hasRight('accounting', 'chartofaccount')) { accessforbidden(); } +$acts = array(); $acts[0] = "activate"; $acts[1] = "disable"; +$actl = array(); $actl[0] = img_picto($langs->trans("Disabled"), 'switch_off', 'class="size15x"'); $actl[1] = img_picto($langs->trans("Activated"), 'switch_on', 'class="size15x"'); $listoffset = GETPOST('listoffset', 'alpha'); -$listlimit = GETPOST('listlimit', 'int') > 0 ? GETPOST('listlimit', 'int') : 1000; +$listlimit = GETPOSTINT('listlimit') > 0 ? GETPOSTINT('listlimit') : 1000; $sortfield = GETPOST("sortfield", 'aZ09comma'); $sortorder = GETPOST("sortorder", 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // If $page is not defined, or '' or -1 or if we click on clear filters $page = 0; @@ -66,7 +69,7 @@ $offset = $listlimit * $page; $pageprev = $page - 1; $pagenext = $page + 1; -$search_country_id = GETPOST('search_country_id', 'int'); +$search_country_id = GETPOSTINT('search_country_id'); // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context $hookmanager->initHooks(array('admin')); @@ -117,7 +120,7 @@ $tabcond[32] = isModEnabled('accounting'); // List of help for fields $tabhelp = array(); -$tabhelp[32] = array('code'=>$langs->trans("EnterAnyCode"), 'category_type'=>$langs->trans("SetToYesIfGroupIsComputationOfOtherGroups"), 'formula'=>$langs->trans("EnterCalculationRuleIfPreviousFieldIsYes")); +$tabhelp[32] = array('code' => $langs->trans("EnterAnyCode"), 'category_type' => $langs->trans("SetToYesIfGroupIsComputationOfOtherGroups"), 'formula' => $langs->trans("EnterCalculationRuleIfPreviousFieldIsYes")); // List of check for fields (NOT USED YET) $tabfieldcheck = array(); @@ -199,10 +202,11 @@ if (GETPOST('actionadd', 'alpha') || GETPOST('actionmodify', 'alpha')) { // Si verif ok et action add, on ajoute la ligne if ($ok && GETPOST('actionadd', 'alpha')) { + $newid = 0; + if ($tabrowid[$id]) { // Get free id for insert - $newid = 0; - $sql = "SELECT MAX(".$tabrowid[$id].") newid from ".$tabname[$id]; + $sql = "SELECT MAX(".$db->sanitize($tabrowid[$id]).") newid FROM ".$db->sanitize($tabname[$id]); $result = $db->query($sql); if ($result) { $obj = $db->fetch_object($result); @@ -213,12 +217,12 @@ if (GETPOST('actionadd', 'alpha') || GETPOST('actionmodify', 'alpha')) { } // Add new entry - $sql = "INSERT INTO ".$tabname[$id]." ("; + $sql = "INSERT INTO ".$db->sanitize($tabname[$id])." ("; // List of fields if ($tabrowid[$id] && !in_array($tabrowid[$id], $listfieldinsert)) { - $sql .= $tabrowid[$id].","; + $sql .= $db->sanitize($tabrowid[$id]).","; } - $sql .= $tabfieldinsert[$id]; + $sql .= $db->sanitize($tabfieldinsert[$id]); $sql .= ",active)"; $sql .= " VALUES("; @@ -247,7 +251,7 @@ if (GETPOST('actionadd', 'alpha') || GETPOST('actionmodify', 'alpha')) { $result = $db->query($sql); if ($result) { // Add is ok setEventMessages($langs->transnoentities("RecordSaved"), null, 'mesgs'); - $_POST = array('id'=>$id); // Clean $_POST array, we keep only + $_POST = array('id' => $id); // Clean $_POST array, we keep only } else { if ($db->errno() == 'DB_ERROR_RECORD_ALREADY_EXISTS') { setEventMessages($langs->transnoentities("ErrorRecordAlreadyExists"), null, 'errors'); @@ -266,10 +270,10 @@ if (GETPOST('actionadd', 'alpha') || GETPOST('actionmodify', 'alpha')) { } // Modify entry - $sql = "UPDATE ".$tabname[$id]." SET "; + $sql = "UPDATE ".$db->sanitize($tabname[$id])." SET "; // Modifie valeur des champs if ($tabrowid[$id] && !in_array($tabrowid[$id], $listfieldmodify)) { - $sql .= $tabrowid[$id]."="; + $sql .= $db->sanitize($tabrowid[$id])." = "; $sql .= "'".$db->escape($rowid)."', "; } $i = 0; @@ -302,18 +306,14 @@ if (GETPOST('actionadd', 'alpha') || GETPOST('actionmodify', 'alpha')) { //$_GET["id"]=GETPOST('id', 'int'); // Force affichage dictionnaire en cours d'edition } -if (GETPOST('actioncancel', 'alpha')) { - //$_GET["id"]=GETPOST('id', 'int'); // Force affichage dictionnaire en cours d'edition -} +// if (GETPOST('actioncancel', 'alpha')) { +// $_GET["id"]=GETPOST('id', 'int'); // Force affichage dictionnaire en cours d'edition +// } if ($action == 'confirm_delete' && $confirm == 'yes') { // delete - if ($tabrowid[$id]) { - $rowidcol = $tabrowid[$id]; - } else { - $rowidcol = "rowid"; - } + $rowidcol = "rowid"; - $sql = "DELETE from ".$tabname[$id]." WHERE ".$rowidcol." = ".((int) $rowid); + $sql = "DELETE from ".$db->sanitize($tabname[$id])." WHERE ".$db->sanitize($rowidcol)." = ".((int) $rowid); dol_syslog("delete", LOG_DEBUG); $result = $db->query($sql); @@ -328,81 +328,73 @@ if ($action == 'confirm_delete' && $confirm == 'yes') { // delete // activate if ($action == $acts[0]) { - if ($tabrowid[$id]) { - $rowidcol = $tabrowid[$id]; - } else { - $rowidcol = "rowid"; - } + $rowidcol = "rowid"; if ($rowid) { - $sql = "UPDATE ".$tabname[$id]." SET active = 1 WHERE ".$rowidcol." = ".((int) $rowid); + $sql = "UPDATE ".$db->sanitize($tabname[$id])." SET active = 1 WHERE ".$db->sanitize($rowidcol)." = ".((int) $rowid); } elseif ($code) { - $sql = "UPDATE ".$tabname[$id]." SET active = 1 WHERE code = '".$db->escape($code)."'"; + $sql = "UPDATE ".$db->sanitize($tabname[$id])." SET active = 1 WHERE code = '".$db->escape($code)."'"; } - $result = $db->query($sql); - if (!$result) { - dol_print_error($db); + if ($sql) { + $result = $db->query($sql); + if (!$result) { + dol_print_error($db); + } } } // disable if ($action == $acts[1]) { - if ($tabrowid[$id]) { - $rowidcol = $tabrowid[$id]; - } else { - $rowidcol = "rowid"; - } + $rowidcol = "rowid"; if ($rowid) { - $sql = "UPDATE ".$tabname[$id]." SET active = 0 WHERE ".$rowidcol." = ".((int) $rowid); + $sql = "UPDATE ".$db->sanitize($tabname[$id])." SET active = 0 WHERE ".$db->sanitize($rowidcol)." = ".((int) $rowid); } elseif ($code) { - $sql = "UPDATE ".$tabname[$id]." SET active = 0 WHERE code = '".$db->escape($code)."'"; + $sql = "UPDATE ".$db->sanitize($tabname[$id])." SET active = 0 WHERE code = '".$db->escape($code)."'"; } - $result = $db->query($sql); - if (!$result) { - dol_print_error($db); + if ($sql) { + $result = $db->query($sql); + if (!$result) { + dol_print_error($db); + } } } // favorite if ($action == 'activate_favorite') { - if ($tabrowid[$id]) { - $rowidcol = $tabrowid[$id]; - } else { - $rowidcol = "rowid"; - } + $rowidcol = "rowid"; if ($rowid) { - $sql = "UPDATE ".$tabname[$id]." SET favorite = 1 WHERE ".$rowidcol." = ".((int) $rowid); + $sql = "UPDATE ".$db->sanitize($tabname[$id])." SET favorite = 1 WHERE ".$db->sanitize($rowidcol)." = ".((int) $rowid); } elseif ($code) { - $sql = "UPDATE ".$tabname[$id]." SET favorite = 1 WHERE code = '".$db->escape($code)."'"; + $sql = "UPDATE ".$db->sanitize($tabname[$id])." SET favorite = 1 WHERE code = '".$db->escape($code)."'"; } - $result = $db->query($sql); - if (!$result) { - dol_print_error($db); + if ($sql) { + $result = $db->query($sql); + if (!$result) { + dol_print_error($db); + } } } // disable favorite if ($action == 'disable_favorite') { - if ($tabrowid[$id]) { - $rowidcol = $tabrowid[$id]; - } else { - $rowidcol = "rowid"; - } + $rowidcol = "rowid"; if ($rowid) { - $sql = "UPDATE ".$tabname[$id]." SET favorite = 0 WHERE ".$rowidcol." = ".((int) $rowid); + $sql = "UPDATE ".$db->sanitize($tabname[$id])." SET favorite = 0 WHERE ".$db->sanitize($rowidcol)." = ".((int) $rowid); } elseif ($code) { - $sql = "UPDATE ".$tabname[$id]." SET favorite = 0 WHERE code = '".$db->escape($code)."'"; + $sql = "UPDATE ".$db->sanitize($tabname[$id])." SET favorite = 0 WHERE code = '".$db->escape($code)."'"; } - $result = $db->query($sql); - if (!$result) { - dol_print_error($db); + if ($sql) { + $result = $db->query($sql); + if (!$result) { + dol_print_error($db); + } } } @@ -459,7 +451,7 @@ $fieldlist = explode(',', $tabfield[$id]); $param = '&id='.$id; if ($search_country_id > 0) { - $param .= '&search_country_id='.urlencode($search_country_id); + $param .= '&search_country_id='.urlencode((string) ($search_country_id)); } $paramwithsearch = $param; if ($sortorder) { @@ -472,7 +464,7 @@ if (GETPOST('from', 'alpha')) { $paramwithsearch .= '&from='.urlencode(GETPOST('from', 'alpha')); } if ($listlimit) { - $paramwithsearch .= '&listlimit='.urlencode(GETPOST('listlimit', 'int')); + $paramwithsearch .= '&listlimit='.urlencode((string) (GETPOSTINT('listlimit'))); } print '
'; print ''; @@ -582,7 +574,7 @@ if ($tabname[$id]) { } $tmpaction = 'create'; - $parameters = array('fieldlist'=>$fieldlist, 'tabname'=>$tabname[$id]); + $parameters = array('fieldlist' => $fieldlist, 'tabname' => $tabname[$id]); $reshook = $hookmanager->executeHooks('createDictionaryFieldlist', $parameters, $obj, $tmpaction); // Note that $action and $object may have been modified by some hooks $error = $hookmanager->error; $errors = $hookmanager->errors; @@ -786,7 +778,7 @@ if ($resql) { print ''; if ($action == 'edit' && ($rowid == (!empty($obj->rowid) ? $obj->rowid : $obj->code))) { $tmpaction = 'edit'; - $parameters = array('fieldlist'=>$fieldlist, 'tabname'=>$tabname[$id]); + $parameters = array('fieldlist' => $fieldlist, 'tabname' => $tabname[$id]); $reshook = $hookmanager->executeHooks('editDictionaryFieldlist', $parameters, $obj, $tmpaction); // Note that $action and $object may have been modified by some hooks $error = $hookmanager->error; $errors = $hookmanager->errors; @@ -833,7 +825,7 @@ if ($resql) { $canbemodified = $iserasable; $tmpaction = 'view'; - $parameters = array('fieldlist'=>$fieldlist, 'tabname'=>$tabname[$id]); + $parameters = array('fieldlist' => $fieldlist, 'tabname' => $tabname[$id]); $reshook = $hookmanager->executeHooks('viewDictionaryFieldlist', $parameters, $obj, $tmpaction); // Note that $action and $object may have been modified by some hooks $error = $hookmanager->error; @@ -977,7 +969,7 @@ function fieldListAccountingCategories($fieldlist, $obj = null, $tabname = '', $ $fieldname = 'country'; if ($context == 'add') { $fieldname = 'country_id'; - $preselectcountrycode = GETPOSTISSET('country_id') ? GETPOST('country_id', 'int') : $mysoc->country_code; + $preselectcountrycode = GETPOSTISSET('country_id') ? GETPOSTINT('country_id') : $mysoc->country_code; print $form->select_country($preselectcountrycode, $fieldname, '', 28, 'maxwidth150 maxwidthonsmartphone'); } else { $preselectcountrycode = (empty($obj->country_code) ? (empty($obj->country) ? $mysoc->country_code : $obj->country) : $obj->country_code); diff --git a/htdocs/accountancy/admin/defaultaccounts.php b/htdocs/accountancy/admin/defaultaccounts.php index 3eace908373..8cb10b061e5 100644 --- a/htdocs/accountancy/admin/defaultaccounts.php +++ b/htdocs/accountancy/admin/defaultaccounts.php @@ -6,6 +6,7 @@ * Copyright (C) 2014 Marcos García * Copyright (C) 2014 Juanjo Menent * Copyright (C) 2015 Jean-François Ferry + * Copyright (C) 2024 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -92,7 +93,7 @@ if (getDolGlobalString('ACCOUNTING_FORCE_ENABLE_VAT_REVERSE_CHARGE')) { $list_account[] = 'ACCOUNTING_VAT_BUY_REVERSE_CHARGES_CREDIT'; $list_account[] = 'ACCOUNTING_VAT_BUY_REVERSE_CHARGES_DEBIT'; } -if (isModEnabled('banque')) { +if (isModEnabled('bank')) { $list_account[] = 'ACCOUNTING_ACCOUNT_TRANSFER_CASH'; } if (getDolGlobalString('INVOICE_USE_RETAINED_WARRANTY')) { @@ -101,7 +102,7 @@ if (getDolGlobalString('INVOICE_USE_RETAINED_WARRANTY')) { if (isModEnabled('don')) { $list_account[] = 'DONATION_ACCOUNTINGACCOUNT'; } -if (isModEnabled('adherent')) { +if (isModEnabled('member')) { $list_account[] = 'ADHERENT_SUBSCRIPTION_ACCOUNTINGACCOUNT'; } if (isModEnabled('loan')) { @@ -143,13 +144,13 @@ if ($action == 'update') { } $constname = 'ACCOUNTING_ACCOUNT_CUSTOMER_DEPOSIT'; - $constvalue = GETPOST($constname, 'int'); + $constvalue = GETPOSTINT($constname); if (!dolibarr_set_const($db, $constname, $constvalue, 'chaine', 0, '', $conf->entity)) { $error++; } $constname = 'ACCOUNTING_ACCOUNT_SUPPLIER_DEPOSIT'; - $constvalue = GETPOST($constname, 'int'); + $constvalue = GETPOSTINT($constname); if (!dolibarr_set_const($db, $constname, $constvalue, 'chaine', 0, '', $conf->entity)) { $error++; } @@ -163,7 +164,7 @@ if ($action == 'update') { } if ($action == 'setACCOUNTING_ACCOUNT_CUSTOMER_USE_AUXILIARY_ON_DEPOSIT') { - $setDisableAuxiliaryAccountOnCustomerDeposit = GETPOST('value', 'int'); + $setDisableAuxiliaryAccountOnCustomerDeposit = GETPOSTINT('value'); $res = dolibarr_set_const($db, "ACCOUNTING_ACCOUNT_CUSTOMER_USE_AUXILIARY_ON_DEPOSIT", $setDisableAuxiliaryAccountOnCustomerDeposit, 'yesno', 0, '', $conf->entity); if (!($res > 0)) { $error++; @@ -177,7 +178,7 @@ if ($action == 'setACCOUNTING_ACCOUNT_CUSTOMER_USE_AUXILIARY_ON_DEPOSIT') { } if ($action == 'setACCOUNTING_ACCOUNT_SUPPLIER_USE_AUXILIARY_ON_DEPOSIT') { - $setDisableAuxiliaryAccountOnSupplierDeposit = GETPOST('value', 'int'); + $setDisableAuxiliaryAccountOnSupplierDeposit = GETPOSTINT('value'); $res = dolibarr_set_const($db, "ACCOUNTING_ACCOUNT_SUPPLIER_USE_AUXILIARY_ON_DEPOSIT", $setDisableAuxiliaryAccountOnSupplierDeposit, 'yesno', 0, '', $conf->entity); if (!($res > 0)) { $error++; @@ -239,7 +240,7 @@ foreach ($list_account_main as $key) { // Value print ''; // Do not force class=right, or it align also the content of the select box $key_value = getDolGlobalString($key); - print $formaccounting->select_account($key_value, $key, 1, '', 1, 1, 'minwidth100 maxwidth300 maxwidthonsmartphone', 'accountsmain'); + print $formaccounting->select_account($key_value, $key, 1, [], 1, 1, 'minwidth100 maxwidth300 maxwidthonsmartphone', 'accountsmain'); print ''; print ''; } @@ -285,7 +286,7 @@ foreach ($list_account as $key) { print ''; // Value print ''; // Do not force class=right, or it align also the content of the select box - print $formaccounting->select_account(getDolGlobalString($key), $key, 1, '', 1, 1, 'minwidth100 maxwidth300 maxwidthonsmartphone', 'accounts'); + print $formaccounting->select_account(getDolGlobalString($key), $key, 1, [], 1, 1, 'minwidth100 maxwidth300 maxwidthonsmartphone', 'accounts'); print ''; print ''; } @@ -300,7 +301,7 @@ print img_picto('', 'bill', 'class="pictofixedwidth"') . $langs->trans('ACCOUNTI print ''; // Value print ''; // Do not force class=right, or it align also the content of the select box -print $formaccounting->select_account(getDolGlobalString('ACCOUNTING_ACCOUNT_CUSTOMER_DEPOSIT'), 'ACCOUNTING_ACCOUNT_CUSTOMER_DEPOSIT', 1, '', 1, 1, 'minwidth100 maxwidth300 maxwidthonsmartphone', 'accounts'); +print $formaccounting->select_account(getDolGlobalString('ACCOUNTING_ACCOUNT_CUSTOMER_DEPOSIT'), 'ACCOUNTING_ACCOUNT_CUSTOMER_DEPOSIT', 1, [], 1, 1, 'minwidth100 maxwidth300 maxwidthonsmartphone', 'accounts'); print ''; print ''; @@ -327,7 +328,7 @@ print img_picto('', 'supplier_invoice', 'class="pictofixedwidth"') . $langs->tra print ''; // Value print ''; // Do not force class=right, or it align also the content of the select box -print $formaccounting->select_account(getDolGlobalString('ACCOUNTING_ACCOUNT_SUPPLIER_DEPOSIT'), 'ACCOUNTING_ACCOUNT_SUPPLIER_DEPOSIT', 1, '', 1, 1, 'minwidth100 maxwidth300 maxwidthonsmartphone', 'accounts'); +print $formaccounting->select_account(getDolGlobalString('ACCOUNTING_ACCOUNT_SUPPLIER_DEPOSIT'), 'ACCOUNTING_ACCOUNT_SUPPLIER_DEPOSIT', 1, [], 1, 1, 'minwidth100 maxwidth300 maxwidthonsmartphone', 'accounts'); print ''; print ''; diff --git a/htdocs/accountancy/admin/export.php b/htdocs/accountancy/admin/export.php index 902b184a48c..8a0d6764590 100644 --- a/htdocs/accountancy/admin/export.php +++ b/htdocs/accountancy/admin/export.php @@ -84,7 +84,7 @@ $model_option = array( if ($action == 'update') { $error = 0; - $modelcsv = GETPOST('ACCOUNTING_EXPORT_MODELCSV', 'int'); + $modelcsv = GETPOSTINT('ACCOUNTING_EXPORT_MODELCSV'); if (!empty($modelcsv)) { if (!dolibarr_set_const($db, 'ACCOUNTING_EXPORT_MODELCSV', $modelcsv, 'chaine', 0, '', $conf->entity)) { diff --git a/htdocs/accountancy/admin/fiscalyear.php b/htdocs/accountancy/admin/fiscalyear.php index cb142948096..d1ba74b8b56 100644 --- a/htdocs/accountancy/admin/fiscalyear.php +++ b/htdocs/accountancy/admin/fiscalyear.php @@ -29,10 +29,10 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/fiscalyear.class.php'; $action = GETPOST('action', 'aZ09'); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 diff --git a/htdocs/accountancy/admin/fiscalyear_card.php b/htdocs/accountancy/admin/fiscalyear_card.php index 477fac08eee..447dcaab4c9 100644 --- a/htdocs/accountancy/admin/fiscalyear_card.php +++ b/htdocs/accountancy/admin/fiscalyear_card.php @@ -32,7 +32,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/fiscalyear.class.php'; $langs->loadLangs(array("admin", "compta")); // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); @@ -70,8 +70,8 @@ foreach ($tmpstatus2label as $key => $val) { $status2label[$key] = $langs->trans($val); } -$date_start = dol_mktime(0, 0, 0, GETPOST('fiscalyearmonth', 'int'), GETPOST('fiscalyearday', 'int'), GETPOST('fiscalyearyear', 'int')); -$date_end = dol_mktime(0, 0, 0, GETPOST('fiscalyearendmonth', 'int'), GETPOST('fiscalyearendday', 'int'), GETPOST('fiscalyearendyear', 'int')); +$date_start = dol_mktime(0, 0, 0, GETPOSTINT('fiscalyearmonth'), GETPOSTINT('fiscalyearday'), GETPOSTINT('fiscalyearyear')); +$date_end = dol_mktime(0, 0, 0, GETPOSTINT('fiscalyearendmonth'), GETPOSTINT('fiscalyearendday'), GETPOSTINT('fiscalyearendyear')); $permissiontoadd = $user->hasRight('accounting', 'fiscalyear', 'write'); @@ -95,7 +95,7 @@ if ($reshook < 0) { } if ($action == 'confirm_delete' && $confirm == "yes") { - $result = $object->delete($id); + $result = $object->delete($user); if ($result >= 0) { header("Location: fiscalyear.php"); exit(); @@ -313,23 +313,23 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea // Label print ''; - print $form->editfieldkey("Label", 'label', $object->label, $object, 1, 'alpha:32'); + print $form->editfieldkey("Label", 'label', $object->label, $object, 0, 'alpha:32'); print ''; - print $form->editfieldval("Label", 'label', $object->label, $object, 1, 'alpha:32'); + print $form->editfieldval("Label", 'label', $object->label, $object, 0, 'alpha:32'); print ""; // Date start print ''; - print $form->editfieldkey("DateStart", 'date_start', $object->date_start, $object, 1, 'datepicker'); + print $form->editfieldkey("DateStart", 'date_start', $object->date_start, $object, 0, 'datepicker'); print ''; - print $form->editfieldval("DateStart", 'date_start', $object->date_start, $object, 1, 'datepicker'); + print $form->editfieldval("DateStart", 'date_start', $object->date_start, $object, 0, 'datepicker'); print ''; // Date end print ''; - print $form->editfieldkey("DateEnd", 'date_end', $object->date_end, $object, 1, 'datepicker'); + print $form->editfieldkey("DateEnd", 'date_end', $object->date_end, $object, 0, 'datepicker'); print ''; - print $form->editfieldval("DateEnd", 'date_end', $object->date_end, $object, 1, 'datepicker'); + print $form->editfieldval("DateEnd", 'date_end', $object->date_end, $object, 0, 'datepicker'); print ''; // Status diff --git a/htdocs/accountancy/admin/fiscalyear_info.php b/htdocs/accountancy/admin/fiscalyear_info.php index 39754c0345d..f1ad54d9bb9 100644 --- a/htdocs/accountancy/admin/fiscalyear_info.php +++ b/htdocs/accountancy/admin/fiscalyear_info.php @@ -38,7 +38,7 @@ if (!$user->hasRight('accounting', 'fiscalyear', 'write')) { accessforbidden(); } -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); // View diff --git a/htdocs/accountancy/admin/index.php b/htdocs/accountancy/admin/index.php index ea93f6751fa..748b55ed733 100644 --- a/htdocs/accountancy/admin/index.php +++ b/htdocs/accountancy/admin/index.php @@ -45,7 +45,7 @@ if (!$user->hasRight('accounting', 'chartofaccount')) { $action = GETPOST('action', 'aZ09'); -$nbletter = GETPOST('ACCOUNTING_LETTERING_NBLETTERS', 'int'); +$nbletter = GETPOSTINT('ACCOUNTING_LETTERING_NBLETTERS'); // Parameters ACCOUNTING_* and others $list = array( @@ -70,7 +70,7 @@ $error = 0; if (in_array($action, array('setBANK_DISABLE_DIRECT_INPUT', 'setACCOUNTANCY_COMBO_FOR_AUX', 'setACCOUNTING_MANAGE_ZERO'))) { $constname = preg_replace('/^set/', '', $action); - $constvalue = GETPOST('value', 'int'); + $constvalue = GETPOSTINT('value'); $res = dolibarr_set_const($db, $constname, $constvalue, 'yesno', 0, '', $conf->entity); if (!($res > 0)) { $error++; @@ -102,7 +102,7 @@ if ($action == 'update') { $constvalue = GETPOST($constname, 'alpha'); if ($constname == 'ACCOUNTING_DATE_START_BINDING') { - $constvalue = dol_mktime(0, 0, 0, GETPOST($constname.'month', 'int'), GETPOST($constname.'day', 'int'), GETPOST($constname.'year', 'int')); + $constvalue = dol_mktime(0, 0, 0, GETPOSTINT($constname.'month'), GETPOSTINT($constname.'day'), GETPOSTINT($constname.'year')); } if (!dolibarr_set_const($db, $constname, $constvalue, 'chaine', 0, '', $conf->entity)) { @@ -128,7 +128,7 @@ if ($action == 'update') { } if ($action == 'setmanagezero') { - $setmanagezero = GETPOST('value', 'int'); + $setmanagezero = GETPOSTINT('value'); $res = dolibarr_set_const($db, "ACCOUNTING_MANAGE_ZERO", $setmanagezero, 'yesno', 0, '', $conf->entity); if (!($res > 0)) { $error++; @@ -142,7 +142,7 @@ if ($action == 'setmanagezero') { } if ($action == 'setdisabledirectinput') { - $setdisabledirectinput = GETPOST('value', 'int'); + $setdisabledirectinput = GETPOSTINT('value'); $res = dolibarr_set_const($db, "BANK_DISABLE_DIRECT_INPUT", $setdisabledirectinput, 'yesno', 0, '', $conf->entity); if (!($res > 0)) { $error++; @@ -156,7 +156,7 @@ if ($action == 'setdisabledirectinput') { } if ($action == 'setenabledraftexport') { - $setenabledraftexport = GETPOST('value', 'int'); + $setenabledraftexport = GETPOSTINT('value'); $res = dolibarr_set_const($db, "ACCOUNTING_ENABLE_EXPORT_DRAFT_JOURNAL", $setenabledraftexport, 'yesno', 0, '', $conf->entity); if (!($res > 0)) { $error++; @@ -170,7 +170,7 @@ if ($action == 'setenabledraftexport') { } if ($action == 'setenablesubsidiarylist') { - $setenablesubsidiarylist = GETPOST('value', 'int'); + $setenablesubsidiarylist = GETPOSTINT('value'); $res = dolibarr_set_const($db, "ACCOUNTANCY_COMBO_FOR_AUX", $setenablesubsidiarylist, 'yesno', 0, '', $conf->entity); if (!($res > 0)) { $error++; @@ -184,7 +184,7 @@ if ($action == 'setenablesubsidiarylist') { } if ($action == 'setdisablebindingonsales') { - $setdisablebindingonsales = GETPOST('value', 'int'); + $setdisablebindingonsales = GETPOSTINT('value'); $res = dolibarr_set_const($db, "ACCOUNTING_DISABLE_BINDING_ON_SALES", $setdisablebindingonsales, 'yesno', 0, '', $conf->entity); if (!($res > 0)) { $error++; @@ -198,7 +198,7 @@ if ($action == 'setdisablebindingonsales') { } if ($action == 'setdisablebindingonpurchases') { - $setdisablebindingonpurchases = GETPOST('value', 'int'); + $setdisablebindingonpurchases = GETPOSTINT('value'); $res = dolibarr_set_const($db, "ACCOUNTING_DISABLE_BINDING_ON_PURCHASES", $setdisablebindingonpurchases, 'yesno', 0, '', $conf->entity); if (!($res > 0)) { $error++; @@ -212,7 +212,7 @@ if ($action == 'setdisablebindingonpurchases') { } if ($action == 'setdisablebindingonexpensereports') { - $setdisablebindingonexpensereports = GETPOST('value', 'int'); + $setdisablebindingonexpensereports = GETPOSTINT('value'); $res = dolibarr_set_const($db, "ACCOUNTING_DISABLE_BINDING_ON_EXPENSEREPORTS", $setdisablebindingonexpensereports, 'yesno', 0, '', $conf->entity); if (!($res > 0)) { $error++; @@ -226,7 +226,7 @@ if ($action == 'setdisablebindingonexpensereports') { } if ($action == 'setenablelettering') { - $setenablelettering = GETPOST('value', 'int'); + $setenablelettering = GETPOSTINT('value'); $res = dolibarr_set_const($db, "ACCOUNTING_ENABLE_LETTERING", $setenablelettering, 'yesno', 0, '', $conf->entity); if (!($res > 0)) { $error++; @@ -240,7 +240,7 @@ if ($action == 'setenablelettering') { } if ($action == 'setenableautolettering') { - $setenableautolettering = GETPOST('value', 'int'); + $setenableautolettering = GETPOSTINT('value'); $res = dolibarr_set_const($db, "ACCOUNTING_ENABLE_AUTOLETTERING", $setenableautolettering, 'yesno', 0, '', $conf->entity); if (!($res > 0)) { $error++; @@ -254,7 +254,7 @@ if ($action == 'setenableautolettering') { } if ($action == 'setenablevatreversecharge') { - $setenablevatreversecharge = GETPOST('value', 'int'); + $setenablevatreversecharge = GETPOSTINT('value'); $res = dolibarr_set_const($db, "ACCOUNTING_FORCE_ENABLE_VAT_REVERSE_CHARGE", $setenablevatreversecharge, 'yesno', 0, '', $conf->entity); if (!($res > 0)) { $error++; diff --git a/htdocs/accountancy/admin/journals_list.php b/htdocs/accountancy/admin/journals_list.php index 6f001eec6e5..d710839a391 100644 --- a/htdocs/accountancy/admin/journals_list.php +++ b/htdocs/accountancy/admin/journals_list.php @@ -50,18 +50,20 @@ if (!$user->hasRight('accounting', 'chartofaccount')) { accessforbidden(); } +$acts = array(); $acts[0] = "activate"; $acts[1] = "disable"; +$actl = array(); $actl[0] = img_picto($langs->trans("Disabled"), 'switch_off', 'class="size15x"'); $actl[1] = img_picto($langs->trans("Activated"), 'switch_on', 'class="size15x"'); $listoffset = GETPOST('listoffset', 'alpha'); -$listlimit = GETPOST('listlimit', 'int') > 0 ? GETPOST('listlimit', 'int') : 1000; +$listlimit = GETPOSTINT('listlimit') > 0 ? GETPOSTINT('listlimit') : 1000; $active = 1; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -77,7 +79,7 @@ if (empty($sortorder)) { $error = 0; -$search_country_id = GETPOST('search_country_id', 'int'); +$search_country_id = GETPOSTINT('search_country_id'); // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context $hookmanager->initHooks(array('admin')); @@ -128,7 +130,7 @@ $tabcond[35] = isModEnabled('accounting'); // List of help for fields $tabhelp = array(); -$tabhelp[35] = array('code'=>$langs->trans("EnterAnyCode")); +$tabhelp[35] = array('code' => $langs->trans("EnterAnyCode")); // List of check for fields (NOT USED YET) $tabfieldcheck = array(); @@ -186,7 +188,7 @@ if (GETPOST('actionadd', 'alpha') || GETPOST('actionmodify', 'alpha')) { if ($tabrowid[$id]) { // Get free id for insert $newid = 0; - $sql = "SELECT MAX(".$tabrowid[$id].") newid from ".$tabname[$id]; + $sql = "SELECT MAX(".$db->sanitize($tabrowid[$id]).") newid FROM ".$db->sanitize($tabname[$id]); $result = $db->query($sql); if ($result) { $obj = $db->fetch_object($result); @@ -197,12 +199,12 @@ if (GETPOST('actionadd', 'alpha') || GETPOST('actionmodify', 'alpha')) { } // Add new entry - $sql = "INSERT INTO ".$tabname[$id]." ("; + $sql = "INSERT INTO ".$db->sanitize($tabname[$id])." ("; // List of fields if ($tabrowid[$id] && !in_array($tabrowid[$id], $listfieldinsert)) { $sql .= $tabrowid[$id].","; } - $sql .= $tabfieldinsert[$id]; + $sql .= $db->sanitize($tabfieldinsert[$id]); $sql .= ",active,entity)"; $sql .= " VALUES("; @@ -228,7 +230,7 @@ if (GETPOST('actionadd', 'alpha') || GETPOST('actionmodify', 'alpha')) { $result = $db->query($sql); if ($result) { // Add is ok setEventMessages($langs->transnoentities("RecordSaved"), null, 'mesgs'); - $_POST = array('id'=>$id); // Clean $_POST array, we keep only id + $_POST = array('id' => $id); // Clean $_POST array, we keep only id } else { if ($db->errno() == 'DB_ERROR_RECORD_ALREADY_EXISTS') { setEventMessages($langs->transnoentities("ErrorRecordAlreadyExists"), null, 'errors'); @@ -247,10 +249,10 @@ if (GETPOST('actionadd', 'alpha') || GETPOST('actionmodify', 'alpha')) { } // Modify entry - $sql = "UPDATE ".$tabname[$id]." SET "; + $sql = "UPDATE ".$db->sanitize($tabname[$id])." SET "; // Modifie valeur des champs if ($tabrowid[$id] && !in_array($tabrowid[$id], $listfieldmodify)) { - $sql .= $tabrowid[$id]."="; + $sql .= $db->sanitize($tabrowid[$id])." = "; $sql .= "'".$db->escape($rowid)."', "; } $i = 0; @@ -262,7 +264,7 @@ if (GETPOST('actionadd', 'alpha') || GETPOST('actionmodify', 'alpha')) { $sql .= "'".$db->escape(GETPOST($listfieldvalue[$i]))."'"; $i++; } - $sql .= " WHERE ".$rowidcol." = ".((int) $rowid); + $sql .= " WHERE ".$db->sanitize($rowidcol)." = ".((int) $rowid); $sql .= " AND entity = ".((int) $conf->entity); dol_syslog("actionmodify", LOG_DEBUG); @@ -287,7 +289,7 @@ if ($action == 'confirm_delete' && $confirm == 'yes') { // delete $rowidcol = "rowid"; } - $sql = "DELETE from ".$tabname[$id]." WHERE ".$rowidcol." = ".((int) $rowid); + $sql = "DELETE from ".$db->sanitize($tabname[$id])." WHERE ".$db->sanitize($rowidcol)." = ".((int) $rowid); $sql .= " AND entity = ".((int) $conf->entity); dol_syslog("delete", LOG_DEBUG); @@ -310,9 +312,9 @@ if ($action == $acts[0]) { } if ($rowid) { - $sql = "UPDATE ".$tabname[$id]." SET active = 1 WHERE ".$rowidcol." = ".((int) $rowid); + $sql = "UPDATE ".$db->sanitize($tabname[$id])." SET active = 1 WHERE ".$db->sanitize($rowidcol)." = ".((int) $rowid); } elseif ($code) { - $sql = "UPDATE ".$tabname[$id]." SET active = 1 WHERE code='".$db->escape($code)."'"; + $sql = "UPDATE ".$db->sanitize($tabname[$id])." SET active = 1 WHERE code = '".$db->escape($code)."'"; } $sql .= " AND entity = ".$conf->entity; @@ -331,9 +333,9 @@ if ($action == $acts[1]) { } if ($rowid) { - $sql = "UPDATE ".$tabname[$id]." SET active = 0 WHERE ".$rowidcol." = ".((int) $rowid); + $sql = "UPDATE ".$db->sanitize($tabname[$id])." SET active = 0 WHERE ".$db->sanitize($rowidcol)." = ".((int) $rowid); } elseif ($code) { - $sql = "UPDATE ".$tabname[$id]." SET active = 0 WHERE code='".$db->escape($code)."'"; + $sql = "UPDATE ".$db->sanitize($tabname[$id])." SET active = 0 WHERE code='".$db->escape($code)."'"; } $sql .= " AND entity = ".$conf->entity; @@ -451,7 +453,7 @@ if ($id) { } $tmpaction = 'create'; - $parameters = array('fieldlist'=>$fieldlist, 'tabname'=>$tabname[$id]); + $parameters = array('fieldlist' => $fieldlist, 'tabname' => $tabname[$id]); $reshook = $hookmanager->executeHooks('createDictionaryFieldlist', $parameters, $obj, $tmpaction); // Note that $action and $object may have been modified by some hooks $error = $hookmanager->error; $errors = $hookmanager->errors; @@ -479,7 +481,7 @@ if ($id) { $param = '&id='.((int) $id); if ($search_country_id > 0) { - $param .= '&search_country_id='.urlencode($search_country_id); + $param .= '&search_country_id='.urlencode((string) ($search_country_id)); } $paramwithsearch = $param; if ($sortorder) { @@ -561,7 +563,7 @@ if ($id) { print ''; if ($action == 'edit' && ($rowid == (!empty($obj->rowid) ? $obj->rowid : $obj->code))) { $tmpaction = 'edit'; - $parameters = array('fieldlist'=>$fieldlist, 'tabname'=>$tabname[$id]); + $parameters = array('fieldlist' => $fieldlist, 'tabname' => $tabname[$id]); $reshook = $hookmanager->executeHooks('editDictionaryFieldlist', $parameters, $obj, $tmpaction); // Note that $action and $object may have been modified by some hooks $error = $hookmanager->error; $errors = $hookmanager->errors; @@ -580,7 +582,7 @@ if ($id) { print ''; } else { $tmpaction = 'view'; - $parameters = array('fieldlist'=>$fieldlist, 'tabname'=>$tabname[$id]); + $parameters = array('fieldlist' => $fieldlist, 'tabname' => $tabname[$id]); $reshook = $hookmanager->executeHooks('viewDictionaryFieldlist', $parameters, $obj, $tmpaction); // Note that $action and $object may have been modified by some hooks $error = $hookmanager->error; diff --git a/htdocs/accountancy/admin/productaccount.php b/htdocs/accountancy/admin/productaccount.php index 903375f5920..e8630ad3aa9 100644 --- a/htdocs/accountancy/admin/productaccount.php +++ b/htdocs/accountancy/admin/productaccount.php @@ -5,6 +5,8 @@ * Copyright (C) 2014 Juanjo Menent * Copyright (C) 2015 Ari Elbaz (elarifr) * Copyright (C) 2021 Gauthier VERDOL + * Copyright (C) 2024 MDW + * Copyright (C) 2024 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -26,17 +28,16 @@ * \brief To define accounting account on product / service */ require '../../main.inc.php'; - +require_once DOL_DOCUMENT_ROOT.'/core/class/html.formaccounting.class.php'; +require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcategory.class.php'; +require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/report.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; -require_once DOL_DOCUMENT_ROOT.'/core/class/html.formaccounting.class.php'; require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountingaccount.class.php'; require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php'; -if (isModEnabled('categorie')) { - require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; -} +require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; // Load translation files required by the page $langs->loadLangs(array("companies", "compta", "accountancy", "products")); @@ -58,13 +59,13 @@ $optioncss = GETPOST('optioncss', 'alpha'); $codeventil_buy = GETPOST('codeventil_buy', 'array'); $codeventil_sell = GETPOST('codeventil_sell', 'array'); $chk_prod = GETPOST('chk_prod', 'array'); -$default_account = GETPOST('default_account', 'int'); +$default_account = GETPOSTINT('default_account'); $account_number_buy = GETPOST('account_number_buy'); $account_number_sell = GETPOST('account_number_sell'); $changeaccount = GETPOST('changeaccount', 'array'); $changeaccount_buy = GETPOST('changeaccount_buy', 'array'); $changeaccount_sell = GETPOST('changeaccount_sell', 'array'); -$searchCategoryProductOperator = (GETPOST('search_category_product_operator', 'int') ? GETPOST('search_category_product_operator', 'int') : 0); +$searchCategoryProductOperator = (GETPOSTINT('search_category_product_operator') ? GETPOSTINT('search_category_product_operator') : 0); $searchCategoryProductList = GETPOST('search_category_product_list', 'array'); $search_ref = GETPOST('search_ref', 'alpha'); $search_label = GETPOST('search_label', 'alpha'); @@ -81,14 +82,20 @@ $search_onpurchase = GETPOST('search_onpurchase', 'alpha'); $accounting_product_mode = GETPOST('accounting_product_mode', 'alpha'); $btn_changetype = GETPOST('changetype', 'alpha'); +// Show/hide child product variants +$show_childproducts = 0; +if (isModEnabled('variants')) { + $show_childproducts = GETPOST('search_show_childproducts'); +} + if (empty($accounting_product_mode)) { $accounting_product_mode = 'ACCOUNTANCY_SELL'; } -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : getDolGlobalInt('ACCOUNTING_LIMIT_LIST_VENTILATION', $conf->liste_limit); +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : getDolGlobalInt('ACCOUNTING_LIMIT_LIST_VENTILATION', $conf->liste_limit); $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -179,6 +186,10 @@ if ($action == 'update') { if (!empty($chk_prod) && $massaction === 'changeaccount') { //$msg = '
' . $langs->trans("Processing") . '...
'; + $ok = 0; + $ko = 0; + $msg = ''; + $sql = ''; if (!empty($chk_prod) && in_array($accounting_product_mode, $accounting_product_modes)) { $accounting = new AccountingAccount($db); @@ -186,8 +197,6 @@ if ($action == 'update') { $arrayofdifferentselectedvalues = array(); $cpt = 0; - $ok = 0; - $ko = 0; foreach ($chk_prod as $productid) { $accounting_account_id = GETPOST('codeventil_'.$productid); @@ -201,31 +210,30 @@ if ($action == 'update') { $msg .= '
'.$langs->trans("ErrorDB").' : '.$langs->trans("Product").' '.$productid.' '.$langs->trans("NotVentilatedinAccount").' : id='.$accounting_account_id.'
'.$sql.'
'; $ko++; } else { - $sql = ''; if (getDolGlobalString('MAIN_PRODUCT_PERENTITY_SHARED')) { $sql_exists = "SELECT rowid FROM " . MAIN_DB_PREFIX . "product_perentity"; $sql_exists .= " WHERE fk_product = " . ((int) $productid) . " AND entity = " . ((int) $conf->entity); $resql_exists = $db->query($sql_exists); if (!$resql_exists) { - $msg .= '
'.$langs->trans("ErrorDB").' : '.$langs->trans("Product").' '.$productid.' '.$langs->trans("NotVentilatedinAccount").' : id='.$accounting_account_id.'
'.$resql_exists.'
'; + $msg .= '
'.$langs->trans("ErrorDB").' : '.$langs->trans("Product").' '.$productid.' '.$langs->trans("NotVentilatedinAccount").' : id='.$accounting_account_id.'
'.json_encode($resql_exists).'
'; $ko++; } else { $nb_exists = $db->num_rows($resql_exists); if ($nb_exists <= 0) { // insert - $sql = "INSERT INTO " . MAIN_DB_PREFIX . "product_perentity (fk_product, entity, " . $db->escape($accountancy_field_name) . ")"; + $sql = "INSERT INTO " . MAIN_DB_PREFIX . "product_perentity (fk_product, entity, " . $db->sanitize($accountancy_field_name) . ")"; $sql .= " VALUES (" . ((int) $productid) . ", " . ((int) $conf->entity) . ", '" . $db->escape($accounting->account_number) . "')"; } else { $obj_exists = $db->fetch_object($resql_exists); // update $sql = "UPDATE " . MAIN_DB_PREFIX . "product_perentity"; - $sql .= " SET " . $accountancy_field_name . " = '" . $db->escape($accounting->account_number) . "'"; + $sql .= " SET " . $db->sanitize($accountancy_field_name) . " = '" . $db->escape($accounting->account_number) . "'"; $sql .= " WHERE rowid = " . ((int) $obj_exists->rowid); } } } else { $sql = " UPDATE ".MAIN_DB_PREFIX."product"; - $sql .= " SET ".$accountancy_field_name." = '".$db->escape($accounting->account_number)."'"; + $sql .= " SET ".$db->sanitize($accountancy_field_name)." = '".$db->escape($accounting->account_number)."'"; $sql .= " WHERE rowid = ".((int) $productid); } @@ -268,18 +276,18 @@ $form = new FormAccounting($db); // so we need to get those the rowid of those default value first $accounting = new AccountingAccount($db); // TODO: we should need to check if result is already exists accountaccount rowid..... -$aarowid_servbuy = $accounting->fetch('', getDolGlobalString('ACCOUNTING_SERVICE_BUY_ACCOUNT'), 1); -$aarowid_servbuy_intra = $accounting->fetch('', getDolGlobalString('ACCOUNTING_SERVICE_BUY_INTRA_ACCOUNT'), 1); -$aarowid_servbuy_export = $accounting->fetch('', getDolGlobalString('ACCOUNTING_SERVICE_BUY_EXPORT_ACCOUNT'), 1); -$aarowid_prodbuy = $accounting->fetch('', getDolGlobalString('ACCOUNTING_PRODUCT_BUY_ACCOUNT'), 1); -$aarowid_prodbuy_intra = $accounting->fetch('', getDolGlobalString('ACCOUNTING_PRODUCT_BUY_INTRA_ACCOUNT'), 1); -$aarowid_prodbuy_export = $accounting->fetch('', getDolGlobalString('ACCOUNTING_PRODUCT_BUY_EXPORT_ACCOUNT'), 1); -$aarowid_servsell = $accounting->fetch('', getDolGlobalString('ACCOUNTING_SERVICE_SOLD_ACCOUNT'), 1); -$aarowid_servsell_intra = $accounting->fetch('', getDolGlobalString('ACCOUNTING_SERVICE_SOLD_INTRA_ACCOUNT'), 1); -$aarowid_servsell_export = $accounting->fetch('', getDolGlobalString('ACCOUNTING_SERVICE_SOLD_EXPORT_ACCOUNT'), 1); -$aarowid_prodsell = $accounting->fetch('', getDolGlobalString('ACCOUNTING_PRODUCT_SOLD_ACCOUNT'), 1); -$aarowid_prodsell_intra = $accounting->fetch('', getDolGlobalString('ACCOUNTING_PRODUCT_SOLD_INTRA_ACCOUNT'), 1); -$aarowid_prodsell_export = $accounting->fetch('', getDolGlobalString('ACCOUNTING_PRODUCT_SOLD_EXPORT_ACCOUNT'), 1); +$aarowid_servbuy = $accounting->fetch(0, getDolGlobalString('ACCOUNTING_SERVICE_BUY_ACCOUNT'), 1); +$aarowid_servbuy_intra = $accounting->fetch(0, getDolGlobalString('ACCOUNTING_SERVICE_BUY_INTRA_ACCOUNT'), 1); +$aarowid_servbuy_export = $accounting->fetch(0, getDolGlobalString('ACCOUNTING_SERVICE_BUY_EXPORT_ACCOUNT'), 1); +$aarowid_prodbuy = $accounting->fetch(0, getDolGlobalString('ACCOUNTING_PRODUCT_BUY_ACCOUNT'), 1); +$aarowid_prodbuy_intra = $accounting->fetch(0, getDolGlobalString('ACCOUNTING_PRODUCT_BUY_INTRA_ACCOUNT'), 1); +$aarowid_prodbuy_export = $accounting->fetch(0, getDolGlobalString('ACCOUNTING_PRODUCT_BUY_EXPORT_ACCOUNT'), 1); +$aarowid_servsell = $accounting->fetch(0, getDolGlobalString('ACCOUNTING_SERVICE_SOLD_ACCOUNT'), 1); +$aarowid_servsell_intra = $accounting->fetch(0, getDolGlobalString('ACCOUNTING_SERVICE_SOLD_INTRA_ACCOUNT'), 1); +$aarowid_servsell_export = $accounting->fetch(0, getDolGlobalString('ACCOUNTING_SERVICE_SOLD_EXPORT_ACCOUNT'), 1); +$aarowid_prodsell = $accounting->fetch(0, getDolGlobalString('ACCOUNTING_PRODUCT_SOLD_ACCOUNT'), 1); +$aarowid_prodsell_intra = $accounting->fetch(0, getDolGlobalString('ACCOUNTING_PRODUCT_SOLD_INTRA_ACCOUNT'), 1); +$aarowid_prodsell_export = $accounting->fetch(0, getDolGlobalString('ACCOUNTING_PRODUCT_SOLD_EXPORT_ACCOUNT'), 1); $aacompta_servbuy = getDolGlobalString('ACCOUNTING_SERVICE_BUY_ACCOUNT', $langs->trans("CodeNotDef")); $aacompta_servbuy_intra = getDolGlobalString('ACCOUNTING_SERVICE_BUY_INTRA_ACCOUNT', $langs->trans("CodeNotDef")); @@ -324,16 +332,16 @@ $sql .= " aa.rowid as aaid"; $sql .= " FROM ".MAIN_DB_PREFIX."product as p"; if (getDolGlobalString('MAIN_PRODUCT_PERENTITY_SHARED')) { $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "product_perentity as ppe ON ppe.fk_product = p.rowid AND ppe.entity = " . ((int) $conf->entity); - $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_account as aa ON aa.account_number = ppe." . $accountancy_field_name . " AND aa.fk_pcg_version = '" . $db->escape($pcgvercode) . "'"; + $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_account as aa ON aa.account_number = ppe." . $db->sanitize($accountancy_field_name) . " AND aa.fk_pcg_version = '" . $db->escape($pcgvercode) . "'"; } else { - $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_account as aa ON aa.account_number = p." . $accountancy_field_name . " AND aa.fk_pcg_version = '" . $db->escape($pcgvercode) . "'"; + $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_account as aa ON aa.account_number = p." . $db->sanitize($accountancy_field_name) . " AND aa.fk_pcg_version = '" . $db->escape($pcgvercode) . "'"; } if (!empty($searchCategoryProductList)) { $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX."categorie_product as cp ON p.rowid = cp.fk_product"; // We'll need this table joined to the select in order to filter by categ } $sql .= ' WHERE p.entity IN ('.getEntity('product').')'; if (strlen(trim($search_current_account))) { - $sql .= natural_search((!getDolGlobalString('MAIN_PRODUCT_PERENTITY_SHARED') ? "p." : "ppe.") . $accountancy_field_name, $search_current_account); + $sql .= natural_search((!getDolGlobalString('MAIN_PRODUCT_PERENTITY_SHARED') ? "p." : "ppe.") . $db->sanitize($accountancy_field_name), $search_current_account); } if ($search_current_account_valid == 'withoutvalidaccount') { $sql .= " AND aa.account_number IS NULL"; @@ -347,7 +355,7 @@ if ($searchCategoryProductOperator == 1) { if (intval($searchCategoryProduct) == -2) { $searchCategoryProductSqlList[] = "cp.fk_categorie IS NULL"; } elseif (intval($searchCategoryProduct) > 0) { - $searchCategoryProductSqlList[] = "cp.fk_categorie = ".$db->escape($searchCategoryProduct); + $searchCategoryProductSqlList[] = "cp.fk_categorie = ".((int) $searchCategoryProduct); } } if (!empty($searchCategoryProductSqlList)) { @@ -423,7 +431,7 @@ if ($resql) { $param .= '&limit='.((int) $limit); } if ($searchCategoryProductOperator == 1) { - $param .= "&search_category_product_operator=".urlencode($searchCategoryProductOperator); + $param .= "&search_category_product_operator=".urlencode((string) ($searchCategoryProductOperator)); } foreach ($searchCategoryProductList as $searchCategoryProduct) { $param .= "&search_category_product_list[]=".urlencode($searchCategoryProduct); @@ -504,8 +512,8 @@ if ($resql) { if ($massaction !== 'set_default_account') { $arrayofmassactions = array( - 'changeaccount'=>img_picto('', 'check', 'class="pictofixedwidth"').$langs->trans("Save") - ,'set_default_account'=>img_picto('', 'check', 'class="pictofixedwidth"').$langs->trans("ConfirmPreselectAccount") + 'changeaccount' => img_picto('', 'check', 'class="pictofixedwidth"').$langs->trans("Save") + ,'set_default_account' => img_picto('', 'check', 'class="pictofixedwidth"').$langs->trans("ConfirmPreselectAccount") ); $massactionbutton = $form->selectMassAction('', $arrayofmassactions, 1); } @@ -517,7 +525,8 @@ if ($resql) { print_barre_liste($texte, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, '', 0, '', '', $limit, 0, 0, 1); if ($massaction == 'set_default_account') { - $formquestion[]=array('type' => 'other', + $formquestion = array(); + $formquestion[] = array('type' => 'other', 'name' => 'set_default_account', 'label' => $langs->trans("AccountancyCode"), 'value' => $form->select_account('', 'default_account', 1, array(), 0, 0, 'maxwidth200 maxwidthonsmartphone', 'cachewithshowemptyone')); @@ -526,7 +535,10 @@ if ($resql) { // Filter on categories $moreforfilter = ''; - if (isModEnabled('categorie') && $user->hasRight('categorie', 'lire')) { + if (isModEnabled('category') && $user->hasRight('categorie', 'lire')) { + $formcategory = new FormCategory($db); + $moreforfilter .= $formcategory->getFilterBox(Categorie::TYPE_PRODUCT, $searchCategoryProductList, 'minwidth300', $searchCategoryProductList ? $searchCategoryProductList : 0); + /* $moreforfilter .= '
'; $moreforfilter .= img_picto($langs->trans('Categories'), 'category', 'class="pictofixedwidth"'); $categoriesProductArr = $form->select_all_categories(Categorie::TYPE_PRODUCT, '', '', 64, 0, 1); @@ -534,6 +546,7 @@ if ($resql) { $moreforfilter .= Form::multiselectarray('search_category_product_list', $categoriesProductArr, $searchCategoryProductList, 0, 0, 'minwidth300'); $moreforfilter .= ' '; $moreforfilter .= '
'; + */ } // Show/hide child products. Hidden by default @@ -586,7 +599,7 @@ if ($resql) { // Current account print ''; print ''; - $listofvals = array('withoutvalidaccount'=>$langs->trans("WithoutValidAccount"), 'withvalidaccount'=>$langs->trans("WithValidAccount")); + $listofvals = array('withoutvalidaccount' => $langs->trans("WithoutValidAccount"), 'withvalidaccount' => $langs->trans("WithValidAccount")); print ' '.$langs->trans("or").' '.$form->selectarray('search_current_account_valid', $listofvals, $search_current_account_valid, 1); print ''; print ' '; diff --git a/htdocs/accountancy/admin/subaccount.php b/htdocs/accountancy/admin/subaccount.php index fb9a61e36d0..188915b0ec0 100644 --- a/htdocs/accountancy/admin/subaccount.php +++ b/htdocs/accountancy/admin/subaccount.php @@ -35,8 +35,8 @@ $langs->loadLangs(array("accountancy", "admin", "bills", "compta", "errors", "hr $mesg = ''; $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'alpha'); -$id = GETPOST('id', 'int'); -$rowid = GETPOST('rowid', 'int'); +$id = GETPOSTINT('id'); +$rowid = GETPOSTINT('rowid'); $massaction = GETPOST('massaction', 'aZ09'); $optioncss = GETPOST('optioncss', 'alpha'); $mode = GETPOST('mode', 'aZ'); // The output mode ('list', 'kanban', 'hierarchy', 'calendar', ...) @@ -44,7 +44,7 @@ $contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'ac $search_subaccount = GETPOST('search_subaccount', 'alpha'); $search_label = GETPOST('search_label', 'alpha'); -$search_type = GETPOST('search_type', 'int'); +$search_type = GETPOSTINT('search_type'); // Security check if ($user->socid > 0) { @@ -55,10 +55,10 @@ if (!$user->hasRight('accounting', 'chartofaccount')) { } // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -329,7 +329,7 @@ if ($resql) { print '
'.$langs->trans("WarningCreateSubAccounts").'
'; $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; - $selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')) : ''); // This also change content of $arrayfields + $selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) : ''); // This also change content of $arrayfields $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); $moreforfilter = ''; diff --git a/htdocs/accountancy/bookkeeping/balance.php b/htdocs/accountancy/bookkeeping/balance.php index dfbe2a06cff..d5604aab217 100644 --- a/htdocs/accountancy/bookkeeping/balance.php +++ b/htdocs/accountancy/bookkeeping/balance.php @@ -2,7 +2,7 @@ /* Copyright (C) 2016 Olivier Geffroy * Copyright (C) 2016 Florian Henry * Copyright (C) 2016-2024 Alexandre Spangaro - * Copyright (C) 2018 Frédéric France + * Copyright (C) 2018-2024 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -50,8 +50,8 @@ if ($type == 'sub') { } $contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : $context_default; $show_subgroup = GETPOST('show_subgroup', 'alpha'); -$search_date_start = dol_mktime(0, 0, 0, GETPOST('date_startmonth', 'int'), GETPOST('date_startday', 'int'), GETPOST('date_startyear', 'int')); -$search_date_end = dol_mktime(23, 59, 59, GETPOST('date_endmonth', 'int'), GETPOST('date_endday', 'int'), GETPOST('date_endyear', 'int')); +$search_date_start = dol_mktime(0, 0, 0, GETPOSTINT('date_startmonth'), GETPOSTINT('date_startday'), GETPOSTINT('date_startyear')); +$search_date_end = dol_mktime(23, 59, 59, GETPOSTINT('date_endmonth'), GETPOSTINT('date_endday'), GETPOSTINT('date_endyear')); $search_ledger_code = GETPOST('search_ledger_code', 'array'); $search_accountancy_code_start = GETPOST('search_accountancy_code_start', 'alpha'); if ($search_accountancy_code_start == - 1) { @@ -64,10 +64,10 @@ if ($search_accountancy_code_end == - 1) { $search_not_reconciled = GETPOST('search_not_reconciled', 'alpha'); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha') || (empty($toselect) && $massaction === '0')) { $page = 0; } // If $page is not defined, or '' or -1 or if we click on clear filters or if we select empty mass action @@ -161,15 +161,15 @@ if (empty($reshook)) { if (!empty($search_date_start)) { $filter['t.doc_date>='] = $search_date_start; - $param .= '&date_startmonth=' . GETPOST('date_startmonth', 'int') . '&date_startday=' . GETPOST('date_startday', 'int') . '&date_startyear=' . GETPOST('date_startyear', 'int'); + $param .= '&date_startmonth=' . GETPOSTINT('date_startmonth') . '&date_startday=' . GETPOSTINT('date_startday') . '&date_startyear=' . GETPOSTINT('date_startyear'); } if (!empty($search_date_end)) { $filter['t.doc_date<='] = $search_date_end; - $param .= '&date_endmonth=' . GETPOST('date_endmonth', 'int') . '&date_endday=' . GETPOST('date_endday', 'int') . '&date_endyear=' . GETPOST('date_endyear', 'int'); + $param .= '&date_endmonth=' . GETPOSTINT('date_endmonth') . '&date_endday=' . GETPOSTINT('date_endday') . '&date_endyear=' . GETPOSTINT('date_endyear'); } if (!empty($search_doc_date)) { $filter['t.doc_date'] = $search_doc_date; - $param .= '&doc_datemonth=' . GETPOST('doc_datemonth', 'int') . '&doc_dateday=' . GETPOST('doc_dateday', 'int') . '&doc_dateyear=' . GETPOST('doc_dateyear', 'int'); + $param .= '&doc_datemonth=' . GETPOSTINT('doc_datemonth') . '&doc_dateday=' . GETPOSTINT('doc_dateday') . '&doc_dateyear=' . GETPOSTINT('doc_dateyear'); } if (!empty($search_accountancy_code_start)) { if ($type == 'sub') { @@ -238,6 +238,7 @@ if ($action == 'export_csv') { exit; } + /* * View */ @@ -442,7 +443,7 @@ if ($action != 'export_csv') { print_liste_field_titre("Balance", $_SERVER["PHP_SELF"], "", $param, "", 'class="right"', $sortfield, $sortorder); // Hook fields - $parameters = array('param'=>$param, 'sortfield'=>$sortfield, 'sortorder'=>$sortorder); + $parameters = array('param' => $param, 'sortfield' => $sortfield, 'sortorder' => $sortorder); $reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters, $object); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; // Action column @@ -471,11 +472,13 @@ if ($action != 'export_csv') { $sql .= " GROUP BY t.numero_compte"; $resql = $db->query($sql); - $nrows = $resql->num_rows; $opening_balances = array(); - for ($i = 0; $i < $nrows; $i++) { - $arr = $resql->fetch_array(); - $opening_balances["'" . $arr['numero_compte'] . "'"] = $arr['opening_balance']; + if ($resql) { + $nrows = $resql->num_rows; + for ($i = 0; $i < $nrows; $i++) { + $arr = $resql->fetch_array(); + $opening_balances["'" . $arr['numero_compte'] . "'"] = $arr['opening_balance']; + } } } @@ -546,7 +549,7 @@ if ($action != 'export_csv') { // Show first line of a break print ''; - print ''.$line->numero_compte.($root_account_description ? ' - '.$root_account_description : '').''; + print ''.$root_account_number.($root_account_description ? ' - '.$root_account_description : '').''; print ''; $displayed_account = $root_account_number; @@ -587,20 +590,20 @@ if ($action != 'export_csv') { if ($line->subledger_account) { $urlzoom = DOL_URL_ROOT . '/accountancy/bookkeeping/listbyaccount.php?type=sub&search_accountancy_code_start=' . urlencode($line->subledger_account) . '&search_accountancy_code_end=' . urlencode($line->subledger_account); if (GETPOSTISSET('date_startmonth')) { - $urlzoom .= '&search_date_startmonth=' . GETPOST('date_startmonth', 'int') . '&search_date_startday=' . GETPOST('date_startday', 'int') . '&search_date_startyear=' . GETPOST('date_startyear', 'int'); + $urlzoom .= '&search_date_startmonth=' . GETPOSTINT('date_startmonth') . '&search_date_startday=' . GETPOSTINT('date_startday') . '&search_date_startyear=' . GETPOSTINT('date_startyear'); } if (GETPOSTISSET('date_endmonth')) { - $urlzoom .= '&search_date_endmonth=' . GETPOST('date_endmonth', 'int') . '&search_date_endday=' . GETPOST('date_endday', 'int') . '&search_date_endyear=' . GETPOST('date_endyear', 'int'); + $urlzoom .= '&search_date_endmonth=' . GETPOSTINT('date_endmonth') . '&search_date_endday=' . GETPOSTINT('date_endday') . '&search_date_endyear=' . GETPOSTINT('date_endyear'); } } } else { if ($line->numero_compte) { $urlzoom = DOL_URL_ROOT . '/accountancy/bookkeeping/listbyaccount.php?search_accountancy_code_start=' . urlencode($line->numero_compte) . '&search_accountancy_code_end=' . urlencode($line->numero_compte); if (GETPOSTISSET('date_startmonth')) { - $urlzoom .= '&search_date_startmonth=' . GETPOST('date_startmonth', 'int') . '&search_date_startday=' . GETPOST('date_startday', 'int') . '&search_date_startyear=' . GETPOST('date_startyear', 'int'); + $urlzoom .= '&search_date_startmonth=' . GETPOSTINT('date_startmonth') . '&search_date_startday=' . GETPOSTINT('date_startday') . '&search_date_startyear=' . GETPOSTINT('date_startyear'); } if (GETPOSTISSET('date_endmonth')) { - $urlzoom .= '&search_date_endmonth=' . GETPOST('date_endmonth', 'int') . '&search_date_endday=' . GETPOST('date_endday', 'int') . '&search_date_endyear=' . GETPOST('date_endyear', 'int'); + $urlzoom .= '&search_date_endmonth=' . GETPOSTINT('date_endmonth') . '&search_date_endday=' . GETPOSTINT('date_endday') . '&search_date_endyear=' . GETPOSTINT('date_endyear'); } } } @@ -689,7 +692,7 @@ if ($action != 'export_csv') { $accountingResult = $object->accountingResult($search_date_start, $search_date_end); if ($accountingResult < 0) { - $accountingResultDebit = price(price2num(abs($accountingResult), 'MT')); + $accountingResultDebit = price(abs(price2num($accountingResult, 'MT'))); $accountingResultClassCSS = ' error'; } else { $accountingResultCredit = price(price2num($accountingResult, 'MT')); diff --git a/htdocs/accountancy/bookkeeping/card.php b/htdocs/accountancy/bookkeeping/card.php index 4fa8ff92697..3469e8e994c 100644 --- a/htdocs/accountancy/bookkeeping/card.php +++ b/htdocs/accountancy/bookkeeping/card.php @@ -95,33 +95,90 @@ if (!$user->hasRight('accounting', 'mouvements', 'lire')) { * Actions */ -if ($cancel) { - header("Location: ".DOL_URL_ROOT.'/accountancy/bookkeeping/list.php'); - exit; +$parameters = array(); +$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); +if ($reshook < 0) { + setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); } - -if ($action == "confirm_update") { - $error = 0; - - if (((float) $debit != 0.0) && ((float) $credit != 0.0)) { - $error++; - setEventMessages($langs->trans('ErrorDebitCredit'), null, 'errors'); - $action = 'update'; - } - if (empty($accountingaccount_number) || $accountingaccount_number == '-1') { - $error++; - setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv("AccountAccountingShort")), null, 'errors'); - $action = 'update'; +if (empty($reshook)) { + if ($cancel) { + header("Location: ".DOL_URL_ROOT.'/accountancy/bookkeeping/list.php'); + exit; } - if (!$error) { - $object = new BookKeeping($db); + if ($action == "confirm_update") { + $error = 0; - $result = $object->fetch($id, null, $mode); - if ($result < 0) { + if (((float) $debit != 0.0) && ((float) $credit != 0.0)) { $error++; - setEventMessages($object->error, $object->errors, 'errors'); - } else { + setEventMessages($langs->trans('ErrorDebitCredit'), null, 'errors'); + $action = 'update'; + } + if (empty($accountingaccount_number) || $accountingaccount_number == '-1') { + $error++; + setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv("AccountAccountingShort")), null, 'errors'); + $action = 'update'; + } + + if (!$error) { + $object = new BookKeeping($db); + + $result = $object->fetch($id, null, $mode); + if ($result < 0) { + $error++; + setEventMessages($object->error, $object->errors, 'errors'); + } else { + $object->numero_compte = $accountingaccount_number; + $object->subledger_account = $subledger_account; + $object->subledger_label = $subledger_label; + $object->label_compte = $accountingaccount_label; + $object->label_operation = $label_operation; + $object->debit = $debit; + $object->credit = $credit; + + if ((float) $debit != 0.0) { + $object->montant = $debit; // deprecated + $object->amount = $debit; + $object->sens = 'D'; + } + if ((float) $credit != 0.0) { + $object->montant = $credit; // deprecated + $object->amount = $credit; + $object->sens = 'C'; + } + + $result = $object->update($user, false, $mode); + if ($result < 0) { + setEventMessages($object->error, $object->errors, 'errors'); + } else { + if ($mode != '_tmp') { + setEventMessages($langs->trans('RecordSaved'), null, 'mesgs'); + } + + $debit = 0; + $credit = 0; + + $action = ''; + } + } + } + } elseif ($action == "add") { + $error = 0; + + if (((float) $debit != 0.0) && ((float) $credit != 0.0)) { + $error++; + setEventMessages($langs->trans('ErrorDebitCredit'), null, 'errors'); + $action = ''; + } + if (empty($accountingaccount_number) || $accountingaccount_number == '-1') { + $error++; + setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv("AccountAccountingShort")), null, 'errors'); + $action = ''; + } + + if (!$error) { + $object = new BookKeeping($db); + $object->numero_compte = $accountingaccount_number; $object->subledger_account = $subledger_account; $object->subledger_label = $subledger_label; @@ -129,19 +186,28 @@ if ($action == "confirm_update") { $object->label_operation = $label_operation; $object->debit = $debit; $object->credit = $credit; + $object->doc_date = (string) GETPOST('doc_date', 'alpha'); + $object->doc_type = (string) GETPOST('doc_type', 'alpha'); + $object->piece_num = $piece_num; + $object->doc_ref = (string) GETPOST('doc_ref', 'alpha'); + $object->code_journal = $journal_code; + $object->journal_label = $journal_label; + $object->fk_doc = GETPOSTINT('fk_doc'); + $object->fk_docdet = GETPOSTINT('fk_docdet'); if ((float) $debit != 0.0) { $object->montant = $debit; // deprecated $object->amount = $debit; $object->sens = 'D'; } + if ((float) $credit != 0.0) { $object->montant = $credit; // deprecated $object->amount = $credit; $object->sens = 'C'; } - $result = $object->update($user, false, $mode); + $result = $object->createStd($user, false, $mode); if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); } else { @@ -155,113 +221,73 @@ if ($action == "confirm_update") { $action = ''; } } - } -} elseif ($action == "add") { - $error = 0; - - if (((float) $debit != 0.0) && ((float) $credit != 0.0)) { - $error++; - setEventMessages($langs->trans('ErrorDebitCredit'), null, 'errors'); - $action = ''; - } - if (empty($accountingaccount_number) || $accountingaccount_number == '-1') { - $error++; - setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv("AccountAccountingShort")), null, 'errors'); - $action = ''; - } - - if (!$error) { + } elseif ($action == "confirm_delete") { $object = new BookKeeping($db); - $object->numero_compte = $accountingaccount_number; - $object->subledger_account = $subledger_account; - $object->subledger_label = $subledger_label; - $object->label_compte = $accountingaccount_label; - $object->label_operation = $label_operation; - $object->debit = $debit; - $object->credit = $credit; - $object->doc_date = (string) GETPOST('doc_date', 'alpha'); - $object->doc_type = (string) GETPOST('doc_type', 'alpha'); - $object->piece_num = $piece_num; - $object->doc_ref = (string) GETPOST('doc_ref', 'alpha'); - $object->code_journal = $journal_code; - $object->journal_label = $journal_label; - $object->fk_doc = GETPOSTINT('fk_doc'); - $object->fk_docdet = GETPOSTINT('fk_docdet'); + $result = $object->fetch($id, null, $mode); + $piece_num = $object->piece_num; - if ((float) $debit != 0.0) { - $object->montant = $debit; // deprecated - $object->amount = $debit; - $object->sens = 'D'; - } - - if ((float) $credit != 0.0) { - $object->montant = $credit; // deprecated - $object->amount = $credit; - $object->sens = 'C'; - } - - $result = $object->createStd($user, false, $mode); if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); } else { - if ($mode != '_tmp') { - setEventMessages($langs->trans('RecordSaved'), null, 'mesgs'); + $result = $object->delete($user, 0, $mode); + if ($result < 0) { + setEventMessages($object->error, $object->errors, 'errors'); } + } + $action = ''; + } elseif ($action == "confirm_create") { + $error = 0; - $debit = 0; - $credit = 0; + $object = new BookKeeping($db); - $action = ''; + if (!$journal_code || $journal_code == '-1') { + setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv("Journal")), null, 'errors'); + $action = 'create'; + $error++; + } + if (!GETPOST('doc_ref', 'alpha')) { + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Piece")), null, 'errors'); + $action = 'create'; + $error++; + } + + if (!$error) { + $object->label_compte = ''; + $object->debit = 0; + $object->credit = 0; + $object->doc_date = $date_start = dol_mktime(0, 0, 0, GETPOSTINT('doc_datemonth'), GETPOSTINT('doc_dateday'), GETPOSTINT('doc_dateyear')); + $object->doc_type = GETPOST('doc_type', 'alpha'); + $object->piece_num = GETPOSTINT('next_num_mvt'); + $object->doc_ref = GETPOST('doc_ref', 'alpha'); + $object->code_journal = $journal_code; + $object->journal_label = $journal_label; + $object->fk_doc = 0; + $object->fk_docdet = 0; + $object->montant = 0; // deprecated + $object->amount = 0; + + $result = $object->createStd($user, 0, $mode); + if ($result < 0) { + setEventMessages($object->error, $object->errors, 'errors'); + + $action = 'create'; + } else { + $reshook = $hookmanager->executeHooks('afterCreateBookkeeping', $parameters, $object, $action); + + if ($mode != '_tmp') { + setEventMessages($langs->trans('RecordSaved'), null, 'mesgs'); + } + $action = ''; + $id = $object->id; + $piece_num = $object->piece_num; + } } } -} elseif ($action == "confirm_delete") { - $object = new BookKeeping($db); - $result = $object->fetch($id, null, $mode); - $piece_num = $object->piece_num; - - if ($result < 0) { - setEventMessages($object->error, $object->errors, 'errors'); - } else { - $result = $object->delete($user, false, $mode); - if ($result < 0) { - setEventMessages($object->error, $object->errors, 'errors'); - } - } - $action = ''; -} elseif ($action == "confirm_create") { - $error = 0; - - $object = new BookKeeping($db); - - if (!$journal_code || $journal_code == '-1') { - setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv("Journal")), null, 'errors'); - $action = 'create'; - $error++; - } - if (!GETPOST('doc_ref', 'alpha')) { - setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Piece")), null, 'errors'); - $action = 'create'; - $error++; - } - - if (!$error) { - $object->label_compte = ''; - $object->debit = 0; - $object->credit = 0; - $object->doc_date = $date_start = dol_mktime(0, 0, 0, GETPOST('doc_datemonth', 'int'), GETPOST('doc_dateday', 'int'), GETPOST('doc_dateyear', 'int')); - $object->doc_type = GETPOST('doc_type', 'alpha'); - $object->piece_num = GETPOSTINT('next_num_mvt'); - $object->doc_ref = GETPOST('doc_ref', 'alpha'); - $object->code_journal = $journal_code; - $object->journal_label = $journal_label; - $object->fk_doc = 0; - $object->fk_docdet = 0; - $object->montant = 0; // deprecated - $object->amount = 0; - - $result = $object->createStd($user, 0, $mode); + if ($action == 'setdate') { + $datedoc = dol_mktime(0, 0, 0, GETPOSTINT('doc_datemonth'), GETPOSTINT('doc_dateday'), GETPOSTINT('doc_dateyear')); + $result = $object->updateByMvt($piece_num, 'doc_date', $db->idate($datedoc), $mode); if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); } else { @@ -269,67 +295,50 @@ if ($action == "confirm_update") { setEventMessages($langs->trans('RecordSaved'), null, 'mesgs'); } $action = ''; - $id = $object->id; - $piece_num = $object->piece_num; + } + } + + if ($action == 'setjournal') { + $result = $object->updateByMvt($piece_num, 'code_journal', $journal_code, $mode); + $result = $object->updateByMvt($piece_num, 'journal_label', $journal_label, $mode); + if ($result < 0) { + setEventMessages($object->error, $object->errors, 'errors'); + } else { + if ($mode != '_tmp') { + setEventMessages($langs->trans('RecordSaved'), null, 'mesgs'); + } + $action = ''; + } + } + + if ($action == 'setdocref') { + $refdoc = GETPOST('doc_ref', 'alpha'); + $result = $object->updateByMvt($piece_num, 'doc_ref', $refdoc, $mode); + if ($result < 0) { + setEventMessages($object->error, $object->errors, 'errors'); + } else { + if ($mode != '_tmp') { + setEventMessages($langs->trans('RecordSaved'), null, 'mesgs'); + } + $action = ''; + } + } + + // Validate transaction + if ($action == 'valid') { + $result = $object->transformTransaction(0, $piece_num); + if ($result < 0) { + setEventMessages($object->error, $object->errors, 'errors'); + } else { + header("Location: list.php?sortfield=t.piece_num&sortorder=asc"); + exit; } } } -if ($action == 'setdate') { - $datedoc = dol_mktime(0, 0, 0, GETPOST('doc_datemonth', 'int'), GETPOST('doc_dateday', 'int'), GETPOST('doc_dateyear', 'int')); - $result = $object->updateByMvt($piece_num, 'doc_date', $db->idate($datedoc), $mode); - if ($result < 0) { - setEventMessages($object->error, $object->errors, 'errors'); - } else { - if ($mode != '_tmp') { - setEventMessages($langs->trans('RecordSaved'), null, 'mesgs'); - } - $action = ''; - } -} - -if ($action == 'setjournal') { - $result = $object->updateByMvt($piece_num, 'code_journal', $journal_code, $mode); - $result = $object->updateByMvt($piece_num, 'journal_label', $journal_label, $mode); - if ($result < 0) { - setEventMessages($object->error, $object->errors, 'errors'); - } else { - if ($mode != '_tmp') { - setEventMessages($langs->trans('RecordSaved'), null, 'mesgs'); - } - $action = ''; - } -} - -if ($action == 'setdocref') { - $refdoc = GETPOST('doc_ref', 'alpha'); - $result = $object->updateByMvt($piece_num, 'doc_ref', $refdoc, $mode); - if ($result < 0) { - setEventMessages($object->error, $object->errors, 'errors'); - } else { - if ($mode != '_tmp') { - setEventMessages($langs->trans('RecordSaved'), null, 'mesgs'); - } - $action = ''; - } -} - -// Validate transaction -if ($action == 'valid') { - $result = $object->transformTransaction(0, $piece_num); - if ($result < 0) { - setEventMessages($object->error, $object->errors, 'errors'); - } else { - header("Location: list.php?sortfield=t.piece_num&sortorder=asc"); - exit; - } -} - - /* * View */ - $form = new Form($db); $formaccounting = new FormAccounting($db); @@ -374,7 +383,7 @@ if ($action == 'create') { print ''; print ''.$langs->trans("Docdate").''; print ''; - print $form->selectDate('', 'doc_date', '', '', '', "create_mvt", 1, 1); + print $form->selectDate('', 'doc_date', 0, 0, 0, "create_mvt", 1, 1); print ''; print ''; @@ -394,6 +403,7 @@ if ($action == 'create') { print ''; print ''; */ + $reshookAddLine = $hookmanager->executeHooks('bookkeepingAddLine', $parameters, $object, $action); print ''; @@ -404,6 +414,7 @@ if ($action == 'create') { print ''; } else { $object = new BookKeeping($db); + $result = $object->fetchPerMvt($piece_num, $mode); if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); @@ -447,7 +458,7 @@ if ($action == 'create') { print $langs->trans('Docdate'); print ''; if ($action != 'editdate') { - print 'piece_num).'&mode='.urlencode($mode).'">'.img_edit($langs->transnoentitiesnoconv('SetDate'), 1).''; + print 'piece_num)).'&mode='.urlencode((string) ($mode)).'">'.img_edit($langs->transnoentitiesnoconv('SetDate'), 1).''; } print ''; print ''; @@ -459,7 +470,7 @@ if ($action == 'create') { print ''; print ''; print ''; - print $form->selectDate($object->doc_date ? $object->doc_date : - 1, 'doc_date', '', '', '', "setdate"); + print $form->selectDate($object->doc_date ? $object->doc_date : - 1, 'doc_date', 0, 0, 0, "setdate"); print ''; print ''; } else { @@ -474,7 +485,7 @@ if ($action == 'create') { print $langs->trans('Codejournal'); print ''; if ($action != 'editjournal') { - print 'piece_num).'&mode='.urlencode($mode).'">'.img_edit($langs->transnoentitiesnoconv('Edit'), 1).''; + print 'piece_num)).'&mode='.urlencode((string) ($mode)).'">'.img_edit($langs->transnoentitiesnoconv('Edit'), 1).''; } print ''; print ''; @@ -501,7 +512,7 @@ if ($action == 'create') { print $langs->trans('Piece'); print ''; if ($action != 'editdocref') { - print 'piece_num).'&mode='.urlencode($mode).'">'.img_edit($langs->transnoentitiesnoconv('Edit'), 1).''; + print 'piece_num)).'&mode='.urlencode((string) ($mode)).'">'.img_edit($langs->transnoentitiesnoconv('Edit'), 1).''; } print ''; print ''; @@ -590,7 +601,7 @@ if ($action == 'create') { print '' . $langs->trans("Control") . ''; if ($object->doc_type == 'customer_invoice') { - $sqlmid = 'SELECT rowid as ref'; + $sqlmid = 'SELECT rowid as ref'; $sqlmid .= " FROM ".MAIN_DB_PREFIX."facture as fac"; $sqlmid .= " WHERE fac.rowid=" . ((int) $object->fk_doc); dol_syslog("accountancy/bookkeeping/card.php::sqlmid=" . $sqlmid, LOG_DEBUG); diff --git a/htdocs/accountancy/bookkeeping/export.php b/htdocs/accountancy/bookkeeping/export.php index f6d4f4bfd30..cb9e8ea09d4 100644 --- a/htdocs/accountancy/bookkeeping/export.php +++ b/htdocs/accountancy/bookkeeping/export.php @@ -43,55 +43,55 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; // Load translation files required by the page $langs->loadLangs(array("accountancy", "compta")); -$socid = GETPOST('socid', 'int'); +$socid = GETPOSTINT('socid'); $action = GETPOST('action', 'aZ09'); $massaction = GETPOST('massaction', 'alpha'); $confirm = GETPOST('confirm', 'alpha'); $toselect = GETPOST('toselect', 'array'); $contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'bookkeepinglist'; -$search_mvt_num = GETPOST('search_mvt_num', 'int'); +$search_mvt_num = GETPOST('search_mvt_num', 'alpha'); $search_doc_type = GETPOST("search_doc_type", 'alpha'); $search_doc_ref = GETPOST("search_doc_ref", 'alpha'); -$search_date_startyear = GETPOST('search_date_startyear', 'int'); -$search_date_startmonth = GETPOST('search_date_startmonth', 'int'); -$search_date_startday = GETPOST('search_date_startday', 'int'); -$search_date_endyear = GETPOST('search_date_endyear', 'int'); -$search_date_endmonth = GETPOST('search_date_endmonth', 'int'); -$search_date_endday = GETPOST('search_date_endday', 'int'); +$search_date_startyear = GETPOSTINT('search_date_startyear'); +$search_date_startmonth = GETPOSTINT('search_date_startmonth'); +$search_date_startday = GETPOSTINT('search_date_startday'); +$search_date_endyear = GETPOSTINT('search_date_endyear'); +$search_date_endmonth = GETPOSTINT('search_date_endmonth'); +$search_date_endday = GETPOSTINT('search_date_endday'); $search_date_start = dol_mktime(0, 0, 0, $search_date_startmonth, $search_date_startday, $search_date_startyear); $search_date_end = dol_mktime(23, 59, 59, $search_date_endmonth, $search_date_endday, $search_date_endyear); -$search_doc_date = dol_mktime(0, 0, 0, GETPOST('doc_datemonth', 'int'), GETPOST('doc_dateday', 'int'), GETPOST('doc_dateyear', 'int')); -$search_date_creation_startyear = GETPOST('search_date_creation_startyear', 'int'); -$search_date_creation_startmonth = GETPOST('search_date_creation_startmonth', 'int'); -$search_date_creation_startday = GETPOST('search_date_creation_startday', 'int'); -$search_date_creation_endyear = GETPOST('search_date_creation_endyear', 'int'); -$search_date_creation_endmonth = GETPOST('search_date_creation_endmonth', 'int'); -$search_date_creation_endday = GETPOST('search_date_creation_endday', 'int'); +$search_doc_date = dol_mktime(0, 0, 0, GETPOSTINT('doc_datemonth'), GETPOSTINT('doc_dateday'), GETPOSTINT('doc_dateyear')); +$search_date_creation_startyear = GETPOSTINT('search_date_creation_startyear'); +$search_date_creation_startmonth = GETPOSTINT('search_date_creation_startmonth'); +$search_date_creation_startday = GETPOSTINT('search_date_creation_startday'); +$search_date_creation_endyear = GETPOSTINT('search_date_creation_endyear'); +$search_date_creation_endmonth = GETPOSTINT('search_date_creation_endmonth'); +$search_date_creation_endday = GETPOSTINT('search_date_creation_endday'); $search_date_creation_start = dol_mktime(0, 0, 0, $search_date_creation_startmonth, $search_date_creation_startday, $search_date_creation_startyear); $search_date_creation_end = dol_mktime(23, 59, 59, $search_date_creation_endmonth, $search_date_creation_endday, $search_date_creation_endyear); -$search_date_modification_startyear = GETPOST('search_date_modification_startyear', 'int'); -$search_date_modification_startmonth = GETPOST('search_date_modification_startmonth', 'int'); -$search_date_modification_startday = GETPOST('search_date_modification_startday', 'int'); -$search_date_modification_endyear = GETPOST('search_date_modification_endyear', 'int'); -$search_date_modification_endmonth = GETPOST('search_date_modification_endmonth', 'int'); -$search_date_modification_endday = GETPOST('search_date_modification_endday', 'int'); +$search_date_modification_startyear = GETPOSTINT('search_date_modification_startyear'); +$search_date_modification_startmonth = GETPOSTINT('search_date_modification_startmonth'); +$search_date_modification_startday = GETPOSTINT('search_date_modification_startday'); +$search_date_modification_endyear = GETPOSTINT('search_date_modification_endyear'); +$search_date_modification_endmonth = GETPOSTINT('search_date_modification_endmonth'); +$search_date_modification_endday = GETPOSTINT('search_date_modification_endday'); $search_date_modification_start = dol_mktime(0, 0, 0, $search_date_modification_startmonth, $search_date_modification_startday, $search_date_modification_startyear); $search_date_modification_end = dol_mktime(23, 59, 59, $search_date_modification_endmonth, $search_date_modification_endday, $search_date_modification_endyear); -$search_date_export_startyear = GETPOST('search_date_export_startyear', 'int'); -$search_date_export_startmonth = GETPOST('search_date_export_startmonth', 'int'); -$search_date_export_startday = GETPOST('search_date_export_startday', 'int'); -$search_date_export_endyear = GETPOST('search_date_export_endyear', 'int'); -$search_date_export_endmonth = GETPOST('search_date_export_endmonth', 'int'); -$search_date_export_endday = GETPOST('search_date_export_endday', 'int'); +$search_date_export_startyear = GETPOSTINT('search_date_export_startyear'); +$search_date_export_startmonth = GETPOSTINT('search_date_export_startmonth'); +$search_date_export_startday = GETPOSTINT('search_date_export_startday'); +$search_date_export_endyear = GETPOSTINT('search_date_export_endyear'); +$search_date_export_endmonth = GETPOSTINT('search_date_export_endmonth'); +$search_date_export_endday = GETPOSTINT('search_date_export_endday'); $search_date_export_start = dol_mktime(0, 0, 0, $search_date_export_startmonth, $search_date_export_startday, $search_date_export_startyear); $search_date_export_end = dol_mktime(23, 59, 59, $search_date_export_endmonth, $search_date_export_endday, $search_date_export_endyear); -$search_date_validation_startyear = GETPOST('search_date_validation_startyear', 'int'); -$search_date_validation_startmonth = GETPOST('search_date_validation_startmonth', 'int'); -$search_date_validation_startday = GETPOST('search_date_validation_startday', 'int'); -$search_date_validation_endyear = GETPOST('search_date_validation_endyear', 'int'); -$search_date_validation_endmonth = GETPOST('search_date_validation_endmonth', 'int'); -$search_date_validation_endday = GETPOST('search_date_validation_endday', 'int'); +$search_date_validation_startyear = GETPOSTINT('search_date_validation_startyear'); +$search_date_validation_startmonth = GETPOSTINT('search_date_validation_startmonth'); +$search_date_validation_startday = GETPOSTINT('search_date_validation_startday'); +$search_date_validation_endyear = GETPOSTINT('search_date_validation_endyear'); +$search_date_validation_endmonth = GETPOSTINT('search_date_validation_endmonth'); +$search_date_validation_endday = GETPOSTINT('search_date_validation_endday'); $search_date_validation_start = dol_mktime(0, 0, 0, $search_date_validation_startmonth, $search_date_validation_startday, $search_date_validation_startyear); $search_date_validation_end = dol_mktime(23, 59, 59, $search_date_validation_endmonth, $search_date_validation_endday, $search_date_validation_endyear); $search_import_key = GETPOST("search_import_key", 'alpha'); @@ -104,7 +104,7 @@ if (GETPOST("button_export_file_x") || GETPOST("button_export_file.x") || GETPOS $action = 'export_file'; } -$search_account_category = GETPOST('search_account_category', 'int'); +$search_account_category = GETPOSTINT('search_account_category'); $search_accountancy_code = GETPOST("search_accountancy_code", 'alpha'); $search_accountancy_code_start = GETPOST('search_accountancy_code_start', 'alpha'); @@ -134,11 +134,11 @@ $search_lettering_code = GETPOST('search_lettering_code', 'alpha'); $search_not_reconciled = GETPOST('search_not_reconciled', 'alpha'); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : getDolGlobalString('ACCOUNTING_LIMIT_LIST_VENTILATION', $conf->liste_limit); +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : getDolGlobalString('ACCOUNTING_LIMIT_LIST_VENTILATION', $conf->liste_limit); $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); $optioncss = GETPOST('optioncss', 'alpha'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0) { $page = 0; } @@ -159,7 +159,7 @@ $hookmanager->initHooks(array('bookkeepingexport')); $formaccounting = new FormAccounting($db); $form = new Form($db); -if (!in_array($action, array('export_file', 'delmouv', 'delmouvconfirm')) && !GETPOSTISSET('begin') && !GETPOSTISSET('formfilteraction') && GETPOST('page', 'int') == '' && !GETPOST('noreset', 'int') && $user->hasRight('accounting', 'mouvements', 'export')) { +if (!in_array($action, array('export_file', 'delmouv', 'delmouvconfirm')) && !GETPOSTISSET('begin') && !GETPOSTISSET('formfilteraction') && GETPOSTINT('page') == '' && !GETPOSTINT('noreset') && $user->hasRight('accounting', 'mouvements', 'export')) { if (empty($search_date_start) && empty($search_date_end) && !GETPOSTISSET('restore_lastsearch_values') && !GETPOST('search_accountancy_code_start')) { $query = "SELECT date_start, date_end from ".MAIN_DB_PREFIX."accounting_fiscalyear "; $query .= " where date_start < '".$db->idate(dol_now())."' and date_end > '".$db->idate(dol_now())."' limit 1"; @@ -189,21 +189,21 @@ if (!in_array($action, array('export_file', 'delmouv', 'delmouvconfirm')) && !GE $arrayfields = array( - 't.piece_num'=>array('label'=>$langs->trans("TransactionNumShort"), 'checked'=>1), - 't.code_journal'=>array('label'=>$langs->trans("Codejournal"), 'checked'=>1), - 't.doc_date'=>array('label'=>$langs->trans("Docdate"), 'checked'=>1), - 't.doc_ref'=>array('label'=>$langs->trans("Piece"), 'checked'=>1), - 't.numero_compte'=>array('label'=>$langs->trans("AccountAccountingShort"), 'checked'=>1), - 't.subledger_account'=>array('label'=>$langs->trans("SubledgerAccount"), 'checked'=>1), - 't.label_operation'=>array('label'=>$langs->trans("Label"), 'checked'=>1), - 't.debit'=>array('label'=>$langs->trans("AccountingDebit"), 'checked'=>1), - 't.credit'=>array('label'=>$langs->trans("AccountingCredit"), 'checked'=>1), - 't.lettering_code'=>array('label'=>$langs->trans("LetteringCode"), 'checked'=>1), - 't.date_creation'=>array('label'=>$langs->trans("DateCreation"), 'checked'=>0), - 't.tms'=>array('label'=>$langs->trans("DateModification"), 'checked'=>0), - 't.date_export'=>array('label'=>$langs->trans("DateExport"), 'checked'=>1), - 't.date_validated'=>array('label'=>$langs->trans("DateValidationAndLock"), 'checked'=>1, 'enabled'=>!getDolGlobalString("ACCOUNTANCY_DISABLE_CLOSURE_LINE_BY_LINE")), - 't.import_key'=>array('label'=>$langs->trans("ImportId"), 'checked'=>0, 'position'=>1100), + 't.piece_num' => array('label' => $langs->trans("TransactionNumShort"), 'checked' => 1), + 't.code_journal' => array('label' => $langs->trans("Codejournal"), 'checked' => 1), + 't.doc_date' => array('label' => $langs->trans("Docdate"), 'checked' => 1), + 't.doc_ref' => array('label' => $langs->trans("Piece"), 'checked' => 1), + 't.numero_compte' => array('label' => $langs->trans("AccountAccountingShort"), 'checked' => 1), + 't.subledger_account' => array('label' => $langs->trans("SubledgerAccount"), 'checked' => 1), + 't.label_operation' => array('label' => $langs->trans("Label"), 'checked' => 1), + 't.debit' => array('label' => $langs->trans("AccountingDebit"), 'checked' => 1), + 't.credit' => array('label' => $langs->trans("AccountingCredit"), 'checked' => 1), + 't.lettering_code' => array('label' => $langs->trans("LetteringCode"), 'checked' => 1), + 't.date_creation' => array('label' => $langs->trans("DateCreation"), 'checked' => 0), + 't.tms' => array('label' => $langs->trans("DateModification"), 'checked' => 0), + 't.date_export' => array('label' => $langs->trans("DateExport"), 'checked' => 1), + 't.date_validated' => array('label' => $langs->trans("DateValidationAndLock"), 'checked' => 1, 'enabled' => !getDolGlobalString("ACCOUNTANCY_DISABLE_CLOSURE_LINE_BY_LINE")), + 't.import_key' => array('label' => $langs->trans("ImportId"), 'checked' => 0, 'position' => 1100), ); if (!getDolGlobalString('ACCOUNTING_ENABLE_LETTERING')) { @@ -244,7 +244,7 @@ if (!GETPOST('confirmmassaction', 'alpha')) { $massaction = ''; } -$parameters = array('socid'=>$socid); +$parameters = array('socid' => $socid); $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); @@ -353,7 +353,7 @@ if (empty($reshook)) { } } $filter['t.search_accounting_code_in'] = implode(',', $listofaccountsforgroup2); - $param .= '&search_account_category='.urlencode($search_account_category); + $param .= '&search_account_category='.urlencode((string) ($search_account_category)); } if (!empty($search_accountancy_code)) { $filter['t.numero_compte'] = $search_accountancy_code; @@ -395,7 +395,7 @@ if (empty($reshook)) { } if (!empty($search_mvt_num)) { $filter['t.piece_num'] = $search_mvt_num; - $param .= '&search_mvt_num='.urlencode($search_mvt_num); + $param .= '&search_mvt_num='.urlencode((string) ($search_mvt_num)); } if (!empty($search_date_creation_start)) { $filter['t.date_creation>='] = $search_date_creation_start; @@ -459,7 +459,7 @@ if (empty($reshook)) { } if ($action == 'setreexport') { - $setreexport = GETPOST('value', 'int'); + $setreexport = GETPOSTINT('value'); if (!dolibarr_set_const($db, "ACCOUNTING_REEXPORT", $setreexport, 'yesno', 0, '', $conf->entity)) { $error++; } @@ -528,25 +528,45 @@ $sqlwhere = array(); if (count($filter) > 0) { foreach ($filter as $key => $value) { if ($key == 't.doc_date') { - $sqlwhere[] = $key."='".$db->idate($value)."'"; - } elseif ($key == 't.doc_date>=' || $key == 't.doc_date<=') { - $sqlwhere[] = $key."'".$db->idate($value)."'"; - } elseif ($key == 't.numero_compte>=' || $key == 't.numero_compte<=' || $key == 't.subledger_account>=' || $key == 't.subledger_account<=') { - $sqlwhere[] = $key."'".$db->escape($value)."'"; + $sqlwhere[] = $db->sanitize($key)." = '".$db->idate($value)."'"; + } elseif ($key == 't.doc_date>=') { + $sqlwhere[] = "t.doc_date >= '".$db->idate($value)."'"; + } elseif ($key == 't.doc_date<=') { + $sqlwhere[] = "t.doc_date <= '".$db->idate($value)."'"; + } elseif ($key == 't.doc_date>') { + $sqlwhere[] = "t.doc_date > '".$db->idate($value)."'"; + } elseif ($key == 't.doc_date<') { + $sqlwhere[] = "t.doc_date < '".$db->idate($value)."'"; + } elseif ($key == 't.numero_compte>=') { + $sqlwhere[] = "t.numero_compte >= '".$db->escape($value)."'"; + } elseif ($key == 't.numero_compte<=') { + $sqlwhere[] = "t.numero_compte <= '".$db->escape($value)."'"; + } elseif ($key == 't.subledger_account>=') { + $sqlwhere[] = "t.subledger_account >= '".$db->escape($value)."'"; + } elseif ($key == 't.subledger_account<=') { + $sqlwhere[] = "t.subledger_account <= '".$db->escape($value)."'"; } elseif ($key == 't.fk_doc' || $key == 't.fk_docdet' || $key == 't.piece_num') { - $sqlwhere[] = $key.'='.((int) $value); + $sqlwhere[] = $db->sanitize($key).'='.((int) $value); } elseif ($key == 't.subledger_account' || $key == 't.numero_compte') { - $sqlwhere[] = $key." LIKE '".$db->escape($value)."%'"; + $sqlwhere[] = $db->sanitize($key)." LIKE '".$db->escape($db->escapeforlike($value))."%'"; } elseif ($key == 't.subledger_account') { $sqlwhere[] = natural_search($key, $value, 0, 1); - } elseif ($key == 't.date_creation>=' || $key == 't.date_creation<=') { - $sqlwhere[] = $key."'".$db->idate($value)."'"; - } elseif ($key == 't.tms>=' || $key == 't.tms<=') { - $sqlwhere[] = $key."'".$db->idate($value)."'"; - } elseif ($key == 't.date_export>=' || $key == 't.date_export<=') { - $sqlwhere[] = $key."'".$db->idate($value)."'"; - } elseif ($key == 't.date_validated>=' || $key == 't.date_validated<=') { - $sqlwhere[] = $key."'".$db->idate($value)."'"; + } elseif ($key == 't.tms>=') { + $sqlwhere[] = "t.tms >= '".$db->idate($value)."'"; + } elseif ($key == 't.tms<=') { + $sqlwhere[] = "t.tms <= '".$db->idate($value)."'"; + } elseif ($key == 't.date_creation>=') { + $sqlwhere[] = "t.date_creation >= '".$db->idate($value)."'"; + } elseif ($key == 't.date_creation<=') { + $sqlwhere[] = "t.date_creation <= '".$db->idate($value)."'"; + } elseif ($key == 't.date_export>=') { + $sqlwhere[] = "t.date_export >= '".$db->idate($value)."'"; + } elseif ($key == 't.date_export<=') { + $sqlwhere[] = "t.date_export <= '".$db->idate($value)."'"; + } elseif ($key == 't.date_validated>=') { + $sqlwhere[] = "t;date_validate >= '".$db->idate($value)."'"; + } elseif ($key == 't.date_validated<=') { + $sqlwhere[] = "t;date_validate <= '".$db->idate($value)."'"; } elseif ($key == 't.credit' || $key == 't.debit') { $sqlwhere[] = natural_search($key, $value, 1, 1); } elseif ($key == 't.reconciled_option') { @@ -608,13 +628,13 @@ if ($action == 'export_fileconfirm' && $user->hasRight('accounting', 'mouvements // Replace this with the query($sqlforexport) on a limited block and loop on each line to export them. $limit = 0; $offset = 0; - $result = $object->fetchAll($sortorder, $sortfield, $limit, $offset, $filter, 'AND', (!getDolGlobalString('ACCOUNTING_REEXPORT') ? 0 : 1)); + $result = $object->fetchAll($sortorder, $sortfield, $limit, $offset, $filter, 'AND', (getDolGlobalString('ACCOUNTING_REEXPORT') ? 1 : 0)); if ($result < 0) { $error++; setEventMessages($object->error, $object->errors, 'errors'); } else { - $formatexport = GETPOST('formatexport', 'int'); + $formatexport = GETPOSTINT('formatexport'); $notexportlettering = GETPOST('notexportlettering', 'alpha'); @@ -657,7 +677,7 @@ if ($action == 'export_fileconfirm' && $user->hasRight('accounting', 'mouvements if ($setfields) { $sql = " UPDATE ".MAIN_DB_PREFIX."accounting_bookkeeping"; - $sql .= " SET ".$setfields; + $sql .= " SET ".$db->sanitize($setfields); $sql .= " WHERE rowid = ".((int) $movement->id); $result = $db->query($sql); @@ -758,7 +778,7 @@ $arrayofselected = is_array($toselect) ? $toselect : array(); // Output page // -------------------------------------------------------------------- -$help_url ='EN:Module_Double_Entry_Accounting#Exports|FR:Module_Comptabilité_en_Partie_Double#Exports'; +$help_url = 'EN:Module_Double_Entry_Accounting#Exports|FR:Module_Comptabilité_en_Partie_Double#Exports'; llxHeader('', $title_page, $help_url); @@ -776,7 +796,7 @@ if ($action == 'export_file') { 'morecss' => 'minwidth200 maxwidth200' ); - $form_question['separator0'] = array('name'=>'separator0', 'type'=>'separator'); + $form_question['separator0'] = array('name' => 'separator0', 'type' => 'separator'); if (getDolGlobalInt("ACCOUNTING_ENABLE_LETTERING")) { // If 1, we check by default. @@ -788,7 +808,7 @@ if ($action == 'export_file') { 'value' => $checked, ); - $form_question['separator1'] = array('name'=>'separator1', 'type'=>'separator'); + $form_question['separator1'] = array('name' => 'separator1', 'type' => 'separator'); } // If 1 or not set, we check by default. @@ -800,7 +820,7 @@ if ($action == 'export_file') { 'value' => (getDolGlobalString('ACCOUNTING_DEFAULT_NOT_NOTIFIED_EXPORT_DATE') ? 'false' : 'true'), ); - $form_question['separator2'] = array('name'=>'separator2', 'type'=>'separator'); + $form_question['separator2'] = array('name' => 'separator2', 'type' => 'separator'); if (!getDolGlobalString("ACCOUNTANCY_DISABLE_CLOSURE_LINE_BY_LINE")) { // If 0 or not set, we NOT check by default. @@ -812,7 +832,7 @@ if ($action == 'export_file') { 'value' => $checked, ); - $form_question['separator3'] = array('name'=>'separator3', 'type'=>'separator'); + $form_question['separator3'] = array('name' => 'separator3', 'type' => 'separator'); } // add documents in an archive for accountancy export (Quadratus) @@ -898,7 +918,7 @@ if (!getDolGlobalString('ACCOUNTING_REEXPORT')) { include DOL_DOCUMENT_ROOT.'/core/tpl/massactions_pre.tpl.php'; $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; -$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')); // This also change content of $arrayfields +$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')); // This also change content of $arrayfields if ($massactionbutton && $contextpage != 'poslist') { $selectedfields .= $form->showCheckAddButtons('checkforselect', 1); } @@ -1016,7 +1036,7 @@ if (!empty($arrayfields['t.lettering_code']['checked'])) { } // Fields from hook -$parameters = array('arrayfields'=>$arrayfields); +$parameters = array('arrayfields' => $arrayfields); $reshook = $hookmanager->executeHooks('printFieldListOption', $parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; @@ -1113,7 +1133,7 @@ if (!empty($arrayfields['t.lettering_code']['checked'])) { print_liste_field_titre($arrayfields['t.lettering_code']['label'], $_SERVER['PHP_SELF'], "t.lettering_code", "", $param, '', $sortfield, $sortorder, 'center '); } // Hook fields -$parameters = array('arrayfields'=>$arrayfields, 'param'=>$param, 'sortfield'=>$sortfield, 'sortorder'=>$sortorder); +$parameters = array('arrayfields' => $arrayfields, 'param' => $param, 'sortfield' => $sortfield, 'sortorder' => $sortorder); $reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; if (!empty($arrayfields['t.date_creation']['checked'])) { @@ -1363,7 +1383,7 @@ while ($i < min($num, $limit)) { } // Fields from hook - $parameters = array('arrayfields'=>$arrayfields, 'obj'=>$obj, 'i'=>$i, 'totalarray'=>&$totalarray); + $parameters = array('arrayfields' => $arrayfields, 'obj' => $obj, 'i' => $i, 'totalarray' => &$totalarray); $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; @@ -1442,7 +1462,7 @@ if ($num == 0) { print ''.$langs->trans("NoRecordFound").''; } -$parameters = array('arrayfields'=>$arrayfields, 'sql'=>$sql); +$parameters = array('arrayfields' => $arrayfields, 'sql' => $sql); $reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; diff --git a/htdocs/accountancy/bookkeeping/list.php b/htdocs/accountancy/bookkeeping/list.php index 990d6e288c0..a9931ab2ccb 100644 --- a/htdocs/accountancy/bookkeeping/list.php +++ b/htdocs/accountancy/bookkeeping/list.php @@ -43,7 +43,7 @@ require_once DOL_DOCUMENT_ROOT.'/accountancy/class/lettering.class.php'; $langs->loadLangs(array("accountancy", "compta")); // Get Parameters -$socid = GETPOST('socid', 'int'); +$socid = GETPOSTINT('socid'); // action+display Parameters $action = GETPOST('action', 'aZ09'); @@ -53,53 +53,53 @@ $toselect = GETPOST('toselect', 'array'); $contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'bookkeepinglist'; // Search Parameters -$search_mvt_num = GETPOST('search_mvt_num', 'int'); +$search_mvt_num = GETPOST('search_mvt_num', 'alpha'); $search_doc_type = GETPOST("search_doc_type", 'alpha'); $search_doc_ref = GETPOST("search_doc_ref", 'alpha'); -$search_date_startyear = GETPOST('search_date_startyear', 'int'); -$search_date_startmonth = GETPOST('search_date_startmonth', 'int'); -$search_date_startday = GETPOST('search_date_startday', 'int'); -$search_date_endyear = GETPOST('search_date_endyear', 'int'); -$search_date_endmonth = GETPOST('search_date_endmonth', 'int'); -$search_date_endday = GETPOST('search_date_endday', 'int'); +$search_date_startyear = GETPOSTINT('search_date_startyear'); +$search_date_startmonth = GETPOSTINT('search_date_startmonth'); +$search_date_startday = GETPOSTINT('search_date_startday'); +$search_date_endyear = GETPOSTINT('search_date_endyear'); +$search_date_endmonth = GETPOSTINT('search_date_endmonth'); +$search_date_endday = GETPOSTINT('search_date_endday'); $search_date_start = dol_mktime(0, 0, 0, $search_date_startmonth, $search_date_startday, $search_date_startyear); $search_date_end = dol_mktime(23, 59, 59, $search_date_endmonth, $search_date_endday, $search_date_endyear); -$search_doc_date = dol_mktime(0, 0, 0, GETPOST('doc_datemonth', 'int'), GETPOST('doc_dateday', 'int'), GETPOST('doc_dateyear', 'int')); -$search_date_creation_startyear = GETPOST('search_date_creation_startyear', 'int'); -$search_date_creation_startmonth = GETPOST('search_date_creation_startmonth', 'int'); -$search_date_creation_startday = GETPOST('search_date_creation_startday', 'int'); -$search_date_creation_endyear = GETPOST('search_date_creation_endyear', 'int'); -$search_date_creation_endmonth = GETPOST('search_date_creation_endmonth', 'int'); -$search_date_creation_endday = GETPOST('search_date_creation_endday', 'int'); +$search_doc_date = dol_mktime(0, 0, 0, GETPOSTINT('doc_datemonth'), GETPOSTINT('doc_dateday'), GETPOSTINT('doc_dateyear')); +$search_date_creation_startyear = GETPOSTINT('search_date_creation_startyear'); +$search_date_creation_startmonth = GETPOSTINT('search_date_creation_startmonth'); +$search_date_creation_startday = GETPOSTINT('search_date_creation_startday'); +$search_date_creation_endyear = GETPOSTINT('search_date_creation_endyear'); +$search_date_creation_endmonth = GETPOSTINT('search_date_creation_endmonth'); +$search_date_creation_endday = GETPOSTINT('search_date_creation_endday'); $search_date_creation_start = dol_mktime(0, 0, 0, $search_date_creation_startmonth, $search_date_creation_startday, $search_date_creation_startyear); $search_date_creation_end = dol_mktime(23, 59, 59, $search_date_creation_endmonth, $search_date_creation_endday, $search_date_creation_endyear); -$search_date_modification_startyear = GETPOST('search_date_modification_startyear', 'int'); -$search_date_modification_startmonth = GETPOST('search_date_modification_startmonth', 'int'); -$search_date_modification_startday = GETPOST('search_date_modification_startday', 'int'); -$search_date_modification_endyear = GETPOST('search_date_modification_endyear', 'int'); -$search_date_modification_endmonth = GETPOST('search_date_modification_endmonth', 'int'); -$search_date_modification_endday = GETPOST('search_date_modification_endday', 'int'); +$search_date_modification_startyear = GETPOSTINT('search_date_modification_startyear'); +$search_date_modification_startmonth = GETPOSTINT('search_date_modification_startmonth'); +$search_date_modification_startday = GETPOSTINT('search_date_modification_startday'); +$search_date_modification_endyear = GETPOSTINT('search_date_modification_endyear'); +$search_date_modification_endmonth = GETPOSTINT('search_date_modification_endmonth'); +$search_date_modification_endday = GETPOSTINT('search_date_modification_endday'); $search_date_modification_start = dol_mktime(0, 0, 0, $search_date_modification_startmonth, $search_date_modification_startday, $search_date_modification_startyear); $search_date_modification_end = dol_mktime(23, 59, 59, $search_date_modification_endmonth, $search_date_modification_endday, $search_date_modification_endyear); -$search_date_export_startyear = GETPOST('search_date_export_startyear', 'int'); -$search_date_export_startmonth = GETPOST('search_date_export_startmonth', 'int'); -$search_date_export_startday = GETPOST('search_date_export_startday', 'int'); -$search_date_export_endyear = GETPOST('search_date_export_endyear', 'int'); -$search_date_export_endmonth = GETPOST('search_date_export_endmonth', 'int'); -$search_date_export_endday = GETPOST('search_date_export_endday', 'int'); +$search_date_export_startyear = GETPOSTINT('search_date_export_startyear'); +$search_date_export_startmonth = GETPOSTINT('search_date_export_startmonth'); +$search_date_export_startday = GETPOSTINT('search_date_export_startday'); +$search_date_export_endyear = GETPOSTINT('search_date_export_endyear'); +$search_date_export_endmonth = GETPOSTINT('search_date_export_endmonth'); +$search_date_export_endday = GETPOSTINT('search_date_export_endday'); $search_date_export_start = dol_mktime(0, 0, 0, $search_date_export_startmonth, $search_date_export_startday, $search_date_export_startyear); $search_date_export_end = dol_mktime(23, 59, 59, $search_date_export_endmonth, $search_date_export_endday, $search_date_export_endyear); -$search_date_validation_startyear = GETPOST('search_date_validation_startyear', 'int'); -$search_date_validation_startmonth = GETPOST('search_date_validation_startmonth', 'int'); -$search_date_validation_startday = GETPOST('search_date_validation_startday', 'int'); -$search_date_validation_endyear = GETPOST('search_date_validation_endyear', 'int'); -$search_date_validation_endmonth = GETPOST('search_date_validation_endmonth', 'int'); -$search_date_validation_endday = GETPOST('search_date_validation_endday', 'int'); +$search_date_validation_startyear = GETPOSTINT('search_date_validation_startyear'); +$search_date_validation_startmonth = GETPOSTINT('search_date_validation_startmonth'); +$search_date_validation_startday = GETPOSTINT('search_date_validation_startday'); +$search_date_validation_endyear = GETPOSTINT('search_date_validation_endyear'); +$search_date_validation_endmonth = GETPOSTINT('search_date_validation_endmonth'); +$search_date_validation_endday = GETPOSTINT('search_date_validation_endday'); $search_date_validation_start = dol_mktime(0, 0, 0, $search_date_validation_startmonth, $search_date_validation_startday, $search_date_validation_startyear); $search_date_validation_end = dol_mktime(23, 59, 59, $search_date_validation_endmonth, $search_date_validation_endday, $search_date_validation_endyear); $search_import_key = GETPOST("search_import_key", 'alpha'); -$search_account_category = GETPOST('search_account_category', 'int'); +$search_account_category = GETPOSTINT('search_account_category'); $search_accountancy_code = GETPOST("search_accountancy_code", 'alpha'); $search_accountancy_code_start = GETPOST('search_accountancy_code_start', 'alpha'); @@ -129,11 +129,11 @@ $search_lettering_code = GETPOST('search_lettering_code', 'alpha'); $search_not_reconciled = GETPOST('search_not_reconciled', 'alpha'); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : getDolGlobalString('ACCOUNTING_LIMIT_LIST_VENTILATION', $conf->liste_limit); +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : getDolGlobalString('ACCOUNTING_LIMIT_LIST_VENTILATION', $conf->liste_limit); $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); $optioncss = GETPOST('optioncss', 'alpha'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0) { $page = 0; } @@ -154,7 +154,7 @@ $hookmanager->initHooks(array('bookkeepinglist')); $formaccounting = new FormAccounting($db); $form = new Form($db); -if (!in_array($action, array('delmouv', 'delmouvconfirm')) && !GETPOSTISSET('begin') && !GETPOSTISSET('formfilteraction') && GETPOST('page', 'int') == '' && !GETPOST('noreset', 'int') && $user->hasRight('accounting', 'mouvements', 'export')) { +if (!in_array($action, array('delmouv', 'delmouvconfirm')) && !GETPOSTISSET('begin') && !GETPOSTISSET('formfilteraction') && GETPOST('page', 'alpha') == '' && !GETPOSTINT('noreset') && $user->hasRight('accounting', 'mouvements', 'export')) { if (empty($search_date_start) && empty($search_date_end) && !GETPOSTISSET('restore_lastsearch_values') && !GETPOST('search_accountancy_code_start')) { $query = "SELECT date_start, date_end from ".MAIN_DB_PREFIX."accounting_fiscalyear "; $query .= " where date_start < '".$db->idate(dol_now())."' and date_end > '".$db->idate(dol_now())."' limit 1"; @@ -184,21 +184,21 @@ if (!in_array($action, array('delmouv', 'delmouvconfirm')) && !GETPOSTISSET('beg $arrayfields = array( - 't.piece_num'=>array('label'=>$langs->trans("TransactionNumShort"), 'checked'=>1), - 't.code_journal'=>array('label'=>$langs->trans("Codejournal"), 'checked'=>1), - 't.doc_date'=>array('label'=>$langs->trans("Docdate"), 'checked'=>1), - 't.doc_ref'=>array('label'=>$langs->trans("Piece"), 'checked'=>1), - 't.numero_compte'=>array('label'=>$langs->trans("AccountAccountingShort"), 'checked'=>1), - 't.subledger_account'=>array('label'=>$langs->trans("SubledgerAccount"), 'checked'=>1), - 't.label_operation'=>array('label'=>$langs->trans("Label"), 'checked'=>1), - 't.debit'=>array('label'=>$langs->trans("AccountingDebit"), 'checked'=>1), - 't.credit'=>array('label'=>$langs->trans("AccountingCredit"), 'checked'=>1), - 't.lettering_code'=>array('label'=>$langs->trans("LetteringCode"), 'checked'=>1), - 't.date_creation'=>array('label'=>$langs->trans("DateCreation"), 'checked'=>0), - 't.tms'=>array('label'=>$langs->trans("DateModification"), 'checked'=>0), - 't.date_export'=>array('label'=>$langs->trans("DateExport"), 'checked'=>0), - 't.date_validated'=>array('label'=>$langs->trans("DateValidationAndLock"), 'checked'=>0, 'enabled'=>!getDolGlobalString("ACCOUNTANCY_DISABLE_CLOSURE_LINE_BY_LINE")), - 't.import_key'=>array('label'=>$langs->trans("ImportId"), 'checked'=>0, 'position'=>1100), + 't.piece_num' => array('label' => $langs->trans("TransactionNumShort"), 'checked' => 1), + 't.code_journal' => array('label' => $langs->trans("Codejournal"), 'checked' => 1), + 't.doc_date' => array('label' => $langs->trans("Docdate"), 'checked' => 1), + 't.doc_ref' => array('label' => $langs->trans("Piece"), 'checked' => 1), + 't.numero_compte' => array('label' => $langs->trans("AccountAccountingShort"), 'checked' => 1), + 't.subledger_account' => array('label' => $langs->trans("SubledgerAccount"), 'checked' => 1), + 't.label_operation' => array('label' => $langs->trans("Label"), 'checked' => 1), + 't.debit' => array('label' => $langs->trans("AccountingDebit"), 'checked' => 1), + 't.credit' => array('label' => $langs->trans("AccountingCredit"), 'checked' => 1), + 't.lettering_code' => array('label' => $langs->trans("LetteringCode"), 'checked' => 1), + 't.date_creation' => array('label' => $langs->trans("DateCreation"), 'checked' => 0), + 't.tms' => array('label' => $langs->trans("DateModification"), 'checked' => 0), + 't.date_export' => array('label' => $langs->trans("DateExport"), 'checked' => 0), + 't.date_validated' => array('label' => $langs->trans("DateValidationAndLock"), 'checked' => 0, 'enabled' => !getDolGlobalString("ACCOUNTANCY_DISABLE_CLOSURE_LINE_BY_LINE")), + 't.import_key' => array('label' => $langs->trans("ImportId"), 'checked' => 0, 'position' => 1100), ); if (!getDolGlobalString('ACCOUNTING_ENABLE_LETTERING')) { @@ -232,7 +232,7 @@ if (!GETPOST('confirmmassaction', 'alpha') && $massaction != 'preunletteringauto $massaction = ''; } -$parameters = array('socid'=>$socid); +$parameters = array('socid' => $socid); $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); @@ -341,7 +341,7 @@ if (empty($reshook)) { } } $filter['t.search_accounting_code_in'] = implode(',', $listofaccountsforgroup2); - $param .= '&search_account_category='.urlencode($search_account_category); + $param .= '&search_account_category='.urlencode((string) ($search_account_category)); } if (!empty($search_accountancy_code)) { $filter['t.numero_compte'] = $search_accountancy_code; @@ -383,7 +383,7 @@ if (empty($reshook)) { } if (!empty($search_mvt_num)) { $filter['t.piece_num'] = $search_mvt_num; - $param .= '&search_mvt_num='.urlencode($search_mvt_num); + $param .= '&search_mvt_num='.urlencode((string) ($search_mvt_num)); } if (!empty($search_date_creation_start)) { $filter['t.date_creation>='] = $search_date_creation_start; @@ -484,7 +484,7 @@ if (empty($reshook)) { setEventMessages($object->error, $object->errors, 'errors'); $error++; break; - } elseif (isset($object->date_validation) || $object->date_validation != '') { + } elseif (isset($object->date_validation) && $object->date_validation != '') { setEventMessages($langs->trans("ValidatedRecordWhereFound"), null, 'errors'); $error++; break; @@ -620,25 +620,45 @@ $sqlwhere = array(); if (count($filter) > 0) { foreach ($filter as $key => $value) { if ($key == 't.doc_date') { - $sqlwhere[] = $key."='".$db->idate($value)."'"; - } elseif ($key == 't.doc_date>=' || $key == 't.doc_date<=') { - $sqlwhere[] = $key."'".$db->idate($value)."'"; - } elseif ($key == 't.numero_compte>=' || $key == 't.numero_compte<=' || $key == 't.subledger_account>=' || $key == 't.subledger_account<=') { - $sqlwhere[] = $key."'".$db->escape($value)."'"; + $sqlwhere[] = $db->sanitize($key)." = '".$db->idate($value)."'"; + } elseif ($key == 't.doc_date>=') { + $sqlwhere[] = "t.doc_date >= '".$db->idate($value)."'"; + } elseif ($key == 't.doc_date<=') { + $sqlwhere[] = "t.doc_date <= '".$db->idate($value)."'"; + } elseif ($key == 't.doc_date>') { + $sqlwhere[] = "t.doc_date > '".$db->idate($value)."'"; + } elseif ($key == 't.doc_date<') { + $sqlwhere[] = "t.doc_date < '".$db->idate($value)."'"; + } elseif ($key == 't.numero_compte>=') { + $sqlwhere[] = "t.numero_compte >= '".$db->escape($value)."'"; + } elseif ($key == 't.numero_compte<=') { + $sqlwhere[] = "t.numero_compte <= '".$db->escape($value)."'"; + } elseif ($key == 't.subledger_account>=') { + $sqlwhere[] = "t.subledger_account >= '".$db->escape($value)."'"; + } elseif ($key == 't.subledger_account<=') { + $sqlwhere[] = "t.subledger_account <= '".$db->escape($value)."'"; } elseif ($key == 't.fk_doc' || $key == 't.fk_docdet' || $key == 't.piece_num') { - $sqlwhere[] = $key.'='.((int) $value); + $sqlwhere[] = $db->sanitize($key).' = '.((int) $value); } elseif ($key == 't.subledger_account' || $key == 't.numero_compte') { - $sqlwhere[] = $key." LIKE '".$db->escape($value)."%'"; + $sqlwhere[] = $db->sanitize($key)." LIKE '".$db->escape($db->escapeforlike($value))."%'"; } elseif ($key == 't.subledger_account') { $sqlwhere[] = natural_search($key, $value, 0, 1); - } elseif ($key == 't.date_creation>=' || $key == 't.date_creation<=') { - $sqlwhere[] = $key."'".$db->idate($value)."'"; - } elseif ($key == 't.tms>=' || $key == 't.tms<=') { - $sqlwhere[] = $key."'".$db->idate($value)."'"; - } elseif ($key == 't.date_export>=' || $key == 't.date_export<=') { - $sqlwhere[] = $key."'".$db->idate($value)."'"; - } elseif ($key == 't.date_validated>=' || $key == 't.date_validated<=') { - $sqlwhere[] = $key."'".$db->idate($value)."'"; + } elseif ($key == 't.tms>=') { + $sqlwhere[] = "t.tms >= '".$db->idate($value)."'"; + } elseif ($key == 't.tms<=') { + $sqlwhere[] = "t.tms <= '".$db->idate($value)."'"; + } elseif ($key == 't.date_creation>=') { + $sqlwhere[] = "t.date_creation >= '".$db->idate($value)."'"; + } elseif ($key == 't.date_creation<=') { + $sqlwhere[] = "t.date_creation <= '".$db->idate($value)."'"; + } elseif ($key == 't.date_export>=') { + $sqlwhere[] = "t.date_export >= '".$db->idate($value)."'"; + } elseif ($key == 't.date_export<=') { + $sqlwhere[] = "t.date_export <= '".$db->idate($value)."'"; + } elseif ($key == 't.date_validated>=') { + $sqlwhere[] = "t;date_validate >= '".$db->idate($value)."'"; + } elseif ($key == 't.date_validated<=') { + $sqlwhere[] = "t;date_validate <= '".$db->idate($value)."'"; } elseif ($key == 't.credit' || $key == 't.debit') { $sqlwhere[] = natural_search($key, $value, 1, 1); } elseif ($key == 't.reconciled_option') { @@ -738,7 +758,7 @@ if (getDolGlobalInt('ACCOUNTING_ENABLE_LETTERING') && $user->hasRight('accountin if ($user->hasRight('accounting', 'mouvements', 'supprimer')) { $arrayofmassactions['predeletebookkeepingwriting'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete"); } -if (GETPOST('nomassaction', 'int') || in_array($massaction, array('preunletteringauto', 'preunletteringmanual', 'predeletebookkeepingwriting'))) { +if (GETPOSTINT('nomassaction') || in_array($massaction, array('preunletteringauto', 'preunletteringmanual', 'predeletebookkeepingwriting'))) { $arrayofmassactions = array(); } $massactionbutton = $form->selectMassAction($massaction, $arrayofmassactions); @@ -798,7 +818,7 @@ if ($massaction == 'preunletteringauto') { include DOL_DOCUMENT_ROOT.'/core/tpl/massactions_pre.tpl.php'; $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; -$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')); // This also change content of $arrayfields +$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')); // This also change content of $arrayfields if ($massactionbutton && $contextpage != 'poslist') { $selectedfields .= $form->showCheckAddButtons('checkforselect', 1); } @@ -916,7 +936,7 @@ if (!empty($arrayfields['t.lettering_code']['checked'])) { } // Fields from hook -$parameters = array('arrayfields'=>$arrayfields); +$parameters = array('arrayfields' => $arrayfields); $reshook = $hookmanager->executeHooks('printFieldListOption', $parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; @@ -1013,7 +1033,7 @@ if (!empty($arrayfields['t.lettering_code']['checked'])) { print_liste_field_titre($arrayfields['t.lettering_code']['label'], $_SERVER['PHP_SELF'], "t.lettering_code", "", $param, '', $sortfield, $sortorder, 'center '); } // Hook fields -$parameters = array('arrayfields'=>$arrayfields, 'param'=>$param, 'sortfield'=>$sortfield, 'sortorder'=>$sortorder); +$parameters = array('arrayfields' => $arrayfields, 'param' => $param, 'sortfield' => $sortfield, 'sortorder' => $sortorder); $reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; if (!empty($arrayfields['t.date_creation']['checked'])) { @@ -1263,7 +1283,7 @@ while ($i < min($num, $limit)) { } // Fields from hook - $parameters = array('arrayfields'=>$arrayfields, 'obj'=>$obj, 'i'=>$i, 'totalarray'=>&$totalarray); + $parameters = array('arrayfields' => $arrayfields, 'obj' => $obj, 'i' => $i, 'totalarray' => &$totalarray); $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; @@ -1342,7 +1362,7 @@ if ($num == 0) { print ''.$langs->trans("NoRecordFound").''; } -$parameters = array('arrayfields'=>$arrayfields, 'sql'=>$sql); +$parameters = array('arrayfields' => $arrayfields, 'sql' => $sql); $reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; diff --git a/htdocs/accountancy/bookkeeping/listbyaccount.php b/htdocs/accountancy/bookkeeping/listbyaccount.php index ed423ba1fdb..338ca12e5f0 100644 --- a/htdocs/accountancy/bookkeeping/listbyaccount.php +++ b/htdocs/accountancy/bookkeeping/listbyaccount.php @@ -41,7 +41,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; $langs->loadLangs(array("accountancy", "compta")); $action = GETPOST('action', 'aZ09'); -$socid = GETPOST('socid', 'int'); +$socid = GETPOSTINT('socid'); $massaction = GETPOST('massaction', 'alpha'); $confirm = GETPOST('confirm', 'alpha'); $toselect = GETPOST('toselect', 'array'); @@ -52,34 +52,34 @@ if ($type == 'sub') { $context_default = 'bookkeepingbyaccountlist'; } $contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : $context_default; -$search_date_startyear = GETPOST('search_date_startyear', 'int'); -$search_date_startmonth = GETPOST('search_date_startmonth', 'int'); -$search_date_startday = GETPOST('search_date_startday', 'int'); -$search_date_endyear = GETPOST('search_date_endyear', 'int'); -$search_date_endmonth = GETPOST('search_date_endmonth', 'int'); -$search_date_endday = GETPOST('search_date_endday', 'int'); +$search_date_startyear = GETPOSTINT('search_date_startyear'); +$search_date_startmonth = GETPOSTINT('search_date_startmonth'); +$search_date_startday = GETPOSTINT('search_date_startday'); +$search_date_endyear = GETPOSTINT('search_date_endyear'); +$search_date_endmonth = GETPOSTINT('search_date_endmonth'); +$search_date_endday = GETPOSTINT('search_date_endday'); $search_date_start = dol_mktime(0, 0, 0, $search_date_startmonth, $search_date_startday, $search_date_startyear); $search_date_end = dol_mktime(23, 59, 59, $search_date_endmonth, $search_date_endday, $search_date_endyear); -$search_doc_date = dol_mktime(0, 0, 0, GETPOST('doc_datemonth', 'int'), GETPOST('doc_dateday', 'int'), GETPOST('doc_dateyear', 'int')); -$search_date_export_startyear = GETPOST('search_date_export_startyear', 'int'); -$search_date_export_startmonth = GETPOST('search_date_export_startmonth', 'int'); -$search_date_export_startday = GETPOST('search_date_export_startday', 'int'); -$search_date_export_endyear = GETPOST('search_date_export_endyear', 'int'); -$search_date_export_endmonth = GETPOST('search_date_export_endmonth', 'int'); -$search_date_export_endday = GETPOST('search_date_export_endday', 'int'); +$search_doc_date = dol_mktime(0, 0, 0, GETPOSTINT('doc_datemonth'), GETPOSTINT('doc_dateday'), GETPOSTINT('doc_dateyear')); +$search_date_export_startyear = GETPOSTINT('search_date_export_startyear'); +$search_date_export_startmonth = GETPOSTINT('search_date_export_startmonth'); +$search_date_export_startday = GETPOSTINT('search_date_export_startday'); +$search_date_export_endyear = GETPOSTINT('search_date_export_endyear'); +$search_date_export_endmonth = GETPOSTINT('search_date_export_endmonth'); +$search_date_export_endday = GETPOSTINT('search_date_export_endday'); $search_date_export_start = dol_mktime(0, 0, 0, $search_date_export_startmonth, $search_date_export_startday, $search_date_export_startyear); $search_date_export_end = dol_mktime(23, 59, 59, $search_date_export_endmonth, $search_date_export_endday, $search_date_export_endyear); -$search_date_validation_startyear = GETPOST('search_date_validation_startyear', 'int'); -$search_date_validation_startmonth = GETPOST('search_date_validation_startmonth', 'int'); -$search_date_validation_startday = GETPOST('search_date_validation_startday', 'int'); -$search_date_validation_endyear = GETPOST('search_date_validation_endyear', 'int'); -$search_date_validation_endmonth = GETPOST('search_date_validation_endmonth', 'int'); -$search_date_validation_endday = GETPOST('search_date_validation_endday', 'int'); +$search_date_validation_startyear = GETPOSTINT('search_date_validation_startyear'); +$search_date_validation_startmonth = GETPOSTINT('search_date_validation_startmonth'); +$search_date_validation_startday = GETPOSTINT('search_date_validation_startday'); +$search_date_validation_endyear = GETPOSTINT('search_date_validation_endyear'); +$search_date_validation_endmonth = GETPOSTINT('search_date_validation_endmonth'); +$search_date_validation_endday = GETPOSTINT('search_date_validation_endday'); $search_date_validation_start = dol_mktime(0, 0, 0, $search_date_validation_startmonth, $search_date_validation_startday, $search_date_validation_startyear); $search_date_validation_end = dol_mktime(23, 59, 59, $search_date_validation_endmonth, $search_date_validation_endday, $search_date_validation_endyear); $search_import_key = GETPOST("search_import_key", 'alpha'); -$search_account_category = GETPOST('search_account_category', 'int'); +$search_account_category = GETPOSTINT('search_account_category'); $search_accountancy_code_start = GETPOST('search_accountancy_code_start', 'alpha'); if ($search_accountancy_code_start == - 1) { @@ -91,7 +91,7 @@ if ($search_accountancy_code_end == - 1) { } $search_doc_ref = GETPOST('search_doc_ref', 'alpha'); $search_label_operation = GETPOST('search_label_operation', 'alpha'); -$search_mvt_num = GETPOST('search_mvt_num', 'int'); +$search_mvt_num = GETPOST('search_mvt_num', 'alpha'); $search_direction = GETPOST('search_direction', 'alpha'); $search_ledger_code = GETPOST('search_ledger_code', 'array'); $search_debit = GETPOST('search_debit', 'alpha'); @@ -104,11 +104,11 @@ if (GETPOST("button_delmvt_x") || GETPOST("button_delmvt.x") || GETPOST("button_ } // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : getDolGlobalString('ACCOUNTING_LIMIT_LIST_VENTILATION', $conf->liste_limit); +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : getDolGlobalString('ACCOUNTING_LIMIT_LIST_VENTILATION', $conf->liste_limit); $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); $optioncss = GETPOST('optioncss', 'alpha'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0) { $page = 0; } @@ -159,18 +159,18 @@ if (empty($search_date_start) && empty($search_date_end) && !GETPOSTISSET('searc $arrayfields = array( // 't.subledger_account'=>array('label'=>$langs->trans("SubledgerAccount"), 'checked'=>1), - 't.piece_num'=>array('label'=>$langs->trans("TransactionNumShort"), 'checked'=>1), - 't.code_journal'=>array('label'=>$langs->trans("Codejournal"), 'checked'=>1), - 't.doc_date'=>array('label'=>$langs->trans("Docdate"), 'checked'=>1), - 't.doc_ref'=>array('label'=>$langs->trans("Piece"), 'checked'=>1), - 't.label_operation'=>array('label'=>$langs->trans("Label"), 'checked'=>1), - 't.lettering_code'=>array('label'=>$langs->trans("Lettering"), 'checked'=>1), - 't.debit'=>array('label'=>$langs->trans("AccountingDebit"), 'checked'=>1), - 't.credit'=>array('label'=>$langs->trans("AccountingCredit"), 'checked'=>1), - 't.balance'=>array('label'=>$langs->trans("Balance"), 'checked'=>1), - 't.date_export'=>array('label'=>$langs->trans("DateExport"), 'checked'=>-1), - 't.date_validated'=>array('label'=>$langs->trans("DateValidation"), 'checked'=>-1, 'enabled'=>!getDolGlobalString("ACCOUNTANCY_DISABLE_CLOSURE_LINE_BY_LINE")), - 't.import_key'=>array('label'=>$langs->trans("ImportId"), 'checked'=>-1, 'position'=>1100), + 't.piece_num' => array('label' => $langs->trans("TransactionNumShort"), 'checked' => 1), + 't.code_journal' => array('label' => $langs->trans("Codejournal"), 'checked' => 1), + 't.doc_date' => array('label' => $langs->trans("Docdate"), 'checked' => 1), + 't.doc_ref' => array('label' => $langs->trans("Piece"), 'checked' => 1), + 't.label_operation' => array('label' => $langs->trans("Label"), 'checked' => 1), + 't.lettering_code' => array('label' => $langs->trans("Lettering"), 'checked' => 1), + 't.debit' => array('label' => $langs->trans("AccountingDebit"), 'checked' => 1), + 't.credit' => array('label' => $langs->trans("AccountingCredit"), 'checked' => 1), + 't.balance' => array('label' => $langs->trans("Balance"), 'checked' => 1), + 't.date_export' => array('label' => $langs->trans("DateExport"), 'checked' => -1), + 't.date_validated' => array('label' => $langs->trans("DateValidation"), 'checked' => -1, 'enabled' => !getDolGlobalString("ACCOUNTANCY_DISABLE_CLOSURE_LINE_BY_LINE")), + 't.import_key' => array('label' => $langs->trans("ImportId"), 'checked' => -1, 'position' => 1100), ); if (!getDolGlobalString('ACCOUNTING_ENABLE_LETTERING')) { @@ -217,7 +217,7 @@ if (!GETPOST('confirmmassaction', 'alpha') && $massaction != 'preunletteringauto $massaction = ''; } -$parameters = array('socid'=>$socid); +$parameters = array('socid' => $socid); $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); @@ -282,7 +282,7 @@ if (empty($reshook)) { } if (!empty($search_doc_date)) { $filter['t.doc_date'] = $search_doc_date; - $param .= '&doc_datemonth='.GETPOST('doc_datemonth', 'int').'&doc_dateday='.GETPOST('doc_dateday', 'int').'&doc_dateyear='.GETPOST('doc_dateyear', 'int'); + $param .= '&doc_datemonth='.GETPOSTINT('doc_datemonth').'&doc_dateday='.GETPOSTINT('doc_dateday').'&doc_dateyear='.GETPOSTINT('doc_dateyear'); } if ($search_account_category != '-1' && !empty($search_account_category)) { require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountancycategory.class.php'; @@ -296,7 +296,7 @@ if (empty($reshook)) { } } $filter['t.search_accounting_code_in'] = implode(',', $listofaccountsforgroup2); - $param .= '&search_account_category='.urlencode($search_account_category); + $param .= '&search_account_category='.urlencode((string) ($search_account_category)); } if (!empty($search_accountancy_code_start)) { if ($type == 'sub') { @@ -320,7 +320,7 @@ if (empty($reshook)) { } if (!empty($search_mvt_num)) { $filter['t.piece_num'] = $search_mvt_num; - $param .= '&search_mvt_num='.urlencode($search_mvt_num); + $param .= '&search_mvt_num='.urlencode((string) ($search_mvt_num)); } if (!empty($search_doc_ref)) { $filter['t.doc_ref'] = $search_doc_ref; @@ -447,7 +447,7 @@ if (empty($reshook)) { setEventMessages($object->error, $object->errors, 'errors'); $error++; break; - } elseif (isset($object->date_validation) || $object->date_validation != '') { + } elseif (isset($object->date_validation) && $object->date_validation != '') { setEventMessages($langs->trans("ValidatedRecordWhereFound"), null, 'errors'); $error++; break; @@ -650,7 +650,7 @@ if (getDolGlobalInt('ACCOUNTING_ENABLE_LETTERING') && $user->hasRight('accountin if ($user->hasRight('accounting', 'mouvements', 'supprimer')) { $arrayofmassactions['predeletebookkeepingwriting'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete"); } -if (GETPOST('nomassaction', 'int') || in_array($massaction, array('preunletteringauto', 'preunletteringmanual', 'predeletebookkeepingwriting'))) { +if (GETPOSTINT('nomassaction') || in_array($massaction, array('preunletteringauto', 'preunletteringmanual', 'predeletebookkeepingwriting'))) { $arrayofmassactions = array(); } $massactionbutton = $form->selectMassAction($massaction, $arrayofmassactions); @@ -897,7 +897,7 @@ if (!empty($arrayfields['t.import_key']['checked'])) { } // Fields from hook -$parameters = array('arrayfields'=>$arrayfields); +$parameters = array('arrayfields' => $arrayfields); $reshook = $hookmanager->executeHooks('printFieldListOption', $parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; @@ -951,7 +951,7 @@ if (!empty($arrayfields['t.import_key']['checked'])) { print_liste_field_titre($arrayfields['t.import_key']['label'], $_SERVER["PHP_SELF"], "t.import_key", "", $param, '', $sortfield, $sortorder, 'center '); } // Hook fields -$parameters = array('arrayfields'=>$arrayfields, 'param'=>$param, 'sortfield'=>$sortfield, 'sortorder'=>$sortorder); +$parameters = array('arrayfields' => $arrayfields, 'param' => $param, 'sortfield' => $sortfield, 'sortorder' => $sortorder); $reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) { @@ -1071,7 +1071,7 @@ while ($i < min($num, $limit)) { // Show the break account print ''; - print ''; + print ''; if ($type == 'sub') { if ($line->subledger_account != "" && $line->subledger_account != '-1') { print empty($line->subledger_label) ? ''.$langs->trans("Unknown").'' : $line->subledger_label; @@ -1227,7 +1227,7 @@ while ($i < min($num, $limit)) { if (strlen(length_accounta($line->subledger_account)) == 0) { print ''.dol_escape_htmltag($line->label_operation).''; } else { - print '('.length_accounta($line->subledger_account).')').'">'.dol_escape_htmltag($line->label_operation).($line->label_operation?'
':'').'('.dol_escape_htmltag(length_accounta($line->subledger_account)).')'; + print '('.length_accounta($line->subledger_account).')').'">'.dol_escape_htmltag($line->label_operation).($line->label_operation ? '
' : '').'('.dol_escape_htmltag(length_accounta($line->subledger_account)).')'; } if (!$i) { $totalarray['nbfield']++; @@ -1302,7 +1302,7 @@ while ($i < min($num, $limit)) { } // Fields from hook - $parameters = array('arrayfields'=>$arrayfields, 'obj'=>$line); + $parameters = array('arrayfields' => $arrayfields, 'obj' => $line); $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; @@ -1387,7 +1387,7 @@ if ($num == 0) { print ''.$langs->trans("NoRecordFound").''; } -$parameters = array('arrayfields'=>$arrayfields); +$parameters = array('arrayfields' => $arrayfields); $reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; diff --git a/htdocs/accountancy/class/accountancycategory.class.php b/htdocs/accountancy/class/accountancycategory.class.php index 4e9a8f93b09..84c8b774960 100644 --- a/htdocs/accountancy/class/accountancycategory.class.php +++ b/htdocs/accountancy/class/accountancycategory.class.php @@ -211,7 +211,7 @@ class AccountancyCategory // extends CommonObject if ($this->rowid > 0) { $sql .= " ".((int) $this->rowid).","; } - $sql .= " ".(!isset($this->code) ? 'NULL' : "'".$this->db->escape($this->code)."'").","; + $sql .= " ".(!isset($this->code) ? "NULL" : "'".$this->db->escape($this->code)."'").","; $sql .= " ".(!isset($this->label) ? 'NULL' : "'".$this->db->escape($this->label)."'").","; $sql .= " ".(!isset($this->range_account) ? 'NULL' : "'".$this->db->escape($this->range_account)."'").","; $sql .= " ".(!isset($this->sens) ? 'NULL' : "'".$this->db->escape($this->sens)."'").","; @@ -357,12 +357,12 @@ class AccountancyCategory // extends CommonObject $sql .= " code=".(isset($this->code) ? "'".$this->db->escape($this->code)."'" : "null").","; $sql .= " label=".(isset($this->label) ? "'".$this->db->escape($this->label)."'" : "null").","; $sql .= " range_account=".(isset($this->range_account) ? "'".$this->db->escape($this->range_account)."'" : "null").","; - $sql .= " sens=".(isset($this->sens) ? $this->sens : "null").","; - $sql .= " category_type=".(isset($this->category_type) ? $this->category_type : "null").","; + $sql .= " sens=".(isset($this->sens) ? ((int) $this->sens) : "null").","; + $sql .= " category_type=".(isset($this->category_type) ? ((int) $this->category_type) : "null").","; $sql .= " formula=".(isset($this->formula) ? "'".$this->db->escape($this->formula)."'" : "null").","; - $sql .= " position=".(isset($this->position) ? $this->position : "null").","; - $sql .= " fk_country=".(isset($this->fk_country) ? $this->fk_country : "null").","; - $sql .= " active=".(isset($this->active) ? $this->active : "null"); + $sql .= " position=".(isset($this->position) ? ((int) $this->position) : "null").","; + $sql .= " fk_country=".(isset($this->fk_country) ? ((int) $this->fk_country) : "null").","; + $sql .= " active=".(isset($this->active) ? ((int) $this->active) : "null"); $sql .= " WHERE rowid=".((int) $this->id); $this->db->begin(); @@ -773,7 +773,7 @@ class AccountancyCategory // extends CommonObject * * @param int $categorytype -1=All, 0=Only non computed groups, 1=Only computed groups * @param int $active 1= active, 0=not active - * @return array|int Array of groups or -1 if error + * @return array|int Array of groups or -1 if error * @see getCatsCpts(), getCptsCat() */ public function getCats($categorytype = -1, $active = 1) diff --git a/htdocs/accountancy/class/accountancyexport.class.php b/htdocs/accountancy/class/accountancyexport.class.php index a240dca3387..601cb02bd38 100644 --- a/htdocs/accountancy/class/accountancyexport.class.php +++ b/htdocs/accountancy/class/accountancyexport.class.php @@ -14,6 +14,7 @@ * Copyright (C) 2020 Guillaume Alexandre * Copyright (C) 2022 Joachim Kueter * Copyright (C) 2022 Progiseize + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -277,7 +278,7 @@ class AccountancyExport 'ACCOUNTING_EXPORT_FORMAT' => 'csv', ), ), - 'cr'=> array( + 'cr' => array( '1' => $langs->trans("Unix"), '2' => $langs->trans("Windows") ), @@ -302,8 +303,6 @@ class AccountancyExport */ public function getMimeType($formatexportset) { - $mime = 'text/csv'; - switch ($formatexportset) { case self::$EXPORT_TYPE_FEC: $mime = 'text/tab-separated-values'; @@ -346,7 +345,7 @@ class AccountancyExport $exportFile = null; $exportFileName = ''; $exportFilePath = ''; - $exportFileFullName =''; + $exportFileFullName = ''; $downloadFileMimeType = ''; $downloadFileFullName = ''; $downloadFilePath = ''; @@ -944,7 +943,7 @@ class AccountancyExport $tab['signe_montant'] = '+'; // The amount must be in centimes without decimal points. - $tab['montant'] = str_pad(abs(($line->debit - $line->credit) * 100), 12, '0', STR_PAD_LEFT); + $tab['montant'] = str_pad((string) abs(($line->debit - $line->credit) * 100), 12, '0', STR_PAD_LEFT); $tab['contrepartie'] = str_repeat(' ', 8); // Force date format : %d%m%y @@ -1000,7 +999,7 @@ class AccountancyExport $invoice = new FactureFournisseur($this->db); $invoice->fetch($line->fk_doc); $objectDirPath = !empty($conf->fournisseur->facture->multidir_output[$conf->entity]) ? $conf->fournisseur->facture->multidir_output[$conf->entity] : $conf->fournisseur->facture->dir_output; - $objectDirPath.= '/'.rtrim(get_exdir($invoice->id, 2, 0, 0, $invoice, 'invoice_supplier'), '/'); + $objectDirPath .= '/'.rtrim(get_exdir($invoice->id, 2, 0, 0, $invoice, 'invoice_supplier'), '/'); } $arrayofinclusion = array(); // If it is a supplier invoice, we want to use last uploaded file @@ -1466,7 +1465,7 @@ class AccountancyExport $objectDirPath = !empty($conf->expensereport->multidir_output[$conf->entity]) ? $conf->expensereport->multidir_output[$conf->entity] : $conf->expensereport->dir_output; } elseif ($line->doc_type == 'supplier_invoice') { $objectDirPath = !empty($conf->fournisseur->facture->multidir_output[$conf->entity]) ? $conf->fournisseur->facture->multidir_output[$conf->entity] : $conf->fournisseur->facture->dir_output; - $objectDirPath.= '/'.rtrim(get_exdir($invoice->id, 2, 0, 0, $invoice, 'invoice_supplier'), '/'); + $objectDirPath .= '/'.rtrim(get_exdir($invoice->id, 2, 0, 0, $invoice, 'invoice_supplier'), '/'); } $arrayofinclusion = array(); // If it is a supplier invoice, we want to use last uploaded file @@ -1678,7 +1677,7 @@ class AccountancyExport $objectDirPath = !empty($conf->expensereport->multidir_output[$conf->entity]) ? $conf->expensereport->multidir_output[$conf->entity] : $conf->expensereport->dir_output; } elseif ($line->doc_type == 'supplier_invoice') { $objectDirPath = !empty($conf->fournisseur->facture->multidir_output[$conf->entity]) ? $conf->fournisseur->facture->multidir_output[$conf->entity] : $conf->fournisseur->facture->dir_output; - $objectDirPath.= '/'.rtrim(get_exdir($invoice->id, 2, 0, 0, $invoice, 'invoice_supplier'), '/'); + $objectDirPath .= '/'.rtrim(get_exdir($invoice->id, 2, 0, 0, $invoice, 'invoice_supplier'), '/'); } $arrayofinclusion = array(); // If it is a supplier invoice, we want to use last uploaded file @@ -1789,7 +1788,7 @@ class AccountancyExport && $objectLines[$aIndex + 1]->piece_num == $line->piece_num && $aIndex - 1 < $aSize && $objectLines[$aIndex - 1]->piece_num == $line->piece_num - ) { + ) { $sammelBuchung = true; } diff --git a/htdocs/accountancy/class/accountingaccount.class.php b/htdocs/accountancy/class/accountingaccount.class.php index de202b575e5..0a8e5a40845 100644 --- a/htdocs/accountancy/class/accountingaccount.class.php +++ b/htdocs/accountancy/class/accountingaccount.class.php @@ -5,6 +5,7 @@ * Copyright (C) 2014 Juanjo Menent * Copyright (C) 2015 Ari Elbaz (elarifr) * Copyright (C) 2018 Frédéric France + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -173,13 +174,13 @@ class AccountingAccount extends CommonObject /** * Load record in memory * - * @param int $rowid Id - * @param string $account_number Account number - * @param int|boolean $limittocurrentchart 1 or true=Load record only if it is into current active chart of account - * @param string $limittoachartaccount 'ABC'=Load record only if it is into chart account with code 'ABC' (better and faster than previous parameter if you have chart of account code). - * @return int Return integer <0 if KO, 0 if not found, Id of record if OK and found + * @param int $rowid Id + * @param string|null $account_number Account number + * @param int|boolean $limittocurrentchart 1 or true=Load record only if it is into current active chart of account + * @param string $limittoachartaccount 'ABC'=Load record only if it is into chart account with code 'ABC' (better and faster than previous parameter if you have chart of account code). + * @return int Return integer <0 if KO, 0 if not found, Id of record if OK and found */ - public function fetch($rowid = null, $account_number = null, $limittocurrentchart = 0, $limittoachartaccount = '') + public function fetch($rowid = 0, $account_number = null, $limittocurrentchart = 0, $limittoachartaccount = '') { global $conf; @@ -501,7 +502,7 @@ class AccountingAccount extends CommonObject $url = DOL_URL_ROOT . '/accountancy/bookkeeping/list.php?search_accountancy_code_start=' . urlencode($this->account_number) . '&search_accountancy_code_end=' . urlencode($this->account_number); $labelurl = $langs->trans("ShowAccountingAccountInJournals"); } elseif ($option == 'accountcard') { - $url = DOL_URL_ROOT . '/accountancy/admin/card.php?id=' . urlencode($this->id); + $url = DOL_URL_ROOT . '/accountancy/admin/card.php?id=' . urlencode((string) ($this->id)); $labelurl = $langs->trans("ShowAccountingAccount"); } @@ -570,7 +571,7 @@ class AccountingAccount extends CommonObject } global $action; $hookmanager->initHooks(array($this->element . 'dao')); - $parameters = array('id'=>$this->id, 'getnomurl' => &$result); + $parameters = array('id' => $this->id, 'getnomurl' => &$result); $reshook = $hookmanager->executeHooks('getNomUrl', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks if ($reshook > 0) { $result = $hookmanager->resPrint; @@ -632,7 +633,7 @@ class AccountingAccount extends CommonObject $this->db->begin(); $sql = "UPDATE ".MAIN_DB_PREFIX."accounting_account "; - $sql .= "SET ".$fieldtouse." = '0'"; + $sql .= "SET ".$this->db->sanitize($fieldtouse)." = 0"; $sql .= " WHERE rowid = ".((int) $id); dol_syslog(get_class($this)."::accountDeactivate ".$fieldtouse, LOG_DEBUG); @@ -670,7 +671,7 @@ class AccountingAccount extends CommonObject } $sql = "UPDATE ".MAIN_DB_PREFIX."accounting_account"; - $sql .= " SET ".$fieldtouse." = '1'"; + $sql .= " SET ".$this->db->sanitize($fieldtouse)." = 1"; $sql .= " WHERE rowid = ".((int) $id); dol_syslog(get_class($this)."::account_activate ".$fieldtouse, LOG_DEBUG); @@ -745,7 +746,7 @@ class AccountingAccount extends CommonObject $hookmanager->initHooks(array('accountancyBindingCalculation')); // Execute hook accountancyBindingCalculation - $parameters = array('buyer' => $buyer, 'seller' => $seller, 'product' => $product, 'facture' => $facture, 'factureDet' => $factureDet ,'accountingAccount'=>$accountingAccount, $type); + $parameters = array('buyer' => $buyer, 'seller' => $seller, 'product' => $product, 'facture' => $facture, 'factureDet' => $factureDet ,'accountingAccount' => $accountingAccount, 0 => $type); $reshook = $hookmanager->executeHooks('accountancyBindingCalculation', $parameters); // Note that $action and $object may have been modified by some hooks if (empty($reshook)) { @@ -769,11 +770,11 @@ class AccountingAccount extends CommonObject if ($factureDet->product_type == 1) { if ($buyer->country_code == $seller->country_code || empty($buyer->country_code)) { // If buyer in same country than seller (if not defined, we assume it is same country) $code_l = getDolGlobalString('ACCOUNTING_SERVICE_' . $const_name . '_ACCOUNT'); + // @phan-suppress-next-line PhanPluginRedundantAssignment $suggestedaccountingaccountbydefaultfor = ''; } else { if ($isSellerInEEC && $isBuyerInEEC && $factureDet->tva_tx != 0) { // European intravat sale, but with a VAT $code_l = getDolGlobalString('ACCOUNTING_SERVICE_' . $const_name . '_ACCOUNT'); - $suggestedaccountingaccountbydefaultfor = 'eecwithvat'; } elseif ($isSellerInEEC && $isBuyerInEEC && empty($buyer->tva_intra)) { // European intravat sale, without VAT intra community number $code_l = getDolGlobalString('ACCOUNTING_SERVICE_' . $const_name . '_ACCOUNT'); $suggestedaccountingaccountbydefaultfor = 'eecwithoutvatnumber'; @@ -788,6 +789,7 @@ class AccountingAccount extends CommonObject } elseif ($factureDet->product_type == 0) { if ($buyer->country_code == $seller->country_code || empty($buyer->country_code)) { // If buyer in same country than seller (if not defined, we assume it is same country) $code_l = getDolGlobalString('ACCOUNTING_PRODUCT_' . $const_name . '_ACCOUNT'); + // @phan-suppress-next-line PhanPluginRedundantAssignment $suggestedaccountingaccountbydefaultfor = ''; } else { if ($isSellerInEEC && $isBuyerInEEC && $factureDet->tva_tx != 0) { // European intravat sale, but with a VAT diff --git a/htdocs/accountancy/class/accountingjournal.class.php b/htdocs/accountancy/class/accountingjournal.class.php index 771e9554ebd..14afbbbe7d8 100644 --- a/htdocs/accountancy/class/accountingjournal.class.php +++ b/htdocs/accountancy/class/accountingjournal.class.php @@ -1,5 +1,6 @@ + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -77,7 +78,7 @@ class AccountingJournal extends CommonObject public $active; /** - * @var array array of lines + * @var AccountingJournal[] array of lines */ public $lines; @@ -161,34 +162,47 @@ class AccountingJournal extends CommonObject /** * Load object in memory from the database * - * @param string $sortorder Sort Order - * @param string $sortfield Sort field - * @param int $limit offset limit - * @param int $offset offset limit - * @param array $filter filter array - * @param string $filtermode filter mode (AND or OR) - * - * @return int Return integer <0 if KO, >0 if OK + * @param string $sortorder Sort Order + * @param string $sortfield Sort field + * @param int $limit limit + * @param int $offset offset limit + * @param string|array $filter filter array + * @param string $filtermode filter mode (AND or OR) + * @return int Return integer <0 if KO, >0 if OK */ - public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND') + public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, $filter = '', $filtermode = 'AND') { $sql = "SELECT rowid, code, label, nature, active"; $sql .= ' FROM '.MAIN_DB_PREFIX.$this->table_element.' as t'; - // Manage filter - $sqlwhere = array(); - if (count($filter) > 0) { - foreach ($filter as $key => $value) { - if ($key == 't.code' || $key == 't.label' || $key == 't.nature') { - $sqlwhere[] = $key.'\''.$this->db->escape($value).'\''; - } elseif ($key == 't.rowid' || $key == 't.active') { - $sqlwhere[] = $key.'='.$value; - } - } - } $sql .= ' WHERE 1 = 1'; $sql .= " AND entity IN (".getEntity('accountancy').")"; - if (count($sqlwhere) > 0) { - $sql .= " AND ".implode(" ".$filtermode." ", $sqlwhere); + + // Manage filter + if (is_array($filter)) { + $sqlwhere = array(); + if (count($filter) > 0) { + foreach ($filter as $key => $value) { + if ($key == 't.code' || $key == 't.label' || $key == 't.nature') { + $sqlwhere[] = $key." = '".$this->db->escape($value)."'"; + } elseif ($key == 't.rowid' || $key == 't.active') { + $sqlwhere[] = $key.'='.((int) $value); + } + } + } + if (count($sqlwhere) > 0) { + $sql .= " AND ".implode(" ".$this->db->sanitize($filtermode)." ", $sqlwhere); + } + + $filter = ''; + } + + // Manage filter + $errormessage = ''; + $sql .= forgeSQLFromUniversalSearchCriteria($filter, $errormessage); + if ($errormessage) { + $this->errors[] = $errormessage; + dol_syslog(__METHOD__.' '.implode(',', $this->errors), LOG_ERR); + return -1; } if (!empty($sortfield)) { @@ -285,7 +299,7 @@ class AccountingJournal extends CommonObject $label_link .= ' - '.($nourl ? '' : '').$langs->transnoentities($this->label).($nourl ? '' : ''); } if ($withlabel == 2 && !empty($this->nature)) { - $key = $langs->trans("AccountingJournalType".strtoupper($this->nature)); + $key = $langs->trans("AccountingJournalType".$this->nature); $transferlabel = ($this->nature && $key != "AccountingJournalType".strtoupper($langs->trans($this->nature)) ? $key : $this->label); $label_link .= ' - '.($nourl ? '' : '').$transferlabel.($nourl ? '' : ''); } @@ -301,7 +315,7 @@ class AccountingJournal extends CommonObject global $action; $hookmanager->initHooks(array('accountingjournaldao')); - $parameters = array('id'=>$this->id, 'getnomurl' => &$result); + $parameters = array('id' => $this->id, 'getnomurl' => &$result); $reshook = $hookmanager->executeHooks('getNomUrl', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks if ($reshook > 0) { $result = $hookmanager->resPrint; @@ -407,12 +421,12 @@ class AccountingJournal extends CommonObject case 1: // Various Journal $data = $this->getAssetData($user, $type, $date_start, $date_end, $in_bookkeeping); break; - // case 2: // Sells Journal - // case 3: // Purchases Journal - // case 4: // Bank Journal - // case 5: // Expense reports Journal - // case 8: // Inventory Journal - // case 9: // hasnew Journal + // case 2: // Sells Journal + // case 3: // Purchases Journal + // case 4: // Bank Journal + // case 5: // Expense reports Journal + // case 8: // Inventory Journal + // case 9: // hasnew Journal } } diff --git a/htdocs/accountancy/class/bookkeeping.class.php b/htdocs/accountancy/class/bookkeeping.class.php index 588b21ed668..2dc381808fc 100644 --- a/htdocs/accountancy/class/bookkeeping.class.php +++ b/htdocs/accountancy/class/bookkeeping.class.php @@ -2,7 +2,8 @@ /* Copyright (C) 2014-2017 Olivier Geffroy * Copyright (C) 2015-2022 Alexandre Spangaro * Copyright (C) 2015-2020 Florian Henry - * Copyright (C) 2018-2020 Frédéric France + * Copyright (C) 2018-2024 Frédéric France + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -555,7 +556,7 @@ class BookKeeping extends CommonObject global $action; $hookmanager->initHooks(array($this->element . 'dao')); - $parameters = array('id'=>$this->id, 'getnomurl' => &$result); + $parameters = array('id' => $this->id, 'getnomurl' => &$result); $reshook = $hookmanager->executeHooks('getNomUrl', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks if ($reshook > 0) { $result = $hookmanager->resPrint; @@ -720,16 +721,6 @@ class BookKeeping extends CommonObject if (!$error) { $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX.$this->table_element.$mode); - - // Uncomment this and change MYOBJECT to your own tag if you - // want this action to call a trigger. - //if (! $notrigger) { - - // // Call triggers - // $result=$this->call_trigger('MYOBJECT_CREATE',$user); - // if ($result < 0) $error++; - // // End call triggers - //} } // Commit or rollback @@ -747,11 +738,10 @@ class BookKeeping extends CommonObject /** * Load object in memory from the database * - * @param int $id Id object - * @param string $ref Ref - * @param string $mode Mode - * - * @return int Return integer <0 if KO, 0 if not found, >0 if OK + * @param int $id Id object + * @param string $ref Ref + * @param string $mode Mode ('' or 'tmp_') + * @return int Return integer <0 if KO, 0 if not found, >0 if OK */ public function fetch($id, $ref = null, $mode = '') { @@ -852,7 +842,7 @@ class BookKeeping extends CommonObject * * @param string $sortorder Sort Order * @param string $sortfield Sort field - * @param int $limit offset limit + * @param int $limit limit * @param int $offset offset limit * @param array $filter filter array * @param string $filtermode filter mode (AND or OR) @@ -907,22 +897,38 @@ class BookKeeping extends CommonObject $sqlwhere = array(); if (count($filter) > 0) { foreach ($filter as $key => $value) { - if ($key == 't.doc_date') { - $sqlwhere[] = $key.'=\''.$this->db->idate($value).'\''; - } elseif ($key == 't.doc_date>=' || $key == 't.doc_date<=') { - $sqlwhere[] = $key.'\''.$this->db->idate($value).'\''; - } elseif ($key == 't.numero_compte>=' || $key == 't.numero_compte<=' || $key == 't.subledger_account>=' || $key == 't.subledger_account<=') { - $sqlwhere[] = $key.'\''.$this->db->escape($value).'\''; + if ($key == 't.doc_date>=') { + $sqlwhere[] = "t.doc_date >= '".$this->db->idate($value)."'"; + } elseif ($key == 't.doc_date<=') { + $sqlwhere[] = "t.doc_date <= '".$this->db->idate($value)."'"; + } elseif ($key == 't.doc_date>') { + $sqlwhere[] = "t.doc_date > '".$this->db->idate($value)."'"; + } elseif ($key == 't.doc_date<') { + $sqlwhere[] = "t.doc_date < '".$this->db->idate($value)."'"; + } elseif ($key == 't.numero_compte>=') { + $sqlwhere[] = "t.numero_compte >= '".$this->db->escape($value)."'"; + } elseif ($key == 't.numero_compte<=') { + $sqlwhere[] = "t.numero_compte <= '".$this->db->escape($value)."'"; + } elseif ($key == 't.subledger_account>=') { + $sqlwhere[] = "t.subledger_account >= '".$this->db->escape($value)."'"; + } elseif ($key == 't.subledger_account<=') { + $sqlwhere[] = "t.subledger_account <= '".$this->db->escape($value)."'"; } elseif ($key == 't.fk_doc' || $key == 't.fk_docdet' || $key == 't.piece_num') { - $sqlwhere[] = $key.'='.$value; + $sqlwhere[] = $this->db->sanitize($key).' = '.((int) $value); } elseif ($key == 't.subledger_account' || $key == 't.numero_compte') { - $sqlwhere[] = $key.' LIKE \''.$this->db->escape($this->db->escapeforlike($value)).'%\''; - } elseif ($key == 't.date_creation>=' || $key == 't.date_creation<=') { - $sqlwhere[] = $key.'\''.$this->db->idate($value).'\''; - } elseif ($key == 't.date_export>=' || $key == 't.date_export<=') { - $sqlwhere[] = $key.'\''.$this->db->idate($value).'\''; - } elseif ($key == 't.date_validated>=' || $key == 't.date_validated<=') { - $sqlwhere[] = $key.'\''.$this->db->idate($value).'\''; + $sqlwhere[] = $this->db->sanitize($key).' LIKE \''.$this->db->escape($this->db->escapeforlike($value)).'%\''; + } elseif ($key == 't.date_creation>=') { + $sqlwhere[] = 't.date_creation >= \''.$this->db->idate($value).'\''; + } elseif ($key == 't.date_creation<=') { + $sqlwhere[] = 't.date_creation <= \''.$this->db->idate($value).'\''; + } elseif ($key == 't.date_export>=') { + $sqlwhere[] = 't.date_export >= \''.$this->db->idate($value).'\''; + } elseif ($key == 't.date_export<=') { + $sqlwhere[] = 't.date_export <= \''.$this->db->idate($value).'\''; + } elseif ($key == 't.date_validated>=') { + $sqlwhere[] = 't;date_validate >= \''.$this->db->idate($value).'\''; + } elseif ($key == 't.date_validated<=') { + $sqlwhere[] = 't;date_validate <= \''.$this->db->idate($value).'\''; } elseif ($key == 't.credit' || $key == 't.debit') { $sqlwhere[] = natural_search($key, $value, 1, 1); } elseif ($key == 't.reconciled_option') { @@ -943,7 +949,7 @@ class BookKeeping extends CommonObject $sql .= ' FROM '.MAIN_DB_PREFIX.$this->table_element.' as t'; $sql .= ' WHERE entity = ' . ((int) $conf->entity); // Do not use getEntity for accounting features if (count($sqlwhere) > 0) { - $sql .= " AND ".implode(" ".$filtermode." ", $sqlwhere); + $sql .= " AND ".implode(" ".$this->db->sanitize($filtermode)." ", $sqlwhere); } // Filter by ledger account or subledger account if (!empty($option)) { @@ -1030,14 +1036,14 @@ class BookKeeping extends CommonObject * * @param string $sortorder Sort Order * @param string $sortfield Sort field - * @param int $limit Offset limit + * @param int $limit Limit * @param int $offset Offset limit - * @param array $filter Filter array + * @param string|array $filter Filter array * @param string $filtermode Filter mode (AND or OR) * @param int $showAlreadyExportMovements Show movements when field 'date_export' is not empty (0:No / 1:Yes (Default)) * @return int Return integer <0 if KO, >0 if OK */ - public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND', $showAlreadyExportMovements = 1) + public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, $filter = '', $filtermode = 'AND', $showAlreadyExportMovements = 1) { global $conf; @@ -1073,48 +1079,84 @@ class BookKeeping extends CommonObject $sql .= " t.date_export,"; $sql .= " t.date_validated as date_validation"; $sql .= ' FROM '.MAIN_DB_PREFIX.$this->table_element.' as t'; - // Manage filter - $sqlwhere = array(); - if (count($filter) > 0) { - foreach ($filter as $key => $value) { - if ($key == 't.doc_date') { - $sqlwhere[] = $key.'=\''.$this->db->idate($value).'\''; - } elseif ($key == 't.doc_date>=' || $key == 't.doc_date<=') { - $sqlwhere[] = $key.'\''.$this->db->idate($value).'\''; - } elseif ($key == 't.numero_compte>=' || $key == 't.numero_compte<=' || $key == 't.subledger_account>=' || $key == 't.subledger_account<=') { - $sqlwhere[] = $key.'\''.$this->db->escape($value).'\''; - } elseif ($key == 't.fk_doc' || $key == 't.fk_docdet' || $key == 't.piece_num') { - $sqlwhere[] = $key.'='.((int) $value); - } elseif ($key == 't.subledger_account' || $key == 't.numero_compte') { - $sqlwhere[] = $key.' LIKE \''.$this->db->escape($value).'%\''; - } elseif ($key == 't.date_creation>=' || $key == 't.date_creation<=') { - $sqlwhere[] = $key.'\''.$this->db->idate($value).'\''; - } elseif ($key == 't.tms>=' || $key == 't.tms<=') { - $sqlwhere[] = $key.'\''.$this->db->idate($value).'\''; - } elseif ($key == 't.date_export>=' || $key == 't.date_export<=') { - $sqlwhere[] = $key.'\''.$this->db->idate($value).'\''; - } elseif ($key == 't.date_validated>=' || $key == 't.date_validated<=') { - $sqlwhere[] = $key.'\''.$this->db->idate($value).'\''; - } elseif ($key == 't.credit' || $key == 't.debit') { - $sqlwhere[] = natural_search($key, $value, 1, 1); - } elseif ($key == 't.code_journal' && !empty($value)) { - if (is_array($value)) { - $sqlwhere[] = natural_search("t.code_journal", implode(',', $value), 3, 1); - } else { - $sqlwhere[] = natural_search("t.code_journal", $value, 3, 1); - } - } else { - $sqlwhere[] = natural_search($key, $value, 0, 1); - } - } - } + $sql .= ' WHERE t.entity = ' . ((int) $conf->entity); // Do not use getEntity for accounting features if ($showAlreadyExportMovements == 0) { $sql .= " AND t.date_export IS NULL"; } - if (count($sqlwhere) > 0) { - $sql .= ' AND '.implode(" ".$filtermode." ", $sqlwhere); + + // Manage filter + if (is_array($filter)) { // deprecated, use $filter = USF syntax + $sqlwhere = array(); + if (count($filter) > 0) { + foreach ($filter as $key => $value) { + if ($key == 't.doc_date') { + $sqlwhere[] = $this->db->sanitize($key).' = \''.$this->db->idate($value).'\''; + } elseif ($key == 't.doc_date>=') { + $sqlwhere[] = "t.doc_date >= '".$this->db->idate($value)."'"; + } elseif ($key == 't.doc_date<=') { + $sqlwhere[] = "t.doc_date <= '".$this->db->idate($value)."'"; + } elseif ($key == 't.doc_date>') { + $sqlwhere[] = "t.doc_date > '".$this->db->idate($value)."'"; + } elseif ($key == 't.doc_date<') { + $sqlwhere[] = "t.doc_date < '".$this->db->idate($value)."'"; + } elseif ($key == 't.numero_compte>=') { + $sqlwhere[] = "t.numero_compte >= '".$this->db->escape($value)."'"; + } elseif ($key == 't.numero_compte<=') { + $sqlwhere[] = "t.numero_compte <= '".$this->db->escape($value)."'"; + } elseif ($key == 't.subledger_account>=') { + $sqlwhere[] = "t.subledger_account >= '".$this->db->escape($value)."'"; + } elseif ($key == 't.subledger_account<=') { + $sqlwhere[] = "t.subledger_account <= '".$this->db->escape($value)."'"; + } elseif ($key == 't.fk_doc' || $key == 't.fk_docdet' || $key == 't.piece_num') { + $sqlwhere[] = $this->db->sanitize($key).' = '.((int) $value); + } elseif ($key == 't.subledger_account' || $key == 't.numero_compte') { + $sqlwhere[] = $this->db->sanitize($key).' LIKE \''.$this->db->escape($value).'%\''; + } elseif ($key == 't.date_creation>=') { + $sqlwhere[] = 't.date_creation >= \''.$this->db->idate($value).'\''; + } elseif ($key == 't.date_creation<=') { + $sqlwhere[] = 't.date_creation <= \''.$this->db->idate($value).'\''; + } elseif ($key == 't.tms>=') { + $sqlwhere[] = 't.tms >= \''.$this->db->idate($value).'\''; + } elseif ($key == 't.tms<=') { + $sqlwhere[] = 't.tms <= \''.$this->db->idate($value).'\''; + } elseif ($key == 't.date_export>=') { + $sqlwhere[] = 't.date_export >= \''.$this->db->idate($value).'\''; + } elseif ($key == 't.date_export<=') { + $sqlwhere[] = 't.date_export <= \''.$this->db->idate($value).'\''; + } elseif ($key == 't.date_validated>=') { + $sqlwhere[] = 't.date_validated >= \''.$this->db->idate($value).'\''; + } elseif ($key == 't.date_validated<=') { + $sqlwhere[] = 't.date_validated <= \''.$this->db->idate($value).'\''; + } elseif ($key == 't.credit' || $key == 't.debit') { + $sqlwhere[] = natural_search($key, $value, 1, 1); + } elseif ($key == 't.code_journal' && !empty($value)) { + if (is_array($value)) { + $sqlwhere[] = natural_search("t.code_journal", implode(',', $value), 3, 1); + } else { + $sqlwhere[] = natural_search("t.code_journal", $value, 3, 1); + } + } else { + $sqlwhere[] = natural_search($key, $value, 0, 1); + } + } + } + if (count($sqlwhere) > 0) { + $sql .= ' AND '.implode(" ".$this->db->sanitize($filtermode)." ", $sqlwhere); + } + + $filter = ''; } + + // Manage filter + $errormessage = ''; + $sql .= forgeSQLFromUniversalSearchCriteria($filter, $errormessage); + if ($errormessage) { + $this->errors[] = $errormessage; + dol_syslog(__METHOD__.' '.implode(',', $this->errors), LOG_ERR); + return -1; + } + if (!empty($sortfield)) { $sql .= $this->db->order($sortfield, $sortorder); } @@ -1179,16 +1221,16 @@ class BookKeeping extends CommonObject /** * Load object in memory from the database * - * @param string $sortorder Sort Order - * @param string $sortfield Sort field - * @param int $limit offset limit - * @param int $offset offset limit - * @param array $filter filter array - * @param string $filtermode filter mode (AND or OR) - * @param int $option option (0: aggregate by general account or 1: aggreegate by subaccount) - * @return int Return integer <0 if KO, >0 if OK + * @param string $sortorder Sort Order + * @param string $sortfield Sort field + * @param int $limit Limit + * @param int $offset Offset limit + * @param string|array $filter Filter + * @param string $filtermode Filter mode (AND or OR) + * @param int $option option (0: aggregate by general account or 1: aggreegate by subaccount) + * @return int Return integer <0 if KO, >0 if OK */ - public function fetchAllBalance($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND', $option = 0) + public function fetchAllBalance($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, $filter = '', $filtermode = 'AND', $option = 0) { global $conf; @@ -1205,38 +1247,64 @@ class BookKeeping extends CommonObject $sql .= " SUM(t.debit) as debit,"; $sql .= " SUM(t.credit) as credit"; $sql .= ' FROM '.MAIN_DB_PREFIX.$this->table_element.' as t'; + $sql .= ' WHERE entity = ' . ((int) $conf->entity); // Do not use getEntity for accounting features + // Manage filter - $sqlwhere = array(); - if (count($filter) > 0) { - foreach ($filter as $key => $value) { - if ($key == 't.doc_date') { - $sqlwhere[] = $key." = '".$this->db->idate($value)."'"; - } elseif ($key == 't.doc_date>=' || $key == 't.doc_date<=' || $key == 't.doc_date>' || $key == 't.doc_date<') { - $sqlwhere[] = $key."'".$this->db->idate($value)."'"; - } elseif ($key == 't.numero_compte>=' || $key == 't.numero_compte<=' || $key == 't.subledger_account>=' || $key == 't.subledger_account<=') { - $sqlwhere[] = $key."'".$this->db->escape($value)."'"; - } elseif ($key == 't.fk_doc' || $key == 't.fk_docdet' || $key == 't.piece_num') { - $sqlwhere[] = $key." = ".((int) $value); - } elseif ($key == 't.subledger_account' || $key == 't.numero_compte') { - $sqlwhere[] = $key." LIKE '".$this->db->escape($value)."%'"; - } elseif ($key == 't.subledger_label') { - $sqlwhere[] = $key." LIKE '".$this->db->escape($value)."%'"; - } elseif ($key == 't.code_journal' && !empty($value)) { - if (is_array($value)) { - $sqlwhere[] = natural_search("t.code_journal", implode(',', $value), 3, 1); + if (is_array($filter)) { + $sqlwhere = array(); + if (count($filter) > 0) { + foreach ($filter as $key => $value) { + if ($key == 't.doc_date') { + $sqlwhere[] = $this->db->sanitize($key)." = '".$this->db->idate($value)."'"; + } elseif ($key == 't.doc_date>=') { + $sqlwhere[] = "t.doc_date >= '".$this->db->idate($value)."'"; + } elseif ($key == 't.doc_date<=') { + $sqlwhere[] = "t.doc_date <= '".$this->db->idate($value)."'"; + } elseif ($key == 't.doc_date>') { + $sqlwhere[] = "t.doc_date > '".$this->db->idate($value)."'"; + } elseif ($key == 't.doc_date<') { + $sqlwhere[] = "t.doc_date < '".$this->db->idate($value)."'"; + } elseif ($key == 't.numero_compte>=') { + $sqlwhere[] = "t.numero_compte >= '".$this->db->escape($value)."'"; + } elseif ($key == 't.numero_compte<=') { + $sqlwhere[] = "t.numero_compte <= '".$this->db->escape($value)."'"; + } elseif ($key == 't.subledger_account>=') { + $sqlwhere[] = "t.subledger_account >= '".$this->db->escape($value)."'"; + } elseif ($key == 't.subledger_account<=') { + $sqlwhere[] = "t.subledger_account <= '".$this->db->escape($value)."'"; + } elseif ($key == 't.fk_doc' || $key == 't.fk_docdet' || $key == 't.piece_num') { + $sqlwhere[] = $this->db->sanitize($key)." = ".((int) $value); + } elseif ($key == 't.subledger_account' || $key == 't.numero_compte') { + $sqlwhere[] = $this->db->sanitize($key)." LIKE '".$this->db->escape($value)."%'"; + } elseif ($key == 't.subledger_label') { + $sqlwhere[] = $this->db->sanitize($key)." LIKE '".$this->db->escape($value)."%'"; + } elseif ($key == 't.code_journal' && !empty($value)) { + if (is_array($value)) { + $sqlwhere[] = natural_search("t.code_journal", implode(',', $value), 3, 1); + } else { + $sqlwhere[] = natural_search("t.code_journal", $value, 3, 1); + } + } elseif ($key == 't.reconciled_option') { + $sqlwhere[] = 't.lettering_code IS NULL'; } else { - $sqlwhere[] = natural_search("t.code_journal", $value, 3, 1); + $sqlwhere[] = $this->db->sanitize($key)." LIKE '%".$this->db->escape($this->db->escapeforlike($value))."%'"; } - } elseif ($key == 't.reconciled_option') { - $sqlwhere[] = 't.lettering_code IS NULL'; - } else { - $sqlwhere[] = $key." LIKE '%".$this->db->escape($value)."%'"; } } + if (count($sqlwhere) > 0) { + $sql .= " AND ".implode(" ".$this->db->sanitize($filtermode)." ", $sqlwhere); + } + + $filter = ''; } - $sql .= ' WHERE entity = ' . ((int) $conf->entity); // Do not use getEntity for accounting features - if (count($sqlwhere) > 0) { - $sql .= " AND ".implode(" ".$filtermode." ", $sqlwhere); + + // Manage filter + $errormessage = ''; + $sql .= forgeSQLFromUniversalSearchCriteria($filter, $errormessage); + if ($errormessage) { + $this->errors[] = $errormessage; + dol_syslog(__METHOD__.' '.implode(',', $this->errors), LOG_ERR); + return -1; } if (!empty($option)) { @@ -1258,7 +1326,9 @@ class BookKeeping extends CommonObject $sql .= $this->db->plimit($limit + 1, $offset); } + //print $sql; $resql = $this->db->query($sql); + if ($resql) { $num = $this->db->num_rows($resql); @@ -1433,7 +1503,7 @@ class BookKeeping extends CommonObject * @param string $field Field * @param string $value Value * @param string $mode Mode ('' or _tmp') - * @return number Return integer <0 if KO, >0 if OK + * @return int Return integer <0 if KO, >0 if OK */ public function updateByMvt($piece_num = '', $field = '', $value = '', $mode = '') { @@ -1447,7 +1517,7 @@ class BookKeeping extends CommonObject $this->db->begin(); $sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element.$mode; - $sql .= " SET ".$field." = ".(is_numeric($value) ? ((float) $value) : "'".$this->db->escape($value)."'"); + $sql .= " SET ".$this->db->sanitize($field)." = ".(is_numeric($value) ? ((float) $value) : "'".$this->db->escape($value)."'"); $sql .= " WHERE piece_num = ".((int) $piece_num); $sql .= $sql_filter; @@ -1474,15 +1544,16 @@ class BookKeeping extends CommonObject * * @param User $user User that deletes * @param int $notrigger false=launch triggers after, true=disable triggers - * @param string $mode Mode + * @param string $mode Mode ('' or 'tmp_') * @return int Return integer <0 if KO, >0 if OK */ public function delete(User $user, $notrigger = 0, $mode = '') { global $langs; + dol_syslog(__METHOD__, LOG_DEBUG); - $result = $this->canModifyBookkeeping($this->id); + $result = $this->canModifyBookkeeping($this->id, $mode); if ($result < 0) { return -1; } elseif ($result == 0) { @@ -1631,7 +1702,7 @@ class BookKeeping extends CommonObject * Delete bookkeeping by piece number * * @param int $piecenum Piecenum to delete - * @param string $mode Mode + * @param string $mode Mode ('' or '_tmp') * @return int Result */ public function deleteMvtNum($piecenum, $mode = '') @@ -1722,7 +1793,7 @@ class BookKeeping extends CommonObject * Initialise object with example values * Id must be 0 if object instance is a specimen * - * @return void + * @return int */ public function initAsSpecimen() { @@ -1752,6 +1823,8 @@ class BookKeeping extends CommonObject $this->journal_label = 'Journal de vente'; $this->piece_num = 1234; $this->date_creation = $now; + + return 1; } /** @@ -1835,10 +1908,10 @@ class BookKeeping extends CommonObject } /** - * Load all information of accountancy document + * Load all accounting lines related to a given transaction ID $piecenum * * @param int $piecenum Id of line to get - * @param string $mode Mode + * @param string $mode Mode ('' or '_tmp') * @return int Return integer <0 if KO, >0 if OK */ public function fetchAllPerMvt($piecenum, $mode = '') @@ -1971,7 +2044,7 @@ class BookKeeping extends CommonObject /** * Transform transaction * - * @param number $direction If 0: tmp => real, if 1: real => tmp + * @param int $direction If 0: tmp => real, if 1: real => tmp * @param string $piece_num Piece num = Transaction ref * @return int int Return integer <0 if KO, >0 if OK */ @@ -1982,6 +2055,7 @@ class BookKeeping extends CommonObject $error = 0; $sql_filter = $this->getCanModifyBookkeepingSQL(); + if (!isset($sql_filter)) { return -1; } @@ -2197,7 +2271,7 @@ class BookKeeping extends CommonObject $obj = $this->db->fetch_object($resql); } - $result = array('id'=>$obj->rowid, 'account_number'=>$obj->account_number, 'label'=>$obj->label); + $result = array('id' => $obj->rowid, 'account_number' => $obj->account_number, 'label' => $obj->label); return $result; } else { $this->error = "Error ".$this->db->lasterror(); @@ -2271,10 +2345,11 @@ class BookKeeping extends CommonObject $sql_list = array(); if (!empty($conf->cache['active_fiscal_period_cached']) && is_array($conf->cache['active_fiscal_period_cached'])) { foreach ($conf->cache['active_fiscal_period_cached'] as $fiscal_period) { - $sql_list[] = "('" . $this->db->idate($fiscal_period['date_start']) . "' <= {$alias}doc_date AND {$alias}doc_date <= '" . $this->db->idate($fiscal_period['date_end']) . "')"; + $sql_list[] = "('" . $this->db->idate($fiscal_period['date_start']) . "' <= ".$this->db->sanitize($alias)."doc_date AND ".$this->db->sanitize($alias)."doc_date <= '" . $this->db->idate($fiscal_period['date_end']) . "')"; } } - self::$can_modify_bookkeeping_sql_cached[$alias] = !empty($sql_list) ? ' AND (' . implode(' OR ', $sql_list) . ')' : ''; + $sqlsanitized = implode(' OR ', $sql_list); + self::$can_modify_bookkeeping_sql_cached[$alias] = !empty($sql_list) ? " AND (".$sqlsanitized.")" : ""; } return self::$can_modify_bookkeeping_sql_cached[$alias]; @@ -2284,9 +2359,10 @@ class BookKeeping extends CommonObject * Is the bookkeeping can be modified or deleted ? * * @param int $id Bookkeeping ID + * @param string $mode Mode ('' or 'tmp_') * @return int Return integer <0 if KO, == 0 if No, == 1 if Yes */ - public function canModifyBookkeeping($id) + public function canModifyBookkeeping($id, $mode = '') { global $conf; @@ -2298,7 +2374,7 @@ class BookKeeping extends CommonObject } $bookkeeping = new BookKeeping($this->db); - $result = $bookkeeping->fetch($id); + $result = $bookkeeping->fetch($id, null, $mode); if ($result <= 0) { return $result; } @@ -2319,7 +2395,7 @@ class BookKeeping extends CommonObject } $bookkeeping = new BookKeeping($this->db); - $result = $bookkeeping->fetch($id); + $result = $bookkeeping->fetch($id, null, $mode); if ($result <= 0) { return $result; } @@ -2445,7 +2521,7 @@ class BookKeeping extends CommonObject * Get list of fiscal period * * @param string $filter Filter - * @return array|int Return integer <0 if KO, Fiscal periods : [[id, date_start, date_end, label], ...] + * @return array|int Return integer <0 if KO, Fiscal periods : [[id, date_start, date_end, label], ...] */ public function getFiscalPeriods($filter = '') { @@ -2456,7 +2532,7 @@ class BookKeeping extends CommonObject $sql .= " FROM " . $this->db->prefix() . "accounting_fiscalyear"; $sql .= " WHERE entity = " . ((int) $conf->entity); if (!empty($filter)) { - $sql .= " AND (" . $filter . ')'; + $sql .= " AND (" . $this->db->sanitize($filter, 1, 1, 1) . ')'; } $sql .= $this->db->order('date_start', 'ASC'); @@ -2468,11 +2544,11 @@ class BookKeeping extends CommonObject while ($obj = $this->db->fetch_object($resql)) { $list[$obj->rowid] = array( - 'id' => $obj->rowid, + 'id' => (int) $obj->rowid, 'label' => $obj->label, 'date_start' => $this->db->jdate($obj->date_start), 'date_end' => $this->db->jdate($obj->date_end), - 'status' => $obj->statut, + 'status' => (int) $obj->statut, ); } @@ -2493,7 +2569,7 @@ class BookKeeping extends CommonObject $sql = "SELECT YEAR(b.doc_date) as year"; for ($i = 1; $i <= 12; $i++) { - $sql .= ", SUM(" . $this->db->ifsql("MONTH(b.doc_date)=" . $i, "1", "0") . ") AS month" . $i; + $sql .= ", SUM(".$this->db->ifsql("MONTH(b.doc_date) = ".((int) $i), "1", "0") . ") AS month".((int) $i); } $sql .= ", COUNT(b.rowid) as total"; $sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping as b"; @@ -2592,6 +2668,7 @@ class BookKeeping extends CommonObject if (getDolGlobalString('ACCOUNTING_CLOSURE_ACCOUNTING_GROUPS_USED_FOR_INCOME_STATEMENT')) { $accounting_groups_used_for_income_statement = array_filter(array_map('trim', explode(',', getDolGlobalString('ACCOUNTING_CLOSURE_ACCOUNTING_GROUPS_USED_FOR_INCOME_STATEMENT'))), 'strlen'); + $pcg_type_filter = array(); foreach ($accounting_groups_used_for_income_statement as $item) { $pcg_type_filter[] = "'" . $this->db->escape($item) . "'"; } diff --git a/htdocs/accountancy/class/lettering.class.php b/htdocs/accountancy/class/lettering.class.php index 5686bab7de9..6f669e4833d 100644 --- a/htdocs/accountancy/class/lettering.class.php +++ b/htdocs/accountancy/class/lettering.class.php @@ -289,7 +289,7 @@ class Lettering extends BookKeeping { $error = 0; - // Generate a string with n char A where n is ACCOUNTING_LETTERING_NBLETTERS (So 'AA', 'AAA', ...) + // Generate a string with n char A where n is ACCOUNTING_LETTERING_NBLETTERS (So 'AA', 'AAA', ...) @phan-suppress-next-line PhanParamSuspiciousOrder $lettre = str_pad("", getDolGlobalInt('ACCOUNTING_LETTERING_NBLETTERS', 3), "A"); $sql = "SELECT DISTINCT ab2.lettering_code"; @@ -671,11 +671,11 @@ class Lettering extends BookKeeping $bookkeeping_lines_by_type = array(); foreach (self::$doc_type_infos as $doc_type => $doc_type_info) { // Get all fk_doc by doc_type from bank ids - $sql = "SELECT DISTINCT dp." . $doc_type_info['doc_payment_table_fk_doc'] . " AS fk_doc"; - $sql .= " FROM " . MAIN_DB_PREFIX . $doc_type_info['payment_table'] . " AS p"; - $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . $doc_type_info['doc_payment_table'] . " AS dp ON dp." . $doc_type_info['doc_payment_table_fk_payment'] . " = p.rowid"; - $sql .= " WHERE p." . $doc_type_info['payment_table_fk_bank'] . " IN (" . $this->db->sanitize(implode(',', $bank_ids)) . ")"; - $sql .= " AND dp." . $doc_type_info['doc_payment_table_fk_doc'] . " > 0"; + $sql = "SELECT DISTINCT dp." . $this->db->sanitize($doc_type_info['doc_payment_table_fk_doc']) . " AS fk_doc"; + $sql .= " FROM " . MAIN_DB_PREFIX . $this->db->sanitize($doc_type_info['payment_table']) . " AS p"; + $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . $this->db->sanitize($doc_type_info['doc_payment_table']) . " AS dp ON dp." . $this->db->sanitize($doc_type_info['doc_payment_table_fk_payment']) . " = p.rowid"; + $sql .= " WHERE p." . $this->db->sanitize($doc_type_info['payment_table_fk_bank']) . " IN (" . $this->db->sanitize(implode(',', $bank_ids)) . ")"; + $sql .= " AND dp." . $this->db->sanitize($doc_type_info['doc_payment_table_fk_doc']) . " > 0"; dol_syslog(__METHOD__ . " - Get all fk_doc by doc_type from list of bank ids for '" . $doc_type . "'", LOG_DEBUG); $resql = $this->db->query($sql); @@ -726,11 +726,11 @@ class Lettering extends BookKeeping $bank_ids = array(); // Get all fk_doc by doc_type from bank ids - $sql = "SELECT DISTINCT p." . $doc_type_info['payment_table_fk_bank'] . " AS fk_doc"; - $sql .= " FROM " . MAIN_DB_PREFIX . $doc_type_info['payment_table'] . " AS p"; - $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . $doc_type_info['doc_payment_table'] . " AS dp ON dp." . $doc_type_info['doc_payment_table_fk_payment'] . " = p.rowid"; - $sql .= " WHERE dp." . $doc_type_info['doc_payment_table_fk_doc'] . " IN (" . $this->db->sanitize(implode(',', $document_ids)) . ")"; - $sql .= " AND p." . $doc_type_info['payment_table_fk_bank'] . " > 0"; + $sql = "SELECT DISTINCT p." . $this->db->sanitize($doc_type_info['payment_table_fk_bank']) . " AS fk_doc"; + $sql .= " FROM " . MAIN_DB_PREFIX . $this->db->sanitize($doc_type_info['payment_table']) . " AS p"; + $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . $this->db->sanitize($doc_type_info['doc_payment_table']) . " AS dp ON dp." . $this->db->sanitize($doc_type_info['doc_payment_table_fk_payment']) . " = p.rowid"; + $sql .= " WHERE dp." . $this->db->sanitize($doc_type_info['doc_payment_table_fk_doc']) . " IN (" . $this->db->sanitize(implode(',', $document_ids)) . ")"; + $sql .= " AND p." . $this->db->sanitize($doc_type_info['payment_table_fk_bank']) . " > 0"; dol_syslog(__METHOD__ . " - Get all bank ids from list of document ids of a type '" . $doc_type . "'", LOG_DEBUG); $resql = $this->db->query($sql); @@ -781,10 +781,10 @@ class Lettering extends BookKeeping $link_by_element = array(); $element_by_link = array(); foreach ($doc_type_info['linked_info'] as $linked_info) { - $sql = "SELECT DISTINCT tl2." . $linked_info['fk_link'] . " AS fk_link, tl2." . $linked_info['fk_doc'] . " AS fk_doc"; - $sql .= " FROM " . MAIN_DB_PREFIX . $linked_info['table'] . " AS tl"; - $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . $linked_info['table'] . " AS tl2 ON tl2." . $linked_info['fk_link'] . " = tl." . $linked_info['fk_link']; - $sql .= " WHERE tl." . $linked_info['fk_doc'] . " IN (" . $this->db->sanitize(implode(',', $document_ids)) . ")"; + $sql = "SELECT DISTINCT tl2." . $this->db->sanitize($linked_info['fk_link']) . " AS fk_link, tl2." . $this->db->sanitize($linked_info['fk_doc']) . " AS fk_doc"; + $sql .= " FROM " . MAIN_DB_PREFIX . $this->db->sanitize($linked_info['table']) . " AS tl"; + $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . $this->db->sanitize($linked_info['table']) . " AS tl2 ON tl2." . $this->db->sanitize($linked_info['fk_link']) . " = tl." . $this->db->sanitize($linked_info['fk_link']); + $sql .= " WHERE tl." . $this->db->sanitize($linked_info['fk_doc']) . " IN (" . $this->db->sanitize(implode(',', $document_ids)) . ")"; dol_syslog(__METHOD__ . " - Get document lines", LOG_DEBUG); $resql = $this->db->query($sql); diff --git a/htdocs/accountancy/closure/index.php b/htdocs/accountancy/closure/index.php index 772d1672542..378c5a18778 100644 --- a/htdocs/accountancy/closure/index.php +++ b/htdocs/accountancy/closure/index.php @@ -34,9 +34,9 @@ $langs->loadLangs(array("compta", "bills", "other", "accountancy")); $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm', 'aZ09'); -$fiscal_period_id = GETPOST('fiscal_period_id', 'int'); -$validatemonth = GETPOST('validatemonth', 'int'); -$validateyear = GETPOST('validateyear', 'int'); +$fiscal_period_id = GETPOSTINT('fiscal_period_id'); +$validatemonth = GETPOSTINT('validatemonth'); +$validateyear = GETPOSTINT('validateyear'); // Security check if (!isModEnabled('accounting')) { @@ -104,8 +104,8 @@ if ($reshook < 0) { if (empty($reshook)) { if (isset($current_fiscal_period) && $user->hasRight('accounting', 'fiscalyear', 'write')) { if ($action == 'confirm_step_1' && $confirm == "yes") { - $date_start = dol_mktime(0, 0, 0, GETPOST('date_startmonth', 'int'), GETPOST('date_startday', 'int'), GETPOST('date_startyear', 'int')); - $date_end = dol_mktime(23, 59, 59, GETPOST('date_endmonth', 'int'), GETPOST('date_endday', 'int'), GETPOST('date_endyear', 'int')); + $date_start = dol_mktime(0, 0, 0, GETPOSTINT('date_startmonth'), GETPOSTINT('date_startday'), GETPOSTINT('date_startyear')); + $date_end = dol_mktime(23, 59, 59, GETPOSTINT('date_endmonth'), GETPOSTINT('date_endday'), GETPOSTINT('date_endyear')); $result = $object->validateMovementForFiscalPeriod($date_start, $date_end); if ($result > 0) { @@ -119,7 +119,7 @@ if (empty($reshook)) { $action = ''; } } elseif ($action == 'confirm_step_2' && $confirm == "yes") { - $new_fiscal_period_id = GETPOST('new_fiscal_period_id', 'int'); + $new_fiscal_period_id = GETPOSTINT('new_fiscal_period_id'); $separate_auxiliary_account = GETPOST('separate_auxiliary_account', 'aZ09'); $generate_bookkeeping_records = GETPOST('generate_bookkeeping_records', 'aZ09'); @@ -133,10 +133,10 @@ if (empty($reshook)) { exit; } } elseif ($action == 'confirm_step_3' && $confirm == "yes") { - $inventory_journal_id = GETPOST('inventory_journal_id', 'int'); - $new_fiscal_period_id = GETPOST('new_fiscal_period_id', 'int'); - $date_start = dol_mktime(0, 0, 0, GETPOST('date_startmonth', 'int'), GETPOST('date_startday', 'int'), GETPOST('date_startyear', 'int')); - $date_end = dol_mktime(23, 59, 59, GETPOST('date_endmonth', 'int'), GETPOST('date_endday', 'int'), GETPOST('date_endyear', 'int')); + $inventory_journal_id = GETPOSTINT('inventory_journal_id'); + $new_fiscal_period_id = GETPOSTINT('new_fiscal_period_id'); + $date_start = dol_mktime(0, 0, 0, GETPOSTINT('date_startmonth'), GETPOSTINT('date_startday'), GETPOSTINT('date_startyear')); + $date_end = dol_mktime(23, 59, 59, GETPOSTINT('date_endmonth'), GETPOSTINT('date_endday'), GETPOSTINT('date_endyear')); $result = $object->insertAccountingReversal($current_fiscal_period['id'], $inventory_journal_id, $new_fiscal_period_id, $date_start, $date_end); if ($result < 0) { @@ -161,7 +161,7 @@ $formaccounting = new FormAccounting($db); $title = $langs->trans('Closure'); -$help_url ='EN:Module_Double_Entry_Accounting|FR:Module_Comptabilité_en_Partie_Double#Cl.C3.B4ture_annuelle'; +$help_url = 'EN:Module_Double_Entry_Accounting|FR:Module_Comptabilité_en_Partie_Double#Cl.C3.B4ture_annuelle'; llxHeader('', $title, $help_url); @@ -309,7 +309,7 @@ if (isset($current_fiscal_period)) { $head[0][0] = DOL_URL_ROOT . '/accountancy/closure/index.php?fiscal_period_id=' . $current_fiscal_period['id']; $head[0][1] = $langs->trans("AccountancyClosureStep1"); $head[0][2] = 'step1'; - print dol_get_fiche_head($head, 'step1', '', -1, 'title_accountancy'); + print dol_get_fiche_head($head, 'step1', '', -1, ''); print '' . $langs->trans("AccountancyClosureStep1Desc") . '
'; @@ -334,7 +334,7 @@ if (isset($current_fiscal_period)) { print '' . $langs->trans("Year") . ''; } for ($i = 1; $i <= 12; $i++) { - print '' . $langs->trans('MonthShort' . str_pad($i, 2, '0', STR_PAD_LEFT)) . ''; + print '' . $langs->trans('MonthShort' . str_pad((string) $i, 2, '0', STR_PAD_LEFT)) . ''; } print '' . $langs->trans("Total") . ''; print ''; @@ -355,12 +355,14 @@ if (isset($current_fiscal_period)) { print "\n"; print '
'; + print '
'; + // Step 2 $head = array(); $head[0][0] = DOL_URL_ROOT . '/accountancy/closure/index.php?fiscal_period_id=' . $current_fiscal_period['id']; $head[0][1] = $langs->trans("AccountancyClosureStep2"); $head[0][2] = 'step2'; - print dol_get_fiche_head($head, 'step2', '', -1, 'title_accountancy'); + print dol_get_fiche_head($head, 'step2', '', -1, ''); // print '' . $langs->trans("AccountancyClosureStep2Desc") . '
'; @@ -371,12 +373,14 @@ if (isset($current_fiscal_period)) { } print_barre_liste('', '', '', '', '', '', '', -1, '', '', 0, $button, '', 0, 1, 0); + print '
'; + // Step 3 $head = array(); $head[0][0] = DOL_URL_ROOT . '/accountancy/closure/index.php?fiscal_period_id=' . $current_fiscal_period['id']; $head[0][1] = $langs->trans("AccountancyClosureStep3"); $head[0][2] = 'step3'; - print dol_get_fiche_head($head, 'step3', '', -1, 'title_accountancy'); + print dol_get_fiche_head($head, 'step3', '', -1, ''); // print '' . $langs->trans("AccountancyClosureStep3Desc") . '
'; diff --git a/htdocs/accountancy/customer/card.php b/htdocs/accountancy/customer/card.php index 3102b023015..b2731d981c5 100644 --- a/htdocs/accountancy/customer/card.php +++ b/htdocs/accountancy/customer/card.php @@ -34,8 +34,8 @@ $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'alpha'); $backtopage = GETPOST('backtopage', 'alpha'); -$codeventil = GETPOST('codeventil', 'int'); -$id = GETPOST('id', 'int'); +$codeventil = GETPOSTINT('codeventil'); +$id = GETPOSTINT('id'); // Security check if (!isModEnabled('accounting')) { diff --git a/htdocs/accountancy/customer/index.php b/htdocs/accountancy/customer/index.php index 018f222daf8..ed0e1b771d7 100644 --- a/htdocs/accountancy/customer/index.php +++ b/htdocs/accountancy/customer/index.php @@ -37,8 +37,8 @@ require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountingaccount.class.php'; // Load translation files required by the page $langs->loadLangs(array("compta", "bills", "other", "accountancy")); -$validatemonth = GETPOST('validatemonth', 'int'); -$validateyear = GETPOST('validateyear', 'int'); +$validatemonth = GETPOSTINT('validatemonth'); +$validateyear = GETPOSTINT('validateyear'); // Security check if (!isModEnabled('accounting')) { @@ -54,8 +54,8 @@ if (!$user->hasRight('accounting', 'bind', 'write')) { $accountingAccount = new AccountingAccount($db); $month_start = getDolGlobalInt('SOCIETE_FISCAL_MONTH_START', 1); -if (GETPOST("year", 'int')) { - $year_start = GETPOST("year", 'int'); +if (GETPOSTINT("year")) { + $year_start = GETPOSTINT("year"); } else { $year_start = dol_print_date(dol_now(), '%Y'); if (dol_print_date(dol_now(), '%m') < $month_start) { @@ -157,10 +157,10 @@ if ($action == 'validatehistory') { } $alias_societe_perentity = !getDolGlobalString('MAIN_COMPANY_PERENTITY_SHARED') ? "s" : "spe"; $alias_product_perentity = !getDolGlobalString('MAIN_PRODUCT_PERENTITY_SHARED') ? "p" : "ppe"; - $sql .= " LEFT JOIN ".$db->prefix()."accounting_account as aa ON " . $alias_product_perentity . ".accountancy_code_sell = aa.account_number AND aa.active = 1 AND aa.fk_pcg_version = '".$db->escape($chartaccountcode)."' AND aa.entity = ".$conf->entity; - $sql .= " LEFT JOIN ".$db->prefix()."accounting_account as aa2 ON " . $alias_product_perentity . ".accountancy_code_sell_intra = aa2.account_number AND aa2.active = 1 AND aa2.fk_pcg_version = '".$db->escape($chartaccountcode)."' AND aa2.entity = ".$conf->entity; - $sql .= " LEFT JOIN ".$db->prefix()."accounting_account as aa3 ON " . $alias_product_perentity . ".accountancy_code_sell_export = aa3.account_number AND aa3.active = 1 AND aa3.fk_pcg_version = '".$db->escape($chartaccountcode)."' AND aa3.entity = ".$conf->entity; - $sql .= " LEFT JOIN ".$db->prefix()."accounting_account as aa4 ON " . $alias_societe_perentity . ".accountancy_code_sell = aa4.account_number AND aa4.active = 1 AND aa4.fk_pcg_version = '".$db->escape($chartaccountcode)."' AND aa4.entity = ".$conf->entity; + $sql .= " LEFT JOIN ".$db->prefix()."accounting_account as aa ON ".$db->sanitize($alias_product_perentity).".accountancy_code_sell = aa.account_number AND aa.active = 1 AND aa.fk_pcg_version = '".$db->escape($chartaccountcode)."' AND aa.entity = ".$conf->entity; + $sql .= " LEFT JOIN ".$db->prefix()."accounting_account as aa2 ON ".$db->sanitize($alias_product_perentity).".accountancy_code_sell_intra = aa2.account_number AND aa2.active = 1 AND aa2.fk_pcg_version = '".$db->escape($chartaccountcode)."' AND aa2.entity = ".$conf->entity; + $sql .= " LEFT JOIN ".$db->prefix()."accounting_account as aa3 ON ".$db->sanitize($alias_product_perentity).".accountancy_code_sell_export = aa3.account_number AND aa3.active = 1 AND aa3.fk_pcg_version = '".$db->escape($chartaccountcode)."' AND aa3.entity = ".$conf->entity; + $sql .= " LEFT JOIN ".$db->prefix()."accounting_account as aa4 ON ".$db->sanitize($alias_societe_perentity).".accountancy_code_sell = aa4.account_number AND aa4.active = 1 AND aa4.fk_pcg_version = '".$db->escape($chartaccountcode)."' AND aa4.entity = ".$conf->entity; $sql .= " WHERE f.fk_statut > 0 AND l.fk_code_ventilation <= 0"; $sql .= " AND l.product_type <= 2"; $sql .= " AND f.entity IN (".getEntity('invoice', 0).")"; // We don't share object for accountancy @@ -234,17 +234,17 @@ if ($action == 'validatehistory') { $facture_static_det->desc = $objp->description; $accountingAccountArray = array( - 'dom'=>$objp->aarowid, - 'intra'=>$objp->aarowid_intra, - 'export'=>$objp->aarowid_export, - 'thirdparty' =>$objp->aarowid_thirdparty); + 'dom' => $objp->aarowid, + 'intra' => $objp->aarowid_intra, + 'export' => $objp->aarowid_export, + 'thirdparty' => $objp->aarowid_thirdparty); $code_sell_p_notset = ''; $code_sell_t_notset = ''; $suggestedid = 0; - $return=$accountingAccount->getAccountingCodeToBind($thirdpartystatic, $mysoc, $product_static, $facture_static, $facture_static_det, $accountingAccountArray, 'customer'); + $return = $accountingAccount->getAccountingCodeToBind($thirdpartystatic, $mysoc, $product_static, $facture_static, $facture_static_det, $accountingAccountArray, 'customer'); if (!is_array($return) && $return < 0) { setEventMessage($accountingAccount->error, 'errors'); } else { @@ -299,7 +299,7 @@ if ($action == 'validatehistory') { /* * View */ -$help_url ='EN:Module_Double_Entry_Accounting|FR:Module_Comptabilité_en_Partie_Double#Liaisons_comptables'; +$help_url = 'EN:Module_Double_Entry_Accounting|FR:Module_Comptabilité_en_Partie_Double#Liaisons_comptables'; llxHeader('', $langs->trans("CustomersVentilation"), $help_url); @@ -347,7 +347,7 @@ for ($i = 1; $i <= 12; $i++) { $param .= '&search_date_endday='.$tmp['mday'].'&search_date_endmonth='.$tmp['mon'].'&search_date_endyear='.$tmp['year']; print ''; } - print $langs->trans('MonthShort'.str_pad($j, 2, '0', STR_PAD_LEFT)); + print $langs->trans('MonthShort'.str_pad((string) $j, 2, '0', STR_PAD_LEFT)); if (!empty($tmp['mday'])) { print ''; } @@ -362,7 +362,7 @@ for ($i = 1; $i <= 12; $i++) { if ($j > 12) { $j -= 12; } - $sql .= " SUM(".$db->ifsql("MONTH(f.datef)=".$j, "fd.total_ht", "0").") AS month".str_pad($j, 2, "0", STR_PAD_LEFT).","; + $sql .= " SUM(".$db->ifsql("MONTH(f.datef) = ".((string) $j), "fd.total_ht", "0").") AS month".str_pad((string) $j, 2, "0", STR_PAD_LEFT).","; } $sql .= " SUM(fd.total_ht) as total"; $sql .= " FROM ".MAIN_DB_PREFIX."facturedet as fd"; @@ -434,7 +434,7 @@ if ($resql) { // Add link to make binding if (!empty(price2num($row[$i]))) { print ''; - print img_picto($langs->trans("ValidateHistory").' ('.$langs->trans('Month'.str_pad($cursormonth, 2, '0', STR_PAD_LEFT)).' '.$cursoryear.')', 'link', 'class="marginleft2"'); + print img_picto($langs->trans("ValidateHistory").' ('.$langs->trans('Month'.str_pad((string) $cursormonth, 2, '0', STR_PAD_LEFT)).' '.$cursoryear.')', 'link', 'class="marginleft2"'); print ''; } print ''; @@ -484,7 +484,7 @@ for ($i = 1; $i <= 12; $i++) { $param .= '&search_date_endday='.$tmp['mday'].'&search_date_endmonth='.$tmp['mon'].'&search_date_endyear='.$tmp['year']; print ''; } - print $langs->trans('MonthShort'.str_pad($j, 2, '0', STR_PAD_LEFT)); + print $langs->trans('MonthShort'.str_pad((string) $j, 2, '0', STR_PAD_LEFT)); if (!empty($tmp['mday'])) { print ''; } @@ -499,7 +499,7 @@ for ($i = 1; $i <= 12; $i++) { if ($j > 12) { $j -= 12; } - $sql .= " SUM(".$db->ifsql("MONTH(f.datef)=".$j, "fd.total_ht", "0").") AS month".str_pad($j, 2, "0", STR_PAD_LEFT).","; + $sql .= " SUM(".$db->ifsql("MONTH(f.datef) = ".((int) $j), "fd.total_ht", "0").") AS month".str_pad((string) $j, 2, "0", STR_PAD_LEFT).","; } $sql .= " SUM(fd.total_ht) as total"; $sql .= " FROM ".MAIN_DB_PREFIX."facturedet as fd"; @@ -595,7 +595,7 @@ if (getDolGlobalString('SHOW_TOTAL_OF_PREVIOUS_LISTS_IN_LIN_PAGE')) { // This pa if ($j > 12) { $j -= 12; } - print ''.$langs->trans('MonthShort'.str_pad($j, 2, '0', STR_PAD_LEFT)).''; + print ''.$langs->trans('MonthShort'.str_pad((string) $j, 2, '0', STR_PAD_LEFT)).''; } print ''.$langs->trans("Total").''; @@ -605,7 +605,7 @@ if (getDolGlobalString('SHOW_TOTAL_OF_PREVIOUS_LISTS_IN_LIN_PAGE')) { // This pa if ($j > 12) { $j -= 12; } - $sql .= " SUM(".$db->ifsql("MONTH(f.datef)=".$j, "fd.total_ht", "0").") AS month".str_pad($j, 2, "0", STR_PAD_LEFT).","; + $sql .= " SUM(".$db->ifsql("MONTH(f.datef) = ".((int) $j), "fd.total_ht", "0").") AS month".str_pad((string) $j, 2, "0", STR_PAD_LEFT).","; } $sql .= " SUM(fd.total_ht) as total"; $sql .= " FROM ".MAIN_DB_PREFIX."facturedet as fd"; @@ -655,7 +655,7 @@ if (getDolGlobalString('SHOW_TOTAL_OF_PREVIOUS_LISTS_IN_LIN_PAGE')) { // This pa if ($j > 12) { $j -= 12; } - print ''.$langs->trans('MonthShort'.str_pad($j, 2, '0', STR_PAD_LEFT)).''; + print ''.$langs->trans('MonthShort'.str_pad((string) $j, 2, '0', STR_PAD_LEFT)).''; } print ''.$langs->trans("Total").''; @@ -668,19 +668,19 @@ if (getDolGlobalString('SHOW_TOTAL_OF_PREVIOUS_LISTS_IN_LIN_PAGE')) { // This pa $j -= 12; } $sql .= " SUM(".$db->ifsql( - "MONTH(f.datef)=".$j, + "MONTH(f.datef) = ".((int) $j), " (".$db->ifsql( - "fd.total_ht < 0", - " (-1 * (abs(fd.total_ht) - (fd.buy_price_ht * fd.qty * (fd.situation_percent / 100))))", // TODO This is bugged, we must use the percent for the invoice and fd.situation_percent is cumulated percent ! - " (fd.total_ht - (fd.buy_price_ht * fd.qty * (fd.situation_percent / 100)))" - ).")", + "fd.total_ht < 0", + " (-1 * (abs(fd.total_ht) - (fd.buy_price_ht * fd.qty * (fd.situation_percent / 100))))", // TODO This is bugged, we must use the percent for the invoice and fd.situation_percent is cumulated percent ! + " (fd.total_ht - (fd.buy_price_ht * fd.qty * (fd.situation_percent / 100)))" + ).")", 0 - ).") AS month".str_pad($j, 2, '0', STR_PAD_LEFT).","; + ).") AS month".str_pad((string) $j, 2, '0', STR_PAD_LEFT).","; } $sql .= " SUM(".$db->ifsql( "fd.total_ht < 0", " (-1 * (abs(fd.total_ht) - (fd.buy_price_ht * fd.qty * (fd.situation_percent / 100))))", // TODO This is bugged, we must use the percent for the invoice and fd.situation_percent is cumulated percent ! - " (fd.total_ht - (fd.buy_price_ht * fd.qty * (fd.situation_percent / 100)))" + " (fd.total_ht - (fd.buy_price_ht * fd.qty * (fd.situation_percent / 100)))" ).") as total"; } else { $sql = "SELECT '".$db->escape($langs->trans("Vide"))."' AS marge,"; @@ -690,14 +690,14 @@ if (getDolGlobalString('SHOW_TOTAL_OF_PREVIOUS_LISTS_IN_LIN_PAGE')) { // This pa $j -= 12; } $sql .= " SUM(".$db->ifsql( - "MONTH(f.datef)=".$j, + "MONTH(f.datef) = ".((int) $j), " (".$db->ifsql( "fd.total_ht < 0", " (-1 * (abs(fd.total_ht) - (fd.buy_price_ht * fd.qty)))", " (fd.total_ht - (fd.buy_price_ht * fd.qty))" ).")", 0 - ).") AS month".str_pad($j, 2, '0', STR_PAD_LEFT).","; + ).") AS month".str_pad((string) $j, 2, '0', STR_PAD_LEFT).","; } $sql .= " SUM(".$db->ifsql( "fd.total_ht < 0", diff --git a/htdocs/accountancy/customer/lines.php b/htdocs/accountancy/customer/lines.php index 2a08eb3986c..a47a54ae40c 100644 --- a/htdocs/accountancy/customer/lines.php +++ b/htdocs/accountancy/customer/lines.php @@ -45,7 +45,7 @@ $account_parent = GETPOST('account_parent'); $changeaccount = GETPOST('changeaccount'); // Search Getpost $search_societe = GETPOST('search_societe', 'alpha'); -$search_lineid = GETPOST('search_lineid', 'int'); +$search_lineid = GETPOSTINT('search_lineid'); $search_ref = GETPOST('search_ref', 'alpha'); $search_invoice = GETPOST('search_invoice', 'alpha'); $search_label = GETPOST('search_label', 'alpha'); @@ -53,22 +53,22 @@ $search_desc = GETPOST('search_desc', 'alpha'); $search_amount = GETPOST('search_amount', 'alpha'); $search_account = GETPOST('search_account', 'alpha'); $search_vat = GETPOST('search_vat', 'alpha'); -$search_date_startday = GETPOST('search_date_startday', 'int'); -$search_date_startmonth = GETPOST('search_date_startmonth', 'int'); -$search_date_startyear = GETPOST('search_date_startyear', 'int'); -$search_date_endday = GETPOST('search_date_endday', 'int'); -$search_date_endmonth = GETPOST('search_date_endmonth', 'int'); -$search_date_endyear = GETPOST('search_date_endyear', 'int'); +$search_date_startday = GETPOSTINT('search_date_startday'); +$search_date_startmonth = GETPOSTINT('search_date_startmonth'); +$search_date_startyear = GETPOSTINT('search_date_startyear'); +$search_date_endday = GETPOSTINT('search_date_endday'); +$search_date_endmonth = GETPOSTINT('search_date_endmonth'); +$search_date_endyear = GETPOSTINT('search_date_endyear'); $search_date_start = dol_mktime(0, 0, 0, $search_date_startmonth, $search_date_startday, $search_date_startyear); // Use tzserver $search_date_end = dol_mktime(23, 59, 59, $search_date_endmonth, $search_date_endday, $search_date_endyear); $search_country = GETPOST('search_country', 'alpha'); $search_tvaintra = GETPOST('search_tvaintra', 'alpha'); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : getDolGlobalString('ACCOUNTING_LIMIT_LIST_VENTILATION', $conf->liste_limit); +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : getDolGlobalString('ACCOUNTING_LIMIT_LIST_VENTILATION', $conf->liste_limit); $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0) { $page = 0; } @@ -131,7 +131,7 @@ if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x' if (is_array($changeaccount) && count($changeaccount) > 0 && $user->hasRight('accounting', 'bind', 'write')) { $error = 0; - if (!(GETPOST('account_parent', 'int') >= 0)) { + if (!(GETPOSTINT('account_parent') >= 0)) { $error++; setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Account")), null, 'errors'); } @@ -140,7 +140,7 @@ if (is_array($changeaccount) && count($changeaccount) > 0 && $user->hasRight('ac $db->begin(); $sql1 = "UPDATE ".MAIN_DB_PREFIX."facturedet"; - $sql1 .= " SET fk_code_ventilation=".(GETPOST('account_parent', 'int') > 0 ? GETPOST('account_parent', 'int') : '0'); + $sql1 .= " SET fk_code_ventilation = ".(GETPOSTINT('account_parent') > 0 ? GETPOSTINT('account_parent') : 0); $sql1 .= ' WHERE rowid IN ('.$db->sanitize(implode(',', $changeaccount)).')'; dol_syslog('accountancy/customer/lines.php::changeaccount sql= '.$sql1); @@ -175,7 +175,7 @@ if (GETPOST('sortfield') == 'f.datef, f.ref, fd.rowid') { $form = new Form($db); $formother = new FormOther($db); -$help_url ='EN:Module_Double_Entry_Accounting|FR:Module_Comptabilité_en_Partie_Double#Liaisons_comptables'; +$help_url = 'EN:Module_Double_Entry_Accounting|FR:Module_Comptabilité_en_Partie_Double#Liaisons_comptables'; llxHeader('', $langs->trans("CustomersVentilation").' - '.$langs->trans("Dispatched"), $help_url); @@ -351,22 +351,22 @@ if ($result) { $param .= "&search_vat=".urlencode($search_vat); } if ($search_date_startday) { - $param .= '&search_date_startday='.urlencode($search_date_startday); + $param .= '&search_date_startday='.urlencode((string) ($search_date_startday)); } if ($search_date_startmonth) { - $param .= '&search_date_startmonth='.urlencode($search_date_startmonth); + $param .= '&search_date_startmonth='.urlencode((string) ($search_date_startmonth)); } if ($search_date_startyear) { - $param .= '&search_date_startyear='.urlencode($search_date_startyear); + $param .= '&search_date_startyear='.urlencode((string) ($search_date_startyear)); } if ($search_date_endday) { - $param .= '&search_date_endday='.urlencode($search_date_endday); + $param .= '&search_date_endday='.urlencode((string) ($search_date_endday)); } if ($search_date_endmonth) { - $param .= '&search_date_endmonth='.urlencode($search_date_endmonth); + $param .= '&search_date_endmonth='.urlencode((string) ($search_date_endmonth)); } if ($search_date_endyear) { - $param .= '&search_date_endyear='.urlencode($search_date_endyear); + $param .= '&search_date_endyear='.urlencode((string) ($search_date_endyear)); } if ($search_country) { $param .= "&search_country=".urlencode($search_country); @@ -386,6 +386,7 @@ if ($result) { print ''; print ''; + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder print_barre_liste($langs->trans("InvoiceLinesDone"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $num_lines, $nbtotalofrecords, 'title_accountancy', 0, '', '', $limit); print ''.$langs->trans("DescVentilDoneCustomer").'
'; diff --git a/htdocs/accountancy/customer/list.php b/htdocs/accountancy/customer/list.php index b34f29eef8f..84128d37f94 100644 --- a/htdocs/accountancy/customer/list.php +++ b/htdocs/accountancy/customer/list.php @@ -48,14 +48,14 @@ $toselect = GETPOST('toselect', 'array'); $contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'accountancycustomerlist'; // To manage different context of search $optioncss = GETPOST('optioncss', 'alpha'); -$default_account = GETPOST('default_account', 'int'); +$default_account = GETPOSTINT('default_account'); // Select Box $mesCasesCochees = GETPOST('toselect', 'array'); // Search Getpost $search_societe = GETPOST('search_societe', 'alpha'); -$search_lineid = GETPOST('search_lineid', 'int'); +$search_lineid = GETPOSTINT('search_lineid'); $search_ref = GETPOST('search_ref', 'alpha'); $search_invoice = GETPOST('search_invoice', 'alpha'); $search_label = GETPOST('search_label', 'alpha'); @@ -63,12 +63,12 @@ $search_desc = GETPOST('search_desc', 'alpha'); $search_amount = GETPOST('search_amount', 'alpha'); $search_account = GETPOST('search_account', 'alpha'); $search_vat = GETPOST('search_vat', 'alpha'); -$search_date_startday = GETPOST('search_date_startday', 'int'); -$search_date_startmonth = GETPOST('search_date_startmonth', 'int'); -$search_date_startyear = GETPOST('search_date_startyear', 'int'); -$search_date_endday = GETPOST('search_date_endday', 'int'); -$search_date_endmonth = GETPOST('search_date_endmonth', 'int'); -$search_date_endyear = GETPOST('search_date_endyear', 'int'); +$search_date_startday = GETPOSTINT('search_date_startday'); +$search_date_startmonth = GETPOSTINT('search_date_startmonth'); +$search_date_startyear = GETPOSTINT('search_date_startyear'); +$search_date_endday = GETPOSTINT('search_date_endday'); +$search_date_endmonth = GETPOSTINT('search_date_endmonth'); +$search_date_endyear = GETPOSTINT('search_date_endyear'); $search_date_start = dol_mktime(0, 0, 0, $search_date_startmonth, $search_date_startday, $search_date_startyear); // Use tzserver $search_date_end = dol_mktime(23, 59, 59, $search_date_endmonth, $search_date_endday, $search_date_endyear); $search_country = GETPOST('search_country', 'alpha'); @@ -80,10 +80,10 @@ if (empty($search_date_start) && getDolGlobalString('ACCOUNTING_DATE_START_BINDI } // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : getDolGlobalString('ACCOUNTING_LIMIT_LIST_VENTILATION', $conf->liste_limit); +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : getDolGlobalString('ACCOUNTING_LIMIT_LIST_VENTILATION', $conf->liste_limit); $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0) { $page = 0; } @@ -230,7 +230,7 @@ if (GETPOST('sortfield') == 'f.datef, f.ref, l.rowid') { $form = new Form($db); $formother = new FormOther($db); -$help_url ='EN:Module_Double_Entry_Accounting|FR:Module_Comptabilité_en_Partie_Double#Liaisons_comptables'; +$help_url = 'EN:Module_Double_Entry_Accounting|FR:Module_Comptabilité_en_Partie_Double#Liaisons_comptables'; llxHeader('', $langs->trans("CustomersVentilation"), $help_url); @@ -399,25 +399,25 @@ if ($result) { $param .= '&search_societe='.urlencode($search_societe); } if ($search_lineid) { - $param .= '&search_lineid='.urlencode($search_lineid); + $param .= '&search_lineid='.urlencode((string) ($search_lineid)); } if ($search_date_startday) { - $param .= '&search_date_startday='.urlencode($search_date_startday); + $param .= '&search_date_startday='.urlencode((string) ($search_date_startday)); } if ($search_date_startmonth) { - $param .= '&search_date_startmonth='.urlencode($search_date_startmonth); + $param .= '&search_date_startmonth='.urlencode((string) ($search_date_startmonth)); } if ($search_date_startyear) { - $param .= '&search_date_startyear='.urlencode($search_date_startyear); + $param .= '&search_date_startyear='.urlencode((string) ($search_date_startyear)); } if ($search_date_endday) { - $param .= '&search_date_endday='.urlencode($search_date_endday); + $param .= '&search_date_endday='.urlencode((string) ($search_date_endday)); } if ($search_date_endmonth) { - $param .= '&search_date_endmonth='.urlencode($search_date_endmonth); + $param .= '&search_date_endmonth='.urlencode((string) ($search_date_endmonth)); } if ($search_date_endyear) { - $param .= '&search_date_endyear='.urlencode($search_date_endyear); + $param .= '&search_date_endyear='.urlencode((string) ($search_date_endyear)); } if ($search_invoice) { $param .= '&search_invoice='.urlencode($search_invoice); @@ -445,8 +445,8 @@ if ($result) { } $arrayofmassactions = array( - 'ventil'=>img_picto('', 'check', 'class="pictofixedwidth"').$langs->trans("Ventilate") - ,'set_default_account'=>img_picto('', 'check', 'class="pictofixedwidth"').$langs->trans("ConfirmPreselectAccount") + 'ventil' => img_picto('', 'check', 'class="pictofixedwidth"').$langs->trans("Ventilate") + ,'set_default_account' => img_picto('', 'check', 'class="pictofixedwidth"').$langs->trans("ConfirmPreselectAccount") //'presend'=>img_picto('', 'email', 'class="pictofixedwidth"').$langs->trans("SendByMail"), //'builddoc'=>img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("PDFMerge"), ); @@ -467,10 +467,12 @@ if ($result) { print ''; print ''; + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder print_barre_liste($langs->trans("InvoiceLines"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num_lines, $nbtotalofrecords, 'title_accountancy', 0, '', '', $limit); if ($massaction == 'set_default_account') { - $formquestion[]=array('type' => 'other', + $formquestion = array(); + $formquestion[] = array('type' => 'other', 'name' => 'set_default_account', 'label' => $langs->trans("AccountancyCode"), 'value' => $formaccounting->select_account('', 'default_account', 1, array(), 0, 0, 'maxwidth200 maxwidthonsmartphone', 'cachewithshowemptyone')); @@ -599,26 +601,26 @@ if ($result) { $facture_static_det->desc = $objp->description; $accountingAccountArray = array( - 'dom'=>$objp->aarowid, - 'intra'=>$objp->aarowid_intra, - 'export'=>$objp->aarowid_export, - 'thirdparty' =>$objp->aarowid_thirdparty); + 'dom' => $objp->aarowid, + 'intra' => $objp->aarowid_intra, + 'export' => $objp->aarowid_export, + 'thirdparty' => $objp->aarowid_thirdparty); $code_sell_p_notset = ''; $code_sell_t_notset = ''; $suggestedid = 0; - $return=$accountingAccount->getAccountingCodeToBind($thirdpartystatic, $mysoc, $product_static, $facture_static, $facture_static_det, $accountingAccountArray, 'customer'); - if (!is_array($return) && $return<0) { + $return = $accountingAccount->getAccountingCodeToBind($thirdpartystatic, $mysoc, $product_static, $facture_static, $facture_static_det, $accountingAccountArray, 'customer'); + if (!is_array($return) && $return < 0) { setEventMessage($accountingAccount->error, 'errors'); } else { - $suggestedid=$return['suggestedid']; - $suggestedaccountingaccountfor=$return['suggestedaccountingaccountfor']; - $suggestedaccountingaccountbydefaultfor=$return['suggestedaccountingaccountbydefaultfor']; - $code_sell_l=$return['code_l']; - $code_sell_p=$return['code_p']; - $code_sell_t=$return['code_t']; + $suggestedid = $return['suggestedid']; + $suggestedaccountingaccountfor = $return['suggestedaccountingaccountfor']; + $suggestedaccountingaccountbydefaultfor = $return['suggestedaccountingaccountbydefaultfor']; + $code_sell_l = $return['code_l']; + $code_sell_p = $return['code_p']; + $code_sell_t = $return['code_t']; } //var_dump($return); @@ -780,7 +782,7 @@ if ($result) { if (!empty($toselect)) { $ischecked = 0; if (in_array($objp->rowid."_".$i, $toselect)) { - $ischecked=1; + $ischecked = 1; } } diff --git a/htdocs/accountancy/expensereport/card.php b/htdocs/accountancy/expensereport/card.php index 6d2bd442bf8..056dbb3d74e 100644 --- a/htdocs/accountancy/expensereport/card.php +++ b/htdocs/accountancy/expensereport/card.php @@ -38,8 +38,8 @@ $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'alpha'); $backtopage = GETPOST('backtopage', 'alpha'); -$codeventil = GETPOST('codeventil', 'int'); -$id = GETPOST('id', 'int'); +$codeventil = GETPOSTINT('codeventil'); +$id = GETPOSTINT('id'); // Security check if (!isModEnabled('accounting')) { diff --git a/htdocs/accountancy/expensereport/index.php b/htdocs/accountancy/expensereport/index.php index 703417bb1f5..afe6465562f 100644 --- a/htdocs/accountancy/expensereport/index.php +++ b/htdocs/accountancy/expensereport/index.php @@ -33,12 +33,12 @@ require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php'; // Load translation files required by the page $langs->loadLangs(array("compta", "bills", "other", "accountancy")); -$validatemonth = GETPOST('validatemonth', 'int'); -$validateyear = GETPOST('validateyear', 'int'); +$validatemonth = GETPOSTINT('validatemonth'); +$validateyear = GETPOSTINT('validateyear'); $month_start = getDolGlobalInt('SOCIETE_FISCAL_MONTH_START', 1); -if (GETPOST("year", 'int')) { - $year_start = GETPOST("year", 'int'); +if (GETPOSTINT("year")) { + $year_start = GETPOSTINT("year"); } else { $year_start = dol_print_date(dol_now(), '%Y'); if (dol_print_date(dol_now(), '%m') < $month_start) { @@ -177,7 +177,7 @@ if ($action == 'validatehistory') { /* * View */ -$help_url ='EN:Module_Double_Entry_Accounting|FR:Module_Comptabilité_en_Partie_Double#Liaisons_comptables'; +$help_url = 'EN:Module_Double_Entry_Accounting|FR:Module_Comptabilité_en_Partie_Double#Liaisons_comptables'; llxHeader('', $langs->trans("ExpenseReportsVentilation"), $help_url); @@ -223,7 +223,7 @@ for ($i = 1; $i <= 12; $i++) { $param .= '&search_month='.$tmp['mon'].'&search_year='.$tmp['year']; print ''; } - print $langs->trans('MonthShort'.str_pad($j, 2, '0', STR_PAD_LEFT)); + print $langs->trans('MonthShort'.str_pad((string) $j, 2, '0', STR_PAD_LEFT)); if (!empty($tmp['mday'])) { print ''; } @@ -238,7 +238,7 @@ for ($i = 1; $i <= 12; $i++) { if ($j > 12) { $j -= 12; } - $sql .= " SUM(".$db->ifsql("MONTH(er.date_debut)=".$j, "erd.total_ht", "0").") AS month".str_pad($j, 2, "0", STR_PAD_LEFT).","; + $sql .= " SUM(".$db->ifsql("MONTH(er.date_debut) = ".((int) $j), "erd.total_ht", "0").") AS month".str_pad((string) $j, 2, "0", STR_PAD_LEFT).","; } $sql .= " SUM(erd.total_ht) as total"; $sql .= " FROM ".MAIN_DB_PREFIX."expensereport_det as erd"; @@ -300,7 +300,7 @@ if ($resql) { // Add link to make binding if (!empty(price2num($row[$i]))) { print ''; - print img_picto($langs->trans("ValidateHistory").' ('.$langs->trans('Month'.str_pad($cursormonth, 2, '0', STR_PAD_LEFT)).' '.$cursoryear.')', 'link', 'class="marginleft2"'); + print img_picto($langs->trans("ValidateHistory").' ('.$langs->trans('Month'.str_pad((string) $cursormonth, 2, '0', STR_PAD_LEFT)).' '.$cursoryear.')', 'link', 'class="marginleft2"'); print ''; } print ''; @@ -338,7 +338,7 @@ for ($i = 1; $i <= 12; $i++) { if ($j > 12) { $j -= 12; } - print ''.$langs->trans('MonthShort'.str_pad($j, 2, '0', STR_PAD_LEFT)).''; + print ''.$langs->trans('MonthShort'.str_pad((string) $j, 2, '0', STR_PAD_LEFT)).''; } print ''.$langs->trans("Total").''; @@ -349,7 +349,7 @@ for ($i = 1; $i <= 12; $i++) { if ($j > 12) { $j -= 12; } - $sql .= " SUM(".$db->ifsql("MONTH(er.date_debut)=".$j, "erd.total_ht", "0").") AS month".str_pad($j, 2, "0", STR_PAD_LEFT).","; + $sql .= " SUM(".$db->ifsql("MONTH(er.date_debut) = ".((int) $j), "erd.total_ht", "0").") AS month".str_pad((string) $j, 2, "0", STR_PAD_LEFT).","; } $sql .= " ROUND(SUM(erd.total_ht),2) as total"; $sql .= " FROM ".MAIN_DB_PREFIX."expensereport_det as erd"; @@ -426,7 +426,7 @@ if (getDolGlobalString('SHOW_TOTAL_OF_PREVIOUS_LISTS_IN_LIN_PAGE')) { // This pa if ($j > 12) { $j -= 12; } - print ''.$langs->trans('MonthShort'.str_pad($j, 2, '0', STR_PAD_LEFT)).''; + print ''.$langs->trans('MonthShort'.str_pad((string) $j, 2, '0', STR_PAD_LEFT)).''; } print ''.$langs->trans("Total").''; @@ -436,7 +436,7 @@ if (getDolGlobalString('SHOW_TOTAL_OF_PREVIOUS_LISTS_IN_LIN_PAGE')) { // This pa if ($j > 12) { $j -= 12; } - $sql .= " SUM(".$db->ifsql("MONTH(er.date_create)=".$j, "erd.total_ht", "0").") AS month".str_pad($j, 2, "0", STR_PAD_LEFT).","; + $sql .= " SUM(".$db->ifsql("MONTH(er.date_create) = ".((int) $j), "erd.total_ht", "0").") AS month".str_pad((string) $j, 2, "0", STR_PAD_LEFT).","; } $sql .= " SUM(erd.total_ht) as total"; $sql .= " FROM ".MAIN_DB_PREFIX."expensereport_det as erd"; diff --git a/htdocs/accountancy/expensereport/lines.php b/htdocs/accountancy/expensereport/lines.php index 8d170a557b1..60f08f4992d 100644 --- a/htdocs/accountancy/expensereport/lines.php +++ b/htdocs/accountancy/expensereport/lines.php @@ -39,7 +39,7 @@ $langs->loadLangs(array("compta", "bills", "other", "accountancy", "trips", "pro $optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print') -$account_parent = GETPOST('account_parent', 'int'); +$account_parent = GETPOSTINT('account_parent'); $changeaccount = GETPOST('changeaccount'); // Search Getpost $search_login = GETPOST('search_login', 'alpha'); @@ -49,20 +49,20 @@ $search_desc = GETPOST('search_desc', 'alpha'); $search_amount = GETPOST('search_amount', 'alpha'); $search_account = GETPOST('search_account', 'alpha'); $search_vat = GETPOST('search_vat', 'alpha'); -$search_date_startday = GETPOST('search_date_startday', 'int'); -$search_date_startmonth = GETPOST('search_date_startmonth', 'int'); -$search_date_startyear = GETPOST('search_date_startyear', 'int'); -$search_date_endday = GETPOST('search_date_endday', 'int'); -$search_date_endmonth = GETPOST('search_date_endmonth', 'int'); -$search_date_endyear = GETPOST('search_date_endyear', 'int'); +$search_date_startday = GETPOSTINT('search_date_startday'); +$search_date_startmonth = GETPOSTINT('search_date_startmonth'); +$search_date_startyear = GETPOSTINT('search_date_startyear'); +$search_date_endday = GETPOSTINT('search_date_endday'); +$search_date_endmonth = GETPOSTINT('search_date_endmonth'); +$search_date_endyear = GETPOSTINT('search_date_endyear'); $search_date_start = dol_mktime(0, 0, 0, $search_date_startmonth, $search_date_startday, $search_date_startyear); // Use tzserver $search_date_end = dol_mktime(23, 59, 59, $search_date_endmonth, $search_date_endday, $search_date_endyear); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : getDolGlobalString('ACCOUNTING_LIMIT_LIST_VENTILATION', $conf->liste_limit); +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : getDolGlobalString('ACCOUNTING_LIMIT_LIST_VENTILATION', $conf->liste_limit); $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0) { $page = 0; } @@ -121,7 +121,7 @@ if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x' if (is_array($changeaccount) && count($changeaccount) > 0 && $user->hasRight('accounting', 'bind', 'write')) { $error = 0; - if (!(GETPOST('account_parent', 'int') >= 0)) { + if (!(GETPOSTINT('account_parent') >= 0)) { $error++; setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Account")), null, 'errors'); } @@ -130,7 +130,7 @@ if (is_array($changeaccount) && count($changeaccount) > 0 && $user->hasRight('ac $db->begin(); $sql1 = "UPDATE ".MAIN_DB_PREFIX."expensereport_det as erd"; - $sql1 .= " SET erd.fk_code_ventilation=".(GETPOST('account_parent', 'int') > 0 ? GETPOST('account_parent', 'int') : '0'); + $sql1 .= " SET erd.fk_code_ventilation=".(GETPOSTINT('account_parent') > 0 ? GETPOSTINT('account_parent') : '0'); $sql1 .= ' WHERE erd.rowid IN ('.$db->sanitize(implode(',', $changeaccount)).')'; dol_syslog('accountancy/expensereport/lines.php::changeaccount sql= '.$sql1); @@ -165,7 +165,7 @@ if (GETPOST('sortfield') == 'erd.date, erd.rowid') { $form = new Form($db); $formother = new FormOther($db); -$help_url ='EN:Module_Double_Entry_Accounting|FR:Module_Comptabilité_en_Partie_Double#Liaisons_comptables'; +$help_url = 'EN:Module_Double_Entry_Accounting|FR:Module_Comptabilité_en_Partie_Double#Liaisons_comptables'; llxHeader('', $langs->trans("ExpenseReportsVentilation").' - '.$langs->trans("Dispatched"), $help_url); @@ -279,22 +279,22 @@ if ($result) { $param .= "&search_vat=".urlencode($search_vat); } if ($search_date_startday) { - $param .= '&search_date_startday='.urlencode($search_date_startday); + $param .= '&search_date_startday='.urlencode((string) ($search_date_startday)); } if ($search_date_startmonth) { - $param .= '&search_date_startmonth='.urlencode($search_date_startmonth); + $param .= '&search_date_startmonth='.urlencode((string) ($search_date_startmonth)); } if ($search_date_startyear) { - $param .= '&search_date_startyear='.urlencode($search_date_startyear); + $param .= '&search_date_startyear='.urlencode((string) ($search_date_startyear)); } if ($search_date_endday) { - $param .= '&search_date_endday='.urlencode($search_date_endday); + $param .= '&search_date_endday='.urlencode((string) ($search_date_endday)); } if ($search_date_endmonth) { - $param .= '&search_date_endmonth='.urlencode($search_date_endmonth); + $param .= '&search_date_endmonth='.urlencode((string) ($search_date_endmonth)); } if ($search_date_endyear) { - $param .= '&search_date_endyear='.urlencode($search_date_endyear); + $param .= '&search_date_endyear='.urlencode((string) ($search_date_endyear)); } print '
'."\n"; @@ -308,6 +308,7 @@ if ($result) { print ''; print ''; + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder print_barre_liste($langs->trans("ExpenseReportLinesDone"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $num_lines, $nbtotalofrecords, 'title_accountancy', 0, '', '', $limit); print ''.$langs->trans("DescVentilDoneExpenseReport").'
'; @@ -438,7 +439,7 @@ if ($result) { $i++; } if ($num_lines == 0) { - $colspan=10; + $colspan = 10; if (getDolGlobalString('ACCOUNTANCY_USE_EXPENSE_REPORT_VALIDATION_DATE')) { $colspan++; } diff --git a/htdocs/accountancy/expensereport/list.php b/htdocs/accountancy/expensereport/list.php index c688098058f..9bb346e153a 100644 --- a/htdocs/accountancy/expensereport/list.php +++ b/htdocs/accountancy/expensereport/list.php @@ -58,12 +58,12 @@ $search_desc = GETPOST('search_desc', 'alpha'); $search_amount = GETPOST('search_amount', 'alpha'); $search_account = GETPOST('search_account', 'alpha'); $search_vat = GETPOST('search_vat', 'alpha'); -$search_date_startday = GETPOST('search_date_startday', 'int'); -$search_date_startmonth = GETPOST('search_date_startmonth', 'int'); -$search_date_startyear = GETPOST('search_date_startyear', 'int'); -$search_date_endday = GETPOST('search_date_endday', 'int'); -$search_date_endmonth = GETPOST('search_date_endmonth', 'int'); -$search_date_endyear = GETPOST('search_date_endyear', 'int'); +$search_date_startday = GETPOSTINT('search_date_startday'); +$search_date_startmonth = GETPOSTINT('search_date_startmonth'); +$search_date_startyear = GETPOSTINT('search_date_startyear'); +$search_date_endday = GETPOSTINT('search_date_endday'); +$search_date_endmonth = GETPOSTINT('search_date_endmonth'); +$search_date_endyear = GETPOSTINT('search_date_endyear'); $search_date_start = dol_mktime(0, 0, 0, $search_date_startmonth, $search_date_startday, $search_date_startyear); // Use tzserver $search_date_end = dol_mktime(23, 59, 59, $search_date_endmonth, $search_date_endday, $search_date_endyear); @@ -73,10 +73,10 @@ if (empty($search_date_start) && getDolGlobalString('ACCOUNTING_DATE_START_BINDI } // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : getDolGlobalString('ACCOUNTING_LIMIT_LIST_VENTILATION', $conf->liste_limit); +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : getDolGlobalString('ACCOUNTING_LIMIT_LIST_VENTILATION', $conf->liste_limit); $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0) { $page = 0; } @@ -221,7 +221,7 @@ if (GETPOST('sortfield') == 'erd.date, erd.rowid') { $form = new Form($db); $formother = new FormOther($db); -$help_url ='EN:Module_Double_Entry_Accounting|FR:Module_Comptabilité_en_Partie_Double#Liaisons_comptables'; +$help_url = 'EN:Module_Double_Entry_Accounting|FR:Module_Comptabilité_en_Partie_Double#Liaisons_comptables'; llxHeader('', $langs->trans("ExpenseReportsVentilation"), $help_url); @@ -327,22 +327,22 @@ if ($result) { $param .= '&search_lineid='.urlencode($search_lineid); } if ($search_date_startday) { - $param .= '&search_date_startday='.urlencode($search_date_startday); + $param .= '&search_date_startday='.urlencode((string) ($search_date_startday)); } if ($search_date_startmonth) { - $param .= '&search_date_startmonth='.urlencode($search_date_startmonth); + $param .= '&search_date_startmonth='.urlencode((string) ($search_date_startmonth)); } if ($search_date_startyear) { - $param .= '&search_date_startyear='.urlencode($search_date_startyear); + $param .= '&search_date_startyear='.urlencode((string) ($search_date_startyear)); } if ($search_date_endday) { - $param .= '&search_date_endday='.urlencode($search_date_endday); + $param .= '&search_date_endday='.urlencode((string) ($search_date_endday)); } if ($search_date_endmonth) { - $param .= '&search_date_endmonth='.urlencode($search_date_endmonth); + $param .= '&search_date_endmonth='.urlencode((string) ($search_date_endmonth)); } if ($search_date_endyear) { - $param .= '&search_date_endyear='.urlencode($search_date_endyear); + $param .= '&search_date_endyear='.urlencode((string) ($search_date_endyear)); } if ($search_expensereport) { $param .= '&search_expensereport='.urlencode($search_expensereport); @@ -376,6 +376,7 @@ if ($result) { print ''; print ''; + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder print_barre_liste($langs->trans("ExpenseReportLines"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num_lines, $nbtotalofrecords, 'title_accountancy', 0, '', '', $limit); print ''.$langs->trans("DescVentilTodoExpenseReport").'

'; diff --git a/htdocs/accountancy/index.php b/htdocs/accountancy/index.php index be739ba02fb..10adfea0bc8 100644 --- a/htdocs/accountancy/index.php +++ b/htdocs/accountancy/index.php @@ -57,8 +57,8 @@ $pcgver = getDolGlobalInt('CHARTOFACCOUNTS'); if (GETPOST('addbox')) { // Add box (when submit is done from a form when ajax disabled) require_once DOL_DOCUMENT_ROOT.'/core/class/infobox.class.php'; - $zone = GETPOST('areacode', 'int'); - $userid = GETPOST('userid', 'int'); + $zone = GETPOSTINT('areacode'); + $userid = GETPOSTINT('userid'); $boxorder = GETPOST('boxorder', 'aZ09'); $boxorder .= GETPOST('boxcombo', 'aZ09'); @@ -80,7 +80,7 @@ llxHeader('', $langs->trans("AccountancyArea"), $help_url); if (isModEnabled('accounting')) { $step = 0; - $resultboxes = FormOther::getBoxesArea($user, "27"); // Load $resultboxes (selectboxlist + boxactivated + boxlista + boxlistb) + $helpisexpanded = empty($resultboxes['boxactivated']) || (empty($resultboxes['boxlista']) && empty($resultboxes['boxlistb'])); // If there is no widget, the tooltip help is expanded by default. $showtutorial = ''; @@ -263,34 +263,7 @@ if (isModEnabled('accounting')) { print ''; print '
'; - - print '
'; - - /* - * Show boxes - */ - $boxlist = '
'; - - $boxlist .= '
'; - - $boxlist .= $resultboxes['boxlista']; - - $boxlist .= '
'; - - $boxlist .= '
'; - - $boxlist .= $resultboxes['boxlistb']; - - $boxlist .= '
'; - $boxlist .= "\n"; - - $boxlist .= '
'; - - - print $boxlist; - - print '
'; -} elseif (isModEnabled('compta')) { +} elseif (isModEnabled('comptabilite')) { print load_fiche_titre($langs->trans("AccountancyArea"), '', 'accountancy'); print ''.$langs->trans("Module10Desc")."\n"; @@ -300,6 +273,21 @@ if (isModEnabled('accounting')) { print load_fiche_titre($langs->trans("AccountancyArea"), '', 'accountancy'); } +/* + * Show boxes + */ +$resultboxes = FormOther::getBoxesArea($user, "27"); // Load $resultboxes (selectboxlist + boxactivated + boxlista + boxlistb) +$boxlist = '
'; +$boxlist .= '
'; +$boxlist .= $resultboxes['boxlista']; +$boxlist .= '
'; +$boxlist .= '
'; +$boxlist .= $resultboxes['boxlistb']; +$boxlist .= '
'; +$boxlist .= "\n"; +$boxlist .= '
'; +print $boxlist; + // End of page llxFooter(); $db->close(); diff --git a/htdocs/accountancy/journal/bankjournal.php b/htdocs/accountancy/journal/bankjournal.php index 1da86215df1..9e6b39a9b00 100644 --- a/htdocs/accountancy/journal/bankjournal.php +++ b/htdocs/accountancy/journal/bankjournal.php @@ -12,6 +12,7 @@ * Copyright (C) 2018 Ferran Marcet * Copyright (C) 2018 Eric Seigne * Copyright (C) 2021 Gauthier VERDOL + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -66,14 +67,14 @@ require_once DOL_DOCUMENT_ROOT.'/adherents/class/subscription.class.php'; $langs->loadLangs(array("companies", "other", "compta", "banks", "bills", "donations", "loan", "accountancy", "trips", "salaries", "hrm", "members")); // Multi journal -$id_journal = GETPOST('id_journal', 'int'); +$id_journal = GETPOSTINT('id_journal'); -$date_startmonth = GETPOST('date_startmonth', 'int'); -$date_startday = GETPOST('date_startday', 'int'); -$date_startyear = GETPOST('date_startyear', 'int'); -$date_endmonth = GETPOST('date_endmonth', 'int'); -$date_endday = GETPOST('date_endday', 'int'); -$date_endyear = GETPOST('date_endyear', 'int'); +$date_startmonth = GETPOSTINT('date_startmonth'); +$date_startday = GETPOSTINT('date_startday'); +$date_startyear = GETPOSTINT('date_startyear'); +$date_endmonth = GETPOSTINT('date_endmonth'); +$date_endday = GETPOSTINT('date_endday'); +$date_endyear = GETPOSTINT('date_endyear'); $in_bookkeeping = GETPOST('in_bookkeeping', 'aZ09'); if ($in_bookkeeping == '') { $in_bookkeeping = 'notyet'; @@ -194,6 +195,21 @@ $accountingjournalstatic->fetch($id_journal); $journal = $accountingjournalstatic->code; $journal_label = $accountingjournalstatic->label; +$tabcompany = array(); +$tabuser = array(); +$tabpay = array(); +$tabbq = array(); +$tabtp = array(); +$tabtype = array(); +$tabmoreinfo = array(); + +' +@phan-var-force array $tabcompany +@phan-var-force array $tabuser +@phan-var-force array $tabpay +@phan-var-force array $tabtp +'; + //print $sql; dol_syslog("accountancy/journal/bankjournal.php", LOG_DEBUG); $result = $db->query($sql); @@ -210,14 +226,6 @@ if ($result) { $account_pay_subscription = getDolGlobalString('ADHERENT_SUBSCRIPTION_ACCOUNTINGACCOUNT', 'NotDefined'); // NotDefined is a reserved word $account_transfer = getDolGlobalString('ACCOUNTING_ACCOUNT_TRANSFER_CASH', 'NotDefined'); // NotDefined is a reserved word - $tabcompany = array(); - $tabuser = array(); - $tabpay = array(); - $tabbq = array(); - $tabtp = array(); - $tabtype = array(); - $tabmoreinfo = array(); - // Loop on each line into llx_bank table. For each line, we should get: // one line tabpay = line into bank // one line for bank record = tabbq @@ -246,7 +254,7 @@ if ($result) { $lineisasale = 1; } } - //var_dump($obj->type_payment); var_dump($obj->type_payment_supplier); + //var_dump($obj->type_payment); //var_dump($obj->type_payment_supplier); //var_dump($lineisapurchase); //var_dump($lineisasale); // Set accountancy code for bank @@ -342,11 +350,13 @@ if ($result) { // We save tabtype for a future use, to remember what kind of payment it is $tabpay[$obj->rowid]['type'] = $links[$key]['type']; $tabtype[$obj->rowid] = $links[$key]['type']; - } elseif (in_array($links[$key]['type'], array('company', 'user'))) { - if ($tabpay[$obj->rowid]['type'] == 'unknown') { - // We can guess here it is a bank record for a thirdparty company or a user. - // But we won't be able to record somewhere else than into a waiting account, because there is no other journal to record the contreparty. - } + /* phpcs:disable -- Code does nothing at this moment -> commented + } elseif (in_array($links[$key]['type'], array('company', 'user'))) { + if ($tabpay[$obj->rowid]['type'] == 'unknown') { + // We can guess here it is a bank record for a thirdparty company or a user. + // But we won't be able to record somewhere else than into a waiting account, because there is no other journal to record the contreparty. + } + */ // phpcs::enable } // Special case to ask later to add more request to get information for old links without company link. @@ -467,7 +477,7 @@ if ($result) { $userstatic->email = $tmpsalary->user->email; $userstatic->firstname = $tmpsalary->user->firstname; $userstatic->lastname = $tmpsalary->user->lastname; - $userstatic->statut = $tmpsalary->user->statut; + $userstatic->statut = $tmpsalary->user->status; $userstatic->accountancy_code = $tmpsalary->user->accountancy_code; if ($userstatic->id > 0) { @@ -487,7 +497,7 @@ if ($result) { 'firstname' => $userstatic->firstname, 'email' => $userstatic->email, 'accountancy_code' => $compta_user, - 'status' => $userstatic->statut + 'status' => $userstatic->status ); } } @@ -554,8 +564,8 @@ if ($result) { foreach ($arrayofamounts as $invoiceid => $amount) { $tmpinvoice->fetch($invoiceid); $tmpinvoice->fetch_thirdparty(); - if ($tmpinvoice->thirdparty->code_compta) { - $tabtp[$obj->rowid][$tmpinvoice->thirdparty->code_compta] += $amount; + if ($tmpinvoice->thirdparty->code_compta_client) { + $tabtp[$obj->rowid][$tmpinvoice->thirdparty->code_compta_client] += $amount; } } } @@ -1072,8 +1082,8 @@ if (empty($action) || $action == 'view') { $description = $langs->trans("DescJournalOnlyBindedVisible").'
'; $listofchoices = array( - 'notyet'=>$langs->trans("NotYetInGeneralLedger"), - 'already'=>$langs->trans("AlreadyInGeneralLedger") + 'notyet' => $langs->trans("NotYetInGeneralLedger"), + 'already' => $langs->trans("AlreadyInGeneralLedger") ); $period = $form->selectDate($date_start ? $date_start : -1, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end ? $date_end : -1, 'date_end', 0, 0, 0, '', 1, 0); $period .= ' - '.$langs->trans("JournalizationInLedgerStatus").' '.$form->selectarray('in_bookkeeping', $listofchoices, $in_bookkeeping, 1); @@ -1432,7 +1442,7 @@ $db->close(); /** * Return source for doc_ref of a bank transaction * - * @param string $val Array of val + * @param array $val Array of val * @param string $typerecord Type of record ('payment', 'payment_supplier', 'payment_expensereport', 'payment_vat', ...) * @return string A string label to describe a record into llx_bank_url */ diff --git a/htdocs/accountancy/journal/expensereportsjournal.php b/htdocs/accountancy/journal/expensereportsjournal.php index de47b55ab83..881070ad6fd 100644 --- a/htdocs/accountancy/journal/expensereportsjournal.php +++ b/htdocs/accountancy/journal/expensereportsjournal.php @@ -41,7 +41,7 @@ require_once DOL_DOCUMENT_ROOT.'/accountancy/class/bookkeeping.class.php'; // Load translation files required by the page $langs->loadLangs(array("commercial", "compta", "bills", "other", "accountancy", "trips", "errors")); -$id_journal = GETPOST('id_journal', 'int'); +$id_journal = GETPOSTINT('id_journal'); $action = GETPOST('action', 'aZ09'); $date_startmonth = GETPOST('date_startmonth'); diff --git a/htdocs/accountancy/journal/purchasesjournal.php b/htdocs/accountancy/journal/purchasesjournal.php index 796aae22225..f5d30511ce0 100644 --- a/htdocs/accountancy/journal/purchasesjournal.php +++ b/htdocs/accountancy/journal/purchasesjournal.php @@ -6,8 +6,9 @@ * Copyright (C) 2013-2023 Alexandre Spangaro * Copyright (C) 2013-2016 Olivier Geffroy * Copyright (C) 2013-2016 Florian Henry - * Copyright (C) 2018 Frédéric France + * Copyright (C) 2018-2024 Frédéric France * Copyright (C) 2018 Eric Seigne + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -42,7 +43,7 @@ require_once DOL_DOCUMENT_ROOT.'/accountancy/class/bookkeeping.class.php'; // Load translation files required by the page $langs->loadLangs(array("commercial", "compta", "bills", "other", "accountancy", "errors")); -$id_journal = GETPOST('id_journal', 'int'); +$id_journal = GETPOSTINT('id_journal'); $action = GETPOST('action', 'aZ09'); $date_startmonth = GETPOST('date_startmonth'); @@ -314,7 +315,7 @@ if ($result) { $tabttc[$obj->rowid][$compta_soc] += $obj->total_ttc; $tabht[$obj->rowid][$compta_prod] += $obj->total_ht; $tabtva[$obj->rowid][$compta_tva] += $obj->total_tva; - $tva_npr = (($obj->info_bits & 1 == 1) ? 1 : 0); + $tva_npr = ((($obj->info_bits & 1) == 1) ? 1 : 0); if ($tva_npr) { // If NPR, we add an entry for counterpartWe into tabother $tabother[$obj->rowid][$compta_counterpart_tva_npr] += $obj->total_tva; } @@ -366,7 +367,7 @@ SELECT fk_facture_fourn, COUNT(fd.rowid) as nb FROM - llx_facture_fourn_det as fd + " . MAIN_DB_PREFIX . "facture_fourn_det as fd WHERE fd.product_type <= 2 AND fd.fk_code_ventilation <= 0 @@ -935,7 +936,7 @@ if (empty($action) || $action == 'view') { $description .= $langs->trans("DepositsAreIncluded"); } - $listofchoices = array('notyet'=>$langs->trans("NotYetInGeneralLedger"), 'already'=>$langs->trans("AlreadyInGeneralLedger")); + $listofchoices = array('notyet' => $langs->trans("NotYetInGeneralLedger"), 'already' => $langs->trans("AlreadyInGeneralLedger")); $period = $form->selectDate($date_start ? $date_start : -1, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end ? $date_end : -1, 'date_end', 0, 0, 0, '', 1, 0); $period .= ' - '.$langs->trans("JournalizationInLedgerStatus").' '.$form->selectarray('in_bookkeeping', $listofchoices, $in_bookkeeping, 1); diff --git a/htdocs/accountancy/journal/sellsjournal.php b/htdocs/accountancy/journal/sellsjournal.php index 91cc127f4d6..6e0640df092 100644 --- a/htdocs/accountancy/journal/sellsjournal.php +++ b/htdocs/accountancy/journal/sellsjournal.php @@ -9,6 +9,7 @@ * Copyright (C) 2013-2016 Olivier Geffroy * Copyright (C) 2014 Raphaël Doursenaud * Copyright (C) 2018-2021 Frédéric France + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -44,7 +45,7 @@ require_once DOL_DOCUMENT_ROOT.'/accountancy/class/bookkeeping.class.php'; // Load translation files required by the page $langs->loadLangs(array("commercial", "compta", "bills", "other", "accountancy", "errors")); -$id_journal = GETPOST('id_journal', 'int'); +$id_journal = GETPOSTINT('id_journal'); $action = GETPOST('action', 'aZ09'); $date_startmonth = GETPOST('date_startmonth'); @@ -109,7 +110,7 @@ if (empty($date_endmonth)) { $pastmonth = $dates['pastmonth']; } if (getDolGlobalString('ACCOUNTANCY_JOURNAL_USE_CURRENT_MONTH')) { - $pastmonth+=1; + $pastmonth += 1; } if (!GETPOSTISSET('date_startmonth') && (empty($date_start) || empty($date_end))) { // We define date_start and date_end, only if we did not submit the form @@ -304,7 +305,7 @@ if ($result) { $tabttc[$obj->rowid][$compta_soc] += $total_ttc; $tabht[$obj->rowid][$compta_prod] += $obj->total_ht * $situation_ratio; - $tva_npr = (($obj->info_bits & 1 == 1) ? 1 : 0); + $tva_npr = ((($obj->info_bits & 1) == 1) ? 1 : 0); if (!$tva_npr) { // We ignore line if VAT is a NPR $tabtva[$obj->rowid][$compta_tva] += $obj->total_tva * $situation_ratio; } @@ -992,7 +993,7 @@ if (empty($action) || $action == 'view') { $description .= $langs->trans("DepositsAreIncluded"); } - $listofchoices = array('notyet'=>$langs->trans("NotYetInGeneralLedger"), 'already'=>$langs->trans("AlreadyInGeneralLedger")); + $listofchoices = array('notyet' => $langs->trans("NotYetInGeneralLedger"), 'already' => $langs->trans("AlreadyInGeneralLedger")); $period = $form->selectDate($date_start ? $date_start : -1, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end ? $date_end : -1, 'date_end', 0, 0, 0, '', 1, 0); $period .= ' - '.$langs->trans("JournalizationInLedgerStatus").' '.$form->selectarray('in_bookkeeping', $listofchoices, $in_bookkeeping, 1); @@ -1283,7 +1284,7 @@ if (empty($action) || $action == 'view') { print ''; print "".$companystatic->getNomUrl(0, 'customer', 16).' - '.$invoicestatic->ref; // $def_tva is array[invoiceid][accountancy_code_sell_of_vat_rate_found][vatrate]=vatrate - //var_dump($arrayofvat[$key]); var_dump($key); var_dump($k); + //var_dump($arrayofvat[$key]); //var_dump($key); //var_dump($k); $tmpvatrate = (empty($def_tva[$key][$k]) ? (empty($arrayofvat[$key][$k]) ? '' : $arrayofvat[$key][$k]) : implode(', ', $def_tva[$key][$k])); print ' - '.$langs->trans("Taxes").' '.$tmpvatrate.' %'; print($numtax ? ' - Localtax '.$numtax : ''); diff --git a/htdocs/accountancy/journal/variousjournal.php b/htdocs/accountancy/journal/variousjournal.php index 62bd97df17f..4882b722053 100644 --- a/htdocs/accountancy/journal/variousjournal.php +++ b/htdocs/accountancy/journal/variousjournal.php @@ -30,7 +30,7 @@ require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountingjournal.class.php'; // Load translation files required by the page $langs->loadLangs(array("banks", "accountancy", "compta", "other", "errors")); -$id_journal = GETPOST('id_journal', 'int'); +$id_journal = GETPOSTINT('id_journal'); $action = GETPOST('action', 'aZ09'); $date_startmonth = GETPOST('date_startmonth'); diff --git a/htdocs/accountancy/supplier/card.php b/htdocs/accountancy/supplier/card.php index 99bfe67fce5..d384d7c944a 100644 --- a/htdocs/accountancy/supplier/card.php +++ b/htdocs/accountancy/supplier/card.php @@ -38,8 +38,8 @@ $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'alpha'); $backtopage = GETPOST('backtopage', 'alpha'); -$codeventil = GETPOST('codeventil', 'int'); -$id = GETPOST('id', 'int'); +$codeventil = GETPOSTINT('codeventil'); +$id = GETPOSTINT('id'); // Security check if (!isModEnabled('accounting')) { diff --git a/htdocs/accountancy/supplier/index.php b/htdocs/accountancy/supplier/index.php index a74a9a04f54..ab8dfe60060 100644 --- a/htdocs/accountancy/supplier/index.php +++ b/htdocs/accountancy/supplier/index.php @@ -35,8 +35,8 @@ require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountingaccount.class.php'; // Load translation files required by the page $langs->loadLangs(array("compta", "bills", "other", "accountancy")); -$validatemonth = GETPOST('validatemonth', 'int'); -$validateyear = GETPOST('validateyear', 'int'); +$validatemonth = GETPOSTINT('validatemonth'); +$validateyear = GETPOSTINT('validateyear'); // Security check if (!isModEnabled('accounting')) { @@ -52,8 +52,8 @@ if (!$user->hasRight('accounting', 'bind', 'write')) { $accountingAccount = new AccountingAccount($db); $month_start = getDolGlobalInt('SOCIETE_FISCAL_MONTH_START', 1); -if (GETPOST("year", 'int')) { - $year_start = GETPOST("year", 'int'); +if (GETPOSTINT("year")) { + $year_start = GETPOSTINT("year"); } else { $year_start = dol_print_date(dol_now(), '%Y'); if (dol_print_date(dol_now(), '%m') < $month_start) { @@ -232,10 +232,10 @@ if ($action == 'validatehistory') { $facture_static_det->desc = $objp->description; $accountingAccountArray = array( - 'dom'=>$objp->aarowid, - 'intra'=>$objp->aarowid_intra, - 'export'=>$objp->aarowid_export, - 'thirdparty' =>$objp->aarowid_thirdparty); + 'dom' => $objp->aarowid, + 'intra' => $objp->aarowid_intra, + 'export' => $objp->aarowid_export, + 'thirdparty' => $objp->aarowid_thirdparty); $code_buy_p_notset = ''; $code_buy_t_notset = ''; @@ -243,7 +243,7 @@ if ($action == 'validatehistory') { $suggestedid = 0; $return = $accountingAccount->getAccountingCodeToBind($mysoc, $thirdpartystatic, $product_static, $facture_static, $facture_static_det, $accountingAccountArray, 'supplier'); - if (!is_array($return) && $return<0) { + if (!is_array($return) && $return < 0) { setEventMessage($accountingAccount->error, 'errors'); } else { $suggestedid = $return['suggestedid']; @@ -297,7 +297,7 @@ if ($action == 'validatehistory') { /* * View */ -$help_url ='EN:Module_Double_Entry_Accounting|FR:Module_Comptabilité_en_Partie_Double#Liaisons_comptables'; +$help_url = 'EN:Module_Double_Entry_Accounting|FR:Module_Comptabilité_en_Partie_Double#Liaisons_comptables'; llxHeader('', $langs->trans("SuppliersVentilation"), $help_url); @@ -340,7 +340,7 @@ for ($i = 1; $i <= 12; $i++) { $param .= '&search_date_endday='.$tmp['mday'].'&search_date_endmonth='.$tmp['mon'].'&search_date_endyear='.$tmp['year']; print ''; } - print $langs->trans('MonthShort'.str_pad($j, 2, '0', STR_PAD_LEFT)); + print $langs->trans('MonthShort'.str_pad((string) $j, 2, '0', STR_PAD_LEFT)); if (!empty($tmp['mday'])) { print ''; } @@ -355,7 +355,7 @@ for ($i = 1; $i <= 12; $i++) { if ($j > 12) { $j -= 12; } - $sql .= " SUM(".$db->ifsql("MONTH(ff.datef)=".$j, "ffd.total_ht", "0").") AS month".str_pad($j, 2, "0", STR_PAD_LEFT).","; + $sql .= " SUM(".$db->ifsql("MONTH(ff.datef) = ".((int) $j), "ffd.total_ht", "0").") AS month".str_pad((string) $j, 2, "0", STR_PAD_LEFT).","; } $sql .= " SUM(ffd.total_ht) as total"; $sql .= " FROM ".$db->prefix()."facture_fourn_det as ffd"; @@ -422,7 +422,7 @@ if ($resql) { // Add link to make binding if (!empty(price2num($row[$i]))) { print ''; - print img_picto($langs->trans("ValidateHistory").' ('.$langs->trans('Month'.str_pad($cursormonth, 2, '0', STR_PAD_LEFT)).' '.$cursoryear.')', 'link', 'class="marginleft2"'); + print img_picto($langs->trans("ValidateHistory").' ('.$langs->trans('Month'.str_pad((string) $cursormonth, 2, '0', STR_PAD_LEFT)).' '.$cursoryear.')', 'link', 'class="marginleft2"'); print ''; } print ''; @@ -472,7 +472,7 @@ for ($i = 1; $i <= 12; $i++) { $param .= '&search_date_endday='.$tmp['mday'].'&search_date_endmonth='.$tmp['mon'].'&search_date_endyear='.$tmp['year']; print ''; } - print $langs->trans('MonthShort'.str_pad($j, 2, '0', STR_PAD_LEFT)); + print $langs->trans('MonthShort'.str_pad((string) $j, 2, '0', STR_PAD_LEFT)); if (!empty($tmp['mday'])) { print ''; } @@ -487,7 +487,7 @@ for ($i = 1; $i <= 12; $i++) { if ($j > 12) { $j -= 12; } - $sql .= " SUM(".$db->ifsql("MONTH(ff.datef)=".$j, "ffd.total_ht", "0").") AS month".str_pad($j, 2, "0", STR_PAD_LEFT).","; + $sql .= " SUM(".$db->ifsql("MONTH(ff.datef) = ".((int) $j), "ffd.total_ht", "0").") AS month".str_pad((string) $j, 2, "0", STR_PAD_LEFT).","; } $sql .= " SUM(ffd.total_ht) as total"; $sql .= " FROM ".$db->prefix()."facture_fourn_det as ffd"; @@ -571,7 +571,7 @@ if (getDolGlobalString('SHOW_TOTAL_OF_PREVIOUS_LISTS_IN_LIN_PAGE')) { // This pa if ($j > 12) { $j -= 12; } - print ''.$langs->trans('MonthShort'.str_pad($j, 2, '0', STR_PAD_LEFT)).''; + print ''.$langs->trans('MonthShort'.str_pad((string) $j, 2, '0', STR_PAD_LEFT)).''; } print ''.$langs->trans("Total").''; @@ -581,7 +581,7 @@ if (getDolGlobalString('SHOW_TOTAL_OF_PREVIOUS_LISTS_IN_LIN_PAGE')) { // This pa if ($j > 12) { $j -= 12; } - $sql .= " SUM(".$db->ifsql("MONTH(ff.datef)=".$j, "ffd.total_ht", "0").") AS month".str_pad($j, 2, "0", STR_PAD_LEFT).","; + $sql .= " SUM(".$db->ifsql("MONTH(ff.datef) = ".((int) $j), "ffd.total_ht", "0").") AS month".str_pad((string) $j, 2, "0", STR_PAD_LEFT).","; } $sql .= " SUM(ffd.total_ht) as total"; $sql .= " FROM ".$db->prefix()."facture_fourn_det as ffd"; diff --git a/htdocs/accountancy/supplier/lines.php b/htdocs/accountancy/supplier/lines.php index 576e4874a8d..16d1d3d0202 100644 --- a/htdocs/accountancy/supplier/lines.php +++ b/htdocs/accountancy/supplier/lines.php @@ -46,7 +46,7 @@ $account_parent = GETPOST('account_parent'); $changeaccount = GETPOST('changeaccount'); // Search Getpost $search_societe = GETPOST('search_societe', 'alpha'); -$search_lineid = GETPOST('search_lineid', 'int'); +$search_lineid = GETPOSTINT('search_lineid'); $search_ref = GETPOST('search_ref', 'alpha'); $search_invoice = GETPOST('search_invoice', 'alpha'); //$search_ref_supplier = GETPOST('search_ref_supplier', 'alpha'); @@ -55,22 +55,22 @@ $search_desc = GETPOST('search_desc', 'alpha'); $search_amount = GETPOST('search_amount', 'alpha'); $search_account = GETPOST('search_account', 'alpha'); $search_vat = GETPOST('search_vat', 'alpha'); -$search_date_startday = GETPOST('search_date_startday', 'int'); -$search_date_startmonth = GETPOST('search_date_startmonth', 'int'); -$search_date_startyear = GETPOST('search_date_startyear', 'int'); -$search_date_endday = GETPOST('search_date_endday', 'int'); -$search_date_endmonth = GETPOST('search_date_endmonth', 'int'); -$search_date_endyear = GETPOST('search_date_endyear', 'int'); +$search_date_startday = GETPOSTINT('search_date_startday'); +$search_date_startmonth = GETPOSTINT('search_date_startmonth'); +$search_date_startyear = GETPOSTINT('search_date_startyear'); +$search_date_endday = GETPOSTINT('search_date_endday'); +$search_date_endmonth = GETPOSTINT('search_date_endmonth'); +$search_date_endyear = GETPOSTINT('search_date_endyear'); $search_date_start = dol_mktime(0, 0, 0, $search_date_startmonth, $search_date_startday, $search_date_startyear); // Use tzserver $search_date_end = dol_mktime(23, 59, 59, $search_date_endmonth, $search_date_endday, $search_date_endyear); $search_country = GETPOST('search_country', 'alpha'); $search_tvaintra = GETPOST('search_tvaintra', 'alpha'); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : getDolGlobalString('ACCOUNTING_LIMIT_LIST_VENTILATION', $conf->liste_limit); +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : getDolGlobalString('ACCOUNTING_LIMIT_LIST_VENTILATION', $conf->liste_limit); $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0) { $page = 0; } @@ -136,7 +136,7 @@ if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x' if (is_array($changeaccount) && count($changeaccount) > 0 && $user->hasRight('accounting', 'bind', 'write')) { $error = 0; - if (!(GETPOST('account_parent', 'int') >= 0)) { + if (!(GETPOSTINT('account_parent') >= 0)) { $error++; setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Account")), null, 'errors'); } @@ -145,7 +145,7 @@ if (is_array($changeaccount) && count($changeaccount) > 0 && $user->hasRight('ac $db->begin(); $sql1 = "UPDATE ".MAIN_DB_PREFIX."facture_fourn_det"; - $sql1 .= " SET fk_code_ventilation=".(GETPOST('account_parent', 'int') > 0 ? GETPOST('account_parent', 'int') : '0'); + $sql1 .= " SET fk_code_ventilation=".(GETPOSTINT('account_parent') > 0 ? GETPOSTINT('account_parent') : '0'); $sql1 .= ' WHERE rowid IN ('.$db->sanitize(implode(',', $changeaccount)).')'; dol_syslog('accountancy/supplier/lines.php::changeaccount sql= '.$sql1); @@ -180,7 +180,7 @@ if (GETPOST('sortfield') == 'f.datef, f.ref, l.rowid') { $form = new Form($db); $formother = new FormOther($db); -$help_url ='EN:Module_Double_Entry_Accounting|FR:Module_Comptabilité_en_Partie_Double#Liaisons_comptables'; +$help_url = 'EN:Module_Double_Entry_Accounting|FR:Module_Comptabilité_en_Partie_Double#Liaisons_comptables'; llxHeader('', $langs->trans("SuppliersVentilation").' - '.$langs->trans("Dispatched"), $help_url); @@ -359,22 +359,22 @@ if ($result) { $param .= "&search_vat=".urlencode($search_vat); } if ($search_date_startday) { - $param .= '&search_date_startday='.urlencode($search_date_startday); + $param .= '&search_date_startday='.urlencode((string) ($search_date_startday)); } if ($search_date_startmonth) { - $param .= '&search_date_startmonth='.urlencode($search_date_startmonth); + $param .= '&search_date_startmonth='.urlencode((string) ($search_date_startmonth)); } if ($search_date_startyear) { - $param .= '&search_date_startyear='.urlencode($search_date_startyear); + $param .= '&search_date_startyear='.urlencode((string) ($search_date_startyear)); } if ($search_date_endday) { - $param .= '&search_date_endday='.urlencode($search_date_endday); + $param .= '&search_date_endday='.urlencode((string) ($search_date_endday)); } if ($search_date_endmonth) { - $param .= '&search_date_endmonth='.urlencode($search_date_endmonth); + $param .= '&search_date_endmonth='.urlencode((string) ($search_date_endmonth)); } if ($search_date_endyear) { - $param .= '&search_date_endyear='.urlencode($search_date_endyear); + $param .= '&search_date_endyear='.urlencode((string) ($search_date_endyear)); } if ($search_country) { $param .= "&search_country=".urlencode($search_country); @@ -394,6 +394,7 @@ if ($result) { print ''; print ''; + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder print_barre_liste($langs->trans("InvoiceLinesDone"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $num_lines, $nbtotalofrecords, 'title_accountancy', 0, '', '', $limit); print ''.$langs->trans("DescVentilDoneSupplier").'
'; diff --git a/htdocs/accountancy/supplier/list.php b/htdocs/accountancy/supplier/list.php index de9c72a56b5..b086cdd1914 100644 --- a/htdocs/accountancy/supplier/list.php +++ b/htdocs/accountancy/supplier/list.php @@ -49,14 +49,14 @@ $toselect = GETPOST('toselect', 'array'); $contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'accountancysupplierlist'; // To manage different context of search $optioncss = GETPOST('optioncss', 'alpha'); -$default_account = GETPOST('default_account', 'int'); +$default_account = GETPOSTINT('default_account'); // Select Box $mesCasesCochees = GETPOST('toselect', 'array'); // Search Getpost $search_societe = GETPOST('search_societe', 'alpha'); -$search_lineid = GETPOST('search_lineid', 'int'); +$search_lineid = GETPOSTINT('search_lineid'); $search_ref = GETPOST('search_ref', 'alpha'); $search_ref_supplier = GETPOST('search_ref_supplier', 'alpha'); $search_invoice = GETPOST('search_invoice', 'alpha'); @@ -65,22 +65,22 @@ $search_desc = GETPOST('search_desc', 'alpha'); $search_amount = GETPOST('search_amount', 'alpha'); $search_account = GETPOST('search_account', 'alpha'); $search_vat = GETPOST('search_vat', 'alpha'); -$search_date_startday = GETPOST('search_date_startday', 'int'); -$search_date_startmonth = GETPOST('search_date_startmonth', 'int'); -$search_date_startyear = GETPOST('search_date_startyear', 'int'); -$search_date_endday = GETPOST('search_date_endday', 'int'); -$search_date_endmonth = GETPOST('search_date_endmonth', 'int'); -$search_date_endyear = GETPOST('search_date_endyear', 'int'); +$search_date_startday = GETPOSTINT('search_date_startday'); +$search_date_startmonth = GETPOSTINT('search_date_startmonth'); +$search_date_startyear = GETPOSTINT('search_date_startyear'); +$search_date_endday = GETPOSTINT('search_date_endday'); +$search_date_endmonth = GETPOSTINT('search_date_endmonth'); +$search_date_endyear = GETPOSTINT('search_date_endyear'); $search_date_start = dol_mktime(0, 0, 0, $search_date_startmonth, $search_date_startday, $search_date_startyear); // Use tzserver $search_date_end = dol_mktime(23, 59, 59, $search_date_endmonth, $search_date_endday, $search_date_endyear); $search_country = GETPOST('search_country', 'alpha'); $search_tvaintra = GETPOST('search_tvaintra', 'alpha'); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : getDolGlobalString('ACCOUNTING_LIMIT_LIST_VENTILATION', $conf->liste_limit); +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : getDolGlobalString('ACCOUNTING_LIMIT_LIST_VENTILATION', $conf->liste_limit); $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0) { $page = 0; } @@ -232,7 +232,7 @@ if (GETPOST('sortfield') == 'f.datef, f.ref, l.rowid') { $form = new Form($db); $formother = new FormOther($db); -$help_url ='EN:Module_Double_Entry_Accounting|FR:Module_Comptabilité_en_Partie_Double#Liaisons_comptables'; +$help_url = 'EN:Module_Double_Entry_Accounting|FR:Module_Comptabilité_en_Partie_Double#Liaisons_comptables'; llxHeader('', $langs->trans("SuppliersVentilation"), $help_url); @@ -403,25 +403,25 @@ if ($result) { $param .= '&search_societe='.urlencode($search_societe); } if ($search_lineid) { - $param .= '&search_lineid='.urlencode($search_lineid); + $param .= '&search_lineid='.urlencode((string) ($search_lineid)); } if ($search_date_startday) { - $param .= '&search_date_startday='.urlencode($search_date_startday); + $param .= '&search_date_startday='.urlencode((string) ($search_date_startday)); } if ($search_date_startmonth) { - $param .= '&search_date_startmonth='.urlencode($search_date_startmonth); + $param .= '&search_date_startmonth='.urlencode((string) ($search_date_startmonth)); } if ($search_date_startyear) { - $param .= '&search_date_startyear='.urlencode($search_date_startyear); + $param .= '&search_date_startyear='.urlencode((string) ($search_date_startyear)); } if ($search_date_endday) { - $param .= '&search_date_endday='.urlencode($search_date_endday); + $param .= '&search_date_endday='.urlencode((string) ($search_date_endday)); } if ($search_date_endmonth) { - $param .= '&search_date_endmonth='.urlencode($search_date_endmonth); + $param .= '&search_date_endmonth='.urlencode((string) ($search_date_endmonth)); } if ($search_date_endyear) { - $param .= '&search_date_endyear='.urlencode($search_date_endyear); + $param .= '&search_date_endyear='.urlencode((string) ($search_date_endyear)); } if ($search_invoice) { $param .= '&search_invoice='.urlencode($search_invoice); @@ -452,8 +452,8 @@ if ($result) { } $arrayofmassactions = array( - 'ventil'=>img_picto('', 'check', 'class="pictofixedwidth"').$langs->trans("Ventilate") - ,'set_default_account'=>img_picto('', 'check', 'class="pictofixedwidth"').$langs->trans("ConfirmPreselectAccount") + 'ventil' => img_picto('', 'check', 'class="pictofixedwidth"').$langs->trans("Ventilate") + ,'set_default_account' => img_picto('', 'check', 'class="pictofixedwidth"').$langs->trans("ConfirmPreselectAccount") //'presend'=>img_picto('', 'email', 'class="pictofixedwidth"').$langs->trans("SendByMail"), //'builddoc'=>img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("PDFMerge"), ); @@ -474,10 +474,12 @@ if ($result) { print ''; print ''; + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder print_barre_liste($langs->trans("InvoiceLines"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num_lines, $nbtotalofrecords, 'title_accountancy', 0, '', '', $limit); if ($massaction == 'set_default_account') { - $formquestion[]=array('type' => 'other', + $formquestion = array(); + $formquestion[] = array('type' => 'other', 'name' => 'set_default_account', 'label' => $langs->trans("AccountancyCode"), 'value' => $formaccounting->select_account('', 'default_account', 1, array(), 0, 0, 'maxwidth200 maxwidthonsmartphone', 'cachewithshowemptyone')); @@ -611,26 +613,26 @@ if ($result) { $facturefourn_static_det->desc = $objp->description; $accountingAccountArray = array( - 'dom'=>$objp->aarowid, - 'intra'=>$objp->aarowid_intra, - 'export'=>$objp->aarowid_export, - 'thirdparty' =>$objp->aarowid_thirdparty); + 'dom' => $objp->aarowid, + 'intra' => $objp->aarowid_intra, + 'export' => $objp->aarowid_export, + 'thirdparty' => $objp->aarowid_thirdparty); $code_buy_p_notset = ''; $code_buy_t_notset = ''; $suggestedid = 0; - $return=$accountingAccount->getAccountingCodeToBind($mysoc, $thirdpartystatic, $product_static, $facturefourn_static, $facturefourn_static_det, $accountingAccountArray, 'supplier'); - if (!is_array($return) && $return<0) { + $return = $accountingAccount->getAccountingCodeToBind($mysoc, $thirdpartystatic, $product_static, $facturefourn_static, $facturefourn_static_det, $accountingAccountArray, 'supplier'); + if (!is_array($return) && $return < 0) { setEventMessage($accountingAccount->error, 'errors'); } else { - $suggestedid=$return['suggestedid']; - $suggestedaccountingaccountfor=$return['suggestedaccountingaccountfor']; - $suggestedaccountingaccountbydefaultfor=$return['suggestedaccountingaccountbydefaultfor']; - $code_buy_l=$return['code_l']; - $code_buy_p=$return['code_p']; - $code_buy_t=$return['code_t']; + $suggestedid = $return['suggestedid']; + $suggestedaccountingaccountfor = $return['suggestedaccountingaccountfor']; + $suggestedaccountingaccountbydefaultfor = $return['suggestedaccountingaccountbydefaultfor']; + $code_buy_l = $return['code_l']; + $code_buy_p = $return['code_p']; + $code_buy_t = $return['code_t']; } //var_dump($return); @@ -783,7 +785,7 @@ if ($result) { if (!empty($toselect)) { $ischecked = 0; if (in_array($objp->rowid."_".$i, $toselect)) { - $ischecked=1; + $ischecked = 1; } } diff --git a/htdocs/accountancy/tpl/export_journal.tpl.php b/htdocs/accountancy/tpl/export_journal.tpl.php index 9853dd08bf1..5d5269892bd 100644 --- a/htdocs/accountancy/tpl/export_journal.tpl.php +++ b/htdocs/accountancy/tpl/export_journal.tpl.php @@ -24,7 +24,7 @@ // Protection to avoid direct call of template if (empty($conf) || !is_object($conf)) { print "Error, template page can't be called as URL"; - exit; + exit(1); } $code = getDolGlobalString('MAIN_INFO_ACCOUNTANT_CODE'); diff --git a/htdocs/adherents/admin/member.php b/htdocs/adherents/admin/member.php index 3faf0de69b8..d93ba0b2138 100644 --- a/htdocs/adherents/admin/member.php +++ b/htdocs/adherents/admin/member.php @@ -114,7 +114,7 @@ if ($action == 'set_default') { $res8 = dolibarr_set_const($db, 'MEMBER_SUBSCRIPTION_START_FIRST_DAY_OF', GETPOST('MEMBER_SUBSCRIPTION_START_FIRST_DAY_OF', 'alpha'), 'chaine', 0, '', $conf->entity); $res9 = dolibarr_set_const($db, 'MEMBER_SUBSCRIPTION_START_AFTER', GETPOST('MEMBER_SUBSCRIPTION_START_AFTER', 'alpha'), 'chaine', 0, '', $conf->entity); // Use vat for invoice creation - if (isModEnabled('facture')) { + if (isModEnabled('invoice')) { $res4 = dolibarr_set_const($db, 'ADHERENT_VAT_FOR_SUBSCRIPTIONS', GETPOST('ADHERENT_VAT_FOR_SUBSCRIPTIONS', 'alpha'), 'chaine', 0, '', $conf->entity); $res5 = dolibarr_set_const($db, 'ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS', GETPOST('ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS', 'alpha'), 'chaine', 0, '', $conf->entity); if (isModEnabled("product") || isModEnabled("service")) { @@ -339,6 +339,7 @@ print ''.$langs->trans("Value").''; print "\n"; // Start date of new membership +$startpoint = array(); $startpoint[0] = $langs->trans("SubscriptionPayment"); $startpoint["m"] = $langs->trans("Month"); $startpoint["Y"] = $langs->trans("Year"); @@ -393,14 +394,14 @@ print "\n"; // Insert subscription into bank account print ''.$langs->trans("MoreActionsOnSubscription").''; -$arraychoices = array('0'=>$langs->trans("None")); -if (isModEnabled("banque")) { +$arraychoices = array('0' => $langs->trans("None")); +if (isModEnabled("bank")) { $arraychoices['bankdirect'] = $langs->trans("MoreActionBankDirect"); } -if (isModEnabled("banque") && isModEnabled("societe") && isModEnabled('facture')) { +if (isModEnabled("bank") && isModEnabled("societe") && isModEnabled('invoice')) { $arraychoices['invoiceonly'] = $langs->trans("MoreActionInvoiceOnly"); } -if (isModEnabled("banque") && isModEnabled("societe") && isModEnabled('facture')) { +if (isModEnabled("bank") && isModEnabled("societe") && isModEnabled('invoice')) { $arraychoices['bankviainvoice'] = $langs->trans("MoreActionBankViaInvoice"); } print ''; @@ -412,11 +413,11 @@ print ''; print "\n"; // Use vat for invoice creation -if (isModEnabled('facture')) { +if (isModEnabled('invoice')) { print ''.$langs->trans("VATToUseForSubscriptions").''; - if (isModEnabled("banque")) { + if (isModEnabled("bank")) { print ''; - print $form->selectarray('ADHERENT_VAT_FOR_SUBSCRIPTIONS', array('0'=>$langs->trans("NoVatOnSubscription"), 'defaultforfoundationcountry'=>$langs->trans("Default")), getDolGlobalString('ADHERENT_VAT_FOR_SUBSCRIPTIONS', '0'), 0); + print $form->selectarray('ADHERENT_VAT_FOR_SUBSCRIPTIONS', array('0' => $langs->trans("NoVatOnSubscription"), 'defaultforfoundationcountry' => $langs->trans("Default")), getDolGlobalString('ADHERENT_VAT_FOR_SUBSCRIPTIONS', '0'), 0); print ''; } else { print ''; @@ -494,6 +495,7 @@ foreach ($dirmodels as $reldir) { if (is_dir($dir)) { $handle = opendir($dir); if (is_resource($handle)) { + $filelist = array(); while (($file = readdir($handle)) !== false) { $filelist[] = $file; } diff --git a/htdocs/adherents/admin/member_emails.php b/htdocs/adherents/admin/member_emails.php index cc7b60f6233..c2907004341 100644 --- a/htdocs/adherents/admin/member_emails.php +++ b/htdocs/adherents/admin/member_emails.php @@ -105,7 +105,7 @@ if ($action == 'updateall') { // Action to update or add a constant if ($action == 'update' || $action == 'add') { - $constlineid = GETPOST('rowid', 'int'); + $constlineid = GETPOSTINT('rowid'); $constname = GETPOST('constname', 'alpha'); $constvalue = (GETPOSTISSET('constvalue_'.$constname) ? GETPOST('constvalue_'.$constname, 'alphanohtml') : GETPOST('constvalue')); diff --git a/htdocs/adherents/admin/website.php b/htdocs/adherents/admin/website.php index 8ac296f9449..7cd4f79b8c5 100644 --- a/htdocs/adherents/admin/website.php +++ b/htdocs/adherents/admin/website.php @@ -63,7 +63,7 @@ if ($action == 'update') { $showtable = GETPOST('MEMBER_SHOW_TABLE'); $showvoteallowed = GETPOST('MEMBER_SHOW_VOTE_ALLOWED'); $payonline = GETPOST('MEMBER_NEWFORM_PAYONLINE'); - $forcetype = GETPOST('MEMBER_NEWFORM_FORCETYPE', 'int'); + $forcetype = GETPOSTINT('MEMBER_NEWFORM_FORCETYPE'); $forcemorphy = GETPOST('MEMBER_NEWFORM_FORCEMORPHY', 'aZ09'); $res = dolibarr_set_const($db, "MEMBER_ENABLE_PUBLIC", $public, 'chaine', 0, '', $conf->entity); @@ -220,6 +220,7 @@ if (getDolGlobalString('MEMBER_ENABLE_PUBLIC')) { print "\n"; // Force nature of member (mor/phy) + $morphys = array(); $morphys["phy"] = $langs->trans("Physical"); $morphys["mor"] = $langs->trans("Moral"); print ''; diff --git a/htdocs/adherents/agenda.php b/htdocs/adherents/agenda.php index ef217d65871..a42090f5b3c 100644 --- a/htdocs/adherents/agenda.php +++ b/htdocs/adherents/agenda.php @@ -38,13 +38,13 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; $langs->loadLangs(array('companies', 'members')); // Get Parameters -$id = GETPOST('id', 'int') ? GETPOST('id', 'int') : GETPOST('rowid', 'int'); +$id = GETPOSTINT('id') ? GETPOSTINT('id') : GETPOSTINT('rowid'); // Pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 diff --git a/htdocs/adherents/canvas/actions_adherentcard_common.class.php b/htdocs/adherents/canvas/actions_adherentcard_common.class.php index 66e53b58109..d4b06aa2b1f 100644 --- a/htdocs/adherents/canvas/actions_adherentcard_common.class.php +++ b/htdocs/adherents/canvas/actions_adherentcard_common.class.php @@ -148,7 +148,7 @@ abstract class ActionsAdherentCardCommon // Town $this->tpl['select_town'] = $formcompany->select_ziptown($this->object->town, 'town', array('zipcode', 'selectcountry_id', 'state_id')); - if (dol_strlen(trim($this->object->country_id)) == 0) { + if ($this->object->country_id == 0) { $this->object->country_id = $objsoc->country_id; } @@ -168,7 +168,7 @@ abstract class ActionsAdherentCardCommon } // Physical or Moral - $selectarray = array('0'=>$langs->trans("Physical"), '1'=>$langs->trans("Moral")); + $selectarray = array('0' => $langs->trans("Physical"), '1' => $langs->trans("Moral")); $this->tpl['select_morphy'] = $form->selectarray('morphy', $selectarray, $this->object->morphy, 0); } @@ -251,16 +251,16 @@ abstract class ActionsAdherentCardCommon $this->object->old_name = GETPOST("old_name"); $this->object->old_firstname = GETPOST("old_firstname"); - $this->object->fk_soc = GETPOST("fk_soc", 'int'); - $this->object->socid = GETPOST("fk_soc", 'int'); + $this->object->fk_soc = GETPOSTINT("fk_soc"); + $this->object->socid = GETPOSTINT("fk_soc"); $this->object->lastname = GETPOST("lastname"); $this->object->firstname = GETPOST("firstname"); $this->object->civility_id = GETPOST("civility_id"); $this->object->address = GETPOST("address"); $this->object->zip = GETPOST("zipcode"); $this->object->town = GETPOST("town"); - $this->object->country_id = GETPOST("country_id", 'int') ? GETPOST("country_id", 'int') : $mysoc->country_id; - $this->object->state_id = GETPOST("state_id", 'int'); + $this->object->country_id = GETPOSTINT("country_id") ? GETPOSTINT("country_id") : $mysoc->country_id; + $this->object->state_id = GETPOSTINT("state_id"); $this->object->phone_perso = GETPOST("phone_perso"); $this->object->phone_mobile = GETPOST("phone_mobile"); $this->object->email = GETPOST("email", 'alphawithlgt'); diff --git a/htdocs/adherents/canvas/default/tpl/adherentcard_create.tpl.php b/htdocs/adherents/canvas/default/tpl/adherentcard_create.tpl.php index 419b32f3c34..582d2eb2499 100644 --- a/htdocs/adherents/canvas/default/tpl/adherentcard_create.tpl.php +++ b/htdocs/adherents/canvas/default/tpl/adherentcard_create.tpl.php @@ -19,7 +19,7 @@ // Protection to avoid direct call of template if (empty($conf) || !is_object($conf)) { print "Error, template page can't be called as URL"; - exit; + exit(1); } ?> diff --git a/htdocs/adherents/canvas/default/tpl/adherentcard_edit.tpl.php b/htdocs/adherents/canvas/default/tpl/adherentcard_edit.tpl.php index 9056ff201e4..88631d23a40 100644 --- a/htdocs/adherents/canvas/default/tpl/adherentcard_edit.tpl.php +++ b/htdocs/adherents/canvas/default/tpl/adherentcard_edit.tpl.php @@ -19,7 +19,7 @@ // Protection to avoid direct call of template if (empty($conf) || !is_object($conf)) { print "Error, template page can't be called as URL"; - exit; + exit(1); } diff --git a/htdocs/adherents/canvas/default/tpl/adherentcard_view.tpl.php b/htdocs/adherents/canvas/default/tpl/adherentcard_view.tpl.php index 1ad9e4ff3d4..6417e6a32b2 100644 --- a/htdocs/adherents/canvas/default/tpl/adherentcard_view.tpl.php +++ b/htdocs/adherents/canvas/default/tpl/adherentcard_view.tpl.php @@ -19,7 +19,7 @@ // Protection to avoid direct call of template if (empty($conf) || !is_object($conf)) { print "Error, template page can't be called as URL"; - exit; + exit(1); } diff --git a/htdocs/adherents/card.php b/htdocs/adherents/card.php index 7f41b76e564..051e398512b 100644 --- a/htdocs/adherents/card.php +++ b/htdocs/adherents/card.php @@ -8,6 +8,7 @@ * Copyright (C) 2015-2018 Alexandre Spangaro * Copyright (C) 2018-2022 Frédéric France * Copyright (C) 2021 Waël Almoman + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -56,11 +57,11 @@ $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'alpha'); $backtopage = GETPOST('backtopage', 'alpha'); $confirm = GETPOST('confirm', 'alpha'); -$rowid = GETPOST('rowid', 'int'); -$id = GETPOST('id') ? GETPOST('id', 'int') : $rowid; -$typeid = GETPOST('typeid', 'int'); -$userid = GETPOST('userid', 'int'); -$socid = GETPOST('socid', 'int'); +$rowid = GETPOSTINT('rowid'); +$id = GETPOST('id') ? GETPOSTINT('id') : $rowid; +$typeid = GETPOSTINT('typeid'); +$userid = GETPOSTINT('userid'); +$socid = GETPOSTINT('socid'); $ref = GETPOST('ref', 'alpha'); if (isModEnabled('mailmanspip')) { @@ -130,7 +131,7 @@ $linkofpubliclist = DOL_MAIN_URL_ROOT.'/public/members/public_list.php'.((isModE * Actions */ -$parameters = array('id'=>$id, 'rowid'=>$id, 'objcanvas'=>$objcanvas, 'confirm'=>$confirm); +$parameters = array('id' => $id, 'rowid' => $id, 'objcanvas' => $objcanvas, 'confirm' => $confirm); $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); @@ -256,8 +257,8 @@ if (empty($reshook)) { require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; $birthdate = ''; - if (GETPOST("birthday", 'int') && GETPOST("birthmonth", 'int') && GETPOST("birthyear", 'int')) { - $birthdate = dol_mktime(12, 0, 0, GETPOST("birthmonth", 'int'), GETPOST("birthday", 'int'), GETPOST("birthyear", 'int')); + if (GETPOSTINT("birthday") && GETPOSTINT("birthmonth") && GETPOSTINT("birthyear")) { + $birthdate = dol_mktime(12, 0, 0, GETPOSTINT("birthmonth"), GETPOSTINT("birthday"), GETPOSTINT("birthyear")); } $lastname = GETPOST("lastname", 'alphanohtml'); $firstname = GETPOST("firstname", 'alphanohtml'); @@ -441,14 +442,14 @@ if (empty($reshook)) { } $birthdate = ''; if (GETPOSTISSET("birthday") && GETPOST("birthday") && GETPOSTISSET("birthmonth") && GETPOST("birthmonth") && GETPOSTISSET("birthyear") && GETPOST("birthyear")) { - $birthdate = dol_mktime(12, 0, 0, GETPOST("birthmonth", 'int'), GETPOST("birthday", 'int'), GETPOST("birthyear", 'int')); + $birthdate = dol_mktime(12, 0, 0, GETPOSTINT("birthmonth"), GETPOSTINT("birthday"), GETPOSTINT("birthyear")); } $datesubscription = ''; if (GETPOSTISSET("reday") && GETPOSTISSET("remonth") && GETPOSTISSET("reyear")) { - $datesubscription = dol_mktime(12, 0, 0, GETPOST("remonth", 'int'), GETPOST("reday", "int"), GETPOST("reyear", "int")); + $datesubscription = dol_mktime(12, 0, 0, GETPOSTINT("remonth"), GETPOSTINT("reday"), GETPOSTINT("reyear")); } - $typeid = GETPOST("typeid", 'int'); + $typeid = GETPOSTINT("typeid"); $civility_id = GETPOST("civility_id", 'alphanohtml'); $lastname = GETPOST("lastname", 'alphanohtml'); $firstname = GETPOST("firstname", 'alphanohtml'); @@ -457,8 +458,8 @@ if (empty($reshook)) { $address = GETPOST("address", 'alphanohtml'); $zip = GETPOST("zipcode", 'alphanohtml'); $town = GETPOST("town", 'alphanohtml'); - $state_id = GETPOST("state_id", 'int'); - $country_id = GETPOST("country_id", 'int'); + $state_id = GETPOSTINT("state_id"); + $country_id = GETPOSTINT("country_id"); $phone = GETPOST("phone", 'alpha'); $phone_perso = GETPOST("phone_perso", 'alpha'); @@ -471,8 +472,8 @@ if (empty($reshook)) { $morphy = GETPOST("morphy", 'alphanohtml'); $public = GETPOST("public", 'alphanohtml'); - $userid = GETPOST("userid", 'int'); - $socid = GETPOST("socid", 'int'); + $userid = GETPOSTINT("userid"); + $socid = GETPOSTINT("socid"); $default_lang = GETPOST('default_lang', 'alpha'); $object->civility_id = $civility_id; @@ -592,7 +593,7 @@ if (empty($reshook)) { $rowid = $object->id; $id = $object->id; - $backtopage = preg_replace('/__ID__/', $id, $backtopage); + $backtopage = preg_replace('/__ID__/', (string) $id, $backtopage); } else { $db->rollback(); @@ -625,7 +626,7 @@ if (empty($reshook)) { } if ($user->hasRight('adherent', 'supprimer') && $action == 'confirm_delete' && $confirm == 'yes') { - $result = $object->delete($id, $user); + $result = $object->delete($user); if ($result > 0) { setEventMessages($langs->trans("RecordDeleted"), null, 'errors'); if (!empty($backtopage) && !preg_match('/'.preg_quote($_SERVER["PHP_SELF"], '/').'/', $backtopage)) { @@ -699,11 +700,7 @@ if (empty($reshook)) { } } else { $error++; - if ($object->error) { - setEventMessages($object->error, $object->errors, 'errors'); - } else { - setEventMessages($object->error, $object->errors, 'errors'); - } + setEventMessages($object->error, $object->errors, 'errors'); } if (!$error) { @@ -771,11 +768,7 @@ if (empty($reshook)) { } else { $error++; - if ($object->error) { - setEventMessages($object->error, $object->errors, 'errors'); - } else { - setEventMessages($object->error, $object->errors, 'errors'); - } + setEventMessages($object->error, $object->errors, 'errors'); $action = ''; } } @@ -842,11 +835,7 @@ if (empty($reshook)) { } else { $error++; - if ($object->error) { - setEventMessages($object->error, $object->errors, 'errors'); - } else { - setEventMessages($object->error, $object->errors, 'errors'); - } + setEventMessages($object->error, $object->errors, 'errors'); $action = ''; } } @@ -926,10 +915,10 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { // Create mode if ($action == 'create') { $object->canvas = $canvas; - $object->state_id = GETPOST('state_id', 'int'); + $object->state_id = GETPOSTINT('state_id'); // We set country_id, country_code and country for the selected country - $object->country_id = GETPOST('country_id', 'int') ? GETPOST('country_id', 'int') : $mysoc->country_id; + $object->country_id = GETPOSTINT('country_id') ? GETPOSTINT('country_id') : $mysoc->country_id; if ($object->country_id) { $tmparray = getCountry($object->country_id, 'all'); $object->country_code = $tmparray['code']; @@ -1012,13 +1001,14 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { $listetype = $adht->liste_array(1); print img_picto('', $adht->picto, 'class="pictofixedwidth"'); if (count($listetype)) { - print $form->selectarray("typeid", $listetype, (GETPOST('typeid', 'int') ? GETPOST('typeid', 'int') : $typeid), (count($listetype) > 1 ? 1 : 0), 0, 0, '', 0, 0, 0, '', '', 1); + print $form->selectarray("typeid", $listetype, (GETPOSTINT('typeid') ? GETPOSTINT('typeid') : $typeid), (count($listetype) > 1 ? 1 : 0), 0, 0, '', 0, 0, 0, '', '', 1); } else { print ''.$langs->trans("NoTypeDefinedGoToSetup").''; } print "\n"; // Morphy + $morphys = array(); $morphys["phy"] = $langs->trans("Physical"); $morphys["mor"] = $langs->trans("Moral"); print ''.$langs->trans("MemberNature")."\n"; @@ -1030,7 +1020,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { // Civility print ''.$langs->trans("UserTitle").''; - print $formcompany->select_civility(GETPOST('civility_id', 'int') ? GETPOST('civility_id', 'int') : $object->civility_id, 'civility_id', 'maxwidth150', 1).''; + print $formcompany->select_civility(GETPOSTINT('civility_id') ? GETPOSTINT('civility_id') : $object->civility_id, 'civility_id', 'maxwidth150', 1).''; print ''; // Lastname @@ -1044,7 +1034,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { // Gender print ''.$langs->trans("Gender").''; print ''; - $arraygender = array('man'=>$langs->trans("Genderman"), 'woman'=>$langs->trans("Genderwoman"), 'other'=>$langs->trans("Genderother")); + $arraygender = array('man' => $langs->trans("Genderman"), 'woman' => $langs->trans("Genderwoman"), 'other' => $langs->trans("Genderother")); print $form->selectarray('gender', $arraygender, GETPOST('gender', 'alphanohtml'), 1, 0, 0, '', 0, 0, 0, '', '', 1); print ''; @@ -1087,7 +1077,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { print ''.$langs->trans('State').''; if ($soc->country_id) { print img_picto('', 'state', 'class="pictofixedwidth"'); - print $formcompany->select_state(GETPOSTISSET('state_id') ? GETPOST('state_id', 'int') : $soc->state_id, $soc->country_code); + print $formcompany->select_state(GETPOSTISSET('state_id') ? GETPOSTINT('state_id') : $soc->state_id, $soc->country_code); } else { print $countrynotdefined; } @@ -1118,7 +1108,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { // Birth Date print "".$langs->trans("DateOfBirth")."\n"; - print img_picto('', 'object_calendar', 'class="pictofixedwidth"').$form->selectDate(($object->birth ? $object->birth : -1), 'birth', '', '', 1, 'formsoc'); + print img_picto('', 'object_calendar', 'class="pictofixedwidth"').$form->selectDate(($object->birth ? $object->birth : -1), 'birth', 0, 0, 1, 'formsoc'); print "\n"; // Public profil @@ -1130,7 +1120,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { print "\n"; // Categories - if (isModEnabled('categorie') && $user->hasRight('categorie', 'lire')) { + if (isModEnabled('category') && $user->hasRight('categorie', 'lire')) { print ''.$form->editfieldkey("Categories", 'memcats', '', $object, 0).''; $cate_arbo = $form->select_all_categories(Categorie::TYPE_MEMBER, null, 'parent', null, null, 1); print img_picto('', 'category').$form->multiselectarray('memcats', $cate_arbo, GETPOST('memcats', 'array'), null, null, 'quatrevingtpercent widthcentpercentminusx', 0, 0); @@ -1167,9 +1157,10 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { $adht->fetch($object->typeid); // We set country_id, and country_code, country of the chosen country - $country = GETPOST('country', 'int'); + $country = GETPOSTINT('country'); if (!empty($country) || $object->country_id) { - $sql = "SELECT rowid, code, label from ".MAIN_DB_PREFIX."c_country where rowid = ".(!empty($country) ? $country : $object->country_id); + $sql = "SELECT rowid, code, label from ".MAIN_DB_PREFIX."c_country"; + $sql .= " WHERE rowid = ".(int) (!empty($country) ? $country : $object->country_id); $resql = $db->query($sql); if ($resql) { $obj = $db->fetch_object($resql); @@ -1240,7 +1231,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { // Type print ''.$langs->trans("Type").''; if ($user->hasRight('adherent', 'creer')) { - print $form->selectarray("typeid", $adht->liste_array(), (GETPOSTISSET("typeid") ? GETPOST("typeid", 'int') : $object->typeid), 0, 0, 0, '', 0, 0, 0, '', '', 1); + print $form->selectarray("typeid", $adht->liste_array(), (GETPOSTISSET("typeid") ? GETPOSTINT("typeid") : $object->typeid), 0, 0, 0, '', 0, 0, 0, '', '', 1); } else { print $adht->getNomUrl(1); print ''; @@ -1274,7 +1265,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { // Gender print ''.$langs->trans("Gender").''; print ''; - $arraygender = array('man'=>$langs->trans("Genderman"), 'woman'=>$langs->trans("Genderwoman"), 'other'=>$langs->trans("Genderother")); + $arraygender = array('man' => $langs->trans("Genderman"), 'woman' => $langs->trans("Genderwoman"), 'other' => $langs->trans("Genderother")); print $form->selectarray('gender', $arraygender, GETPOSTISSET('gender') ? GETPOST('gender', 'alphanohtml') : $object->gender, 1, 0, 0, '', 0, 0, 0, '', '', 1); print ''; @@ -1364,7 +1355,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { // Birth Date print "".$langs->trans("DateOfBirth")."\n"; - print img_picto('', 'object_calendar', 'class="pictofixedwidth"').$form->selectDate(($object->birth ? $object->birth : -1), 'birth', '', '', 1, 'formsoc'); + print img_picto('', 'object_calendar', 'class="pictofixedwidth"').$form->selectDate(($object->birth ? $object->birth : -1), 'birth', 0, 0, 1, 'formsoc'); print "\n"; // Default language @@ -1384,7 +1375,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { print "\n"; // Categories - if (isModEnabled('categorie') && $user->hasRight('categorie', 'lire')) { + if (isModEnabled('category') && $user->hasRight('categorie', 'lire')) { print ''.$form->editfieldkey("Categories", 'memcats', '', $object, 0).''; print ''; $cate_arbo = $form->select_all_categories(Categorie::TYPE_MEMBER, null, null, null, null, 1); @@ -1479,7 +1470,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { ); if (isModEnabled('societe') && $object->socid > 0) { $object->fetch_thirdparty(); - $formquestion[] = array('label' => $langs->trans("UserWillBe"), 'type' => 'radio', 'name' => 'internalorexternal', 'default'=>'external', 'values' => array('external'=>$langs->trans("External").' - '.$langs->trans("LinkedToDolibarrThirdParty").' '.$object->thirdparty->getNomUrl(1, '', 0, 1), 'internal'=>$langs->trans("Internal"))); + $formquestion[] = array('label' => $langs->trans("UserWillBe"), 'type' => 'radio', 'name' => 'internalorexternal', 'default' => 'external', 'values' => array('external' => $langs->trans("External").' - '.$langs->trans("LinkedToDolibarrThirdParty").' '.$object->thirdparty->getNomUrl(1, '', 0, 1), 'internal' => $langs->trans("Internal"))); } $text = ''; if (isModEnabled('societe') && $object->socid <= 0) { @@ -1562,6 +1553,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { $helpcontent .= "
"; $helpcontent .= ''.$langs->trans("Content").':
'; $helpcontent .= dol_htmlentitiesbr($texttosend)."\n"; + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder $label = $form->textwithpicto($tmp, $helpcontent, 1, 'help'); // Create form popup @@ -1570,10 +1562,10 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { $formquestion[] = array('type' => 'checkbox', 'name' => 'send_mail', 'label' => $label, 'value' => (getDolGlobalString('ADHERENT_DEFAULT_SENDINFOBYMAIL') ? true : false)); } if (isModEnabled('mailman') && getDolGlobalString('ADHERENT_USE_MAILMAN')) { - $formquestion[] = array('type'=>'other', 'label'=>$langs->transnoentitiesnoconv("SynchroMailManEnabled"), 'value'=>''); + $formquestion[] = array('type' => 'other', 'label' => $langs->transnoentitiesnoconv("SynchroMailManEnabled"), 'value' => ''); } if (isModEnabled('mailman') && getDolGlobalString('ADHERENT_USE_SPIP')) { - $formquestion[] = array('type'=>'other', 'label'=>$langs->transnoentitiesnoconv("SynchroSpipEnabled"), 'value'=>''); + $formquestion[] = array('type' => 'other', 'label' => $langs->transnoentitiesnoconv("SynchroSpipEnabled"), 'value' => ''); } print $form->formconfirm("card.php?rowid=".$id, $langs->trans("ValidateMember"), $langs->trans("ConfirmValidateMember"), "confirm_valid", $formquestion, 'yes', 1, 220); } @@ -1625,6 +1617,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { $helpcontent .= "
"; $helpcontent .= ''.$langs->trans("Content").':
'; $helpcontent .= dol_htmlentitiesbr($texttosend)."\n"; + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder $label = $form->textwithpicto($tmp, $helpcontent, 1, 'help'); // Create an array @@ -1685,6 +1678,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { $helpcontent .= "
"; $helpcontent .= ''.$langs->trans("Content").':
'; $helpcontent .= dol_htmlentitiesbr($texttosend)."\n"; + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder $label = $form->textwithpicto($tmp, $helpcontent, 1, 'help'); // Create an array @@ -1813,7 +1807,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { print ''; // Tags / Categories - if (isModEnabled('categorie') && $user->hasRight('categorie', 'lire')) { + if (isModEnabled('category') && $user->hasRight('categorie', 'lire')) { print ''; print ''; print ''; // Morphy diff --git a/htdocs/adherents/type_ldap.php b/htdocs/adherents/type_ldap.php index bd202e5a21a..88301150f13 100644 --- a/htdocs/adherents/type_ldap.php +++ b/htdocs/adherents/type_ldap.php @@ -33,7 +33,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/ldap.lib.php'; // Load translation files required by the page $langs->loadLangs(array("admin", "members", "ldap")); -$id = GETPOST('rowid', 'int'); +$id = GETPOSTINT('rowid'); $action = GETPOST('action', 'aZ09'); // Security check diff --git a/htdocs/adherents/type_translation.php b/htdocs/adherents/type_translation.php index 55ee3bbd697..4dd37b89e24 100644 --- a/htdocs/adherents/type_translation.php +++ b/htdocs/adherents/type_translation.php @@ -35,7 +35,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formadmin.class.php'; // Load translation files required by the page $langs->loadLangs(array('members', 'languages')); -$id = GETPOST('rowid', 'int') ? GETPOST('rowid', 'int') : GETPOST('id', 'int'); +$id = GETPOSTINT('rowid') ? GETPOSTINT('rowid') : GETPOSTINT('id'); $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'alpha'); $ref = GETPOST('ref', 'alphanohtml'); @@ -279,7 +279,7 @@ if ($action == 'create' && $user->hasRight('adherent', 'configurer')) { print ''; print ''; print ''; - print ''; + print ''; print dol_get_fiche_head(); diff --git a/htdocs/adherents/vcard.php b/htdocs/adherents/vcard.php index cb8bd1603bb..56f82a7665d 100644 --- a/htdocs/adherents/vcard.php +++ b/htdocs/adherents/vcard.php @@ -4,6 +4,7 @@ * Copyright (C) 2005-2012 Regis Houssin * Copyright (C) 2020 Tobias Sekan * Copyright (C) 2020-2021 Frédéric France + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -31,7 +32,7 @@ require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php'; require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/vcard.class.php'; -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alphanohtml'); $object = new Adherent($db); @@ -98,6 +99,7 @@ $v->setPhoneNumber($object->fax, "TYPE=WORK;FAX"); $country = $object->country_code ? $object->country : ''; $v->setAddress("", "", $object->address, $object->town, $object->state, $object->zip, $country, "TYPE=WORK;POSTAL"); +// @phan-suppress-next-line PhanDeprecatedFunction (setLabel is the old method, new is setAddress) $v->setLabel("", "", $object->address, $object->town, $object->state, $object->zip, $country, "TYPE=WORK"); $v->setEmail($object->email); diff --git a/htdocs/admin/accountant.php b/htdocs/admin/accountant.php index 66a1aa7a3b1..f225f899ee8 100644 --- a/htdocs/admin/accountant.php +++ b/htdocs/admin/accountant.php @@ -58,10 +58,10 @@ if (($action == 'update' && !GETPOST("cancel", 'alpha')) dolibarr_set_const($db, "MAIN_INFO_ACCOUNTANT_ADDRESS", GETPOST("address", 'alphanohtml'), 'chaine', 0, '', $conf->entity); dolibarr_set_const($db, "MAIN_INFO_ACCOUNTANT_TOWN", GETPOST("town", 'alphanohtml'), 'chaine', 0, '', $conf->entity); dolibarr_set_const($db, "MAIN_INFO_ACCOUNTANT_ZIP", GETPOST("zipcode", 'alphanohtml'), 'chaine', 0, '', $conf->entity); - dolibarr_set_const($db, "MAIN_INFO_ACCOUNTANT_STATE", GETPOST("state_id", 'int'), 'chaine', 0, '', $conf->entity); + dolibarr_set_const($db, "MAIN_INFO_ACCOUNTANT_STATE", GETPOSTINT("state_id"), 'chaine', 0, '', $conf->entity); dolibarr_set_const($db, "MAIN_INFO_ACCOUNTANT_REGION", GETPOST("region_code", 'alphanohtml'), 'chaine', 0, '', $conf->entity); - dolibarr_set_const($db, "MAIN_INFO_ACCOUNTANT_COUNTRY", GETPOST('country_id', 'int'), 'chaine', 0, '', $conf->entity); - dolibarr_set_const($db, "MAIN_INFO_ACCOUNTANT_PHONE", GETPOST("tel", 'alphanohtml'), 'chaine', 0, '', $conf->entity); + dolibarr_set_const($db, "MAIN_INFO_ACCOUNTANT_COUNTRY", GETPOSTINT('country_id'), 'chaine', 0, '', $conf->entity); + dolibarr_set_const($db, "MAIN_INFO_ACCOUNTANT_PHONE", GETPOST("phone", 'alphanohtml'), 'chaine', 0, '', $conf->entity); dolibarr_set_const($db, "MAIN_INFO_ACCOUNTANT_FAX", GETPOST("fax", 'alphanohtml'), 'chaine', 0, '', $conf->entity); dolibarr_set_const($db, "MAIN_INFO_ACCOUNTANT_MAIL", GETPOST("mail", 'alphanohtml'), 'chaine', 0, '', $conf->entity); dolibarr_set_const($db, "MAIN_INFO_ACCOUNTANT_WEB", GETPOST("web", 'alphanohtml'), 'chaine', 0, '', $conf->entity); @@ -138,7 +138,7 @@ print ''."\n"; // State print ''."\n"; // Telephone print ''; +print ''; print ''."\n"; // Fax diff --git a/htdocs/admin/agenda_extsites.php b/htdocs/admin/agenda_extsites.php index 0dca3ecbf1c..3f21267b451 100644 --- a/htdocs/admin/agenda_extsites.php +++ b/htdocs/admin/agenda_extsites.php @@ -4,6 +4,7 @@ * Copyright (C) 2015 Jean-François Ferry * Copyright (C) 2016 Raphaël Doursenaud * Copyright (C) 2021 Frédéric France + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -129,6 +130,7 @@ if (preg_match('/set_(.*)/', $action, $reg)) { } //print '-name='.$name.'-color='.$color; + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition $res = dolibarr_set_const($db, 'AGENDA_EXT_NAME'.$i, $name, 'chaine', 0, '', $conf->entity); if (!($res > 0)) { $error++; @@ -154,7 +156,7 @@ if (preg_match('/set_(.*)/', $action, $reg)) { // Save nb of agenda if (!$error) { - $res = dolibarr_set_const($db, 'AGENDA_EXT_NB', trim(GETPOST('AGENDA_EXT_NB', 'int')), 'chaine', 0, '', $conf->entity); + $res = dolibarr_set_const($db, 'AGENDA_EXT_NB', GETPOSTINT('AGENDA_EXT_NB'), 'chaine', 0, '', $conf->entity); if (!($res > 0)) { $error++; } @@ -205,10 +207,10 @@ print "
\n"; $selectedvalue = getDolGlobalInt('AGENDA_DISABLE_EXT'); -if ($selectedvalue==1) { - $selectedvalue=0; +if ($selectedvalue == 1) { + $selectedvalue = 0; } else { - $selectedvalue=1; + $selectedvalue = 1; } print "
'.$langs->trans("Categories").''; print $form->showCategories($object->id, Categorie::TYPE_MEMBER, 1); diff --git a/htdocs/adherents/class/adherent.class.php b/htdocs/adherents/class/adherent.class.php index 73e60632add..c6ce7429708 100644 --- a/htdocs/adherents/class/adherent.class.php +++ b/htdocs/adherents/class/adherent.class.php @@ -7,7 +7,7 @@ * Copyright (C) 2009-2017 Regis Houssin * Copyright (C) 2014-2018 Alexandre Spangaro * Copyright (C) 2015 Marcos García - * Copyright (C) 2015-2024 Frédéric France + * Copyright (C) 2015-2024 Frédéric France * Copyright (C) 2015 Raphaël Doursenaud * Copyright (C) 2016 Juanjo Menent * Copyright (C) 2018-2019 Thibault FOUCART @@ -15,6 +15,7 @@ * Copyright (C) 2020 Josep Lluís Amador * Copyright (C) 2021 Waël Almoman * Copyright (C) 2021 Philippe Grand + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -74,7 +75,9 @@ class Adherent extends CommonObject */ public $picto = 'member'; - + /** + * @var string[] array of messages + */ public $mesgs; /** @@ -217,6 +220,9 @@ class Adherent extends CommonObject */ public $gender; + /** + * @var int|string date of birth + */ public $birth; /** @@ -249,22 +255,49 @@ class Adherent extends CommonObject // Fields loaded by fetch_subscriptions() from member table + /** + * @var int|string date + */ public $first_subscription_date; + /** + * @var int|string date + */ public $first_subscription_date_start; + /** + * @var int|string date + */ public $first_subscription_date_end; + /** + * @var int|string date + */ public $first_subscription_amount; + /** + * @var int|string date + */ public $last_subscription_date; + /** + * @var int|string date + */ public $last_subscription_date_start; + /** + * @var int|string date + */ public $last_subscription_date_end; + /** + * @var int|string date + */ public $last_subscription_amount; + /** + * @var array + */ public $subscriptions = array(); /** @@ -283,22 +316,22 @@ class Adherent extends CommonObject /** - * @var array fields + * @var array|string,position:int,notnull?:int,visible:int,noteditable?:int,default?:string,index?:int,foreignkey?:string,searchall?:int,isameasure?:int,css?:string,csslist?:string,help?:string,showoncombobox?:int,disabled?:int,arrayofkeyval?:array,comment?:string}> Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. */ public $fields = array( 'rowid' => array('type' => 'integer', 'label' => 'TechnicalID', 'enabled' => 1, 'visible' => -1, 'notnull' => 1, 'position' => 10), - 'ref' => array('type' => 'varchar(30)', 'label' => 'Ref', 'default' => 1, 'enabled' => 1, 'visible' => 1, 'notnull' => 1, 'position' => 12, 'index' => 1), - 'entity' => array('type' => 'integer', 'label' => 'Entity', 'default' => 1, 'enabled' => 1, 'visible' => -2, 'notnull' => 1, 'position' => 15, 'index' => 1), + 'ref' => array('type' => 'varchar(30)', 'label' => 'Ref', 'default' => '1', 'enabled' => 1, 'visible' => 1, 'notnull' => 1, 'position' => 12, 'index' => 1), + 'entity' => array('type' => 'integer', 'label' => 'Entity', 'default' => '1', 'enabled' => 1, 'visible' => -2, 'notnull' => 1, 'position' => 15, 'index' => 1), 'ref_ext' => array('type' => 'varchar(128)', 'label' => 'Ref ext', 'enabled' => 1, 'visible' => 0, 'position' => 20), 'civility' => array('type' => 'varchar(6)', 'label' => 'Civility', 'enabled' => 1, 'visible' => -1, 'position' => 25), - 'lastname' => array('type' => 'varchar(50)', 'label' => 'Lastname', 'enabled' => 1, 'visible' => 1, 'position' => 30, 'showoncombobox'=>1), - 'firstname' => array('type' => 'varchar(50)', 'label' => 'Firstname', 'enabled' => 1, 'visible' => 1, 'position' => 35, 'showoncombobox'=>1), + 'lastname' => array('type' => 'varchar(50)', 'label' => 'Lastname', 'enabled' => 1, 'visible' => 1, 'position' => 30, 'showoncombobox' => 1), + 'firstname' => array('type' => 'varchar(50)', 'label' => 'Firstname', 'enabled' => 1, 'visible' => 1, 'position' => 35, 'showoncombobox' => 1), 'login' => array('type' => 'varchar(50)', 'label' => 'Login', 'enabled' => 1, 'visible' => 1, 'position' => 40), 'pass' => array('type' => 'varchar(50)', 'label' => 'Pass', 'enabled' => 1, 'visible' => -1, 'position' => 45), 'pass_crypted' => array('type' => 'varchar(128)', 'label' => 'Pass crypted', 'enabled' => 1, 'visible' => -1, 'position' => 50), 'morphy' => array('type' => 'varchar(3)', 'label' => 'MemberNature', 'enabled' => 1, 'visible' => 1, 'notnull' => 1, 'position' => 55), 'fk_adherent_type' => array('type' => 'integer', 'label' => 'Fk adherent type', 'enabled' => 1, 'visible' => 1, 'notnull' => 1, 'position' => 60), - 'societe' => array('type' => 'varchar(128)', 'label' => 'Societe', 'enabled' => 1, 'visible' => 1, 'position' => 65, 'showoncombobox'=>2), + 'societe' => array('type' => 'varchar(128)', 'label' => 'Societe', 'enabled' => 1, 'visible' => 1, 'position' => 65, 'showoncombobox' => 2), 'fk_soc' => array('type' => 'integer:Societe:societe/class/societe.class.php', 'label' => 'ThirdParty', 'enabled' => 1, 'visible' => 1, 'position' => 70), 'address' => array('type' => 'text', 'label' => 'Address', 'enabled' => 1, 'visible' => -1, 'position' => 75), 'zip' => array('type' => 'varchar(10)', 'label' => 'Zip', 'enabled' => 1, 'visible' => -1, 'position' => 80), @@ -309,14 +342,14 @@ class Adherent extends CommonObject 'phone_perso' => array('type' => 'varchar(30)', 'label' => 'Phone perso', 'enabled' => 1, 'visible' => -1, 'position' => 120), 'phone_mobile' => array('type' => 'varchar(30)', 'label' => 'Phone mobile', 'enabled' => 1, 'visible' => -1, 'position' => 125), 'email' => array('type' => 'varchar(255)', 'label' => 'Email', 'enabled' => 1, 'visible' => 1, 'position' => 126), - 'url' =>array('type'=>'varchar(255)', 'label'=>'Url', 'enabled'=>1, 'visible'=>-1, 'position'=>127), + 'url' => array('type' => 'varchar(255)', 'label' => 'Url', 'enabled' => 1, 'visible' => -1, 'position' => 127), 'socialnetworks' => array('type' => 'text', 'label' => 'Socialnetworks', 'enabled' => 1, 'visible' => -1, 'position' => 128), 'birth' => array('type' => 'date', 'label' => 'DateOfBirth', 'enabled' => 1, 'visible' => -1, 'position' => 130), 'gender' => array('type' => 'varchar(10)', 'label' => 'Gender', 'enabled' => 1, 'visible' => -1, 'position' => 132), 'photo' => array('type' => 'varchar(255)', 'label' => 'Photo', 'enabled' => 1, 'visible' => -1, 'position' => 135), 'public' => array('type' => 'smallint(6)', 'label' => 'Public', 'enabled' => 1, 'visible' => -1, 'notnull' => 1, 'position' => 145), 'datefin' => array('type' => 'datetime', 'label' => 'DateEnd', 'enabled' => 1, 'visible' => 1, 'position' => 150), - 'default_lang' =>array('type'=>'varchar(6)', 'label'=>'Default lang', 'enabled'=>1, 'visible'=>-1, 'position'=> 153), + 'default_lang' => array('type' => 'varchar(6)', 'label' => 'Default lang', 'enabled' => 1, 'visible' => -1, 'position' => 153), 'note_public' => array('type' => 'text', 'label' => 'NotePublic', 'enabled' => 1, 'visible' => 0, 'position' => 155), 'note_private' => array('type' => 'text', 'label' => 'NotePrivate', 'enabled' => 1, 'visible' => 0, 'position' => 160), 'datevalid' => array('type' => 'datetime', 'label' => 'DateValidation', 'enabled' => 1, 'visible' => -1, 'position' => 165), @@ -458,7 +491,7 @@ class Adherent extends CommonObject */ public function makeSubstitution($text) { - global $conf, $langs; + global $langs; $birthday = dol_print_date($this->birth, 'day'); @@ -727,13 +760,13 @@ class Adherent extends CommonObject $this->lastname = trim($this->lastname) ? trim($this->lastname) : trim($this->lastname); $this->firstname = trim($this->firstname) ? trim($this->firstname) : trim($this->firstname); $this->gender = trim($this->gender); - $this->address = ($this->address ? $this->address : $this->address); - $this->zip = ($this->zip ? $this->zip : $this->zip); - $this->town = ($this->town ? $this->town : $this->town); - $this->country_id = ($this->country_id > 0 ? $this->country_id : $this->country_id); - $this->state_id = ($this->state_id > 0 ? $this->state_id : $this->state_id); - $this->note_public = ($this->note_public ? $this->note_public : $this->note_public); - $this->note_private = ($this->note_private ? $this->note_private : $this->note_private); + // $this->address = ($this->address ? $this->address : $this->address); + // $this->zip = ($this->zip ? $this->zip : $this->zip); + // $this->town = ($this->town ? $this->town : $this->town); + // $this->country_id = ($this->country_id > 0 ? $this->country_id : $this->country_id); + // $this->state_id = ($this->state_id > 0 ? $this->state_id : $this->state_id); + // $this->note_public = ($this->note_public ? $this->note_public : $this->note_public); + // $this->note_private = ($this->note_private ? $this->note_private : $this->note_private); $this->url = $this->url ? clean_url($this->url, 0) : ''; $this->setUpperOrLowerCase(); // Check parameters @@ -754,13 +787,13 @@ class Adherent extends CommonObject $sql .= ", login = ".($this->login ? "'".$this->db->escape($this->login)."'" : "null"); $sql .= ", societe = ".($this->company ? "'".$this->db->escape($this->company)."'" : ($this->societe ? "'".$this->db->escape($this->societe)."'" : "null")); if ($this->socid) { - $sql .= ", fk_soc = ".($this->socid > 0 ? $this->db->escape($this->socid) : "null"); // Must be modified only when creating from a third-party + $sql .= ", fk_soc = ".($this->socid > 0 ? (int) $this->socid : "null"); // Must be modified only when creating from a third-party } $sql .= ", address = ".($this->address ? "'".$this->db->escape($this->address)."'" : "null"); $sql .= ", zip = ".($this->zip ? "'".$this->db->escape($this->zip)."'" : "null"); $sql .= ", town = ".($this->town ? "'".$this->db->escape($this->town)."'" : "null"); - $sql .= ", country = ".($this->country_id > 0 ? $this->db->escape($this->country_id) : "null"); - $sql .= ", state_id = ".($this->state_id > 0 ? $this->db->escape($this->state_id) : "null"); + $sql .= ", country = ".($this->country_id > 0 ? (int) $this->country_id : "null"); + $sql .= ", state_id = ".($this->state_id > 0 ? (int) $this->state_id : "null"); $sql .= ", email = '".$this->db->escape($this->email)."'"; $sql .= ", url = ".(!empty($this->url) ? "'".$this->db->escape($this->url)."'" : "null"); $sql .= ", socialnetworks = ".($this->socialnetworks ? "'".$this->db->escape(json_encode($this->socialnetworks))."'" : "null"); @@ -771,9 +804,9 @@ class Adherent extends CommonObject $sql .= ", note_public = ".($this->note_public ? "'".$this->db->escape($this->note_public)."'" : "null"); $sql .= ", photo = ".($this->photo ? "'".$this->db->escape($this->photo)."'" : "null"); $sql .= ", public = '".$this->db->escape($this->public)."'"; - $sql .= ", statut = ".$this->db->escape($this->statut); + $sql .= ", statut = ".(int) $this->statut; $sql .= ", default_lang = ".(!empty($this->default_lang) ? "'".$this->db->escape($this->default_lang)."'" : "null"); - $sql .= ", fk_adherent_type = ".$this->db->escape($this->typeid); + $sql .= ", fk_adherent_type = ".(int) $this->typeid; $sql .= ", morphy = '".$this->db->escape($this->morphy)."'"; $sql .= ", birth = ".($this->birth ? "'".$this->db->idate($this->birth)."'" : "null"); @@ -1029,21 +1062,18 @@ class Adherent extends CommonObject /** * Fonction to delete a member and its data * - * @param int $rowid Id of member to delete * @param User $user User object * @param int $notrigger 1=Does not execute triggers, 0= execute triggers * @return int Return integer <0 if KO, 0=nothing to do, >0 if OK */ - public function delete($rowid, $user, $notrigger = 0) + public function delete($user, $notrigger = 0) { $result = 0; $error = 0; $errorflag = 0; // Check parameters - if (empty($rowid)) { - $rowid = $this->id; - } + $rowid = $this->id; $this->db->begin(); @@ -1284,7 +1314,7 @@ class Adherent extends CommonObject } // Add link to third party for current member - $sql = "UPDATE ".MAIN_DB_PREFIX."adherent SET fk_soc = ".($thirdpartyid > 0 ? $thirdpartyid : 'null'); + $sql = "UPDATE ".MAIN_DB_PREFIX."adherent SET fk_soc = ".($thirdpartyid > 0 ? (int) $thirdpartyid : 'null'); $sql .= " WHERE rowid = ".((int) $this->id); dol_syslog(get_class($this)."::setThirdPartyId", LOG_DEBUG); @@ -1832,6 +1862,7 @@ class Adherent extends CommonObject $vattouse = get_default_tva($mysoc, $mysoc, $idprodsubscription); } //print xx".$vattouse." - ".$mysoc." - ".$customer;exit; + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition $result = $invoice->addline($label, 0, 1, $vattouse, 0, 0, $idprodsubscription, 0, $datesubscription, '', 0, 0, '', 'TTC', $amount, 1); if ($result <= 0) { $this->error = $invoice->error; @@ -2257,7 +2288,7 @@ class Adherent extends CommonObject } $datas['address'] = '
'.$langs->trans("Address").': '.dol_format_address($this, 1, ' ', $langs); // show categories for this record only in ajax to not overload lists - if (isModEnabled('categorie') && !$nofetch) { + if (isModEnabled('category') && !$nofetch) { require_once DOL_DOCUMENT_ROOT . '/categories/class/categorie.class.php'; $form = new Form($this->db); $datas['categories'] = '
' . $form->showCategories($this->id, Categorie::TYPE_MEMBER, 1); @@ -2391,7 +2422,7 @@ class Adherent extends CommonObject } global $action; $hookmanager->initHooks(array($this->element . 'dao')); - $parameters = array('id'=>$this->id, 'getnomurl' => &$result); + $parameters = array('id' => $this->id, 'getnomurl' => &$result); $reshook = $hookmanager->executeHooks('getNomUrl', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks if ($reshook > 0) { $result = $hookmanager->resPrint; @@ -2996,7 +3027,7 @@ class Adherent extends CommonObject $blockingerrormsg = ''; - if (!isModEnabled('adherent')) { // Should not happen. If module disabled, cron job should not be visible. + if (!isModEnabled('member')) { // Should not happen. If module disabled, cron job should not be visible. $langs->load("agenda"); $this->output = $langs->trans('ModuleNotEnabled', $langs->transnoentitiesnoconv("Adherent")); return 0; @@ -3029,6 +3060,7 @@ class Adherent extends CommonObject $sql = 'SELECT rowid FROM '.MAIN_DB_PREFIX.'adherent'; $sql .= " WHERE entity = ".((int) $conf->entity); // Do not use getEntity('adherent').")" here, we want the batch to be on its entity only; + $sql .= " AND statut = 1"; $sql .= " AND datefin = '".$this->db->idate($datetosearchfor)."'"; //$sql .= " LIMIT 10000"; @@ -3245,7 +3277,7 @@ class Adherent extends CommonObject $return .= '
'; $return .= ''; if (property_exists($this, 'photo') || !empty($this->photo)) { - $return.= Form::showphoto('memberphoto', $this, 0, 60, 0, 'photokanban photoref photowithmargin photologintooltip', 'small', 0, 1); + $return .= Form::showphoto('memberphoto', $this, 0, 60, 0, 'photokanban photoref photowithmargin photologintooltip', 'small', 0, 1); } else { $return .= img_picto('', 'user'); } diff --git a/htdocs/adherents/class/adherent_type.class.php b/htdocs/adherents/class/adherent_type.class.php index b0a9d88eaef..aab2322d098 100644 --- a/htdocs/adherents/class/adherent_type.class.php +++ b/htdocs/adherents/class/adherent_type.class.php @@ -5,6 +5,7 @@ * Copyright (C) 2016 Charlie Benke * Copyright (C) 2018-2019 Thibault Foucart * Copyright (C) 2021 Waël Almoman + * Copyright (C) 2024 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -245,7 +246,7 @@ class AdherentType extends CommonObject } else { $sql2 = "INSERT INTO ".MAIN_DB_PREFIX."adherent_type_lang (fk_type, lang, label, description"; $sql2 .= ")"; - $sql2 .= " VALUES(".$this->id.",'".$this->db->escape($key)."','".$this->db->escape($this->multilangs["$key"]["label"])."',"; + $sql2 .= " VALUES(".((int) $this->id).",'".$this->db->escape($key)."','".$this->db->escape($this->multilangs["$key"]["label"])."',"; $sql2 .= " '".$this->db->escape($this->multilangs["$key"]["description"])."'"; $sql2 .= ")"; } @@ -394,7 +395,7 @@ class AdherentType extends CommonObject $sql .= "libelle = '".$this->db->escape($this->label)."',"; $sql .= "morphy = '".$this->db->escape($this->morphy)."',"; $sql .= "subscription = '".$this->db->escape($this->subscription)."',"; - $sql .= "amount = ".((empty($this->amount) && $this->amount == '') ? 'null' : ((float) $this->amount)).","; + $sql .= "amount = ".((empty($this->amount) && $this->amount == '') ? "null" : ((float) $this->amount)).","; $sql .= "caneditamount = ".((int) $this->caneditamount).","; $sql .= "duration = '".$this->db->escape($this->duration_value.$this->duration_unit)."',"; $sql .= "note = '".$this->db->escape($this->note_public)."',"; @@ -883,7 +884,7 @@ class AdherentType extends CommonObject * Used to build previews or test instances. * id must be 0 if object instance is a specimen. * - * @return void + * @return int */ public function initAsSpecimen() { @@ -907,6 +908,8 @@ class AdherentType extends CommonObject $this->members = array( $user->id => $user ); + + return 1; } /** diff --git a/htdocs/adherents/class/api_members.class.php b/htdocs/adherents/class/api_members.class.php index a47017446bb..941a685d326 100644 --- a/htdocs/adherents/class/api_members.class.php +++ b/htdocs/adherents/class/api_members.class.php @@ -3,6 +3,7 @@ * Copyright (C) 2017 Regis Houssin * Copyright (C) 2020 Thibault FOUCART * Copyright (C) 2020 Frédéric France + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -24,6 +25,8 @@ require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php'; require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php'; require_once DOL_DOCUMENT_ROOT.'/adherents/class/subscription.class.php'; require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; +require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent_type.class.php'; + /** * API class for members @@ -313,9 +316,9 @@ class Members extends DolibarrApi /** * Update member * - * @param int $id ID of member to update - * @param array $request_data Datas - * @return Object Updated object + * @param int $id ID of member to update + * @param array $request_data Datas + * @return Object Updated object * * @throws RestException 403 Access denied * @throws RestException 404 Member not found @@ -406,7 +409,7 @@ class Members extends DolibarrApi } - $res = $member->delete($member->id, DolibarrApiAccess::$user); + $res = $member->delete(DolibarrApiAccess::$user); if ($res < 0) { throw new RestException(500, "Can't delete, error occurs"); } @@ -430,7 +433,12 @@ class Members extends DolibarrApi private function _validate($data) { $member = array(); - foreach (Members::$FIELDS as $field) { + + $mandatoryfields = array( + 'morphy', + 'typeid' + ); + foreach ($mandatoryfields as $field) { if (!isset($data[$field])) { throw new RestException(400, "$field field missing"); } @@ -452,18 +460,63 @@ class Members extends DolibarrApi $object = parent::_cleanObjectDatas($object); // Remove the subscriptions because they are handled as a subresource. - unset($object->subscriptions); - unset($object->fk_incoterms); - unset($object->label_incoterms); - unset($object->location_incoterms); - unset($object->fk_delivery_address); - unset($object->shipping_method_id); + if ($object instanceof Adherent) { + unset($object->subscriptions); + unset($object->fk_incoterms); + unset($object->label_incoterms); + unset($object->location_incoterms); + unset($object->fk_delivery_address); + unset($object->shipping_method_id); - unset($object->total_ht); - unset($object->total_ttc); - unset($object->total_tva); - unset($object->total_localtax1); - unset($object->total_localtax2); + unset($object->total_ht); + unset($object->total_ttc); + unset($object->total_tva); + unset($object->total_localtax1); + unset($object->total_localtax2); + } + + if ($object instanceof AdherentType) { + unset($object->array_options); + unset($object->linkedObjectsIds); + unset($object->context); + unset($object->canvas); + unset($object->fk_project); + unset($object->contact); + unset($object->contact_id); + unset($object->thirdparty); + unset($object->user); + unset($object->origin); + unset($object->origin_id); + unset($object->ref_ext); + unset($object->country); + unset($object->country_id); + unset($object->country_code); + unset($object->barcode_type); + unset($object->barcode_type_code); + unset($object->barcode_type_label); + unset($object->barcode_type_coder); + unset($object->mode_reglement_id); + unset($object->cond_reglement_id); + unset($object->cond_reglement); + unset($object->fk_delivery_address); + unset($object->shipping_method_id); + unset($object->model_pdf); + unset($object->fk_account); + unset($object->note_public); + unset($object->note_private); + unset($object->fk_incoterms); + unset($object->label_incoterms); + unset($object->location_incoterms); + unset($object->name); + unset($object->lastname); + unset($object->firstname); + unset($object->civility_id); + unset($object->total_ht); + unset($object->total_tva); + unset($object->total_localtax1); + unset($object->total_localtax2); + unset($object->total_ttc); + } return $object; } @@ -483,8 +536,6 @@ class Members extends DolibarrApi */ public function getSubscriptions($id) { - $obj_ret = array(); - if (!DolibarrApiAccess::$user->hasRight('adherent', 'cotisation', 'lire')) { throw new RestException(403); } @@ -565,4 +616,260 @@ class Members extends DolibarrApi return $result; } + + + + + /** + * Get properties of a member type object + * + * Return an array with member type information + * + * @param int $id ID of member type + * @return Object Object with cleaned properties + * + * @url GET /types/{id} + * + * @throws RestException 403 Access denied + * @throws RestException 404 No Member Type found + */ + public function getType($id) + { + if (!DolibarrApiAccess::$user->hasRight('adherent', 'lire')) { + throw new RestException(403); + } + + $membertype = new AdherentType($this->db); + $result = $membertype->fetch($id); + if (!$result) { + throw new RestException(404, 'member type not found'); + } + + if (!DolibarrApi::_checkAccessToResource('member', $membertype->id, 'adherent_type')) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } + + return $this->_cleanObjectDatas($membertype); + } + + /** + * List members types + * + * Get a list of members types + * + * @param string $sortfield Sort field + * @param string $sortorder Sort order + * @param int $limit Limit for list + * @param int $page Page number + * @param string $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.libelle:like:'SO-%') and (t.subscription:=:'1')" + * @param string $properties Restrict the data returned to these properties. Ignored if empty. Comma separated list of properties names + * @return array Array of member type objects + * + * @url GET /types/ + * + * @throws RestException 403 Access denied + * @throws RestException 404 No Member Type found + * @throws RestException 503 Error when retrieving Member list + */ + public function indexType($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $sqlfilters = '', $properties = '') + { + $obj_ret = array(); + + if (!DolibarrApiAccess::$user->hasRight('adherent', 'lire')) { + throw new RestException(403); + } + + $sql = "SELECT t.rowid"; + $sql .= " FROM ".MAIN_DB_PREFIX."adherent_type AS t LEFT JOIN ".MAIN_DB_PREFIX."adherent_type_extrafields AS ef ON (ef.fk_object = t.rowid)"; // Modification VMR Global Solutions to include extrafields as search parameters in the API GET call, so we will be able to filter on extrafields + $sql .= ' WHERE t.entity IN ('.getEntity('member_type').')'; + + // Add sql filters + if ($sqlfilters) { + $errormessage = ''; + $sql .= forgeSQLFromUniversalSearchCriteria($sqlfilters, $errormessage); + if ($errormessage) { + throw new RestException(503, 'Error when validating parameter sqlfilters -> '.$errormessage); + } + } + + $sql .= $this->db->order($sortfield, $sortorder); + if ($limit) { + if ($page < 0) { + $page = 0; + } + $offset = $limit * $page; + + $sql .= $this->db->plimit($limit + 1, $offset); + } + + $result = $this->db->query($sql); + if ($result) { + $i = 0; + $num = $this->db->num_rows($result); + $min = min($num, ($limit <= 0 ? $num : $limit)); + while ($i < $min) { + $obj = $this->db->fetch_object($result); + $membertype = new AdherentType($this->db); + if ($membertype->fetch($obj->rowid)) { + $obj_ret[] = $this->_filterObjectProperties($this->_cleanObjectDatas($membertype), $properties); + } + $i++; + } + } else { + throw new RestException(503, 'Error when retrieve member type list : '.$this->db->lasterror()); + } + + return $obj_ret; + } + + /** + * Create member type object + * + * @param array $request_data Request data + * @return int ID of member type + * + * @url POST /types/ + * + * @throws RestException 403 Access denied + * @throws RestException 500 Error when creating Member Type + */ + public function postType($request_data = null) + { + if (!DolibarrApiAccess::$user->hasRight('adherent', 'configurer')) { + throw new RestException(403); + } + // Check mandatory fields + $result = $this->_validateType($request_data); + + $membertype = new AdherentType($this->db); + foreach ($request_data as $field => $value) { + if ($field === 'caller') { + // Add a mention of caller so on trigger called after action, we can filter to avoid a loop if we try to sync back again with the caller + $membertype->context['caller'] = $request_data['caller']; + continue; + } + + $membertype->$field = $value; + } + if ($membertype->create(DolibarrApiAccess::$user) < 0) { + throw new RestException(500, 'Error creating member type', array_merge(array($membertype->error), $membertype->errors)); + } + return $membertype->id; + } + + /** + * Update member type + * + * @param int $id ID of member type to update + * @param array $request_data Datas + * @return Object Updated object + * + * @url PUT /types/{id} + * + * @throws RestException 403 Access denied + * @throws RestException 404 No Member Type found + * @throws RestException 500 Error when updating Member Type + */ + public function putType($id, $request_data = null) + { + if (!DolibarrApiAccess::$user->hasRight('adherent', 'configurer')) { + throw new RestException(403); + } + + $membertype = new AdherentType($this->db); + $result = $membertype->fetch($id); + if (!$result) { + throw new RestException(404, 'member type not found'); + } + + if (!DolibarrApi::_checkAccessToResource('member', $membertype->id, 'adherent_type')) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } + + foreach ($request_data as $field => $value) { + if ($field == 'id') { + continue; + } + if ($field === 'caller') { + // Add a mention of caller so on trigger called after action, we can filter to avoid a loop if we try to sync back again with the caller + $membertype->context['caller'] = $request_data['caller']; + continue; + } + + // Process the status separately because it must be updated using + // the validate(), resiliate() and exclude() methods of the class AdherentType. + $membertype->$field = $value; + } + + // If there is no error, update() returns the number of affected rows + // so if the update is a no op, the return value is zero. + if ($membertype->update(DolibarrApiAccess::$user) >= 0) { + return $this->get($id); + } else { + throw new RestException(500, 'Error when updating member type: '.$membertype->error); + } + } + + /** + * Delete member type + * + * @param int $id member type ID + * @return array + * + * @url GET /types/{id} + * + * @throws RestException 403 Access denied + * @throws RestException 404 No Member Type found + * @throws RestException 500 Error when deleting Member Type + */ + public function deleteType($id) + { + if (!DolibarrApiAccess::$user->hasRight('adherent', 'configurer')) { + throw new RestException(403); + } + $membertype = new AdherentType($this->db); + $result = $membertype->fetch($id); + if (!$result) { + throw new RestException(404, 'member type not found'); + } + + if (!DolibarrApi::_checkAccessToResource('member', $membertype->id, 'adherent_type')) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } + + $res = $membertype->delete(DolibarrApiAccess::$user); + if ($res < 0) { + throw new RestException(500, "Can't delete, error occurs"); + } + + return array( + 'success' => array( + 'code' => 200, + 'message' => 'Member type deleted' + ) + ); + } + + /** + * Validate fields before creating an object + * + * @param array|null $data Data to validate + * @return array + * + * @throws RestException + */ + private function _validateType($data) + { + $membertype = array(); + + $mandatoryfields = array('label'); + + foreach ($mandatoryfields as $field) { + if (!isset($data[$field])) { + throw new RestException(400, "$field field missing"); + } + $membertype[$field] = $data[$field]; + } + return $membertype; + } } diff --git a/htdocs/adherents/class/api_memberstypes.class.php b/htdocs/adherents/class/api_memberstypes.class.php deleted file mode 100644 index f055542d6b4..00000000000 --- a/htdocs/adherents/class/api_memberstypes.class.php +++ /dev/null @@ -1,343 +0,0 @@ - - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -use Luracast\Restler\RestException; - -require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent_type.class.php'; - -/** - * API class for members types - * - * @access protected - * @class DolibarrApiAccess {@requires user,external} - */ -class MembersTypes extends DolibarrApi -{ - /** - * @var array $FIELDS Mandatory fields, checked when create and update object - */ - public static $FIELDS = array( - 'label', - ); - - /** - * Constructor - */ - public function __construct() - { - global $db, $conf; - $this->db = $db; - } - - /** - * Get properties of a member type object - * - * Return an array with member type information - * - * @param int $id ID of member type - * @return Object Object with cleaned properties - * - * @throws RestException 403 Access denied - * @throws RestException 404 No Member Type found - */ - public function get($id) - { - if (!DolibarrApiAccess::$user->hasRight('adherent', 'lire')) { - throw new RestException(403); - } - - $membertype = new AdherentType($this->db); - $result = $membertype->fetch($id); - if (!$result) { - throw new RestException(404, 'member type not found'); - } - - if (!DolibarrApi::_checkAccessToResource('member', $membertype->id, 'adherent_type')) { - throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); - } - - return $this->_cleanObjectDatas($membertype); - } - - /** - * List members types - * - * Get a list of members types - * - * @param string $sortfield Sort field - * @param string $sortorder Sort order - * @param int $limit Limit for list - * @param int $page Page number - * @param string $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.libelle:like:'SO-%') and (t.subscription:=:'1')" - * @param string $properties Restrict the data returned to these properties. Ignored if empty. Comma separated list of properties names - * @return array Array of member type objects - * - * @throws RestException 403 Access denied - * @throws RestException 404 No Member Type found - * @throws RestException 503 Error when retrieving Member list - */ - public function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $sqlfilters = '', $properties = '') - { - global $db, $conf; - - $obj_ret = array(); - - if (!DolibarrApiAccess::$user->hasRight('adherent', 'lire')) { - throw new RestException(403); - } - - $sql = "SELECT t.rowid"; - $sql .= " FROM ".MAIN_DB_PREFIX."adherent_type AS t LEFT JOIN ".MAIN_DB_PREFIX."adherent_type_extrafields AS ef ON (ef.fk_object = t.rowid)"; // Modification VMR Global Solutions to include extrafields as search parameters in the API GET call, so we will be able to filter on extrafields - $sql .= ' WHERE t.entity IN ('.getEntity('member_type').')'; - - // Add sql filters - if ($sqlfilters) { - $errormessage = ''; - $sql .= forgeSQLFromUniversalSearchCriteria($sqlfilters, $errormessage); - if ($errormessage) { - throw new RestException(503, 'Error when validating parameter sqlfilters -> '.$errormessage); - } - } - - $sql .= $this->db->order($sortfield, $sortorder); - if ($limit) { - if ($page < 0) { - $page = 0; - } - $offset = $limit * $page; - - $sql .= $this->db->plimit($limit + 1, $offset); - } - - $result = $this->db->query($sql); - if ($result) { - $i = 0; - $num = $this->db->num_rows($result); - $min = min($num, ($limit <= 0 ? $num : $limit)); - while ($i < $min) { - $obj = $this->db->fetch_object($result); - $membertype = new AdherentType($this->db); - if ($membertype->fetch($obj->rowid)) { - $obj_ret[] = $this->_filterObjectProperties($this->_cleanObjectDatas($membertype), $properties); - } - $i++; - } - } else { - throw new RestException(503, 'Error when retrieve member type list : '.$this->db->lasterror()); - } - - return $obj_ret; - } - - /** - * Create member type object - * - * @param array $request_data Request data - * @return int ID of member type - * - * @throws RestException 403 Access denied - * @throws RestException 500 Error when creating Member Type - */ - public function post($request_data = null) - { - if (!DolibarrApiAccess::$user->hasRight('adherent', 'configurer')) { - throw new RestException(403); - } - // Check mandatory fields - $result = $this->_validate($request_data); - - $membertype = new AdherentType($this->db); - foreach ($request_data as $field => $value) { - if ($field === 'caller') { - // Add a mention of caller so on trigger called after action, we can filter to avoid a loop if we try to sync back again with the caller - $membertype->context['caller'] = $request_data['caller']; - continue; - } - - $membertype->$field = $value; - } - if ($membertype->create(DolibarrApiAccess::$user) < 0) { - throw new RestException(500, 'Error creating member type', array_merge(array($membertype->error), $membertype->errors)); - } - return $membertype->id; - } - - /** - * Update member type - * - * @param int $id ID of member type to update - * @param array $request_data Datas - * @return int - * - * @throws RestException 403 Access denied - * @throws RestException 404 No Member Type found - * @throws RestException 500 Error when updating Member Type - */ - public function put($id, $request_data = null) - { - if (!DolibarrApiAccess::$user->hasRight('adherent', 'configurer')) { - throw new RestException(403); - } - - $membertype = new AdherentType($this->db); - $result = $membertype->fetch($id); - if (!$result) { - throw new RestException(404, 'member type not found'); - } - - if (!DolibarrApi::_checkAccessToResource('member', $membertype->id, 'adherent_type')) { - throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); - } - - foreach ($request_data as $field => $value) { - if ($field == 'id') { - continue; - } - if ($field === 'caller') { - // Add a mention of caller so on trigger called after action, we can filter to avoid a loop if we try to sync back again with the caller - $membertype->context['caller'] = $request_data['caller']; - continue; - } - - // Process the status separately because it must be updated using - // the validate(), resiliate() and exclude() methods of the class AdherentType. - $membertype->$field = $value; - } - - // If there is no error, update() returns the number of affected rows - // so if the update is a no op, the return value is zero. - if ($membertype->update(DolibarrApiAccess::$user) >= 0) { - return $this->get($id); - } else { - throw new RestException(500, 'Error when updating member type: '.$membertype->error); - } - } - - /** - * Delete member type - * - * @param int $id member type ID - * @return array - * - * @throws RestException 403 Access denied - * @throws RestException 404 No Member Type found - * @throws RestException 500 Error when deleting Member Type - */ - public function delete($id) - { - if (!DolibarrApiAccess::$user->hasRight('adherent', 'configurer')) { - throw new RestException(403); - } - $membertype = new AdherentType($this->db); - $result = $membertype->fetch($id); - if (!$result) { - throw new RestException(404, 'member type not found'); - } - - if (!DolibarrApi::_checkAccessToResource('member', $membertype->id, 'adherent_type')) { - throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); - } - - $res = $membertype->delete(DolibarrApiAccess::$user); - if ($res < 0) { - throw new RestException(500, "Can't delete, error occurs"); - } - - return array( - 'success' => array( - 'code' => 200, - 'message' => 'Member type deleted' - ) - ); - } - - /** - * Validate fields before creating an object - * - * @param array|null $data Data to validate - * @return array - * - * @throws RestException - */ - private function _validate($data) - { - $membertype = array(); - foreach (MembersTypes::$FIELDS as $field) { - if (!isset($data[$field])) { - throw new RestException(400, "$field field missing"); - } - $membertype[$field] = $data[$field]; - } - return $membertype; - } - - // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore - /** - * Clean sensible object datas - * - * @param Object $object Object to clean - * @return Object Object with cleaned properties - */ - protected function _cleanObjectDatas($object) - { - // phpcs:enable - $object = parent::_cleanObjectDatas($object); - - unset($object->array_options); - unset($object->linkedObjectsIds); - unset($object->context); - unset($object->canvas); - unset($object->fk_project); - unset($object->contact); - unset($object->contact_id); - unset($object->thirdparty); - unset($object->user); - unset($object->origin); - unset($object->origin_id); - unset($object->ref_ext); - unset($object->country); - unset($object->country_id); - unset($object->country_code); - unset($object->barcode_type); - unset($object->barcode_type_code); - unset($object->barcode_type_label); - unset($object->barcode_type_coder); - unset($object->mode_reglement_id); - unset($object->cond_reglement_id); - unset($object->cond_reglement); - unset($object->fk_delivery_address); - unset($object->shipping_method_id); - unset($object->model_pdf); - unset($object->fk_account); - unset($object->note_public); - unset($object->note_private); - unset($object->fk_incoterms); - unset($object->label_incoterms); - unset($object->location_incoterms); - unset($object->name); - unset($object->lastname); - unset($object->firstname); - unset($object->civility_id); - unset($object->total_ht); - unset($object->total_tva); - unset($object->total_localtax1); - unset($object->total_localtax2); - unset($object->total_ttc); - - return $object; - } -} diff --git a/htdocs/adherents/class/api_subscriptions.class.php b/htdocs/adherents/class/api_subscriptions.class.php index 285a1948602..a5f27263cbd 100644 --- a/htdocs/adherents/class/api_subscriptions.class.php +++ b/htdocs/adherents/class/api_subscriptions.class.php @@ -176,9 +176,9 @@ class Subscriptions extends DolibarrApi /** * Update subscription * - * @param int $id ID of subscription to update - * @param array $request_data Datas - * @return Object + * @param int $id ID of subscription to update + * @param array $request_data Datas + * @return Object Updated object * * @throws RestException 403 Access denied * @throws RestException 404 No Subscription found diff --git a/htdocs/adherents/class/subscription.class.php b/htdocs/adherents/class/subscription.class.php index d0ddd730d61..04acc243570 100644 --- a/htdocs/adherents/class/subscription.class.php +++ b/htdocs/adherents/class/subscription.class.php @@ -1,6 +1,7 @@ * Copyright (C) 2006-2015 Laurent Destailleur + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -103,21 +104,21 @@ class Subscription extends CommonObject public $fk_bank; /** - * @var array Array with all fields into database and their property. Do not use it as a static var. It may be modified by constructor. + * @var array|string,position:int,notnull?:int,visible:int,noteditable?:int,default?:string,index?:int,foreignkey?:string,searchall?:int,isameasure?:int,css?:string,csslist?:string,help?:string,showoncombobox?:int,disabled?:int,arrayofkeyval?:array,comment?:string}> Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. */ public $fields = array( - 'rowid' =>array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>1, 'visible'=>-1, 'notnull'=>1, 'position'=>10), - 'tms' =>array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>1, 'visible'=>-1, 'notnull'=>1, 'position'=>15), - 'datec' =>array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>1, 'visible'=>-1, 'position'=>20), - 'fk_adherent' =>array('type'=>'integer', 'label'=>'Member', 'enabled'=>1, 'visible'=>-1, 'position'=>25), - 'dateadh' =>array('type'=>'datetime', 'label'=>'DateSubscription', 'enabled'=>1, 'visible'=>-1, 'position'=>30), - 'datef' =>array('type'=>'datetime', 'label'=>'DateEndSubscription', 'enabled'=>1, 'visible'=>-1, 'position'=>35), - 'subscription' =>array('type'=>'double(24,8)', 'label'=>'Amount', 'enabled'=>1, 'visible'=>-1, 'position'=>40, 'isameasure'=>1), - 'fk_bank' =>array('type'=>'integer', 'label'=>'BankId', 'enabled'=>1, 'visible'=>-1, 'position'=>45), - 'note' =>array('type'=>'html', 'label'=>'Note', 'enabled'=>1, 'visible'=>-1, 'position'=>50), - 'fk_type' =>array('type'=>'integer', 'label'=>'MemberType', 'enabled'=>1, 'visible'=>-1, 'position'=>55), - 'fk_user_creat' =>array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserAuthor', 'enabled'=>1, 'visible'=>-2, 'position'=>60), - 'fk_user_valid' =>array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserValidation', 'enabled'=>1, 'visible'=>-1, 'position'=>65), + 'rowid' => array('type' => 'integer', 'label' => 'TechnicalID', 'enabled' => 1, 'visible' => -1, 'notnull' => 1, 'position' => 10), + 'tms' => array('type' => 'timestamp', 'label' => 'DateModification', 'enabled' => 1, 'visible' => -1, 'notnull' => 1, 'position' => 15), + 'datec' => array('type' => 'datetime', 'label' => 'DateCreation', 'enabled' => 1, 'visible' => -1, 'position' => 20), + 'fk_adherent' => array('type' => 'integer', 'label' => 'Member', 'enabled' => 1, 'visible' => -1, 'position' => 25), + 'dateadh' => array('type' => 'datetime', 'label' => 'DateSubscription', 'enabled' => 1, 'visible' => -1, 'position' => 30), + 'datef' => array('type' => 'datetime', 'label' => 'DateEndSubscription', 'enabled' => 1, 'visible' => -1, 'position' => 35), + 'subscription' => array('type' => 'double(24,8)', 'label' => 'Amount', 'enabled' => 1, 'visible' => -1, 'position' => 40, 'isameasure' => 1), + 'fk_bank' => array('type' => 'integer', 'label' => 'BankId', 'enabled' => 1, 'visible' => -1, 'position' => 45), + 'note' => array('type' => 'html', 'label' => 'Note', 'enabled' => 1, 'visible' => -1, 'position' => 50), + 'fk_type' => array('type' => 'integer', 'label' => 'MemberType', 'enabled' => 1, 'visible' => -1, 'position' => 55), + 'fk_user_creat' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'UserAuthor', 'enabled' => 1, 'visible' => -2, 'position' => 60), + 'fk_user_valid' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'UserValidation', 'enabled' => 1, 'visible' => -1, 'position' => 65), ); @@ -186,6 +187,32 @@ class Subscription extends CommonObject $this->fk_type = $type; } + if (!empty($this->linkedObjectsIds) && empty($this->linked_objects)) { // To use new linkedObjectsIds instead of old linked_objects + $this->linked_objects = $this->linkedObjectsIds; // TODO Replace linked_objects with linkedObjectsIds + } + + // Add object linked + if (!$error && $this->id && !empty($this->linked_objects) && is_array($this->linked_objects)) { + foreach ($this->linked_objects as $origin => $tmp_origin_id) { + if (is_array($tmp_origin_id)) { // New behaviour, if linked_object can have several links per type, so is something like array('contract'=>array(id1, id2, ...)) + foreach ($tmp_origin_id as $origin_id) { + $ret = $this->add_object_linked($origin, $origin_id); + if (!$ret) { + $this->error = $this->db->lasterror(); + $error++; + } + } + } else { // Old behaviour, if linked_object has only one link per type, so is something like array('contract'=>id1)) + $origin_id = $tmp_origin_id; + $ret = $this->add_object_linked($origin, $origin_id); + if (!$ret) { + $this->error = $this->db->lasterror(); + $error++; + } + } + } + } + if (!$error && !$notrigger) { $this->context = array('member' => $member); // Call triggers @@ -279,7 +306,7 @@ class Subscription extends CommonObject $sql .= " fk_type = ".((int) $this->fk_type).","; $sql .= " fk_adherent = ".((int) $this->fk_adherent).","; $sql .= " note = ".($this->note_public ? "'".$this->db->escape($this->note_public)."'" : 'null').","; - $sql .= " subscription = ".price2num($this->amount).","; + $sql .= " subscription = ".(float) price2num($this->amount).","; $sql .= " dateadh = '".$this->db->idate($this->dateh)."',"; $sql .= " datef = '".$this->db->idate($this->datef)."',"; $sql .= " datec = '".$this->db->idate($this->datec)."',"; @@ -295,7 +322,7 @@ class Subscription extends CommonObject $result = $member->update_end_date($user); if (!$error && !$notrigger) { - $this->context = array('member'=>$member); + $this->context = array('member' => $member); // Call triggers $result = $this->call_trigger('MEMBER_SUBSCRIPTION_MODIFY', $user); if ($result < 0) { diff --git a/htdocs/adherents/document.php b/htdocs/adherents/document.php index 1f02258fae9..e92e1da0d41 100644 --- a/htdocs/adherents/document.php +++ b/htdocs/adherents/document.php @@ -38,16 +38,16 @@ require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent_type.class.php'; $langs->loadLangs(array("companies", "members", "other")); -$id = GETPOSTISSET('id') ? GETPOST('id', 'int') : GETPOST('rowid', 'int'); +$id = GETPOSTISSET('id') ? GETPOSTINT('id') : GETPOSTINT('rowid'); $ref = GETPOST('ref', 'alphanohtml'); $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm', 'alpha'); // Get parameters -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 diff --git a/htdocs/adherents/index.php b/htdocs/adherents/index.php index 3b78f0305dc..baa8560b9c6 100644 --- a/htdocs/adherents/index.php +++ b/htdocs/adherents/index.php @@ -53,11 +53,11 @@ $result = restrictedArea($user, 'adherent'); * Actions */ -$userid = GETPOST('userid', 'int'); +$userid = GETPOSTINT('userid'); if (GETPOST('addbox')) { // Add box (when submit is done from a form when ajax disabled) require_once DOL_DOCUMENT_ROOT.'/core/class/infobox.class.php'; - $zone = GETPOST('areacode', 'int'); + $zone = GETPOSTINT('areacode'); $boxorder = GETPOST('boxorder', 'aZ09'); $boxorder .= GETPOST('boxcombo', 'aZ09'); $result = InfoBox::saveboxorder($db, $zone, $boxorder, $userid); diff --git a/htdocs/adherents/ldap.php b/htdocs/adherents/ldap.php index 47fb5c00a64..f94cc476321 100644 --- a/htdocs/adherents/ldap.php +++ b/htdocs/adherents/ldap.php @@ -33,7 +33,7 @@ require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent_type.class.php'; // Load translation files required by the page $langs->loadLangs(array("companies", "members", "ldap", "admin")); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alphanohtml'); $action = GETPOST('action', 'aZ09'); @@ -120,12 +120,13 @@ print '
'; print ''; // Login -print ''; +print ''; // If there is a link to the unencrypted password, we show the value in database here so we can compare because it is shown nowhere else +// This is for very old situation. Password are now encrypted and $object->pass is empty. if (getDolGlobalString('LDAP_MEMBER_FIELD_PASSWORD')) { print ''; - print ''; + print ''; print "\n"; } diff --git a/htdocs/adherents/list.php b/htdocs/adherents/list.php index d7f94aa0908..e8d85f21c76 100644 --- a/htdocs/adherents/list.php +++ b/htdocs/adherents/list.php @@ -5,7 +5,7 @@ * Copyright (C) 2013-2015 Raphaël Doursenaud * Copyright (C) 2014-2016 Juanjo Menent * Copyright (C) 2018 Alexandre Spangaro - * Copyright (C) 2021-2023 Frédéric France + * Copyright (C) 2021-2023 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -43,7 +43,7 @@ $langs->loadLangs(array("members", "companies", "categories")); // Get parameters $action = GETPOST('action', 'aZ09'); $massaction = GETPOST('massaction', 'alpha'); -$show_files = GETPOST('show_files', 'int'); +$show_files = GETPOSTINT('show_files'); $confirm = GETPOST('confirm', 'alpha'); $cancel = GETPOST('cancel', 'alpha'); $toselect = GETPOST('toselect', 'array'); @@ -71,19 +71,19 @@ $search_phone_perso = GETPOST("search_phone_perso", 'alpha'); $search_phone_mobile = GETPOST("search_phone_mobile", 'alpha'); $search_type = GETPOST("search_type", 'alpha'); $search_email = GETPOST("search_email", 'alpha'); -$search_categ = GETPOST("search_categ", 'int'); +$search_categ = GETPOSTINT("search_categ"); $search_morphy = GETPOST("search_morphy", 'alpha'); $search_import_key = trim(GETPOST("search_import_key", 'alpha')); -$catid = GETPOST("catid", 'int'); -$socid = GETPOST('socid', 'int'); +$catid = GETPOSTINT("catid"); +$socid = GETPOSTINT('socid'); $search_filter = GETPOST("search_filter", 'alpha'); $search_status = GETPOST("search_status", 'intcomma'); // status -$search_datec_start = dol_mktime(0, 0, 0, GETPOST('search_datec_start_month', 'int'), GETPOST('search_datec_start_day', 'int'), GETPOST('search_datec_start_year', 'int')); -$search_datec_end = dol_mktime(23, 59, 59, GETPOST('search_datec_end_month', 'int'), GETPOST('search_datec_end_day', 'int'), GETPOST('search_datec_end_year', 'int')); -$search_datem_start = dol_mktime(0, 0, 0, GETPOST('search_datem_start_month', 'int'), GETPOST('search_datem_start_day', 'int'), GETPOST('search_datem_start_year', 'int')); -$search_datem_end = dol_mktime(23, 59, 59, GETPOST('search_datem_end_month', 'int'), GETPOST('search_datem_end_day', 'int'), GETPOST('search_datem_end_year', 'int')); +$search_datec_start = dol_mktime(0, 0, 0, GETPOSTINT('search_datec_start_month'), GETPOSTINT('search_datec_start_day'), GETPOSTINT('search_datec_start_year')); +$search_datec_end = dol_mktime(23, 59, 59, GETPOSTINT('search_datec_end_month'), GETPOSTINT('search_datec_end_day'), GETPOSTINT('search_datec_end_year')); +$search_datem_start = dol_mktime(0, 0, 0, GETPOSTINT('search_datem_start_month'), GETPOSTINT('search_datem_start_day'), GETPOSTINT('search_datem_start_year')); +$search_datem_end = dol_mktime(23, 59, 59, GETPOSTINT('search_datem_end_month'), GETPOSTINT('search_datem_end_day'), GETPOSTINT('search_datem_end_year')); $filter = GETPOST("filter", 'alpha'); if ($filter) { @@ -102,10 +102,10 @@ if ($search_status < -2) { } // Pagination parameters -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -132,49 +132,49 @@ $search_array_options = $extrafields->getOptionalsFromPost($object->table_elemen // List of fields to search into when doing a "search in all" $fieldstosearchall = array( - 'd.ref'=>'Ref', - 'd.login'=>'Login', - 'd.lastname'=>'Lastname', - 'd.firstname'=>'Firstname', - 'd.societe'=>"Company", - 'd.email'=>'EMail', - 'd.address'=>'Address', - 'd.zip'=>'Zip', - 'd.town'=>'Town', - 'd.phone'=>"Phone", - 'd.phone_perso'=>"PhonePerso", - 'd.phone_mobile'=>"PhoneMobile", - 'd.note_public'=>'NotePublic', - 'd.note_private'=>'NotePrivate', + 'd.ref' => 'Ref', + 'd.login' => 'Login', + 'd.lastname' => 'Lastname', + 'd.firstname' => 'Firstname', + 'd.societe' => "Company", + 'd.email' => 'EMail', + 'd.address' => 'Address', + 'd.zip' => 'Zip', + 'd.town' => 'Town', + 'd.phone' => "Phone", + 'd.phone_perso' => "PhonePerso", + 'd.phone_mobile' => "PhoneMobile", + 'd.note_public' => 'NotePublic', + 'd.note_private' => 'NotePrivate', ); $arrayfields = array( - 'd.ref'=>array('label'=>"Ref", 'checked'=>1), - 'd.civility'=>array('label'=>"Civility", 'checked'=>0), - 'd.lastname'=>array('label'=>"Lastname", 'checked'=>1), - 'd.firstname'=>array('label'=>"Firstname", 'checked'=>1), - 'd.gender'=>array('label'=>"Gender", 'checked'=>0), - 'd.company'=>array('label'=>"Company", 'checked'=>1, 'position'=>70), - 'd.login'=>array('label'=>"Login", 'checked'=>1), - 'd.morphy'=>array('label'=>"MemberNature", 'checked'=>1), - 't.libelle'=>array('label'=>"Type", 'checked'=>1, 'position'=>55), - 'd.address'=>array('label'=>"Address", 'checked'=>0), - 'd.zip'=>array('label'=>"Zip", 'checked'=>0), - 'd.town'=>array('label'=>"Town", 'checked'=>0), - 'd.phone'=>array('label'=>"Phone", 'checked'=>0), - 'd.phone_perso'=>array('label'=>"PhonePerso", 'checked'=>0), - 'd.phone_mobile'=>array('label'=>"PhoneMobile", 'checked'=>0), - 'd.email'=>array('label'=>"Email", 'checked'=>1), - 'state.nom'=>array('label'=>"State", 'checked'=>0, 'position'=>90), - 'country.code_iso'=>array('label'=>"Country", 'checked'=>0, 'position'=>95), + 'd.ref' => array('label' => "Ref", 'checked' => 1), + 'd.civility' => array('label' => "Civility", 'checked' => 0), + 'd.lastname' => array('label' => "Lastname", 'checked' => 1), + 'd.firstname' => array('label' => "Firstname", 'checked' => 1), + 'd.gender' => array('label' => "Gender", 'checked' => 0), + 'd.company' => array('label' => "Company", 'checked' => 1, 'position' => 70), + 'd.login' => array('label' => "Login", 'checked' => 1), + 'd.morphy' => array('label' => "MemberNature", 'checked' => 1), + 't.libelle' => array('label' => "Type", 'checked' => 1, 'position' => 55), + 'd.address' => array('label' => "Address", 'checked' => 0), + 'd.zip' => array('label' => "Zip", 'checked' => 0), + 'd.town' => array('label' => "Town", 'checked' => 0), + 'd.phone' => array('label' => "Phone", 'checked' => 0), + 'd.phone_perso' => array('label' => "PhonePerso", 'checked' => 0), + 'd.phone_mobile' => array('label' => "PhoneMobile", 'checked' => 0), + 'd.email' => array('label' => "Email", 'checked' => 1), + 'state.nom' => array('label' => "State", 'checked' => 0, 'position' => 90), + 'country.code_iso' => array('label' => "Country", 'checked' => 0, 'position' => 95), /*'d.note_public'=>array('label'=>"NotePublic", 'checked'=>0), 'd.note_private'=>array('label'=>"NotePrivate", 'checked'=>0),*/ - 'd.datefin'=>array('label'=>"EndSubscription"), - 'd.datec'=>array('label'=>"DateCreation"), - 'd.birth'=>array('label'=>"Birthday"), - 'd.tms'=>array('label'=>"DateModificationShort"), - 'd.statut'=>array('label'=>"Status"), - 'd.import_key'=>array('label'=>"ImportId"), + 'd.datefin' => array('label' => "EndSubscription"), + 'd.datec' => array('label' => "DateCreation"), + 'd.birth' => array('label' => "Birthday"), + 'd.tms' => array('label' => "DateModificationShort"), + 'd.statut' => array('label' => "Status"), + 'd.import_key' => array('label' => "ImportId"), ); // Extra fields @@ -194,11 +194,11 @@ foreach ($object->fields as $key => $val) { if (!empty($val['visible'])) { $visible = (int) dol_eval($val['visible'], 1); $arrayfields[$tableprefix.'.'.$key] = array( - 'label'=>$val['label'], - 'checked'=>(($visible < 0) ? 0 : 1), - 'enabled'=>dol_eval($val['enabled'], 1), - 'position'=>$val['position'], - 'help'=> isset($val['help']) ? $val['help'] : '' + 'label' => $val['label'], + 'checked' => (($visible < 0) ? 0 : 1), + 'enabled' => (abs($visible) != 3 && (int) dol_eval($val['enabled'], 1)), + 'position' => $val['position'], + 'help' => isset($val['help']) ? $val['help'] : '' ); } } @@ -221,7 +221,7 @@ if (!GETPOST('confirmmassaction', 'alpha') && $massaction != 'presend' && $massa $massaction = ''; } -$parameters = array('socid'=>isset($socid) ? $socid : null); +$parameters = array('socid' => isset($socid) ? $socid : null); $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); @@ -670,7 +670,7 @@ if ($search_email) { $param .= "&search_email=".urlencode($search_email); } if ($search_categ > 0 || $search_categ == -2) { - $param .= "&search_categ=".urlencode($search_categ); + $param .= "&search_categ=".urlencode((string) ($search_categ)); } if ($search_company) { $param .= "&search_company=".urlencode($search_company); @@ -741,7 +741,7 @@ if ($user->hasRight('adherent', 'creer') && $user->hasRight('user', 'user', 'cre if ($user->hasRight('adherent', 'creer')) { $arrayofmassactions['createsubscription'] = img_picto('', 'payment', 'class="pictofixedwidth"').$langs->trans("CreateSubscription"); } -if (GETPOST('nomassaction', 'int') || in_array($massaction, array('presend', 'predelete', 'preaffecttag'))) { +if (GETPOSTINT('nomassaction') || in_array($massaction, array('presend', 'predelete', 'preaffecttag'))) { $arrayofmassactions = array(); } $massactionbutton = $form->selectMassAction('', $arrayofmassactions); @@ -762,8 +762,8 @@ print ''; $newcardbutton = ''; -$newcardbutton .= dolGetButtonTitle($langs->trans('ViewList'), '', 'fa fa-bars imgforviewmode', $_SERVER["PHP_SELF"].'?mode=common'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ((empty($mode) || $mode == 'common') ? 2 : 1), array('morecss'=>'reposition')); -$newcardbutton .= dolGetButtonTitle($langs->trans('ViewKanban'), '', 'fa fa-th-list imgforviewmode', $_SERVER["PHP_SELF"].'?mode=kanban'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ($mode == 'kanban' ? 2 : 1), array('morecss'=>'reposition')); +$newcardbutton .= dolGetButtonTitle($langs->trans('ViewList'), '', 'fa fa-bars imgforviewmode', $_SERVER["PHP_SELF"].'?mode=common'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ((empty($mode) || $mode == 'common') ? 2 : 1), array('morecss' => 'reposition')); +$newcardbutton .= dolGetButtonTitle($langs->trans('ViewKanban'), '', 'fa fa-th-list imgforviewmode', $_SERVER["PHP_SELF"].'?mode=kanban'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ($mode == 'kanban' ? 2 : 1), array('morecss' => 'reposition')); if ($user->hasRight('adherent', 'creer')) { $newcardbutton .= dolGetButtonTitleSeparator(); $newcardbutton .= dolGetButtonTitle($langs->trans('NewMember'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/adherents/card.php?action=create'); @@ -815,15 +815,21 @@ if ($search_all) { print '
'.$langs->trans("FilterOnInto", $search_all).implode(', ', $fieldstosearchall).'
'."\n"; } +$varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; +$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) : ''); // This also change content of $arrayfields +$selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); + $moreforfilter = ''; // Filter on categories -if (isModEnabled('categorie') && $user->hasRight('categorie', 'lire')) { +if (isModEnabled('category') && $user->hasRight('categorie', 'lire')) { require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; $moreforfilter .= '
'; - $moreforfilter .= img_picto($langs->trans('Categories'), 'category', 'class="pictofixedlength"').$formother->select_categories(Categorie::TYPE_MEMBER, $search_categ, 'search_categ', 1, $langs->trans("MembersCategoriesShort")); + $moreforfilter .= img_picto($langs->trans('Categories'), 'category', 'class="pictofixedwidth"').$formother->select_categories(Categorie::TYPE_MEMBER, $search_categ, 'search_categ', 1, $langs->trans("MembersCategoriesShort")); $moreforfilter .= '
'; } -$parameters = array(); +$parameters = array( + 'arrayfields' => &$arrayfields, +); $reshook = $hookmanager->executeHooks('printFieldPreListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook if (empty($reshook)) { $moreforfilter .= $hookmanager->resPrint; @@ -839,10 +845,6 @@ if (!empty($moreforfilter)) { print ''; } -$varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; -$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')) : ''); // This also change content of $arrayfields -$selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); - print '
'; print '
'.$langs->trans("Login").' / '.$langs->trans("Id").''.$object->login.' 
'.$langs->trans("Login").' / '.$langs->trans("Id").''.dol_escape_htmltag($object->login).' 
'.$langs->trans("LDAPFieldPasswordNotCrypted").''.$object->pass.''.dol_escape_htmltag($object->pass).'
'."\n"; @@ -891,7 +893,7 @@ if (!empty($arrayfields['d.lastname']['checked'])) { // Gender if (!empty($arrayfields['d.gender']['checked'])) { print ''; } @@ -911,7 +913,7 @@ if (!empty($arrayfields['d.login']['checked'])) { // Nature if (!empty($arrayfields['d.morphy']['checked'])) { print ''; } @@ -923,6 +925,7 @@ if (!empty($arrayfields['t.libelle']['checked'])) { if (!empty($arrayfields['t.libelle']['checked'])) { print ''; } @@ -987,7 +990,7 @@ if (!empty($arrayfields['d.email']['checked'])) { if (!empty($arrayfields['d.datefin']['checked'])) { print ''; } @@ -996,7 +999,7 @@ if (!empty($arrayfields['d.datefin']['checked'])) { include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php'; // Fields from hook -$parameters = array('arrayfields'=>$arrayfields); +$parameters = array('arrayfields' => $arrayfields); $reshook = $hookmanager->executeHooks('printFieldListOption', $parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; @@ -1044,8 +1047,9 @@ if (!empty($arrayfields['d.statut']['checked'])) { Adherent::STATUS_DRAFT => $langs->trans("Draft"), Adherent::STATUS_VALIDATED => $langs->trans("Validated"), Adherent::STATUS_RESILIATED => $langs->trans("MemberStatusResiliatedShort"), - Adherent::STATUS_EXCLUDED =>$langs->trans("MemberStatusExcludedShort") + Adherent::STATUS_EXCLUDED => $langs->trans("MemberStatusExcludedShort") ); + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder print $form->selectarray('search_status', $liststatus, $search_status, -3, 0, 0, '', 0, 0, 0, '', 'search_status width100 onrightofpage'); print ''; } @@ -1154,7 +1158,7 @@ if (!empty($arrayfields['d.datefin']['checked'])) { include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; // Hook fields -$parameters = array('arrayfields'=>$arrayfields, 'totalarray'=>&$totalarray, 'param'=>$param, 'sortfield'=>$sortfield, 'sortorder'=>$sortorder); +$parameters = array('arrayfields' => $arrayfields, 'totalarray' => &$totalarray, 'param' => $param, 'sortfield' => $sortfield, 'sortorder' => $sortorder); $reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; @@ -1463,7 +1467,7 @@ while ($i < $imaxinloop) { // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php'; // Fields from hook - $parameters = array('arrayfields'=>$arrayfields, 'obj'=>$obj, 'i'=>$i, 'totalarray'=>&$totalarray); + $parameters = array('arrayfields' => $arrayfields, 'obj' => $obj, 'i' => $i, 'totalarray' => &$totalarray); $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; // Date creation @@ -1549,7 +1553,7 @@ if ($num == 0) { $db->free($resql); -$parameters = array('arrayfields'=>$arrayfields, 'sql' => $sql); +$parameters = array('arrayfields' => $arrayfields, 'sql' => $sql); $reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; diff --git a/htdocs/adherents/note.php b/htdocs/adherents/note.php index 1adbdb2db03..180eee496b2 100644 --- a/htdocs/adherents/note.php +++ b/htdocs/adherents/note.php @@ -37,7 +37,7 @@ $langs->loadLangs(array("companies", "members", "bills")); // Get parameters $action = GETPOST('action', 'aZ09'); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alphanohtml'); diff --git a/htdocs/adherents/partnership.php b/htdocs/adherents/partnership.php index 2ec81fdbea9..9edc0603ce2 100644 --- a/htdocs/adherents/partnership.php +++ b/htdocs/adherents/partnership.php @@ -36,7 +36,7 @@ require_once DOL_DOCUMENT_ROOT.'/partnership/lib/partnership.lib.php'; $langs->loadLangs(array("companies","members","partnership", "other")); // Get parameters -$id = GETPOST('rowid', 'int') ? GETPOST('rowid', 'int') : GETPOST('id', 'int'); +$id = GETPOSTINT('rowid') ? GETPOSTINT('rowid') : GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm', 'alpha'); @@ -116,8 +116,8 @@ if ($reshook < 0) { setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); } -$date_start = dol_mktime(0, 0, 0, GETPOST('date_partnership_startmonth', 'int'), GETPOST('date_partnership_startday', 'int'), GETPOST('date_partnership_startyear', 'int')); -$date_end = dol_mktime(0, 0, 0, GETPOST('date_partnership_endmonth', 'int'), GETPOST('date_partnership_endday', 'int'), GETPOST('date_partnership_endyear', 'int')); +$date_start = dol_mktime(0, 0, 0, GETPOSTINT('date_partnership_startmonth'), GETPOSTINT('date_partnership_startday'), GETPOSTINT('date_partnership_startyear')); +$date_end = dol_mktime(0, 0, 0, GETPOSTINT('date_partnership_endmonth'), GETPOSTINT('date_partnership_endday'), GETPOSTINT('date_partnership_endyear')); if (empty($reshook)) { $error = 0; diff --git a/htdocs/adherents/stats/index.php b/htdocs/adherents/stats/index.php index 13dce1b030e..0672b5f90c0 100644 --- a/htdocs/adherents/stats/index.php +++ b/htdocs/adherents/stats/index.php @@ -33,10 +33,12 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/member.lib.php'; $WIDTH = DolGraph::getDefaultGraphSizeForStats('width'); $HEIGHT = DolGraph::getDefaultGraphSizeForStats('height'); -$userid = GETPOST('userid', 'int'); if ($userid < 0) { +$userid = GETPOSTINT('userid'); +if ($userid < 0) { $userid = 0; } -$socid = GETPOST('socid', 'int'); if ($socid < 0) { +$socid = GETPOSTINT('socid'); +if ($socid < 0) { $socid = 0; } @@ -91,6 +93,7 @@ $mesg = $px1->isGraphKo(); if (!$mesg) { $px1->SetData($data); $i = $startyear; + $legend = array(); while ($i <= $endyear) { $legend[] = $i; $i++; diff --git a/htdocs/adherents/subscription.php b/htdocs/adherents/subscription.php index 3d479cd23c6..3ace1b42d58 100644 --- a/htdocs/adherents/subscription.php +++ b/htdocs/adherents/subscription.php @@ -47,17 +47,17 @@ $confirm = GETPOST('confirm', 'alpha'); $contextpage = GETPOST('contextpage', 'aZ09'); $optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print') -$id = GETPOST('rowid', 'int') ? GETPOST('rowid', 'int') : GETPOST('id', 'int'); +$id = GETPOSTINT('rowid') ? GETPOSTINT('rowid') : GETPOSTINT('id'); $rowid = $id; $ref = GETPOST('ref', 'alphanohtml'); -$typeid = GETPOST('typeid', 'int'); +$typeid = GETPOSTINT('typeid'); $cancel = GETPOST('cancel'); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -86,9 +86,9 @@ $errmsg = ''; $hookmanager->initHooks(array('subscription')); // PDF -$hidedetails = (GETPOST('hidedetails', 'int') ? GETPOST('hidedetails', 'int') : (getDolGlobalString('MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS') ? 1 : 0)); -$hidedesc = (GETPOST('hidedesc', 'int') ? GETPOST('hidedesc', 'int') : (getDolGlobalString('MAIN_GENERATE_DOCUMENTS_HIDE_DESC') ? 1 : 0)); -$hideref = (GETPOST('hideref', 'int') ? GETPOST('hideref', 'int') : (getDolGlobalString('MAIN_GENERATE_DOCUMENTS_HIDE_REF') ? 1 : 0)); +$hidedetails = (GETPOSTINT('hidedetails') ? GETPOSTINT('hidedetails') : (getDolGlobalString('MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS') ? 1 : 0)); +$hidedesc = (GETPOSTINT('hidedesc') ? GETPOSTINT('hidedesc') : (getDolGlobalString('MAIN_GENERATE_DOCUMENTS_HIDE_DESC') ? 1 : 0)); +$hideref = (GETPOSTINT('hideref') ? GETPOSTINT('hideref') : (getDolGlobalString('MAIN_GENERATE_DOCUMENTS_HIDE_REF') ? 1 : 0)); $datefrom = 0; $dateto = 0; @@ -153,15 +153,15 @@ if (empty($reshook) && $action == 'confirm_create_thirdparty' && $confirm == 'ye if (empty($reshook) && $action == 'setuserid' && ($user->hasRight('user', 'self', 'creer') || $user->hasRight('user', 'user', 'creer'))) { $error = 0; if (!$user->hasRight('user', 'user', 'creer')) { // If can edit only itself user, we can link to itself only - if (GETPOST("userid", 'int') != $user->id && GETPOST("userid", 'int') != $object->user_id) { + if (GETPOSTINT("userid") != $user->id && GETPOSTINT("userid") != $object->user_id) { $error++; setEventMessages($langs->trans("ErrorUserPermissionAllowsToLinksToItselfOnly"), null, 'errors'); } } if (!$error) { - if (GETPOST("userid", 'int') != $object->user_id) { // If link differs from currently in database - $result = $object->setUserId(GETPOST("userid", 'int')); + if (GETPOSTINT("userid") != $object->user_id) { // If link differs from currently in database + $result = $object->setUserId(GETPOSTINT("userid")); if ($result < 0) { dol_print_error(null, $object->error); } @@ -173,9 +173,9 @@ if (empty($reshook) && $action == 'setuserid' && ($user->hasRight('user', 'self' if (empty($reshook) && $action == 'setsocid') { $error = 0; if (!$error) { - if (GETPOST('socid', 'int') != $object->fk_soc) { // If link differs from currently in database + if (GETPOSTINT('socid') != $object->fk_soc) { // If link differs from currently in database $sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."adherent"; - $sql .= " WHERE fk_soc = '".GETPOST('socid', 'int')."'"; + $sql .= " WHERE fk_soc = '".GETPOSTINT('socid')."'"; $resql = $db->query($sql); if ($resql) { $obj = $db->fetch_object($resql); @@ -183,14 +183,14 @@ if (empty($reshook) && $action == 'setsocid') { $othermember = new Adherent($db); $othermember->fetch($obj->rowid); $thirdparty = new Societe($db); - $thirdparty->fetch(GETPOST('socid', 'int')); + $thirdparty->fetch(GETPOSTINT('socid')); $error++; setEventMessages($langs->trans("ErrorMemberIsAlreadyLinkedToThisThirdParty", $othermember->getFullName($langs), $othermember->login, $thirdparty->name), null, 'errors'); } } if (!$error) { - $result = $object->setThirdPartyId(GETPOST('socid', 'int')); + $result = $object->setThirdPartyId(GETPOSTINT('socid')); if ($result < 0) { dol_print_error(null, $object->error); } @@ -214,20 +214,20 @@ if ($user->hasRight('adherent', 'cotisation', 'creer') && $action == 'subscripti $defaultdelay = !empty($adht->duration_value) ? $adht->duration_value : 1; $defaultdelayunit = !empty($adht->duration_unit) ? $adht->duration_unit : 'y'; $paymentdate = ''; // Do not use 0 here, default value is '' that means not filled where 0 means 1970-01-01 - if (GETPOST("reyear", "int") && GETPOST("remonth", "int") && GETPOST("reday", "int")) { - $datesubscription = dol_mktime(0, 0, 0, GETPOST("remonth", "int"), GETPOST("reday", "int"), GETPOST("reyear", "int")); + if (GETPOSTINT("reyear") && GETPOSTINT("remonth") && GETPOSTINT("reday")) { + $datesubscription = dol_mktime(0, 0, 0, GETPOSTINT("remonth"), GETPOSTINT("reday"), GETPOSTINT("reyear")); } - if (GETPOST("endyear", 'int') && GETPOST("endmonth", 'int') && GETPOST("endday", 'int')) { - $datesubend = dol_mktime(0, 0, 0, GETPOST("endmonth", 'int'), GETPOST("endday", 'int'), GETPOST("endyear", 'int')); + if (GETPOSTINT("endyear") && GETPOSTINT("endmonth") && GETPOSTINT("endday")) { + $datesubend = dol_mktime(0, 0, 0, GETPOSTINT("endmonth"), GETPOSTINT("endday"), GETPOSTINT("endyear")); } - if (GETPOST("paymentyear", 'int') && GETPOST("paymentmonth", 'int') && GETPOST("paymentday", 'int')) { - $paymentdate = dol_mktime(0, 0, 0, GETPOST("paymentmonth", 'int'), GETPOST("paymentday", 'int'), GETPOST("paymentyear", 'int')); + if (GETPOSTINT("paymentyear") && GETPOSTINT("paymentmonth") && GETPOSTINT("paymentday")) { + $paymentdate = dol_mktime(0, 0, 0, GETPOSTINT("paymentmonth"), GETPOSTINT("paymentday"), GETPOSTINT("paymentyear")); } $amount = price2num(GETPOST("subscription", 'alpha')); // Amount of subscription $label = GETPOST("label"); // Payment information - $accountid = GETPOST("accountid", 'int'); + $accountid = GETPOSTINT("accountid"); $operation = GETPOST("operation", "alphanohtml"); // Payment mode $num_chq = GETPOST("num_chq", "alphanohtml"); $emetteur_nom = GETPOST("chqemetteur"); @@ -273,7 +273,7 @@ if ($user->hasRight('adherent', 'cotisation', 'creer') && $action == 'subscripti $action = 'addsubscription'; } else { // If an amount has been provided, we check also fields that becomes mandatory when amount is not null. - if (isModEnabled('banque') && GETPOST("paymentsave") != 'none') { + if (isModEnabled('bank') && GETPOST("paymentsave") != 'none') { if (GETPOST("subscription")) { if (!GETPOST("label")) { $errmsg = $langs->trans("ErrorFieldRequired", $langs->transnoentities("Label")); @@ -287,14 +287,14 @@ if ($user->hasRight('adherent', 'cotisation', 'creer') && $action == 'subscripti $error++; $action = 'addsubscription'; } - if (GETPOST("paymentsave") != 'invoiceonly' && !(GETPOST("accountid", 'int') > 0)) { + if (GETPOST("paymentsave") != 'invoiceonly' && !(GETPOSTINT("accountid") > 0)) { $errmsg = $langs->trans("ErrorFieldRequired", $langs->transnoentities("FinancialAccount")); setEventMessages($errmsg, null, 'errors'); $error++; $action = 'addsubscription'; } } else { - if (GETPOST("accountid", 'int')) { + if (GETPOSTINT("accountid")) { $errmsg = $langs->trans("ErrorDoNotProvideAccountsIfNullAmount"); setEventMessages($errmsg, null, 'errors'); $error++; @@ -583,7 +583,7 @@ print '
'; print '
'; - $arraygender = array('man'=>$langs->trans("Genderman"), 'woman'=>$langs->trans("Genderwoman"), 'other'=>$langs->trans("Genderother")); + $arraygender = array('man' => $langs->trans("Genderman"), 'woman' => $langs->trans("Genderwoman"), 'other' => $langs->trans("Genderother")); print $form->selectarray('search_gender', $arraygender, $search_gender, 1); print ''; - $arraymorphy = array('mor'=>$langs->trans("Moral"), 'phy'=>$langs->trans("Physical")); + $arraymorphy = array('mor' => $langs->trans("Moral"), 'phy' => $langs->trans("Physical")); print $form->selectarray('search_morphy', $arraymorphy, $search_morphy, 1, 0, 0, '', 0, 0, 0, '', 'maxwidth100'); print ''; $listetype = $membertypestatic->liste_array(); + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder print $form->selectarray("search_type", $listetype, $search_type, 1, 0, 0, '', 0, 32); print ''; //$selectarray = array('-1'=>'', 'withoutsubscription'=>$langs->trans("WithoutSubscription"), 'uptodate'=>$langs->trans("UpToDate"), 'outofdate'=>$langs->trans("OutOfDate")); - $selectarray = array('-1'=>'', 'waitingsubscription'=>$langs->trans("WaitingSubscription"), 'uptodate'=>$langs->trans("UpToDate"), 'outofdate'=>$langs->trans("OutOfDate")); + $selectarray = array('-1' => '', 'waitingsubscription' => $langs->trans("WaitingSubscription"), 'uptodate' => $langs->trans("UpToDate"), 'outofdate' => $langs->trans("OutOfDate")); print $form->selectarray('search_filter', $selectarray, $search_filter); print '
'; // Tags / Categories -if (isModEnabled('categorie') && $user->hasRight('categorie', 'lire')) { +if (isModEnabled('category') && $user->hasRight('categorie', 'lire')) { print ''; print ''; +print ''; // Other attributes $cols = 2; @@ -744,7 +744,7 @@ if ($action != 'addsubscription' && $action != 'create_thirdparty') { print_liste_field_titre('DateStart', $_SERVER["PHP_SELF"], '', '', $param, '', $sortfield, $sortorder, 'center '); print_liste_field_titre('DateEnd', $_SERVER["PHP_SELF"], '', '', $param, '', $sortfield, $sortorder, 'center '); print_liste_field_titre('Amount', $_SERVER["PHP_SELF"], '', '', $param, '', $sortfield, $sortorder, 'right '); - if (isModEnabled('banque')) { + if (isModEnabled('bank')) { print_liste_field_titre('Account', $_SERVER["PHP_SELF"], '', '', $param, '', $sortfield, $sortorder, 'right '); } print "\n"; @@ -779,7 +779,7 @@ if ($action != 'addsubscription' && $action != 'create_thirdparty') { print '\n"; print '\n"; print ''; - if (isModEnabled('banque')) { + if (isModEnabled('bank')) { print ''; @@ -865,11 +865,11 @@ if (($action == 'addsubscription' || $action == 'create_thirdparty') && $user->h $bankviainvoice = 1; } } else { - if (getDolGlobalString('ADHERENT_BANK_USE') == 'bankviainvoice' && isModEnabled('banque') && isModEnabled('societe') && isModEnabled('facture')) { + if (getDolGlobalString('ADHERENT_BANK_USE') == 'bankviainvoice' && isModEnabled('bank') && isModEnabled('societe') && isModEnabled('invoice')) { $bankviainvoice = 1; - } elseif (getDolGlobalString('ADHERENT_BANK_USE') == 'bankdirect' && isModEnabled('banque')) { + } elseif (getDolGlobalString('ADHERENT_BANK_USE') == 'bankdirect' && isModEnabled('bank')) { $bankdirect = 1; - } elseif (getDolGlobalString('ADHERENT_BANK_USE') == 'invoiceonly' && isModEnabled('banque') && isModEnabled('societe') && isModEnabled('facture')) { + } elseif (getDolGlobalString('ADHERENT_BANK_USE') == 'invoiceonly' && isModEnabled('bank') && isModEnabled('societe') && isModEnabled('invoice')) { $invoiceonly = 1; } } @@ -980,7 +980,7 @@ if (($action == 'addsubscription' || $action == 'create_thirdparty') && $user->h $currentmonth = dol_print_date($now, "%m"); print '"; // Date end subscription if (GETPOST('endday')) { - $dateto = dol_mktime(0, 0, 0, GETPOST('endmonth', 'int'), GETPOST('endday', 'int'), GETPOST('endyear', 'int')); + $dateto = dol_mktime(0, 0, 0, GETPOSTINT('endmonth'), GETPOSTINT('endday'), GETPOSTINT('endyear')); } if (!$dateto) { if (getDolGlobalInt('MEMBER_SUBSCRIPTION_SUGGEST_END_OF_MONTH')) { @@ -1013,7 +1013,7 @@ if (($action == 'addsubscription' || $action == 'create_thirdparty') && $user->h } } print '"; if ($adht->subscription) { @@ -1029,7 +1029,7 @@ if (($action == 'addsubscription' || $action == 'create_thirdparty') && $user->h print '">'; // Complementary action - if ((isModEnabled('banque') || isModEnabled('facture')) && !getDolGlobalString('ADHERENT_SUBSCRIPTION_HIDECOMPLEMENTARYACTIONS')) { + if ((isModEnabled('bank') || isModEnabled('invoice')) && !getDolGlobalString('ADHERENT_SUBSCRIPTION_HIDECOMPLEMENTARYACTIONS')) { $company = new Societe($db); if ($object->socid) { $result = $company->fetch($object->socid); @@ -1043,12 +1043,12 @@ if (($action == 'addsubscription' || $action == 'create_thirdparty') && $user->h print ''; print '
'; // Add entry into bank account - if (isModEnabled('banque')) { + if (isModEnabled('bank')) { print '
'; } // Add invoice with no payments - if (isModEnabled('societe') && isModEnabled('facture')) { + if (isModEnabled('societe') && isModEnabled('invoice')) { print 'fk_soc)) print ' disabled'; print '>
'; } // Add invoice with payments - if (isModEnabled('banque') && isModEnabled('societe') && isModEnabled('facture')) { + if (isModEnabled('bank') && isModEnabled('societe') && isModEnabled('invoice')) { print 'fk_soc)) print ' disabled'; print '>'; print ''; + print ''; // Bank line - if (isModEnabled("banque") && (getDolGlobalString('ADHERENT_BANK_USE') || $object->fk_bank)) { + if (isModEnabled("bank") && (getDolGlobalString('ADHERENT_BANK_USE') || $object->fk_bank)) { print ''; // Label - print ''; + print ''; // Bank line - if (isModEnabled("banque") && (getDolGlobalString('ADHERENT_BANK_USE') || $object->fk_bank)) { + if (isModEnabled("bank") && (getDolGlobalString('ADHERENT_BANK_USE') || $object->fk_bank)) { print ''; @@ -770,7 +770,7 @@ while ($i < $imaxinloop) { // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php'; // Fields from hook - $parameters = array('arrayfields'=>$arrayfields, 'obj'=>$obj, 'i'=>$i, 'totalarray'=>&$totalarray); + $parameters = array('arrayfields' => $arrayfields, 'obj' => $obj, 'i' => $i, 'totalarray' => &$totalarray); $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; // Date creation @@ -829,7 +829,7 @@ if ($num == 0) { $db->free($resql); -$parameters = array('arrayfields'=>$arrayfields, 'sql' => $sql); +$parameters = array('arrayfields' => $arrayfields, 'sql' => $sql); $reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; diff --git a/htdocs/adherents/tpl/linkedobjectblock.tpl.php b/htdocs/adherents/tpl/linkedobjectblock.tpl.php index d4efa349202..62a3a08aa49 100644 --- a/htdocs/adherents/tpl/linkedobjectblock.tpl.php +++ b/htdocs/adherents/tpl/linkedobjectblock.tpl.php @@ -2,6 +2,7 @@ /* Copyright (C) 2010-2011 Regis Houssin * Copyright (C) 2013 Juanjo Menent * Copyright (C) 2014 Marcos García + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -20,7 +21,7 @@ // Protection to avoid direct call of template if (empty($conf) || !is_object($conf)) { print "Error, template page can't be called as URL"; - exit; + exit(1); } echo "\n"; @@ -40,7 +41,7 @@ foreach ($linkedObjectBlock as $key => $objectlink) { echo ''; echo ''; diff --git a/htdocs/adherents/type.php b/htdocs/adherents/type.php index 4a1ee4b36a6..1be94641271 100644 --- a/htdocs/adherents/type.php +++ b/htdocs/adherents/type.php @@ -41,7 +41,7 @@ require_once DOL_DOCUMENT_ROOT.'/product/class/html.formproduct.class.php'; // Load translation files required by the page $langs->load("members"); -$rowid = GETPOST('rowid', 'int'); +$rowid = GETPOSTINT('rowid'); $action = GETPOST('action', 'aZ09'); $massaction = GETPOST('massaction', 'alpha'); $cancel = GETPOST('cancel', 'alpha'); @@ -61,10 +61,10 @@ $status = GETPOST('status', 'alpha'); $optioncss = GETPOST('optioncss', 'alpha'); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // If $page is not defined, or '' or -1 or if we click on clear filters $page = 0; @@ -81,12 +81,12 @@ if (!$sortfield) { $label = GETPOST("label", "alpha"); $morphy = GETPOST("morphy", "alpha"); -$status = GETPOST("status", "int"); -$subscription = GETPOST("subscription", "int"); +$status = GETPOSTINT("status"); +$subscription = GETPOSTINT("subscription"); $amount = GETPOST('amount', 'alpha'); -$duration_value = GETPOST('duration_value', 'int'); +$duration_value = GETPOSTINT('duration_value'); $duration_unit = GETPOST('duration_unit', 'alpha'); -$vote = GETPOST("vote", "int"); +$vote = GETPOSTINT("vote"); $comment = GETPOST("comment", 'restricthtml'); $mail_valid = GETPOST("mail_valid", 'restricthtml'); $caneditamount = GETPOSTINT("caneditamount"); @@ -145,7 +145,7 @@ if ($action == 'add' && $user->hasRight('adherent', 'configurer')) { $object->note_public = trim($comment); $object->note_private = ''; $object->mail_valid = trim($mail_valid); - $object->vote = (int) $vote; + $object->vote = $vote; // $vote is already int // Fill array 'array_options' with data from add form $ret = $extrafields->setOptionalsFromPost(null, $object); @@ -190,7 +190,7 @@ if ($action == 'update' && $user->hasRight('adherent', 'configurer')) { $object->oldcopy = dol_clone($object, 2); - $object->label= trim($label); + $object->label = trim($label); $object->morphy = trim($morphy); $object->status = (int) $status; $object->subscription = (int) $subscription; @@ -201,7 +201,7 @@ if ($action == 'update' && $user->hasRight('adherent', 'configurer')) { $object->note_public = trim($comment); $object->note_private = ''; $object->mail_valid = trim($mail_valid); - $object->vote = (bool) trim($vote); + $object->vote = $vote; // $vote is already int. // Fill array 'array_options' with data from add form $ret = $extrafields->setOptionalsFromPost(null, $object, '@GETPOSTISSET'); @@ -277,8 +277,8 @@ if (!$rowid && $action != 'create' && $action != 'edit') { $newcardbutton = ''; - $newcardbutton .= dolGetButtonTitle($langs->trans('ViewList'), '', 'fa fa-bars imgforviewmode', $_SERVER["PHP_SELF"].'?mode=common'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ((empty($mode) || $mode == 'common') ? 2 : 1), array('morecss'=>'reposition')); - $newcardbutton .= dolGetButtonTitle($langs->trans('ViewKanban'), '', 'fa fa-th-list imgforviewmode', $_SERVER["PHP_SELF"].'?mode=kanban'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ($mode == 'kanban' ? 2 : 1), array('morecss'=>'reposition')); + $newcardbutton .= dolGetButtonTitle($langs->trans('ViewList'), '', 'fa fa-bars imgforviewmode', $_SERVER["PHP_SELF"].'?mode=common'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ((empty($mode) || $mode == 'common') ? 2 : 1), array('morecss' => 'reposition')); + $newcardbutton .= dolGetButtonTitle($langs->trans('ViewKanban'), '', 'fa fa-th-list imgforviewmode', $_SERVER["PHP_SELF"].'?mode=kanban'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ($mode == 'kanban' ? 2 : 1), array('morecss' => 'reposition')); if ($user->hasRight('adherent', 'configurer')) { $newcardbutton .= dolGetButtonTitleSeparator(); @@ -379,9 +379,9 @@ if (!$rowid && $action != 'create' && $action != 'edit') { if ($objp->duration) { $duration_value = intval($objp->duration); if ($duration_value > 1) { - $dur = array("i"=>$langs->trans("Minutes"), "h"=>$langs->trans("Hours"), "d"=>$langs->trans("Days"), "w"=>$langs->trans("Weeks"), "m"=>$langs->trans("Months"), "y"=>$langs->trans("Years")); + $dur = array("i" => $langs->trans("Minutes"), "h" => $langs->trans("Hours"), "d" => $langs->trans("Days"), "w" => $langs->trans("Weeks"), "m" => $langs->trans("Months"), "y" => $langs->trans("Years")); } else { - $dur = array("i"=>$langs->trans("Minute"), "h"=>$langs->trans("Hour"), "d"=>$langs->trans("Day"), "w"=>$langs->trans("Week"), "m"=>$langs->trans("Month"), "y"=>$langs->trans("Year")); + $dur = array("i" => $langs->trans("Minute"), "h" => $langs->trans("Hour"), "d" => $langs->trans("Day"), "w" => $langs->trans("Week"), "m" => $langs->trans("Month"), "y" => $langs->trans("Year")); } $unit = preg_replace("/[^a-zA-Z]+/", "", $objp->duration); print max(1, $duration_value).' '.$dur[$unit]; @@ -441,7 +441,7 @@ if ($action == 'create') { print ''; print ''; // Morphy @@ -548,9 +548,9 @@ if ($rowid > 0) { print ''; @@ -592,7 +592,7 @@ if ($rowid > 0) { $morphy = ''; } - if ($user->hasRight('adherent', 'configurer')&& !empty($object->status)) { + if ($user->hasRight('adherent', 'configurer') && !empty($object->status)) { print ''; } else { print ''; @@ -712,7 +712,7 @@ if ($rowid > 0) { $titre .= " (".$membertype->label.")"; } - $param = "&rowid=".urlencode($object->id); + $param = "&rowid=".urlencode((string) ($object->id)); if (!empty($mode)) { $param .= '&mode='.urlencode($mode); } @@ -918,7 +918,7 @@ if ($rowid > 0) { } if ($i == 0) { - print ''; + print ''; } print "
'.$langs->trans("Categories").''; print $form->showCategories($object->id, Categorie::TYPE_MEMBER, 1); @@ -608,7 +608,7 @@ if (getDolGlobalInt('MAIN_MULTILANGS')) { // Public $linkofpubliclist = DOL_MAIN_URL_ROOT.'/public/members/public_list.php'.((isModEnabled('multicompany')) ? '?entity='.$conf->entity : ''); -print '
'.$langs->trans("Public", getDolGlobalString('MAIN_INFO_SOCIETE_NOM'), $linkofpubliclist).''.yn($object->public).'
'.$form->textwithpicto($langs->trans("PublicFile"), $langs->trans("Public", getDolGlobalString('MAIN_INFO_SOCIETE_NOM'), $linkofpubliclist), 1, 'help', '', 0, 3, 'publicfile').''.yn($object->public).'
'.dol_print_date($db->jdate($objp->dateh), 'day')."'.dol_print_date($db->jdate($objp->datef), 'day')."'.price($objp->subscription).''; if ($objp->bid) { $accountstatic->label = $objp->label; @@ -808,7 +808,7 @@ if ($action != 'addsubscription' && $action != 'create_thirdparty') { if (empty($num)) { $colspan = 6; - if (isModEnabled('banque')) { + if (isModEnabled('bank')) { $colspan++; } print '
'.$langs->trans("None").'
'.$langs->trans("DateSubscription").''; if (GETPOST('reday')) { - $datefrom = dol_mktime(0, 0, 0, GETPOST('remonth', 'int'), GETPOST('reday', 'int'), GETPOST('reyear', 'int')); + $datefrom = dol_mktime(0, 0, 0, GETPOSTINT('remonth'), GETPOSTINT('reday'), GETPOSTINT('reyear')); } if (!$datefrom) { $datefrom = $object->datevalid; @@ -996,12 +996,12 @@ if (($action == 'addsubscription' || $action == 'create_thirdparty') && $user->h $datefrom = dol_get_first_day(dol_print_date($datefrom, "%Y")); } } - print $form->selectDate($datefrom, '', '', '', '', "subscription", 1, 1); + print $form->selectDate($datefrom, '', 0, 0, 0, "subscription", 1, 1); print "
'.$langs->trans("DateEndSubscription").''; - print $form->selectDate($dateto, 'end', '', '', '', "subscription", 1, 0); + print $form->selectDate($dateto, 'end', 0, 0, 0, "subscription", 1, 0); print "
'.$langs->trans("Label").''; - print '
'.$langs->trans("BankTransactionLine").''; if ($object->fk_bank) { $bankline = new AccountLine($db); @@ -282,7 +282,7 @@ if ($rowid && $action != 'edit') { $formquestion=array(); //$formquestion['text']=''.$langs->trans("ThisWillAlsoDeleteBankRecord").''; $text = $langs->trans("ConfirmDeleteSubscription"); - if (isModEnabled("banque") && getDolGlobalString('ADHERENT_BANK_USE')) { + if (isModEnabled("bank") && getDolGlobalString('ADHERENT_BANK_USE')) { $text .= '
'.img_warning().' '.$langs->trans("ThisWillAlsoDeleteBankRecord"); } print $form->formconfirm($_SERVER["PHP_SELF"]."?rowid=".$object->id, $langs->trans("DeleteSubscription"), $text, "confirm_delete", $formquestion, 0, 1); @@ -334,10 +334,10 @@ if ($rowid && $action != 'edit') { print '
'.$langs->trans("Amount").''.price($object->amount).'
'.$langs->trans("Label").''.dol_string_onlythesehtmltags(dol_htmlentitiesbr($object->note_private)).'
'.$langs->trans("Label").''.dol_string_onlythesehtmltags(dol_htmlentitiesbr($object->note_public)).'
'.$langs->trans("BankTransactionLine").''; if ($object->fk_bank > 0) { $bankline = new AccountLine($db); @@ -371,7 +371,7 @@ if ($rowid && $action != 'edit') { // Delete if ($user->hasRight('adherent', 'cotisation', 'creer')) { - print '\n"; + print '\n"; } print ''; diff --git a/htdocs/adherents/subscription/info.php b/htdocs/adherents/subscription/info.php index 14afbafca50..6bdf0fd6f5d 100644 --- a/htdocs/adherents/subscription/info.php +++ b/htdocs/adherents/subscription/info.php @@ -36,7 +36,7 @@ if (!$user->hasRight('adherent', 'lire')) { accessforbidden(); } -$rowid = GETPOST("rowid", 'int'); +$rowid = GETPOSTINT("rowid"); diff --git a/htdocs/adherents/subscription/list.php b/htdocs/adherents/subscription/list.php index f411810242d..3a99f379502 100644 --- a/htdocs/adherents/subscription/list.php +++ b/htdocs/adherents/subscription/list.php @@ -34,7 +34,7 @@ $langs->loadLangs(array("members", "companies", "banks")); $action = GETPOST('action', 'aZ09') ? GETPOST('action', 'aZ09') : 'view'; // The action 'create'/'add', 'edit'/'update', 'view', ... $massaction = GETPOST('massaction', 'alpha'); // The bulk action (combo box choice into lists) -$show_files = GETPOST('show_files', 'int'); // Show files area generated by bulk actions ? +$show_files = GETPOSTINT('show_files'); // Show files area generated by bulk actions ? $confirm = GETPOST('confirm', 'alpha'); // Result of a confirmation $cancel = GETPOST('cancel', 'alpha'); // We click on a Cancel button $toselect = GETPOST('toselect', 'array'); // Array of ids of elements selected into a list @@ -50,17 +50,17 @@ $search_lastname = GETPOST('search_lastname', 'alpha'); $search_firstname = GETPOST('search_firstname', 'alpha'); $search_login = GETPOST('search_login', 'alpha'); $search_note = GETPOST('search_note', 'alpha'); -$search_account = GETPOST('search_account', 'int'); +$search_account = GETPOSTINT('search_account'); $search_amount = GETPOST('search_amount', 'alpha'); $search_all = ''; $date_select = GETPOST("date_select", 'alpha'); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // If $page is not defined, or '' or -1 or if we click on clear filters $page = 0; @@ -89,20 +89,20 @@ $search_array_options = $extrafields->getOptionalsFromPost($object->table_elemen $fieldstosearchall = array( ); $arrayfields = array( - 'd.ref'=>array('label'=>"Ref", 'checked'=>1), - 'd.fk_type'=>array('label'=>"Type", 'checked'=>1), - 'd.lastname'=>array('label'=>"Lastname", 'checked'=>1), - 'd.firstname'=>array('label'=>"Firstname", 'checked'=>1), - 'd.login'=>array('label'=>"Login", 'checked'=>1), - 't.libelle'=>array('label'=>"Label", 'checked'=>1), - 'd.bank'=>array('label'=>"BankAccount", 'checked'=>1, 'enabled'=>(isModEnabled('banque'))), + 'd.ref' => array('label' => "Ref", 'checked' => 1), + 'd.fk_type' => array('label' => "Type", 'checked' => 1), + 'd.lastname' => array('label' => "Lastname", 'checked' => 1), + 'd.firstname' => array('label' => "Firstname", 'checked' => 1), + 'd.login' => array('label' => "Login", 'checked' => 1), + 't.libelle' => array('label' => "Label", 'checked' => 1), + 'd.bank' => array('label' => "BankAccount", 'checked' => 1, 'enabled' => (isModEnabled('bank'))), /*'d.note_public'=>array('label'=>"NotePublic", 'checked'=>0), 'd.note_private'=>array('label'=>"NotePrivate", 'checked'=>0),*/ - 'c.dateadh'=>array('label'=>"DateSubscription", 'checked'=>1, 'position'=>100), - 'c.datef'=>array('label'=>"EndSubscription", 'checked'=>1, 'position'=>101), - 'd.amount'=>array('label'=>"Amount", 'checked'=>1, 'position'=>102), - 'c.datec'=>array('label'=>"DateCreation", 'checked'=>0, 'position'=>500), - 'c.tms'=>array('label'=>"DateModificationShort", 'checked'=>0, 'position'=>500), + 'c.dateadh' => array('label' => "DateSubscription", 'checked' => 1, 'position' => 100), + 'c.datef' => array('label' => "EndSubscription", 'checked' => 1, 'position' => 101), + 'd.amount' => array('label' => "Amount", 'checked' => 1, 'position' => 102), + 'c.datec' => array('label' => "DateCreation", 'checked' => 0, 'position' => 500), + 'c.tms' => array('label' => "DateModificationShort", 'checked' => 0, 'position' => 500), // 'd.statut'=>array('label'=>"Status", 'checked'=>1, 'position'=>1000) ); @@ -124,7 +124,7 @@ if (!GETPOST('confirmmassaction', 'alpha') && $massaction != 'presend' && $massa $massaction = ''; } -$parameters = array('socid'=>isset($socid) ? $socid : null); +$parameters = array('socid' => isset($socid) ? $socid : null); $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); @@ -298,7 +298,7 @@ $arrayofselected = is_array($toselect) ? $toselect : array(); $param = ''; if (!empty($mode)) { - $param .='&mode='.urlencode($mode); + $param .= '&mode='.urlencode($mode); } if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) { $param .= '&contextpage='.urlencode($contextpage); @@ -322,7 +322,7 @@ if ($search_login) { $param .= "&search_login=".urlencode($search_login); } if ($search_account) { - $param .= "&search_account=".urlencode($search_account); + $param .= "&search_account=".urlencode((string) ($search_account)); } if ($search_amount) { $param .= "&search_amount=".urlencode($search_amount); @@ -345,7 +345,7 @@ $arrayofmassactions = array( if (!empty($permissiontodelete)) { $arrayofmassactions['predelete'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete"); } -if (GETPOST('nomassaction', 'int') || in_array($massaction, array('presend', 'predelete'))) { +if (GETPOSTINT('nomassaction') || in_array($massaction, array('presend', 'predelete'))) { $arrayofmassactions = array(); } $massactionbutton = $form->selectMassAction('', $arrayofmassactions); @@ -366,8 +366,8 @@ print ''; print ''; $newcardbutton = ''; -$newcardbutton .= dolGetButtonTitle($langs->trans('ViewList'), '', 'fa fa-bars imgforviewmode', $_SERVER["PHP_SELF"].'?mode=common'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ((empty($mode) || $mode == 'common') ? 2 : 1), array('morecss'=>'reposition')); -$newcardbutton .= dolGetButtonTitle($langs->trans('ViewKanban'), '', 'fa fa-th-list imgforviewmode', $_SERVER["PHP_SELF"].'?mode=kanban'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ($mode == 'kanban' ? 2 : 1), array('morecss'=>'reposition')); +$newcardbutton .= dolGetButtonTitle($langs->trans('ViewList'), '', 'fa fa-bars imgforviewmode', $_SERVER["PHP_SELF"].'?mode=common'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ((empty($mode) || $mode == 'common') ? 2 : 1), array('morecss' => 'reposition')); +$newcardbutton .= dolGetButtonTitle($langs->trans('ViewKanban'), '', 'fa fa-th-list imgforviewmode', $_SERVER["PHP_SELF"].'?mode=kanban'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ($mode == 'kanban' ? 2 : 1), array('morecss' => 'reposition')); if ($user->hasRight('adherent', 'cotisation', 'creer')) { $newcardbutton .= dolGetButtonTitleSeparator(); $newcardbutton .= dolGetButtonTitle($langs->trans('NewSubscription'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/adherents/list.php?status=-1,1'); @@ -414,7 +414,7 @@ if (!empty($moreforfilter)) { } $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; -$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')) : ''); // This also change content of $arrayfields +$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) : ''); // This also change content of $arrayfields $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); print '
'; // You can use div-table-responsive-no-min if you don't need reserved height for your table @@ -492,7 +492,7 @@ if (!empty($arrayfields['d.amount']['checked'])) { include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php'; // Fields from hook -$parameters = array('arrayfields'=>$arrayfields); +$parameters = array('arrayfields' => $arrayfields); $reshook = $hookmanager->executeHooks('printFieldListOption', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; // Date creation @@ -571,7 +571,7 @@ if (!empty($arrayfields['d.amount']['checked'])) { include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; // Hook fields -$parameters = array('arrayfields'=>$arrayfields, 'param'=>$param, 'sortfield'=>$sortfield, 'sortorder'=>$sortorder, 'totalarray'=>&$totalarray); +$parameters = array('arrayfields' => $arrayfields, 'param' => $param, 'sortfield' => $sortfield, 'sortorder' => $sortorder, 'totalarray' => &$totalarray); $reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; if (!empty($arrayfields['c.datec']['checked'])) { @@ -647,7 +647,7 @@ while ($i < $imaxinloop) { $accountstatic->fetch($obj->fk_account); } // Output Kanban - print $subscription->getKanbanView('', array('selected' => in_array($object->id, $arrayofselected), 'adherent_type' => $adht, 'member' => $adherent, 'bank'=>($obj->fk_account > 0 ? $accountstatic : null))); + print $subscription->getKanbanView('', array('selected' => in_array($object->id, $arrayofselected), 'adherent_type' => $adht, 'member' => $adherent, 'bank' => ($obj->fk_account > 0 ? $accountstatic : null))); if ($i == ($imaxinloop - 1)) { print '
'; print '
'.dol_print_date($objectlink->dateh, 'day').''; if ($user->hasRight('adherent', 'lire')) { - $total = $total + $objectlink->amount; + $total += $objectlink->amount; echo price($objectlink->amount); } echo '
'.$langs->trans("Label").'
'.$langs->trans("Status").''; - print $form->selectarray('status', array('0'=>$langs->trans('ActivityCeased'), '1'=>$langs->trans('InActivity')), 1, 0, 0, 0, '', 0, 0, 0, '', 'minwidth100'); + print $form->selectarray('status', array('0' => $langs->trans('ActivityCeased'), '1' => $langs->trans('InActivity')), 1, 0, 0, 0, '', 0, 0, 0, '', 'minwidth100'); print '
'.$langs->trans("Duration").''.$object->duration_value.' '; if ($object->duration_value > 1) { - $dur = array("i"=>$langs->trans("Minutes"), "h"=>$langs->trans("Hours"), "d"=>$langs->trans("Days"), "w"=>$langs->trans("Weeks"), "m"=>$langs->trans("Months"), "y"=>$langs->trans("Years")); + $dur = array("i" => $langs->trans("Minutes"), "h" => $langs->trans("Hours"), "d" => $langs->trans("Days"), "w" => $langs->trans("Weeks"), "m" => $langs->trans("Months"), "y" => $langs->trans("Years")); } elseif ($object->duration_value > 0) { - $dur = array("i"=>$langs->trans("Minute"), "h"=>$langs->trans("Hour"), "d"=>$langs->trans("Day"), "w"=>$langs->trans("Week"), "m"=>$langs->trans("Month"), "y"=>$langs->trans("Year")); + $dur = array("i" => $langs->trans("Minute"), "h" => $langs->trans("Hour"), "d" => $langs->trans("Day"), "w" => $langs->trans("Week"), "m" => $langs->trans("Month"), "y" => $langs->trans("Year")); } print(!empty($object->duration_unit) && isset($dur[$object->duration_unit]) ? $langs->trans($dur[$object->duration_unit]) : '')." "; print '
'.$langs->trans("None").'
'.$langs->trans("None").'
\n"; @@ -956,7 +956,7 @@ if ($rowid > 0) { print '
'.$langs->trans("Label").'
'.$langs->trans("Status").''; - print $form->selectarray('status', array('0'=>$langs->trans('ActivityCeased'), '1'=>$langs->trans('InActivity')), $object->status, 0, 0, 0, '', 0, 0, 0, '', 'minwidth100'); + print $form->selectarray('status', array('0' => $langs->trans('ActivityCeased'), '1' => $langs->trans('InActivity')), $object->status, 0, 0, 0, '', 0, 0, 0, '', 'minwidth100'); print '
'; print img_picto('', 'globe-americas', 'class="pictofixedwidth"'); -print $form->select_country((GETPOSTISSET('country_id') ? GETPOST('country_id', 'int') : (getDolGlobalString('MAIN_INFO_ACCOUNTANT_COUNTRY') ? $conf->global->MAIN_INFO_ACCOUNTANT_COUNTRY : '')), 'country_id'); +print $form->select_country((GETPOSTISSET('country_id') ? GETPOSTINT('country_id') : (getDolGlobalString('MAIN_INFO_ACCOUNTANT_COUNTRY') ? $conf->global->MAIN_INFO_ACCOUNTANT_COUNTRY : '')), 'country_id'); if ($user->admin) { print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1); } @@ -147,13 +147,13 @@ print '
'; print img_picto('', 'state', 'class="pictofixedwidth"'); -print $formcompany->select_state((GETPOSTISSET('state_id') ? GETPOST('state_id', 'int') : (getDolGlobalString('MAIN_INFO_ACCOUNTANT_STATE') ? $conf->global->MAIN_INFO_ACCOUNTANT_STATE : '')), (GETPOSTISSET('country_id') ? GETPOST('country_id', 'int') : (getDolGlobalString('MAIN_INFO_ACCOUNTANT_COUNTRY') ? $conf->global->MAIN_INFO_ACCOUNTANT_COUNTRY : '')), 'state_id'); +print $formcompany->select_state((GETPOSTISSET('state_id') ? GETPOSTINT('state_id') : (getDolGlobalString('MAIN_INFO_ACCOUNTANT_STATE') ? $conf->global->MAIN_INFO_ACCOUNTANT_STATE : '')), (GETPOSTISSET('country_id') ? GETPOSTINT('country_id') : (getDolGlobalString('MAIN_INFO_ACCOUNTANT_COUNTRY') ? $conf->global->MAIN_INFO_ACCOUNTANT_COUNTRY : '')), 'state_id'); print '
'; print img_picto('', 'object_phoning', '', false, 0, 0, '', 'pictofixedwidth'); -print '
"; @@ -224,7 +226,7 @@ print ''; print ""; print ''; - // Nb + // Nb @phan-suppress-next-line PhanPluginSuspiciousParamPosition print '"; // Name print ''; @@ -286,6 +288,7 @@ while ($i <= $MAXAGENDA) { if (!empty($conf->use_javascript_ajax)) { print ajax_constantonoff('AGENDA_EXT_ACTIVEBYDEFAULT' . $key); } else { + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition if (getDolGlobalString($default)) { print '' . img_picto($langs->trans("Disabled"), 'off') . ''; } else { diff --git a/htdocs/admin/agenda_other.php b/htdocs/admin/agenda_other.php index 772bc0efa6a..dcc7cdec446 100644 --- a/htdocs/admin/agenda_other.php +++ b/htdocs/admin/agenda_other.php @@ -5,6 +5,7 @@ * Copyright (C) 2015 Jean-François Ferry * Copyright (C) 2016 Charlie Benke * Copyright (C) 2017 Open-DSI + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -89,7 +90,7 @@ if ($action == 'set') { dolibarr_set_const($db, 'AGENDA_DEFAULT_VIEW', GETPOST('AGENDA_DEFAULT_VIEW'), 'chaine', 0, '', $conf->entity); $defaultValues = new DefaultValues($db); - $result = $defaultValues->fetchAll('', '', 0, 0, array('t.page'=>'comm/action/card.php', 't.param'=>'complete', 't.user_id'=>'0', 't.type'=>'createform', 't.entity'=>$conf->entity)); + $result = $defaultValues->fetchAll('', '', 0, 0, array('t.page' => 'comm/action/card.php', 't.param' => 'complete', 't.user_id' => '0', 't.type' => 'createform', 't.entity' => $conf->entity)); if (!is_array($result) && $result < 0) { setEventMessages($defaultValues->error, $defaultValues->errors, 'errors'); } elseif (count($result) > 0) { @@ -123,18 +124,16 @@ if ($action == 'set') { // Search template files $file = ''; $classname = ''; - $filefound = 0; $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']); foreach ($dirmodels as $reldir) { $file = dol_buildpath($reldir."core/modules/action/doc/pdf_".$modele.".modules.php", 0); if (file_exists($file)) { - $filefound = 1; $classname = "pdf_".$modele; break; } } - if ($filefound) { + if ($classname !== '') { require_once $file; $module = new $classname($db, $commande); @@ -334,7 +333,7 @@ $htmltext = $langs->trans("ThisValueCanOverwrittenOnUserLevel", $langs->transnoe print ''."\n"; print ''."\n"; print ''."\n"; @@ -369,7 +368,7 @@ print ''."\n"; print ''; print ''; print "\n"; +$bankorder = array(); $bankorder[0][0] = $langs->trans("BankOrderGlobal"); $bankorder[0][1] = $langs->trans("BankOrderGlobalDesc"); $bankorder[0][2] = 'BankCode DeskCode BankAccountNumber BankAccountNumberKey'; @@ -309,6 +309,7 @@ foreach ($dirmodels as $reldir) { if (is_dir($dir)) { $handle = opendir($dir); if (is_resource($handle)) { + $filelist = array(); while (($file = readdir($handle)) !== false) { $filelist[] = $file; } diff --git a/htdocs/admin/barcode.php b/htdocs/admin/barcode.php index be817438610..49f2dc3380c 100644 --- a/htdocs/admin/barcode.php +++ b/htdocs/admin/barcode.php @@ -70,7 +70,7 @@ if ($action == 'setbarcodethirdpartyon') { if ($action == 'setcoder') { $coder = GETPOST('coder', 'alpha'); - $code_id = GETPOST('code_id', 'int'); + $code_id = GETPOSTINT('code_id'); $sqlp = "UPDATE ".MAIN_DB_PREFIX."c_barcode_type"; $sqlp .= " SET coder = '".$db->escape($coder)."'"; $sqlp .= " WHERE rowid = ".((int) $code_id); diff --git a/htdocs/admin/bom.php b/htdocs/admin/bom.php index 9435f55868d..ebfa4e6772a 100644 --- a/htdocs/admin/bom.php +++ b/htdocs/admin/bom.php @@ -1,5 +1,6 @@ + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -76,18 +77,16 @@ if ($action == 'updateMask') { // Search template files $file = ''; $classname = ''; - $filefound = 0; $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']); foreach ($dirmodels as $reldir) { $file = dol_buildpath($reldir."core/modules/bom/doc/pdf_".$modele.".modules.php", 0); if (file_exists($file)) { - $filefound = 1; $classname = "pdf_".$modele; break; } } - if ($filefound) { + if ($classname !== '') { require_once $file; $module = new $classname($db); @@ -331,6 +330,7 @@ foreach ($dirmodels as $reldir) { if (is_dir($dir)) { $handle = opendir($dir); if (is_resource($handle)) { + $filelist = array(); while (($file = readdir($handle)) !== false) { $filelist[] = $file; } diff --git a/htdocs/admin/boxes.php b/htdocs/admin/boxes.php index 189fb532e1f..99d56c35658 100644 --- a/htdocs/admin/boxes.php +++ b/htdocs/admin/boxes.php @@ -36,7 +36,7 @@ if (!$user->admin) { accessforbidden(); } -$rowid = GETPOST('rowid', 'int'); +$rowid = GETPOSTINT('rowid'); $action = GETPOST('action', 'aZ09'); @@ -50,7 +50,7 @@ $boxes = array(); */ if ($action == 'addconst') { - dolibarr_set_const($db, "MAIN_BOXES_MAXLINES", GETPOST("MAIN_BOXES_MAXLINES", 'int'), '', 0, '', $conf->entity); + dolibarr_set_const($db, "MAIN_BOXES_MAXLINES", GETPOSTINT("MAIN_BOXES_MAXLINES"), '', 0, '', $conf->entity); dolibarr_set_const($db, "MAIN_ACTIVATE_FILECACHE", GETPOST("MAIN_ACTIVATE_FILECACHE", 'alpha'), 'chaine', 0, '', $conf->entity); } @@ -165,10 +165,10 @@ if ($action == 'switch') { $db->begin(); $objfrom = new ModeleBoxes($db); - $objfrom->fetch(GETPOST("switchfrom", 'int')); + $objfrom->fetch(GETPOSTINT("switchfrom")); $objto = new ModeleBoxes($db); - $objto->fetch(GETPOST('switchto', 'int')); + $objto->fetch(GETPOSTINT('switchto')); $resultupdatefrom = 0; $resultupdateto = 0; diff --git a/htdocs/admin/commande.php b/htdocs/admin/commande.php index 445535a55e4..af9db12a62b 100644 --- a/htdocs/admin/commande.php +++ b/htdocs/admin/commande.php @@ -10,6 +10,7 @@ * Copyright (C) 2011-2016 Philippe Grand * Copyright (C) 2013 Florian Henry * Copyright (C) 2021 Frédéric France + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -86,18 +87,16 @@ if ($action == 'updateMask') { // Search template files $file = ''; $classname = ''; - $filefound = 0; $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']); foreach ($dirmodels as $reldir) { $file = dol_buildpath($reldir."core/modules/commande/doc/pdf_".$modele.".modules.php", 0); if (file_exists($file)) { - $filefound = 1; $classname = "pdf_".$modele; break; } } - if ($filefound) { + if ($classname !== '') { require_once $file; $module = new $classname($db); @@ -414,6 +413,7 @@ foreach ($dirmodels as $reldir) { if (is_dir($dir)) { $handle = opendir($dir); if (is_resource($handle)) { + $filelist = array(); while (($file = readdir($handle)) !== false) { $filelist[] = $file; } @@ -533,7 +533,7 @@ print ''; print ''; @@ -542,8 +542,8 @@ print "\n"; print ''; print ""; print ""; print ''; print ""; print "'."\n"; +print ''."\n"; // Address print ''."\n"; +print ''."\n"; // Zip print ''."\n"; +print ''."\n"; print ''."\n"; +print ''."\n"; // Country print ''."\n"; // Phone print ''; +print ''; +print ''."\n"; + +// Phone mobile +print ''; print ''."\n"; // Fax print ''; +print ''; print ''."\n"; // Email diff --git a/htdocs/admin/const.php b/htdocs/admin/const.php index f290df752bc..317e838e922 100644 --- a/htdocs/admin/const.php +++ b/htdocs/admin/const.php @@ -32,19 +32,19 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/security.lib.php'; // Load translation files required by the page $langs->load("admin"); -$rowid = GETPOST('rowid', 'int'); -$entity = GETPOST('entity', 'int'); +$rowid = GETPOSTINT('rowid'); +$entity = GETPOSTINT('entity'); $action = GETPOST('action', 'aZ09'); -$debug = GETPOST('debug', 'int'); +$debug = GETPOSTINT('debug'); $consts = GETPOST('const', 'array'); $constname = GETPOST('constname', 'alphanohtml'); $constvalue = GETPOST('constvalue', 'restricthtml'); // We should be able to send everything here $constnote = GETPOST('constnote', 'alpha'); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha') || (empty($toselect) && $massaction === '0')) { $page = 0; } // If $page is not defined, or '' or -1 or if we click on clear filters or if we select empty mass action diff --git a/htdocs/admin/contract.php b/htdocs/admin/contract.php index 29effeb5c80..89e09907a6e 100644 --- a/htdocs/admin/contract.php +++ b/htdocs/admin/contract.php @@ -1,6 +1,7 @@ * Copyright (C) 2011-2018 Philippe Grand + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -55,7 +56,7 @@ if (!getDolGlobalString('CONTRACT_ADDON')) { include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php'; -$error=0; +$error = 0; if ($action == 'updateMask') { $maskconst = GETPOST('maskconstcontract', 'aZ09'); @@ -82,18 +83,16 @@ if ($action == 'updateMask') { // Search template files $file = ''; $classname = ''; - $filefound = 0; $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']); foreach ($dirmodels as $reldir) { $file = dol_buildpath($reldir."core/modules/contract/doc/pdf_".$modele.".modules.php", 0); if (file_exists($file)) { - $filefound = 1; $classname = "pdf_".$modele; break; } } - if ($filefound) { + if ($classname !== '') { require_once $file; $module = new $classname($db); @@ -363,6 +362,7 @@ foreach ($dirmodels as $reldir) { if (is_dir($dir)) { $handle = opendir($dir); if (is_resource($handle)) { + $filelist = array(); while (($file = readdir($handle)) !== false) { $filelist[] = $file; } diff --git a/htdocs/admin/debugbar.php b/htdocs/admin/debugbar.php index 0994918d462..d06fb6502a2 100644 --- a/htdocs/admin/debugbar.php +++ b/htdocs/admin/debugbar.php @@ -49,8 +49,8 @@ $action = GETPOST('action', 'aZ09'); if ($action == 'set') { $db->begin(); - $result1 = dolibarr_set_const($db, "DEBUGBAR_LOGS_LINES_NUMBER", GETPOST('DEBUGBAR_LOGS_LINES_NUMBER', 'int'), 'chaine', 0, '', 0); - $result2 = dolibarr_set_const($db, "DEBUGBAR_USE_LOG_FILE", GETPOST('DEBUGBAR_USE_LOG_FILE', 'int'), 'chaine', 0, '', 0); + $result1 = dolibarr_set_const($db, "DEBUGBAR_LOGS_LINES_NUMBER", GETPOSTINT('DEBUGBAR_LOGS_LINES_NUMBER'), 'chaine', 0, '', 0); + $result2 = dolibarr_set_const($db, "DEBUGBAR_USE_LOG_FILE", GETPOSTINT('DEBUGBAR_USE_LOG_FILE'), 'chaine', 0, '', 0); if ($result1 < 0 || $result2 < 0) { $error++; } diff --git a/htdocs/admin/defaultvalues.php b/htdocs/admin/defaultvalues.php index 5c92e5acd14..430befce12b 100644 --- a/htdocs/admin/defaultvalues.php +++ b/htdocs/admin/defaultvalues.php @@ -46,10 +46,10 @@ $optioncss = GETPOST('optionscss', 'alphanohtml'); $mode = GETPOST('mode', 'aZ09') ? GETPOST('mode', 'aZ09') : 'createform'; // 'createform', 'filters', 'sortorder', 'focus' -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -356,7 +356,7 @@ print ''."\n"; print ''."\n"; -$result = $object->fetchAll($sortorder, $sortfield, 0, 0, array('t.type'=>$mode,'t.entity'=>array($user->entity,$conf->entity))); +$result = $object->fetchAll($sortorder, $sortfield, 0, 0, array('t.type'=>$mode, 't.entity'=>array($user->entity,$conf->entity))); if (!is_array($result) && $result < 0) { setEventMessages($object->error, $object->errors, 'errors'); @@ -366,7 +366,7 @@ if (!is_array($result) && $result < 0) { // Page print ''; } else { $tmpaction = 'view'; - $parameters = array('fieldlist'=>$fieldlist, 'tabname'=>$tabname[$id]); + $parameters = array('fieldlist' => $fieldlist, 'tabname' => $tabname[$id]); $reshook = $hookmanager->executeHooks('viewDictionaryFieldlist', $parameters, $obj, $tmpaction); // Note that $action and $object may have been modified by some hooks $error = $hookmanager->error; @@ -2281,7 +2282,7 @@ if ($id > 0) { $key = $langs->trans("PaymentType".strtoupper($obj->code)); $valuetoshow = ($obj->code && $key != "PaymentType".strtoupper($obj->code) ? $key : $obj->$value); } elseif ($value == 'type' && $tabname[$id] == 'c_paiement') { - $payment_type_list = array(0=>$langs->trans('PaymentTypeCustomer'), 1=>$langs->trans('PaymentTypeSupplier'), 2=>$langs->trans('PaymentTypeBoth')); + $payment_type_list = array(0 => $langs->trans('PaymentTypeCustomer'), 1 => $langs->trans('PaymentTypeSupplier'), 2 => $langs->trans('PaymentTypeBoth')); $valuetoshow = $payment_type_list[$valuetoshow]; } elseif ($value == 'label' && $tabname[$id] == 'c_input_reason') { $key = $langs->trans("DemandReasonType".strtoupper($obj->code)); @@ -2305,10 +2306,10 @@ if ($id > 0) { $showfield = 0; } elseif ($value == 'unicode') { $valuetoshow = $langs->getCurrencySymbol($obj->code, 1); - } elseif ($value == 'label' && $tabname[GETPOST("id", 'int')] == 'c_units') { + } elseif ($value == 'label' && $tabname[GETPOSTINT("id")] == 'c_units') { $langs->load("products"); $valuetoshow = $langs->trans($obj->$value); - } elseif ($value == 'short_label' && $tabname[GETPOST("id", 'int')] == 'c_units') { + } elseif ($value == 'short_label' && $tabname[GETPOSTINT("id")] == 'c_units') { $langs->load("products"); $valuetoshow = $langs->trans($obj->$value); } elseif (($value == 'unit') && ($tabname[$id] == 'c_paper_format')) { @@ -2378,7 +2379,7 @@ if ($id > 0) { } elseif ($value == 'icon') { $valuetoshow = $obj->{$value}." ".img_picto("", $obj->{$value}); } elseif ($value == 'type_duration') { - $TDurationTypes = array('y'=>$langs->trans('Years'), 'm'=>$langs->trans('Month'), 'w'=>$langs->trans('Weeks'), 'd'=>$langs->trans('Days'), 'h'=>$langs->trans('Hours'), 'i'=>$langs->trans('Minutes')); + $TDurationTypes = array('y' => $langs->trans('Years'), 'm' => $langs->trans('Month'), 'w' => $langs->trans('Weeks'), 'd' => $langs->trans('Days'), 'h' => $langs->trans('Hours'), 'i' => $langs->trans('Minutes')); if (!empty($obj->{$value}) && array_key_exists($obj->{$value}, $TDurationTypes)) { $valuetoshow = $TDurationTypes[$obj->{$value}]; } @@ -2634,6 +2635,7 @@ function fieldList($fieldlist, $obj = null, $tabname = '', $context = '') } elseif (in_array($value, array('public', 'use_default'))) { // Fields 0/1 with a combo select Yes/No print ''; } elseif ($value == 'private') { @@ -2648,7 +2650,7 @@ function fieldList($fieldlist, $obj = null, $tabname = '', $context = '') print ''; } elseif ($value == 'type' && $tabname == 'c_paiement') { print ''; } elseif ($value == 'recuperableonly' || $value == 'type_cdr' || $value == 'deductible' || $value == 'category_type') { @@ -2658,8 +2660,9 @@ function fieldList($fieldlist, $obj = null, $tabname = '', $context = '') print ''; @@ -2709,7 +2712,7 @@ function fieldList($fieldlist, $obj = null, $tabname = '', $context = '') } elseif ($value == 'type_vat') { // VAT type 0: all, 1: sell, 2: purchase print ''; } elseif ($value == 'localtax1_type' || $value == 'localtax2_type') { // Le type de taxe locale diff --git a/htdocs/admin/dolistore/ajax/image.php b/htdocs/admin/dolistore/ajax/image.php index 9ff92554e09..e5896a4eec1 100644 --- a/htdocs/admin/dolistore/ajax/image.php +++ b/htdocs/admin/dolistore/ajax/image.php @@ -40,8 +40,8 @@ top_httphead('image'); $dolistore = new Dolistore(); -$id_product = GETPOST('id_product', 'int'); -$id_image = GETPOST('id_image', 'int'); +$id_product = GETPOSTINT('id_product'); +$id_image = GETPOSTINT('id_image'); // quality : image resize with this in the URL : "cart_default", "home_default", "large_default", "medium_default", "small_default", "thickbox_default" $quality = GETPOST('quality', 'alpha'); diff --git a/htdocs/admin/dolistore/class/PSWebServiceLibrary.class.php b/htdocs/admin/dolistore/class/PSWebServiceLibrary.class.php index 647d68820e6..219eaeb6274 100644 --- a/htdocs/admin/dolistore/class/PSWebServiceLibrary.class.php +++ b/htdocs/admin/dolistore/class/PSWebServiceLibrary.class.php @@ -292,6 +292,7 @@ class PrestaShopWebservice if (LIBXML_VERSION < 20900) { // Avoid load of external entities (security problem). // Required only if LIBXML_VERSION < 20900 + // @phan-suppress-next-line PhanDeprecatedFunctionInternal libxml_disable_entity_loader(true); } diff --git a/htdocs/admin/dolistore/class/dolistore.class.php b/htdocs/admin/dolistore/class/dolistore.class.php index 2fee52df32b..ac2e3c2ea46 100644 --- a/htdocs/admin/dolistore/class/dolistore.class.php +++ b/htdocs/admin/dolistore/class/dolistore.class.php @@ -68,7 +68,7 @@ class Dolistore $langtmp = explode('_', $langs->defaultlang); $lang = $langtmp[0]; - $lang_array = array('en'=>1, 'fr'=>2, 'es'=>3, 'it'=>4, 'de'=>5); // Into table ps_lang of Prestashop - 1 + $lang_array = array('en' => 1, 'fr' => 2, 'es' => 3, 'it' => 4, 'de' => 5); // Into table ps_lang of Prestashop - 1 if (!in_array($lang, array_keys($lang_array))) { $lang = 'en'; } @@ -270,7 +270,7 @@ class Dolistore // add image or default ? if ($product->id_default_image != '') { - $image_url = DOL_URL_ROOT.'/admin/dolistore/ajax/image.php?id_product='.urlencode(((int) $product->id)).'&id_image='.urlencode(((int) $product->id_default_image)); + $image_url = DOL_URL_ROOT.'/admin/dolistore/ajax/image.php?id_product='.urlencode((string) (((int) $product->id))).'&id_image='.urlencode((string) (((int) $product->id_default_image))); $images = ''; $images .= ''; } else { diff --git a/htdocs/admin/emailcollector_card.php b/htdocs/admin/emailcollector_card.php index b061eabdfe2..844f897547f 100644 --- a/htdocs/admin/emailcollector_card.php +++ b/htdocs/admin/emailcollector_card.php @@ -53,7 +53,7 @@ if (!isModEnabled('emailcollector')) { $langs->loadLangs(array("admin", "mails", "other")); // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm', 'alpha'); @@ -61,7 +61,7 @@ $cancel = GETPOST('cancel', 'aZ09'); $contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'emailcollectorcard'; // To manage different context of search $backtopage = GETPOST('backtopage', 'alpha'); -$operationid = GETPOST('operationid', 'int'); +$operationid = GETPOSTINT('operationid'); // Initialize technical objects $object = new EmailCollector($db); @@ -154,7 +154,7 @@ if (GETPOST('addfilter', 'alpha')) { if ($action == 'deletefilter') { $emailcollectorfilter = new EmailCollectorFilter($db); - $emailcollectorfilter->fetch(GETPOST('filterid', 'int')); + $emailcollectorfilter->fetch(GETPOSTINT('filterid')); if ($emailcollectorfilter->id > 0) { $result = $emailcollectorfilter->delete($user); if ($result > 0) { @@ -198,7 +198,7 @@ if (GETPOST('addoperation', 'alpha')) { if ($action == 'updateoperation') { $emailcollectoroperation = new EmailCollectorAction($db); - $emailcollectoroperation->fetch(GETPOST('rowidoperation2', 'int')); + $emailcollectoroperation->fetch(GETPOSTINT('rowidoperation2')); $emailcollectoroperation->actionparam = GETPOST('operationparam2', 'alphawithlgt'); @@ -221,7 +221,7 @@ if ($action == 'updateoperation') { } if ($action == 'deleteoperation') { $emailcollectoroperation = new EmailCollectorAction($db); - $emailcollectoroperation->fetch(GETPOST('operationid', 'int')); + $emailcollectoroperation->fetch(GETPOSTINT('operationid')); if ($emailcollectoroperation->id > 0) { $result = $emailcollectoroperation->delete($user); if ($result > 0) { diff --git a/htdocs/admin/emailcollector_list.php b/htdocs/admin/emailcollector_list.php index 833e822c288..84706102216 100644 --- a/htdocs/admin/emailcollector_list.php +++ b/htdocs/admin/emailcollector_list.php @@ -38,7 +38,7 @@ $langs->loadLangs(array("admin", "other")); $action = GETPOST('action', 'aZ09') ? GETPOST('action', 'aZ09') : 'view'; // The action 'add', 'create', 'edit', 'update', 'view', ... $massaction = GETPOST('massaction', 'alpha'); // The bulk action (combo box choice into lists) -$show_files = GETPOST('show_files', 'int'); // Show files area generated by bulk actions ? +$show_files = GETPOSTINT('show_files'); // Show files area generated by bulk actions ? $confirm = GETPOST('confirm', 'alpha'); // Result of a confirmation $cancel = GETPOST('cancel', 'alpha'); // We click on a Cancel button $toselect = GETPOST('toselect', 'array'); // Array of ids of elements selected into a list @@ -47,13 +47,13 @@ $backtopage = GETPOST('backtopage', 'alpha'); // Go back to a dedicated page $optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print') $mode = GETPOST('mode', 'aZ'); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha') || (empty($toselect) && $massaction === '0')) { // If $page is not defined, or '' or -1 or if we click on clear filters or if we select empty mass action $page = 0; @@ -99,8 +99,8 @@ foreach ($object->fields as $key => $val) { $search[$key] = GETPOST('search_'.$key, 'alpha'); } if (preg_match('/^(date|timestamp|datetime)/', $val['type'])) { - $search[$key.'_dtstart'] = dol_mktime(0, 0, 0, GETPOST('search_'.$key.'_dtstartmonth', 'int'), GETPOST('search_'.$key.'_dtstartday', 'int'), GETPOST('search_'.$key.'_dtstartyear', 'int')); - $search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOST('search_'.$key.'_dtendmonth', 'int'), GETPOST('search_'.$key.'_dtendday', 'int'), GETPOST('search_'.$key.'_dtendyear', 'int')); + $search[$key.'_dtstart'] = dol_mktime(0, 0, 0, GETPOSTINT('search_'.$key.'_dtstartmonth'), GETPOSTINT('search_'.$key.'_dtstartday'), GETPOSTINT('search_'.$key.'_dtstartyear')); + $search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOSTINT('search_'.$key.'_dtendmonth'), GETPOSTINT('search_'.$key.'_dtendday'), GETPOSTINT('search_'.$key.'_dtendyear')); } } @@ -121,7 +121,7 @@ foreach ($object->fields as $key => $val) { $arrayfields['t.'.$key] = array( 'label'=>$val['label'], 'checked'=>(($visible < 0) ? 0 : 1), - 'enabled'=>(abs($visible) != 3 && dol_eval($val['enabled'], 1)), + 'enabled'=>(abs($visible) != 3 && (int) dol_eval($val['enabled'], 1)), 'position'=>$val['position'], 'help'=> isset($val['help']) ? $val['help'] : '' ); @@ -245,7 +245,7 @@ foreach ($search as $key => $val) { $mode_search = 2; } if ($search[$key] != '') { - $sql .= natural_search("t.".$db->escape($key), $search[$key], (($key == 'status') ? 2 : $mode_search)); + $sql .= natural_search("t.".$db->sanitize($key), $search[$key], (($key == 'status') ? 2 : $mode_search)); } } else { if (preg_match('/(_dtstart|_dtend)$/', $key) && $search[$key] != '') { @@ -365,7 +365,7 @@ $arrayofmassactions = array( if ($permissiontodelete) { $arrayofmassactions['predelete'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete"); } -if (GETPOST('nomassaction', 'int') || in_array($massaction, array('presend', 'predelete'))) { +if (GETPOSTINT('nomassaction') || in_array($massaction, array('presend', 'predelete'))) { $arrayofmassactions = array(); } $massactionbutton = $form->selectMassAction('', $arrayofmassactions); @@ -414,7 +414,7 @@ if (!empty($moreforfilter)) { } $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; -$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')); // This also change content of $arrayfields +$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')); // This also change content of $arrayfields $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); print '
'; // You can use div-table-responsive-no-min if you don't need reserved height for your table diff --git a/htdocs/admin/eventorganization.php b/htdocs/admin/eventorganization.php index 7016986b0bd..839125a8da3 100644 --- a/htdocs/admin/eventorganization.php +++ b/htdocs/admin/eventorganization.php @@ -1,5 +1,6 @@ + * Copyright (C) 2024 MDW * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -47,20 +48,20 @@ $scandir = GETPOST('scan_dir', 'alpha'); $type = 'myobject'; $arrayofparameters = array( - 'EVENTORGANIZATION_TASK_LABEL'=>array('type'=>'textarea','enabled'=>1), - 'EVENTORGANIZATION_CATEG_THIRDPARTY_CONF'=>array('type'=>'category:'.Categorie::TYPE_CUSTOMER, 'enabled'=>1), - 'EVENTORGANIZATION_CATEG_THIRDPARTY_BOOTH'=>array('type'=>'category:'.Categorie::TYPE_CUSTOMER, 'enabled'=>1), - 'EVENTORGANIZATION_FILTERATTENDEES_CAT'=>array('type'=>'category:'.Categorie::TYPE_CUSTOMER, 'enabled'=>1), - 'EVENTORGANIZATION_FILTERATTENDEES_TYPE'=>array('type'=>'thirdparty_type:', 'enabled'=>1), - 'EVENTORGANIZATION_TEMPLATE_EMAIL_ASK_CONF'=>array('type'=>'emailtemplate:conferenceorbooth', 'enabled'=>1), - 'EVENTORGANIZATION_TEMPLATE_EMAIL_ASK_BOOTH'=>array('type'=>'emailtemplate:conferenceorbooth', 'enabled'=>1), - 'EVENTORGANIZATION_TEMPLATE_EMAIL_AFT_SUBS_BOOTH'=>array('type'=>'emailtemplate:conferenceorbooth', 'enabled'=>1), - 'EVENTORGANIZATION_TEMPLATE_EMAIL_AFT_SUBS_EVENT'=>array('type'=>'emailtemplate:conferenceorbooth', 'enabled'=>1), + 'EVENTORGANIZATION_TASK_LABEL' => array('type' => 'textarea','enabled' => 1), + 'EVENTORGANIZATION_CATEG_THIRDPARTY_CONF' => array('type' => 'category:'.Categorie::TYPE_CUSTOMER, 'enabled' => 1), + 'EVENTORGANIZATION_CATEG_THIRDPARTY_BOOTH' => array('type' => 'category:'.Categorie::TYPE_CUSTOMER, 'enabled' => 1), + 'EVENTORGANIZATION_FILTERATTENDEES_CAT' => array('type' => 'category:'.Categorie::TYPE_CUSTOMER, 'enabled' => 1), + 'EVENTORGANIZATION_FILTERATTENDEES_TYPE' => array('type' => 'thirdparty_type:', 'enabled' => 1), + 'EVENTORGANIZATION_TEMPLATE_EMAIL_ASK_CONF' => array('type' => 'emailtemplate:conferenceorbooth', 'enabled' => 1), + 'EVENTORGANIZATION_TEMPLATE_EMAIL_ASK_BOOTH' => array('type' => 'emailtemplate:conferenceorbooth', 'enabled' => 1), + 'EVENTORGANIZATION_TEMPLATE_EMAIL_AFT_SUBS_BOOTH' => array('type' => 'emailtemplate:conferenceorbooth', 'enabled' => 1), + 'EVENTORGANIZATION_TEMPLATE_EMAIL_AFT_SUBS_EVENT' => array('type' => 'emailtemplate:conferenceorbooth', 'enabled' => 1), //'EVENTORGANIZATION_TEMPLATE_EMAIL_BULK_SPEAKER'=>array('type'=>'emailtemplate:conferenceorbooth', 'enabled'=>1), //'EVENTORGANIZATION_TEMPLATE_EMAIL_BULK_ATTENDES'=>array('type'=>'emailtemplate:conferenceorbooth', 'enabled'=>1), - 'SERVICE_BOOTH_LOCATION'=>array('type'=>'product', 'enabled'=>1), - 'SERVICE_CONFERENCE_ATTENDEE_SUBSCRIPTION'=>array('type'=>'product', 'enabled'=>1), - 'EVENTORGANIZATION_SECUREKEY'=>array('type'=>'securekey', 'enabled'=>1), + 'SERVICE_BOOTH_LOCATION' => array('type' => 'product', 'enabled' => 1), + 'SERVICE_CONFERENCE_ATTENDEE_SUBSCRIPTION' => array('type' => 'product', 'enabled' => 1), + 'EVENTORGANIZATION_SECUREKEY' => array('type' => 'securekey', 'enabled' => 1), ); $error = 0; @@ -80,7 +81,7 @@ if (empty($user->admin)) { */ if ($cancel) { - $action =''; + $action = ''; } include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php'; @@ -101,46 +102,9 @@ if ($action == 'updateMask') { } else { setEventMessages($langs->trans("Error"), null, 'errors'); } -} elseif ($action == 'specimen') { - $modele = GETPOST('module', 'alpha'); - $tmpobjectkey = GETPOST('object'); - - $tmpobject = new $tmpobjectkey($db); - $tmpobject->initAsSpecimen(); - - // Search template files - $file = ''; - $classname = ''; - $filefound = 0; - $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']); - foreach ($dirmodels as $reldir) { - $file = dol_buildpath($reldir."core/modules/eventorganization/doc/pdf_".$modele."_".strtolower($tmpobjectkey).".modules.php", 0); - if (file_exists($file)) { - $filefound = 1; - $classname = "pdf_".$modele; - break; - } - } - - if ($filefound) { - require_once $file; - - $module = new $classname($db); - - if ($module->write_file($tmpobject, $langs) > 0) { - header("Location: ".DOL_URL_ROOT."/document.php?modulepart=".strtolower($tmpobjectkey)."&file=SPECIMEN.pdf"); - return; - } else { - setEventMessages($module->error, null, 'errors'); - dol_syslog($module->error, LOG_ERR); - } - } else { - setEventMessages($langs->trans("ErrorModuleNotFound"), null, 'errors'); - dol_syslog($langs->trans("ErrorModuleNotFound"), LOG_ERR); - } } elseif ($action == 'setmod') { // TODO Check if numbering module chosen can be activated by calling method canBeActivated - $tmpobjectkey = GETPOST('object'); + $tmpobjectkey = GETPOST('object', 'aZ09'); if (!empty($tmpobjectkey)) { $constforval = 'EVENTORGANIZATION_'.strtoupper($tmpobjectkey)."_ADDON"; dolibarr_set_const($db, $constforval, $value, 'chaine', 0, '', $conf->entity); @@ -151,7 +115,7 @@ if ($action == 'updateMask') { } elseif ($action == 'del') { $ret = delDocumentModel($value, $type); if ($ret > 0) { - $tmpobjectkey = GETPOST('object'); + $tmpobjectkey = GETPOST('object', 'aZ09'); if (!empty($tmpobjectkey)) { $constforval = 'EVENTORGANIZATION_'.strtoupper($tmpobjectkey).'_ADDON_PDF'; if (getDolGlobalString($constforval) == "$value") { @@ -161,7 +125,7 @@ if ($action == 'updateMask') { } }/* elseif ($action == 'setdoc') { // Set or unset default model - $tmpobjectkey = GETPOST('object'); + $tmpobjectkey = GETPOST('object', 'aZ09'); if (!empty($tmpobjectkey)) { $constforval = 'EVENTORGANIZATION_'.strtoupper($tmpobjectkey).'_ADDON_PDF'; if (dolibarr_set_const($db, $constforval, $value, 'chaine', 0, '', $conf->entity)) { @@ -177,7 +141,7 @@ if ($action == 'updateMask') { } } } elseif ($action == 'unsetdoc') { - $tmpobjectkey = GETPOST('object'); + $tmpobjectkey = GETPOST('object', 'aZ09'); if (!empty($tmpobjectkey)) { $constforval = 'EVENTORGANIZATION_'.strtoupper($tmpobjectkey).'_ADDON_PDF'; dolibarr_del_const($db, $constforval, $conf->entity); @@ -218,7 +182,7 @@ if ($action == 'edit') { print '
'; foreach ($arrayofparameters as $constname => $val) { - if ($val['enabled']==1) { + if ($val['enabled'] == 1) { $setupnotempty++; print ''; foreach ($arrayofparameters as $constname => $val) { - if ($val['enabled']==1) { + if ($val['enabled'] == 1) { $setupnotempty++; print ''; print ''; echo ''; - echo ''; - echo ''; + echo ''; + echo ''; echo ''; echo ''; echo ''; @@ -308,7 +308,7 @@ foreach ($rules as $rule) { echo ''; foreach ($arrayofparameters as $constname => $val) { - if ($val['enabled']==1) { + if ($val['enabled'] == 1) { $setupnotempty++; print ''; foreach ($arrayofparameters as $constname => $val) { - if ($val['enabled']==1) { + if ($val['enabled'] == 1) { $setupnotempty++; print '\n"; print ''; print ''; print ''; +print ''; print '\n"; print ''; @@ -776,6 +785,7 @@ $htmltext .= ''; print ''; print ''; print ''; +print ''; print '\n"; print ''; @@ -795,12 +805,13 @@ print ''; print ''; print ''; print ''; +print ''; print ''; print '\n"; print ''; diff --git a/htdocs/admin/facture_situation.php b/htdocs/admin/invoice_situation.php similarity index 99% rename from htdocs/admin/facture_situation.php rename to htdocs/admin/invoice_situation.php index b514ef81721..d1a557f183d 100644 --- a/htdocs/admin/facture_situation.php +++ b/htdocs/admin/invoice_situation.php @@ -22,7 +22,7 @@ */ /** - * \file htdocs/admin/facture.php + * \file htdocs/admin/invoice_situation.php * \ingroup facture * \brief Page to setup invoice module */ diff --git a/htdocs/admin/knowledgemanagement.php b/htdocs/admin/knowledgemanagement.php index c50951f1e3f..ef80a03cbcb 100644 --- a/htdocs/admin/knowledgemanagement.php +++ b/htdocs/admin/knowledgemanagement.php @@ -1,6 +1,7 @@ - * Copyright (C) 2021 SuperAdmin +/* Copyright (C) 2004-2017 Laurent Destailleur + * Copyright (C) 2024 MDW + * Copyright (C) 2024 Frédéric France * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -30,6 +31,7 @@ global $langs, $user; // Libraries require_once DOL_DOCUMENT_ROOT."/core/lib/admin.lib.php"; require_once DOL_DOCUMENT_ROOT."/knowledgemanagement/lib/knowledgemanagement.lib.php"; +require_once DOL_DOCUMENT_ROOT."/knowledgemanagement/class/knowledgerecord.class.php"; // Translations $langs->loadLangs(array("admin", "knowledgemanagement")); @@ -45,7 +47,7 @@ $scandir = GETPOST('scan_dir', 'alpha'); $type = 'knowledgemanagement'; $arrayofparameters = array( - 'KNOWLEDGEMANAGEMENT_MYPARAM1'=>array('type'=>'string', 'css'=>'minwidth500' ,'enabled'=>0), + //'KNOWLEDGEMANAGEMENT_MYPARAM1' => array('type' => 'string', 'css' => 'minwidth500' ,'enabled' => 0), //'KNOWLEDGEMANAGEMENT_MYPARAM2'=>array('type'=>'textarea','enabled'=>1), //'KNOWLEDGEMANAGEMENT_MYPARAM3'=>array('type'=>'category:'.Categorie::TYPE_CUSTOMER, 'enabled'=>1), //'KNOWLEDGEMANAGEMENT_MYPARAM4'=>array('type'=>'emailtemplate:thirdparty', 'enabled'=>1), @@ -61,6 +63,20 @@ if (!$user->admin) { accessforbidden(); } +if (!getDolGlobalString('KNOWLEDGEMANAGEMENT_KNOWLEDGERECORD_ADDON')) { + $conf->global->KNOWLEDGEMANAGEMENT_KNOWLEDGERECORD_ADDON = 'mod_knowledgerecord_standard'; +} + +$moduledir = 'knowledgemanagement'; +$myTmpObjects = array(); +// TODO Scan list of objects to fill this array +$myTmpObjects['knowledgemanagement'] = array('label' => 'KnowledgeManagement', 'includerefgeneration' => 1, 'includedocgeneration' => 0, 'class' => 'KnowledgeRecord'); + +$tmpobjectkey = GETPOST('object', 'aZ09'); +if ($tmpobjectkey && !array_key_exists($tmpobjectkey, $myTmpObjects)) { + accessforbidden('Bad value for object. Hack attempt ?'); +} + /* * Actions @@ -70,10 +86,10 @@ include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php'; if ($action == 'updateMask') { $maskconst = GETPOST('maskconst', 'aZ09'); - $maskorder = GETPOST('maskorder', 'alpha'); + $maskdata = GETPOST('maskKnowledgeRecord', 'alpha'); if ($maskconst && preg_match('/_MASK$/', $maskconst)) { - $res = dolibarr_set_const($db, $maskconst, $maskorder, 'chaine', 0, '', $conf->entity); + $res = dolibarr_set_const($db, $maskconst, $maskdata, 'chaine', 0, '', $conf->entity); if (!($res > 0)) { $error++; } @@ -84,31 +100,29 @@ if ($action == 'updateMask') { } else { setEventMessages($langs->trans("Error"), null, 'errors'); } -} elseif ($action == 'specimen') { +} elseif ($action == 'specimen' && $tmpobjectkey) { $modele = GETPOST('module', 'alpha'); - $tmpobjectkey = GETPOST('object'); - $tmpobject = new $tmpobjectkey($db); + $className = $myTmpObjects[$tmpobjectkey]['class']; + $tmpobject = new $className($db); $tmpobject->initAsSpecimen(); // Search template files $file = ''; - $classname = ''; - $filefound = 0; + $className = ''; $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']); foreach ($dirmodels as $reldir) { $file = dol_buildpath($reldir."core/modules/knowledgemanagement/doc/pdf_".$modele."_".strtolower($tmpobjectkey).".modules.php", 0); if (file_exists($file)) { - $filefound = 1; - $classname = "pdf_".$modele; + $className = "pdf_".$modele; break; } } - if ($filefound) { + if ($className !== '') { require_once $file; - $module = new $classname($db); + $module = new $className($db); if ($module->write_file($tmpobject, $langs) > 0) { header("Location: ".DOL_URL_ROOT."/document.php?modulepart=".strtolower($tmpobjectkey)."&file=SPECIMEN.pdf"); @@ -123,7 +137,6 @@ if ($action == 'updateMask') { } } elseif ($action == 'setmod') { // TODO Check if numbering module chosen can be activated by calling method canBeActivated - $tmpobjectkey = GETPOST('object'); if (!empty($tmpobjectkey)) { $constforval = 'KNOWLEDGEMANAGEMENT_'.strtoupper($tmpobjectkey)."_ADDON"; dolibarr_set_const($db, $constforval, $value, 'chaine', 0, '', $conf->entity); @@ -134,7 +147,7 @@ if ($action == 'updateMask') { } elseif ($action == 'del') { $ret = delDocumentModel($value, $type); if ($ret > 0) { - $tmpobjectkey = GETPOST('object'); + $tmpobjectkey = GETPOST('object', 'aZ09'); if (!empty($tmpobjectkey)) { $constforval = 'KNOWLEDGEMANAGEMENT_'.strtoupper($tmpobjectkey).'_ADDON_PDF'; if (getDolGlobalString($constforval) == "$value") { @@ -144,7 +157,6 @@ if ($action == 'updateMask') { } } elseif ($action == 'setdoc') { // Set or unset default model - $tmpobjectkey = GETPOST('object'); if (!empty($tmpobjectkey)) { $constforval = 'KNOWLEDGEMANAGEMENT_'.strtoupper($tmpobjectkey).'_ADDON_PDF'; if (dolibarr_set_const($db, $constforval, $value, 'chaine', 0, '', $conf->entity)) { @@ -160,7 +172,6 @@ if ($action == 'updateMask') { } } } elseif ($action == 'unsetdoc') { - $tmpobjectkey = GETPOST('object'); if (!empty($tmpobjectkey)) { $constforval = 'KNOWLEDGEMANAGEMENT_'.strtoupper($tmpobjectkey).'_ADDON_PDF'; dolibarr_del_const($db, $constforval, $conf->entity); @@ -202,7 +213,7 @@ if ($action == 'edit') { print ''; foreach ($arrayofparameters as $constname => $val) { - if ($val['enabled']==1) { + if ($val['enabled'] == 1) { $setupnotempty++; print ''; foreach ($arrayofparameters as $constname => $val) { - if ($val['enabled']==1) { + if ($val['enabled'] == 1) { $setupnotempty++; print ''."\n"; print ''; - $mytmpinstance = new $myTmpObjectKey($db); + $className = $myTmpObjectArray['class']; + $mytmpinstance = new $className($db); $mytmpinstance->initAsSpecimen(); // Info @@ -449,7 +453,7 @@ foreach ($myTmpObjects as $myTmpObjectKey => $myTmpObjectArray) { print "
".$langs->trans("ExtSitesEnableThisTool")."'; if ($conf->use_javascript_ajax) { - print ajax_constantonoff('AGENDA_DISABLE_EXT', array('enabled'=>array(0=>'.hideifnotset')), null, 1); + print ajax_constantonoff('AGENDA_DISABLE_EXT', array('enabled' => array(0 => '.hideifnotset')), null, 1); } else { if (!getDolGlobalString('AGENDA_DISABLE_EXT')) { print ''.img_picto($langs->trans("Enabled"), 'on').''; @@ -269,7 +271,7 @@ while ($i <= $MAXAGENDA) { $default = 'AGENDA_EXT_ACTIVEBYDEFAULT' . $key; print '
' . $langs->trans("AgendaExtNb", $key) . "'.$form->textwithpicto($langs->trans("AGENDA_DEFAULT_VIEW"), $htmltext).' '."\n"; -$tmplist = array(''=>' ', 'show_list'=>$langs->trans("ViewList"), 'show_month'=>$langs->trans("ViewCal"), 'show_week'=>$langs->trans("ViewWeek"), 'show_day'=>$langs->trans("ViewDay"), 'show_peruser'=>$langs->trans("ViewPerUser")); +$tmplist = array('' => ' ', 'show_list' => $langs->trans("ViewList"), 'show_month' => $langs->trans("ViewCal"), 'show_week' => $langs->trans("ViewWeek"), 'show_day' => $langs->trans("ViewDay"), 'show_peruser' => $langs->trans("ViewPerUser")); print $form->selectarray('AGENDA_DEFAULT_VIEW', $tmplist, getDolGlobalString('AGENDA_DEFAULT_VIEW')); print '
 '."\n"; $defval = 'na'; $defaultValues = new DefaultValues($db); -$result = $defaultValues->fetchAll('', '', 0, 0, array('t.page'=>'comm/action/card.php', 't.param'=>'complete', 't.user_id'=>'0', 't.type'=>'createform', 't.entity'=>$conf->entity)); +$result = $defaultValues->fetchAll('', '', 0, 0, array('t.page' => 'comm/action/card.php', 't.param' => 'complete', 't.user_id' => '0', 't.type' => 'createform', 't.entity' => $conf->entity)); if (!is_array($result) && $result < 0) { setEventMessages($defaultValues->error, $defaultValues->errors, 'errors'); } elseif (count($result) > 0) { diff --git a/htdocs/admin/agenda_reminder.php b/htdocs/admin/agenda_reminder.php index fa4dd0df9a1..cdc6a2b8647 100644 --- a/htdocs/admin/agenda_reminder.php +++ b/htdocs/admin/agenda_reminder.php @@ -1,5 +1,6 @@ + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -86,18 +87,16 @@ if ($action == 'set') { // Search template files $file = ''; $classname = ''; - $filefound = 0; $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']); foreach ($dirmodels as $reldir) { $file = dol_buildpath($reldir."core/modules/action/doc/pdf_".$modele.".modules.php", 0); if (file_exists($file)) { - $filefound = 1; $classname = "pdf_".$modele; break; } } - if ($filefound) { + if ($classname !== '') { require_once $file; $module = new $classname($db, $commande); diff --git a/htdocs/admin/agenda_xcal.php b/htdocs/admin/agenda_xcal.php index 3700ecf631f..5ac6e892611 100644 --- a/htdocs/admin/agenda_xcal.php +++ b/htdocs/admin/agenda_xcal.php @@ -48,10 +48,10 @@ if (GETPOSTISSET('MAIN_AGENDA_XCAL_EXPORTKEY')) { $MAIN_AGENDA_XCAL_EXPORTKEY = trim(GETPOST('MAIN_AGENDA_XCAL_EXPORTKEY', 'alpha')); } if (GETPOSTISSET('MAIN_AGENDA_EXPORT_PAST_DELAY')) { - $MAIN_AGENDA_EXPORT_PAST_DELAY = intval(GETPOST('MAIN_AGENDA_EXPORT_PAST_DELAY', 'int')); + $MAIN_AGENDA_EXPORT_PAST_DELAY = intval(GETPOSTINT('MAIN_AGENDA_EXPORT_PAST_DELAY')); } if (GETPOSTISSET('MAIN_AGENDA_EXPORT_CACHE')) { - $MAIN_AGENDA_EXPORT_CACHE = intval(GETPOST('MAIN_AGENDA_EXPORT_CACHE', 'int')); + $MAIN_AGENDA_EXPORT_CACHE = intval(GETPOSTINT('MAIN_AGENDA_EXPORT_CACHE')); } if (GETPOSTISSET('AGENDA_EXPORT_FIX_TZ')) { $AGENDA_EXPORT_FIX_TZ = trim(GETPOST('AGENDA_EXPORT_FIX_TZ', 'alpha')); diff --git a/htdocs/admin/bank.php b/htdocs/admin/bank.php index 7e29be5e759..865b54f5878 100644 --- a/htdocs/admin/bank.php +++ b/htdocs/admin/bank.php @@ -3,6 +3,7 @@ * Copyright (C) 2010-2016 Juanjo Menent * Copyright (C) 2013-2018 Philippe Grand * Copyright (C) 2015 Jean-François Ferry + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -131,18 +132,16 @@ if ($action == 'specimen') { // Search template files $file = ''; $classname = ''; - $filefound = 0; $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']); foreach ($dirmodels as $reldir) { $file = dol_buildpath($reldir."core/modules/bank/doc/pdf_".$modele.".modules.php", 0); if (file_exists($file)) { - $filefound = 1; $classname = "pdf_".$modele; break; } } - if ($filefound) { + if ($classname !== '') { require_once $file; $module = new $classname($db); @@ -220,6 +219,7 @@ print ''.$langs->trans("Example").''.$langs->trans("Status").'
'; print ''; print $langs->trans("PaymentMode").''; -if (!isModEnabled('facture')) { +if (!isModEnabled('invoice')) { print ''; } print '
".$langs->trans("SuggestPaymentByRIBOnAccount").""; -if (!isModEnabled('facture')) { - if (isModEnabled("banque")) { +if (!isModEnabled('invoice')) { + if (isModEnabled("bank")) { $sql = "SELECT rowid, label"; $sql .= " FROM ".MAIN_DB_PREFIX."bank_account"; $sql .= " WHERE clos = 0"; @@ -581,7 +581,7 @@ print "
".$langs->trans("SuggestPaymentByChequeToAddress").""; -if (!isModEnabled('facture')) { +if (!isModEnabled('invoice')) { print '
'.$langs-> // Name print '
'; -print '
'; -print '
'; -print '
'; -print '
'; @@ -481,13 +482,19 @@ print '
'; print img_picto('', 'object_phoning', '', false, 0, 0, '', 'pictofixedwidth'); -print '
'; +print img_picto('', 'object_phoning_mobile', '', false, 0, 0, '', 'pictofixedwidth'); +print '
'; print img_picto('', 'object_phoning_fax', '', false, 0, 0, '', 'pictofixedwidth'); -print '
'; - if ($action != 'edit' || GETPOST('rowid', 'int') != $defaultvalue->id) { + if ($action != 'edit' || GETPOSTINT('rowid') != $defaultvalue->id) { print $defaultvalue->page; } else { print ''; diff --git a/htdocs/admin/delais.php b/htdocs/admin/delais.php index ef1d477a624..0a7a3ea4e7a 100644 --- a/htdocs/admin/delais.php +++ b/htdocs/admin/delais.php @@ -188,7 +188,7 @@ if ($action == 'update') { // Update values for ($i = 0; $i < 4; $i++) { if (GETPOSTISSET('MAIN_METEO'.$plus.'_LEVEL'.$i)) { - dolibarr_set_const($db, 'MAIN_METEO'.$plus.'_LEVEL'.$i, GETPOST('MAIN_METEO'.$plus.'_LEVEL'.$i, 'int'), 'chaine', 0, '', $conf->entity); + dolibarr_set_const($db, 'MAIN_METEO'.$plus.'_LEVEL'.$i, GETPOSTINT('MAIN_METEO'.$plus.'_LEVEL'.$i), 'chaine', 0, '', $conf->entity); } } diff --git a/htdocs/admin/delivery.php b/htdocs/admin/delivery.php index e20c40a5db1..2c66f284c7d 100644 --- a/htdocs/admin/delivery.php +++ b/htdocs/admin/delivery.php @@ -8,6 +8,7 @@ * Copyright (C) 2011-2013 Juanjo Menent * Copyright (C) 2011-2018 Philippe Grand * Copyright (C) 2015 Claudio Aschieri + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -58,7 +59,7 @@ include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php'; // Shipment note -if (isModEnabled('expedition') && !getDolGlobalString('MAIN_SUBMODULE_EXPEDITION')) { +if (isModEnabled('shipping') && !getDolGlobalString('MAIN_SUBMODULE_EXPEDITION')) { // This option should always be set to on when module is on. dolibarr_set_const($db, "MAIN_SUBMODULE_EXPEDITION", "1", 'chaine', 0, '', $conf->entity); } @@ -131,18 +132,16 @@ if ($action == 'specimen') { // Search template files $file = ''; $classname = ''; - $filefound = 0; $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']); foreach ($dirmodels as $reldir) { $file = dol_buildpath($reldir."core/modules/delivery/doc/pdf_".$modele.".modules.php", 0); if (file_exists($file)) { - $filefound = 1; $classname = "pdf_".$modele; break; } } - if ($filefound) { + if ($classname !== '') { require_once $file; $module = new $classname($db); @@ -373,6 +372,7 @@ if (getDolGlobalString('MAIN_SUBMODULE_DELIVERY')) { if (is_dir($dir)) { $handle = opendir($dir); if (is_resource($handle)) { + $filelist = array(); while (($file = readdir($handle)) !== false) { $filelist[] = $file; } diff --git a/htdocs/admin/dict.php b/htdocs/admin/dict.php index b4d928ada43..d895854ab2c 100644 --- a/htdocs/admin/dict.php +++ b/htdocs/admin/dict.php @@ -49,12 +49,13 @@ $langs->loadLangs(array("errors", "admin", "main", "companies", "resource", "hol $action = GETPOST('action', 'alpha') ? GETPOST('action', 'alpha') : 'view'; $confirm = GETPOST('confirm', 'alpha'); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $rowid = GETPOST('rowid', 'alpha'); -$entity = GETPOST('entity', 'int'); +$entity = GETPOSTINT('entity'); $code = GETPOST('code', 'alpha'); -$acts = array(); $actl = array(); +$acts = array(); +$actl = array(); $acts[0] = "activate"; $acts[1] = "disable"; $actl[0] = img_picto($langs->trans("Disabled"), 'switch_off', 'class="size15x"'); @@ -65,7 +66,7 @@ $listoffset = GETPOST('listoffset'); $listlimit = GETPOST('listlimit') > 0 ? GETPOST('listlimit') : 1000; // To avoid too long dictionaries $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // If $page is not defined, or '' or -1 or if we click on clear filters $page = 0; @@ -74,7 +75,7 @@ $offset = $listlimit * $page; $pageprev = $page - 1; $pagenext = $page + 1; -$search_country_id = GETPOST('search_country_id', 'int'); +$search_country_id = GETPOSTINT('search_country_id'); $search_code = GETPOST('search_code', 'alpha'); $search_active = GETPOST('search_active', 'alpha'); @@ -472,7 +473,7 @@ $tabrowid[27] = "id"; $tabrowid[28] = ""; $tabrowid[29] = ""; $tabrowid[30] = ""; -$tabrowid[31]= ""; +$tabrowid[31] = ""; $tabrowid[32] = "id"; $tabrowid[33] = "rowid"; $tabrowid[34] = "rowid"; @@ -493,24 +494,24 @@ $tabcond[1] = (isModEnabled("societe")); $tabcond[2] = true; $tabcond[3] = true; $tabcond[4] = true; -$tabcond[5] = (isModEnabled("societe") || isModEnabled('adherent')); +$tabcond[5] = (isModEnabled("societe") || isModEnabled('member')); $tabcond[6] = isModEnabled('agenda'); $tabcond[7] = isModEnabled('tax'); $tabcond[8] = isModEnabled("societe"); $tabcond[9] = true; $tabcond[10] = true; $tabcond[11] = (isModEnabled("societe")); -$tabcond[12] = (isModEnabled('commande') || isModEnabled("propal") || isModEnabled('facture') || isModEnabled("supplier_invoice") || isModEnabled("supplier_order")); -$tabcond[13] = (isModEnabled('commande') || isModEnabled("propal") || isModEnabled('facture') || isModEnabled("supplier_invoice") || isModEnabled("supplier_order")); +$tabcond[12] = (isModEnabled('order') || isModEnabled("propal") || isModEnabled('invoice') || isModEnabled("supplier_invoice") || isModEnabled("supplier_order")); +$tabcond[13] = (isModEnabled('order') || isModEnabled("propal") || isModEnabled('invoice') || isModEnabled("supplier_invoice") || isModEnabled("supplier_order")); $tabcond[14] = (isModEnabled("product") && (isModEnabled('ecotax') || getDolGlobalString('MAIN_SHOW_ECOTAX_DICTIONNARY'))); $tabcond[15] = true; $tabcond[16] = (isModEnabled("societe") && !getDolGlobalString('SOCIETE_DISABLE_PROSPECTS')); $tabcond[17] = (isModEnabled('deplacement') || isModEnabled('expensereport')); -$tabcond[18] = isModEnabled("expedition") || isModEnabled("reception"); +$tabcond[18] = isModEnabled("shipping") || isModEnabled("reception"); $tabcond[19] = isModEnabled("societe"); $tabcond[20] = isModEnabled("supplier_order"); $tabcond[21] = isModEnabled("propal"); -$tabcond[22] = (isModEnabled('commande') || isModEnabled("propal")); +$tabcond[22] = (isModEnabled('order') || isModEnabled("propal")); $tabcond[23] = true; $tabcond[24] = isModEnabled('resource'); $tabcond[25] = isModEnabled('website'); @@ -518,8 +519,8 @@ $tabcond[25] = isModEnabled('website'); $tabcond[27] = isModEnabled("societe"); $tabcond[28] = isModEnabled('holiday'); $tabcond[29] = isModEnabled('project'); -$tabcond[30] = (isModEnabled('label') || isModEnabled('barcode') || isModEnabled('adherent')); // stickers format dictionary -$tabcond[31] = ((isModEnabled('facture') || isModEnabled('supplier_invoice')) && $mysoc->country_code == 'GR'); +$tabcond[30] = (isModEnabled('label') || isModEnabled('barcode') || isModEnabled('member')); // stickers format dictionary +$tabcond[31] = ((isModEnabled('invoice') || isModEnabled('supplier_invoice')) && $mysoc->country_code == 'GR'); $tabcond[32] = (isModEnabled('holiday') || isModEnabled('hrm')); $tabcond[33] = isModEnabled('hrm'); $tabcond[34] = isModEnabled('hrm'); @@ -539,58 +540,58 @@ $tabhelp = array(); // Table to store complete information (will replace all other table). Key is table name. $tabcomplete = array( - 'c_forme_juridique'=>array( - 'picto'=>'company', - 'help'=>array('code'=>$langs->trans("EnterAnyCode")) + 'c_forme_juridique' => array( + 'picto' => 'company', + 'help' => array('code' => $langs->trans("EnterAnyCode")) ), - 'c_departements'=>array( - 'picto'=>'state', - 'help'=>array('code'=>$langs->trans("EnterAnyCode")) + 'c_departements' => array( + 'picto' => 'state', + 'help' => array('code' => $langs->trans("EnterAnyCode")) ), - 'c_regions'=>array( - 'picto'=>'region', - 'help'=>array('code'=>$langs->trans("EnterAnyCode")) + 'c_regions' => array( + 'picto' => 'region', + 'help' => array('code' => $langs->trans("EnterAnyCode")) ), - 'c_country'=>array('picto'=>'country', 'help'=>array('code'=>$langs->trans("EnterAnyCode"))), - 'c_civility'=>array('picto'=>'contact', 'help'=>array('code'=>$langs->trans("EnterAnyCode"))), - 'c_actioncomm'=>array('picto'=>'action', 'help'=>array('code'=>$langs->trans("EnterAnyCode"), 'color'=>$langs->trans("ColorFormat"), 'position'=>$langs->trans("PositionIntoComboList"))), - 'c_chargesociales'=>array('picto'=>'bill', 'help'=>array('code'=>$langs->trans("EnterAnyCode"))), - 'c_typent'=>array('picto'=>'company', 'help'=>array('code'=>$langs->trans("EnterAnyCode"), 'position'=>$langs->trans("PositionIntoComboList"))), - 'c_currencies'=>array('picto'=>'multicurrency', 'help'=>array('code'=>$langs->trans("EnterAnyCode"), 'unicode'=>$langs->trans("UnicodeCurrency"))), - 'c_tva'=>array('picto'=>'bill', 'help'=>array('code'=>$langs->trans("EnterAnyCode"), 'taux'=>$langs->trans("SellTaxRate"), 'recuperableonly'=>$langs->trans("RecuperableOnly"), 'localtax1_type'=>$langs->trans("LocalTaxDesc"), 'localtax2_type'=>$langs->trans("LocalTaxDesc"))), - 'c_type_contact'=>array('picto'=>'contact', 'help'=>array('code'=>$langs->trans("EnterAnyCode"), 'position'=>$langs->trans("PositionIntoComboList"))), - 'c_payment_term'=>array('picto'=>'bill', 'help'=>array('code'=>$langs->trans("EnterAnyCode"), 'type_cdr'=>$langs->trans("TypeCdr", $langs->transnoentitiesnoconv("NbOfDays"), $langs->transnoentitiesnoconv("Offset"), $langs->transnoentitiesnoconv("NbOfDays"), $langs->transnoentitiesnoconv("Offset")))), - 'c_paiement'=>array('picto'=>'bill', 'help'=>array('code'=>$langs->trans("EnterAnyCode"))), - 'c_ecotaxe'=>array('picto'=>'bill', 'help'=>array('code'=>$langs->trans("EnterAnyCode"))), - 'c_paper_format'=>array('picto'=>'generic', 'help'=>array('code'=>$langs->trans("EnterAnyCode"))), - 'c_prospectlevel'=>array('picto'=>'company', 'help'=>array('code'=>$langs->trans("EnterAnyCode"))), - 'c_type_fees'=>array('picto'=>'trip', 'help'=>array('code'=>$langs->trans("EnterAnyCode"))), - 'c_shipment_mode'=>array('picto'=>'shipment', 'help'=>array('code'=>$langs->trans("EnterAnyCode"), 'tracking'=>$langs->trans("UrlTrackingDesc"))), - 'c_effectif'=>array('picto'=>'company', 'help'=>array('code'=>$langs->trans("EnterAnyCode"))), - 'c_input_method'=>array('picto'=>'order', 'help'=>array('code'=>$langs->trans("EnterAnyCode"))), - 'c_input_reason'=>array('picto'=>'order', 'help'=>array('code'=>$langs->trans("EnterAnyCode"), 'position'=>$langs->trans("PositionIntoComboList"))), - 'c_availability'=>array('picto'=>'shipment', 'help'=>array('code'=>$langs->trans("EnterAnyCode"))), - 'c_revenuestamp'=>array('picto'=>'bill', 'help'=>array('revenuestamp_type'=>$langs->trans('FixedOrPercent'))), - 'c_type_resource'=>array('picto'=>'resource', 'help'=>array('code'=>$langs->trans("EnterAnyCode"))), - 'c_type_container'=>array('picto'=>'website', 'help'=>array('code'=>$langs->trans("EnterAnyCode"))), - 'c_stcomm'=>array('picto'=>'company', 'help'=>array('code'=>$langs->trans("EnterAnyCode"), 'picto'=>$langs->trans("PictoHelp"))), - 'c_holiday_types'=>array('picto'=>'holiday', 'help'=>array('affect'=>$langs->trans("FollowedByACounter"), 'delay'=>$langs->trans("MinimumNoticePeriod"), 'newbymonth'=>$langs->trans("NbAddedAutomatically"))), - 'c_lead_status'=>array('picto'=>'project', 'help'=>array('code'=>$langs->trans("EnterAnyCode"), 'percent'=>$langs->trans("OpportunityPercent"), 'position'=>$langs->trans("PositionIntoComboList"))), - 'c_format_cards'=>array('picto'=>'generic', 'help'=>array('code'=>$langs->trans("EnterAnyCode"), 'name'=>$langs->trans("LabelName"), 'paper_size'=>$langs->trans("LabelPaperSize"))), - 'c_hrm_public_holiday'=>array('picto'=>'holiday', 'help'=>array('code'=>$langs->trans("EnterAnyCode"), 'dayrule'=>"Keep empty for a date defined with month and day (most common case).
Use a keyword like 'easter', 'eastermonday', ... for a date predefined by complex rules.", 'country'=>$langs->trans("CountryIfSpecificToOneCountry"), 'year'=>$langs->trans("ZeroMeansEveryYear"))), - 'c_hrm_department'=>array('picto'=>'hrm', 'help'=>array('code'=>$langs->trans("EnterAnyCode"))), - 'c_hrm_function'=>array('picto'=>'hrm', 'help'=>array('code'=>$langs->trans("EnterAnyCode"))), - 'c_exp_tax_cat'=>array('picto'=>'expensereport', 'help'=>array()), - 'c_exp_tax_range'=>array('picto'=>'expensereport', 'help'=>array('range_ik'=>$langs->trans('PrevRangeToThisRange'))), - 'c_units'=>array('picto'=>'product', 'help'=>array('code'=>$langs->trans("EnterAnyCode"), 'unit_type' => $langs->trans('Measuringtype_durationDesc'), 'scale' => $langs->trans('MeasuringScaleDesc'))), - 'c_socialnetworks'=>array('picto'=>'share-alt', 'help'=>array('code'=>$langs->trans("EnterAnyCode"), 'url' => $langs->trans('UrlSocialNetworksDesc'), 'icon' => $langs->trans('FafaIconSocialNetworksDesc'))), - 'c_prospectcontactlevel'=>array('picto'=>'company', 'help'=>array('code'=>$langs->trans("EnterAnyCode"))), - 'c_stcommcontact'=>array('picto'=>'company', 'help'=>array('code'=>$langs->trans("EnterAnyCode"), 'picto'=>$langs->trans("PictoHelp"))), - 'c_transport_mode'=>array('picto'=>'incoterm', 'help'=>array('code'=>$langs->trans("EnterAnyCode"))), - 'c_product_nature'=>array('picto'=>'product', 'help'=>array('code'=>$langs->trans("EnterAnyCode"))), - 'c_productbatch_qcstatus'=>array('picto'=>'lot', 'help'=>array('code'=>$langs->trans("EnterAnyCode"))), - 'c_asset_disposal_type'=>array('picto'=>'asset', 'help'=>array('code'=>$langs->trans("EnterAnyCode"))), - 'c_invoice_subtype'=>array('picto'=>'bill', 'help'=>array('code'=>$langs->trans("EnterAnyCode"))), + 'c_country' => array('picto' => 'country', 'help' => array('code' => $langs->trans("EnterAnyCode"))), + 'c_civility' => array('picto' => 'contact', 'help' => array('code' => $langs->trans("EnterAnyCode"))), + 'c_actioncomm' => array('picto' => 'action', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'color' => $langs->trans("ColorFormat"), 'position' => $langs->trans("PositionIntoComboList"))), + 'c_chargesociales' => array('picto' => 'bill', 'help' => array('code' => $langs->trans("EnterAnyCode"))), + 'c_typent' => array('picto' => 'company', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'position' => $langs->trans("PositionIntoComboList"))), + 'c_currencies' => array('picto' => 'multicurrency', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'unicode' => $langs->trans("UnicodeCurrency"))), + 'c_tva' => array('picto' => 'bill', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'taux' => $langs->trans("SellTaxRate"), 'recuperableonly' => $langs->trans("RecuperableOnly"), 'localtax1_type' => $langs->trans("LocalTaxDesc"), 'localtax2_type' => $langs->trans("LocalTaxDesc"))), + 'c_type_contact' => array('picto' => 'contact', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'position' => $langs->trans("PositionIntoComboList"))), + 'c_payment_term' => array('picto' => 'bill', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'type_cdr' => $langs->trans("TypeCdr", $langs->transnoentitiesnoconv("NbOfDays"), $langs->transnoentitiesnoconv("Offset"), $langs->transnoentitiesnoconv("NbOfDays"), $langs->transnoentitiesnoconv("Offset")))), + 'c_paiement' => array('picto' => 'bill', 'help' => array('code' => $langs->trans("EnterAnyCode"))), + 'c_ecotaxe' => array('picto' => 'bill', 'help' => array('code' => $langs->trans("EnterAnyCode"))), + 'c_paper_format' => array('picto' => 'generic', 'help' => array('code' => $langs->trans("EnterAnyCode"))), + 'c_prospectlevel' => array('picto' => 'company', 'help' => array('code' => $langs->trans("EnterAnyCode"))), + 'c_type_fees' => array('picto' => 'trip', 'help' => array('code' => $langs->trans("EnterAnyCode"))), + 'c_shipment_mode' => array('picto' => 'shipment', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'tracking' => $langs->trans("UrlTrackingDesc"))), + 'c_effectif' => array('picto' => 'company', 'help' => array('code' => $langs->trans("EnterAnyCode"))), + 'c_input_method' => array('picto' => 'order', 'help' => array('code' => $langs->trans("EnterAnyCode"))), + 'c_input_reason' => array('picto' => 'order', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'position' => $langs->trans("PositionIntoComboList"))), + 'c_availability' => array('picto' => 'shipment', 'help' => array('code' => $langs->trans("EnterAnyCode"))), + 'c_revenuestamp' => array('picto' => 'bill', 'help' => array('revenuestamp_type' => $langs->trans('FixedOrPercent'))), + 'c_type_resource' => array('picto' => 'resource', 'help' => array('code' => $langs->trans("EnterAnyCode"))), + 'c_type_container' => array('picto' => 'website', 'help' => array('code' => $langs->trans("EnterAnyCode"))), + 'c_stcomm' => array('picto' => 'company', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'picto' => $langs->trans("PictoHelp"))), + 'c_holiday_types' => array('picto' => 'holiday', 'help' => array('affect' => $langs->trans("FollowedByACounter"), 'delay' => $langs->trans("MinimumNoticePeriod"), 'newbymonth' => $langs->trans("NbAddedAutomatically"))), + 'c_lead_status' => array('picto' => 'project', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'percent' => $langs->trans("OpportunityPercent"), 'position' => $langs->trans("PositionIntoComboList"))), + 'c_format_cards' => array('picto' => 'generic', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'name' => $langs->trans("LabelName"), 'paper_size' => $langs->trans("LabelPaperSize"))), + 'c_hrm_public_holiday' => array('picto' => 'holiday', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'dayrule' => "Keep empty for a date defined with month and day (most common case).
Use a keyword like 'easter', 'eastermonday', ... for a date predefined by complex rules.", 'country' => $langs->trans("CountryIfSpecificToOneCountry"), 'year' => $langs->trans("ZeroMeansEveryYear"))), + 'c_hrm_department' => array('picto' => 'hrm', 'help' => array('code' => $langs->trans("EnterAnyCode"))), + 'c_hrm_function' => array('picto' => 'hrm', 'help' => array('code' => $langs->trans("EnterAnyCode"))), + 'c_exp_tax_cat' => array('picto' => 'expensereport', 'help' => array()), + 'c_exp_tax_range' => array('picto' => 'expensereport', 'help' => array('range_ik' => $langs->trans('PrevRangeToThisRange'))), + 'c_units' => array('picto' => 'product', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'unit_type' => $langs->trans('Measuringtype_durationDesc'), 'scale' => $langs->trans('MeasuringScaleDesc'))), + 'c_socialnetworks' => array('picto' => 'share-alt', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'url' => $langs->trans('UrlSocialNetworksDesc'), 'icon' => $langs->trans('FafaIconSocialNetworksDesc'))), + 'c_prospectcontactlevel' => array('picto' => 'company', 'help' => array('code' => $langs->trans("EnterAnyCode"))), + 'c_stcommcontact' => array('picto' => 'company', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'picto' => $langs->trans("PictoHelp"))), + 'c_transport_mode' => array('picto' => 'incoterm', 'help' => array('code' => $langs->trans("EnterAnyCode"))), + 'c_product_nature' => array('picto' => 'product', 'help' => array('code' => $langs->trans("EnterAnyCode"))), + 'c_productbatch_qcstatus' => array('picto' => 'lot', 'help' => array('code' => $langs->trans("EnterAnyCode"))), + 'c_asset_disposal_type' => array('picto' => 'asset', 'help' => array('code' => $langs->trans("EnterAnyCode"))), + 'c_invoice_subtype' => array('picto' => 'bill', 'help' => array('code' => $langs->trans("EnterAnyCode"))), ); @@ -622,7 +623,7 @@ foreach ($tabcomplete as $key => $value) { $keytable = ''; if ($id > 0) { $arrayofkeys = array_keys($tabcomplete); - if (array_key_exists($id -1, $arrayofkeys)) { + if (array_key_exists($id - 1, $arrayofkeys)) { $keytable = $arrayofkeys[$id - 1]; } } @@ -633,7 +634,7 @@ if (empty($sortfield)) { $tmp2 = explode(' ', $tmp1[0]); $sortfield = preg_replace('/^.*\./', '', $tmp2[0]); $sortorder = (!empty($tmp2[1]) ? $tmp2[1] : ''); - //var_dump($sortfield);var_dump($sortorder); + //var_dump($sortfield); //var_dump($sortorder); } // Define elementList and sourceList (used for dictionary type of contacts "llx_c_type_contact") @@ -701,23 +702,23 @@ $localtax_typeList = array( $object = new stdClass(); $parameters = array( - 'id' =>$id, - 'rowid' =>$rowid, - 'code' =>$code, - 'confirm' =>$confirm, - 'entity' =>$entity, - 'taborder' =>$taborder, - 'tabname' =>$tabname, - 'tablib' =>$tablib, - 'tabsql' =>$tabsql, - 'tabsqlsort' =>$tabsqlsort, - 'tabfield' =>$tabfield, - 'tabfieldvalue' =>$tabfieldvalue, - 'tabfieldinsert'=>$tabfieldinsert, - 'tabrowid' =>$tabrowid, - 'tabcond' =>$tabcond, - 'tabhelp' =>$tabhelp, - 'tabcomplete' =>$tabcomplete + 'id' => $id, + 'rowid' => $rowid, + 'code' => $code, + 'confirm' => $confirm, + 'entity' => $entity, + 'taborder' => $taborder, + 'tabname' => $tabname, + 'tablib' => $tablib, + 'tabsql' => $tabsql, + 'tabsqlsort' => $tabsqlsort, + 'tabfield' => $tabfield, + 'tabfieldvalue' => $tabfieldvalue, + 'tabfieldinsert' => $tabfieldinsert, + 'tabrowid' => $tabrowid, + 'tabcond' => $tabcond, + 'tabhelp' => $tabhelp, + 'tabcomplete' => $tabcomplete ); $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { @@ -771,11 +772,11 @@ if (empty($reshook)) { && ( !in_array($value, array('decalage', 'module', 'accountancy_code', 'accountancy_code_sell', 'accountancy_code_buy', 'tracking', 'picto', 'deposit_percent')) // Fields that are not mandatory && ($id != 10 || ($value != 'code' && $value != 'note')) // Field code and note is not mandatory for dictionary table 10 - ) - ) { - $ok = 0; - $fieldnamekey = $value; - // We take translate key of field + ) + ) { + $ok = 0; + $fieldnamekey = $value; + // We take translate key of field if ($fieldnamekey == 'libelle' || ($fieldnamekey == 'label')) { $fieldnamekey = 'Label'; } @@ -828,7 +829,7 @@ if (empty($reshook)) { $fieldnamekey = 'UseByDefault'; } - setEventMessages($langs->transnoentities("ErrorFieldRequired", $langs->transnoentities($fieldnamekey)), null, 'errors'); + setEventMessages($langs->transnoentities("ErrorFieldRequired", $langs->transnoentities($fieldnamekey)), null, 'errors'); } } // Other special checks @@ -931,13 +932,13 @@ if (empty($reshook)) { } if ($keycode == 'sortorder') { // For column name 'sortorder', we use the field name 'position' - $sql .= (int) GETPOST('position', 'int'); + $sql .= GETPOSTINT('position'); } elseif (GETPOST($keycode) == '' && !($keycode == 'code' && $id == 10)) { $sql .= "null"; // For vat, we want/accept code = '' } elseif ($keycode == 'content') { $sql .= "'".$db->escape(GETPOST($keycode, 'restricthtml'))."'"; } elseif (in_array($keycode, array('joinfile', 'private', 'pos', 'position', 'scale', 'use_default'))) { - $sql .= (int) GETPOST($keycode, 'int'); + $sql .= GETPOSTINT($keycode); } else { $sql .= "'".$db->escape(GETPOST($keycode, 'alphanohtml'))."'"; } @@ -952,10 +953,10 @@ if (empty($reshook)) { setEventMessages($langs->transnoentities("RecordCreatedSuccessfully"), null, 'mesgs'); // Clean $_POST array, we keep only id of dictionary - if ($id == 10 && GETPOST('country', 'int') > 0) { - $search_country_id = GETPOST('country', 'int'); + if ($id == 10 && GETPOSTINT('country') > 0) { + $search_country_id = GETPOSTINT('country'); } - $_POST = array('id'=>$id); + $_POST = array('id' => $id); } else { if ($db->errno() == 'DB_ERROR_RECORD_ALREADY_EXISTS') { setEventMessages($langs->transnoentities("ErrorRecordAlreadyExists"), null, 'errors'); @@ -1000,13 +1001,13 @@ if (empty($reshook)) { } $sql .= $field."="; if ($listfieldvalue[$i] == 'sortorder') { // For column name 'sortorder', we use the field name 'position' - $sql .= (int) GETPOST('position', 'int'); + $sql .= GETPOSTINT('position'); } elseif (GETPOST($keycode) == '' && !($keycode == 'code' && $id == 10)) { $sql .= "null"; // For vat, we want/accept code = '' } elseif ($keycode == 'content') { $sql .= "'".$db->escape(GETPOST($keycode, 'restricthtml'))."'"; } elseif (in_array($keycode, array('joinfile', 'private', 'pos', 'position', 'scale', 'use_default'))) { - $sql .= (int) GETPOST($keycode, 'int'); + $sql .= GETPOSTINT($keycode); } else { $sql .= "'".$db->escape(GETPOST($keycode, 'alphanohtml'))."'"; } @@ -1014,9 +1015,9 @@ if (empty($reshook)) { $i++; } if (in_array($rowidcol, array('code', 'code_iso'))) { - $sql .= " WHERE ".$rowidcol." = '".$db->escape($rowid)."'"; + $sql .= " WHERE ".$db->sanitize($rowidcol)." = '".$db->escape($rowid)."'"; } else { - $sql .= " WHERE ".$rowidcol." = ".((int) $rowid); + $sql .= " WHERE ".$db->sanitize($rowidcol)." = ".((int) $rowid); } if (in_array('entity', $listfieldmodify)) { $sql .= " AND entity = ".((int) getEntity($tablename, 0)); @@ -1226,9 +1227,9 @@ if ($id == 7 && GETPOST('from') == 'accountancy') { $titlepicto = 'accountancy'; } -$param = '&id='.urlencode($id); +$param = '&id='.urlencode((string) ($id)); if ($search_country_id || GETPOSTISSET('page') || GETPOST('button_removefilter', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter_x', 'alpha')) { - $param .= '&search_country_id='.urlencode($search_country_id ? $search_country_id : -1); + $param .= '&search_country_id='.urlencode((string) ($search_country_id ? $search_country_id : -1)); } if ($search_code != '') { $param .= '&search_code='.urlencode($search_code); @@ -1284,9 +1285,9 @@ if ($id > 0) { $sql .= natural_search($tablecode, $search_code); } if ($search_active == 'yes') { - $sql .= " AND ".$tableprefix."active = 1"; + $sql .= " AND ".$db->sanitize($tableprefix)."active = 1"; } elseif ($search_active == 'no') { - $sql .= " AND ".$tableprefix."active = 0"; + $sql .= " AND ".$db->sanitize($tableprefix)."active = 0"; } //var_dump($sql); @@ -1669,7 +1670,7 @@ if ($id > 0) { } $tmpaction = 'create'; - $parameters = array('fieldlist'=>$fieldlist, 'tabname'=>$tabname[$id]); + $parameters = array('fieldlist' => $fieldlist, 'tabname' => $tabname[$id]); $reshook = $hookmanager->executeHooks('createDictionaryFieldlist', $parameters, $obj, $tmpaction); // Note that $action and $object may have been modified by some hooks $error = $hookmanager->error; $errors = $hookmanager->errors; @@ -2168,7 +2169,7 @@ if ($id > 0) { if ($action == 'edit' && ($rowid == (!empty($obj->rowid) ? $obj->rowid : $obj->code))) { $tmpaction = 'edit'; - $parameters = array('fieldlist'=>$fieldlist, 'tabname'=>$tabname[$id]); + $parameters = array('fieldlist' => $fieldlist, 'tabname' => $tabname[$id]); $reshook = $hookmanager->executeHooks('editDictionaryFieldlist', $parameters, $obj, $tmpaction); // Note that $action and $object may have been modified by some hooks $error = $hookmanager->error; $errors = $hookmanager->errors; @@ -2190,7 +2191,7 @@ if ($id > 0) { print '
'; + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition print $form->selectyesno($value, (!empty($obj->{$value}) ? $obj->{$value} : ''), 1); print ''; - $select_list = array(0=>$langs->trans('PaymentTypeCustomer'), 1=>$langs->trans('PaymentTypeSupplier'), 2=>$langs->trans('PaymentTypeBoth')); + $select_list = array(0 => $langs->trans('PaymentTypeCustomer'), 1 => $langs->trans('PaymentTypeSupplier'), 2 => $langs->trans('PaymentTypeBoth')); print $form->selectarray($value, $select_list, (!empty($obj->{$value}) ? $obj->{$value} : '2')); print ''; } if ($value == 'type_cdr') { - print $form->selectarray($value, array(0=>$langs->trans('None'), 1=>$langs->trans('AtEndOfMonth'), 2=>$langs->trans('CurrentNext')), (!empty($obj->{$value}) ? $obj->{$value} : '')); + print $form->selectarray($value, array(0 => $langs->trans('None'), 1 => $langs->trans('AtEndOfMonth'), 2 => $langs->trans('CurrentNext')), (!empty($obj->{$value}) ? $obj->{$value} : '')); } else { + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition print $form->selectyesno($value, (!empty($obj->{$value}) ? $obj->{$value} : ''), 1); } print ''; - print $form->selectarray($value, $type_vatList, (!empty($obj->{$value}) ? $obj->{$value}:'')); + print $form->selectarray($value, $type_vatList, (!empty($obj->{$value}) ? $obj->{$value} : '')); print '
'.$langs->trans("Parameter").''.$langs->trans("Value").'
'; $tooltiphelp = (($langs->trans($constname . 'Tooltip') != $constname . 'Tooltip') ? $langs->trans($constname . 'Tooltip') : ''); @@ -230,7 +194,7 @@ if ($action == 'edit') { print '\n"; - } elseif ($val['type']== 'html') { + } elseif ($val['type'] == 'html') { require_once DOL_DOCUMENT_ROOT . '/core/class/doleditor.class.php'; $doleditor = new DolEditor($constname, getDolGlobalString($constname), '', 160, 'dolibarr_notes', '', false, false, isModEnabled('fckeditor'), ROWS_5, '90%'); $doleditor->Create(); @@ -300,7 +264,7 @@ if ($action == 'edit') { print '
'.$langs->trans("Parameter").''.$langs->trans("Value").'
'; @@ -311,7 +275,7 @@ if ($action == 'edit') { if ($val['type'] == 'textarea') { print dol_nl2br(getDolGlobalString($constname)); - } elseif ($val['type']== 'html') { + } elseif ($val['type'] == 'html') { print getDolGlobalString($constname); } elseif ($val['type'] == 'yesno') { print ajax_constantonoff($constname); @@ -348,13 +312,13 @@ if ($action == 'edit') { print '
    ' . implode(' ', $toprint) . '
'; } } elseif (preg_match('/thirdparty_type/', $val['type'])) { - if (getDolGlobalString($constname)==2) { + if (getDolGlobalString($constname) == 2) { print $langs->trans("Prospect"); - } elseif (getDolGlobalString($constname)==3) { + } elseif (getDolGlobalString($constname) == 3) { print $langs->trans("ProspectCustomer"); - } elseif (getDolGlobalString($constname)==1) { + } elseif (getDolGlobalString($constname) == 1) { print $langs->trans("Customer"); - } elseif (getDolGlobalString($constname)==0) { + } elseif (getDolGlobalString($constname) == 0) { print $langs->trans("NorProspectNorCustomer"); } } elseif ($val['type'] == 'product') { diff --git a/htdocs/admin/events.php b/htdocs/admin/events.php index afdeca4b7b2..323483601a1 100644 --- a/htdocs/admin/events.php +++ b/htdocs/admin/events.php @@ -41,10 +41,10 @@ $contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'au $optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print') // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) { $page = 0; } // If $page is not defined, or '' or -1 or if we click on clear filters diff --git a/htdocs/admin/expedition.php b/htdocs/admin/expedition.php index 0ddc49e5c85..082d2a39741 100644 --- a/htdocs/admin/expedition.php +++ b/htdocs/admin/expedition.php @@ -7,6 +7,7 @@ * Copyright (C) 2005-2012 Regis Houssin * Copyright (C) 2011-2012 Juanjo Menent * Copyright (C) 2011-2018 Philippe Grand + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -102,18 +103,16 @@ if ($action == 'updateMask') { // Search template files $file = ''; $classname = ''; - $filefound = 0; $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']); foreach ($dirmodels as $reldir) { $file = dol_buildpath($reldir."core/modules/expedition/doc/pdf_".$modele.".modules.php", 0); if (file_exists($file)) { - $filefound = 1; $classname = "pdf_".$modele; break; } } - if ($filefound) { + if ($classname !== '') { require_once $file; $module = new $classname($db); @@ -321,6 +320,7 @@ foreach ($dirmodels as $reldir) { if (is_dir($dir)) { $handle = opendir($dir); if (is_resource($handle)) { + $filelist = array(); while (($file = readdir($handle)) !== false) { $filelist[] = $file; } diff --git a/htdocs/admin/expensereport.php b/htdocs/admin/expensereport.php index a1360b92966..d0fa6cfd98b 100644 --- a/htdocs/admin/expensereport.php +++ b/htdocs/admin/expensereport.php @@ -7,6 +7,7 @@ * Copyright (C) 2008 Raphael Bertrand (Resultic) * Copyright (C) 2011-2013 Juanjo Menent * Copyright (C) 2011-2022 Philippe Grand + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -83,18 +84,16 @@ if ($action == 'updateMask') { // Search template files $file = ''; $classname = ''; - $filefound = 0; $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']); foreach ($dirmodels as $reldir) { $file = dol_buildpath($reldir."core/modules/expensereport/doc/pdf_".$modele.".modules.php", 0); if (file_exists($file)) { - $filefound = 1; $classname = "pdf_".$modele; break; } } - if ($filefound) { + if ($classname !== '') { require_once $file; $module = new $classname($db); @@ -152,16 +151,16 @@ if ($action == 'updateMask') { $res3 = 0; if (isModEnabled('project') && GETPOSTISSET('EXPENSEREPORT_PROJECT_IS_REQUIRED')) { // Option may not be provided - $res3 = dolibarr_set_const($db, 'EXPENSEREPORT_PROJECT_IS_REQUIRED', GETPOST('EXPENSEREPORT_PROJECT_IS_REQUIRED', 'int'), 'chaine', 0, '', $conf->entity); + $res3 = dolibarr_set_const($db, 'EXPENSEREPORT_PROJECT_IS_REQUIRED', GETPOSTINT('EXPENSEREPORT_PROJECT_IS_REQUIRED'), 'chaine', 0, '', $conf->entity); } - $dates = GETPOST('EXPENSEREPORT_PREFILL_DATES_WITH_CURRENT_MONTH', 'int'); + $dates = GETPOSTINT('EXPENSEREPORT_PREFILL_DATES_WITH_CURRENT_MONTH'); $res4 = dolibarr_set_const($db, 'EXPENSEREPORT_PREFILL_DATES_WITH_CURRENT_MONTH', intval($dates), 'chaine', 0, '', $conf->entity); - $amounts = GETPOST('EXPENSEREPORT_FORCE_LINE_AMOUNTS_INCLUDING_TAXES_ONLY', 'int'); + $amounts = GETPOSTINT('EXPENSEREPORT_FORCE_LINE_AMOUNTS_INCLUDING_TAXES_ONLY'); $res5 = dolibarr_set_const($db, 'EXPENSEREPORT_FORCE_LINE_AMOUNTS_INCLUDING_TAXES_ONLY', intval($amounts), 'chaine', 0, '', $conf->entity); - if (!($res1 > 0) || !($res2 > 0) || !($res3 >= 0) || !($res4 >0) || !($res5 >0)) { + if (!($res1 > 0) || !($res2 > 0) || !($res3 >= 0) || !($res4 > 0) || !($res5 > 0)) { $error++; } @@ -337,6 +336,7 @@ foreach ($dirmodels as $reldir) { if (is_dir($dir)) { $handle = opendir($dir); if (is_resource($handle)) { + $filelist = array(); while (($file = readdir($handle)) !== false) { $filelist[] = $file; } diff --git a/htdocs/admin/expensereport_rules.php b/htdocs/admin/expensereport_rules.php index 639fcf50077..abadd050991 100644 --- a/htdocs/admin/expensereport_rules.php +++ b/htdocs/admin/expensereport_rules.php @@ -60,11 +60,11 @@ if (empty($reshook)) { $error = false; $action = GETPOST('action', 'aZ09'); - $id = GETPOST('id', 'int'); + $id = GETPOSTINT('id'); $apply_to = GETPOST('apply_to'); - $fk_user = GETPOST('fk_user', 'int'); - $fk_usergroup = GETPOST('fk_usergroup', 'int'); + $fk_user = GETPOSTINT('fk_user'); + $fk_usergroup = GETPOSTINT('fk_usergroup'); $restrictive = GETPOSTINT('restrictive'); $fk_c_type_fees = GETPOSTINT('fk_c_type_fees'); $code_expense_rules_type = GETPOST('code_expense_rules_type'); @@ -222,8 +222,8 @@ if ($action != 'edit') { echo '
' . $form->selectExpense('', 'fk_c_type_fees', 0, 1, 1) . '' . $form->selectarray('code_expense_rules_type', $tab_rules_type, '', 0) . '' . $form->selectDate(strtotime(date('Y-m-01', dol_now())), 'start', '', '', 0, '', 1, 0) . '' . $form->selectDate(strtotime(date('Y-m-t', dol_now())), 'end', '', '', 0, '', 1, 0) . '' . $form->selectDate(strtotime(date('Y-m-01', dol_now())), 'start', 0, 0, 0, '', 1, 0) . '' . $form->selectDate(strtotime(date('Y-m-t', dol_now())), 'end', 0, 0, 0, '', 1, 0) . '' . $form->selectyesno('restrictive', 0, 1) . ''; if ($action == 'edit' && $object->id == $rule->id) { - print $form->selectDate(strtotime(date('Y-m-d', $object->dates)), 'start', '', '', 0, '', 1, 0); + print $form->selectDate(strtotime(date('Y-m-d', $object->dates)), 'start', 0, 0, 0, '', 1, 0); } else { echo dol_print_date($rule->dates, 'day'); } @@ -317,7 +317,7 @@ foreach ($rules as $rule) { echo ''; if ($action == 'edit' && $object->id == $rule->id) { - print $form->selectDate(strtotime(date('Y-m-d', $object->datee)), 'end', '', '', 0, '', 1, 0); + print $form->selectDate(strtotime(date('Y-m-d', $object->datee)), 'end', 0, 0, 0, '', 1, 0); } else { echo dol_print_date($rule->datee, 'day'); } diff --git a/htdocs/admin/external_rss.php b/htdocs/admin/external_rss.php index b9c200b3b50..5d3228ae23a 100644 --- a/htdocs/admin/external_rss.php +++ b/htdocs/admin/external_rss.php @@ -68,8 +68,8 @@ if ($result) { } if ($action == 'add' || GETPOST("modify")) { - $external_rss_title = "external_rss_title_".GETPOST("norss", 'int'); - $external_rss_urlrss = "external_rss_urlrss_".GETPOST("norss", 'int'); + $external_rss_title = "external_rss_title_".GETPOSTINT("norss"); + $external_rss_urlrss = "external_rss_urlrss_".GETPOSTINT("norss"); if (GETPOST($external_rss_urlrss, 'alpha')) { $boxlabel = '(ExternalRSSInformations)'; @@ -93,7 +93,7 @@ if ($action == 'add' || GETPOST("modify")) { } else { // Ajoute boite box_external_rss dans definition des boites $sql = "INSERT INTO ".MAIN_DB_PREFIX."boxes_def (file, note)"; - $sql .= " VALUES ('box_external_rss.php','".$db->escape(GETPOST("norss", 'int').' ('.GETPOST($external_rss_title, 'alpha')).")')"; + $sql .= " VALUES ('box_external_rss.php','".$db->escape(GETPOSTINT("norss").' ('.GETPOSTINT($external_rss_title)).")')"; if (!$db->query($sql)) { dol_print_error($db); $error++; @@ -101,9 +101,9 @@ if ($action == 'add' || GETPOST("modify")) { //print $sql;exit; } - $result1 = dolibarr_set_const($db, "EXTERNAL_RSS_TITLE_".GETPOST("norss", 'int'), GETPOST($external_rss_title, 'alpha'), 'chaine', 0, '', $conf->entity); + $result1 = dolibarr_set_const($db, "EXTERNAL_RSS_TITLE_".GETPOSTINT("norss"), GETPOSTINT($external_rss_title), 'chaine', 0, '', $conf->entity); if ($result1) { - $consttosave = "EXTERNAL_RSS_URLRSS_".GETPOST("norss", 'int'); + $consttosave = "EXTERNAL_RSS_URLRSS_".GETPOSTINT("norss"); $urltosave = GETPOST($external_rss_urlrss, 'alpha'); $result2 = dolibarr_set_const($db, $consttosave, $urltosave, 'chaine', 0, '', $conf->entity); //var_dump($result2);exit; @@ -121,12 +121,12 @@ if ($action == 'add' || GETPOST("modify")) { } if (GETPOST("delete")) { - if (GETPOST("norss", 'int')) { + if (GETPOSTINT("norss")) { $db->begin(); // Supprime boite box_external_rss de definition des boites $sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."boxes_def"; - $sql .= " WHERE file = 'box_external_rss.php' AND note LIKE '".$db->escape(GETPOST("norss", 'int'))." %'"; + $sql .= " WHERE file = 'box_external_rss.php' AND note LIKE '".$db->escape(GETPOSTINT("norss"))." %'"; $resql = $db->query($sql); if ($resql) { @@ -161,9 +161,9 @@ if (GETPOST("delete")) { } - $result1 = dolibarr_del_const($db, "EXTERNAL_RSS_TITLE_".GETPOST("norss", 'int'), $conf->entity); + $result1 = dolibarr_del_const($db, "EXTERNAL_RSS_TITLE_".GETPOSTINT("norss"), $conf->entity); if ($result1) { - $result2 = dolibarr_del_const($db, "EXTERNAL_RSS_URLRSS_".GETPOST("norss", 'int'), $conf->entity); + $result2 = dolibarr_del_const($db, "EXTERNAL_RSS_URLRSS_".GETPOSTINT("norss"), $conf->entity); } if ($result1 && $result2) { @@ -347,7 +347,7 @@ $db->close(); function _isInBoxList($idrss, array $boxlist) { foreach ($boxlist as $box) { - if ($box->boxcode === "lastrssinfos" && strpos($box->note, $idrss) !== false) { + if ($box->boxcode === "lastrssinfos" && strpos($box->note, (string) $idrss) !== false) { return true; } } diff --git a/htdocs/admin/fckeditor.php b/htdocs/admin/fckeditor.php index 71105f078b5..d11c3adf4ca 100644 --- a/htdocs/admin/fckeditor.php +++ b/htdocs/admin/fckeditor.php @@ -3,6 +3,7 @@ * Copyright (C) 2005-2012 Regis Houssin * Copyright (C) 2012-2013 Juanjo Menent * Copyright (C) 2019 Christophe Battarel + * Copyright (C) 2024 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -31,7 +32,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/doleditor.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; // Load translation files required by the page -$langs->loadLangs(array('admin', 'fckeditor')); +$langs->loadLangs(array('admin', 'fckeditor', 'errors')); $action = GETPOST('action', 'aZ09'); // Possible modes are: @@ -65,10 +66,10 @@ $conditions = array( 'NOTE_PRIVATE' => 1, 'SOCIETE' => 1, 'PRODUCTDESC' => (isModEnabled("product") || isModEnabled("service")), - 'DETAILS' => (isModEnabled('facture') || isModEnabled("propal") || isModEnabled('commande') || isModEnabled('supplier_proposal') || isModEnabled("supplier_order") || isModEnabled("supplier_invoice")), + 'DETAILS' => (isModEnabled('invoice') || isModEnabled("propal") || isModEnabled('order') || isModEnabled('supplier_proposal') || isModEnabled("supplier_order") || isModEnabled("supplier_invoice")), 'USERSIGN' => 1, 'MAILING' => isModEnabled('mailing'), - 'MAIL' => (isModEnabled('facture') || isModEnabled("propal") || isModEnabled('commande')), + 'MAIL' => (isModEnabled('invoice') || isModEnabled("propal") || isModEnabled('order')), 'TICKET' => isModEnabled('ticket'), 'SPECIALCHAR' => 1, ); @@ -221,12 +222,12 @@ if (empty($conf->use_javascript_ajax)) { if ($mode != 'Full_inline') { $uselocalbrowser = true; $readonly = ($mode == 'dolibarr_readonly' ? 1 : 0); - $editor = new DolEditor('formtestfield', isset($conf->global->FCKEDITOR_TEST) ? $conf->global->FCKEDITOR_TEST : 'Test', '', 200, $mode, 'In', true, $uselocalbrowser, 1, 120, 8, $readonly); + $editor = new DolEditor('formtestfield', getDolGlobalString('FCKEDITOR_TEST', 'Test'), '', 200, $mode, 'In', true, $uselocalbrowser, 1, 120, 8, $readonly); $editor->Create(); } else { // CKEditor inline enabled with the contenteditable="true" print '
'; - print $conf->global->FCKEDITOR_TEST; + print getDolGlobalString('FCKEDITOR_TEST'); print '
'; } print $form->buttonsSaveCancel("Save", '', null, 0, 'reposition'); diff --git a/htdocs/admin/fichinter.php b/htdocs/admin/fichinter.php index 0ce25e70225..250d4d9e2cd 100644 --- a/htdocs/admin/fichinter.php +++ b/htdocs/admin/fichinter.php @@ -7,6 +7,7 @@ * Copyright (C) 2008 Raphael Bertrand (Resultic) * Copyright (C) 2011-2013 Juanjo Menent * Copyright (C) 2011-2018 Philippe Grand + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -82,18 +83,16 @@ if ($action == 'updateMask') { // Search template files $file = ''; $classname = ''; - $filefound = 0; $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']); foreach ($dirmodels as $reldir) { $file = dol_buildpath($reldir."core/modules/fichinter/doc/pdf_".$modele.".modules.php", 0); if (file_exists($file)) { - $filefound = 1; $classname = "pdf_".$modele; break; } } - if ($filefound) { + if ($classname !== '') { require_once $file; $module = new $classname($db); @@ -413,6 +412,7 @@ foreach ($dirmodels as $reldir) { if (is_dir($dir)) { $handle = opendir($dir); if (is_resource($handle)) { + $filelist = array(); while (($file = readdir($handle)) !== false) { $filelist[] = $file; } diff --git a/htdocs/admin/holiday.php b/htdocs/admin/holiday.php index 21280dd8008..1a8a343ea69 100644 --- a/htdocs/admin/holiday.php +++ b/htdocs/admin/holiday.php @@ -3,6 +3,7 @@ * Copyright (C) 2011-2018 Philippe Grand * Copyright (C) 2018 Charlene Benke * Copyright (C) 2018 Frédéric France + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -82,18 +83,16 @@ if ($action == 'updateMask') { // Search template files $file = ''; $classname = ''; - $filefound = 0; $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']); foreach ($dirmodels as $reldir) { $file = dol_buildpath($reldir."core/modules/holiday/doc/pdf_".$modele.".modules.php", 0); if (file_exists($file)) { - $filefound = 1; $classname = "pdf_".$modele; break; } } - if ($filefound) { + if ($classname !== '') { require_once $file; $module = new $classname($db); @@ -327,6 +326,7 @@ if (getDolGlobalInt('MAIN_FEATURES_LEVEL') >= 2) { if (is_dir($dir)) { $handle = opendir($dir); if (is_resource($handle)) { + $filelist = array(); while (($file = readdir($handle)) !== false) { $filelist[] = $file; } diff --git a/htdocs/admin/hrm.php b/htdocs/admin/hrm.php index ae0c57284df..c55622f1a11 100644 --- a/htdocs/admin/hrm.php +++ b/htdocs/admin/hrm.php @@ -4,6 +4,7 @@ * Copyright (C) 2021 Greg Rastklan * Copyright (C) 2021 Jean-Pascal BOUDET * Copyright (C) 2021 Grégory BLEMAND + * Copyright (C) 2024 MDW * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -56,8 +57,8 @@ $scandir = GETPOST('scan_dir', 'alpha'); $type = 'evaluation'; $arrayofparameters = array( - 'HRM_MAXRANK'=>array('type'=>'integer','enabled'=>1), - 'HRM_DEFAULT_SKILL_DESCRIPTION'=>array('type'=>'varchar','enabled'=>1), + 'HRM_MAXRANK' => array('type' => 'integer','enabled' => 1), + 'HRM_DEFAULT_SKILL_DESCRIPTION' => array('type' => 'varchar','enabled' => 1), ); $error = 0; @@ -65,6 +66,16 @@ $setupnotempty = 0; $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']); +$moduledir = 'hrm'; +$myTmpObjects = array(); +// TODO Scan list of objects to fill this array +$myTmpObjects['evaluation'] = array('label' => 'Evaluation', 'includerefgeneration' => 1, 'includedocgeneration' => 0, 'class' => 'Evaluation'); + +$tmpobjectkey = GETPOST('object', 'aZ09'); +if ($tmpobjectkey && !array_key_exists($tmpobjectkey, $myTmpObjects)) { + accessforbidden('Bad value for object. Hack attempt ?'); +} + /* * Actions @@ -73,7 +84,7 @@ $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']); include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php'; if ($action == 'update') { - $max_rank = GETPOST('HRM_MAXRANK', 'int'); + $max_rank = GETPOSTINT('HRM_MAXRANK'); // We complete skill possible level notation if necessary if (!empty($max_rank)) { @@ -106,28 +117,26 @@ if ($action == 'update') { } else { setEventMessages($langs->trans("Error"), null, 'errors'); } -} elseif ($action == 'specimen') { +} elseif ($action == 'specimen' && $tmpobjectkey) { $modele = GETPOST('module', 'alpha'); - $tmpobjectkey = GETPOST('object'); - $tmpobject = new $tmpobjectkey($db); + $className = $myTmpObjects[$tmpobjectkey]['class']; + $tmpobject = new $className($db); $tmpobject->initAsSpecimen(); // Search template files $file = ''; $classname = ''; - $filefound = 0; $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']); foreach ($dirmodels as $reldir) { $file = dol_buildpath($reldir."core/modules/hrm/doc/pdf_".$modele."_".strtolower($tmpobjectkey).".modules.php", 0); if (file_exists($file)) { - $filefound = 1; $classname = "pdf_".$modele; break; } } - if ($filefound) { + if ($classname !== '') { require_once $file; $module = new $classname($db); @@ -145,7 +154,6 @@ if ($action == 'update') { } } elseif ($action == 'setmod') { // TODO Check if numbering module chosen can be activated by calling method canBeActivated - $tmpobjectkey = GETPOST('object'); if (!empty($tmpobjectkey)) { $constforval = 'HRMTEST_'.strtoupper($tmpobjectkey)."_ADDON"; dolibarr_set_const($db, $constforval, $value, 'chaine', 0, '', $conf->entity); @@ -156,7 +164,6 @@ if ($action == 'update') { } elseif ($action == 'del') { $ret = delDocumentModel($value, $type); if ($ret > 0) { - $tmpobjectkey = GETPOST('object'); if (!empty($tmpobjectkey)) { $constforval = 'HRMTEST_'.strtoupper($tmpobjectkey).'_ADDON_PDF'; if (getDolGlobalString($constforval) == "$value") { @@ -166,7 +173,6 @@ if ($action == 'update') { } } elseif ($action == 'setdoc') { // Set or unset default model - $tmpobjectkey = GETPOST('object'); if (!empty($tmpobjectkey)) { $constforval = 'HRMTEST_'.strtoupper($tmpobjectkey).'_ADDON_PDF'; if (dolibarr_set_const($db, $constforval, $value, 'chaine', 0, '', $conf->entity)) { @@ -182,7 +188,6 @@ if ($action == 'update') { } } } elseif ($action == 'unsetdoc') { - $tmpobjectkey = GETPOST('object'); if (!empty($tmpobjectkey)) { $constforval = 'HRMTEST_'.strtoupper($tmpobjectkey).'_ADDON_PDF'; dolibarr_del_const($db, $constforval, $conf->entity); @@ -210,9 +215,6 @@ print load_fiche_titre($langs->trans($page_name), $linkback, 'title_setup'); $head = hrmAdminPrepareHead(); print dol_get_fiche_head($head, 'settings', $langs->trans($page_name), -1, "hrm"); -$moduledir = 'hrm'; -$myTmpObjects = array(); -$myTmpObjects['evaluation'] = array('label'=>'Evaluation', 'includerefgeneration'=>1, 'includedocgeneration'=>0); foreach ($myTmpObjects as $myTmpObjectKey => $myTmpObjectArray) { if ($myTmpObjectKey != $type) { @@ -292,6 +294,7 @@ foreach ($myTmpObjects as $myTmpObjectKey => $myTmpObjectArray) { $nameofclass = ucfirst($myTmpObjectKey); $mytmpinstance = new $nameofclass($db); + '@phan-var-force Evaluation $mytmpinstance'; $mytmpinstance->initAsSpecimen(); // Info @@ -374,6 +377,7 @@ foreach ($myTmpObjects as $myTmpObjectKey => $myTmpObjectArray) { if (is_dir($dir)) { $handle = opendir($dir); if (is_resource($handle)) { + $filelist = array(); while (($file = readdir($handle)) !== false) { $filelist[] = $file; } @@ -487,7 +491,7 @@ if ($action == 'edit') { print '
'.$langs->trans("Parameter").''.$langs->trans("Value").'
'; $tooltiphelp = (($langs->trans($constname . 'Tooltip') != $constname . 'Tooltip') ? $langs->trans($constname . 'Tooltip') : ''); @@ -572,7 +576,7 @@ if ($action == 'edit') { print '
'.$langs->trans("Parameter").''.$langs->trans("Value").'
'; $tooltiphelp = (($langs->trans($constname . 'Tooltip') != $constname . 'Tooltip') ? $langs->trans($constname . 'Tooltip') : ''); @@ -581,7 +585,7 @@ if ($action == 'edit') { if ($val['type'] == 'textarea') { print dol_nl2br(getDolGlobalString($constname)); - } elseif ($val['type']== 'html') { + } elseif ($val['type'] == 'html') { print getDolGlobalString($constname); } elseif ($val['type'] == 'yesno') { print ajax_constantonoff($constname); @@ -592,7 +596,7 @@ if ($action == 'edit') { $tmp = explode(':', $val['type']); $template = $formmail->getEMailTemplate($db, $tmp[1], $user, $langs, getDolGlobalString($constname)); - if ($template<0) { + if ($template < 0) { setEventMessages(null, $formmail->errors, 'errors'); } print $langs->trans($template->label); diff --git a/htdocs/admin/ihm.php b/htdocs/admin/ihm.php index 2e13c2d5c7a..d1d80394832 100644 --- a/htdocs/admin/ihm.php +++ b/htdocs/admin/ihm.php @@ -121,7 +121,7 @@ if ($action == 'update') { } if (GETPOSTISSET('THEME_TOPMENU_DISABLE_IMAGE')) { - $val=GETPOST('THEME_TOPMENU_DISABLE_IMAGE'); + $val = GETPOST('THEME_TOPMENU_DISABLE_IMAGE'); if (!$val) { dolibarr_del_const($db, 'THEME_TOPMENU_DISABLE_IMAGE', $conf->entity); } else { @@ -248,17 +248,17 @@ if ($action == 'update') { dolibarr_set_const($db, "MAIN_LANG_DEFAULT", GETPOST("MAIN_LANG_DEFAULT", 'aZ09'), 'chaine', 0, '', $conf->entity); dolibarr_set_const($db, "MAIN_IHM_PARAMS_REV", getDolGlobalInt('MAIN_IHM_PARAMS_REV') + 1, 'chaine', 0, '', $conf->entity); - dolibarr_set_const($db, "MAIN_SIZE_LISTE_LIMIT", GETPOST("MAIN_SIZE_LISTE_LIMIT", 'int'), 'chaine', 0, '', $conf->entity); - dolibarr_set_const($db, "MAIN_SIZE_SHORTLIST_LIMIT", GETPOST("main_size_shortliste_limit", 'int'), 'chaine', 0, '', $conf->entity); + dolibarr_set_const($db, "MAIN_SIZE_LISTE_LIMIT", GETPOSTINT("MAIN_SIZE_LISTE_LIMIT"), 'chaine', 0, '', $conf->entity); + dolibarr_set_const($db, "MAIN_SIZE_SHORTLIST_LIMIT", GETPOSTINT("main_size_shortliste_limit"), 'chaine', 0, '', $conf->entity); if (GETPOSTISSET("MAIN_CHECKBOX_LEFT_COLUMN")) { - dolibarr_set_const($db, "MAIN_CHECKBOX_LEFT_COLUMN", GETPOST("MAIN_CHECKBOX_LEFT_COLUMN", 'int'), 'chaine', 0, '', $conf->entity); + dolibarr_set_const($db, "MAIN_CHECKBOX_LEFT_COLUMN", GETPOSTINT("MAIN_CHECKBOX_LEFT_COLUMN"), 'chaine', 0, '', $conf->entity); } //dolibarr_set_const($db, "MAIN_DISABLE_JAVASCRIPT", GETPOST("MAIN_DISABLE_JAVASCRIPT", 'aZ09'), 'chaine', 0, '', $conf->entity); //dolibarr_set_const($db, "MAIN_BUTTON_HIDE_UNAUTHORIZED", GETPOST("MAIN_BUTTON_HIDE_UNAUTHORIZED", 'aZ09'), 'chaine', 0, '', $conf->entity); //dolibarr_set_const($db, "MAIN_MENU_HIDE_UNAUTHORIZED", GETPOST("MAIN_MENU_HIDE_UNAUTHORIZED", 'aZ09'), 'chaine', 0, '', $conf->entity); - dolibarr_set_const($db, "MAIN_START_WEEK", GETPOST("MAIN_START_WEEK", 'int'), 'chaine', 0, '', $conf->entity); + dolibarr_set_const($db, "MAIN_START_WEEK", GETPOSTINT("MAIN_START_WEEK"), 'chaine', 0, '', $conf->entity); dolibarr_set_const($db, "MAIN_DEFAULT_WORKING_DAYS", GETPOST("MAIN_DEFAULT_WORKING_DAYS", 'alphanohtml'), 'chaine', 0, '', $conf->entity); dolibarr_set_const($db, "MAIN_DEFAULT_WORKING_HOURS", GETPOST("MAIN_DEFAULT_WORKING_HOURS", 'alphanohtml'), 'chaine', 0, '', $conf->entity); @@ -318,7 +318,7 @@ if ($action == 'update') { dolibarr_set_const($db, "MAIN_IHM_PARAMS_REV", getDolGlobalInt('MAIN_IHM_PARAMS_REV') + 1, 'chaine', 0, '', $conf->entity); } - header("Location: ".$_SERVER["PHP_SELF"]."?mainmenu=home&leftmenu=setup&mode=".$mode.(GETPOSTISSET('page_y') ? '&page_y='.GETPOST('page_y', 'int') : '')); + header("Location: ".$_SERVER["PHP_SELF"]."?mainmenu=home&leftmenu=setup&mode=".$mode.(GETPOSTISSET('page_y') ? '&page_y='.GETPOSTINT('page_y') : '')); exit; } diff --git a/htdocs/admin/facture.php b/htdocs/admin/invoice.php similarity index 94% rename from htdocs/admin/facture.php rename to htdocs/admin/invoice.php index 30525d92a68..fa0e810f33b 100644 --- a/htdocs/admin/facture.php +++ b/htdocs/admin/invoice.php @@ -7,6 +7,7 @@ * Copyright (C) 2012-2013 Juanjo Menent * Copyright (C) 2014 Teddy Andreotti <125155@supinfo.com> * Copyright (C) 2022 Anthony Berton + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -23,7 +24,7 @@ */ /** - * \file htdocs/admin/facture.php + * \file htdocs/admin/invoice.php * \ingroup facture * \brief Page to setup invoice module */ @@ -50,6 +51,8 @@ $label = GETPOST('label', 'alpha'); $scandir = GETPOST('scan_dir', 'alpha'); $type = 'invoice'; +$error = 0; + /* * Actions @@ -97,18 +100,16 @@ if ($action == 'updateMask') { // Search template files $file = ''; $classname = ''; - $filefound = 0; $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']); foreach ($dirmodels as $reldir) { $file = dol_buildpath($reldir."core/modules/facture/doc/pdf_".$modele.".modules.php", 0); if (file_exists($file)) { - $filefound = 1; $classname = "pdf_".$modele; break; } } - if ($filefound) { + if ($classname !== '') { require_once $file; $module = new $classname($db); @@ -148,8 +149,7 @@ if ($action == 'updateMask') { $ret = addDocumentModel($value, $type, $label, $scandir); } } elseif ($action == 'setmod') { - // TODO Verifier si module numerotation choisi peut etre active - // par appel method canBeActivated + // TODO Check if numbering module chosen can ba activated by calling method canBeActivated() dolibarr_set_const($db, "FACTURE_ADDON", $value, 'chaine', 0, '', $conf->entity); } elseif ($action == 'setribchq') { @@ -230,7 +230,7 @@ if ($action == 'updateMask') { } } } elseif ($action == 'set_INVOICE_CHECK_POSTERIOR_DATE') { - $check_posterior_date = GETPOST('INVOICE_CHECK_POSTERIOR_DATE', 'int'); + $check_posterior_date = GETPOSTINT('INVOICE_CHECK_POSTERIOR_DATE'); $res = dolibarr_set_const($db, 'INVOICE_CHECK_POSTERIOR_DATE', $check_posterior_date, 'chaine', 0, '', $conf->entity); if (!($res > 0)) { $error++; @@ -507,6 +507,7 @@ foreach ($dirmodels as $reldir) { if (is_dir($dir)) { $handle = opendir($dir); if (is_resource($handle)) { + $filelist = array(); while (($file = readdir($handle)) !== false) { $filelist[] = $file; } @@ -616,20 +617,21 @@ if (getDolGlobalString('INVOICE_USE_DEFAULT_DOCUMENT')) { // Hidden conf print ''; print ''; print ''; + print ''; print '
'; print ''; print ''; print ''; print ''; - print ''; + print ''; print "\n"; $listtype = array( - Facture::TYPE_STANDARD=>$langs->trans("InvoiceStandard"), - Facture::TYPE_REPLACEMENT=>$langs->trans("InvoiceReplacement"), - Facture::TYPE_CREDIT_NOTE=>$langs->trans("InvoiceAvoir"), - Facture::TYPE_DEPOSIT=>$langs->trans("InvoiceDeposit"), + Facture::TYPE_STANDARD => $langs->trans("InvoiceStandard"), + Facture::TYPE_REPLACEMENT => $langs->trans("InvoiceReplacement"), + Facture::TYPE_CREDIT_NOTE => $langs->trans("InvoiceAvoir"), + Facture::TYPE_DEPOSIT => $langs->trans("InvoiceDeposit"), ); if (getDolGlobalInt('INVOICE_USE_SITUATION')) { $listtype[Facture::TYPE_SITUATION] = $langs->trans("InvoiceSituation"); @@ -658,6 +660,7 @@ print load_fiche_titre($langs->trans("SuggestedPaymentModesIfNotDefinedInInvoice print ''; print ''; +print ''; print '
'; print '
'.$langs->trans("Type").''.$langs->trans("Name").'
'; @@ -666,17 +669,16 @@ print ''; print ''; -print ''; +print ''; print "\n"; print ''; print ""; print ""; print "
'; print ''; print $langs->trans("PaymentMode").'
".$langs->trans("SuggestPaymentByRIBOnAccount").""; -if (isModEnabled('banque')) { - $sql = "SELECT rowid, label"; +if (isModEnabled('bank')) { + $sql = "SELECT rowid, label, clos"; $sql .= " FROM ".MAIN_DB_PREFIX."bank_account"; - $sql .= " WHERE clos = 0"; - $sql .= " AND courant = 1"; + $sql .= " WHERE courant = 1"; $sql .= " AND entity IN (".getEntity('bank_account').")"; $resql = $db->query($sql); if ($resql) { @@ -686,15 +688,19 @@ if (isModEnabled('banque')) { print '"; + print ajax_combobox("rib"); } else { print ''.$langs->trans("NoActiveBankAccountDefined").''; } @@ -734,6 +740,8 @@ if ($resql) { } } print ""; +print ajax_combobox("chq", array(), 0, 0, 'resolve', -2); + print "
"; print '
'; @@ -756,12 +764,13 @@ print "
'; print $langs->trans("ForceInvoiceDate"); print ''; print $form->selectyesno("forcedate", getDolGlobalInt('FAC_FORCE_DATE_VALIDATION', 0), 1); print ''; -print ''; +print ''; print "
'; print $form->textwithpicto($langs->trans("FreeLegalTextOnInvoices"), $langs->trans("AddCRIfTooLong").'

'.$htmltext, 1, 'help', '', 0, 2, 'freetexttooltip').'
'; $variablename = 'INVOICE_FREE_TEXT'; @@ -787,7 +797,7 @@ if (!getDolGlobalString('PDF_ALLOW_HTML_FOR_FREE_TEXT')) { print $doleditor->Create(); } print '
'; -print ''; +print ''; print "
'; print $form->textwithpicto($langs->trans("WatermarkOnDraftBill"), $htmltext, 1, 'help', '', 0, 2, 'watermarktooltip').'
'; print '
'; print ''; -print ''; +print ''; print "
'.$langs->trans("Parameter").''.$langs->trans("Value").'
'; $tooltiphelp = (($langs->trans($constname . 'Tooltip') != $constname . 'Tooltip') ? $langs->trans($constname . 'Tooltip') : ''); @@ -269,7 +280,7 @@ if ($action == 'edit') { print '
'.$langs->trans("Parameter").''.$langs->trans("Value").'
'; $tooltiphelp = (($langs->trans($constname . 'Tooltip') != $constname . 'Tooltip') ? $langs->trans($constname . 'Tooltip') : ''); @@ -278,7 +289,7 @@ if ($action == 'edit') { if ($val['type'] == 'textarea') { print dol_nl2br(getDolGlobalString($constname)); - } elseif ($val['type']== 'html') { + } elseif ($val['type'] == 'html') { print getDolGlobalString($constname); } elseif ($val['type'] == 'yesno') { print ajax_constantonoff($constname); @@ -289,7 +300,7 @@ if ($action == 'edit') { $tmp = explode(':', $val['type']); $template = $formmail->getEMailTemplate($db, $tmp[1], $user, $langs, getDolGlobalString($constname)); - if ($template<0) { + if ($template < 0) { setEventMessages(null, $formmail->errors, 'errors'); } print $langs->trans($template->label); @@ -306,13 +317,13 @@ if ($action == 'edit') { } print '
    ' . implode(' ', $toprint) . '
'; } elseif (preg_match('/thirdparty_type/', $val['type'])) { - if (getDolGlobalString($constname)==2) { + if (getDolGlobalString($constname) == 2) { print $langs->trans("Prospect"); - } elseif (getDolGlobalString($constname)==3) { + } elseif (getDolGlobalString($constname) == 3) { print $langs->trans("ProspectCustomer"); - } elseif (getDolGlobalInt($constname)==1) { + } elseif (getDolGlobalInt($constname) == 1) { print $langs->trans("Customer"); - } elseif (getDolGlobalInt($constname)==0) { + } elseif (getDolGlobalInt($constname) == 0) { print $langs->trans("NorProspectNorCustomer"); } } else { @@ -333,16 +344,8 @@ if ($action == 'edit') { } -$moduledir = 'knowledgemanagement'; -$myTmpObjects = array(); -$myTmpObjects['MyObject'] = array('includerefgeneration'=>0, 'includedocgeneration'=>0); - - foreach ($myTmpObjects as $myTmpObjectKey => $myTmpObjectArray) { - if ($myTmpObjectKey == 'MyObject') { - continue; - } - if ($myTmpObjectArray['includerefgeneration']) { + if (!empty($myTmpObjectArray['includerefgeneration'])) { /* * Orders Numbering model */ @@ -368,7 +371,7 @@ foreach ($myTmpObjects as $myTmpObjectKey => $myTmpObjectArray) { $handle = opendir($dir); if (is_resource($handle)) { while (($file = readdir($handle)) !== false) { - if (strpos($file, 'mod_'.strtolower($myTmpObjectKey).'_') === 0 && substr($file, dol_strlen($file) - 3, 3) == 'php') { + if (strpos($file, 'mod_'.strtolower($myTmpObjectArray['class']).'_') === 0 && substr($file, dol_strlen($file) - 3, 3) == 'php') { $file = substr($file, 0, dol_strlen($file) - 4); require_once $dir.'/'.$file.'.php'; @@ -404,17 +407,18 @@ foreach ($myTmpObjects as $myTmpObjectKey => $myTmpObjectArray) { print '
'; - $constforvar = 'KNOWLEDGEMANAGEMENT_'.strtoupper($myTmpObjectKey).'_ADDON'; + $constforvar = 'KNOWLEDGEMANAGEMENT_'.strtoupper($myTmpObjectArray['class']).'_ADDON'; if (getDolGlobalString($constforvar) == $file) { print img_picto($langs->trans("Activated"), 'switch_on'); } else { - print ''; + print ''; print img_picto($langs->trans("Disabled"), 'switch_off'); print ''; } print '

\n"; } - if ($myTmpObjectArray['includedocgeneration']) { + if (!empty($myTmpObjectArray['includedocgeneration'])) { /* * Document templates generators */ @@ -497,6 +501,7 @@ foreach ($myTmpObjects as $myTmpObjectKey => $myTmpObjectArray) { if (is_dir($dir)) { $handle = opendir($dir); if (is_resource($handle)) { + $filelist = array(); while (($file = readdir($handle)) !== false) { $filelist[] = $file; } @@ -507,10 +512,10 @@ foreach ($myTmpObjects as $myTmpObjectKey => $myTmpObjectArray) { if (preg_match('/\.modules\.php$/i', $file) && preg_match('/^(pdf_|doc_)/', $file)) { if (file_exists($dir.'/'.$file)) { $name = substr($file, 4, dol_strlen($file) - 16); - $classname = substr($file, 0, dol_strlen($file) - 12); + $className = substr($file, 0, dol_strlen($file) - 12); require_once $dir.'/'.$file; - $module = new $classname($db); + $module = new $className($db); $modulequalified = 1; if ($module->version == 'development' && getDolGlobalInt('MAIN_FEATURES_LEVEL') < 2) { diff --git a/htdocs/admin/ldap.php b/htdocs/admin/ldap.php index cc1fd97fe62..53d52fdfe92 100644 --- a/htdocs/admin/ldap.php +++ b/htdocs/admin/ldap.php @@ -65,7 +65,7 @@ if (empty($reshook)) { if (!dolibarr_set_const($db, 'LDAP_SERVER_TYPE', GETPOST("type", 'aZ09'), 'chaine', 0, '', $conf->entity)) { $error++; } - if (!dolibarr_set_const($db, 'LDAP_USERACCOUNTCONTROL', GETPOST("userAccountControl", 'int'), 'chaine', 0, '', $conf->entity)) { + if (!dolibarr_set_const($db, 'LDAP_USERACCOUNTCONTROL', GETPOSTINT("userAccountControl"), 'chaine', 0, '', $conf->entity)) { $error++; } if (!dolibarr_set_const($db, 'LDAP_SERVER_PROTOCOLVERSION', GETPOST("LDAP_SERVER_PROTOCOLVERSION", 'aZ09'), 'chaine', 0, '', $conf->entity)) { @@ -77,7 +77,7 @@ if (empty($reshook)) { if (!dolibarr_set_const($db, 'LDAP_SERVER_HOST_SLAVE', GETPOST("slave", 'alphanohtml'), 'chaine', 0, '', $conf->entity)) { $error++; } - if (!dolibarr_set_const($db, 'LDAP_SERVER_PORT', GETPOST("port", 'int'), 'chaine', 0, '', $conf->entity)) { + if (!dolibarr_set_const($db, 'LDAP_SERVER_PORT', GETPOSTINT("port"), 'chaine', 0, '', $conf->entity)) { $error++; } if (!dolibarr_set_const($db, 'LDAP_SERVER_DN', GETPOST("dn", 'alphanohtml'), 'chaine', 0, '', $conf->entity)) { @@ -169,14 +169,14 @@ if (isModEnabled('societe')) { } // Synchro member active -if (isModEnabled('adherent')) { +if (isModEnabled('member')) { print '' . $langs->trans("LDAPDnMemberActive") . ''; print $formldap->selectLdapDnSynchroActive(getDolGlobalInt('LDAP_MEMBER_ACTIVE'), 'activemembers', array(), 2); print '' . $langs->trans("LDAPDnMemberActiveExample") . ''; } // Synchro member type active -if (isModEnabled('adherent')) { +if (isModEnabled('member')) { print '' . $langs->trans("LDAPDnMemberTypeActive") . ''; print $formldap->selectLdapDnSynchroActive(getDolGlobalInt('LDAP_MEMBER_TYPE_ACTIVE'), 'activememberstypes', array(), 2); print '' . $langs->trans("LDAPDnMemberTypeActiveExample") . ''; diff --git a/htdocs/admin/limits.php b/htdocs/admin/limits.php index 41699a84709..a4911e94e52 100644 --- a/htdocs/admin/limits.php +++ b/htdocs/admin/limits.php @@ -45,8 +45,8 @@ $mainmaxdecimalstot = 'MAIN_MAX_DECIMALS_TOT'.(!empty($currencycode) ? '_'.$curr $mainmaxdecimalsshown = 'MAIN_MAX_DECIMALS_SHOWN'.(!empty($currencycode) ? '_'.$currencycode : ''); $mainroundingruletot = 'MAIN_ROUNDING_RULE_TOT'.(!empty($currencycode) ? '_'.$currencycode : ''); -$valmainmaxdecimalsunit = GETPOST($mainmaxdecimalsunit, 'int'); -$valmainmaxdecimalstot = GETPOST($mainmaxdecimalstot, 'int'); +$valmainmaxdecimalsunit = GETPOSTINT($mainmaxdecimalsunit); +$valmainmaxdecimalstot = GETPOSTINT($mainmaxdecimalstot); $valmainmaxdecimalsshown = GETPOST($mainmaxdecimalsshown, 'alpha'); // Can be 'x.y' but also 'x...' $valmainroundingruletot = price2num(GETPOST($mainroundingruletot, 'alphanohtml'), '', 2); diff --git a/htdocs/admin/mailing.php b/htdocs/admin/mailing.php index 417e90f9ef4..93a47a30e5e 100644 --- a/htdocs/admin/mailing.php +++ b/htdocs/admin/mailing.php @@ -51,7 +51,7 @@ if ($action == 'setvalue') { $mailerror = GETPOST('MAILING_EMAIL_ERRORSTO', 'alpha'); $checkread = GETPOST('value', 'alpha'); $checkread_key = GETPOST('MAILING_EMAIL_UNSUBSCRIBE_KEY', 'alpha'); - $contactbulkdefault = GETPOST('MAILING_CONTACT_DEFAULT_BULK_STATUS', 'int'); + $contactbulkdefault = GETPOSTINT('MAILING_CONTACT_DEFAULT_BULK_STATUS'); if (GETPOST('MAILING_DELAY', 'alpha') != '') { $mailingdelay = price2num(GETPOST('MAILING_DELAY', 'alpha'), 3); // Not less than 1 millisecond. } else { @@ -98,7 +98,7 @@ if ($action == 'setvalue') { } } if ($action == 'setonsearchandlistgooncustomerorsuppliercard') { - $setonsearchandlistgooncustomerorsuppliercard = GETPOST('value', 'int'); + $setonsearchandlistgooncustomerorsuppliercard = GETPOSTINT('value'); $res = dolibarr_set_const($db, "SOCIETE_ON_SEARCH_AND_LIST_GO_ON_CUSTOMER_OR_SUPPLIER_CARD", $setonsearchandlistgooncustomerorsuppliercard, 'yesno', 0, '', $conf->entity); if (!($res > 0)) { $error++; diff --git a/htdocs/admin/mails.php b/htdocs/admin/mails.php index 443e5eb2e8f..1856e89f875 100644 --- a/htdocs/admin/mails.php +++ b/htdocs/admin/mails.php @@ -86,29 +86,29 @@ if ($action == 'update' && !$cancel) { } if (!$error) { - dolibarr_set_const($db, "MAIN_DISABLE_ALL_MAILS", GETPOST("MAIN_DISABLE_ALL_MAILS", 'int'), 'chaine', 0, '', $conf->entity); + dolibarr_set_const($db, "MAIN_DISABLE_ALL_MAILS", GETPOSTINT("MAIN_DISABLE_ALL_MAILS"), 'chaine', 0, '', $conf->entity); dolibarr_set_const($db, "MAIN_MAIL_FORCE_SENDTO", GETPOST("MAIN_MAIL_FORCE_SENDTO", 'alphanohtml'), 'chaine', 0, '', $conf->entity); - dolibarr_set_const($db, "MAIN_MAIL_ENABLED_USER_DEST_SELECT", GETPOST("MAIN_MAIL_ENABLED_USER_DEST_SELECT", 'int'), 'chaine', 0, '', $conf->entity); - dolibarr_set_const($db, 'MAIN_MAIL_NO_WITH_TO_SELECTED', GETPOST('MAIN_MAIL_NO_WITH_TO_SELECTED', 'int'), 'chaine', 0, '', $conf->entity); + dolibarr_set_const($db, "MAIN_MAIL_ENABLED_USER_DEST_SELECT", GETPOSTINT("MAIN_MAIL_ENABLED_USER_DEST_SELECT"), 'chaine', 0, '', $conf->entity); + dolibarr_set_const($db, 'MAIN_MAIL_NO_WITH_TO_SELECTED', GETPOSTINT('MAIN_MAIL_NO_WITH_TO_SELECTED'), 'chaine', 0, '', $conf->entity); // Send mode parameters dolibarr_set_const($db, "MAIN_MAIL_SENDMODE", GETPOST("MAIN_MAIL_SENDMODE", 'aZ09'), 'chaine', 0, '', $conf->entity); - dolibarr_set_const($db, "MAIN_MAIL_SMTP_PORT", GETPOST("MAIN_MAIL_SMTP_PORT", 'int'), 'chaine', 0, '', $conf->entity); + dolibarr_set_const($db, "MAIN_MAIL_SMTP_PORT", GETPOSTINT("MAIN_MAIL_SMTP_PORT"), 'chaine', 0, '', $conf->entity); dolibarr_set_const($db, "MAIN_MAIL_SMTP_SERVER", GETPOST("MAIN_MAIL_SMTP_SERVER", 'alphanohtml'), 'chaine', 0, '', $conf->entity); dolibarr_set_const($db, "MAIN_MAIL_SMTPS_ID", GETPOST("MAIN_MAIL_SMTPS_ID", 'alphanohtml'), 'chaine', 0, '', $conf->entity); if (GETPOSTISSET("MAIN_MAIL_SMTPS_PW")) { dolibarr_set_const($db, "MAIN_MAIL_SMTPS_PW", GETPOST("MAIN_MAIL_SMTPS_PW", 'none'), 'chaine', 0, '', $conf->entity); } if (GETPOSTISSET("MAIN_MAIL_SMTPS_AUTH_TYPE")) { - dolibarr_set_const($db, "MAIN_MAIL_SMTPS_AUTH_TYPE", GETPOST("MAIN_MAIL_SMTPS_AUTH_TYPE", 'chaine'), 'chaine', 0, '', $conf->entity); + dolibarr_set_const($db, "MAIN_MAIL_SMTPS_AUTH_TYPE", GETPOST("MAIN_MAIL_SMTPS_AUTH_TYPE", 'alphanohtml'), 'chaine', 0, '', $conf->entity); } if (GETPOSTISSET("MAIN_MAIL_SMTPS_OAUTH_SERVICE")) { - dolibarr_set_const($db, "MAIN_MAIL_SMTPS_OAUTH_SERVICE", GETPOST("MAIN_MAIL_SMTPS_OAUTH_SERVICE", 'chaine'), 'chaine', 0, '', $conf->entity); + dolibarr_set_const($db, "MAIN_MAIL_SMTPS_OAUTH_SERVICE", GETPOST("MAIN_MAIL_SMTPS_OAUTH_SERVICE", 'alphanohtml'), 'chaine', 0, '', $conf->entity); } - dolibarr_set_const($db, "MAIN_MAIL_EMAIL_TLS", GETPOST("MAIN_MAIL_EMAIL_TLS", 'int'), 'chaine', 0, '', $conf->entity); - dolibarr_set_const($db, "MAIN_MAIL_EMAIL_STARTTLS", GETPOST("MAIN_MAIL_EMAIL_STARTTLS", 'int'), 'chaine', 0, '', $conf->entity); - dolibarr_set_const($db, "MAIN_MAIL_EMAIL_SMTP_ALLOW_SELF_SIGNED", GETPOST("MAIN_MAIL_EMAIL_SMTP_ALLOW_SELF_SIGNED", 'int'), 'chaine', 0, '', $conf->entity); + dolibarr_set_const($db, "MAIN_MAIL_EMAIL_TLS", GETPOSTINT("MAIN_MAIL_EMAIL_TLS"), 'chaine', 0, '', $conf->entity); + dolibarr_set_const($db, "MAIN_MAIL_EMAIL_STARTTLS", GETPOSTINT("MAIN_MAIL_EMAIL_STARTTLS"), 'chaine', 0, '', $conf->entity); + dolibarr_set_const($db, "MAIN_MAIL_EMAIL_SMTP_ALLOW_SELF_SIGNED", GETPOSTINT("MAIN_MAIL_EMAIL_SMTP_ALLOW_SELF_SIGNED"), 'chaine', 0, '', $conf->entity); - dolibarr_set_const($db, "MAIN_MAIL_EMAIL_DKIM_ENABLED", GETPOST("MAIN_MAIL_EMAIL_DKIM_ENABLED", 'int'), 'chaine', 0, '', $conf->entity); + dolibarr_set_const($db, "MAIN_MAIL_EMAIL_DKIM_ENABLED", GETPOSTINT("MAIN_MAIL_EMAIL_DKIM_ENABLED"), 'chaine', 0, '', $conf->entity); dolibarr_set_const($db, "MAIN_MAIL_EMAIL_DKIM_DOMAIN", GETPOST("MAIN_MAIL_EMAIL_DKIM_DOMAIN", 'alphanohtml'), 'chaine', 0, '', $conf->entity); dolibarr_set_const($db, "MAIN_MAIL_EMAIL_DKIM_SELECTOR", GETPOST("MAIN_MAIL_EMAIL_DKIM_SELECTOR", 'alphanohtml'), 'chaine', 0, '', $conf->entity); dolibarr_set_const($db, "MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY", GETPOST("MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY", 'alphanohtml'), 'chaine', 0, '', $conf->entity); @@ -273,9 +273,9 @@ if ($action == 'edit') { jQuery("#MAIN_MAIL_SMTP_SERVER").show(); jQuery("#MAIN_MAIL_SMTP_PORT").show(); jQuery("#smtp_server_mess").hide(); - jQuery("#smtp_port_mess").hide(); + jQuery("#smtp_port_mess").hide(); jQuery(".smtp_method").show(); - jQuery(".dkim").hide(); + jQuery(".dkim").hide(); jQuery(".smtp_auth_method").show(); } if (jQuery("#MAIN_MAIL_SENDMODE").val()==\'swiftmailer\') @@ -302,9 +302,9 @@ if ($action == 'edit') { jQuery("#MAIN_MAIL_SMTP_PORT").show(); jQuery("#smtp_server_mess").hide(); jQuery("#smtp_port_mess").hide(); - jQuery(".smtp_method").show(); + jQuery(".smtp_method").show(); jQuery(".dkim").show(); - jQuery(".smtp_auth_method").show(); + jQuery(".smtp_auth_method").show(); } } function change_smtp_auth_method() { @@ -1109,7 +1109,7 @@ if ($action == 'edit') { $formmail->withtopicreadonly = 0; $formmail->withfile = 2; $formmail->withlayout = 1; - $formmail->withaiprompt = 1; + $formmail->withaiprompt = ($action == 'testhtml' ? 'html' : 'text'); $formmail->withbody = (GETPOSTISSET('message') ? GETPOST('message', 'restricthtml') : ($action == 'testhtml' ? $langs->transnoentities("PredefinedMailTestHtml") : $langs->transnoentities("PredefinedMailTest"))); $formmail->withbodyreadonly = 0; $formmail->withcancel = 1; diff --git a/htdocs/admin/mails_emailing.php b/htdocs/admin/mails_emailing.php index 5f14face633..059a99a7a1b 100644 --- a/htdocs/admin/mails_emailing.php +++ b/htdocs/admin/mails_emailing.php @@ -88,10 +88,10 @@ if ($action == 'update' && !$cancel) { dolibarr_set_const($db, "MAIN_MAIL_SMTPS_PW_EMAILING", GETPOST("MAIN_MAIL_SMTPS_PW_EMAILING", 'none'), 'chaine', 0, '', $conf->entity); } if (GETPOSTISSET("MAIN_MAIL_SMTPS_AUTH_TYPE_EMAILING")) { - dolibarr_set_const($db, "MAIN_MAIL_SMTPS_AUTH_TYPE_EMAILING", GETPOST("MAIN_MAIL_SMTPS_AUTH_TYPE_EMAILING", 'chaine'), 'chaine', 0, '', $conf->entity); + dolibarr_set_const($db, "MAIN_MAIL_SMTPS_AUTH_TYPE_EMAILING", GETPOST("MAIN_MAIL_SMTPS_AUTH_TYPE_EMAILING", 'alphanohtml'), 'chaine', 0, '', $conf->entity); } if (GETPOSTISSET("MAIN_MAIL_SMTPS_OAUTH_SERVICE_EMAILING")) { - dolibarr_set_const($db, "MAIN_MAIL_SMTPS_OAUTH_SERVICE_EMAILING", GETPOST("MAIN_MAIL_SMTPS_OAUTH_SERVICE_EMAILING", 'chaine'), 'chaine', 0, '', $conf->entity); + dolibarr_set_const($db, "MAIN_MAIL_SMTPS_OAUTH_SERVICE_EMAILING", GETPOST("MAIN_MAIL_SMTPS_OAUTH_SERVICE_EMAILING", 'alphanohtml'), 'chaine', 0, '', $conf->entity); } dolibarr_set_const($db, "MAIN_MAIL_EMAIL_TLS_EMAILING", GETPOST("MAIN_MAIL_EMAIL_TLS_EMAILING"), 'chaine', 0, '', $conf->entity); dolibarr_set_const($db, "MAIN_MAIL_EMAIL_STARTTLS_EMAILING", GETPOST("MAIN_MAIL_EMAIL_STARTTLS_EMAILING"), 'chaine', 0, '', $conf->entity); @@ -450,6 +450,7 @@ if ($action == 'edit') { // SuperAdministrator access only if (!isModEnabled('multicompany') || ($user->admin && !$user->entity)) { + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder print $form->selectarray('MAIN_MAIL_SMTPS_OAUTH_SERVICE_EMAILING', $oauthservices, $conf->global->MAIN_MAIL_SMTPS_OAUTH_SERVICE_EMAILING); } else { $text = $oauthservices[getDolGlobalString('MAIN_MAIL_SMTPS_OAUTH_SERVICE_EMAILING')]; diff --git a/htdocs/admin/mails_senderprofile_list.php b/htdocs/admin/mails_senderprofile_list.php index d0a452061de..bcf786ec1b0 100644 --- a/htdocs/admin/mails_senderprofile_list.php +++ b/htdocs/admin/mails_senderprofile_list.php @@ -35,7 +35,7 @@ $langs->loadLangs(array("errors", "admin", "mails", "languages")); $action = GETPOST('action', 'aZ09') ? GETPOST('action', 'aZ09') : 'view'; // The action 'add', 'create', 'edit', 'update', 'view', ... $massaction = GETPOST('massaction', 'alpha'); // The bulk action (combo box choice into lists) -$show_files = GETPOST('show_files', 'int'); // Show files area generated by bulk actions ? +$show_files = GETPOSTINT('show_files'); // Show files area generated by bulk actions ? $confirm = GETPOST('confirm', 'alpha'); // Result of a confirmation $cancel = GETPOST('cancel', 'alpha'); // We click on a Cancel button $toselect = GETPOST('toselect', 'array'); // Array of ids of elements selected into a list @@ -44,14 +44,14 @@ $backtopage = GETPOST('backtopage', 'alpha'); // Go back to a dedicated page $optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print') $mode = GETPOST('mode', 'aZ'); // The output mode ('list', 'kanban', 'hierarchy', 'calendar', ...) -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $rowid = GETPOST('rowid', 'alpha'); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // If $page is not defined, or '' or -1 or if we click on clear filters $page = 0; @@ -88,8 +88,8 @@ foreach ($object->fields as $key => $val) { $search[$key] = GETPOST('search_'.$key, 'alpha'); } if (preg_match('/^(date|timestamp|datetime)/', $val['type'])) { - $search[$key.'_dtstart'] = dol_mktime(0, 0, 0, GETPOST('search_'.$key.'_dtstartmonth', 'int'), GETPOST('search_'.$key.'_dtstartday', 'int'), GETPOST('search_'.$key.'_dtstartyear', 'int')); - $search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOST('search_'.$key.'_dtendmonth', 'int'), GETPOST('search_'.$key.'_dtendday', 'int'), GETPOST('search_'.$key.'_dtendyear', 'int')); + $search[$key.'_dtstart'] = dol_mktime(0, 0, 0, GETPOSTINT('search_'.$key.'_dtstartmonth'), GETPOSTINT('search_'.$key.'_dtstartday'), GETPOSTINT('search_'.$key.'_dtstartyear')); + $search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOSTINT('search_'.$key.'_dtendmonth'), GETPOSTINT('search_'.$key.'_dtendday'), GETPOSTINT('search_'.$key.'_dtendyear')); } } @@ -108,11 +108,11 @@ foreach ($object->fields as $key => $val) { if (!empty($val['visible'])) { $visible = (int) dol_eval($val['visible'], 1); $arrayfields['t.'.$key] = array( - 'label'=>$val['label'], - 'checked'=>(($visible < 0) ? 0 : 1), - 'enabled'=>(abs($visible) != 3 && dol_eval($val['enabled'], 1)), - 'position'=>$val['position'], - 'help'=> isset($val['help']) ? $val['help'] : '' + 'label' => $val['label'], + 'checked' => (($visible < 0) ? 0 : 1), + 'enabled' => (abs($visible) != 3 && (int) dol_eval($val['enabled'], 1)), + 'position' => $val['position'], + 'help' => isset($val['help']) ? $val['help'] : '' ); } } @@ -121,10 +121,10 @@ if (!empty($extrafields->attributes[$object->table_element]['label']) && is_arra foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) { if (!empty($extrafields->attributes[$object->table_element]['list'][$key])) { $arrayfields["ef.".$key] = array( - 'label'=>$extrafields->attributes[$object->table_element]['label'][$key], - 'checked'=>(($extrafields->attributes[$object->table_element]['list'][$key] < 0) ? 0 : 1), - 'position'=>$extrafields->attributes[$object->table_element]['pos'][$key], - 'enabled'=>(abs($extrafields->attributes[$object->table_element]['list'][$key]) != 3 && $extrafields->attributes[$object->table_element]['perms'][$key]) + 'label' => $extrafields->attributes[$object->table_element]['label'][$key], + 'checked' => (($extrafields->attributes[$object->table_element]['list'][$key] < 0) ? 0 : 1), + 'position' => $extrafields->attributes[$object->table_element]['pos'][$key], + 'enabled' => (abs($extrafields->attributes[$object->table_element]['list'][$key]) != 3 && $extrafields->attributes[$object->table_element]['perms'][$key]) ); } } @@ -203,7 +203,7 @@ if (empty($reshook)) { include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; if ($action == 'delete') { - $sql = "DELETE FROM ".MAIN_DB_PREFIX."c_email_senderprofile WHERE rowid = ".GETPOST('id', 'int'); + $sql = "DELETE FROM ".MAIN_DB_PREFIX."c_email_senderprofile WHERE rowid = ".GETPOSTINT('id'); $resql = $db->query($sql); if ($resql) { setEventMessages($langs->trans("RecordDeleted"), null, 'mesgs'); @@ -268,7 +268,7 @@ $parameters = array(); $reshook = $hookmanager->executeHooks('printFieldListFrom', $parameters, $object, $action); // Note that $action and $object may have been modified by hook $sql .= $hookmanager->resPrint; if ($object->ismultientitymanaged == 1) { - $sql .= " WHERE t.entity IN (".getEntity($object->element, (GETPOST('search_current_entity', 'int') ? 0 : 1)).")"; + $sql .= " WHERE t.entity IN (".getEntity($object->element, (GETPOSTINT('search_current_entity') ? 0 : 1)).")"; } else { $sql .= " WHERE 1 = 1"; } @@ -397,9 +397,9 @@ foreach ($search as $key => $val) { } } } elseif (preg_match('/(_dtstart|_dtend)$/', $key) && !empty($val)) { - $param .= '&search_'.$key.'month='.((int) GETPOST('search_'.$key.'month', 'int')); - $param .= '&search_'.$key.'day='.((int) GETPOST('search_'.$key.'day', 'int')); - $param .= '&search_'.$key.'year='.((int) GETPOST('search_'.$key.'year', 'int')); + $param .= '&search_'.$key.'month='.(GETPOSTINT('search_'.$key.'month')); + $param .= '&search_'.$key.'day='.(GETPOSTINT('search_'.$key.'day')); + $param .= '&search_'.$key.'year='.(GETPOSTINT('search_'.$key.'year')); } elseif ($search[$key] != '') { $param .= '&search_'.$key.'='.urlencode($search[$key]); } @@ -453,11 +453,11 @@ if ($action != 'create') { print ''; print ''.$langs->trans("User").''; print img_picto('', 'user', 'class="pictofixedwidth"'); - print $form->select_dolusers((GETPOSTISSET('private') ? GETPOST('private', 'int') : $object->private), 'private', 1, null, 0, ($user->admin ? '' : $user->id)); + print $form->select_dolusers((GETPOSTISSET('private') ? GETPOSTINT('private') : $object->private), 'private', 1, null, 0, ($user->admin ? '' : $user->id)); print ''; - print ''.$langs->trans("Position").''; + print ''.$langs->trans("Position").''; print ''.$langs->trans("Status").''; - print $form->selectarray('active', $object->fields['active']['arrayofkeyval'], (GETPOSTISSET('active') ? GETPOST('active', 'int') : $object->active), 0, 0, 0, '', 1); + print $form->selectarray('active', $object->fields['active']['arrayofkeyval'], (GETPOSTISSET('active') ? GETPOSTINT('active') : $object->active), 0, 0, 0, '', 1); print ''; print ''; @@ -485,11 +485,11 @@ if ($action != 'create') { print ''; print ''.$langs->trans("User").''; print img_picto('', 'user', 'class="pictofixedwidth"'); - print $form->select_dolusers((GETPOSTISSET('private') ? GETPOST('private', 'int') : -1), 'private', 1, null, 0, ($user->admin ? '' : $user->id)); + print $form->select_dolusers((GETPOSTISSET('private') ? GETPOSTINT('private') : -1), 'private', 1, null, 0, ($user->admin ? '' : $user->id)); print ''; - print ''.$langs->trans("Position").''; + print ''.$langs->trans("Position").''; print ''.$langs->trans("Status").''; - print $form->selectarray('active', $object->fields['active']['arrayofkeyval'], GETPOST('active', 'int'), 0); + print $form->selectarray('active', $object->fields['active']['arrayofkeyval'], GETPOSTINT('active'), 0); print ''; print ''; @@ -536,7 +536,7 @@ if (!empty($moreforfilter)) { } $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; -$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')) : ''); // This also change content of $arrayfields +$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) : ''); // This also change content of $arrayfields $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); print '
'; // You can use div-table-responsive-no-min if you don't need reserved height for your table @@ -591,7 +591,7 @@ foreach ($object->fields as $key => $val) { // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php'; // Fields from hook -$parameters = array('arrayfields'=>$arrayfields); +$parameters = array('arrayfields' => $arrayfields); $reshook = $hookmanager->executeHooks('printFieldListOption', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; // Action column @@ -635,7 +635,7 @@ foreach ($object->fields as $key => $val) { include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; // Hook fields -$parameters = array('arrayfields'=>$arrayfields, 'param'=>$param, 'sortfield'=>$sortfield, 'sortorder'=>$sortorder, 'totalarray'=>&$totalarray); +$parameters = array('arrayfields' => $arrayfields, 'param' => $param, 'sortfield' => $sortfield, 'sortorder' => $sortorder, 'totalarray' => &$totalarray); $reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; // Action column @@ -706,7 +706,7 @@ while ($i < $imaxinloop) { $url .= '&limit='.((int) $limit); } if ($page) { - $url .= '&page='.urlencode($page); + $url .= '&page='.urlencode((string) ($page)); } if ($sortfield) { $url .= '&sortfield='.urlencode($sortfield); @@ -783,7 +783,7 @@ while ($i < $imaxinloop) { // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php'; // Fields from hook - $parameters = array('arrayfields'=>$arrayfields, 'object'=>$object, 'obj'=>$obj, 'i'=>$i, 'totalarray'=>&$totalarray); + $parameters = array('arrayfields' => $arrayfields, 'object' => $object, 'obj' => $obj, 'i' => $i, 'totalarray' => &$totalarray); $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; @@ -796,7 +796,7 @@ while ($i < $imaxinloop) { $url .= '&limit='.((int) $limit); } if ($page) { - $url .= '&page='.urlencode($page); + $url .= '&page='.urlencode((string) ($page)); } if ($sortfield) { $url .= '&sortfield='.urlencode($sortfield); @@ -845,7 +845,7 @@ if ($num == 0) { $db->free($resql); -$parameters = array('arrayfields'=>$arrayfields, 'sql'=>$sql); +$parameters = array('arrayfields' => $arrayfields, 'sql' => $sql); $reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; diff --git a/htdocs/admin/mails_templates.php b/htdocs/admin/mails_templates.php index 13545002911..546427463da 100644 --- a/htdocs/admin/mails_templates.php +++ b/htdocs/admin/mails_templates.php @@ -44,13 +44,13 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formaccounting.class.php'; // Load translation files required by the page -$langsArray=array("errors", "admin", "mails", "languages"); +$langsArray = array("errors", "admin", "mails", "languages"); -if (isModEnabled('adherent')) { - $langsArray[]='members'; +if (isModEnabled('member')) { + $langsArray[] = 'members'; } if (isModEnabled('eventorganization')) { - $langsArray[]='eventorganization'; + $langsArray[] = 'eventorganization'; } $langs->loadLangs($langsArray); @@ -62,7 +62,7 @@ $confirm = GETPOST('confirm', 'alpha'); // Result of a confirmation $mode = GETPOST('mode', 'aZ09'); $optioncss = GETPOST('optioncss', 'alpha'); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $rowid = GETPOST('rowid', 'alpha'); $search_label = GETPOST('search_label', 'alphanohtml'); // Must allow value like 'Abc Def' or '(MyTemplateName)' $search_type_template = GETPOST('search_type_template', 'alpha'); @@ -81,10 +81,10 @@ $actl[1] = img_picto($langs->trans("Activated"), 'switch_on', 'class="size15x"') $listoffset = GETPOST('listoffset', 'alpha'); $listlimit = GETPOST('listlimit', 'alpha') > 0 ? GETPOST('listlimit', 'alpha') : 1000; -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -163,16 +163,16 @@ if (!getDolGlobalString('MAIN_EMAIL_TEMPLATES_FOR_OBJECT_LINES')) { $tabhelp = array(); $tabhelp[25] = array( - 'label'=>$langs->trans('EnterAnyCode'), - 'type_template'=>$langs->trans("TemplateForElement"), - 'private'=>$langs->trans("TemplateIsVisibleByOwnerOnly"), - 'position'=>$langs->trans("PositionIntoComboList"), - 'topic'=>''.$helpsubstit.'', - 'email_from'=>$langs->trans('ForceEmailFrom'), - 'joinfiles'=>$langs->trans('AttachMainDocByDefault'), - 'defaultfortype'=>$langs->trans("DefaultForTypeDesc"), - 'content'=>''.$helpsubstit.'', - 'content_lines'=>''.$helpsubstitforlines.'' + 'label' => $langs->trans('EnterAnyCode'), + 'type_template' => $langs->trans("TemplateForElement"), + 'private' => $langs->trans("TemplateIsVisibleByOwnerOnly"), + 'position' => $langs->trans("PositionIntoComboList"), + 'topic' => ''.$helpsubstit.'', + 'email_from' => $langs->trans('ForceEmailFrom'), + 'joinfiles' => $langs->trans('AttachMainDocByDefault'), + 'defaultfortype' => $langs->trans("DefaultForTypeDesc"), + 'content' => ''.$helpsubstit.'', + 'content_lines' => ''.$helpsubstitforlines.'' ); @@ -183,7 +183,7 @@ $elementList = array(); $elementList['all'] = '-- '.dol_escape_htmltag($langs->trans("All")).' --'; $elementList['none'] = '-- '.dol_escape_htmltag($langs->trans("None")).' --'; $elementList['user'] = img_picto('', 'user', 'class="pictofixedwidth"').dol_escape_htmltag($langs->trans('MailToUser')); -if (isModEnabled('adherent') && $user->hasRight('adherent', 'lire')) { +if (isModEnabled('member') && $user->hasRight('adherent', 'lire')) { $elementList['member'] = img_picto('', 'object_member', 'class="pictofixedwidth"').dol_escape_htmltag($langs->trans('MailToMember')); } if (isModEnabled('recruitment') && $user->hasRight('recruitment', 'recruitmentjobposition', 'read')) { @@ -198,19 +198,19 @@ if (isModEnabled('project')) { if (isModEnabled("propal") && $user->hasRight('propal', 'lire')) { $elementList['propal_send'] = img_picto('', 'propal', 'class="pictofixedwidth"').dol_escape_htmltag($langs->trans('MailToSendProposal')); } -if (isModEnabled('commande') && $user->hasRight('commande', 'lire')) { +if (isModEnabled('order') && $user->hasRight('commande', 'lire')) { $elementList['order_send'] = img_picto('', 'order', 'class="pictofixedwidth"').dol_escape_htmltag($langs->trans('MailToSendOrder')); } -if (isModEnabled('facture') && $user->hasRight('facture', 'lire')) { +if (isModEnabled('invoice') && $user->hasRight('facture', 'lire')) { $elementList['facture_send'] = img_picto('', 'bill', 'class="pictofixedwidth"').dol_escape_htmltag($langs->trans('MailToSendInvoice')); } -if (isModEnabled("expedition")) { +if (isModEnabled("shipping")) { $elementList['shipping_send'] = img_picto('', 'dolly', 'class="pictofixedwidth"').dol_escape_htmltag($langs->trans('MailToSendShipment')); } if (isModEnabled("reception")) { $elementList['reception_send'] = img_picto('', 'dollyrevert', 'class="pictofixedwidth"').dol_escape_htmltag($langs->trans('MailToSendReception')); } -if (isModEnabled('ficheinter')) { +if (isModEnabled('intervention')) { $elementList['fichinter_send'] = img_picto('', 'intervention', 'class="pictofixedwidth"').dol_escape_htmltag($langs->trans('MailToSendIntervention')); } if (isModEnabled('supplier_proposal')) { @@ -222,7 +222,7 @@ if (isModEnabled("supplier_order") && ($user->hasRight('fournisseur', 'commande' if (isModEnabled("supplier_invoice") && ($user->hasRight('fournisseur', 'facture', 'lire') || $user->hasRight('supplier_invoice', 'read'))) { $elementList['invoice_supplier_send'] = img_picto('', 'bill', 'class="pictofixedwidth"').dol_escape_htmltag($langs->trans('MailToSendSupplierInvoice')); } -if (isModEnabled('contrat') && $user->hasRight('contrat', 'lire')) { +if (isModEnabled('contract') && $user->hasRight('contrat', 'lire')) { $elementList['contract'] = img_picto('', 'contract', 'class="pictofixedwidth"').dol_escape_htmltag($langs->trans('MailToSendContract')); } if (isModEnabled('ticket') && $user->hasRight('ticket', 'read')) { @@ -241,7 +241,7 @@ if (isModEnabled('partnership') && $user->hasRight('partnership', 'read')) { $elementList['partnership_send'] = img_picto('', 'partnership', 'class="pictofixedwidth"').dol_escape_htmltag($langs->trans('MailToPartnership')); } -$parameters = array('elementList'=>$elementList); +$parameters = array('elementList' => $elementList); $reshook = $hookmanager->executeHooks('emailElementlist', $parameters); // Note that $action and $object may have been modified by some hooks if ($reshook == 0) { foreach ($hookmanager->resArray as $item => $value) { @@ -401,12 +401,12 @@ if (empty($reshook)) { if (!$user->admin) { // A non admin user can only edit its own template $sql .= " ".((int) $user->id); } else { - $sql .= " ".((int) GETPOST($keycode, 'int')); + $sql .= " ".(GETPOSTINT($keycode)); } } elseif ($keycode == 'content') { $sql .= "'".$db->escape(GETPOST($keycode, 'restricthtml'))."'"; } elseif (in_array($keycode, array('joinfiles', 'defaultfortype', 'private', 'position', 'entity'))) { - $sql .= (int) GETPOST($keycode, 'int'); + $sql .= GETPOSTINT($keycode); } else { $sql .= "'".$db->escape(GETPOST($keycode, 'alphanohtml'))."'"; } @@ -418,7 +418,7 @@ if (empty($reshook)) { $result = $db->query($sql); if ($result) { // Add is ok setEventMessages($langs->transnoentities("RecordSaved"), null, 'mesgs'); - $_POST = array('id'=>$id); // Clean $_POST array, we keep only id + $_POST = array('id' => $id); // Clean $_POST array, we keep only id } else { if ($db->errno() == 'DB_ERROR_RECORD_ALREADY_EXISTS') { setEventMessages($langs->transnoentities("ErrorRecordAlreadyExists"), null, 'errors'); @@ -454,7 +454,7 @@ if (empty($reshook)) { } // Rename some POST variables into a generic name - if ($field == 'fk_user' && !(GETPOST('fk_user', 'int') > 0)) { + if ($field == 'fk_user' && !(GETPOSTINT('fk_user') > 0)) { $_POST['fk_user'] = ''; } if ($field == 'topic') { @@ -483,12 +483,12 @@ if (empty($reshook)) { if (!$user->admin) { // A non admin user can only edit its own template $sql .= " ".((int) $user->id); } else { - $sql .= " ".((int) GETPOST($keycode, 'int')); + $sql .= " ".(GETPOSTINT($keycode)); } } elseif ($keycode == 'content') { $sql .= "'".$db->escape(GETPOST($keycode, 'restricthtml'))."'"; } elseif (in_array($keycode, array('joinfiles', 'defaultfortype', 'private', 'position'))) { - $sql .= (int) GETPOST($keycode, 'int'); + $sql .= GETPOSTINT($keycode); } else { $sql .= "'".$db->escape(GETPOST($keycode, 'alphanohtml'))."'"; } @@ -681,7 +681,7 @@ if (!empty($user->admin) && (empty($_SESSION['leftmenu']) || $_SESSION['leftmenu // Confirm deletion of record if ($action == 'delete') { - print $form->formconfirm($_SERVER["PHP_SELF"].'?'.($page ? 'page='.$page.'&' : '').'sortfield='.$sortfield.'&sortorder='.$sortorder.'&rowid='.((int) $rowid).'&code='.urlencode($code).'&id='.((int) $id), $langs->trans('DeleteLine'), $langs->trans('ConfirmDeleteLine'), 'confirm_delete', '', 0, 1); + print $form->formconfirm($_SERVER["PHP_SELF"].'?'.($page ? 'page='.$page.'&' : '').'sortfield='.$sortfield.'&sortorder='.$sortorder.'&rowid='.((int) $rowid).'&id='.((int) $id), $langs->trans('DeleteLine'), $langs->trans('ConfirmDeleteLine'), 'confirm_delete', '', 0, 1); } @@ -693,8 +693,8 @@ if ($action == 'create') { $obj->label = GETPOST('label'); $obj->lang = GETPOST('lang'); $obj->type_template = GETPOST('type_template'); - $obj->fk_user = GETPOST('fk_user', 'int'); - $obj->private = GETPOST('private', 'int'); + $obj->fk_user = GETPOSTINT('fk_user'); + $obj->private = GETPOSTINT('private'); $obj->position = GETPOST('position'); $obj->topic = GETPOST('topic'); $obj->joinfiles = GETPOST('joinfiles'); @@ -948,6 +948,7 @@ foreach ($fieldlist as $field => $value) { print ''; } elseif ($value == 'type_template') { print ''; + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder print $form->selectarray('search_type_template', $elementList, $search_type_template, 1, 0, 0, '', 0, 0, 0, '', 'minwidth100 maxwidth125', 1, '', 0, 1); print ''; } elseif (!in_array($value, array('content', 'content_lines'))) { @@ -1040,7 +1041,7 @@ foreach ($fieldlist as $field => $value) { } $sortfieldtouse = ($sortable ? $fieldlist[$field] : ''); if ($sortfieldtouse == 'type_template') { - $sortfieldtouse.= 'type_template,lang,position,label'; + $sortfieldtouse .= 'type_template,lang,position,label'; } print getTitleFieldOfList($valuetoshow, 0, $_SERVER["PHP_SELF"], $sortfieldtouse, ($page ? 'page='.$page.'&' : ''), $param, '', $sortfield, $sortorder, $css.' '); } @@ -1065,7 +1066,7 @@ if ($num) { print ''; $tmpaction = 'edit'; - $parameters = array('fieldlist'=>$fieldlist, 'tabname'=>$tabname[$id]); + $parameters = array('fieldlist' => $fieldlist, 'tabname' => $tabname[$id]); $reshook = $hookmanager->executeHooks('editEmailTemplateFieldlist', $parameters, $obj, $tmpaction); // Note that $action and $object may have been modified by some hooks $error = $hookmanager->error; $errors = $hookmanager->errors; @@ -1100,7 +1101,7 @@ if ($num) { } print "\n"; - print ''; + print ''; print ''; $fieldsforcontent = array('topic', 'email_from','joinfiles', 'content'); @@ -1176,7 +1177,7 @@ if ($num) { continue; // It means this is a type of template not into elementList (may be because enabled condition of this type is false because module is not enabled) } // Test on 'enabled' - if (!dol_eval($obj->enabled, 1, 1, '1')) { + if (! (int) dol_eval($obj->enabled, 1, 1, '1')) { $i++; continue; // Email template not qualified } @@ -1216,7 +1217,7 @@ if ($num) { } $tmpaction = 'view'; - $parameters = array('fieldlist'=>$fieldlist, 'tabname'=>$tabname[$id]); + $parameters = array('fieldlist' => $fieldlist, 'tabname' => $tabname[$id]); $reshook = $hookmanager->executeHooks('viewEmailTemplateFieldlist', $parameters, $obj, $tmpaction); // Note that $action and $object may have been modified by some hooks $error = $hookmanager->error; @@ -1461,8 +1462,10 @@ function fieldList($fieldlist, $obj = null, $tabname = '', $context = '') print ''; if ($value == 'private' && $context != 'preview') { if (empty($user->admin)) { + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition print $form->selectyesno($value, '1', 1); } else { + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition print $form->selectyesno($value, (isset($obj->$value) ? $obj->$value : ''), 1); } } else { diff --git a/htdocs/admin/mails_ticket.php b/htdocs/admin/mails_ticket.php index fbb5edddfc3..dd9f63c3ef6 100644 --- a/htdocs/admin/mails_ticket.php +++ b/htdocs/admin/mails_ticket.php @@ -86,10 +86,10 @@ if ($action == 'update' && !$cancel) { dolibarr_set_const($db, "MAIN_MAIL_SMTPS_PW_TICKET", GETPOST("MAIN_MAIL_SMTPS_PW_TICKET", 'none'), 'chaine', 0, '', $conf->entity); } if (GETPOSTISSET("MAIN_MAIL_SMTPS_AUTH_TYPE_TICKET")) { - dolibarr_set_const($db, "MAIN_MAIL_SMTPS_AUTH_TYPE_TICKET", GETPOST("MAIN_MAIL_SMTPS_AUTH_TYPE_TICKET", 'chaine'), 'chaine', 0, '', $conf->entity); + dolibarr_set_const($db, "MAIN_MAIL_SMTPS_AUTH_TYPE_TICKET", GETPOST("MAIN_MAIL_SMTPS_AUTH_TYPE_TICKET", 'alphanohtml'), 'chaine', 0, '', $conf->entity); } if (GETPOSTISSET("MAIN_MAIL_SMTPS_OAUTH_SERVICE_TICKET")) { - dolibarr_set_const($db, "MAIN_MAIL_SMTPS_OAUTH_SERVICE_TICKET", GETPOST("MAIN_MAIL_SMTPS_OAUTH_SERVICE_TICKET", 'chaine'), 'chaine', 0, '', $conf->entity); + dolibarr_set_const($db, "MAIN_MAIL_SMTPS_OAUTH_SERVICE_TICKET", GETPOST("MAIN_MAIL_SMTPS_OAUTH_SERVICE_TICKET", 'alphanohtml'), 'chaine', 0, '', $conf->entity); } dolibarr_set_const($db, "MAIN_MAIL_EMAIL_TLS_TICKET", GETPOST("MAIN_MAIL_EMAIL_TLS_TICKET"), 'chaine', 0, '', $conf->entity); dolibarr_set_const($db, "MAIN_MAIL_EMAIL_STARTTLS_TICKET", GETPOST("MAIN_MAIL_EMAIL_STARTTLS_TICKET"), 'chaine', 0, '', $conf->entity); @@ -672,8 +672,8 @@ if ($action == 'edit') { // Cree l'objet formulaire mail include_once DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php'; $formmail = new FormMail($db); - $formmail->fromname = (GETPOSTISSET('fromname') ? GETPOST('fromname', 'restricthtml') : $conf->global->MAIN_MAIL_EMAIL_FROM); - $formmail->frommail = (GETPOSTISSET('frommail') ? GETPOST('frommail', 'restricthtml') : $conf->global->MAIN_MAIL_EMAIL_FROM); + $formmail->fromname = (GETPOSTISSET('fromname') ? GETPOST('fromname', 'restricthtml') : getDolGlobalString('MAIN_MAIL_EMAIL_FROM')); + $formmail->frommail = (GETPOSTISSET('frommail') ? GETPOST('frommail', 'restricthtml') : getDolGlobalString('MAIN_MAIL_EMAIL_FROM')); $formmail->trackid = (($action == 'testhtml') ? "testhtml" : "test"); $formmail->fromid = $user->id; $formmail->fromalsorobot = 1; diff --git a/htdocs/admin/menus.php b/htdocs/admin/menus.php index f0a84949504..473227f6889 100644 --- a/htdocs/admin/menus.php +++ b/htdocs/admin/menus.php @@ -131,6 +131,7 @@ print load_fiche_titre($langs->trans("Menus"), '', 'title_setup'); $h = 0; +$head = array(); $head[$h][0] = DOL_URL_ROOT."/admin/menus.php"; $head[$h][1] = $langs->trans("MenuHandlers"); $head[$h][2] = 'handler'; diff --git a/htdocs/admin/menus/edit.php b/htdocs/admin/menus/edit.php index 95de2e96b99..74925b34aca 100644 --- a/htdocs/admin/menus/edit.php +++ b/htdocs/admin/menus/edit.php @@ -100,7 +100,7 @@ if ($action == 'add') { $error++; } if (!$error && !GETPOST('type')) { - setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Type")), null, 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Position")), null, 'errors'); $action = 'create'; $error++; } @@ -133,7 +133,7 @@ if ($action == 'add') { $menu->prefix = (string) GETPOST('picto', 'restricthtmlallowclass'); $menu->url = (string) GETPOST('url', 'alphanohtml'); $menu->langs = (string) GETPOST('langs', 'alphanohtml'); - $menu->position = (int) GETPOST('position', 'int'); + $menu->position = GETPOSTINT('position'); $menu->enabled = (string) GETPOST('enabled', 'alphanohtml'); $menu->perms = (string) GETPOST('perms', 'alphanohtml'); $menu->target = (string) GETPOST('target', 'alphanohtml'); @@ -187,14 +187,14 @@ if ($action == 'update') { if (!$error) { $menu = new Menubase($db); - $result = $menu->fetch(GETPOST('menuId', 'int')); + $result = $menu->fetch(GETPOSTINT('menuId')); if ($result > 0) { $menu->title = (string) GETPOST('titre', 'alphanohtml'); $menu->prefix = (string) GETPOST('picto', 'restricthtmlallowclass'); $menu->leftmenu = (string) GETPOST('leftmenu', 'aZ09'); $menu->url = (string) GETPOST('url', 'alphanohtml'); $menu->langs = (string) GETPOST('langs', 'alphanohtml'); - $menu->position = (int) GETPOST('position', 'int'); + $menu->position = GETPOSTINT('position'); $menu->enabled = (string) GETPOST('enabled', 'alphanohtml'); $menu->perms = (string) GETPOST('perms', 'alphanohtml'); $menu->target = (string) GETPOST('target', 'alphanohtml'); @@ -274,7 +274,8 @@ if ($action == 'create') { print load_fiche_titre($langs->trans("NewMenu"), '', 'title_setup'); - print '
'; + print ''; + print ''; print ''; print dol_get_fiche_head(); @@ -283,16 +284,16 @@ if ($action == 'create') { print ''; // Id - $parent_rowid = GETPOST('menuId', 'int'); + $parent_rowid = GETPOSTINT('menuId'); $parent_mainmenu = ''; $parent_leftmenu = ''; $parent_langs = ''; $parent_level = ''; - if (GETPOST('menuId', 'int')) { + if (GETPOSTINT('menuId')) { $sql = "SELECT m.rowid, m.mainmenu, m.leftmenu, m.level, m.langs"; $sql .= " FROM ".MAIN_DB_PREFIX."menu as m"; - $sql .= " WHERE m.rowid = ".((int) GETPOST('menuId', 'int')); + $sql .= " WHERE m.rowid = ".(GETPOSTINT('menuId')); $res = $db->query($sql); if ($res) { while ($menu = $db->fetch_array($res)) { @@ -346,7 +347,7 @@ if ($action == 'create') { print ''; // MenuId Parent - print ''; + print ''; if ($parent_rowid) { print ''; } else { @@ -361,8 +362,8 @@ if ($action == 'create') { print ''; // Picto - print ''; - print ''; + print ''; + print ''; // URL print ''; @@ -408,7 +409,7 @@ if ($action == 'create') { print ''; print ''; print ''; - print ''; + print ''; print dol_get_fiche_head(); @@ -416,7 +417,7 @@ if ($action == 'create') { print '
'.$langs->trans('MenuIdParent').'
'.$langs->trans('MenuIdParent').''.$parent_rowid.''.$langs->trans('DetailTitre').'
'.$langs->trans('Image').''.$langs->trans('Example').': fa-global
'.$langs->trans('Image').''.$langs->trans('Example').': fa-global
'.$langs->trans('URL').'
'; $menu = new Menubase($db); - $result = $menu->fetch(GETPOST('menuId', 'int')); + $result = $menu->fetch(GETPOSTINT('menuId')); //var_dump($menu); // Id @@ -505,7 +506,7 @@ if ($action == 'create') { print ''; print ''; @@ -513,7 +514,7 @@ if ($action == 'create') { print ''; print ''; diff --git a/htdocs/admin/menus/index.php b/htdocs/admin/menus/index.php index d18f205f4de..8e7238131bb 100644 --- a/htdocs/admin/menus/index.php +++ b/htdocs/admin/menus/index.php @@ -75,7 +75,7 @@ if ($action == 'up') { // Get current position $sql = "SELECT m.rowid, m.position, m.type, m.fk_menu"; $sql .= " FROM ".MAIN_DB_PREFIX."menu as m"; - $sql .= " WHERE m.rowid = ".GETPOST("menuId", "int"); + $sql .= " WHERE m.rowid = ".GETPOSTINT("menuId"); dol_syslog("admin/menus/index.php ".$sql); $result = $db->query($sql); $num = $db->num_rows($result); @@ -92,7 +92,7 @@ if ($action == 'up') { // Menu before $sql = "SELECT m.rowid, m.position"; $sql .= " FROM ".MAIN_DB_PREFIX."menu as m"; - $sql .= " WHERE (m.position < ".($current['order'])." OR (m.position = ".($current['order'])." AND rowid < ".GETPOST("menuId", "int")."))"; + $sql .= " WHERE (m.position < ".($current['order'])." OR (m.position = ".($current['order'])." AND rowid < ".GETPOSTINT("menuId")."))"; $sql .= " AND m.menu_handler='".$db->escape($menu_handler_to_search)."'"; $sql .= " AND m.entity = ".$conf->entity; $sql .= " AND m.type = '".$db->escape($current['type'])."'"; @@ -126,7 +126,7 @@ if ($action == 'up') { // Get current position $sql = "SELECT m.rowid, m.position, m.type, m.fk_menu"; $sql .= " FROM ".MAIN_DB_PREFIX."menu as m"; - $sql .= " WHERE m.rowid = ".GETPOST("menuId", "int"); + $sql .= " WHERE m.rowid = ".GETPOSTINT("menuId"); dol_syslog("admin/menus/index.php ".$sql); $result = $db->query($sql); $num = $db->num_rows($result); @@ -143,7 +143,7 @@ if ($action == 'up') { // Menu after $sql = "SELECT m.rowid, m.position"; $sql .= " FROM ".MAIN_DB_PREFIX."menu as m"; - $sql .= " WHERE (m.position > ".($current['order'])." OR (m.position = ".($current['order'])." AND rowid > ".GETPOST("menuId", "int")."))"; + $sql .= " WHERE (m.position > ".($current['order'])." OR (m.position = ".($current['order'])." AND rowid > ".GETPOSTINT("menuId")."))"; $sql .= " AND m.menu_handler='".$db->escape($menu_handler_to_search)."'"; $sql .= " AND m.entity = ".$conf->entity; $sql .= " AND m.type = '".$db->escape($current['type'])."'"; @@ -174,7 +174,7 @@ if ($action == 'up') { $db->begin(); $sql = "DELETE FROM ".MAIN_DB_PREFIX."menu"; - $sql .= " WHERE rowid = ".GETPOST('menuId', 'int'); + $sql .= " WHERE rowid = ".GETPOSTINT('menuId'); $resql = $db->query($sql); if ($resql) { $db->commit(); @@ -231,11 +231,11 @@ print "
\n"; if ($action == 'delete') { $sql = "SELECT m.titre as title"; $sql .= " FROM ".MAIN_DB_PREFIX."menu as m"; - $sql .= " WHERE m.rowid = ".GETPOST('menuId', 'int'); + $sql .= " WHERE m.rowid = ".GETPOSTINT('menuId'); $result = $db->query($sql); $obj = $db->fetch_object($result); - print $form->formconfirm("index.php?menu_handler=".$menu_handler."&menuId=".GETPOST('menuId', 'int'), $langs->trans("DeleteMenu"), $langs->trans("ConfirmDeleteMenu", $obj->title), "confirm_delete"); + print $form->formconfirm("index.php?menu_handler=".$menu_handler."&menuId=".GETPOSTINT('menuId'), $langs->trans("DeleteMenu"), $langs->trans("ConfirmDeleteMenu", $obj->title), "confirm_delete"); } $newcardbutton = ''; @@ -274,7 +274,8 @@ i.e.: data[]= array (index, parent index, string ) // First the root item of the tree must be declared: -$data[] = array('rowid'=>0, 'fk_menu'=>-1, 'title'=>"racine", 'mainmenu'=>'', 'leftmenu'=>'', 'fk_mainmenu'=>'', 'fk_leftmenu'=>''); +$data = array(); +$data[] = array('rowid' => 0, 'fk_menu' => -1, 'title' => "racine", 'mainmenu' => '', 'leftmenu' => '', 'fk_mainmenu' => '', 'fk_leftmenu' => ''); // Then all child items must be declared @@ -314,17 +315,17 @@ if ($res) { $buttons .= ''.img_picto("Up", "1uparrow").''.img_picto("Down", "1downarrow").''; $data[] = array( - 'rowid'=>$menu['rowid'], - 'module'=>$menu['module'], - 'fk_menu'=>$menu['fk_menu'], - 'title'=>$titre, - 'mainmenu'=>$menu['mainmenu'], - 'leftmenu'=>$menu['leftmenu'], - 'fk_mainmenu'=>$menu['fk_mainmenu'], - 'fk_leftmenu'=>$menu['fk_leftmenu'], - 'position'=>$menu['position'], - 'entry'=>$entry, - 'buttons'=>$buttons + 'rowid' => $menu['rowid'], + 'module' => $menu['module'], + 'fk_menu' => $menu['fk_menu'], + 'title' => $titre, + 'mainmenu' => $menu['mainmenu'], + 'leftmenu' => $menu['leftmenu'], + 'fk_mainmenu' => $menu['fk_mainmenu'], + 'fk_leftmenu' => $menu['fk_leftmenu'], + 'position' => $menu['position'], + 'entry' => $entry, + 'buttons' => $buttons ); $i++; } @@ -378,7 +379,7 @@ if (count($remainingdata)) { print ''; print ''; diff --git a/htdocs/admin/prelevement.php b/htdocs/admin/prelevement.php index 8e25b9295b9..f1add49e837 100644 --- a/htdocs/admin/prelevement.php +++ b/htdocs/admin/prelevement.php @@ -52,7 +52,7 @@ $error = 0; if ($action == "set") { $db->begin(); - $id = GETPOST('PRELEVEMENT_ID_BANKACCOUNT', 'int'); + $id = GETPOSTINT('PRELEVEMENT_ID_BANKACCOUNT'); $account = new Account($db); if ($account->fetch($id) > 0) { $res = dolibarr_set_const($db, "PRELEVEMENT_ID_BANKACCOUNT", $id, 'chaine', 0, '', $conf->entity); @@ -118,7 +118,7 @@ if ($action == "set") { if ($action == "addnotif") { $bon = new BonPrelevement($db); - $bon->addNotification($db, GETPOST('user', 'int'), $action); + $bon->addNotification($db, GETPOSTINT('user'), $action); header("Location: ".$_SERVER["PHP_SELF"]); exit; @@ -126,7 +126,7 @@ if ($action == "addnotif") { if ($action == "deletenotif") { $bon = new BonPrelevement($db); - $bon->deleteNotificationById(GETPOST('notif', 'int')); + $bon->deleteNotificationById(GETPOSTINT('notif')); header("Location: ".$_SERVER["PHP_SELF"]); exit; diff --git a/htdocs/admin/propal.php b/htdocs/admin/propal.php index 0f6d91f26eb..401db58d473 100644 --- a/htdocs/admin/propal.php +++ b/htdocs/admin/propal.php @@ -7,6 +7,7 @@ * Copyright (C) 2005-2012 Regis Houssin * Copyright (C) 2008 Raphael Bertrand (Resultic) * Copyright (C) 2011-2013 Juanjo Menent + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -82,18 +83,16 @@ if ($action == 'updateMask') { // Search template files $file = ''; $classname = ''; - $filefound = 0; $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']); foreach ($dirmodels as $reldir) { $file = dol_buildpath($reldir."core/modules/propale/doc/pdf_".$modele.".modules.php"); if (file_exists($file)) { - $filefound = 1; $classname = "pdf_".$modele; break; } } - if ($filefound) { + if ($classname !== '') { require_once $file; $module = new $classname($db); @@ -390,6 +389,7 @@ foreach ($dirmodels as $reldir) { if (is_dir($dir)) { $handle = opendir($dir); if (is_resource($handle)) { + $filelist = array(); while (($file = readdir($handle)) !== false) { $filelist[] = $file; } @@ -507,7 +507,7 @@ print ''; print ''; @@ -516,8 +516,8 @@ print "\n"; print ''; print ""; print ""; print ''; print ""; print "'; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print '\n"; print "\n"; // Option to force stock to be enough before adding a line into document -if (isModEnabled('facture')) { +if (isModEnabled('invoice')) { print ''; print ''; print '\n"; } -if (isModEnabled('commande')) { +if (isModEnabled('order')) { print ''; print ''; print '\n"; } -if (isModEnabled("expedition")) { +if (isModEnabled("shipping")) { print ''; print ''; print '\n"; print ''; -if (isModEnabled('banque')) { +if (isModEnabled('bank')) { print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; print ''; diff --git a/htdocs/admin/system/database.php b/htdocs/admin/system/database.php index cdce65af5b5..01e1c5f28b6 100644 --- a/htdocs/admin/system/database.php +++ b/htdocs/admin/system/database.php @@ -3,6 +3,7 @@ * Copyright (C) 2004-2014 Laurent Destailleur * Copyright (C) 2004 Sebastien Di Cintio * Copyright (C) 2004 Benoit Mortier + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -53,6 +54,7 @@ print ''."\n"; print ''."\n"; print ''."\n"; +// @phan-suppress-next-line PhanTypeSuspiciousStringExpression (user is defined in the stdClass) print ''."\n"; print ''."\n"; print ''."\n"; @@ -89,8 +91,8 @@ if (!count($listofvars) && !count($listofstatus)) { $arraytest = array(); if (preg_match('/mysql/i', $db->type)) { $arraytest = array( - 'character_set_database'=>array('var'=>'dolibarr_main_db_character_set', 'valifempty'=>'utf8'), - 'collation_database'=>array('var'=>'dolibarr_main_db_collation', 'valifempty'=>'utf8_unicode_ci') + 'character_set_database' => array('var' => 'dolibarr_main_db_character_set', 'valifempty' => 'utf8'), + 'collation_database' => array('var' => 'dolibarr_main_db_collation', 'valifempty' => 'utf8_unicode_ci') ); } @@ -123,9 +125,11 @@ if (!count($listofvars) && !count($listofstatus)) { print $paramval; } if ($show == 1) { + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition print $form->textwithpicto($paramval, $text); } if ($show == 2) { + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition print $form->textwithpicto($paramval, $text, 1, 'warning'); } print ''; diff --git a/htdocs/admin/system/dbtable.php b/htdocs/admin/system/dbtable.php index c7e7c5baa5e..2cec477994f 100644 --- a/htdocs/admin/system/dbtable.php +++ b/htdocs/admin/system/dbtable.php @@ -33,7 +33,57 @@ if (!$user->admin) { accessforbidden(); } -$table = GETPOST('table', 'alpha'); +$table = GETPOST('table', 'aZ09'); +$field = GETPOST('field', 'aZ09'); +$action = GETPOST('action', 'aZ09'); + + +/* + * Actions + */ + +if ($action == 'convertutf8') { + $sql = "SHOW FULL COLUMNS IN ".$db->sanitize($table); + + $resql = $db->query($sql); + if ($resql) { + $num = $db->num_rows($resql); + $i = 0; + while ($i < $num) { + $row = $db->fetch_row($resql); + if ($row[0] == $field) { + $sql = "ALTER TABLE ".$db->sanitize($table)." MODIFY ".$db->sanitize($row[0])." ".$row[1]." CHARACTER SET utf8"; // We must not sanitize the $row[1] + $db->query($sql); + + $sql = "ALTER TABLE ".$db->sanitize($table)." MODIFY ".$db->sanitize($row[0])." ".$row[1]." COLLATE utf8_unicode_ci"; // We must not sanitize the $row[1] + $db->query($sql); + + break; + } + } + } +} +if ($action == 'convertutf8mb4') { + $sql = "SHOW FULL COLUMNS IN ".$db->sanitize($table); + + $resql = $db->query($sql); + if ($resql) { + $num = $db->num_rows($resql); + $i = 0; + while ($i < $num) { + $row = $db->fetch_row($resql); + if ($row[0] == $field) { + $sql = "ALTER TABLE ".$db->sanitize($table)." MODIFY ".$db->sanitize($row[0])." ".$row[1]." CHARACTER SET utf8mb4"; // We must not sanitize the $row[1] + $db->query($sql); + + $sql = "ALTER TABLE ".$db->sanitize($table)." MODIFY ".$db->sanitize($row[0])." ".$row[1]." COLLATE utf8mb4_unicode_ci"; // We must not sanitize the $row[1] + $db->query($sql); + + break; + } + } + } +} /* @@ -48,7 +98,7 @@ print load_fiche_titre($langs->trans("Table")." ".$table, '', 'title_setup'); // Define request to get table description $base = 0; if (preg_match('/mysql/i', $conf->db->type)) { - $sql = "SHOW TABLE STATUS LIKE '".$db->escape($table)."'"; + $sql = "SHOW TABLE STATUS LIKE '".$db->escape($db->escapeforlike($table))."'"; $base = 1; } elseif ($conf->db->type == 'pgsql') { $sql = "SELECT conname,contype FROM pg_constraint"; @@ -99,7 +149,7 @@ if (!$base) { print ''; // $sql = "DESCRIBE ".$table; - $sql = "SHOW FULL COLUMNS IN ".$db->escape($table); + $sql = "SHOW FULL COLUMNS IN ".$db->sanitize($table); $resql = $db->query($sql); if ($resql) { @@ -109,12 +159,46 @@ if (!$base) { $row = $db->fetch_row($resql); print ''; + // field print ""; + // type - print ""; + print ""; + // collation - print ""; + print ""; + // null print ""; // key diff --git a/htdocs/admin/system/dolibarr.php b/htdocs/admin/system/dolibarr.php index 20c00764b53..a285ad3554c 100644 --- a/htdocs/admin/system/dolibarr.php +++ b/htdocs/admin/system/dolibarr.php @@ -55,6 +55,7 @@ if ($action == 'getlastversion') { if (LIBXML_VERSION < 20900) { // Avoid load of external entities (security problem). // Required only if LIBXML_VERSION < 20900 + // @phan-suppress-next-line PhanDeprecatedFunctionInternal libxml_disable_entity_loader(true); } diff --git a/htdocs/admin/system/filecheck.php b/htdocs/admin/system/filecheck.php index 320f032fb19..f54720e03df 100644 --- a/htdocs/admin/system/filecheck.php +++ b/htdocs/admin/system/filecheck.php @@ -4,6 +4,7 @@ * Copyright (C) 2007-2012 Regis Houssin * Copyright (C) 2015-2019 Frederic France * Copyright (C) 2017 Nicolas ZABOURI + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -83,7 +84,7 @@ $xmlshortfile = dol_sanitizeFileName(GETPOST('xmlshortfile', 'alpha') ? GETPOST( $xmlfile = DOL_DOCUMENT_ROOT.'/install/'.$xmlshortfile; if (!preg_match('/\.zip$/i', $xmlfile) && dol_is_file($xmlfile.'.zip')) { - $xmlfile = $xmlfile.'.zip'; + $xmlfile .= '.zip'; } // Remote file to compare to @@ -179,10 +180,11 @@ if (GETPOST('target') == 'remote') { if (LIBXML_VERSION < 20900) { // Avoid load of external entities (security problem). // Required only if LIBXML_VERSION < 20900 + // @phan-suppress-next-line PhanDeprecatedFunctionInternal libxml_disable_entity_loader(true); } - $xml = simplexml_load_string($xmlfile, 'SimpleXMLElement', LIBXML_NOCDATA|LIBXML_NONET); + $xml = simplexml_load_string($xmlfile, 'SimpleXMLElement', LIBXML_NOCDATA | LIBXML_NONET); } else { $errormsg = $langs->trans('XmlNotFound').': '.$xmlremote.' - '.$xmlarray['http_code'].(($xmlarray['http_code'] == 400 && $xmlarray['content']) ? ' '.$xmlarray['content'] : '').' '.$xmlarray['curl_error_no'].' '.$xmlarray['curl_error_msg']; setEventMessages($errormsg, null, 'errors'); @@ -258,7 +260,7 @@ if (empty($error) && !empty($xml)) { $tmprelativefilename = preg_replace('/^'.preg_quote(DOL_DOCUMENT_ROOT, '/').'/', '', $valfile['fullname']); if (!in_array($tmprelativefilename, $file_list['insignature'])) { $md5newfile = @md5_file($valfile['fullname']); // Can fails if we don't have permission to open/read file - $file_list['added'][] = array('filename'=>$tmprelativefilename, 'md5'=>$md5newfile); + $file_list['added'][] = array('filename' => $tmprelativefilename, 'md5' => $md5newfile); } } diff --git a/htdocs/admin/system/modules.php b/htdocs/admin/system/modules.php index 4cd42fe0243..349a0ead610 100644 --- a/htdocs/admin/system/modules.php +++ b/htdocs/admin/system/modules.php @@ -2,6 +2,7 @@ /* Copyright (C) 2005-2009 Laurent Destailleur * Copyright (C) 2007 Rodolphe Quiedeville * Copyright (C) 2010-2012 Regis Houssin + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -58,16 +59,16 @@ $object = new stdClass(); // Definition of fields for lists $arrayfields = array( - 'name'=>array('label'=>$langs->trans("Modules"), 'checked'=>1, 'position'=>10), - 'version'=>array('label'=>$langs->trans("Version"), 'checked'=>1, 'position'=>20), - 'id'=>array('label'=>$langs->trans("IdModule"), 'checked'=>1, 'position'=>30), - 'module_position'=>array('label'=>$langs->trans("Position"), 'checked'=>1, 'position'=>35), - 'permission'=>array('label'=>$langs->trans("IdPermissions"), 'checked'=>1, 'position'=>40) + 'name' => array('label' => $langs->trans("Modules"), 'checked' => 1, 'position' => 10), + 'version' => array('label' => $langs->trans("Version"), 'checked' => 1, 'position' => 20), + 'id' => array('label' => $langs->trans("IdModule"), 'checked' => 1, 'position' => 30), + 'module_position' => array('label' => $langs->trans("Position"), 'checked' => 1, 'position' => 35), + 'permission' => array('label' => $langs->trans("IdPermissions"), 'checked' => 1, 'position' => 40) ); $arrayfields = dol_sort_array($arrayfields, 'position'); $param = ''; - +$info_admin = ''; /* * Actions @@ -120,7 +121,7 @@ foreach ($modulesdir as $dir) { dol_syslog("Failed to load ".$dir.$file." ".$e->getMessage(), LOG_ERR); } } else { - print "Warning bad descriptor file : ".$dir.$file." (Class ".$modName." not found into file)
"; + $info_admin .= info_admin("Warning bad descriptor file : ".$dir.$file." (Class ".$modName." not found into file)", 0, 0, '1', 'warning'); } } } @@ -143,6 +144,7 @@ foreach ($modules as $key => $module) { if (!empty($module->picto)) { if (preg_match('/^\//', $module->picto)) { + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition $newModule->picto = img_picto($alt, $module->picto, 'width="14px"', 1); } else { $newModule->picto = img_object($alt, $module->picto, 'width="14px"'); @@ -157,7 +159,7 @@ foreach ($modules as $key => $module) { if (empty($rights[0])) { continue; } - $arrayofpermissions[$rights[0]] = array('label'=> 'user->hasRight(\''.$module->rights_class.'\', \''.$rights[4].'\''.(empty($rights[5]) ? '' : ', \''.$rights[5].'\'').')'); + $arrayofpermissions[$rights[0]] = array('label' => 'user->hasRight(\''.$module->rights_class.'\', \''.$rights[4].'\''.(empty($rights[5]) ? '' : ', \''.$rights[5].'\'').')'); $permission[] = $rights[0]; array_push($rights_ids, $rights[0]); @@ -202,7 +204,7 @@ foreach ($modules as $key => $module) { */ llxHeader(); - +print $info_admin; print '
'; if ($optioncss != '') { print ''; @@ -224,7 +226,7 @@ $mode = ''; $arrayofmassactions = array(); $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; -$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')) : ''); // This also change content of $arrayfields +$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) : ''); // This also change content of $arrayfields $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); $moreforfilter = ''; @@ -296,7 +298,7 @@ if ($arrayfields['module_position']['checked']) { } // Fields from hook -$parameters = array('arrayfields'=>$arrayfields, 'param'=>$param, 'sortfield'=>$sortfield, 'sortorder'=>$sortorder); +$parameters = array('arrayfields' => $arrayfields, 'param' => $param, 'sortfield' => $sortfield, 'sortorder' => $sortorder); $reshook = $hookmanager->executeHooks('printFieldListOption', $parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; // Action column @@ -307,21 +309,37 @@ print '
'; // sort list if ($sortfield == "name" && $sortorder == "asc") { - usort($moduleList, function (stdClass $a, stdClass $b) { - return strcasecmp($a->name, $b->name); - }); + usort( + $moduleList, + /** @return int */ + function (stdClass $a, stdClass $b) { + return strcasecmp($a->name, $b->name); + } + ); } elseif ($sortfield == "name" && $sortorder == "desc") { - usort($moduleList, function (stdClass $a, stdClass $b) { - return strcasecmp($b->name, $a->name); - }); + usort( + $moduleList, + /** @return int */ + static function (stdClass $a, stdClass $b) { + return strcasecmp($b->name, $a->name); + } + ); } elseif ($sortfield == "version" && $sortorder == "asc") { - usort($moduleList, function (stdClass $a, stdClass $b) { - return strcasecmp($a->version, $b->version); - }); + usort( + $moduleList, + /** @return int */ + static function (stdClass $a, stdClass $b) { + return strcasecmp($a->version, $b->version); + } + ); } elseif ($sortfield == "version" && $sortorder == "desc") { - usort($moduleList, function (stdClass $a, stdClass $b) { - return strcasecmp($b->version, $a->version); - }); + usort( + $moduleList, + /** @return int */ + static function (stdClass $a, stdClass $b) { + return strcasecmp($b->version, $a->version); + } + ); } elseif ($sortfield == "id" && $sortorder == "asc") { usort($moduleList, "compareIdAsc"); } elseif ($sortfield == "id" && $sortorder == "desc") { @@ -408,13 +426,13 @@ llxFooter(); $db->close(); - /** - * Compare two modules by their ID for a ascending order - * - * @param stdClass $a First module - * @param stdClass $b Second module - * @return int Compare result (-1, 0, 1) - */ +/** + * Compare two modules by their ID for a ascending order + * + * @param stdClass $a First module + * @param stdClass $b Second module + * @return int Compare result (-1, 0, 1) + */ function compareIdAsc(stdClass $a, stdClass $b) { if ((int) $a->id == (int) $b->id) { @@ -424,13 +442,13 @@ function compareIdAsc(stdClass $a, stdClass $b) return ((int) $a->id < (int) $b->id) ? -1 : 1; } - /** - * Compare two modules by their ID for a descending order - * - * @param stdClass $a First module - * @param stdClass $b Second module - * @return int Compare result (-1, 0, 1) - */ +/** + * Compare two modules by their ID for a descending order + * + * @param stdClass $a First module + * @param stdClass $b Second module + * @return int Compare result (-1, 0, 1) + */ function compareIdDesc(stdClass $a, stdClass $b) { if ((int) $a->id == (int) $b->id) { @@ -440,13 +458,13 @@ function compareIdDesc(stdClass $a, stdClass $b) return ((int) $b->id < (int) $a->id) ? -1 : 1; } - /** - * Compare two modules by their ID for a ascending order - * - * @param stdClass $a First module - * @param stdClass $b Second module - * @return int Compare result (-1, 0, 1) - */ +/** + * Compare two modules by their ID for a ascending order + * + * @param stdClass $a First module + * @param stdClass $b Second module + * @return int Compare result (-1, 0, 1) + */ function comparePermissionIdsAsc(stdClass $a, stdClass $b) { if (empty($a->permission) && empty($b->permission)) { @@ -467,13 +485,13 @@ function comparePermissionIdsAsc(stdClass $a, stdClass $b) return $a->permission[0] < $b->permission[0] ? -1 : 1; } - /** - * Compare two modules by their permissions for a descending order - * - * @param stdClass $a First module - * @param stdClass $b Second module - * @return int Compare result (-1, 0, 1) - */ +/** + * Compare two modules by their permissions for a descending order + * + * @param stdClass $a First module + * @param stdClass $b Second module + * @return int Compare result (-1, 0, 1) + */ function comparePermissionIdsDesc(stdClass $a, stdClass $b) { if (empty($a->permission) && empty($b->permission)) { diff --git a/htdocs/admin/system/phpinfo.php b/htdocs/admin/system/phpinfo.php index 36c64a826a6..3c410fbe0d4 100644 --- a/htdocs/admin/system/phpinfo.php +++ b/htdocs/admin/system/phpinfo.php @@ -4,6 +4,7 @@ * Copyright (C) 2005-2012 Regis Houssin * Copyright (C) 2016 Juanjo Menent * Copyright (C) 2020 Tobias Sekan + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -53,36 +54,36 @@ if (isset($title)) { $maxphp = @ini_get('upload_max_filesize'); // In unknown if (preg_match('/k$/i', $maxphp)) { $maxphp = preg_replace('/k$/i', '', $maxphp); - $maxphp = $maxphp * 1; + $maxphp *= 1; } if (preg_match('/m$/i', $maxphp)) { $maxphp = preg_replace('/m$/i', '', $maxphp); - $maxphp = $maxphp * 1024; + $maxphp *= 1024; } if (preg_match('/g$/i', $maxphp)) { $maxphp = preg_replace('/g$/i', '', $maxphp); - $maxphp = $maxphp * 1024 * 1024; + $maxphp *= 1024 * 1024; } if (preg_match('/t$/i', $maxphp)) { $maxphp = preg_replace('/t$/i', '', $maxphp); - $maxphp = $maxphp * 1024 * 1024 * 1024; + $maxphp *= 1024 * 1024 * 1024; } $maxphp2 = @ini_get('post_max_size'); // In unknown if (preg_match('/k$/i', $maxphp2)) { $maxphp2 = preg_replace('/k$/i', '', $maxphp2); - $maxphp2 = $maxphp2 * 1; + $maxphp2 *= 1; } if (preg_match('/m$/i', $maxphp2)) { $maxphp2 = preg_replace('/m$/i', '', $maxphp2); - $maxphp2 = $maxphp2 * 1024; + $maxphp2 *= 1024; } if (preg_match('/g$/i', $maxphp2)) { $maxphp2 = preg_replace('/g$/i', '', $maxphp2); - $maxphp2 = $maxphp2 * 1024 * 1024; + $maxphp2 *= 1024 * 1024; } if (preg_match('/t$/i', $maxphp2)) { $maxphp2 = preg_replace('/t$/i', '', $maxphp2); - $maxphp2 = $maxphp2 * 1024 * 1024 * 1024; + $maxphp2 *= 1024 * 1024 * 1024; } if ($maxphp > 0 && $maxphp2 > 0 && $maxphp > $maxphp2) { $langs->load("errors"); diff --git a/htdocs/admin/system/security.php b/htdocs/admin/system/security.php index ce0670cdf08..0d98c3161e7 100644 --- a/htdocs/admin/system/security.php +++ b/htdocs/admin/system/security.php @@ -272,7 +272,7 @@ print '
'; if (file_exists($installlock)) { // If install not locked, no need to show this. if (file_exists($upgradeunlock)) { print ''.$langs->trans("DolibarrUpgrade").': '; - print img_warning().' '.$langs->trans("UpgradeHasBeenUnlocked", $upgradeunlock); + print img_warning().' '.$langs->trans("WarningUpgradeHasBeenUnlocked", $upgradeunlock); print '
'; } } @@ -341,12 +341,13 @@ if (!getDolGlobalString('SECURITY_DISABLE_TEST_ON_OBFUSCATED_CONF')) { } print '$dolibarr_main_stream_to_disable: '; +// $arrayofstreamtodisable is defined into filefunc.inc.php if (empty($dolibarr_main_stream_to_disable)) { print ''.$langs->trans("Undefined").' = '.implode(', ', $arrayofstreamtodisable).''; } else { print implode(', ', $dolibarr_main_stream_to_disable); } -print ' -> PHP streams allowed = '; +print ' -> Current PHP streams allowed = '; $arrayofstreams = stream_get_wrappers(); if (!empty($arrayofstreams)) { sort($arrayofstreams); @@ -753,10 +754,10 @@ print 'WEBSITE_MAIN_SECURITY_FORCECSP = '.getDolGlobalString('W print '   ('.$langs->trans("Example").": \"frame-ancestors 'self'; default-src 'self' 'unsafe-inline'; style-src https://cdnjs.cloudflare.com *.googleapis.com; script-src *.transifex.com *.google-analytics.com *.googletagmanager.com; object-src https://youtube.com; frame-src https://youtube.com; img-src * data:;\")
"; print '
'; -print 'WEBSITE_MAIN_SECURITY_FORCERP = '.getDolGlobalString('WEBSITE_MAIN_SECURITY_FORCERP', ''.$langs->trans("Undefined").'').'   ('.$langs->trans("Recommended").': '.$langs->trans("Undefined").' '.$langs->trans("or")." \"strict-origin-when-cross-origin\")
"; +print 'WEBSITE_MAIN_SECURITY_FORCERP = '.getDolGlobalString('WEBSITE_MAIN_SECURITY_FORCERP', ''.$langs->trans("Undefined").'').'   ('.$langs->trans("Recommended").': '.$langs->trans("Undefined")."=\"strict-origin\" ".$langs->trans("or")." \"strict-origin-when-cross-origin\")
"; print '
'; -print 'WEBSITE_MAIN_SECURITY_FORCESTS = '.getDolGlobalString('>WEBSITE_MAIN_SECURITY_FORCESTS', ''.$langs->trans("Undefined").'').'   ('.$langs->trans("Example").": \"max-age=31536000; includeSubDomains\")
"; +print 'WEBSITE_MAIN_SECURITY_FORCESTS = '.getDolGlobalString('WEBSITE_MAIN_SECURITY_FORCESTS', ''.$langs->trans("Undefined").'').'   ('.$langs->trans("Example").": \"max-age=31536000; includeSubDomains\")
"; print '
'; print 'WEBSITE_MAIN_SECURITY_FORCEPP = '.getDolGlobalString('WEBSITE_MAIN_SECURITY_FORCEPP', ''.$langs->trans("Undefined").'').'   ('.$langs->trans("Example").": \"camera: (); microphone: ();\")
"; diff --git a/htdocs/admin/system/xdebug.php b/htdocs/admin/system/xdebug.php index 719b81859c3..9e0b05a24a3 100644 --- a/htdocs/admin/system/xdebug.php +++ b/htdocs/admin/system/xdebug.php @@ -1,5 +1,6 @@ + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -90,7 +91,12 @@ if (function_exists('socket_create')) { //$client = socket_accept($sock); $client = socket_connect($socket, $address, $port); if ($client) { - print "Connection established: ".$client." - address=".$address." port=".$port."
\n"; + if (is_bool($client)) { + $client_str = 'true'; + } else { + $client_str = (string) $client; + } + print "Connection established: ".$client_str." - address=".$address." port=".$port."
\n"; print "There is a Remote debug server at this address.
\n"; print "
\n"; print "To be sure this debugger accepts input from your PHP server and xdebug, be sure to have\n"; diff --git a/htdocs/admin/taxes.php b/htdocs/admin/taxes.php index f917784870e..fc745fb998c 100644 --- a/htdocs/admin/taxes.php +++ b/htdocs/admin/taxes.php @@ -71,7 +71,7 @@ if ($action == 'update') { $error = 0; // Tax mode - $tax_mode = GETPOST('tax_mode', 'int'); + $tax_mode = GETPOSTINT('tax_mode'); $db->begin(); @@ -122,7 +122,7 @@ if ($action == 'update') { dolibarr_set_const($db, "MAIN_INFO_VAT_RETURN", GETPOST("MAIN_INFO_VAT_RETURN", 'alpha'), 'chaine', 0, '', $conf->entity); - dolibarr_set_const($db, "MAIN_INFO_TVA_DAY_DEADLINE_SUBMISSION", GETPOST("deadline_day_vat", 'int'), 'chaine', 0, '', $conf->entity); + dolibarr_set_const($db, "MAIN_INFO_TVA_DAY_DEADLINE_SUBMISSION", GETPOSTINT("deadline_day_vat"), 'chaine', 0, '', $conf->entity); if (!$error) { $db->commit(); diff --git a/htdocs/admin/ticket.php b/htdocs/admin/ticket.php index 6ca24301575..60cc1ce67b5 100644 --- a/htdocs/admin/ticket.php +++ b/htdocs/admin/ticket.php @@ -86,7 +86,7 @@ if ($action == 'updateMask') { } } elseif (preg_match('/set_(.*)/', $action, $reg)) { $code = $reg[1]; - $value = GETPOSTISSET($code) ? GETPOST($code, 'int') : 1; + $value = GETPOSTISSET($code) ? GETPOSTINT($code) : 1; if ($code == 'TICKET_NOTIFICATION_ALSO_MAIN_ADDRESS' && getDolGlobalInt('MAIN_FEATURES_LEVEL') >= 2) { $param_notification_also_main_addressemail = GETPOST('TICKET_NOTIFICATION_ALSO_MAIN_ADDRESS', 'alpha'); $res = dolibarr_set_const($db, 'TICKET_NOTIFICATION_ALSO_MAIN_ADDRESS', $param_notification_also_main_addressemail, 'chaine', 0, '', $conf->entity); @@ -152,20 +152,20 @@ if ($action == 'updateMask') { } if (GETPOSTISSET('product_category_id')) { - $param_ticket_product_category = GETPOST('product_category_id', 'int'); + $param_ticket_product_category = GETPOSTINT('product_category_id'); $res = dolibarr_set_const($db, 'TICKET_PRODUCT_CATEGORY', $param_ticket_product_category, 'chaine', 0, '', $conf->entity); if (!($res > 0)) { $error++; } } - $param_delay_first_response = GETPOST('delay_first_response', 'int'); + $param_delay_first_response = GETPOSTINT('delay_first_response'); $res = dolibarr_set_const($db, 'TICKET_DELAY_BEFORE_FIRST_RESPONSE', $param_delay_first_response, 'chaine', 0, '', $conf->entity); if (!($res > 0)) { $error++; } - $param_delay_between_responses = GETPOST('delay_between_responses', 'int'); + $param_delay_between_responses = GETPOSTINT('delay_between_responses'); $res = dolibarr_set_const($db, 'TICKET_DELAY_SINCE_LAST_RESPONSE', $param_delay_between_responses, 'chaine', 0, '', $conf->entity); if (!($res > 0)) { $error++; @@ -408,6 +408,7 @@ foreach ($dirmodels as $reldir) { if (is_dir($dir)) { $handle = opendir($dir); if (is_resource($handle)) { + $filelist = array(); while (($file = readdir($handle)) !== false) { $filelist[] = $file; } diff --git a/htdocs/admin/ticket_public.php b/htdocs/admin/ticket_public.php index e58b0599b76..942ff6662c0 100644 --- a/htdocs/admin/ticket_public.php +++ b/htdocs/admin/ticket_public.php @@ -163,7 +163,7 @@ if ($action == 'setTICKET_ENABLE_PUBLIC_INTERFACE') { } } elseif (preg_match('/set_(.*)/', $action, $reg)) { $code = $reg[1]; - $value = GETPOSTISSET($code) ? GETPOST($code, 'int') : 1; + $value = GETPOSTISSET($code) ? GETPOSTINT($code) : 1; if ($code == 'TICKET_NOTIFICATION_ALSO_MAIN_ADDRESS' && getDolGlobalInt('MAIN_FEATURES_LEVEL') >= 2) { $param_notification_also_main_addressemail = GETPOST('TICKET_NOTIFICATION_ALSO_MAIN_ADDRESS', 'alpha'); $res = dolibarr_set_const($db, 'TICKET_NOTIFICATION_ALSO_MAIN_ADDRESS', $param_notification_also_main_addressemail, 'chaine', 0, '', $conf->entity); diff --git a/htdocs/admin/tools/dolibarr_export.php b/htdocs/admin/tools/dolibarr_export.php index 48781cd43e2..b44581098bc 100644 --- a/htdocs/admin/tools/dolibarr_export.php +++ b/htdocs/admin/tools/dolibarr_export.php @@ -34,7 +34,7 @@ $action = GETPOST('action', 'aZ09'); $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (!$sortorder) { $sortorder = "DESC"; } @@ -44,7 +44,7 @@ if (!$sortfield) { if (empty($page) || $page == -1) { $page = 0; } -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $offset = $limit * $page; if (!$user->admin) { @@ -191,7 +191,7 @@ if (in_array($type, array('mysql', 'mysqli'))) { print ''; print ''; } else { - print 'No method available with database '.$label; + print 'No method available with database '.dol_escape_htmltag($label); } print ''; print ''; diff --git a/htdocs/admin/tools/export.php b/htdocs/admin/tools/export.php index e01aa09e96b..860cef0e9cd 100644 --- a/htdocs/admin/tools/export.php +++ b/htdocs/admin/tools/export.php @@ -38,10 +38,10 @@ $export_type = GETPOST('export_type', 'alpha'); $file = dol_sanitizeFileName(GETPOST('filename_template', 'alpha')); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha') || (empty($toselect) && $massaction === '0')) { $page = 0; } // If $page is not defined, or '' or -1 or if we click on clear filters or if we select empty mass action @@ -68,7 +68,7 @@ $utils = new Utils($db); if ($file && !$what) { //print DOL_URL_ROOT.'/dolibarr_export.php'; - header("Location: ".DOL_URL_ROOT.'/admin/tools/dolibarr_export.php?msg='.urlencode($langs->trans("ErrorFieldRequired", $langs->transnoentities("ExportMethod"))).(GETPOST('page_y', 'int') ? '&page_y='.GETPOST('page_y', 'int') : '')); + header("Location: ".DOL_URL_ROOT.'/admin/tools/dolibarr_export.php?msg='.urlencode($langs->trans("ErrorFieldRequired", $langs->transnoentities("ExportMethod"))).(GETPOSTINT('page_y') ? '&page_y='.GETPOSTINT('page_y') : '')); exit; } @@ -222,5 +222,5 @@ top_httphead(); $db->close(); // Redirect to backup page -header("Location: dolibarr_export.php".(GETPOST('page_y', 'int') ? '?page_y='.GETPOST('page_y', 'int') : '')); +header("Location: dolibarr_export.php".(GETPOSTINT('page_y') ? '?page_y='.GETPOSTINT('page_y') : '')); exit(); diff --git a/htdocs/admin/tools/export_files.php b/htdocs/admin/tools/export_files.php index 1907e451b53..446a013df81 100644 --- a/htdocs/admin/tools/export_files.php +++ b/htdocs/admin/tools/export_files.php @@ -47,7 +47,7 @@ $file = preg_replace('/(\.zip|\.tar|\.tgz|\.gz|\.tar\.gz|\.bz2|\.zst)$/i', '', $ $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (!$sortorder) { $sortorder = "DESC"; } @@ -59,7 +59,7 @@ if ($page < 0) { } elseif (empty($page)) { $page = 0; } -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $offset = $limit * $page; if (!$user->admin) { diff --git a/htdocs/admin/tools/listevents.php b/htdocs/admin/tools/listevents.php index 669d1fefac6..902239fca39 100644 --- a/htdocs/admin/tools/listevents.php +++ b/htdocs/admin/tools/listevents.php @@ -47,10 +47,10 @@ if ($user->socid > 0) { $langs->loadLangs(array("companies", "admin", "users", "other","withdrawals")); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -64,7 +64,7 @@ if (!$sortorder) { $sortorder = "DESC"; } -$search_rowid = GETPOST("search_rowid", "int"); +$search_rowid = GETPOSTINT("search_rowid"); $search_code = GETPOST("search_code", "alpha"); $search_ip = GETPOST("search_ip", "alpha"); $search_user = GETPOST("search_user", "alpha"); @@ -76,13 +76,13 @@ $optioncss = GETPOST("optioncss", "aZ"); // Option for the css output (always '' $now = dol_now(); $nowarray = dol_getdate($now); -if (GETPOST("date_startmonth", 'int') > 0) { - $date_start = dol_mktime(0, 0, 0, GETPOST("date_startmonth", 'int'), GETPOST("date_startday", 'int'), GETPOST("date_startyear", 'int'), 'tzuserrel'); +if (GETPOSTINT("date_startmonth") > 0) { + $date_start = dol_mktime(0, 0, 0, GETPOSTINT("date_startmonth"), GETPOSTINT("date_startday"), GETPOSTINT("date_startyear"), 'tzuserrel'); } else { $date_start = ''; } -if (GETPOST("date_endmonth", 'int') > 0) { - $date_end = dol_get_last_hour(dol_mktime(23, 59, 59, GETPOST("date_endmonth", 'int'), GETPOST("date_endday", 'int'), GETPOST("date_endyear", 'int'), 'tzuserrel'), 'tzuserrel'); +if (GETPOSTINT("date_endmonth") > 0) { + $date_end = dol_get_last_hour(dol_mktime(23, 59, 59, GETPOSTINT("date_endmonth"), GETPOSTINT("date_endday"), GETPOSTINT("date_endyear"), 'tzuserrel'), 'tzuserrel'); } else { $date_end = ''; } @@ -123,10 +123,10 @@ if ($date_end !== '') { // Add prefix session $arrayfields = array( 'e.prefix_session' => array( - 'label'=>'UserAgent', - 'checked'=>(!getDolGlobalString('AUDIT_ENABLE_PREFIX_SESSION') ? 0 : 1), - 'enabled'=>(!getDolGlobalString('AUDIT_ENABLE_PREFIX_SESSION') ? 0 : 1), - 'position'=>110 + 'label' => 'UserAgent', + 'checked' => (!getDolGlobalString('AUDIT_ENABLE_PREFIX_SESSION') ? 0 : 1), + 'enabled' => (!getDolGlobalString('AUDIT_ENABLE_PREFIX_SESSION') ? 0 : 1), + 'position' => 110 ) ); @@ -278,7 +278,7 @@ if ($result) { $param .= '&optioncss='.urlencode($optioncss); } if ($search_rowid) { - $param .= '&search_rowid='.urlencode($search_rowid); + $param .= '&search_rowid='.urlencode((string) ($search_rowid)); } if ($search_code) { $param .= '&search_code='.urlencode($search_code); @@ -325,6 +325,7 @@ if ($result) { print ''; print ''; + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder print_barre_liste($langs->trans("ListOfSecurityEvents"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $center, $num, $nbtotalofrecords, 'setup', 0, '', '', $limit); if ($action == 'purge') { diff --git a/htdocs/admin/tools/listsessions.php b/htdocs/admin/tools/listsessions.php index 1254bdeedc7..0fdf1a0e561 100644 --- a/htdocs/admin/tools/listsessions.php +++ b/htdocs/admin/tools/listsessions.php @@ -47,10 +47,10 @@ if ($user->socid > 0) { $socid = $user->socid; } -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 diff --git a/htdocs/admin/tools/update.php b/htdocs/admin/tools/update.php index d2b5ed921a8..bd0ccce9e13 100644 --- a/htdocs/admin/tools/update.php +++ b/htdocs/admin/tools/update.php @@ -66,6 +66,7 @@ if ($action == 'getlastversion') { if (LIBXML_VERSION < 20900) { // Avoid load of external entities (security problem). // Required only if LIBXML_VERSION < 20900 + // @phan-suppress-next-line PhanDeprecatedFunctionInternal libxml_disable_entity_loader(true); } diff --git a/htdocs/admin/translation.php b/htdocs/admin/translation.php index e23297cc251..fa6547f2eb0 100644 --- a/htdocs/admin/translation.php +++ b/htdocs/admin/translation.php @@ -2,6 +2,7 @@ /* Copyright (C) 2007-2020 Laurent Destailleur * Copyright (C) 2009-2017 Regis Houssin * Copyright (C) 2017 Frédéric France + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -35,7 +36,7 @@ if (!$user->admin) { accessforbidden(); } -$id = GETPOST('rowid', 'int'); +$id = GETPOSTINT('rowid'); $action = GETPOST('action', 'aZ09'); $optioncss = GETPOST('optionscss', 'aZ09'); $contextpage = GETPOST('contextpage', 'aZ09'); @@ -50,14 +51,15 @@ if ($mode == 'searchkey') { $transvalue = GETPOST('transvalue', 'restricthtml'); } - -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +// Load variable for pagination +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); -if (empty($page) || $page == -1) { +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); +if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) { + // If $page is not defined, or '' or -1 or if we click on clear filters $page = 0; -} // If $page is not defined, or '' or -1 +} $offset = $limit * $page; $pageprev = $page - 1; $pagenext = $page + 1; @@ -120,7 +122,7 @@ if ($action == 'update') { if (!$error) { $db->begin(); - $sql = "UPDATE ".MAIN_DB_PREFIX."overwrite_trans set transkey = '".$db->escape($transkey)."', transvalue = '".$db->escape($transvalue)."' WHERE rowid = ".((int) GETPOST('rowid', 'int')); + $sql = "UPDATE ".MAIN_DB_PREFIX."overwrite_trans set transkey = '".$db->escape($transkey)."', transvalue = '".$db->escape($transvalue)."' WHERE rowid = ".(GETPOSTINT('rowid')); $result = $db->query($sql); if ($result) { $db->commit(); @@ -247,7 +249,7 @@ if ($transvalue) { } -print 'entity) && !empty($debug)) ? '?debug=1' : '').'" method="POST">'; +print ''; if (isset($optioncss) && $optioncss != '') { print ''; } @@ -290,6 +292,7 @@ foreach ($modulesdir as $keydir => $tmpsearchdir) { $dir_lang_osencoded = dol_osencode($dir_lang); $filearray = dol_dir_list($dir_lang_osencoded, 'files', 0, '', '', $sortfield, (strtolower($sortorder) == 'asc' ? SORT_ASC : SORT_DESC), 1); + foreach ($filearray as $file) { $tmpfile = preg_replace('/.lang/i', '', basename($file['name'])); $moduledirname = (basename(dirname(dirname($dir_lang)))); @@ -300,7 +303,9 @@ foreach ($modulesdir as $keydir => $tmpsearchdir) { } //var_dump($i.' - '.$keydir.' - '.$dir_lang_osencoded.' -> '.$moduledirname . ' / ' . $tmpfile.' -> '.$langkey); + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition $result = $newlang->load($langkey, 0, 0, '', 0); // Load translation files + database overwrite + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition $result = $newlangfileonly->load($langkey, 0, 0, '', 1); // Load translation files only if ($result < 0) { print 'Failed to load language file '.$tmpfile.'
'."\n"; @@ -312,6 +317,7 @@ foreach ($modulesdir as $keydir => $tmpsearchdir) { } //print 'After loading lang '.$langkey.', newlang has '.count($newlang->tab_translate).' records
'."\n"; + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition $result = $langsenfileonly->load($langkey, 0, 0, '', 1); // Load translation files only } $i++; @@ -395,12 +401,12 @@ if ($mode == 'overwrite') { print '
'; - print ''."\n"; + print ''."\n"; print ''."\n"; @@ -411,11 +417,11 @@ if ($mode == 'overwrite') { print ''; print ''; */ - if ($action == 'edit' && $obj->rowid == GETPOST('rowid', 'int')) { + if ($action == 'edit' && $obj->rowid == GETPOSTINT('rowid')) { print ''; } else { //print $obj->transkey.' '.$langsenfileonly->tab_translate[$obj->transkey]; - $titleforvalue = $langs->trans("Translation").' en_US for key '.$obj->transkey.':
'.($langsenfileonly->tab_translate[$obj->transkey] ? $langsenfileonly->trans($obj->transkey) : ''.$langs->trans("None").''); + $titleforvalue = $langs->trans("Translation").' en_US for key '.$obj->transkey.':
'.(!empty($langsenfileonly->tab_translate[$obj->transkey]) ? $langsenfileonly->trans($obj->transkey) : ''.$langs->trans("None").''); /*if ($obj->lang != 'en_US') { $titleforvalue .= '
'.$langs->trans("Translation").' '.$obj->lang.' '...; }*/ @@ -426,15 +432,15 @@ if ($mode == 'overwrite') { print ''; print ''; @@ -560,7 +566,7 @@ if ($mode == 'searchkey') { if ($i <= $offset) { continue; } - if ($i > ($offset + $limit)) { + if ($limit && $i > ($offset + $limit)) { break; } print '
'.$langs->trans('Enabled').''.$langs->trans('DetailEnabled'); if (!empty($menu->enabled)) { - print ' ('.$langs->trans("ConditionIsCurrently").': '.yn(dol_eval($menu->enabled, 1, 1, '1')).')'; + print ' ('.$langs->trans("ConditionIsCurrently").': '.yn((int) dol_eval($menu->enabled, 1, 1, '1') <= 0 ? 0 : 1).')'; } print '
'.$langs->trans('Rights').''.$langs->trans('DetailRight'); if (!empty($menu->perms)) { - print ' ('.$langs->trans("ConditionIsCurrently").': '.yn(dol_eval($menu->perms, 1, 1, '1')).')'; + print ' ('.$langs->trans("ConditionIsCurrently").': '.yn((int) dol_eval($menu->perms, 1, 1, '1') <= 0 ? 0 : 1).')'; } print '
'; foreach ($remainingdata as $datar) { - $father = array('rowid'=>$datar['rowid'], 'title'=>"???", 'mainmenu'=>$datar['fk_mainmenu'], 'leftmenu'=>$datar['fk_leftmenu'], 'fk_mainmenu'=>'', 'fk_leftmenu'=>''); + $father = array('rowid' => $datar['rowid'], 'title' => "???", 'mainmenu' => $datar['fk_mainmenu'], 'leftmenu' => $datar['fk_leftmenu'], 'fk_mainmenu' => '', 'fk_leftmenu' => ''); //print 'Start with rowid='.$datar['rowid'].' mainmenu='.$father ['mainmenu'].' leftmenu='.$father ['leftmenu'].'
'."\n"; tree_recur($data, $father, 0, 'iddivjstree'.$datar['rowid'], 1, 1); } diff --git a/htdocs/admin/modulehelp.php b/htdocs/admin/modulehelp.php index cbf9ac6fba6..e076187e563 100644 --- a/htdocs/admin/modulehelp.php +++ b/htdocs/admin/modulehelp.php @@ -2,6 +2,7 @@ /* Copyright (C) 2017 Laurent Destailleur * Copyright (C) 2017 Regis Houssin * Copyright (C) 2022 Charlene Benke + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -41,7 +42,7 @@ $langs->loadLangs(array('errors', 'admin', 'modulebuilder', 'exports')); $mode = GETPOST('mode', 'alpha'); $action = GETPOST('action', 'aZ09'); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); if (empty($mode)) { $mode = 'desc'; } @@ -77,7 +78,7 @@ print ''."\n".''; -$arrayofnatures = array('core'=>$langs->transnoentitiesnoconv("Core"), 'external'=>$langs->transnoentitiesnoconv("External").' - '.$langs->trans("AllPublishers")); +$arrayofnatures = array('core' => $langs->transnoentitiesnoconv("Core"), 'external' => $langs->transnoentitiesnoconv("External").' - '.$langs->trans("AllPublishers")); // Search modules dirs $modulesdir = dolGetModulesDirs(); @@ -116,6 +117,7 @@ foreach ($modulesdir as $dir) { if (class_exists($modName)) { try { $objMod = new $modName($db); + '@phan-var-force DolibarrModules $objMod'; $modNameLoaded[$modName] = $dir; if (!$objMod->numero > 0 && $modName != 'modUser') { @@ -168,6 +170,9 @@ foreach ($modulesdir as $dir) { } else { $familykey = $objMod->family; } + if (empty($familykey) || $familykey === null) { + $familykey = 'other'; + } $moduleposition = ($objMod->module_position ? $objMod->module_position : '50'); if ($moduleposition == '50' && ($objMod->isCoreOrExternalModule() == 'external')) { @@ -200,7 +205,7 @@ foreach ($modulesdir as $dir) { dol_syslog("Failed to load ".$dir.$file." ".$e->getMessage(), LOG_ERR); } } else { - print "Warning bad descriptor file : ".$dir.$file." (Class ".$modName." not found into file)
"; + print info_admin("Warning bad descriptor file : ".$dir.$file." (Class ".$modName." not found into file)", 0, 0, '1', 'warning'); } } catch (Exception $e) { dol_syslog("Failed to load ".$dir.$file." ".$e->getMessage(), LOG_ERR); @@ -235,7 +240,10 @@ foreach ($orders as $tmpkey => $tmpvalue) { } $value = $orders[$key]; $tab = explode('_', $value); -$familyposition = $tab[0]; $familykey = $tab[1]; $module_position = $tab[2]; $numero = $tab[3]; +$familyposition = $tab[0]; +$familykey = $tab[1]; +$module_position = $tab[2]; +$numero = $tab[3]; diff --git a/htdocs/admin/modules.php b/htdocs/admin/modules.php index 27d0b5c0581..435fb37e1f6 100644 --- a/htdocs/admin/modules.php +++ b/htdocs/admin/modules.php @@ -9,6 +9,7 @@ * Copyright (C) 2015 Raphaël Doursenaud * Copyright (C) 2018 Nicolas ZABOURI * Copyright (C) 2021-2023 Frédéric France + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -47,7 +48,7 @@ $langs->loadLangs(array("errors", "admin", "modulebuilder")); // if we set another view list mode, we keep it (till we change one more time) if (GETPOSTISSET('mode')) { $mode = GETPOST('mode', 'alpha'); - if ($mode =='common' || $mode =='commonkanban') { + if ($mode == 'common' || $mode == 'commonkanban') { dolibarr_set_const($db, "MAIN_MODULE_SETUP_ON_LIST_BY_DEFAULT", $mode, 'chaine', 0, '', $conf->entity); } } else { @@ -56,7 +57,7 @@ if (GETPOSTISSET('mode')) { $action = GETPOST('action', 'aZ09'); $value = GETPOST('value', 'alpha'); -$page_y = GETPOST('page_y', 'int'); +$page_y = GETPOSTINT('page_y'); $search_keyword = GETPOST('search_keyword', 'alpha'); $search_status = GETPOST('search_status', 'alpha'); $search_nature = GETPOST('search_nature', 'alpha'); @@ -66,9 +67,9 @@ $search_version = GETPOST('search_version', 'alpha'); // For dolistore search $options = array(); $options['per_page'] = 20; -$options['categorie'] = ((int) (GETPOST('categorie', 'int') ? GETPOST('categorie', 'int') : 0)); -$options['start'] = ((int) (GETPOST('start', 'int') ? GETPOST('start', 'int') : 0)); -$options['end'] = ((int) (GETPOST('end', 'int') ? GETPOST('end', 'int') : 0)); +$options['categorie'] = ((int) (GETPOSTINT('categorie') ? GETPOSTINT('categorie') : 0)); +$options['start'] = ((int) (GETPOSTINT('start') ? GETPOSTINT('start') : 0)); +$options['end'] = ((int) (GETPOSTINT('end') ? GETPOSTINT('end') : 0)); $options['search'] = GETPOST('search_keyword', 'alpha'); $dolistore = new Dolistore(false); @@ -78,18 +79,18 @@ if (!$user->admin) { } $familyinfo = array( - 'hr'=>array('position'=>'001', 'label'=>$langs->trans("ModuleFamilyHr")), - 'crm'=>array('position'=>'006', 'label'=>$langs->trans("ModuleFamilyCrm")), - 'srm'=>array('position'=>'007', 'label'=>$langs->trans("ModuleFamilySrm")), - 'financial'=>array('position'=>'009', 'label'=>$langs->trans("ModuleFamilyFinancial")), - 'products'=>array('position'=>'012', 'label'=>$langs->trans("ModuleFamilyProducts")), - 'projects'=>array('position'=>'015', 'label'=>$langs->trans("ModuleFamilyProjects")), - 'ecm'=>array('position'=>'018', 'label'=>$langs->trans("ModuleFamilyECM")), - 'technic'=>array('position'=>'021', 'label'=>$langs->trans("ModuleFamilyTechnic")), - 'portal'=>array('position'=>'040', 'label'=>$langs->trans("ModuleFamilyPortal")), - 'interface'=>array('position'=>'050', 'label'=>$langs->trans("ModuleFamilyInterface")), - 'base'=>array('position'=>'060', 'label'=>$langs->trans("ModuleFamilyBase")), - 'other'=>array('position'=>'100', 'label'=>$langs->trans("ModuleFamilyOther")), + 'hr' => array('position' => '001', 'label' => $langs->trans("ModuleFamilyHr")), + 'crm' => array('position' => '006', 'label' => $langs->trans("ModuleFamilyCrm")), + 'srm' => array('position' => '007', 'label' => $langs->trans("ModuleFamilySrm")), + 'financial' => array('position' => '009', 'label' => $langs->trans("ModuleFamilyFinancial")), + 'products' => array('position' => '012', 'label' => $langs->trans("ModuleFamilyProducts")), + 'projects' => array('position' => '015', 'label' => $langs->trans("ModuleFamilyProjects")), + 'ecm' => array('position' => '018', 'label' => $langs->trans("ModuleFamilyECM")), + 'technic' => array('position' => '021', 'label' => $langs->trans("ModuleFamilyTechnic")), + 'portal' => array('position' => '040', 'label' => $langs->trans("ModuleFamilyPortal")), + 'interface' => array('position' => '050', 'label' => $langs->trans("ModuleFamilyInterface")), + 'base' => array('position' => '060', 'label' => $langs->trans("ModuleFamilyBase")), + 'other' => array('position' => '100', 'label' => $langs->trans("ModuleFamilyOther")), ); $param = ''; @@ -360,7 +361,7 @@ llxHeader('', $langs->trans("Setup"), $help_url, '', '', '', $morejs, $morecss, // Search modules dirs $modulesdir = dolGetModulesDirs(); -$arrayofnatures = array('core'=>$langs->transnoentitiesnoconv("NativeModules"), 'external'=>$langs->transnoentitiesnoconv("External").' - ['.$langs->trans("AllPublishers").']'); +$arrayofnatures = array('core' => $langs->transnoentitiesnoconv("NativeModules"), 'external' => $langs->transnoentitiesnoconv("External").' - ['.$langs->trans("AllPublishers").']'); $arrayofwarnings = array(); // Array of warning each module want to show when activated $arrayofwarningsext = array(); // Array of warning each module want to show when we activate an external module $filename = array(); @@ -395,6 +396,7 @@ foreach ($modulesdir as $dir) { $res = include_once $dir.$file; // A class already exists in a different file will send a non catchable fatal error. if (class_exists($modName)) { $objMod = new $modName($db); + '@phan-var-force DolibarrModules $objMod'; $modNameLoaded[$modName] = $dir; if (!$objMod->numero > 0 && $modName != 'modUser') { dol_syslog('The module descriptor '.$modName.' must have a numero property', LOG_ERR); @@ -443,6 +445,7 @@ foreach ($modulesdir as $dir) { } else { $familykey = $objMod->family; } + '@phan-var-force string $familykey'; // if not, phan considers $familykey may be null $moduleposition = ($objMod->module_position ? $objMod->module_position : '50'); if ($objMod->isCoreOrExternalModule() == 'external' && $moduleposition < 100000) { @@ -458,7 +461,7 @@ foreach ($modulesdir as $dir) { $arrayofwarningsext[$modName] = $objMod->warnings_activation_ext; } - $familyposition = (empty($familyinfo[$familykey]['position']) ? 0 : $familyinfo[$familykey]['position']); + $familyposition = (empty($familyinfo[$familykey]['position']) ? '0' : $familyinfo[$familykey]['position']); $listOfOfficialModuleGroups = array('hr', 'technic', 'interface', 'technic', 'portal', 'financial', 'crm', 'base', 'products', 'srm', 'ecm', 'projects', 'other'); if ($external && !in_array($familykey, $listOfOfficialModuleGroups)) { // If module is extern and into a custom group (not into an official predefined one), it must appear at end (custom groups should not be before official groups). @@ -485,7 +488,7 @@ foreach ($modulesdir as $dir) { dol_syslog("Module ".get_class($objMod)." not qualified"); } } else { - print "admin/modules.php Warning bad descriptor file : ".$dir.$file." (Class ".$modName." not found into file)
"; + print info_admin("admin/modules.php Warning bad descriptor file : ".$dir.$file." (Class ".$modName." not found into file)", 0, 0, '1', 'warning'); } } catch (Exception $e) { dol_syslog("Failed to load ".$dir.$file." ".$e->getMessage(), LOG_ERR); @@ -603,10 +606,10 @@ if ($mode == 'common' || $mode == 'commonkanban') { $moreforfilter = '
'; $moreforfilter .= ''; $moreforfilter .= '
'; @@ -618,7 +621,7 @@ if ($mode == 'common' || $mode == 'commonkanban') { $moreforfilter .= '
'; if (getDolGlobalInt('MAIN_FEATURES_LEVEL')) { - $array_version = array('stable'=>$langs->transnoentitiesnoconv("Stable")); + $array_version = array('stable' => $langs->transnoentitiesnoconv("Stable")); if (getDolGlobalInt('MAIN_FEATURES_LEVEL') < 0) { $array_version['deprecated'] = $langs->trans("Deprecated"); } @@ -632,7 +635,7 @@ if ($mode == 'common' || $mode == 'commonkanban') { $moreforfilter .= $form->selectarray('search_version', $array_version, $search_version, $langs->transnoentitiesnoconv('Version'), 0, 0, '', 0, 0, 0, '', 'maxwidth150', 1); $moreforfilter .= '
'; } - $array_status = array('active'=>$langs->transnoentitiesnoconv("Enabled"), 'disabled'=>$langs->transnoentitiesnoconv("Disabled")); + $array_status = array('active' => $langs->transnoentitiesnoconv("Enabled"), 'disabled' => $langs->transnoentitiesnoconv("Disabled")); $moreforfilter .= '
'; $moreforfilter .= $form->selectarray('search_status', $array_status, $search_status, $langs->transnoentitiesnoconv('Status'), 0, 0, '', 0, 0, 0, '', 'maxwidth150', 1); $moreforfilter .= '
'; @@ -717,7 +720,7 @@ if ($mode == 'common' || $mode == 'commonkanban') { || ($moduledesc && preg_match('/'.preg_quote($search_keyword, '/').'/i', $moduledesc)) || ($moduledesclong && preg_match('/'.preg_quote($search_keyword, '/').'/i', $moduledesclong)) || ($moduleauthor && preg_match('/'.preg_quote($search_keyword, '/').'/i', $moduleauthor)) - ) { + ) { $qualified = 1; } if (!$qualified) { @@ -1251,36 +1254,36 @@ if ($mode == 'deploy') { $maxphp = @ini_get('upload_max_filesize'); // In unknown if (preg_match('/k$/i', $maxphp)) { $maxphp = preg_replace('/k$/i', '', $maxphp); - $maxphp = $maxphp * 1; + $maxphp *= 1; } if (preg_match('/m$/i', $maxphp)) { $maxphp = preg_replace('/m$/i', '', $maxphp); - $maxphp = $maxphp * 1024; + $maxphp *= 1024; } if (preg_match('/g$/i', $maxphp)) { $maxphp = preg_replace('/g$/i', '', $maxphp); - $maxphp = $maxphp * 1024 * 1024; + $maxphp *= 1024 * 1024; } if (preg_match('/t$/i', $maxphp)) { $maxphp = preg_replace('/t$/i', '', $maxphp); - $maxphp = $maxphp * 1024 * 1024 * 1024; + $maxphp *= 1024 * 1024 * 1024; } $maxphp2 = @ini_get('post_max_size'); // In unknown if (preg_match('/k$/i', $maxphp2)) { $maxphp2 = preg_replace('/k$/i', '', $maxphp2); - $maxphp2 = $maxphp2 * 1; + $maxphp2 *= 1; } if (preg_match('/m$/i', $maxphp2)) { $maxphp2 = preg_replace('/m$/i', '', $maxphp2); - $maxphp2 = $maxphp2 * 1024; + $maxphp2 *= 1024; } if (preg_match('/g$/i', $maxphp2)) { $maxphp2 = preg_replace('/g$/i', '', $maxphp2); - $maxphp2 = $maxphp2 * 1024 * 1024; + $maxphp2 *= 1024 * 1024; } if (preg_match('/t$/i', $maxphp2)) { $maxphp2 = preg_replace('/t$/i', '', $maxphp2); - $maxphp2 = $maxphp2 * 1024 * 1024 * 1024; + $maxphp2 *= 1024 * 1024 * 1024; } // Now $max and $maxphp and $maxphp2 are in Kb $maxmin = $max; @@ -1315,7 +1318,7 @@ if ($mode == 'deploy') { print ' '; - print ''; + print ''; if (getDolGlobalString('MAIN_UPLOAD_DOC')) { if ($user->admin) { diff --git a/htdocs/admin/mrp.php b/htdocs/admin/mrp.php index 382106a9b94..f616df182c4 100644 --- a/htdocs/admin/mrp.php +++ b/htdocs/admin/mrp.php @@ -1,5 +1,6 @@ + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -77,18 +78,16 @@ if ($action == 'updateMask') { // Search template files $file = ''; $classname = ''; - $filefound = 0; $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']); foreach ($dirmodels as $reldir) { $file = dol_buildpath($reldir."core/modules/mrp/doc/pdf_".$modele.".modules.php", 0); if (file_exists($file)) { - $filefound = 1; $classname = "pdf_".$modele; break; } } - if ($filefound) { + if ($classname !== '') { require_once $file; $module = new $classname($db); @@ -327,6 +326,7 @@ foreach ($dirmodels as $reldir) { if (is_dir($dir)) { $handle = opendir($dir); if (is_resource($handle)) { + $filelist = array(); while (($file = readdir($handle)) !== false) { $filelist[] = $file; } diff --git a/htdocs/admin/multicurrency.php b/htdocs/admin/multicurrency.php index 08822da9a59..6121350b972 100644 --- a/htdocs/admin/multicurrency.php +++ b/htdocs/admin/multicurrency.php @@ -100,7 +100,7 @@ if ($action == 'add_currency') { $error = 0; if (GETPOST('updatecurrency', 'alpha')) { - $fk_multicurrency = GETPOST('fk_multicurrency', 'int'); + $fk_multicurrency = GETPOSTINT('fk_multicurrency'); $rate = price2num(GETPOST('rate', 'alpha')); $currency = new MultiCurrency($db); @@ -117,7 +117,7 @@ if ($action == 'add_currency') { } } } elseif (GETPOST('deletecurrency', 'alpha')) { - $fk_multicurrency = GETPOST('fk_multicurrency', 'int'); + $fk_multicurrency = GETPOSTINT('fk_multicurrency'); $currency = new MultiCurrency($db); if ($currency->fetch($fk_multicurrency) > 0) { diff --git a/htdocs/admin/oauthlogintokens.php b/htdocs/admin/oauthlogintokens.php index 98f7b8d2a9e..9ba965e6bfc 100644 --- a/htdocs/admin/oauthlogintokens.php +++ b/htdocs/admin/oauthlogintokens.php @@ -143,6 +143,7 @@ if ($mode == 'setup' && $user->admin) { print ''.$langs->trans("OAuthSetupForLogin")."

\n"; // Define $listinsetup + $listinsetup = array(); foreach ($conf->global as $key => $val) { if (!empty($val) && preg_match('/^OAUTH_.*_ID$/', $key)) { $provider = preg_replace('/_ID$/', '', $key); @@ -156,7 +157,7 @@ if ($mode == 'setup' && $user->admin) { } } - $oauthstateanticsrf = bin2hex(random_bytes(128/8)); + $oauthstateanticsrf = bin2hex(random_bytes(128 / 8)); // $list is defined into oauth.lib.php to the list of supporter OAuth providers. foreach ($listinsetup as $key) { diff --git a/htdocs/admin/payment.php b/htdocs/admin/payment.php index 5fd744ca88b..55dc6212a60 100644 --- a/htdocs/admin/payment.php +++ b/htdocs/admin/payment.php @@ -79,7 +79,7 @@ if ($action == 'setparams') { $error++; } - $res = dolibarr_set_const($db, "PAYMENTS_REPORT_GROUP_BY_MOD", GETPOST('PAYMENTS_REPORT_GROUP_BY_MOD', 'int'), 'chaine', 0, '', $conf->entity); + $res = dolibarr_set_const($db, "PAYMENTS_REPORT_GROUP_BY_MOD", GETPOSTINT('PAYMENTS_REPORT_GROUP_BY_MOD'), 'chaine', 0, '', $conf->entity); if (!($res > 0)) { $error++; } diff --git a/htdocs/admin/paymentbybanktransfer.php b/htdocs/admin/paymentbybanktransfer.php index e5fe6cc018c..43e2f1473d2 100644 --- a/htdocs/admin/paymentbybanktransfer.php +++ b/htdocs/admin/paymentbybanktransfer.php @@ -50,7 +50,7 @@ $type = 'paymentorder'; if ($action == "set") { $db->begin(); - $id = GETPOST('PAYMENTBYBANKTRANSFER_ID_BANKACCOUNT', 'int'); + $id = GETPOSTINT('PAYMENTBYBANKTRANSFER_ID_BANKACCOUNT'); $account = new Account($db); if ($account->fetch($id) > 0) { $res = dolibarr_set_const($db, "PAYMENTBYBANKTRANSFER_ID_BANKACCOUNT", $id, 'chaine', 0, '', $conf->entity); @@ -115,7 +115,7 @@ if ($action == "set") { if ($action == "addnotif") { $bon = new BonPrelevement($db); - $bon->addNotification($db, GETPOST('user', 'int'), $action); + $bon->addNotification($db, GETPOSTINT('user'), $action); header("Location: ".$_SERVER["PHP_SELF"]); exit; @@ -123,7 +123,7 @@ if ($action == "addnotif") { if ($action == "deletenotif") { $bon = new BonPrelevement($db); - $bon->deleteNotificationById(GETPOST('notif', 'int')); + $bon->deleteNotificationById(GETPOSTINT('notif')); header("Location: ".$_SERVER["PHP_SELF"]); exit; diff --git a/htdocs/admin/pdf.php b/htdocs/admin/pdf.php index e9af7bdc816..a792c664a6c 100644 --- a/htdocs/admin/pdf.php +++ b/htdocs/admin/pdf.php @@ -137,7 +137,7 @@ if ($action == 'update') { } if (GETPOSTISSET('MAIN_DOCUMENTS_LOGO_HEIGHT')) { - dolibarr_set_const($db, "MAIN_DOCUMENTS_LOGO_HEIGHT", GETPOST("MAIN_DOCUMENTS_LOGO_HEIGHT", 'int'), 'chaine', 0, '', $conf->entity); + dolibarr_set_const($db, "MAIN_DOCUMENTS_LOGO_HEIGHT", GETPOSTINT("MAIN_DOCUMENTS_LOGO_HEIGHT"), 'chaine', 0, '', $conf->entity); } if (GETPOSTISSET('MAIN_INVERT_SENDER_RECIPIENT')) { dolibarr_set_const($db, "MAIN_INVERT_SENDER_RECIPIENT", GETPOST("MAIN_INVERT_SENDER_RECIPIENT"), 'chaine', 0, '', $conf->entity); diff --git a/htdocs/admin/pdf_other.php b/htdocs/admin/pdf_other.php index 2c76236310c..dd803f2ad71 100644 --- a/htdocs/admin/pdf_other.php +++ b/htdocs/admin/pdf_other.php @@ -36,7 +36,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php'; // Load translation files required by the page -$langs->loadLangs(array('admin', 'bills', 'companies', 'languages', 'members', 'other', 'products', 'propal', 'receptions', 'stocks', 'trips')); +$langs->loadLangs(array('admin', 'bills', 'companies', 'languages', 'members', 'other', 'products', 'propal', 'receptions', 'stocks', 'trips', 'orders')); if (!$user->admin) { accessforbidden(); @@ -75,10 +75,10 @@ if ($action == 'update') { dolibarr_set_const($db, "MAIN_GENERATE_DOCUMENTS_PURCHASE_ORDER_WITHOUT_TOTAL_COLUMN", GETPOST("MAIN_GENERATE_DOCUMENTS_PURCHASE_ORDER_WITHOUT_TOTAL_COLUMN"), 'chaine', 0, '', $conf->entity); } if (GETPOSTISSET('MAIN_DOCUMENTS_WITH_PICTURE_WIDTH')) { - dolibarr_set_const($db, "MAIN_DOCUMENTS_WITH_PICTURE_WIDTH", GETPOST("MAIN_DOCUMENTS_WITH_PICTURE_WIDTH", 'int'), 'chaine', 0, '', $conf->entity); + dolibarr_set_const($db, "MAIN_DOCUMENTS_WITH_PICTURE_WIDTH", GETPOSTINT("MAIN_DOCUMENTS_WITH_PICTURE_WIDTH"), 'chaine', 0, '', $conf->entity); } if (GETPOSTISSET('INVOICE_ADD_ZATCA_QR_CODE')) { - dolibarr_set_const($db, "INVOICE_ADD_ZATCA_QR_CODE", GETPOST("INVOICE_ADD_ZATCA_QR_CODE", 'int'), 'chaine', 0, '', $conf->entity); + dolibarr_set_const($db, "INVOICE_ADD_ZATCA_QR_CODE", GETPOSTINT("INVOICE_ADD_ZATCA_QR_CODE"), 'chaine', 0, '', $conf->entity); if (GETPOSTINT('INVOICE_ADD_ZATCA_QR_CODE') == 1) { dolibarr_del_const($db, "INVOICE_ADD_SWISS_QR_CODE", $conf->entity); } @@ -90,10 +90,10 @@ if ($action == 'update') { } } if (GETPOSTISSET('INVOICE_CATEGORY_OF_OPERATION')) { - dolibarr_set_const($db, "INVOICE_CATEGORY_OF_OPERATION", GETPOST("INVOICE_CATEGORY_OF_OPERATION", 'int'), 'chaine', 0, '', $conf->entity); + dolibarr_set_const($db, "INVOICE_CATEGORY_OF_OPERATION", GETPOSTINT("INVOICE_CATEGORY_OF_OPERATION"), 'chaine', 0, '', $conf->entity); } if (GETPOSTISSET('INVOICE_SHOW_SHIPPING_ADDRESS')) { - dolibarr_set_const($db, "INVOICE_SHOW_SHIPPING_ADDRESS", GETPOST("INVOICE_SHOW_SHIPPING_ADDRESS", 'int'), 'chaine', 0, '', $conf->entity); + dolibarr_set_const($db, "INVOICE_SHOW_SHIPPING_ADDRESS", GETPOSTINT("INVOICE_SHOW_SHIPPING_ADDRESS"), 'chaine', 0, '', $conf->entity); dolibarr_del_const($db, "INVOICE_SHOW_SHIPPING_ADDRESS", $conf->entity); } @@ -234,7 +234,7 @@ if (isModEnabled('supplier_order')) { print ''; } -if (isModEnabled('facture')) { +if (isModEnabled('invoice')) { print load_fiche_titre($langs->trans("Invoices"), '', 'bill'); print '
'; diff --git a/htdocs/admin/perms.php b/htdocs/admin/perms.php index e7c4bd3fbb4..774cb173364 100644 --- a/htdocs/admin/perms.php +++ b/htdocs/admin/perms.php @@ -47,14 +47,14 @@ $entity = $conf->entity; if ($action == 'add') { $sql = "UPDATE ".MAIN_DB_PREFIX."rights_def SET bydefault=1"; - $sql .= " WHERE id = ".GETPOST("pid", 'int'); + $sql .= " WHERE id = ".GETPOSTINT("pid"); $sql .= " AND entity = ".$conf->entity; $db->query($sql); } if ($action == 'remove') { $sql = "UPDATE ".MAIN_DB_PREFIX."rights_def SET bydefault=0"; - $sql .= " WHERE id = ".GETPOST('pid', 'int'); + $sql .= " WHERE id = ".GETPOSTINT('pid'); $sql .= " AND entity = ".$conf->entity; $db->query($sql); } @@ -262,7 +262,7 @@ if ($result) { if ($user->admin) { print '
'; $htmltext = $langs->trans("ID").': '.$obj->id; - $htmltext .= '
'.$langs->trans("Permission").': user->hasRight(\''.$obj->module.'\', \''.$obj->perms.'\''.($obj->subperms ? ', \''.$obj->subperms.'\'' : '').')'; + $htmltext .= '
'.$langs->trans("Permission").': user->hasRight(\''.dol_escape_htmltag($obj->module).'\', \''.dol_escape_htmltag($obj->perms).'\''.($obj->subperms ? ', \''.dol_escape_htmltag($obj->subperms).'\'' : '').')'; print $form->textwithpicto('', $htmltext); //print ''.$obj->id.''; print '
'; print ''; print $langs->trans("PaymentMode").''; -if (!isModEnabled('facture')) { +if (!isModEnabled('invoice')) { print ''; } print '
".$langs->trans("SuggestPaymentByRIBOnAccount").""; -if (!isModEnabled('facture')) { - if (isModEnabled("banque")) { +if (!isModEnabled('invoice')) { + if (isModEnabled("bank")) { $sql = "SELECT rowid, label"; $sql .= " FROM ".MAIN_DB_PREFIX."bank_account"; $sql .= " WHERE clos = 0"; @@ -555,7 +555,7 @@ print "
".$langs->trans("SuggestPaymentByChequeToAddress").""; -if (!isModEnabled('facture')) { +if (!isModEnabled('invoice')) { print '
'.$langs->trans("DeStockOnBill").''; -if (isModEnabled('facture')) { +if (isModEnabled('invoice')) { if ($conf->use_javascript_ajax) { if ($disabled) { print img_picto($langs->trans("Disabled"), 'off', 'class="opacitymedium"'); @@ -246,7 +245,7 @@ print ''; print '
'.$langs->trans("DeStockOnValidateOrder").''; -if (isModEnabled('commande')) { +if (isModEnabled('order')) { if ($conf->use_javascript_ajax) { if ($disabled) { print img_picto($langs->trans("Disabled"), 'off', 'class="opacitymedium"'); @@ -270,7 +269,7 @@ print ''; print '
'.$langs->trans("DeStockOnShipment").''; -if (isModEnabled("expedition")) { +if (isModEnabled("shipping")) { if ($conf->use_javascript_ajax) { print ajax_constantonoff('STOCK_CALCULATE_ON_SHIPMENT', array(), null, 0, 0, 0, 2, 1, '', '', 'reposition'); } else { @@ -287,7 +286,7 @@ print ''; print '
'.$langs->trans("DeStockOnShipmentOnClosing").''; -if (isModEnabled("expedition")) { +if (isModEnabled("shipping")) { if ($conf->use_javascript_ajax) { print ajax_constantonoff('STOCK_CALCULATE_ON_SHIPMENT_CLOSE', array(), null, 0, 0, 0, 2, 1, '', '', 'reposition'); } else { @@ -433,7 +432,7 @@ print "
'.$langs->trans("StockMustBeEnoughForInvoice").''; @@ -447,7 +446,7 @@ if (isModEnabled('facture')) { print "
'.$langs->trans("StockMustBeEnoughForOrder").''; @@ -461,7 +460,7 @@ if (isModEnabled('commande')) { print "
'.$langs->trans("StockMustBeEnoughForShipment").''; @@ -571,6 +570,7 @@ foreach ($dirmodels as $reldir) { if (is_dir($dir)) { $handle = opendir($dir); if (is_resource($handle)) { + $filelist = array(); while (($file = readdir($handle)) !== false) { $filelist[] = $file; } diff --git a/htdocs/admin/stocktransfer.php b/htdocs/admin/stocktransfer.php index 314b24d9fb0..dee8ebc3b14 100644 --- a/htdocs/admin/stocktransfer.php +++ b/htdocs/admin/stocktransfer.php @@ -2,6 +2,7 @@ /* Copyright (C) 2004-2017 Laurent Destailleur * Copyright (C) 2021 Gauthier VERDOL * Copyright (C) 2021 SuperAdmin + * Copyright (C) 2024 MDW * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -50,8 +51,8 @@ $label = GETPOST('label', 'alpha'); $scandir = GETPOST('scan_dir', 'alpha'); $arrayofparameters = array( - 'STOCKTRANSFER_MYPARAM1'=>array('css'=>'minwidth200', 'enabled'=>1), - 'STOCKTRANSFER_MYPARAM2'=>array('css'=>'minwidth500', 'enabled'=>1) + 'STOCKTRANSFER_MYPARAM1' => array('css' => 'minwidth200', 'enabled' => 1), + 'STOCKTRANSFER_MYPARAM2' => array('css' => 'minwidth500', 'enabled' => 1) ); $error = 0; @@ -91,18 +92,16 @@ if ($action == 'updateMask') { // Search template files $file = ''; $classname = ''; - $filefound = 0; $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']); foreach ($dirmodels as $reldir) { $file = dol_buildpath($reldir."core/modules/stocktransfer/doc/pdf_".$modele.".modules.php", 0); if (file_exists($file)) { - $filefound = 1; $classname = "pdf_".$modele; break; } } - if ($filefound) { + if ($classname !== '') { require_once $file; $module = new $classname($db); @@ -233,7 +232,7 @@ print ''.$langs->trans("StockTransferSetupPage").'1, 'includedocgeneration'=>1, 'class'=>'StockTransfer'); +$myTmpObjects[$moduledir] = array('includerefgeneration' => 1, 'includedocgeneration' => 1, 'class' => 'StockTransfer'); foreach ($myTmpObjects as $myTmpObjectKey => $myTmpObjectArray) { if ($myTmpObjectKey == 'MyObject') { @@ -396,6 +395,7 @@ foreach ($myTmpObjects as $myTmpObjectKey => $myTmpObjectArray) { if (is_dir($dir)) { $handle = opendir($dir); if (is_resource($handle)) { + $filelist = array(); while (($file = readdir($handle)) !== false) { $filelist[] = $file; } diff --git a/htdocs/admin/supplier_invoice.php b/htdocs/admin/supplier_invoice.php index 52b1342f88e..38db853af92 100644 --- a/htdocs/admin/supplier_invoice.php +++ b/htdocs/admin/supplier_invoice.php @@ -6,6 +6,7 @@ * Copyright (C) 2004 Benoit Mortier * Copyright (C) 2010-2013 Juanjo Menent * Copyright (C) 2011-2018 Philippe Grand + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -102,18 +103,16 @@ if ($action == 'specimen') { // For invoices // Search template files $file = ''; $classname = ''; - $filefound = 0; $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']); foreach ($dirmodels as $reldir) { $file = dol_buildpath($reldir."core/modules/supplier_invoice/doc/pdf_".$modele.".modules.php", 0); if (file_exists($file)) { - $filefound = 1; $classname = "pdf_".$modele; break; } } - if ($filefound) { + if ($classname !== '') { require_once $file; $module = new $classname($db, $facture); diff --git a/htdocs/admin/supplier_order.php b/htdocs/admin/supplier_order.php index 849a6dff7f3..ecfc2a68b93 100644 --- a/htdocs/admin/supplier_order.php +++ b/htdocs/admin/supplier_order.php @@ -1,5 +1,6 @@ + * Copyright (C) 2024 MDW * Copyright (C) 2004-2011 Laurent Destailleur * Copyright (C) 2005-2011 Regis Houssin * Copyright (C) 2004 Sebastien Di Cintio @@ -92,18 +93,16 @@ if ($action == 'specimen') { // For orders // Search template files $file = ''; $classname = ''; - $filefound = 0; $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']); foreach ($dirmodels as $reldir) { $file = dol_buildpath($reldir."core/modules/supplier_order/doc/pdf_".$modele.".modules.php", 0); if (file_exists($file)) { - $filefound = 1; $classname = "pdf_".$modele; break; } } - if ($filefound) { + if ($classname !== '') { require_once $file; $module = new $classname($db, $commande); diff --git a/htdocs/admin/supplier_payment.php b/htdocs/admin/supplier_payment.php index c1e01049a65..e420a914155 100644 --- a/htdocs/admin/supplier_payment.php +++ b/htdocs/admin/supplier_payment.php @@ -2,6 +2,7 @@ /* Copyright (C) 2015 Juanjo Menent * Copyright (C) 2016 Laurent Destailleur * Copyright (C) 2020 Maxime DEMAREST + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -103,18 +104,16 @@ if ($action == 'updateMask') { // Search template files $file = ''; $classname = ''; - $filefound = 0; $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']); foreach ($dirmodels as $reldir) { $file = dol_buildpath($reldir."core/modules/supplier_payment/doc/pdf_".$modele.".modules.php", 0); if (file_exists($file)) { - $filefound = 1; $classname = "pdf_".$modele; break; } } - if ($filefound) { + if ($classname !== '') { require_once $file; $module = new $classname($db); @@ -131,7 +130,7 @@ if ($action == 'updateMask') { dol_syslog($langs->trans("ErrorModuleNotFound"), LOG_ERR); } } elseif ($action == 'setparams') { - $res = dolibarr_set_const($db, "PAYMENTS_FOURN_REPORT_GROUP_BY_MOD", GETPOST('PAYMENTS_FOURN_REPORT_GROUP_BY_MOD', 'int'), 'chaine', 0, '', $conf->entity); + $res = dolibarr_set_const($db, "PAYMENTS_FOURN_REPORT_GROUP_BY_MOD", GETPOSTINT('PAYMENTS_FOURN_REPORT_GROUP_BY_MOD'), 'chaine', 0, '', $conf->entity); if (!($res > 0)) { $error++; } diff --git a/htdocs/admin/supplier_proposal.php b/htdocs/admin/supplier_proposal.php index ef3dfb2fd99..94197b4bdad 100644 --- a/htdocs/admin/supplier_proposal.php +++ b/htdocs/admin/supplier_proposal.php @@ -8,6 +8,7 @@ * Copyright (C) 2008 Raphael Bertrand (Resultic) * Copyright (C) 2011-2013 Juanjo Menent * Copyright (C) 2015 Jean-François Ferry + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -81,18 +82,16 @@ if ($action == 'specimen') { // Search template files $file = ''; $classname = ''; - $filefound = 0; $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']); foreach ($dirmodels as $reldir) { $file = dol_buildpath($reldir."core/modules/supplier_proposal/doc/pdf_".$modele.".modules.php"); if (file_exists($file)) { - $filefound = 1; $classname = "pdf_".$modele; break; } } - if ($filefound) { + if ($classname !== '') { require_once $file; $module = new $classname($db); @@ -379,6 +378,7 @@ foreach ($dirmodels as $reldir) { if (is_dir($dir)) { $handle = opendir($dir); if (is_resource($handle)) { + $filelist = array(); while (($file = readdir($handle)) !== false) { $filelist[] = $file; } @@ -532,7 +532,7 @@ print '
'; print $langs->trans("BANK_ASK_PAYMENT_BANK_DURING_SUPPLIER_PROPOSAL").' '; print ajax_constantonoff('BANK_ASK_PAYMENT_BANK_DURING_SUPPLIER_PROPOSAL'); diff --git a/htdocs/admin/system/database-tables.php b/htdocs/admin/system/database-tables.php index e122150571b..14121aebab8 100644 --- a/htdocs/admin/system/database-tables.php +++ b/htdocs/admin/system/database-tables.php @@ -39,6 +39,7 @@ if (!$user->admin) { accessforbidden(); } +$table = GETPOST('table', 'aZ09'); $action = GETPOST('action', 'aZ09'); @@ -46,16 +47,20 @@ $action = GETPOST('action', 'aZ09'); * Actions */ -if ($action == 'convert') { - $sql = "ALTER TABLE ".$db->escape(GETPOST("table", "aZ09"))." ENGINE=INNODB"; +if ($action == 'convert') { // Convert engine into innodb + $sql = "ALTER TABLE ".$db->sanitize($table)." ENGINE=INNODB"; $db->query($sql); } if ($action == 'convertutf8') { - $sql = "ALTER TABLE ".$db->escape(GETPOST("table", "aZ09"))." CHARACTER SET utf8 COLLATE utf8_unicode_ci"; + $sql = "ALTER TABLE ".$db->sanitize($table)." CHARACTER SET utf8 COLLATE utf8_unicode_ci"; + $db->query($sql); +} +if ($action == 'convertutf8mb4') { + $sql = "ALTER TABLE ".$db->sanitize($table)." CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"; $db->query($sql); } if ($action == 'convertdynamic') { - $sql = "ALTER TABLE ".$db->escape(GETPOST("table", "aZ09"))." ROW_FORMAT=DYNAMIC;"; + $sql = "ALTER TABLE ".$db->sanitize($table)." ROW_FORMAT=DYNAMIC;"; $db->query($sql); } @@ -160,16 +165,24 @@ if (!$base) { print '
'.$langs->trans("Convert").' Dynamic'; } print '
'.$obj->Rows.''.$obj->Avg_row_length.''.$obj->Data_length.''.$obj->Max_data_length.''.$obj->Index_length.''.$obj->Auto_increment.''.$obj->Check_time.''.$obj->Collation; - if (isset($obj->Collation) && (in_array($obj->Collation, array("utf8mb4_general_ci", "utf8mb4_unicode_ci", "latin1_swedish_ci")))) { - print '
'.$langs->trans("Convert").' UTF8'; + print '
'.$obj->Rows.''.$obj->Avg_row_length.''.$obj->Data_length.''.$obj->Max_data_length.''.$obj->Index_length.''.$obj->Auto_increment.''.$obj->Check_time.''.$obj->Collation; + // Link to convert collation + if (isset($obj->Collation)) { + print '
'.$langs->trans("ConvertInto"); + if (!in_array($obj->Collation, array("utf8_unicode_ci"))) { + print ' utf8'; + } + if (!in_array($obj->Collation, array("utf8mb4_unicode_ci"))) { + print ' utf8mb4'; + } + print ''; } print '
'.$langs->trans("DatabaseServer").''.$langs->trans("DatabasePort").''.(empty($conf->db->port) ? $langs->trans("Default") : $conf->db->port).'
'.$langs->trans("DatabaseName").''.$conf->db->name.'
'.$langs->trans("DriverType").''.$conf->db->type.($db->getDriverInfo() ? ' ('.$db->getDriverInfo().')' : '').'
'.$langs->trans("User").''.$conf->db->user.'
'.$langs->trans("Password").''.preg_replace('/./i', '*', $dolibarr_main_db_pass).'
'.$langs->trans("DBStoringCharset").''.$db->getDefaultCharacterSetDatabase().'
".$row[0]."".$row[1].""; + $proptype = $row[1]; + $pictoType = ''; + $matches = array(); + if (preg_match('/^varchar/', $proptype, $matches)) { + $pictoType = 'varchar'; + } elseif (strpos($proptype, 'int') === 0 || strpos($proptype, 'tinyint') === 0 || strpos($proptype, 'bigint') === 0) { + $pictoType = 'int'; + } elseif (strpos($proptype, 'timestamp') === 0) { + $pictoType = 'datetime'; + } elseif (strpos($proptype, 'real') === 0) { + $pictoType = 'double'; + } + print(!empty($pictoType) ? getPictoForType($pictoType) : getPictoForType($proptype)).''.dol_escape_htmltag($proptype).''; + print "".$row[2]."".(empty($row[2]) ? ' ' : $row[2]); + + // Link to convert collation + if (isset($row[2])) { + print '
'.$langs->trans("ConvertInto"); + if (!in_array($row[2], array("utf8_unicode_ci"))) { + print ' utf8'; + } + if (!in_array($row[2], array("utf8mb4_unicode_ci"))) { + print ' utf8mb4'; + } + print ''; + } else { + print '
 '; + } + + print "
".$row[3]."
'.$obj->lang.''.dol_escape_htmltag($obj->lang).''; - if ($action == 'edit' && $obj->rowid == GETPOST('rowid', 'int')) { + if ($action == 'edit' && $obj->rowid == GETPOSTINT('rowid')) { print ''; } else { - print $obj->transkey; + print dol_escape_htmltag($obj->transkey); } print ''; - if ($action == 'edit' && $obj->rowid == GETPOST('rowid', 'int')) { + if ($action == 'edit' && $obj->rowid == GETPOSTINT('rowid')) { print ''; print ''; print '   '; print ''; } else { - print ''.img_edit().''; + print ''.img_edit().''; print '   '; - print ''.img_delete().''; + print ''.img_delete().''; } print '
'.$langcode.''.$key.''; @@ -616,6 +622,7 @@ if ($mode == 'searchkey') { print ''.img_delete().''; print '  '; + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition $htmltext = $langs->trans("TransKeyWithoutOriginalValue", $key); print $form->textwithpicto('', $htmltext, 1, 'warning'); } diff --git a/htdocs/admin/triggers.php b/htdocs/admin/triggers.php index 2fc450af8d0..75d27c1e125 100644 --- a/htdocs/admin/triggers.php +++ b/htdocs/admin/triggers.php @@ -58,7 +58,8 @@ print "
\n"; $interfaces = new Interfaces($db); $triggers = $interfaces->getTriggersList(); -$param = ''; $align = ''; +$param = ''; +$align = ''; print '
'; print ''; @@ -78,6 +79,7 @@ foreach ($triggers as $trigger) { $text = $trigger['info']; $text .= "
\n".$langs->trans("File").":
\n".$trigger['relpath']; //$text.="\n".$langs->trans("ExternalModule",$trigger['isocreorexternal']); + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition print $form->textwithpicto('', $text); print ''; print ''; diff --git a/htdocs/admin/user.php b/htdocs/admin/user.php index 2053df210be..6cd21cd1567 100644 --- a/htdocs/admin/user.php +++ b/htdocs/admin/user.php @@ -231,6 +231,7 @@ foreach ($dirmodels as $reldir) { if (is_dir($dir)) { $handle = opendir($dir); if (is_resource($handle)) { + $filelist = array(); while (($file = readdir($handle)) !== false) { $filelist[] = $file; } diff --git a/htdocs/admin/usergroup.php b/htdocs/admin/usergroup.php index 19d6a23afd2..598b8a687e8 100644 --- a/htdocs/admin/usergroup.php +++ b/htdocs/admin/usergroup.php @@ -154,6 +154,7 @@ foreach ($dirmodels as $reldir) { if (is_dir($dir)) { $handle = opendir($dir); if (is_resource($handle)) { + $filelist = array(); while (($file = readdir($handle)) !== false) { $filelist[] = $file; } diff --git a/htdocs/admin/webhook.php b/htdocs/admin/webhook.php index 4301353540f..a0ef3ee897c 100644 --- a/htdocs/admin/webhook.php +++ b/htdocs/admin/webhook.php @@ -1,5 +1,6 @@ + * Copyright (C) 2024 MDW * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -89,46 +90,9 @@ if ($action == 'updateMask') { } else { setEventMessages($langs->trans("Error"), null, 'errors'); } -} elseif ($action == 'specimen') { - $modele = GETPOST('module', 'alpha'); - $tmpobjectkey = GETPOST('object'); - - $tmpobject = new $tmpobjectkey($db); - $tmpobject->initAsSpecimen(); - - // Search template files - $file = ''; - $classname = ''; - $filefound = 0; - $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']); - foreach ($dirmodels as $reldir) { - $file = dol_buildpath($reldir."core/modules/webhook/doc/pdf_".$modele."_".strtolower($tmpobjectkey).".modules.php", 0); - if (file_exists($file)) { - $filefound = 1; - $classname = "pdf_".$modele."_".strtolower($tmpobjectkey); - break; - } - } - - if ($filefound) { - require_once $file; - - $module = new $classname($db); - - if ($module->write_file($tmpobject, $langs) > 0) { - header("Location: ".DOL_URL_ROOT."/document.php?modulepart=webhook-".strtolower($tmpobjectkey)."&file=SPECIMEN.pdf"); - return; - } else { - setEventMessages($module->error, null, 'errors'); - dol_syslog($module->error, LOG_ERR); - } - } else { - setEventMessages($langs->trans("ErrorModuleNotFound"), null, 'errors'); - dol_syslog($langs->trans("ErrorModuleNotFound"), LOG_ERR); - } } elseif ($action == 'setmod') { // TODO Check if numbering module chosen can be activated by calling method canBeActivated - $tmpobjectkey = GETPOST('object'); + $tmpobjectkey = GETPOST('object', 'aZ09'); if (!empty($tmpobjectkey)) { $constforval = 'WEBHOOK_'.strtoupper($tmpobjectkey)."_ADDON"; dolibarr_set_const($db, $constforval, $value, 'chaine', 0, '', $conf->entity); @@ -139,7 +103,7 @@ if ($action == 'updateMask') { } elseif ($action == 'del') { $ret = delDocumentModel($value, $type); if ($ret > 0) { - $tmpobjectkey = GETPOST('object'); + $tmpobjectkey = GETPOST('object', 'aZ09'); if (!empty($tmpobjectkey)) { $constforval = 'WEBHOOK_'.strtoupper($tmpobjectkey).'_ADDON_PDF'; if (getDolGlobalString($constforval) == "$value") { @@ -149,7 +113,7 @@ if ($action == 'updateMask') { } } elseif ($action == 'setdoc') { // Set or unset default model - $tmpobjectkey = GETPOST('object'); + $tmpobjectkey = GETPOST('object', 'aZ09'); if (!empty($tmpobjectkey)) { $constforval = 'WEBHOOK_'.strtoupper($tmpobjectkey).'_ADDON_PDF'; if (dolibarr_set_const($db, $constforval, $value, 'chaine', 0, '', $conf->entity)) { @@ -165,7 +129,7 @@ if ($action == 'updateMask') { } } } elseif ($action == 'unsetdoc') { - $tmpobjectkey = GETPOST('object'); + $tmpobjectkey = GETPOST('object', 'aZ09'); if (!empty($tmpobjectkey)) { $constforval = 'WEBHOOK_'.strtoupper($tmpobjectkey).'_ADDON_PDF'; dolibarr_del_const($db, $constforval, $conf->entity); @@ -210,7 +174,7 @@ if ($action == 'edit') { print ''; foreach ($arrayofparameters as $constname => $val) { - if ($val['enabled']==1) { + if ($val['enabled'] == 1) { $setupnotempty++; print ''; foreach ($arrayofparameters as $constname => $val) { - if ($val['enabled']==1) { + if ($val['enabled'] == 1) { $setupnotempty++; print ''; - $mytmpinstance = new $myTmpObjectKey($db); + $className = $myTmpObjectArray['class']; + $mytmpinstance = new $className($db); $mytmpinstance->initAsSpecimen(); // Info @@ -359,6 +356,7 @@ foreach ($myTmpObjects as $myTmpObjectKey => $myTmpObjectArray) { if (is_dir($dir)) { $handle = opendir($dir); if (is_resource($handle)) { + $filelist = array(); while (($file = readdir($handle)) !== false) { $filelist[] = $file; } @@ -466,7 +464,7 @@ if ($action == 'edit') { print ''; foreach ($arrayofparameters as $constname => $val) { - if ($val['enabled']==1) { + if ($val['enabled'] == 1) { $setupnotempty++; print ''; foreach ($arrayofparameters as $constname => $val) { - if ($val['enabled']==1) { + if ($val['enabled'] == 1) { $setupnotempty++; print '
'.$langs->trans("Parameter").''.$langs->trans("Value").'
'; $tooltiphelp = (($langs->trans($constname . 'Tooltip') != $constname . 'Tooltip') ? $langs->trans($constname . 'Tooltip') : ''); @@ -221,7 +185,7 @@ if ($action == 'edit') { print '\n"; - } elseif ($val['type']== 'html') { + } elseif ($val['type'] == 'html') { require_once DOL_DOCUMENT_ROOT . '/core/class/doleditor.class.php'; $doleditor = new DolEditor($constname, getDolGlobalString($constname), '', 160, 'dolibarr_notes', '', false, false, isModEnabled('fckeditor'), ROWS_5, '90%'); $doleditor->Create(); @@ -300,7 +264,7 @@ if ($action == 'edit') { print '
'.$langs->trans("Parameter").''.$langs->trans("Value").'
'; $tooltiphelp = (($langs->trans($constname . 'Tooltip') != $constname . 'Tooltip') ? $langs->trans($constname . 'Tooltip') : ''); @@ -309,7 +273,7 @@ if ($action == 'edit') { if ($val['type'] == 'textarea') { print dol_nl2br(getDolGlobalString($constname)); - } elseif ($val['type']== 'html') { + } elseif ($val['type'] == 'html') { print getDolGlobalString($constname); } elseif ($val['type'] == 'yesno') { print ajax_constantonoff($constname); @@ -320,7 +284,7 @@ if ($action == 'edit') { $tmp = explode(':', $val['type']); $template = $formmail->getEMailTemplate($db, $tmp[1], $user, $langs, getDolGlobalString($constname)); - if ($template<0) { + if ($template < 0) { setEventMessages(null, $formmail->errors, 'errors'); } print $langs->trans($template->label); @@ -338,13 +302,13 @@ if ($action == 'edit') { print '
    ' . implode(' ', $toprint) . '
'; } } elseif (preg_match('/thirdparty_type/', $val['type'])) { - if (getDolGlobalInt($constname)==2) { + if (getDolGlobalInt($constname) == 2) { print $langs->trans("Prospect"); - } elseif (getDolGlobalInt($constname)==3) { + } elseif (getDolGlobalInt($constname) == 3) { print $langs->trans("ProspectCustomer"); - } elseif (getDolGlobalInt($constname)==1) { + } elseif (getDolGlobalInt($constname) == 1) { print $langs->trans("Customer"); - } elseif (getDolGlobalInt($constname)==0) { + } elseif (getDolGlobalInt($constname) == 0) { print $langs->trans("NorProspectNorCustomer"); } } elseif ($val['type'] == 'product') { @@ -376,267 +340,6 @@ if ($action == 'edit') { } -$moduledir = 'webhook'; -$myTmpObjects['MyObject'] = array('includerefgeneration'=>0, 'includedocgeneration'=>0); - - -foreach ($myTmpObjects as $myTmpObjectKey => $myTmpObjectArray) { - if ($myTmpObjectKey == 'MyObject') { - continue; - } - if ($myTmpObjectArray['includerefgeneration']) { - /* - * Orders Numbering model - */ - $setupnotempty++; - - print load_fiche_titre($langs->trans("NumberingModules", $myTmpObjectKey), '', ''); - - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''."\n"; - - clearstatcache(); - - foreach ($dirmodels as $reldir) { - $dir = dol_buildpath($reldir."core/modules/".$moduledir); - - if (is_dir($dir)) { - $handle = opendir($dir); - if (is_resource($handle)) { - while (($file = readdir($handle)) !== false) { - if (strpos($file, 'mod_'.strtolower($myTmpObjectKey).'_') === 0 && substr($file, dol_strlen($file) - 3, 3) == 'php') { - $file = substr($file, 0, dol_strlen($file) - 4); - - require_once $dir.'/'.$file.'.php'; - - $module = new $file($db); - - // Show modules according to features level - if ($module->version == 'development' && getDolGlobalInt('MAIN_FEATURES_LEVEL') < 2) { - continue; - } - if ($module->version == 'experimental' && getDolGlobalInt('MAIN_FEATURES_LEVEL') < 1) { - continue; - } - - if ($module->isEnabled()) { - dol_include_once('/'.$moduledir.'/class/'.strtolower($myTmpObjectKey).'.class.php'); - - print ''; - - // Show example of numbering model - print ''."\n"; - - print ''; - - $mytmpinstance = new $myTmpObjectKey($db); - $mytmpinstance->initAsSpecimen(); - - // Info - $htmltooltip = ''; - $htmltooltip .= ''.$langs->trans("Version").': '.$module->getVersion().'
'; - - $nextval = $module->getNextValue($mytmpinstance); - if ("$nextval" != $langs->trans("NotAvailable")) { // Keep " on nextval - $htmltooltip .= ''.$langs->trans("NextValue").': '; - if ($nextval) { - if (preg_match('/^Error/', $nextval) || $nextval == 'NotConfigured') { - $nextval = $langs->trans($nextval); - } - $htmltooltip .= $nextval.'
'; - } else { - $htmltooltip .= $langs->trans($module->error).'
'; - } - } - - print ''; - - print "\n"; - } - } - } - closedir($handle); - } - } - } - print "
'.$langs->trans("Name").''.$langs->trans("Description").''.$langs->trans("Example").''.$langs->trans("Status").''.$langs->trans("ShortInfo").'
'.$module->name."\n"; - print $module->info($langs); - print ''; - $tmp = $module->getExample(); - if (preg_match('/^Error/', $tmp)) { - $langs->load("errors"); - print '
'.$langs->trans($tmp).'
'; - } elseif ($tmp == 'NotConfigured') { - print $langs->trans($tmp); - } else { - print $tmp; - } - print '
'; - $constforvar = 'WEBHOOK_'.strtoupper($myTmpObjectKey).'_ADDON'; - if (getDolGlobalString($constforvar) == $file) { - print img_picto($langs->trans("Activated"), 'switch_on'); - } else { - print ''; - print img_picto($langs->trans("Disabled"), 'switch_off'); - print ''; - } - print ''; - print $form->textwithpicto('', $htmltooltip, 1, 0); - print '

\n"; - } - - if ($myTmpObjectArray['includedocgeneration']) { - /* - * Document templates generators - */ - $setupnotempty++; - $type = strtolower($myTmpObjectKey); - - print load_fiche_titre($langs->trans("DocumentModules", $myTmpObjectKey), '', ''); - - // Load array def with activated templates - $def = array(); - $sql = "SELECT nom"; - $sql .= " FROM ".MAIN_DB_PREFIX."document_model"; - $sql .= " WHERE type = '".$db->escape($type)."'"; - $sql .= " AND entity = ".$conf->entity; - $resql = $db->query($sql); - if ($resql) { - $i = 0; - $num_rows = $db->num_rows($resql); - while ($i < $num_rows) { - $array = $db->fetch_array($resql); - array_push($def, $array[0]); - $i++; - } - } else { - dol_print_error($db); - } - - print "\n"; - print "\n"; - print ''; - print ''; - print '\n"; - print '\n"; - print ''; - print ''; - print "\n"; - - clearstatcache(); - - foreach ($dirmodels as $reldir) { - foreach (array('', '/doc') as $valdir) { - $realpath = $reldir."core/modules/".$moduledir.$valdir; - $dir = dol_buildpath($realpath); - - if (is_dir($dir)) { - $handle = opendir($dir); - if (is_resource($handle)) { - while (($file = readdir($handle)) !== false) { - $filelist[] = $file; - } - closedir($handle); - arsort($filelist); - - foreach ($filelist as $file) { - if (preg_match('/\.modules\.php$/i', $file) && preg_match('/^(pdf_|doc_)/', $file)) { - if (file_exists($dir.'/'.$file)) { - $name = substr($file, 4, dol_strlen($file) - 16); - $classname = substr($file, 0, dol_strlen($file) - 12); - - require_once $dir.'/'.$file; - $module = new $classname($db); - - $modulequalified = 1; - if ($module->version == 'development' && getDolGlobalInt('MAIN_FEATURES_LEVEL') < 2) { - $modulequalified = 0; - } - if ($module->version == 'experimental' && getDolGlobalInt('MAIN_FEATURES_LEVEL') < 1) { - $modulequalified = 0; - } - - if ($modulequalified) { - print ''; - - // Active - if (in_array($name, $def)) { - print ''; - } else { - print '"; - } - - // Default - print ''; - - // Info - $htmltooltip = ''.$langs->trans("Name").': '.$module->name; - $htmltooltip .= '
'.$langs->trans("Type").': '.($module->type ? $module->type : $langs->trans("Unknown")); - if ($module->type == 'pdf') { - $htmltooltip .= '
'.$langs->trans("Width").'/'.$langs->trans("Height").': '.$module->page_largeur.'/'.$module->page_hauteur; - } - $htmltooltip .= '
'.$langs->trans("Path").': '.preg_replace('/^\//', '', $realpath).'/'.$file; - - $htmltooltip .= '

'.$langs->trans("FeaturesSupported").':'; - $htmltooltip .= '
'.$langs->trans("Logo").': '.yn($module->option_logo, 1, 1); - $htmltooltip .= '
'.$langs->trans("MultiLanguage").': '.yn($module->option_multilang, 1, 1); - - print ''; - - // Preview - print ''; - - print "\n"; - } - } - } - } - } - } - } - } - - print '
'.$langs->trans("Name").''.$langs->trans("Description").''.$langs->trans("Status")."'.$langs->trans("Default")."'.$langs->trans("ShortInfo").''.$langs->trans("Preview").'
'; - print(empty($module->name) ? $name : $module->name); - print "\n"; - if (method_exists($module, 'info')) { - print $module->info($langs); - } else { - print $module->description; - } - print ''."\n"; - print ''; - print img_picto($langs->trans("Enabled"), 'switch_on'); - print ''; - print ''."\n"; - print 'scandir).'&label='.urlencode($module->name).'">'.img_picto($langs->trans("Disabled"), 'switch_off').''; - print "'; - $constforvar = 'WEBHOOK_'.strtoupper($myTmpObjectKey).'_ADDON'; - if (getDolGlobalString($constforvar) == $name) { - //print img_picto($langs->trans("Default"), 'on'); - // Even if choice is the default value, we allow to disable it. Replace this with previous line if you need to disable unset - print 'scandir).'&label='.urlencode($module->name).'&type='.urlencode($type).'" alt="'.$langs->trans("Disable").'">'.img_picto($langs->trans("Enabled"), 'on').''; - } else { - print 'scandir).'&label='.urlencode($module->name).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"), 'off').''; - } - print ''; - print $form->textwithpicto('', $htmltooltip, 1, 0); - print ''; - if ($module->type == 'pdf') { - print ''.img_object($langs->trans("Preview"), 'pdf').''; - } else { - print img_object($langs->trans("PreviewNotAvailable"), 'generic'); - } - print '
'; - } -} - if (empty($setupnotempty)) { print '
'.$langs->trans("NothingToSetup"); } diff --git a/htdocs/admin/website.php b/htdocs/admin/website.php index ade787ae727..b517491d14c 100644 --- a/htdocs/admin/website.php +++ b/htdocs/admin/website.php @@ -49,10 +49,10 @@ $actl[0] = img_picto($langs->trans("Disabled"), 'switch_off', 'class="size15x"') $actl[1] = img_picto($langs->trans("Activated"), 'switch_on', 'class="size15x"'); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -238,7 +238,7 @@ if (GETPOST('actionadd', 'alpha') || GETPOST('actionmodify', 'alpha')) { $db->begin(); $website = new Website($db); - $rowid = GETPOST('rowid', 'int'); + $rowid = GETPOSTINT('rowid'); $website->fetch($rowid); // Modify entry diff --git a/htdocs/admin/website_options.php b/htdocs/admin/website_options.php index 215ac230493..8066ac8604d 100644 --- a/htdocs/admin/website_options.php +++ b/htdocs/admin/website_options.php @@ -40,10 +40,10 @@ $confirm = GETPOST('confirm', 'alpha'); $backtopage = GETPOST('backtopage', 'alpha'); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 diff --git a/htdocs/admin/workflow.php b/htdocs/admin/workflow.php index 41b77c4e7a0..d68b7c054ef 100644 --- a/htdocs/admin/workflow.php +++ b/htdocs/admin/workflow.php @@ -3,6 +3,7 @@ * Copyright (C) 2004 Eric Seigne * Copyright (C) 2005-2021 Laurent Destailleur * Copyright (C) 2005-2012 Regis Houssin + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -60,96 +61,96 @@ clearstatcache(); $workflowcodes = array( // Automatic creation - 'WORKFLOW_PROPAL_AUTOCREATE_ORDER'=>array( - 'family'=>'create', - 'position'=>10, - 'enabled'=>(isModEnabled("propal") && isModEnabled('commande')), - 'picto'=>'order' + 'WORKFLOW_PROPAL_AUTOCREATE_ORDER' => array( + 'family' => 'create', + 'position' => 10, + 'enabled' => (isModEnabled("propal") && isModEnabled('order')), + 'picto' => 'order' ), - 'WORKFLOW_ORDER_AUTOCREATE_INVOICE'=>array( - 'family'=>'create', - 'position'=>20, - 'enabled'=>(isModEnabled('commande') && isModEnabled('facture')), - 'picto'=>'bill' + 'WORKFLOW_ORDER_AUTOCREATE_INVOICE' => array( + 'family' => 'create', + 'position' => 20, + 'enabled' => (isModEnabled('order') && isModEnabled('invoice')), + 'picto' => 'bill' ), 'WORKFLOW_TICKET_CREATE_INTERVENTION' => array( - 'family'=>'create', - 'position'=>25, - 'enabled'=>(isModEnabled('ticket') && isModEnabled('ficheinter')), - 'picto'=>'ticket' + 'family' => 'create', + 'position' => 25, + 'enabled' => (isModEnabled('ticket') && isModEnabled('intervention')), + 'picto' => 'ticket' ), - 'separator1'=>array('family'=>'separator', 'position'=>25, 'title'=>'', 'enabled'=>((isModEnabled("propal") && isModEnabled('commande')) || (isModEnabled('commande') && isModEnabled('facture')) || (isModEnabled('ticket') && isModEnabled('ficheinter')))), + 'separator1' => array('family' => 'separator', 'position' => 25, 'title' => '', 'enabled' => ((isModEnabled("propal") && isModEnabled('order')) || (isModEnabled('order') && isModEnabled('invoice')) || (isModEnabled('ticket') && isModEnabled('intervention')))), // Automatic classification of proposal - 'WORKFLOW_ORDER_CLASSIFY_BILLED_PROPAL'=>array( - 'family'=>'classify_proposal', - 'position'=>30, - 'enabled'=>(isModEnabled("propal") && isModEnabled('commande')), - 'picto'=>'propal', - 'warning'=>'' + 'WORKFLOW_ORDER_CLASSIFY_BILLED_PROPAL' => array( + 'family' => 'classify_proposal', + 'position' => 30, + 'enabled' => (isModEnabled("propal") && isModEnabled('order')), + 'picto' => 'propal', + 'warning' => '' ), - 'WORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL'=>array( - 'family'=>'classify_proposal', - 'position'=>31, - 'enabled'=>(isModEnabled("propal") && isModEnabled('facture')), - 'picto'=>'propal', - 'warning'=>'' + 'WORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL' => array( + 'family' => 'classify_proposal', + 'position' => 31, + 'enabled' => (isModEnabled("propal") && isModEnabled('invoice')), + 'picto' => 'propal', + 'warning' => '' ), // Automatic classification of order - 'WORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING'=>array( // when shipping validated - 'family'=>'classify_order', - 'position'=>40, - 'enabled'=>(isModEnabled("expedition") && isModEnabled('commande')), - 'picto'=>'order' + 'WORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING' => array( // when shipping validated + 'family' => 'classify_order', + 'position' => 40, + 'enabled' => (isModEnabled("shipping") && isModEnabled('order')), + 'picto' => 'order' ), - 'WORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING_CLOSED'=>array( // when shipping closed - 'family'=>'classify_order', - 'position'=>41, - 'enabled'=>(isModEnabled("expedition") && isModEnabled('commande')), - 'picto'=>'order' + 'WORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING_CLOSED' => array( // when shipping closed + 'family' => 'classify_order', + 'position' => 41, + 'enabled' => (isModEnabled("shipping") && isModEnabled('order')), + 'picto' => 'order' ), - 'WORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER'=>array( - 'family'=>'classify_order', - 'position'=>42, - 'enabled'=>(isModEnabled('facture') && isModEnabled('commande')), - 'picto'=>'order', - 'warning'=>'' + 'WORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER' => array( + 'family' => 'classify_order', + 'position' => 42, + 'enabled' => (isModEnabled('invoice') && isModEnabled('order')), + 'picto' => 'order', + 'warning' => '' ), // For this option, if module invoice is disabled, it does not exists, so "Classify billed" for order must be done manually from order card. // Automatic classification supplier proposal - 'WORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL'=>array( - 'family'=>'classify_supplier_proposal', - 'position'=>60, - 'enabled'=>(isModEnabled('supplier_proposal') && (isModEnabled("supplier_order") || isModEnabled("supplier_invoice"))), - 'picto'=>'supplier_proposal', - 'warning'=>'' + 'WORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL' => array( + 'family' => 'classify_supplier_proposal', + 'position' => 60, + 'enabled' => (isModEnabled('supplier_proposal') && (isModEnabled("supplier_order") || isModEnabled("supplier_invoice"))), + 'picto' => 'supplier_proposal', + 'warning' => '' ), // Automatic classification supplier order - 'WORKFLOW_ORDER_CLASSIFY_RECEIVED_RECEPTION'=>array( - 'family'=>'classify_supplier_order', - 'position'=>63, - 'enabled'=>(getDolGlobalString('MAIN_FEATURES_LEVEL') && isModEnabled("reception") && isModEnabled('supplier_order')), - 'picto'=>'supplier_order', - 'warning'=>'' + 'WORKFLOW_ORDER_CLASSIFY_RECEIVED_RECEPTION' => array( + 'family' => 'classify_supplier_order', + 'position' => 63, + 'enabled' => (getDolGlobalString('MAIN_FEATURES_LEVEL') && isModEnabled("reception") && isModEnabled('supplier_order')), + 'picto' => 'supplier_order', + 'warning' => '' ), - 'WORKFLOW_ORDER_CLASSIFY_RECEIVED_RECEPTION_CLOSED'=>array( - 'family'=>'classify_supplier_order', - 'position'=>64, - 'enabled'=>(getDolGlobalString('MAIN_FEATURES_LEVEL') && isModEnabled("reception") && isModEnabled('supplier_order')), - 'picto'=>'supplier_order', - 'warning'=>'' + 'WORKFLOW_ORDER_CLASSIFY_RECEIVED_RECEPTION_CLOSED' => array( + 'family' => 'classify_supplier_order', + 'position' => 64, + 'enabled' => (getDolGlobalString('MAIN_FEATURES_LEVEL') && isModEnabled("reception") && isModEnabled('supplier_order')), + 'picto' => 'supplier_order', + 'warning' => '' ), - 'WORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER'=>array( - 'family'=>'classify_supplier_order', - 'position'=>65, - 'enabled'=>(isModEnabled("supplier_order") || isModEnabled("supplier_invoice")), - 'picto'=>'supplier_order', - 'warning'=>'' + 'WORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER' => array( + 'family' => 'classify_supplier_order', + 'position' => 65, + 'enabled' => (isModEnabled("supplier_order") || isModEnabled("supplier_invoice")), + 'picto' => 'supplier_order', + 'warning' => '' ), // Automatic classification shipping @@ -157,7 +158,7 @@ $workflowcodes = array( 'WORKFLOW_SHIPPING_CLASSIFY_CLOSED_INVOICE' => array( 'family' => 'classify_shipping', 'position' => 90, - 'enabled' => isModEnabled("expedition") && isModEnabled("facture"), + 'enabled' => isModEnabled("shipping") && isModEnabled("invoice"), 'picto' => 'shipment', 'deprecated' => 1 ), @@ -166,7 +167,7 @@ $workflowcodes = array( 'WORKFLOW_SHIPPING_CLASSIFY_BILLED_INVOICE' => array( 'family' => 'classify_shipping', 'position' => 91, - 'enabled' => isModEnabled("expedition") && isModEnabled("facture") && getDolGlobalString('WORKFLOW_BILL_ON_SHIPMENT') !== '0', + 'enabled' => isModEnabled("shipping") && isModEnabled("invoice") && getDolGlobalString('WORKFLOW_BILL_ON_SHIPMENT') !== '0', 'picto' => 'shipment' ), @@ -188,7 +189,7 @@ $workflowcodes = array( ), - 'separator2'=>array('family'=>'separator', 'position'=>400, 'enabled' => (isModEnabled('ticket') && isModEnabled('contract'))), + 'separator2' => array('family' => 'separator', 'position' => 400, 'enabled' => (isModEnabled('ticket') && isModEnabled('contract'))), // Automatic link ticket -> contract 'WORKFLOW_TICKET_LINK_CONTRACT' => array( @@ -212,9 +213,16 @@ if (!empty($conf->modules_parts['workflow']) && is_array($conf->modules_parts['w } // remove not available workflows (based on activated modules and global defined keys) -$workflowcodes = array_filter($workflowcodes, function ($var) { - return $var['enabled']; -}); +$workflowcodes = array_filter( + $workflowcodes, + /** + * @param array{enabled:int<0,1>} $var + * @return bool + */ + static function ($var) { + return (bool) $var['enabled']; + } +); diff --git a/htdocs/admin/workstation.php b/htdocs/admin/workstation.php index de2e7de2e74..11d0b08e7f3 100644 --- a/htdocs/admin/workstation.php +++ b/htdocs/admin/workstation.php @@ -1,6 +1,7 @@ * Copyright (C) 2020 Gauthier VERDOL + * Copyright (C) 2024 MDW * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -50,6 +51,15 @@ if (!$user->admin) { accessforbidden(); } +$moduledir = 'workstation'; +$myTmpObjects = array(); +$myTmpObjects['workstation'] = array('label' => 'Workstation', 'includerefgeneration' => 1, 'includedocgeneration' => 0, 'class' => 'Workstation'); + +$tmpobjectkey = GETPOST('object', 'aZ09'); +if ($tmpobjectkey && !array_key_exists($tmpobjectkey, $myTmpObjects)) { + accessforbidden('Bad value for object. Hack attempt ?'); +} + /* * Actions @@ -76,26 +86,24 @@ if ($action == 'updateMask') { } } elseif ($action == 'specimen') { $modele = GETPOST('module', 'alpha'); - $tmpobjectkey = GETPOST('object'); - $tmpobject = new $tmpobjectkey($db); + $nameofclass = ucfirst($tmpobjectkey); + $tmpobject = new $nameofclass($db); $tmpobject->initAsSpecimen(); // Search template files $file = ''; $classname = ''; - $filefound = 0; $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']); foreach ($dirmodels as $reldir) { $file = dol_buildpath($reldir."core/modules/workstation/doc/pdf_".$modele."_".strtolower($tmpobjectkey).".modules.php", 0); if (file_exists($file)) { - $filefound = 1; $classname = "pdf_".$modele; break; } } - if ($filefound) { + if ($classname !== '') { require_once $file; $module = new $classname($db); @@ -115,8 +123,6 @@ if ($action == 'updateMask') { // Activate a model $ret = addDocumentModel($value, $type, $label, $scandir); } elseif ($action == 'del') { - $tmpobjectkey = GETPOST('object'); - $ret = delDocumentModel($value, $type); if ($ret > 0) { $constforval = strtoupper($tmpobjectkey).'_ADDON_PDF'; @@ -126,7 +132,6 @@ if ($action == 'updateMask') { } } elseif ($action == 'setdoc') { // Set default model - $tmpobjectkey = GETPOST('object'); $constforval = strtoupper($tmpobjectkey).'_ADDON_PDF'; if (dolibarr_set_const($db, $constforval, $value, 'chaine', 0, '', $conf->entity)) { // The constant that was read before the new set @@ -142,7 +147,6 @@ if ($action == 'updateMask') { } elseif ($action == 'setmod') { // TODO Check if numbering module chosen can be activated // by calling method canBeActivated - $tmpobjectkey = GETPOST('object'); $constforval = 'WORKSTATION_'.strtoupper($tmpobjectkey)."_ADDON"; dolibarr_set_const($db, $constforval, $value, 'chaine', 0, '', $conf->entity); } @@ -220,11 +224,6 @@ if ($action == 'edit') { } -$moduledir = 'workstation'; -$myTmpObjects = array(); -$myTmpObjects['workstation'] = array('includerefgeneration'=>1, 'includedocgeneration'=>0); - - foreach ($myTmpObjects as $myTmpObjectKey => $myTmpObjectArray) { if ($myTmpObjectKey == 'MyObject') { continue; @@ -385,6 +384,7 @@ foreach ($myTmpObjects as $myTmpObjectKey => $myTmpObjectArray) { if (is_dir($dir)) { $handle = opendir($dir); if (is_resource($handle)) { + $filelist = array(); while (($file = readdir($handle)) !== false) { $filelist[] = $file; } diff --git a/htdocs/ai/admin/custom_prompt.php b/htdocs/ai/admin/custom_prompt.php index 56c29fa0e5e..83506888d74 100644 --- a/htdocs/ai/admin/custom_prompt.php +++ b/htdocs/ai/admin/custom_prompt.php @@ -1,6 +1,7 @@ * Copyright (C) 2022 Alice Adminson + * Copyright (C) 2024 Frédéric France * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -38,11 +39,6 @@ if (empty($action)) { $action = 'edit'; } -$value = GETPOST('value', 'alpha'); -$label = GETPOST('label', 'alpha'); -$scandir = GETPOST('scan_dir', 'alpha'); -$type = 'myobject'; - $error = 0; $setupnotempty = 0; @@ -71,8 +67,12 @@ $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']); // List of AI features $arrayofaifeatures = array( - 'emailing' => 'Emailing', - 'imagegeneration' => 'ImageGeneration' + 'textgeneration' => array('label' => 'TextGeneration', 'picto'=>'', 'status'=>'development'), + 'imagegeneration' => array('label' => 'ImageGeneration', 'picto'=>'', 'status'=>'notused'), + 'videogeneration' => array('label' => 'VideoGeneration', 'picto'=>'', 'status'=>'notused'), + 'transcription' => array('label' => 'Transcription', 'picto'=>'', 'status'=>'notused'), + 'translation' => array('label' => 'Translation', 'picto'=>'', 'status'=>'notused'), + 'audiotext' => array('label' => 'AudioText', 'picto'=>'', 'status'=>'notused') ); @@ -80,12 +80,12 @@ $arrayofaifeatures = array( * Actions */ -$modulename = GETPOST('module_name'); -$pre_prompt = GETPOST('prePrompt', 'alpha'); -$post_prompt = GETPOST('postPrompt', 'alpha'); +$functioncode = GETPOST('functioncode', 'alpha'); +$pre_prompt = GETPOST('prePrompt'); +$post_prompt = GETPOST('postPrompt'); // get all configs in const AI -$currentConfigurationsJson = dolibarr_get_const($db, 'AI_CONFIGURATIONS_PROMPT', $conf->entity); +$currentConfigurationsJson = getDolGlobalString('AI_CONFIGURATIONS_PROMPT'); $currentConfigurations = json_decode($currentConfigurationsJson, true); if ($action == 'update' && GETPOST('cancel')) { @@ -93,7 +93,7 @@ if ($action == 'update' && GETPOST('cancel')) { } if ($action == 'update' && !GETPOST('cancel')) { $error = 0; - if (empty($modulename)) { + if (empty($functioncode)) { $error++; setEventMessages($langs->trans('ErrorInputRequired'), null, 'errors'); } @@ -101,12 +101,12 @@ if ($action == 'update' && !GETPOST('cancel')) { $currentConfigurations = []; } - if (empty($modulename) || (empty($pre_prompt) && empty($post_prompt))) { - if (isset($currentConfigurations[$modulename])) { - unset($currentConfigurations[$modulename]); + if (empty($functioncode) || (empty($pre_prompt) && empty($post_prompt))) { + if (isset($currentConfigurations[$functioncode])) { + unset($currentConfigurations[$functioncode]); } } else { - $currentConfigurations[$modulename] = [ + $currentConfigurations[$functioncode] = [ 'prePrompt' => $pre_prompt, 'postPrompt' => $post_prompt, ]; @@ -127,6 +127,46 @@ if ($action == 'update' && !GETPOST('cancel')) { $action = 'edit'; } +if ($action == 'updatePrompts') { + $key = GETPOST('key', 'alpha'); + + $currentConfigurations[$key] = [ + 'prePrompt' => $pre_prompt, + 'postPrompt' => $post_prompt, + ]; + + $newConfigurationsJson = json_encode($currentConfigurations, JSON_UNESCAPED_UNICODE); + $result = dolibarr_set_const($db, 'AI_CONFIGURATIONS_PROMPT', $newConfigurationsJson, 'chaine', 0, '', $conf->entity); + if (!$error) { + $action = ''; + if ($result) { + header("Location: ".$_SERVER['PHP_SELF']); + setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); + exit; + } else { + setEventMessages($langs->trans("ErrorUpdating"), null, 'errors'); + } + } +} + +if ($action == 'confirm_deleteproperty' && GETPOST('confirm') == 'yes') { + $key = GETPOST('key', 'alpha'); + + if (isset($currentConfigurations[$key])) { + unset($currentConfigurations[$key]); + + $newConfigurationsJson = json_encode($currentConfigurations, JSON_UNESCAPED_UNICODE); + $res = dolibarr_set_const($db, 'AI_CONFIGURATIONS_PROMPT', $newConfigurationsJson, 'chaine', 0, '', $conf->entity); + if ($res) { + header("Location: ".$_SERVER['PHP_SELF']); + setEventMessages($langs->trans("RecordDeleted"), null, 'mesgs'); + exit; + } else { + setEventMessages($langs->trans("NoRecordDeleted"), null, 'errors'); + } + } +} + /* * View @@ -153,11 +193,25 @@ $newbutton = ''; print load_fiche_titre($langs->trans("AIPromptForFeatures"), $newbutton, ''); +if ($action == 'deleteproperty') { + $formconfirm = $form->formconfirm( + $_SERVER["PHP_SELF"].'?key='.urlencode(GETPOST('key', 'alpha')), + $langs->trans('Delete'), + $langs->trans('ConfirmDeleteSetup', GETPOST('key', 'alpha')), + 'confirm_deleteproperty', + '', + 0, + 1 + ); + print $formconfirm; +} + if ($action == 'edit') { - $out .= ''; + $out = ''; $out .= ''; $out .= ''; + $out .= ''; $out .= ''; $out .= ''; @@ -172,10 +226,12 @@ if ($action == 'edit') { $out .= ''; $out .= ''; $out .= ''; @@ -200,7 +256,7 @@ if ($action == 'edit') { $out .= 'pre-Prompt'; $out .= ''; $out .= ''; $out .= ''; $out .= ''; @@ -208,14 +264,14 @@ if ($action == 'edit') { $out .= 'Post-prompt'; $out .= ''; $out .= ''; $out .= ''; $out .= ''; $out .= '
'; // Combo list of AI features - $out .= ''; $out .= ''; foreach ($arrayofaifeatures as $key => $val) { - $out .= ''; + $labelhtml = $langs->trans($arrayofaifeatures[$key]['label']).($arrayofaifeatures[$key]['status'] == 'notused' ? ' ('.$langs->trans("NotUsed").')' : ""); + $labeltext = $langs->trans($arrayofaifeatures[$key]['label']); + $out .= ''; } /* $sql = "SELECT name FROM llx_const WHERE name LIKE 'MAIN_MODULE_%' AND value = '1'"; @@ -191,7 +247,7 @@ if ($action == 'edit') { } */ $out .= ''; - $out .= ajax_combobox("module_select"); + $out .= ajax_combobox("functioncode"); $out .= '
'; - $out .= ''; + $out .= ''; $out .= '
'; - $out .= ''; + $out .= ''; $out .= '
'; $out .= $form->buttonsSaveCancel("Add", ""); - + $out .= ''; $out .= '


'; print $out; @@ -223,39 +279,54 @@ if ($action == 'edit') { if ($action == 'edit' || $action == 'create') { - $out = ''; - foreach ($currentConfigurations as $key => $config) { - if (!preg_match('/^[a-z]+$/i', $key)) { // Ignore empty saved setup - continue; - } - $out .= ''; - $out .= ''; - $out .= ''; - $out .= ''; - $out .= ''; - $out .= ''; - $out .= ''; - $out .= ''; - $out .= ''; - $out .= ''; - $out .= ''; - $out .= ''; - $out .= ''; - $out .= ''; - $out .= ''; - } - $out .= ''; - $out .= '
'.$langs->trans($arrayofaifeatures[$key]).'
'; - $out .= 'pre-Prompt'; - $out .= ''; - $out .= ''; - $out .= '
'; - $out .= 'Post-prompt'; - $out .= ''; - $out .= ''; - $out .= '
'; + $out = ''; + + if (!empty($currentConfigurations)) { + $out = ''; + foreach ($currentConfigurations as $key => $config) { + if (!empty($key) && !preg_match('/^[a-z]+$/i', $key)) { // Ignore empty saved setup + continue; + } + + $out .= ''; + $out .= ''; + $out .= ''; + $out .= ''; + $out .= ''; + $out .= ''; + $out .= ''; + + $out .= ''; + $out .= ''; + $out .= ''; + $out .= ''; + $out .= ''; + $out .= ''; + $out .= ''; + $out .= ''; + $out .= ''; + $out .= ''; + $out .= ''; + $out .= ''; + $out .= ''; + } + $out .= ''; + $out .= '
'.$arrayofaifeatures[$key]['picto'].' '.$langs->trans($arrayofaifeatures[$key]['label']); + $out .= ''.img_edit().''; + $out .= ''.img_delete().''; + $out .= '
'; + $out .= 'pre-Prompt'; + $out .= ''; + $out .= ''; + $out .= '
'; + $out .= 'Post-prompt'; + $out .= ''; + $out .= ''; + $out .= '
'; + + $out .= '
'; + } - $out .= ''; $out .= ""; print $out; diff --git a/htdocs/ai/admin/setup.php b/htdocs/ai/admin/setup.php index 4fdb1f02435..e74f3c3b5d9 100644 --- a/htdocs/ai/admin/setup.php +++ b/htdocs/ai/admin/setup.php @@ -1,6 +1,7 @@ * Copyright (C) 2022 Alice Adminson + * Copyright (C) 2024 MDW * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -61,16 +62,21 @@ if (!class_exists('FormSetup')) { $formSetup = new FormSetup($db); +// List all available IA $arrayofia = array('chatgpt'); foreach ($arrayofia as $ia) { // Setup conf AI_PUBLIC_INTERFACE_TOPIC - $item = $formSetup->newItem('AI_KEY_API_'.strtoupper($ia)); + /*$item = $formSetup->newItem('AI_API_'.strtoupper($ia).'_ENDPOINT'); // Name of constant must end with _KEY so it is encrypted when saved into database. $item->defaultFieldValue = ''; + $item->cssClass = 'minwidth500';*/ + + $item = $formSetup->newItem('AI_API_'.strtoupper($ia).'_KEY'); // Name of constant must end with _KEY so it is encrypted when saved into database. + $item->defaultFieldValue = ''; + $item->cssClass = 'minwidth500'; } - -$setupnotempty =+ count($formSetup->items); +$setupnotempty = + count($formSetup->items); $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']); @@ -82,105 +88,6 @@ $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']); include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php'; -if ($action == 'updateMask') { - $maskconst = GETPOST('maskconst', 'aZ09'); - $maskvalue = GETPOST('maskvalue', 'alpha'); - - if ($maskconst && preg_match('/_MASK$/', $maskconst)) { - $res = dolibarr_set_const($db, $maskconst, $maskvalue, 'chaine', 0, '', $conf->entity); - if (!($res > 0)) { - $error++; - } - } - - if (!$error) { - setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); - } else { - setEventMessages($langs->trans("Error"), null, 'errors'); - } -} elseif ($action == 'specimen') { - $modele = GETPOST('module', 'alpha'); - $tmpobjectkey = GETPOST('object'); - - $tmpobject = new $tmpobjectkey($db); - $tmpobject->initAsSpecimen(); - - // Search template files - $file = ''; - $classname = ''; - $filefound = 0; - $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']); - foreach ($dirmodels as $reldir) { - $file = dol_buildpath($reldir."core/modules/ai/doc/pdf_".$modele."_".strtolower($tmpobjectkey).".modules.php", 0); - if (file_exists($file)) { - $filefound = 1; - $classname = "pdf_".$modele."_".strtolower($tmpobjectkey); - break; - } - } - - if ($filefound) { - require_once $file; - - $module = new $classname($db); - - if ($module->write_file($tmpobject, $langs) > 0) { - header("Location: ".DOL_URL_ROOT."/document.php?modulepart=bookcal-".strtolower($tmpobjectkey)."&file=SPECIMEN.pdf"); - return; - } else { - setEventMessages($module->error, null, 'errors'); - dol_syslog($module->error, LOG_ERR); - } - } else { - setEventMessages($langs->trans("ErrorModuleNotFound"), null, 'errors'); - dol_syslog($langs->trans("ErrorModuleNotFound"), LOG_ERR); - } -} elseif ($action == 'setmod') { - // TODO Check if numbering module chosen can be activated by calling method canBeActivated - $tmpobjectkey = GETPOST('object'); - if (!empty($tmpobjectkey)) { - $constforval = 'Ai_'.strtoupper($tmpobjectkey)."_ADDON"; - dolibarr_set_const($db, $constforval, $value, 'chaine', 0, '', $conf->entity); - } -} elseif ($action == 'set') { - // Activate a model - $ret = addDocumentModel($value, $type, $label, $scandir); -} elseif ($action == 'del') { - $ret = delDocumentModel($value, $type); - if ($ret > 0) { - $tmpobjectkey = GETPOST('object'); - if (!empty($tmpobjectkey)) { - $constforval = 'Ai_'.strtoupper($tmpobjectkey).'_ADDON_PDF'; - if (getDolGlobalString($constforval) == "$value") { - dolibarr_del_const($db, $constforval, $conf->entity); - } - } - } -} elseif ($action == 'setdoc') { - // Set or unset default model - $tmpobjectkey = GETPOST('object'); - if (!empty($tmpobjectkey)) { - $constforval = 'Ai_'.strtoupper($tmpobjectkey).'_ADDON_PDF'; - if (dolibarr_set_const($db, $constforval, $value, 'chaine', 0, '', $conf->entity)) { - // The constant that was read before the new set - // We therefore requires a variable to have a coherent view - $conf->global->$constforval = $value; - } - - // We disable/enable the document template (into llx_document_model table) - $ret = delDocumentModel($value, $type); - if ($ret > 0) { - $ret = addDocumentModel($value, $type, $label, $scandir); - } - } -} elseif ($action == 'unsetdoc') { - $tmpobjectkey = GETPOST('object'); - if (!empty($tmpobjectkey)) { - $constforval = 'Ai_'.strtoupper($tmpobjectkey).'_ADDON_PDF'; - dolibarr_del_const($db, $constforval, $conf->entity); - } -} - $action = 'edit'; @@ -188,45 +95,42 @@ $action = 'edit'; * View */ - $form = new Form($db); +$form = new Form($db); - $help_url = ''; - $title = "AiSetup"; +$help_url = ''; +$title = "AiSetup"; - llxHeader('', $langs->trans($title), $help_url); +llxHeader('', $langs->trans($title), $help_url); - // Subheader - $linkback = ''.$langs->trans("BackToModuleList").''; +// Subheader +$linkback = ''.$langs->trans("BackToModuleList").''; - print load_fiche_titre($langs->trans($title), $linkback, 'title_setup'); +print load_fiche_titre($langs->trans($title), $linkback, 'title_setup'); - // Configuration header - $head = aiAdminPrepareHead(); - print dol_get_fiche_head($head, 'settings', $langs->trans($title), -1, "fa-microchip"); - - // Setup page goes here - //echo ''.$langs->trans("AiSetupPage").'

'; +// Configuration header +$head = aiAdminPrepareHead(); +print dol_get_fiche_head($head, 'settings', $langs->trans($title), -1, "fa-microchip"); if ($action == 'edit') { - print $formSetup->generateOutput(true); - print '
'; + print $formSetup->generateOutput(true); + print '
'; } elseif (!empty($formSetup->items)) { print $formSetup->generateOutput(); print '
'; print ''.$langs->trans("Modify").''; print '
'; } else { - print '
'.$langs->trans("NothingToSetup"); + print '
'.$langs->trans("NothingToSetup"); } if (empty($setupnotempty)) { - print '
'.$langs->trans("NothingToSetup"); + print '
'.$langs->trans("NothingToSetup"); } - // Page end - print dol_get_fiche_end(); +// Page end +print dol_get_fiche_end(); - llxFooter(); - $db->close(); +llxFooter(); +$db->close(); diff --git a/htdocs/ai/ajax/generate_content.php b/htdocs/ai/ajax/generate_content.php index 34d7f196753..ad854743b20 100644 --- a/htdocs/ai/ajax/generate_content.php +++ b/htdocs/ai/ajax/generate_content.php @@ -45,6 +45,11 @@ require '../../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/ai/class/ai.class.php'; + +/* + * View + */ + top_httphead(); //get data from AJAX @@ -54,14 +59,24 @@ $jsonData = json_decode($rawData, true); if (is_null($jsonData)) { dol_print_error('data with format JSON valide.'); } -$chatGPT = new Ai($db); +$ai = new Ai($db); +$function = 'textgeneration'; $instructions = dol_string_nohtmltag($jsonData['instructions'], 1, 'UTF-8'); +$format = empty($jsonData['instructions']) ? '' : $jsonData['instructions']; -$generatedContent = $chatGPT->generateContent($instructions, 'gpt-3.5-turbo', 'MAILING'); +$generatedContent = $ai->generateContent($instructions, 'auto', $function, $format); if (is_array($generatedContent) && $generatedContent['error']) { - print "Error : " . $generatedContent['message']; + // Output error + if (!empty($generatedContent['code']) && $generatedContent['code'] == 429) { + print "Quota or allowed period exceeded. Retry Later !"; + } elseif ($generatedContent['code'] >= 400) { + print "Error : " . $generatedContent['message']; + print '
'.$langs->trans('ErrorGoToModuleSetup').''; + } else { + print "Error returned by API call: " . $generatedContent['message']; + } } else { print $generatedContent; } diff --git a/htdocs/ai/class/ai.class.php b/htdocs/ai/class/ai.class.php index 2771c1b0e06..7b46636c411 100644 --- a/htdocs/ai/class/ai.class.php +++ b/htdocs/ai/class/ai.class.php @@ -1,9 +1,5 @@ - * Copyright (C) 2005-2016 Regis Houssin - * Copyright (C) 2012 J. Fernando Lagrange - * Copyright (C) 2015 Raphaël Doursenaud - * Copyright (C) 2023 Eric Seigne +/* Copyright (C) 2024 Laurent Destailleur * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -20,17 +16,19 @@ * or see https://www.gnu.org/ */ require_once DOL_DOCUMENT_ROOT."/core/lib/admin.lib.php"; +require_once DOL_DOCUMENT_ROOT.'/core/lib/geturl.lib.php'; + /** * Class for AI */ class Ai { - /** * @var DoliDB $db Database object */ protected $db; + /** * @var string $apiEndpoint */ @@ -50,71 +48,122 @@ class Ai public function __construct($db) { $this->db = $db; - $this->apiEndpoint = dolibarr_get_const($this->db, 'AI_API_ENDPOINT'); - $this->apiKey = dolibarr_get_const($this->db, 'AI_KEY_API_CHATGPT'); + + $this->apiKey = getDolGlobalString('AI_API_CHATGPT_KEY'); } /** * Generate response of instructions - * @param string $instructions instruction for generate content - * @param string $model model name (chat,text,image...) - * @param string $moduleName Name of module - * @return mixed $response + * + * @param string $instructions Instruction to generate content + * @param string $model Model name ('gpt-3.5-turbo', 'gpt-4-turbo', 'dall-e-3', ...) + * @param string $function Code of the feature we want to use ('textgeneration', 'transcription', 'audiotext', 'imagegeneration', 'translation') + * @param string $format Format for output ('', 'html', ...) + * @return mixed $response */ - public function generateContent($instructions, $model = 'gpt-3.5-turbo', $moduleName = 'MAILING') + public function generateContent($instructions, $model = 'auto', $function = 'textgeneration', $format = '') { - global $conf; + if (empty($this->apiKey)) { + return array('error' => true, 'message' => 'API key is no defined'); + } + + if (empty($this->apiEndpoint)) { + if ($function == 'textgeneration') { + $this->apiEndpoint = 'https://api.openai.com/v1/chat/completions'; + if ($model == 'auto') { + $model = getDolGlobalString('AI_API_CHATGPT_MODEL_TEXT', 'gpt-3.5-turbo'); + } + } + if ($function == 'imagegeneration') { + $this->apiEndpoint = 'https://api.openai.com/v1/images/generations'; + if ($model == 'auto') { + $model = getDolGlobalString('AI_API_CHATGPT_MODEL_IMAGE', 'dall-e-3'); + } + } + if ($function == 'audiotext') { + $this->apiEndpoint = 'https://api.openai.com/v1/audio/speech'; + if ($model == 'auto') { + $model = getDolGlobalString('AI_API_CHATGPT_MODEL_AUDIO', 'tts-1'); + } + } + if ($function == 'transcription') { + $this->apiEndpoint = 'https://api.openai.com/v1/audio/transcriptions'; + if ($model == 'auto') { + $model = getDolGlobalString('AI_API_CHATGPT_MODEL_TRANSCRIPT', 'whisper-1'); + } + } + if ($function == 'translation') { + $this->apiEndpoint = 'https://api.openai.com/v1/audio/translations'; + if ($model == 'auto') { + $model = getDolGlobalString('AI_API_CHATGPT_MODEL_TRANSLATE', 'whisper-1'); + } + } + } + + dol_syslog("Call API for apiEndpoint=".$this->apiEndpoint." apiKey=".substr($this->apiKey, 0, 3).'***********, model='.$model); + try { - $configurationsJson = dolibarr_get_const($this->db, 'AI_CONFIGURATIONS_PROMPT', $conf->entity); + $configurationsJson = getDolGlobalString('AI_CONFIGURATIONS_PROMPT'); $configurations = json_decode($configurationsJson, true); $prePrompt = ''; $postPrompt = ''; - if (isset($configurations[$moduleName])) { - if (isset($configurations[$moduleName]['prePrompt'])) { - $prePrompt = $configurations[$moduleName]['prePrompt']; + if (isset($configurations[$function])) { + if (isset($configurations[$function]['prePrompt'])) { + $prePrompt = $configurations[$function]['prePrompt']; } - if (isset($configurations[$moduleName]['postPrompt'])) { - $postPrompt = $configurations[$moduleName]['postPrompt']; + if (isset($configurations[$function]['postPrompt'])) { + $postPrompt = $configurations[$function]['postPrompt']; } } $fullInstructions = $prePrompt.' '.$instructions.' .'.$postPrompt; - $ch = curl_init($this->apiEndpoint); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); - curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([ + + $payload = json_encode([ 'messages' => [ ['role' => 'user', 'content' => $fullInstructions] ], 'model' => $model - ])); - curl_setopt($ch, CURLOPT_HTTPHEADER, [ + ]); + + $headers = ([ 'Authorization: Bearer ' . $this->apiKey, 'Content-Type: application/json' ]); + $response = getURLContent($this->apiEndpoint, 'POST', $payload, 1, $headers); - $response = curl_exec($ch); - if (curl_errno($ch)) { - throw new Exception('cURL error: ' . curl_error($ch)); + if (empty($response['http_code'])) { + throw new Exception('API request failed. No http received'); } - - $statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); - if ($statusCode != 200) { - throw new Exception('API request failed with status code ' . $statusCode); + if (!empty($response['http_code']) && $response['http_code'] != 200) { + throw new Exception('API request failed with status code ' . $response['http_code']); } // Decode JSON response - $decodedResponse = json_decode($response, true); + $decodedResponse = json_decode($response['content'], true); // Extraction content $generatedEmailContent = $decodedResponse['choices'][0]['message']['content']; + // If content is not HTML, we convert it into HTML + if (!dol_textishtml($generatedEmailContent)) { + $generatedEmailContent = dol_nl2br($generatedEmailContent); + } + return $generatedEmailContent; } catch (Exception $e) { - return array('error' => true, 'message' => $e->getMessage()); - } finally { - curl_close($ch); + $errormessage = $e->getMessage(); + if (!empty($response['content'])) { + $decodedResponse = json_decode($response['content'], true); + + // With OpenAI, error is into an object error into the content + if (!empty($decodedResponse['error']['message'])) { + $errormessage .= ' - '.$decodedResponse['error']['message']; + } + } + + return array('error' => true, 'message' => $errormessage, 'code' => (empty($response['http_code']) ? 0 : $response['http_code']), 'curl_error_no' => (empty($response['curl_error_no']) ? $response['curl_error_no'] : '')); } } } diff --git a/htdocs/api/admin/explorer_withredoc.php b/htdocs/api/admin/explorer_withredoc.php index 8c94e7a6f62..fa370d54c9c 100644 --- a/htdocs/api/admin/explorer_withredoc.php +++ b/htdocs/api/admin/explorer_withredoc.php @@ -14,14 +14,14 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see . - * - * @deprecated Old explorer. Not using Swagger. See instead explorer in htdocs/api/index.php. */ /** * \defgroup api Module DolibarrApi * \brief API explorer using the swagger.json file * \file htdocs/api/admin/explorer_withredoc.php + * + * @deprecated Old explorer. Not using Swagger. See instead explorer in htdocs/api/index.php. */ require_once '../../main.inc.php'; diff --git a/htdocs/api/class/api.class.php b/htdocs/api/class/api.class.php index 6fe7b1d3398..63d504b14cb 100644 --- a/htdocs/api/class/api.class.php +++ b/htdocs/api/class/api.class.php @@ -75,10 +75,10 @@ class DolibarrApi * * Display a short message an return a http code 200 * - * @param string $field Field name - * @param mixed $value Value to check/clean - * @param Object $object Object - * @return string Value cleaned + * @param string $field Field name + * @param string|array $value Value to check/clean + * @param Object $object Object + * @return string|array Value cleaned */ protected function _checkValForAPI($field, $value, $object) { @@ -176,7 +176,7 @@ class DolibarrApi unset($object->timespent_fk_user); unset($object->timespent_note); unset($object->fk_delivery_address); - unset($object->modelpdf); + unset($object->model_pdf); unset($object->sendtoid); unset($object->name_bis); unset($object->newref); @@ -261,7 +261,6 @@ class DolibarrApi unset($object->lines[$i]->thirdparty); unset($object->lines[$i]->user); unset($object->lines[$i]->model_pdf); - unset($object->lines[$i]->modelpdf); unset($object->lines[$i]->note_public); unset($object->lines[$i]->note_private); unset($object->lines[$i]->fk_incoterms); diff --git a/htdocs/api/class/api_access.class.php b/htdocs/api/class/api_access.class.php index 82a60bc5116..8e4bdb0db9f 100644 --- a/htdocs/api/class/api_access.class.php +++ b/htdocs/api/class/api_access.class.php @@ -2,6 +2,7 @@ /* Copyright (C) 2015 Jean-François Ferry * Copyright (C) 2016 Laurent Destailleur * Copyright (C) 2023 Ferran Marcet + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,11 +20,16 @@ // Create the autoloader for Luracast require_once DOL_DOCUMENT_ROOT.'/includes/restler/framework/Luracast/Restler/AutoLoader.php'; -call_user_func(function () { - $loader = Luracast\Restler\AutoLoader::instance(); - spl_autoload_register($loader); - return $loader; -}); +call_user_func( + /** + * @return Luracast\Restler\AutoLoader + */ + static function () { + $loader = Luracast\Restler\AutoLoader::instance(); + spl_autoload_register($loader); + return $loader; + } +); require_once DOL_DOCUMENT_ROOT.'/includes/restler/framework/Luracast/Restler/iAuthenticate.php'; require_once DOL_DOCUMENT_ROOT.'/includes/restler/framework/Luracast/Restler/iUseAuthentication.php'; diff --git a/htdocs/api/class/api_documents.class.php b/htdocs/api/class/api_documents.class.php index e4ae442e461..2c222dd5c08 100644 --- a/htdocs/api/class/api_documents.class.php +++ b/htdocs/api/class/api_documents.class.php @@ -761,6 +761,7 @@ class Documents extends DolibarrApi if (is_object($object)) { if ($fetchbyid) { + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition $result = $object->fetch($ref); } else { $result = $object->fetch('', $ref); diff --git a/htdocs/api/class/api_setup.class.php b/htdocs/api/class/api_setup.class.php index fa0a9941a94..d950185e6a9 100644 --- a/htdocs/api/class/api_setup.class.php +++ b/htdocs/api/class/api_setup.class.php @@ -2091,6 +2091,7 @@ class Setup extends DolibarrApi if (LIBXML_VERSION < 20900) { // Avoid load of external entities (security problem). // Required only if LIBXML_VERSION < 20900 + // @phan-suppress-next-line PhanDeprecatedFunctionInternal libxml_disable_entity_loader(true); } diff --git a/htdocs/api/index.php b/htdocs/api/index.php index 2a9375f58c0..4b3385fe5ee 100644 --- a/htdocs/api/index.php +++ b/htdocs/api/index.php @@ -3,6 +3,7 @@ * Copyright (C) 2016 Laurent Destailleur * Copyright (C) 2017 Regis Houssin * Copyright (C) 2021 Alexis LAURIER + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -91,11 +92,16 @@ if (!$res) { require_once DOL_DOCUMENT_ROOT.'/includes/restler/framework/Luracast/Restler/AutoLoader.php'; -call_user_func(function () { - $loader = Luracast\Restler\AutoLoader::instance(); - spl_autoload_register($loader); - return $loader; -}); +call_user_func( + /** + * @return Luracast\Restler\AutoLoader + */ + static function () { + $loader = Luracast\Restler\AutoLoader::instance(); + spl_autoload_register($loader); + return $loader; + } +); require_once DOL_DOCUMENT_ROOT.'/api/class/api.class.php'; require_once DOL_DOCUMENT_ROOT.'/api/class/api_access.class.php'; @@ -233,12 +239,10 @@ if (!empty($reg[1]) && $reg[1] == 'explorer' && ($reg[2] == '/swagger.json' || $ $modulenameforenabled = $module; if ($module == 'propale') { $modulenameforenabled = 'propal'; - } - if ($module == 'supplierproposal') { + } elseif ($module == 'supplierproposal') { $modulenameforenabled = 'supplier_proposal'; - } - if ($module == 'ficheinter') { - $modulenameforenabled = 'ficheinter'; + } elseif ($module == 'ficheinter') { + $modulenameforenabled = 'intervention'; } dol_syslog("Found module file ".$file." - module=".$module." - modulenameforenabled=".$modulenameforenabled." - moduledirforclass=".$moduledirforclass); diff --git a/htdocs/asset/accountancy_codes.php b/htdocs/asset/accountancy_codes.php index 4641f61a021..f68e835a1ff 100644 --- a/htdocs/asset/accountancy_codes.php +++ b/htdocs/asset/accountancy_codes.php @@ -33,7 +33,7 @@ require_once DOL_DOCUMENT_ROOT . '/asset/class/assetdepreciationoptions.class.ph $langs->loadLangs(array("assets", "companies")); // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'aZ09'); diff --git a/htdocs/asset/admin/setup.php b/htdocs/asset/admin/setup.php index 135a487952d..0016c5e82e5 100644 --- a/htdocs/asset/admin/setup.php +++ b/htdocs/asset/admin/setup.php @@ -1,6 +1,7 @@ * Copyright (C) 2018 Alexandre Spangaro + * Copyright (C) 2024 MDW * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -47,8 +48,8 @@ $scandir = GETPOST('scan_dir', 'alpha'); $type = 'asset'; $arrayofparameters = array( - 'ASSET_ACCOUNTANCY_CATEGORY'=>array('type'=>'accountancy_category', 'enabled'=>1), - 'ASSET_DEPRECIATION_DURATION_PER_YEAR'=>array('type'=>'string', 'css'=>'minwidth200', 'enabled'=>1), + 'ASSET_ACCOUNTANCY_CATEGORY' => array('type' => 'accountancy_category', 'enabled' => 1), + 'ASSET_DEPRECIATION_DURATION_PER_YEAR' => array('type' => 'string', 'css' => 'minwidth200', 'enabled' => 1), //'ASSET_MYPARAM2'=>array('type'=>'textarea','enabled'=>1), //'ASSET_MYPARAM3'=>array('type'=>'category:'.Categorie::TYPE_CUSTOMER, 'enabled'=>1), //'ASSET_MYPARAM4'=>array('type'=>'emailtemplate:thirdparty', 'enabled'=>1), @@ -63,6 +64,15 @@ $setupnotempty = 0; $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']); +$moduledir = 'asset'; +$myTmpObjects = array(); +$myTmpObjects['asset'] = array('label' => 'Asset', 'includerefgeneration' => 1, 'includedocgeneration' => 0, 'class' => 'Asset'); + +$tmpobjectkey = GETPOST('object', 'aZ09'); +if ($tmpobjectkey && !array_key_exists($tmpobjectkey, $myTmpObjects)) { + accessforbidden('Bad value for object. Hack attempt ?'); +} + /* * Actions @@ -86,28 +96,26 @@ if ($action == 'updateMask') { } else { setEventMessages($langs->trans("Error"), null, 'errors'); } -} elseif ($action == 'specimen') { +} elseif ($action == 'specimen' && $tmpobjectkey) { $modele = GETPOST('module', 'alpha'); - $tmpobjectkey = GETPOST('object'); - $tmpobject = new $tmpobjectkey($db); + $className = $myTmpObjects[$tmpobjectkey]['class']; + $tmpobject = new $className($db); $tmpobject->initAsSpecimen(); // Search template files $file = ''; $classname = ''; - $filefound = 0; $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']); foreach ($dirmodels as $reldir) { $file = dol_buildpath($reldir."core/modules/asset/doc/pdf_".$modele."_".strtolower($tmpobjectkey).".modules.php", 0); if (file_exists($file)) { - $filefound = 1; $classname = "pdf_".$modele; break; } } - if ($filefound) { + if ($classname !== '') { require_once $file; $module = new $classname($db); @@ -125,7 +133,6 @@ if ($action == 'updateMask') { } } elseif ($action == 'setmod') { // TODO Check if numbering module chosen can be activated by calling method canBeActivated - $tmpobjectkey = GETPOST('object'); if (!empty($tmpobjectkey)) { $constforval = 'ASSET_'.strtoupper($tmpobjectkey)."_ADDON"; dolibarr_set_const($db, $constforval, $value, 'chaine', 0, '', $conf->entity); @@ -136,7 +143,6 @@ if ($action == 'updateMask') { } elseif ($action == 'del') { $ret = delDocumentModel($value, $type); if ($ret > 0) { - $tmpobjectkey = GETPOST('object'); if (!empty($tmpobjectkey)) { $constforval = 'ASSET_'.strtoupper($tmpobjectkey).'_ADDON_PDF'; if (getDolGlobalString($constforval) == "$value") { @@ -146,7 +152,6 @@ if ($action == 'updateMask') { } } elseif ($action == 'setdoc') { // Set or unset default model - $tmpobjectkey = GETPOST('object'); if (!empty($tmpobjectkey)) { $constforval = 'ASSET_'.strtoupper($tmpobjectkey).'_ADDON_PDF'; if (dolibarr_set_const($db, $constforval, $value, 'chaine', 0, '', $conf->entity)) { @@ -162,7 +167,6 @@ if ($action == 'updateMask') { } } } elseif ($action == 'unsetdoc') { - $tmpobjectkey = GETPOST('object'); if (!empty($tmpobjectkey)) { $constforval = 'ASSET_'.strtoupper($tmpobjectkey).'_ADDON_PDF'; dolibarr_del_const($db, $constforval, $conf->entity); @@ -195,15 +199,7 @@ print dol_get_fiche_head($head, 'settings', $langs->trans($page_name), -1, "asse echo ''.$langs->trans("AssetSetupPage").''; -$moduledir = 'asset'; -$myTmpObjects = array(); -$myTmpObjects['Asset'] = array('includerefgeneration'=>1, 'includedocgeneration'=>0); - - foreach ($myTmpObjects as $myTmpObjectKey => $myTmpObjectArray) { - if ($myTmpObjectKey == 'MyObject') { - continue; - } if ($myTmpObjectArray['includerefgeneration']) { /* * Assets Numbering model @@ -276,7 +272,8 @@ foreach ($myTmpObjects as $myTmpObjectKey => $myTmpObjectArray) { } print '
'.$langs->trans("Parameter").''.$langs->trans("Value").'
'; $tooltiphelp = (($langs->trans($constname . 'Tooltip') != $constname . 'Tooltip') ? $langs->trans($constname . 'Tooltip') : ''); @@ -477,7 +475,7 @@ if ($action == 'edit') { print '\n"; - } elseif ($val['type']== 'html') { + } elseif ($val['type'] == 'html') { require_once DOL_DOCUMENT_ROOT . '/core/class/doleditor.class.php'; $doleditor = new DolEditor($constname, getDolGlobalString($constname), '', 160, 'dolibarr_notes', '', false, false, isModEnabled('fckeditor'), ROWS_5, '90%'); $doleditor->Create(); @@ -581,7 +579,7 @@ if ($action == 'edit') { print '
'.$langs->trans("Parameter").''.$langs->trans("Value").'
'; $tooltiphelp = (($langs->trans($constname . 'Tooltip') != $constname . 'Tooltip') ? $langs->trans($constname . 'Tooltip') : ''); @@ -590,7 +588,7 @@ if ($action == 'edit') { if ($val['type'] == 'textarea') { print dol_nl2br(getDolGlobalString($constname)); - } elseif ($val['type']== 'html') { + } elseif ($val['type'] == 'html') { print getDolGlobalString($constname); } elseif ($val['type'] == 'yesno') { print ajax_constantonoff($constname); @@ -601,7 +599,7 @@ if ($action == 'edit') { $tmp = explode(':', $val['type']); $template = $formmail->getEMailTemplate($db, $tmp[1], $user, $langs, getDolGlobalString($constname)); - if ($template<0) { + if ($template < 0) { setEventMessages(null, $formmail->errors, 'errors'); } print $langs->trans($template->label); @@ -619,13 +617,13 @@ if ($action == 'edit') { print '
    ' . implode(' ', $toprint) . '
'; } } elseif (preg_match('/thirdparty_type/', $val['type'])) { - if (getDolGlobalInt($constname)==2) { + if (getDolGlobalInt($constname) == 2) { print $langs->trans("Prospect"); - } elseif (getDolGlobalInt($constname)==3) { + } elseif (getDolGlobalInt($constname) == 3) { print $langs->trans("ProspectCustomer"); - } elseif (getDolGlobalInt($constname)==1) { + } elseif (getDolGlobalInt($constname) == 1) { print $langs->trans("Customer"); - } elseif (getDolGlobalInt($constname)==0) { + } elseif (getDolGlobalInt($constname) == 0) { print $langs->trans("NorProspectNorCustomer"); } } elseif ($val['type'] == 'product') { diff --git a/htdocs/asset/agenda.php b/htdocs/asset/agenda.php index 181c9c209ef..56e33e2e317 100644 --- a/htdocs/asset/agenda.php +++ b/htdocs/asset/agenda.php @@ -34,7 +34,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; $langs->loadLangs(array("assets", "other")); // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'aZ09'); @@ -51,10 +51,10 @@ if (GETPOST('actioncode', 'array')) { $search_rowid = GETPOST('search_rowid'); $search_agenda_label = GETPOST('search_agenda_label'); -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST("sortfield", 'alpha'); $sortorder = GETPOST("sortorder", 'alpha'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -99,7 +99,7 @@ if (!isModEnabled('asset')) { * Actions */ -$parameters = array('id'=>$id); +$parameters = array('id' => $id); $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); @@ -167,14 +167,14 @@ if ($object->id > 0) { $objthirdparty = $object; $objcon = new stdClass(); - $out = '&origin=' . urlencode($object->element . '@' . $object->module) . '&originid=' . urlencode($object->id); + $out = '&origin=' . urlencode((string) ($object->element . '@' . $object->module)) . '&originid=' . urlencode((string) ($object->id)); $urlbacktopage = $_SERVER['PHP_SELF'] . '?id=' . $object->id; $out .= '&backtopage=' . urlencode($urlbacktopage); $permok = $user->hasRight('agenda', 'myactions', 'create'); if ((!empty($objthirdparty->id) || !empty($objcon->id)) && $permok) { //$out.='loadLangs(array("assets", "other")); // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm', 'alpha'); @@ -123,10 +123,10 @@ if (empty($reshook)) { // Action dispose object if ($action == 'confirm_disposal' && $confirm == 'yes' && $permissiontoadd) { - $object->disposal_date = dol_mktime(12, 0, 0, GETPOST('disposal_datemonth', 'int'), GETPOST('disposal_dateday', 'int'), GETPOST('disposal_dateyear', 'int')); // for date without hour, we use gmt - $object->disposal_amount_ht = GETPOST('disposal_amount', 'int'); - $object->fk_disposal_type = GETPOST('fk_disposal_type', 'int'); - $disposal_invoice_id = GETPOST('disposal_invoice_id', 'int'); + $object->disposal_date = dol_mktime(12, 0, 0, GETPOSTINT('disposal_datemonth'), GETPOSTINT('disposal_dateday'), GETPOSTINT('disposal_dateyear')); // for date without hour, we use gmt + $object->disposal_amount_ht = GETPOSTINT('disposal_amount'); + $object->fk_disposal_type = GETPOSTINT('fk_disposal_type'); + $disposal_invoice_id = GETPOSTINT('disposal_invoice_id'); $object->disposal_depreciated = ((GETPOST('disposal_depreciated') == '1' || GETPOST('disposal_depreciated') == 'on') ? 1 : 0); $object->disposal_subject_to_vat = ((GETPOST('disposal_subject_to_vat') == '1' || GETPOST('disposal_subject_to_vat') == 'on') ? 1 : 0); @@ -136,7 +136,7 @@ if (empty($reshook)) { } $action = ''; } elseif ($action == "add") { - $object->supplier_invoice_id = GETPOST('supplier_invoice_id', 'int'); + $object->supplier_invoice_id = GETPOSTINT('supplier_invoice_id'); } // Actions cancel, add, update, update_extras, confirm_validate, confirm_delete, confirm_deleteline, confirm_clone, confirm_close, confirm_setdraft, confirm_reopen @@ -189,7 +189,7 @@ if ($action == 'create') { } if (GETPOSTISSET('supplier_invoice_id')) { $object->fields['supplier_invoice_id'] = array('type' => 'integer:FactureFournisseur:fourn/class/fournisseur.facture.class.php:1:entity IN (__SHARED_ENTITIES__)', 'label' => 'SupplierInvoice', 'enabled' => '1', 'noteditable' => '1', 'position' => 280, 'notnull' => 0, 'visible' => 1, 'index' => 1, 'validate' => '1',); - print ''; + print ''; } print dol_get_fiche_head(array(), ''); @@ -266,10 +266,10 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea // Disposal $langs->load('bills'); - $disposal_date = dol_mktime(12, 0, 0, GETPOST('disposal_datemonth', 'int'), GETPOST('disposal_dateday', 'int'), GETPOST('disposal_dateyear', 'int')); // for date without hour, we use gmt - $disposal_amount = GETPOST('disposal_amount', 'int'); - $fk_disposal_type = GETPOST('fk_disposal_type', 'int'); - $disposal_invoice_id = GETPOST('disposal_invoice_id', 'int'); + $disposal_date = dol_mktime(12, 0, 0, GETPOSTINT('disposal_datemonth'), GETPOSTINT('disposal_dateday'), GETPOSTINT('disposal_dateyear')); // for date without hour, we use gmt + $disposal_amount = GETPOSTINT('disposal_amount'); + $fk_disposal_type = GETPOSTINT('fk_disposal_type'); + $disposal_invoice_id = GETPOSTINT('disposal_invoice_id'); $disposal_depreciated = GETPOSTISSET('disposal_depreciated') ? GETPOST('disposal_depreciated') : 1; $disposal_depreciated = !empty($disposal_depreciated) ? 1 : 0; $disposal_subject_to_vat = GETPOSTISSET('disposal_subject_to_vat') ? GETPOST('disposal_subject_to_vat') : 1; diff --git a/htdocs/asset/class/asset.class.php b/htdocs/asset/class/asset.class.php index f10369b154f..8666a469aee 100644 --- a/htdocs/asset/class/asset.class.php +++ b/htdocs/asset/class/asset.class.php @@ -1,6 +1,8 @@ * Copyright (C) 2018 Alexandre Spangaro + * Copyright (C) 2024 Frédéric France + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -92,38 +94,38 @@ class Asset extends CommonObject */ /** - * @var array Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. + * @var array|string,position:int,notnull?:int,visible:int,noteditable?:int,default?:string,index?:int,foreignkey?:string,searchall?:int,isameasure?:int,css?:string,csslist?:string,help?:string,showoncombobox?:int,disabled?:int,arrayofkeyval?:array,comment?:string}> Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. */ - public $fields=array( - 'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>'1', 'position'=>1, 'notnull'=>1, 'visible'=>0, 'noteditable'=>'1', 'index'=>1, 'css'=>'left', 'comment'=>"Id"), - 'ref' => array('type'=>'varchar(128)', 'label'=>'Ref', 'enabled'=>'1', 'position'=>20, 'notnull'=>1, 'visible'=>1, 'noteditable'=>'0', 'index'=>1, 'searchall'=>1, 'showoncombobox'=>'1', 'validate'=>'1', 'comment'=>"Reference of object"), - 'label' => array('type'=>'varchar(255)', 'label'=>'Label', 'enabled'=>'1', 'position'=>30, 'notnull'=>1, 'visible'=>1, 'searchall'=>1, 'css'=>'minwidth300', 'cssview'=>'wordbreak', 'showoncombobox'=>'2', 'validate'=>'1',), - 'fk_asset_model' => array('type'=>'integer:AssetModel:asset/class/assetmodel.class.php:1:((status:=:1) and (entity:IN:__SHARED_ENTITIES__))', 'label'=>'AssetModel', 'enabled'=>'1', 'position'=>40, 'notnull'=>0, 'visible'=>1, 'index'=>1, 'validate'=>'1',), - 'qty' => array('type'=>'real', 'label'=>'Qty', 'enabled'=>'1', 'position'=>50, 'notnull'=>1, 'visible'=>0, 'default'=>'1', 'isameasure'=>'1', 'css'=>'maxwidth75imp', 'validate'=>'1',), - 'acquisition_type' => array('type'=>'smallint', 'label'=>'AssetAcquisitionType', 'enabled'=>'1', 'position'=>60, 'notnull'=>1, 'visible'=>1, 'arrayofkeyval'=>array('0'=>'AssetAcquisitionTypeNew', '1'=>'AssetAcquisitionTypeOccasion'), 'validate'=>'1',), - 'asset_type' => array('type'=>'smallint', 'label'=>'AssetType', 'enabled'=>'1', 'position'=>70, 'notnull'=>1, 'visible'=>1, 'arrayofkeyval'=>array('0'=>'AssetTypeIntangible', '1'=>'AssetTypeTangible', '2'=>'AssetTypeInProgress', '3'=>'AssetTypeFinancial'), 'validate'=>'1',), - 'not_depreciated' => array('type'=>'boolean', 'label'=>'AssetNotDepreciated', 'enabled'=>'1', 'position'=>80, 'notnull'=>0, 'default'=>'0', 'visible'=>1, 'validate'=>'1',), - 'date_acquisition' => array('type'=>'date', 'label'=>'AssetDateAcquisition', 'enabled'=>'1', 'position'=>90, 'notnull'=>1, 'visible'=>1,), - 'date_start' => array('type'=>'date', 'label'=>'AssetDateStart', 'enabled'=>'1', 'position'=>100, 'notnull'=>0, 'visible'=>-1,), - 'acquisition_value_ht' => array('type'=>'price', 'label'=>'AssetAcquisitionValueHT', 'enabled'=>'1', 'position'=>110, 'notnull'=>1, 'visible'=>1, 'isameasure'=>'1', 'validate'=>'1',), - 'recovered_vat' => array('type'=>'price', 'label'=>'AssetRecoveredVAT', 'enabled'=>'1', 'position'=>120, 'notnull'=>0, 'visible'=>1, 'isameasure'=>'1', 'validate'=>'1',), - 'reversal_date' => array('type'=>'date', 'label'=>'AssetReversalDate', 'enabled'=>'1', 'position'=>130, 'notnull'=>0, 'visible'=>1,), - 'reversal_amount_ht' => array('type'=>'price', 'label'=>'AssetReversalAmountHT', 'enabled'=>'1', 'position'=>140, 'notnull'=>0, 'visible'=>1, 'isameasure'=>'1', 'validate'=>'1',), - 'disposal_date' => array('type'=>'date', 'label'=>'AssetDisposalDate', 'enabled'=>'1', 'position'=>200, 'notnull'=>0, 'visible'=>-2,), - 'disposal_amount_ht' => array('type'=>'price', 'label'=>'AssetDisposalAmount', 'enabled'=>'1', 'position'=>210, 'notnull'=>0, 'visible'=>-2, 'default'=>'0', 'isameasure'=>'1', 'validate'=>'1',), - 'fk_disposal_type' => array('type'=>'sellist:c_asset_disposal_type:label:rowid::active=1', 'label'=>'AssetDisposalType', 'enabled'=>'1', 'position'=>220, 'notnull'=>0, 'visible'=>-2, 'index'=>1, 'validate'=>'1',), - 'disposal_depreciated' => array('type'=>'boolean', 'label'=>'AssetDisposalDepreciated', 'enabled'=>'1', 'position'=>230, 'notnull'=>0, 'default'=>'0', 'visible'=>-2, 'validate'=>'1',), - 'disposal_subject_to_vat' => array('type'=>'boolean', 'label'=>'AssetDisposalSubjectToVat', 'enabled'=>'1', 'position'=>240, 'notnull'=>0, 'default'=>'0', 'visible'=>-2, 'validate'=>'1',), - 'note_public' => array('type'=>'html', 'label'=>'NotePublic', 'enabled'=>'1', 'position'=>300, 'notnull'=>0, 'visible'=>0, 'validate'=>'1',), - 'note_private' => array('type'=>'html', 'label'=>'NotePrivate', 'enabled'=>'1', 'position'=>301, 'notnull'=>0, 'visible'=>0, 'validate'=>'1',), - 'date_creation' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>'1', 'position'=>500, 'notnull'=>1, 'visible'=>-2,), - 'tms' => array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>'1', 'position'=>501, 'notnull'=>0, 'visible'=>-2,), - 'fk_user_creat' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserAuthor', 'enabled'=>'1', 'position'=>510, 'notnull'=>1, 'visible'=>-2, 'foreignkey'=>'user.rowid',), - 'fk_user_modif' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserModif', 'enabled'=>'1', 'position'=>511, 'notnull'=>-1, 'visible'=>-2,), - 'last_main_doc' => array('type'=>'varchar(255)', 'label'=>'LastMainDoc', 'enabled'=>'1', 'position'=>600, 'notnull'=>0, 'visible'=>0,), - 'import_key' => array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>'1', 'position'=>1000, 'notnull'=>-1, 'visible'=>-2,), - 'model_pdf' => array('type'=>'varchar(255)', 'label'=>'Model pdf', 'enabled'=>'1', 'position'=>1010, 'notnull'=>-1, 'visible'=>0,), - 'status' => array('type'=>'smallint', 'label'=>'Status', 'enabled'=>'1', 'position'=>1000, 'notnull'=>1, 'default'=>'0', 'visible'=>2, 'index'=>1, 'arrayofkeyval'=>array('0'=>'Draft', '1'=>'Validated', '9'=>'Canceled'), 'validate'=>'1',), + public $fields = array( + 'rowid' => array('type' => 'integer', 'label' => 'TechnicalID', 'enabled' => 1, 'position' => 1, 'notnull' => 1, 'visible' => 0, 'noteditable' => 1, 'index' => 1, 'css' => 'left', 'comment' => "Id"), + 'ref' => array('type' => 'varchar(128)', 'label' => 'Ref', 'enabled' => 1, 'position' => 20, 'notnull' => 1, 'visible' => 1, 'noteditable' => 0, 'index' => 1, 'searchall' => 1, 'showoncombobox' => 1, 'validate' => 1, 'comment' => "Reference of object"), + 'label' => array('type' => 'varchar(255)', 'label' => 'Label', 'enabled' => 1, 'position' => 30, 'notnull' => 1, 'visible' => 1, 'searchall' => 1, 'css' => 'minwidth300', 'cssview' => 'wordbreak', 'showoncombobox' => '2', 'validate' => 1,), + 'fk_asset_model' => array('type' => 'integer:AssetModel:asset/class/assetmodel.class.php:1:((status:=:1) and (entity:IN:__SHARED_ENTITIES__))', 'label' => 'AssetModel', 'enabled' => 1, 'position' => 40, 'notnull' => 0, 'visible' => 1, 'index' => 1, 'validate' => 1,), + 'qty' => array('type' => 'real', 'label' => 'Qty', 'enabled' => 1, 'position' => 50, 'notnull' => 1, 'visible' => 0, 'default' => '1', 'isameasure' => 1, 'css' => 'maxwidth75imp', 'validate' => 1,), + 'acquisition_type' => array('type' => 'smallint', 'label' => 'AssetAcquisitionType', 'enabled' => 1, 'position' => 60, 'notnull' => 1, 'visible' => 1, 'arrayofkeyval' => array('0' => 'AssetAcquisitionTypeNew', '1' => 'AssetAcquisitionTypeOccasion'), 'validate' => 1,), + 'asset_type' => array('type' => 'smallint', 'label' => 'AssetType', 'enabled' => 1, 'position' => 70, 'notnull' => 1, 'visible' => 1, 'arrayofkeyval' => array('0' => 'AssetTypeIntangible', '1' => 'AssetTypeTangible', '2' => 'AssetTypeInProgress', '3' => 'AssetTypeFinancial'), 'validate' => 1,), + 'not_depreciated' => array('type' => 'boolean', 'label' => 'AssetNotDepreciated', 'enabled' => 1, 'position' => 80, 'notnull' => 0, 'default' => '0', 'visible' => 1, 'validate' => 1,), + 'date_acquisition' => array('type' => 'date', 'label' => 'AssetDateAcquisition', 'enabled' => 1, 'position' => 90, 'notnull' => 1, 'visible' => 1,), + 'date_start' => array('type' => 'date', 'label' => 'AssetDateStart', 'enabled' => 1, 'position' => 100, 'notnull' => 0, 'visible' => -1,), + 'acquisition_value_ht' => array('type' => 'price', 'label' => 'AssetAcquisitionValueHT', 'enabled' => 1, 'position' => 110, 'notnull' => 1, 'visible' => 1, 'isameasure' => 1, 'validate' => 1,), + 'recovered_vat' => array('type' => 'price', 'label' => 'AssetRecoveredVAT', 'enabled' => 1, 'position' => 120, 'notnull' => 0, 'visible' => 1, 'isameasure' => 1, 'validate' => 1,), + 'reversal_date' => array('type' => 'date', 'label' => 'AssetReversalDate', 'enabled' => 1, 'position' => 130, 'notnull' => 0, 'visible' => 1,), + 'reversal_amount_ht' => array('type' => 'price', 'label' => 'AssetReversalAmountHT', 'enabled' => 1, 'position' => 140, 'notnull' => 0, 'visible' => 1, 'isameasure' => 1, 'validate' => 1,), + 'disposal_date' => array('type' => 'date', 'label' => 'AssetDisposalDate', 'enabled' => 1, 'position' => 200, 'notnull' => 0, 'visible' => -2,), + 'disposal_amount_ht' => array('type' => 'price', 'label' => 'AssetDisposalAmount', 'enabled' => 1, 'position' => 210, 'notnull' => 0, 'visible' => -2, 'default' => '0', 'isameasure' => 1, 'validate' => 1,), + 'fk_disposal_type' => array('type' => 'sellist:c_asset_disposal_type:label:rowid::active=1', 'label' => 'AssetDisposalType', 'enabled' => 1, 'position' => 220, 'notnull' => 0, 'visible' => -2, 'index' => 1, 'validate' => 1,), + 'disposal_depreciated' => array('type' => 'boolean', 'label' => 'AssetDisposalDepreciated', 'enabled' => 1, 'position' => 230, 'notnull' => 0, 'default' => '0', 'visible' => -2, 'validate' => 1,), + 'disposal_subject_to_vat' => array('type' => 'boolean', 'label' => 'AssetDisposalSubjectToVat', 'enabled' => 1, 'position' => 240, 'notnull' => 0, 'default' => '0', 'visible' => -2, 'validate' => 1,), + 'note_public' => array('type' => 'html', 'label' => 'NotePublic', 'enabled' => 1, 'position' => 300, 'notnull' => 0, 'visible' => 0, 'validate' => 1,), + 'note_private' => array('type' => 'html', 'label' => 'NotePrivate', 'enabled' => 1, 'position' => 301, 'notnull' => 0, 'visible' => 0, 'validate' => 1,), + 'date_creation' => array('type' => 'datetime', 'label' => 'DateCreation', 'enabled' => 1, 'position' => 500, 'notnull' => 1, 'visible' => -2,), + 'tms' => array('type' => 'timestamp', 'label' => 'DateModification', 'enabled' => 1, 'position' => 501, 'notnull' => 0, 'visible' => -2,), + 'fk_user_creat' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'UserAuthor', 'enabled' => 1, 'position' => 510, 'notnull' => 1, 'visible' => -2, 'foreignkey' => 'user.rowid',), + 'fk_user_modif' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'UserModif', 'enabled' => 1, 'position' => 511, 'notnull' => -1, 'visible' => -2,), + 'last_main_doc' => array('type' => 'varchar(255)', 'label' => 'LastMainDoc', 'enabled' => 1, 'position' => 600, 'notnull' => 0, 'visible' => 0,), + 'import_key' => array('type' => 'varchar(14)', 'label' => 'ImportId', 'enabled' => 1, 'position' => 1000, 'notnull' => -1, 'visible' => -2,), + 'model_pdf' => array('type' => 'varchar(255)', 'label' => 'Model pdf', 'enabled' => 1, 'position' => 1010, 'notnull' => -1, 'visible' => 0,), + 'status' => array('type' => 'smallint', 'label' => 'Status', 'enabled' => 1, 'position' => 1000, 'notnull' => 1, 'default' => '0', 'visible' => 2, 'index' => 1, 'arrayofkeyval' => array('0' => 'Draft', '1' => 'Validated', '9' => 'Canceled'), 'validate' => 1,), ); public $rowid; public $ref; @@ -388,18 +390,17 @@ class Asset extends CommonObject /** * Load list of objects in memory from the database. * - * @param string $sortorder Sort Order - * @param string $sortfield Sort field - * @param int $limit limit - * @param int $offset Offset - * @param array $filter Filter array. Example array('field'=>'valueforlike', 'customurl'=>...) - * @param string $filtermode Filter mode (AND or OR) - * @return array|int int <0 if KO, array of pages if OK + * @param string $sortorder Sort Order + * @param string $sortfield Sort field + * @param int $limit limit + * @param int $offset Offset + * @param string $filter Filter as an Universal Search string. + * Example: '((client:=:1) OR ((client:>=:2) AND (client:<=:3))) AND (client:!=:8) AND (nom:like:'a%')' + * @param string $filtermode No more used + * @return array|int int <0 if KO, array of pages if OK */ - public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND') + public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, $filter = '', $filtermode = 'AND') { - global $conf; - dol_syslog(__METHOD__, LOG_DEBUG); $records = array(); @@ -412,25 +413,15 @@ class Asset extends CommonObject } else { $sql .= " WHERE 1 = 1"; } + // Manage filter - $sqlwhere = array(); - if (count($filter) > 0) { - foreach ($filter as $key => $value) { - if ($key == 't.rowid') { - $sqlwhere[] = $key." = ".((int) $value); - } elseif (in_array($this->fields[$key]['type'], array('date', 'datetime', 'timestamp'))) { - $sqlwhere[] = $key." = '".$this->db->idate($value)."'"; - } elseif ($key == 'customsql') { - $sqlwhere[] = $value; - } elseif (strpos($value, '%') === false) { - $sqlwhere[] = $key." IN (".$this->db->sanitize($this->db->escape($value)).")"; - } else { - $sqlwhere[] = $key." LIKE '%".$this->db->escape($value)."%'"; - } - } - } - if (count($sqlwhere) > 0) { - $sql .= " AND (".implode(" ".$filtermode." ", $sqlwhere).")"; + $errormessage = ''; + $sql .= forgeSQLFromUniversalSearchCriteria($filter, $errormessage); + if ($errormessage) { + $this->errors[] = $errormessage; + dol_syslog(__METHOD__.' '.implode(',', $this->errors), LOG_ERR); + + return -1; } if (!empty($sortfield)) { @@ -1413,7 +1404,7 @@ class Asset extends CommonObject global $action; $hookmanager->initHooks(array($this->element . 'dao')); - $parameters = array('id'=>$this->id, 'getnomurl' => &$result); + $parameters = array('id' => $this->id, 'getnomurl' => &$result); $reshook = $hookmanager->executeHooks('getNomUrl', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks if ($reshook > 0) { $result = $hookmanager->resPrint; @@ -1508,7 +1499,7 @@ class Asset extends CommonObject * Initialise object with example values * Id must be 0 if object instance is a specimen * - * @return void + * @return int */ public function initAsSpecimen() { @@ -1516,7 +1507,7 @@ class Asset extends CommonObject // $this->property1 = ... // $this->property2 = ... - $this->initAsSpecimenCommon(); + return $this->initAsSpecimenCommon(); } /** diff --git a/htdocs/asset/class/assetdepreciationoptions.class.php b/htdocs/asset/class/assetdepreciationoptions.class.php index 15b7f24c216..dac2d1ad194 100644 --- a/htdocs/asset/class/assetdepreciationoptions.class.php +++ b/htdocs/asset/class/assetdepreciationoptions.class.php @@ -1,5 +1,6 @@ + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -64,7 +65,7 @@ class AssetDepreciationOptions extends CommonObject */ /** - * @var array Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. + * @var array|string,position:int,notnull?:int,visible:int,noteditable?:int,default?:string,index?:int,foreignkey?:string,searchall?:int,isameasure?:int,css?:string,csslist?:string,help?:string,showoncombobox?:int,disabled?:int,arrayofkeyval?:array,comment?:string}> Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. */ public $fields = array(); @@ -77,15 +78,15 @@ class AssetDepreciationOptions extends CommonObject 'label' => 'AssetDepreciationOptionEconomic', 'table' => 'asset_depreciation_options_economic', 'fields' => array( - 'depreciation_type' => array('type'=>'smallint', 'label'=>'AssetDepreciationOptionDepreciationType', 'enabled'=>'1', 'position'=>10, 'notnull'=>1, 'visible'=>1, 'default'=>'0', 'arrayofkeyval'=>array('0'=>'AssetDepreciationOptionDepreciationTypeLinear', '1'=>'AssetDepreciationOptionDepreciationTypeDegressive', '2'=>'AssetDepreciationOptionDepreciationTypeExceptional'), 'validate'=>'1',), - 'degressive_coefficient' => array('type'=>'double(24,8)', 'label'=>'AssetDepreciationOptionDegressiveRate', 'enabled'=>'1', 'position'=>20, 'notnull'=>1, 'visible'=>1, 'default'=>'0', 'isameasure'=>'1', 'validate'=>'1','enabled_field' => 'economic:depreciation_type:1'), - 'duration' => array('type'=>'integer', 'label'=>'AssetDepreciationOptionDuration', 'enabled'=>'1', 'position'=>30, 'notnull'=>1, 'visible'=>1, 'default'=>'0', 'isameasure'=>'1', 'validate'=>'1',), - 'duration_type' => array('type'=>'smallint', 'label'=>'AssetDepreciationOptionDurationType', 'enabled'=>'1', 'position'=>40, 'notnull'=>1, 'visible'=>1, 'default'=>'0', 'arrayofkeyval'=>array('0'=>'AssetDepreciationOptionDurationTypeAnnual', '1'=>'AssetDepreciationOptionDurationTypeMonthly'/*, '2'=>'AssetDepreciationOptionDurationTypeDaily'*/), 'validate'=>'1',), - 'rate' => array('type'=>'double(24,8)', 'label'=>'AssetDepreciationOptionRate', 'enabled'=>'1', 'position'=>50, 'visible'=>3, 'default'=>'0', 'isameasure'=>'1', 'validate'=>'1', 'computed' => '$object->asset_depreciation_options->getRate("economic")',), - 'accelerated_depreciation_option' => array('type'=>'boolean', 'label'=>'AssetDepreciationOptionAcceleratedDepreciation', 'enabled'=>'1', 'position'=>60, 'column_break' => true, 'notnull'=>0, 'default'=>'0', 'visible'=>1, 'validate'=>'1',), - 'amount_base_depreciation_ht' => array('type'=>'price', 'label'=>'AssetDepreciationOptionAmountBaseDepreciationHT', 'enabled'=>'isset($object)&&get_class($object)=="Asset"', 'only_on_asset'=>1, 'position'=>90, 'notnull'=>0, 'required'=>1, 'visible'=>1, 'default'=>'$object->reversal_amount_ht > 0 ? $object->reversal_amount_ht : $object->acquisition_value_ht', 'isameasure'=>'1', 'validate'=>'1',), - 'amount_base_deductible_ht' => array('type'=>'price', 'label'=>'AssetDepreciationOptionAmountBaseDeductibleHT', 'enabled'=>'isset($object)&&get_class($object)=="Asset"', 'only_on_asset'=>1, 'position'=>100, 'notnull'=>0, 'visible'=>1, 'default'=>'0', 'isameasure'=>'1', 'validate'=>'1',), - 'total_amount_last_depreciation_ht' => array('type'=>'price', 'label'=>'AssetDepreciationOptionTotalAmountLastDepreciationHT', 'enabled'=>'isset($object)&&get_class($object)=="Asset"', 'only_on_asset'=>1, 'position'=>110, 'noteditable'=> 1, 'notnull'=>0, 'visible'=>1, 'default'=>'0', 'isameasure'=>'1', 'validate'=>'1',), + 'depreciation_type' => array('type' => 'smallint', 'label' => 'AssetDepreciationOptionDepreciationType', 'enabled' => '1', 'position' => 10, 'notnull' => 1, 'visible' => 1, 'default' => '0', 'arrayofkeyval' => array('0' => 'AssetDepreciationOptionDepreciationTypeLinear', '1' => 'AssetDepreciationOptionDepreciationTypeDegressive', '2' => 'AssetDepreciationOptionDepreciationTypeExceptional'), 'validate' => '1',), + 'degressive_coefficient' => array('type' => 'double(24,8)', 'label' => 'AssetDepreciationOptionDegressiveRate', 'enabled' => '1', 'position' => 20, 'notnull' => 1, 'visible' => 1, 'default' => '0', 'isameasure' => '1', 'validate' => '1','enabled_field' => 'economic:depreciation_type:1'), + 'duration' => array('type' => 'integer', 'label' => 'AssetDepreciationOptionDuration', 'enabled' => '1', 'position' => 30, 'notnull' => 1, 'visible' => 1, 'default' => '0', 'isameasure' => '1', 'validate' => '1',), + 'duration_type' => array('type' => 'smallint', 'label' => 'AssetDepreciationOptionDurationType', 'enabled' => '1', 'position' => 40, 'notnull' => 1, 'visible' => 1, 'default' => '0', 'arrayofkeyval' => array('0' => 'AssetDepreciationOptionDurationTypeAnnual', '1' => 'AssetDepreciationOptionDurationTypeMonthly'/*, '2'=>'AssetDepreciationOptionDurationTypeDaily'*/), 'validate' => '1',), + 'rate' => array('type' => 'double(24,8)', 'label' => 'AssetDepreciationOptionRate', 'enabled' => '1', 'position' => 50, 'visible' => 3, 'default' => '0', 'isameasure' => '1', 'validate' => '1', 'computed' => '$object->asset_depreciation_options->getRate("economic")',), + 'accelerated_depreciation_option' => array('type' => 'boolean', 'label' => 'AssetDepreciationOptionAcceleratedDepreciation', 'enabled' => '1', 'position' => 60, 'column_break' => true, 'notnull' => 0, 'default' => '0', 'visible' => 1, 'validate' => '1',), + 'amount_base_depreciation_ht' => array('type' => 'price', 'label' => 'AssetDepreciationOptionAmountBaseDepreciationHT', 'enabled' => 'isset($object)&&get_class($object)=="Asset"', 'only_on_asset' => 1, 'position' => 90, 'notnull' => 0, 'required' => 1, 'visible' => 1, 'default' => '$object->reversal_amount_ht > 0 ? $object->reversal_amount_ht : $object->acquisition_value_ht', 'isameasure' => '1', 'validate' => '1',), + 'amount_base_deductible_ht' => array('type' => 'price', 'label' => 'AssetDepreciationOptionAmountBaseDeductibleHT', 'enabled' => 'isset($object)&&get_class($object)=="Asset"', 'only_on_asset' => 1, 'position' => 100, 'notnull' => 0, 'visible' => 1, 'default' => '0', 'isameasure' => '1', 'validate' => '1',), + 'total_amount_last_depreciation_ht' => array('type' => 'price', 'label' => 'AssetDepreciationOptionTotalAmountLastDepreciationHT', 'enabled' => 'isset($object)&&get_class($object)=="Asset"', 'only_on_asset' => 1, 'position' => 110, 'noteditable' => 1, 'notnull' => 0, 'visible' => 1, 'default' => '0', 'isameasure' => '1', 'validate' => '1',), ), ), 'accelerated_depreciation' => array( @@ -93,14 +94,14 @@ class AssetDepreciationOptions extends CommonObject 'table' => 'asset_depreciation_options_fiscal', 'enabled_field' => 'economic:accelerated_depreciation_option:1', 'fields' => array( - 'depreciation_type' => array('type'=>'smallint', 'label'=>'AssetDepreciationOptionDepreciationType', 'enabled'=>'1', 'position'=>10, 'notnull'=>1, 'visible'=>1, 'default'=>'0', 'arrayofkeyval'=>array('0'=>'AssetDepreciationOptionDepreciationTypeLinear', '1'=>'AssetDepreciationOptionDepreciationTypeDegressive', '2'=>'AssetDepreciationOptionDepreciationTypeExceptional'), 'validate'=>'1',), - 'degressive_coefficient' => array('type'=>'double(24,8)', 'label'=>'AssetDepreciationOptionDegressiveRate', 'enabled'=>'1', 'position'=>20, 'notnull'=>1, 'visible'=>1, 'default'=>'0', 'isameasure'=>'1', 'validate'=>'1','enabled_field' => 'accelerated_depreciation:depreciation_type:1'), - 'duration' => array('type'=>'integer', 'label'=>'AssetDepreciationOptionDuration', 'enabled'=>'1', 'position'=>30, 'notnull'=>1, 'visible'=>1, 'default'=>'0', 'isameasure'=>'1', 'validate'=>'1',), - 'duration_type' => array('type'=>'smallint', 'label'=>'AssetDepreciationOptionDurationType', 'enabled'=>'1', 'position'=>40, 'notnull'=>1, 'visible'=>1, 'default'=>'0', 'arrayofkeyval'=>array('0'=>'AssetDepreciationOptionDurationTypeAnnual', '1'=>'AssetDepreciationOptionDurationTypeMonthly'/*, '2'=>'AssetDepreciationOptionDurationTypeDaily'*/), 'validate'=>'1',), - 'rate' => array('type'=>'double(24,8)', 'label'=>'AssetDepreciationOptionRate', 'enabled'=>'1', 'position'=>50, 'visible'=>3, 'default'=>'0', 'isameasure'=>'1', 'validate'=>'1', 'computed' => '$object->asset_depreciation_options->getRate("accelerated_depreciation")',), - 'amount_base_depreciation_ht' => array('type'=>'price', 'label'=>'AssetDepreciationOptionAmountBaseDepreciationHT', 'enabled'=>'isset($object)&&get_class($object)=="Asset"', 'only_on_asset'=>1, 'position'=>80, 'column_break' => true, 'notnull'=>0, 'required'=>1, 'visible'=>1, 'default'=>'$object->reversal_amount_ht > 0 ? $object->reversal_amount_ht : $object->acquisition_value_ht', 'isameasure'=>'1', 'validate'=>'1',), - 'amount_base_deductible_ht' => array('type'=>'price', 'label'=>'AssetDepreciationOptionAmountBaseDeductibleHT', 'enabled'=>'isset($object)&&get_class($object)=="Asset"', 'only_on_asset'=>1, 'position'=>90, 'notnull'=>0, 'visible'=>1, 'default'=>'0', 'isameasure'=>'1', 'validate'=>'1',), - 'total_amount_last_depreciation_ht' => array('type'=>'price', 'label'=>'AssetDepreciationOptionTotalAmountLastDepreciationHT', 'enabled'=>'isset($object)&&get_class($object)=="Asset"', 'only_on_asset'=>1, 'position'=>100, 'noteditable'=> 1, 'notnull'=>0, 'visible'=>1, 'default'=>'0', 'isameasure'=>'1', 'validate'=>'1',), + 'depreciation_type' => array('type' => 'smallint', 'label' => 'AssetDepreciationOptionDepreciationType', 'enabled' => '1', 'position' => 10, 'notnull' => 1, 'visible' => 1, 'default' => '0', 'arrayofkeyval' => array('0' => 'AssetDepreciationOptionDepreciationTypeLinear', '1' => 'AssetDepreciationOptionDepreciationTypeDegressive', '2' => 'AssetDepreciationOptionDepreciationTypeExceptional'), 'validate' => '1',), + 'degressive_coefficient' => array('type' => 'double(24,8)', 'label' => 'AssetDepreciationOptionDegressiveRate', 'enabled' => '1', 'position' => 20, 'notnull' => 1, 'visible' => 1, 'default' => '0', 'isameasure' => '1', 'validate' => '1','enabled_field' => 'accelerated_depreciation:depreciation_type:1'), + 'duration' => array('type' => 'integer', 'label' => 'AssetDepreciationOptionDuration', 'enabled' => '1', 'position' => 30, 'notnull' => 1, 'visible' => 1, 'default' => '0', 'isameasure' => '1', 'validate' => '1',), + 'duration_type' => array('type' => 'smallint', 'label' => 'AssetDepreciationOptionDurationType', 'enabled' => '1', 'position' => 40, 'notnull' => 1, 'visible' => 1, 'default' => '0', 'arrayofkeyval' => array('0' => 'AssetDepreciationOptionDurationTypeAnnual', '1' => 'AssetDepreciationOptionDurationTypeMonthly'/*, '2'=>'AssetDepreciationOptionDurationTypeDaily'*/), 'validate' => '1',), + 'rate' => array('type' => 'double(24,8)', 'label' => 'AssetDepreciationOptionRate', 'enabled' => '1', 'position' => 50, 'visible' => 3, 'default' => '0', 'isameasure' => '1', 'validate' => '1', 'computed' => '$object->asset_depreciation_options->getRate("accelerated_depreciation")',), + 'amount_base_depreciation_ht' => array('type' => 'price', 'label' => 'AssetDepreciationOptionAmountBaseDepreciationHT', 'enabled' => 'isset($object)&&get_class($object)=="Asset"', 'only_on_asset' => 1, 'position' => 80, 'column_break' => true, 'notnull' => 0, 'required' => 1, 'visible' => 1, 'default' => '$object->reversal_amount_ht > 0 ? $object->reversal_amount_ht : $object->acquisition_value_ht', 'isameasure' => '1', 'validate' => '1',), + 'amount_base_deductible_ht' => array('type' => 'price', 'label' => 'AssetDepreciationOptionAmountBaseDeductibleHT', 'enabled' => 'isset($object)&&get_class($object)=="Asset"', 'only_on_asset' => 1, 'position' => 90, 'notnull' => 0, 'visible' => 1, 'default' => '0', 'isameasure' => '1', 'validate' => '1',), + 'total_amount_last_depreciation_ht' => array('type' => 'price', 'label' => 'AssetDepreciationOptionTotalAmountLastDepreciationHT', 'enabled' => 'isset($object)&&get_class($object)=="Asset"', 'only_on_asset' => 1, 'position' => 100, 'noteditable' => 1, 'notnull' => 0, 'visible' => 1, 'default' => '0', 'isameasure' => '1', 'validate' => '1',), ), ), ); @@ -178,7 +179,7 @@ class AssetDepreciationOptions extends CommonObject $this->{$field_key} = $this->deprecation_options[$mode][$field_key] ?? null; } - $this->fields['rowid'] = array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>'1', 'position'=>1, 'notnull'=>1, 'visible'=>0, 'noteditable'=>'1', 'index'=>1, 'css'=>'left', 'comment'=>"Id"); + $this->fields['rowid'] = array('type' => 'integer', 'label' => 'TechnicalID', 'enabled' => '1', 'position' => 1, 'notnull' => 1, 'visible' => 0, 'noteditable' => '1', 'index' => 1, 'css' => 'left', 'comment' => "Id"); if (empty($class_type)) { $this->fields['fk_asset'] = array('type' => 'integer:Asset:asset/class/asset.class.php:1:status=1 AND entity IN (__SHARED_ENTITIES__)', 'label' => 'Asset', 'enabled' => '1', 'position' => 0, 'notnull' => 0, 'visible' => 0, 'index' => 1, 'validate' => '1',); } else { @@ -236,11 +237,11 @@ class AssetDepreciationOptions extends CommonObject if (in_array($field_info['type'], array('text', 'html'))) { $value = GETPOST($html_name, 'restricthtml'); } elseif ($field_info['type'] == 'date') { - $value = dol_mktime(12, 0, 0, GETPOST($html_name . 'month', 'int'), GETPOST($html_name . 'day', 'int'), GETPOST($html_name . 'year', 'int')); // for date without hour, we use gmt + $value = dol_mktime(12, 0, 0, GETPOSTINT($html_name . 'month'), GETPOSTINT($html_name . 'day'), GETPOSTINT($html_name . 'year')); // for date without hour, we use gmt } elseif ($field_info['type'] == 'datetime') { - $value = dol_mktime(GETPOST($html_name . 'hour', 'int'), GETPOST($html_name . 'min', 'int'), GETPOST($html_name . 'sec', 'int'), GETPOST($html_name . 'month', 'int'), GETPOST($html_name . 'day', 'int'), GETPOST($html_name . 'year', 'int'), 'tzuserrel'); + $value = dol_mktime(GETPOSTINT($html_name . 'hour'), GETPOSTINT($html_name . 'min'), GETPOSTINT($html_name . 'sec'), GETPOSTINT($html_name . 'month'), GETPOSTINT($html_name . 'day'), GETPOSTINT($html_name . 'year'), 'tzuserrel'); } elseif ($field_info['type'] == 'duration') { - $value = 60 * 60 * GETPOST($html_name . 'hour', 'int') + 60 * GETPOST($html_name . 'min', 'int'); + $value = 60 * 60 * GETPOSTINT($html_name . 'hour') + 60 * GETPOSTINT($html_name . 'min'); } elseif (preg_match('/^(integer|price|real|double)/', $field_info['type'])) { $value = price2num(GETPOST($html_name, 'alphanohtml')); // To fix decimal separator according to lang setup } elseif ($field_info['type'] == 'boolean') { @@ -268,7 +269,7 @@ class AssetDepreciationOptions extends CommonObject if ($field_info['notnull'] > 0 && $field_value == '' && !is_null($field_info['default']) && $field_info['default'] == '(PROV)') { $field_value = '(PROV)'; } elseif ((!empty($field_info['required']) || $field_info['notnull'] > 0) && $field_value == '' && !empty($field_info['default'])) { - $field_value = dol_eval($field_info['default'], 1); + $field_value = $field_info['default']; } if ($field_info['notnull'] > 0 && $field_value == '' && is_null($field_info['default'])) { $error++; diff --git a/htdocs/asset/class/assetmodel.class.php b/htdocs/asset/class/assetmodel.class.php index 6e34d7b6684..51243277071 100644 --- a/htdocs/asset/class/assetmodel.class.php +++ b/htdocs/asset/class/assetmodel.class.php @@ -1,6 +1,8 @@ * Copyright (C) 2021 Open-Dsi + * Copyright (C) 2024 Frédéric France + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -98,21 +100,21 @@ class AssetModel extends CommonObject */ /** - * @var array Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. + * @var array|string,position:int,notnull?:int,visible:int,noteditable?:int,default?:string,index?:int,foreignkey?:string,searchall?:int,isameasure?:int,css?:string,csslist?:string,help?:string,showoncombobox?:int,disabled?:int,arrayofkeyval?:array,comment?:string}> Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. */ - public $fields=array( - 'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>'1', 'position'=>1, 'notnull'=>1, 'visible'=>0, 'noteditable'=>'1', 'index'=>1, 'css'=>'left', 'comment'=>"Id"), - 'ref' => array('type'=>'varchar(128)', 'label'=>'Ref', 'enabled'=>'1', 'position'=>20, 'notnull'=>1, 'visible'=>1, 'index'=>1, 'searchall'=>1, 'showoncombobox'=>'1', 'validate'=>'1'), - 'label' => array('type'=>'varchar(255)', 'label'=>'Label', 'enabled'=>'1', 'position'=>30, 'notnull'=>1, 'visible'=>1, 'searchall'=>1, 'css'=>'minwidth300', 'cssview'=>'wordbreak', 'showoncombobox'=>'2', 'validate'=>'1',), - 'asset_type' => array('type'=>'smallint', 'label'=>'AssetType', 'enabled'=>'1', 'position'=>40, 'notnull'=>1, 'visible'=>1, 'arrayofkeyval'=>array('0'=>'AssetTypeIntangible', '1'=>'AssetTypeTangible', '2'=>'AssetTypeInProgress', '3'=>'AssetTypeFinancial'), 'validate'=>'1',), - 'note_public' => array('type'=>'html', 'label'=>'NotePublic', 'enabled'=>'1', 'position'=>300, 'notnull'=>0, 'visible'=>0, 'validate'=>'1',), - 'note_private' => array('type'=>'html', 'label'=>'NotePrivate', 'enabled'=>'1', 'position'=>301, 'notnull'=>0, 'visible'=>0, 'validate'=>'1',), - 'date_creation' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>'1', 'position'=>500, 'notnull'=>1, 'visible'=>-2,), - 'tms' => array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>'1', 'position'=>501, 'notnull'=>0, 'visible'=>-2,), - 'fk_user_creat' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserAuthor', 'enabled'=>'1', 'position'=>510, 'notnull'=>1, 'visible'=>-2, 'foreignkey'=>'user.rowid',), - 'fk_user_modif' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserModif', 'enabled'=>'1', 'position'=>511, 'notnull'=>-1, 'visible'=>-2,), - 'import_key' => array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>'1', 'position'=>1000, 'notnull'=>-1, 'visible'=>-2,), - 'status' => array('type'=>'smallint', 'label'=>'Status', 'enabled'=>'1', 'position'=>1000, 'notnull'=>1, 'default'=>'1', 'visible'=>1, 'index'=>1, 'arrayofkeyval'=>array('0'=>'Draft', '1'=>'Enabled', '9'=>'Disabled'), 'validate'=>'1',), + public $fields = array( + 'rowid' => array('type' => 'integer', 'label' => 'TechnicalID', 'enabled' => 1, 'position' => 1, 'notnull' => 1, 'visible' => 0, 'noteditable' => 1, 'index' => 1, 'css' => 'left', 'comment' => "Id"), + 'ref' => array('type' => 'varchar(128)', 'label' => 'Ref', 'enabled' => 1, 'position' => 20, 'notnull' => 1, 'visible' => 1, 'index' => 1, 'searchall' => 1, 'showoncombobox' => 1, 'validate' => 1), + 'label' => array('type' => 'varchar(255)', 'label' => 'Label', 'enabled' => 1, 'position' => 30, 'notnull' => 1, 'visible' => 1, 'searchall' => 1, 'css' => 'minwidth300', 'cssview' => 'wordbreak', 'showoncombobox' => '2', 'validate' => 1,), + 'asset_type' => array('type' => 'smallint', 'label' => 'AssetType', 'enabled' => 1, 'position' => 40, 'notnull' => 1, 'visible' => 1, 'arrayofkeyval' => array('0' => 'AssetTypeIntangible', '1' => 'AssetTypeTangible', '2' => 'AssetTypeInProgress', '3' => 'AssetTypeFinancial'), 'validate' => 1,), + 'note_public' => array('type' => 'html', 'label' => 'NotePublic', 'enabled' => 1, 'position' => 300, 'notnull' => 0, 'visible' => 0, 'validate' => 1,), + 'note_private' => array('type' => 'html', 'label' => 'NotePrivate', 'enabled' => 1, 'position' => 301, 'notnull' => 0, 'visible' => 0, 'validate' => 1,), + 'date_creation' => array('type' => 'datetime', 'label' => 'DateCreation', 'enabled' => 1, 'position' => 500, 'notnull' => 1, 'visible' => -2,), + 'tms' => array('type' => 'timestamp', 'label' => 'DateModification', 'enabled' => 1, 'position' => 501, 'notnull' => 0, 'visible' => -2,), + 'fk_user_creat' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'UserAuthor', 'enabled' => 1, 'position' => 510, 'notnull' => 1, 'visible' => -2, 'foreignkey' => 'user.rowid',), + 'fk_user_modif' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'UserModif', 'enabled' => 1, 'position' => 511, 'notnull' => -1, 'visible' => -2,), + 'import_key' => array('type' => 'varchar(14)', 'label' => 'ImportId', 'enabled' => 1, 'position' => 1000, 'notnull' => -1, 'visible' => -2,), + 'status' => array('type' => 'smallint', 'label' => 'Status', 'enabled' => 1, 'position' => 1000, 'notnull' => 1, 'default' => '1', 'visible' => 1, 'index' => 1, 'arrayofkeyval' => array('0' => 'Draft', '1' => 'Enabled', '9' => 'Disabled'), 'validate' => 1,), ); public $rowid; public $ref; @@ -338,18 +340,17 @@ class AssetModel extends CommonObject /** * Load list of objects in memory from the database. * - * @param string $sortorder Sort Order - * @param string $sortfield Sort field - * @param int $limit limit - * @param int $offset Offset - * @param array $filter Filter array. Example array('field'=>'valueforlike', 'customurl'=>...) - * @param string $filtermode Filter mode (AND or OR) - * @return array|int int <0 if KO, array of pages if OK + * @param string $sortorder Sort Order + * @param string $sortfield Sort field + * @param int $limit limit + * @param int $offset Offset + * @param string $filter Filter as an Universal Search string. + * Example: '((client:=:1) OR ((client:>=:2) AND (client:<=:3))) AND (client:!=:8) AND (nom:like:'a%')' + * @param string $filtermode No more used + * @return array|int int <0 if KO, array of pages if OK */ - public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND') + public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, $filter = '', $filtermode = 'AND') { - global $conf; - dol_syslog(__METHOD__, LOG_DEBUG); $records = array(); @@ -362,25 +363,14 @@ class AssetModel extends CommonObject } else { $sql .= " WHERE 1 = 1"; } + // Manage filter - $sqlwhere = array(); - if (count($filter) > 0) { - foreach ($filter as $key => $value) { - if ($key == 't.rowid') { - $sqlwhere[] = $key." = ".((int) $value); - } elseif (in_array($this->fields[$key]['type'], array('date', 'datetime', 'timestamp'))) { - $sqlwhere[] = $key." = '".$this->db->idate($value)."'"; - } elseif ($key == 'customsql') { - $sqlwhere[] = $value; - } elseif (strpos($value, '%') === false) { - $sqlwhere[] = $key." IN (".$this->db->sanitize($this->db->escape($value)).")"; - } else { - $sqlwhere[] = $key." LIKE '%".$this->db->escape($value)."%'"; - } - } - } - if (count($sqlwhere) > 0) { - $sql .= " AND (".implode(" ".$filtermode." ", $sqlwhere).")"; + $errormessage = ''; + $sql .= forgeSQLFromUniversalSearchCriteria($filter, $errormessage); + if ($errormessage) { + $this->errors[] = $errormessage; + dol_syslog(__METHOD__.' '.implode(',', $this->errors), LOG_ERR); + return -1; } if (!empty($sortfield)) { @@ -674,7 +664,7 @@ class AssetModel extends CommonObject global $action, $hookmanager; $hookmanager->initHooks(array('assetmodeldao')); - $parameters = array('id'=>$this->id, 'getnomurl'=>$result); + $parameters = array('id' => $this->id, 'getnomurl' => $result); $reshook = $hookmanager->executeHooks('getNomUrl', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks if ($reshook > 0) { $result = $hookmanager->resPrint; @@ -774,7 +764,7 @@ class AssetModel extends CommonObject * Initialise object with example values * Id must be 0 if object instance is a specimen * - * @return void + * @return int */ public function initAsSpecimen() { @@ -782,7 +772,7 @@ class AssetModel extends CommonObject // $this->property1 = ... // $this->property2 = ... - $this->initAsSpecimenCommon(); + return $this->initAsSpecimenCommon(); } /** diff --git a/htdocs/asset/depreciation.php b/htdocs/asset/depreciation.php index 6c8659aad9c..f20ccdbe7e7 100644 --- a/htdocs/asset/depreciation.php +++ b/htdocs/asset/depreciation.php @@ -32,7 +32,7 @@ require_once DOL_DOCUMENT_ROOT . '/asset/class/assetdepreciationoptions.class.ph $langs->loadLangs(array("assets", "companies")); // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'aZ09'); diff --git a/htdocs/asset/depreciation_options.php b/htdocs/asset/depreciation_options.php index 0b771b216d5..6202e4f2b6f 100644 --- a/htdocs/asset/depreciation_options.php +++ b/htdocs/asset/depreciation_options.php @@ -32,7 +32,7 @@ require_once DOL_DOCUMENT_ROOT . '/asset/class/assetdepreciationoptions.class.ph $langs->loadLangs(array("assets", "companies")); // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'aZ09'); diff --git a/htdocs/asset/disposal.php b/htdocs/asset/disposal.php index 98f07003db1..6ef7433061d 100644 --- a/htdocs/asset/disposal.php +++ b/htdocs/asset/disposal.php @@ -31,7 +31,7 @@ require_once DOL_DOCUMENT_ROOT.'/asset/class/asset.class.php'; $langs->loadLangs(array("assets", "companies")); // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'aZ09'); diff --git a/htdocs/asset/document.php b/htdocs/asset/document.php index 460b30d1a90..bf585199df1 100644 --- a/htdocs/asset/document.php +++ b/htdocs/asset/document.php @@ -37,14 +37,14 @@ $langs->loadLangs(array('assets', 'companies', 'other', 'mails')); $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm', 'alpha'); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); // Get parameters -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST("sortfield", 'alpha'); $sortorder = GETPOST("sortorder", 'alpha'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 diff --git a/htdocs/asset/list.php b/htdocs/asset/list.php index a2f421410ea..c35fe380279 100644 --- a/htdocs/asset/list.php +++ b/htdocs/asset/list.php @@ -36,7 +36,7 @@ $langs->loadLangs(array("assets", "other")); // Get parameters $action = GETPOST('action', 'aZ09') ? GETPOST('action', 'aZ09') : 'view'; // The action 'add', 'create', 'edit', 'update', 'view', ... $massaction = GETPOST('massaction', 'alpha'); // The bulk action (combo box choice into lists) -$show_files = GETPOST('show_files', 'int'); // Show files area generated by bulk actions ? +$show_files = GETPOSTINT('show_files'); // Show files area generated by bulk actions ? $confirm = GETPOST('confirm', 'alpha'); // Result of a confirmation $cancel = GETPOST('cancel', 'alpha'); // We click on a Cancel button $toselect = GETPOST('toselect', 'array'); // Array of ids of elements selected into a list @@ -44,13 +44,13 @@ $contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'as $backtopage = GETPOST('backtopage', 'alpha'); // Go back to a dedicated page $optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print') $mode = GETPOST('mode', 'alpha'); // mode view (kanban or common) -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha') || (empty($toselect) && $massaction === '0')) { $page = 0; } // If $page is not defined, or '' or -1 or if we click on clear filters or if we select empty mass action @@ -87,8 +87,8 @@ foreach ($object->fields as $key => $val) { $search[$key] = GETPOST('search_'.$key, 'alpha'); } if (preg_match('/^(date|timestamp|datetime)/', $val['type'])) { - $search[$key.'_dtstart'] = dol_mktime(0, 0, 0, GETPOST('search_'.$key.'_dtstartmonth', 'int'), GETPOST('search_'.$key.'_dtstartday', 'int'), GETPOST('search_'.$key.'_dtstartyear', 'int')); - $search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOST('search_'.$key.'_dtendmonth', 'int'), GETPOST('search_'.$key.'_dtendday', 'int'), GETPOST('search_'.$key.'_dtendyear', 'int')); + $search[$key.'_dtstart'] = dol_mktime(0, 0, 0, GETPOSTINT('search_'.$key.'_dtstartmonth'), GETPOSTINT('search_'.$key.'_dtstartday'), GETPOSTINT('search_'.$key.'_dtstartyear')); + $search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOSTINT('search_'.$key.'_dtendmonth'), GETPOSTINT('search_'.$key.'_dtendday'), GETPOSTINT('search_'.$key.'_dtendyear')); } } @@ -109,7 +109,7 @@ foreach ($object->fields as $key => $val) { $arrayfields['t.'.$key] = array( 'label'=>$val['label'], 'checked'=>(($visible < 0) ? 0 : 1), - 'enabled'=>($visible != 3 && dol_eval($val['enabled'], 1)), + 'enabled'=>(abs($visible) != 3 && dol_eval($val['enabled'], 1)), 'position'=>$val['position'], 'help'=> isset($val['help']) ? $val['help'] : '' ); @@ -396,7 +396,7 @@ $arrayofmassactions = array( if ($permissiontodelete) { $arrayofmassactions['predelete'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete"); } -if (GETPOST('nomassaction', 'int') || in_array($massaction, array('presend', 'predelete'))) { +if (GETPOSTINT('nomassaction') || in_array($massaction, array('presend', 'predelete'))) { $arrayofmassactions = array(); } $massactionbutton = $form->selectMassAction('', $arrayofmassactions); diff --git a/htdocs/asset/model/accountancy_codes.php b/htdocs/asset/model/accountancy_codes.php index 292c69defa7..61db2261bb1 100644 --- a/htdocs/asset/model/accountancy_codes.php +++ b/htdocs/asset/model/accountancy_codes.php @@ -32,7 +32,7 @@ require_once DOL_DOCUMENT_ROOT . '/asset/class/assetaccountancycodes.class.php'; $langs->loadLangs(array("assets", "companies")); // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'aZ09'); diff --git a/htdocs/asset/model/agenda.php b/htdocs/asset/model/agenda.php index e0b62ecec79..1eb0a2e850a 100644 --- a/htdocs/asset/model/agenda.php +++ b/htdocs/asset/model/agenda.php @@ -34,7 +34,7 @@ require_once DOL_DOCUMENT_ROOT . '/core/lib/functions2.lib.php'; $langs->loadLangs(array("assets", "other")); // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'aZ09'); @@ -51,10 +51,10 @@ if (GETPOST('actioncode', 'array')) { //$search_rowid = GETPOST('search_rowid'); //$search_agenda_label = GETPOST('search_agenda_label'); -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST("sortfield", 'alpha'); $sortorder = GETPOST("sortorder", 'alpha'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -173,14 +173,14 @@ if ($object->id > 0) { $objthirdparty = $object; $objcon = new stdClass(); - $out = '&origin=' . urlencode($object->element . '@' . $object->module) . '&originid=' . urlencode($object->id); + $out = '&origin=' . urlencode((string) ($object->element . '@' . $object->module)) . '&originid=' . urlencode((string) ($object->id)); $urlbacktopage = $_SERVER['PHP_SELF'] . '?id=' . $object->id; $out .= '&backtopage=' . urlencode($urlbacktopage); $permok = $user->hasRight('agenda', 'myactions', 'create'); if ((!empty($objthirdparty->id) || !empty($objcon->id)) && $permok) { //$out.='loadLangs(array("assets", "other")); // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm', 'alpha'); diff --git a/htdocs/asset/model/depreciation_options.php b/htdocs/asset/model/depreciation_options.php index 0000f2bf723..5beeb1a7a33 100644 --- a/htdocs/asset/model/depreciation_options.php +++ b/htdocs/asset/model/depreciation_options.php @@ -32,7 +32,7 @@ require_once DOL_DOCUMENT_ROOT . '/asset/class/assetdepreciationoptions.class.ph $langs->loadLangs(array("assets", "companies")); // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'aZ09'); diff --git a/htdocs/asset/model/list.php b/htdocs/asset/model/list.php index 00db6f0417c..cb61803017c 100644 --- a/htdocs/asset/model/list.php +++ b/htdocs/asset/model/list.php @@ -34,7 +34,7 @@ $langs->loadLangs(array("assets", "other")); $action = GETPOST('action', 'aZ09') ? GETPOST('action', 'aZ09') : 'view'; // The action 'add', 'create', 'edit', 'update', 'view', ... $massaction = GETPOST('massaction', 'alpha'); // The bulk action (combo box choice into lists) -$show_files = GETPOST('show_files', 'int'); // Show files area generated by bulk actions ? +$show_files = GETPOSTINT('show_files'); // Show files area generated by bulk actions ? $confirm = GETPOST('confirm', 'alpha'); // Result of a confirmation $cancel = GETPOST('cancel', 'alpha'); // We click on a Cancel button $toselect = GETPOST('toselect', 'array'); // Array of ids of elements selected into a list @@ -42,13 +42,13 @@ $contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'as $backtopage = GETPOST('backtopage', 'alpha'); // Go back to a dedicated page $optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print') -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha') || (empty($toselect) && $massaction === '0')) { $page = 0; } // If $page is not defined, or '' or -1 or if we click on clear filters or if we select empty mass action @@ -87,8 +87,8 @@ foreach ($object->fields as $key => $val) { $search[$key] = GETPOST('search_'.$key, 'alpha'); } if (preg_match('/^(date|timestamp|datetime)/', $val['type'])) { - $search[$key.'_dtstart'] = dol_mktime(0, 0, 0, GETPOST('search_'.$key.'_dtstartmonth', 'int'), GETPOST('search_'.$key.'_dtstartday', 'int'), GETPOST('search_'.$key.'_dtstartyear', 'int')); - $search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOST('search_'.$key.'_dtendmonth', 'int'), GETPOST('search_'.$key.'_dtendday', 'int'), GETPOST('search_'.$key.'_dtendyear', 'int')); + $search[$key.'_dtstart'] = dol_mktime(0, 0, 0, GETPOSTINT('search_'.$key.'_dtstartmonth'), GETPOSTINT('search_'.$key.'_dtstartday'), GETPOSTINT('search_'.$key.'_dtstartyear')); + $search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOSTINT('search_'.$key.'_dtendmonth'), GETPOSTINT('search_'.$key.'_dtendday'), GETPOSTINT('search_'.$key.'_dtendyear')); } } @@ -109,7 +109,7 @@ foreach ($object->fields as $key => $val) { $arrayfields['t.'.$key] = array( 'label'=>$val['label'], 'checked'=>(($visible < 0) ? 0 : 1), - 'enabled'=>($visible != 3 && dol_eval($val['enabled'], 1)), + 'enabled'=>(abs($visible) != 3 && dol_eval($val['enabled'], 1)), 'position'=>$val['position'], 'help'=> isset($val['help']) ? $val['help'] : '' ); @@ -399,7 +399,7 @@ $arrayofmassactions = array( if ($permissiontodelete) { $arrayofmassactions['predelete'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete"); } -if (GETPOST('nomassaction', 'int') || in_array($massaction, array('presend', 'predelete'))) { +if (GETPOSTINT('nomassaction') || in_array($massaction, array('presend', 'predelete'))) { $arrayofmassactions = array(); } $massactionbutton = $form->selectMassAction('', $arrayofmassactions); diff --git a/htdocs/asset/model/note.php b/htdocs/asset/model/note.php index 0476b6f4a57..e704b6ae390 100644 --- a/htdocs/asset/model/note.php +++ b/htdocs/asset/model/note.php @@ -31,7 +31,7 @@ require_once DOL_DOCUMENT_ROOT . '/asset/class/assetmodel.class.php'; $langs->loadLangs(array("assets", "companies")); // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'aZ09'); diff --git a/htdocs/asset/note.php b/htdocs/asset/note.php index d2a89f96f0f..a87f252acc9 100644 --- a/htdocs/asset/note.php +++ b/htdocs/asset/note.php @@ -31,7 +31,7 @@ require_once DOL_DOCUMENT_ROOT.'/asset/class/asset.class.php'; $langs->loadLangs(array("assets", "companies")); // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'aZ09'); diff --git a/htdocs/asset/tpl/accountancy_codes_edit.tpl.php b/htdocs/asset/tpl/accountancy_codes_edit.tpl.php index 93a261c442a..d0bd4f0c468 100644 --- a/htdocs/asset/tpl/accountancy_codes_edit.tpl.php +++ b/htdocs/asset/tpl/accountancy_codes_edit.tpl.php @@ -27,7 +27,7 @@ // Protection to avoid direct call of template if (empty($object) || !is_object($object)) { print "Error, template page can't be called as URL"; - exit; + exit(1); } if (!is_object($form)) { diff --git a/htdocs/asset/tpl/accountancy_codes_view.tpl.php b/htdocs/asset/tpl/accountancy_codes_view.tpl.php index 61954bfc936..b48f642c4c2 100644 --- a/htdocs/asset/tpl/accountancy_codes_view.tpl.php +++ b/htdocs/asset/tpl/accountancy_codes_view.tpl.php @@ -1,5 +1,6 @@ + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -27,7 +28,7 @@ // Protection to avoid direct call of template if (empty($object) || !is_object($object)) { print "Error, template page can't be called as URL"; - exit; + exit(1); } if (!is_object($form)) { @@ -58,7 +59,7 @@ if (empty($reshook)) { if (empty($assetdepreciationoptions->deprecation_options[$mode_key]) && $mode_key == "accelerated_depreciation") { continue; } - $width = ($mode_key == "economic")? "pull-left" : "pull-left"; + $width = "pull-left"; print '' . "\n"; print ''; foreach ($mode_info['fields'] as $field_key => $field_info) { diff --git a/htdocs/asset/tpl/depreciation_options_edit.tpl.php b/htdocs/asset/tpl/depreciation_options_edit.tpl.php index 649a00e0797..2741da86c2b 100644 --- a/htdocs/asset/tpl/depreciation_options_edit.tpl.php +++ b/htdocs/asset/tpl/depreciation_options_edit.tpl.php @@ -27,7 +27,7 @@ // Protection to avoid direct call of template if (empty($object) || !is_object($object)) { print "Error, template page can't be called as URL"; - exit; + exit(1); } if (!is_object($form)) { @@ -124,7 +124,7 @@ if (empty($reshook)) { print img_picto('', $field_info['picto'], '', false, 0, 0, '', 'pictofixedwidth'); } if (in_array($field_info['type'], array('int', 'integer'))) { - $value = GETPOSTISSET($html_name) ? GETPOST($html_name, 'int') : $assetdepreciationoptions->$field_key; + $value = GETPOSTISSET($html_name) ? GETPOSTINT($html_name) : $assetdepreciationoptions->$field_key; } elseif ($field_info['type'] == 'double') { $value = GETPOSTISSET($html_name) ? price2num(GETPOST($html_name, 'alphanohtml')) : $assetdepreciationoptions->$field_key; } elseif (preg_match('/^(text|html)/', $field_info['type'])) { @@ -136,7 +136,7 @@ if (empty($reshook)) { } $value = GETPOSTISSET($html_name) ? GETPOST($html_name, $check) : $assetdepreciationoptions->$field_key; } elseif ($field_info['type'] == 'price') { - $value = GETPOSTISSET($html_name) ? price2num(GETPOST($html_name)) : ($assetdepreciationoptions->$field_key ? price2num($assetdepreciationoptions->$field_key) : (!empty($field_info['default']) ? dol_eval($field_info['default'], 1) : 0)); + $value = GETPOSTISSET($html_name) ? price2num(GETPOST($html_name)) : ($assetdepreciationoptions->$field_key ? price2num($assetdepreciationoptions->$field_key) : (!empty($field_info['default']) ? $field_info['default'] : 0)); } elseif ($field_key == 'lang') { $value = GETPOSTISSET($html_name) ? GETPOST($html_name, 'aZ09') : $assetdepreciationoptions->lang; } else { diff --git a/htdocs/asset/tpl/depreciation_options_view.tpl.php b/htdocs/asset/tpl/depreciation_options_view.tpl.php index a98171ed1ea..c801d74505e 100644 --- a/htdocs/asset/tpl/depreciation_options_view.tpl.php +++ b/htdocs/asset/tpl/depreciation_options_view.tpl.php @@ -1,5 +1,6 @@ + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -27,7 +28,7 @@ // Protection to avoid direct call of template if (empty($object) || !is_object($object)) { print "Error, template page can't be called as URL"; - exit; + exit(1); } if (!is_object($form)) { @@ -64,7 +65,7 @@ if (empty($reshook)) { $assetdepreciationoptions->setInfosForMode($mode_key, $class_type, true); - $width = ($mode_key == "economic")? "pull-left" : "pull-left"; + $width = "pull-left"; print '
'.$langs->trans($mode_info['label']).'
' . "\n"; print ''; $mode_info['fields'] = dol_sort_array($mode_info['fields'], 'position'); diff --git a/htdocs/asset/tpl/depreciation_view.tpl.php b/htdocs/asset/tpl/depreciation_view.tpl.php index 2660fbbaee7..424d989665f 100644 --- a/htdocs/asset/tpl/depreciation_view.tpl.php +++ b/htdocs/asset/tpl/depreciation_view.tpl.php @@ -27,7 +27,7 @@ // Protection to avoid direct call of template if (empty($object) || !is_object($object)) { print "Error, template page can't be called as URL"; - exit; + exit(1); } if (!is_object($form)) { diff --git a/htdocs/asset/tpl/linkedobjectblock.tpl.php b/htdocs/asset/tpl/linkedobjectblock.tpl.php index 7dddd8cbeb1..0e8d62a6921 100644 --- a/htdocs/asset/tpl/linkedobjectblock.tpl.php +++ b/htdocs/asset/tpl/linkedobjectblock.tpl.php @@ -20,7 +20,7 @@ // Protection to avoid direct call of template if (empty($conf) || !is_object($conf)) { print "Error, template page can't be called as URL"; - exit; + exit(1); } print "\n"; diff --git a/htdocs/asterisk/wrapper.php b/htdocs/asterisk/wrapper.php index f81f081f9a3..865d2754981 100644 --- a/htdocs/asterisk/wrapper.php +++ b/htdocs/asterisk/wrapper.php @@ -182,7 +182,7 @@ if (!empty($number)) { $errno = 0; $errstr = 0; $strCallerId = "Dolibarr caller $found <".strtolower($number).">"; - $oSocket = @fsockopen($strHost, $port, $errno, $errstr, 10); + $oSocket = @fsockopen($strHost, (int) $port, $errno, $errstr, 10); if (!$oSocket) { print ''."\n"; $txt = "Failed to execute fsockopen($strHost, $port, \$errno, \$errstr, 10)
\n"; diff --git a/htdocs/barcode/printsheet.php b/htdocs/barcode/printsheet.php index 132c368114c..6ee4e9c9ac7 100644 --- a/htdocs/barcode/printsheet.php +++ b/htdocs/barcode/printsheet.php @@ -2,6 +2,7 @@ /* Copyright (C) 2003 Rodolphe Quiedeville * Copyright (C) 2003 Jean-Louis Bergamo * Copyright (C) 2006-2017 Laurent Destailleur + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -45,10 +46,10 @@ $year = dol_print_date($now, '%Y'); $month = dol_print_date($now, '%m'); $day = dol_print_date($now, '%d'); $forbarcode = GETPOST('forbarcode', 'alphanohtml'); -$fk_barcode_type = GETPOST('fk_barcode_type', 'int'); +$fk_barcode_type = GETPOSTINT('fk_barcode_type'); $mode = GETPOST('mode', 'aZ09'); $modellabel = GETPOST("modellabel", 'aZ09'); // Doc template to use -$numberofsticker = GETPOST('numberofsticker', 'int'); +$numberofsticker = GETPOSTINT('numberofsticker'); $mesg = ''; @@ -86,8 +87,8 @@ if ($reshook < 0) { if (empty($reshook)) { if (GETPOST('submitproduct') && GETPOST('submitproduct')) { $action = ''; // We reset because we don't want to build doc - if (GETPOST('productid', 'int') > 0) { - $result = $producttmp->fetch(GETPOST('productid', 'int')); + if (GETPOSTINT('productid') > 0) { + $result = $producttmp->fetch(GETPOSTINT('productid')); if ($result < 0) { setEventMessage($producttmp->error, 'errors'); } @@ -105,8 +106,8 @@ if (empty($reshook)) { } if (GETPOST('submitthirdparty') && GETPOST('submitthirdparty')) { $action = ''; // We reset because we don't want to build doc - if (GETPOST('socid', 'int') > 0) { - $thirdpartytmp->fetch(GETPOST('socid', 'int')); + if (GETPOSTINT('socid') > 0) { + $thirdpartytmp->fetch(GETPOSTINT('socid')); $forbarcode = $thirdpartytmp->barcode; $fk_barcode_type = $thirdpartytmp->barcode_type_code; @@ -222,6 +223,7 @@ if (empty($reshook)) { ); complete_substitutions_array($substitutionarray, $langs); + $arrayofrecords = array(); // For labels if ($mode == 'label') { $txtforsticker = "%PHOTO%"; // Photo will be barcode image, %BARCODE% possible when using TCPDF generator @@ -236,14 +238,14 @@ if (empty($reshook)) { if ($numberofsticker <= $MAXSTICKERS) { for ($i = 0; $i < $numberofsticker; $i++) { $arrayofrecords[] = array( - 'textleft'=>$textleft, - 'textheader'=>$textheader, - 'textfooter'=>$textfooter, - 'textright'=>$textright, - 'code'=>$code, - 'encoding'=>$encoding, - 'is2d'=>$is2d, - 'photo'=>!empty($barcodeimage) ? $barcodeimage : '' // Photo must be a file that exists with format supported by TCPDF + 'textleft' => $textleft, + 'textheader' => $textheader, + 'textfooter' => $textfooter, + 'textright' => $textright, + 'code' => $code, + 'encoding' => $encoding, + 'is2d' => $is2d, + 'photo' => !empty($barcodeimage) ? $barcodeimage : '' // Photo must be a file that exists with format supported by TCPDF ); } } else { @@ -252,8 +254,6 @@ if (empty($reshook)) { } } - $i++; - // Build and output PDF if (!$error && $mode == 'label') { if (!count($arrayofrecords)) { @@ -334,7 +334,7 @@ print '
'; print '
'; print $langs->trans("NumberOfStickers").'   '; print '
'; -print ''; +print ''; print '
'; print ''; @@ -410,7 +410,7 @@ if ($user->hasRight('produit', 'lire') || $user->hasRight('service', 'lire')) { print ''; print '
'; print '
'; - $form->select_produits(GETPOST('productid', 'int'), 'productid', '', '', 0, -1, 2, '', 0, array(), 0, '1', 0, 'minwidth400imp', 1); + $form->select_produits(GETPOSTINT('productid'), 'productid', '', '', 0, -1, 2, '', 0, array(), 0, '1', 0, 'minwidth400imp', 1); print '   '; print '
'; } @@ -419,7 +419,7 @@ if ($user->hasRight('societe', 'lire')) { print ''; print '
'; print '
'; - print $form->select_company(GETPOST('socid', 'int'), 'socid', '', 'SelectThirdParty', 0, 0, array(), 0, 'minwidth300'); + print $form->select_company(GETPOSTINT('socid'), 'socid', '', 'SelectThirdParty', 0, 0, array(), 0, 'minwidth300'); print '   '; print '
'; } diff --git a/htdocs/blockedlog/admin/blockedlog.php b/htdocs/blockedlog/admin/blockedlog.php index bb8cd151bbd..8978814dcb5 100644 --- a/htdocs/blockedlog/admin/blockedlog.php +++ b/htdocs/blockedlog/admin/blockedlog.php @@ -40,7 +40,7 @@ if (!$user->admin || empty($conf->blockedlog->enabled)) { // Get Parameters $action = GETPOST('action', 'aZ09'); $backtopage = GETPOST('backtopage', 'alpha'); -$withtab = GETPOST('withtab', 'int'); +$withtab = GETPOSTINT('withtab'); /* diff --git a/htdocs/blockedlog/admin/blockedlog_list.php b/htdocs/blockedlog/admin/blockedlog_list.php index 8a39531b7e0..bb385e34984 100644 --- a/htdocs/blockedlog/admin/blockedlog_list.php +++ b/htdocs/blockedlog/admin/blockedlog_list.php @@ -46,17 +46,17 @@ $contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'bl $backtopage = GETPOST('backtopage', 'alpha'); // Go back to a dedicated page $optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print') -$search_showonlyerrors = GETPOST('search_showonlyerrors', 'int'); +$search_showonlyerrors = GETPOSTINT('search_showonlyerrors'); if ($search_showonlyerrors < 0) { $search_showonlyerrors = 0; } -$search_startyear = GETPOST('search_startyear', 'int'); -$search_startmonth = GETPOST('search_startmonth', 'int'); -$search_startday = GETPOST('search_startday', 'int'); -$search_endyear = GETPOST('search_endyear', 'int'); -$search_endmonth = GETPOST('search_endmonth', 'int'); -$search_endday = GETPOST('search_endday', 'int'); +$search_startyear = GETPOSTINT('search_startyear'); +$search_startmonth = GETPOSTINT('search_startmonth'); +$search_startday = GETPOSTINT('search_startday'); +$search_endyear = GETPOSTINT('search_endyear'); +$search_endmonth = GETPOSTINT('search_endmonth'); +$search_endday = GETPOSTINT('search_endday'); $search_id = GETPOST('search_id', 'alpha'); $search_fk_user = GETPOST('search_fk_user', 'intcomma'); $search_start = -1; @@ -80,10 +80,10 @@ if (($search_start == -1 || empty($search_start)) && !GETPOSTISSET('search_start } // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -159,9 +159,9 @@ if ($action === 'downloadblockchain') { $sql = "SELECT rowid,date_creation,tms,user_fullname,action,amounts,element,fk_object,date_object,ref_object,signature,fk_user,object_data"; $sql .= " FROM ".MAIN_DB_PREFIX."blockedlog"; $sql .= " WHERE entity = ".$conf->entity; - if (GETPOST('monthtoexport', 'int') > 0 || GETPOST('yeartoexport', 'int') > 0) { - $dates = dol_get_first_day(GETPOST('yeartoexport', 'int'), GETPOST('monthtoexport', 'int') ? GETPOST('monthtoexport', 'int') : 1); - $datee = dol_get_last_day(GETPOST('yeartoexport', 'int'), GETPOST('monthtoexport', 'int') ? GETPOST('monthtoexport', 'int') : 12); + if (GETPOSTINT('monthtoexport') > 0 || GETPOSTINT('yeartoexport') > 0) { + $dates = dol_get_first_day(GETPOSTINT('yeartoexport'), GETPOSTINT('monthtoexport') ? GETPOSTINT('monthtoexport') : 1); + $datee = dol_get_last_day(GETPOSTINT('yeartoexport'), GETPOSTINT('monthtoexport') ? GETPOSTINT('monthtoexport') : 12); $sql .= " AND date_creation BETWEEN '".$db->idate($dates)."' AND '".$db->idate($datee)."'"; } $sql .= " ORDER BY rowid ASC"; // Required so we get the first one @@ -189,9 +189,9 @@ if ($action === 'downloadblockchain') { $sql = "SELECT rowid, date_creation, tms, user_fullname, action, amounts, element, fk_object, date_object, ref_object, signature, fk_user, object_data, object_version"; $sql .= " FROM ".MAIN_DB_PREFIX."blockedlog"; $sql .= " WHERE entity = ".((int) $conf->entity); - if (GETPOST('monthtoexport', 'int') > 0 || GETPOST('yeartoexport', 'int') > 0) { - $dates = dol_get_first_day(GETPOST('yeartoexport', 'int'), GETPOST('monthtoexport', 'int') ? GETPOST('monthtoexport', 'int') : 1); - $datee = dol_get_last_day(GETPOST('yeartoexport', 'int'), GETPOST('monthtoexport', 'int') ? GETPOST('monthtoexport', 'int') : 12); + if (GETPOSTINT('monthtoexport') > 0 || GETPOSTINT('yeartoexport') > 0) { + $dates = dol_get_first_day(GETPOSTINT('yeartoexport'), GETPOSTINT('monthtoexport') ? GETPOSTINT('monthtoexport') : 1); + $datee = dol_get_last_day(GETPOSTINT('yeartoexport'), GETPOSTINT('monthtoexport') ? GETPOSTINT('monthtoexport') : 12); $sql .= " AND date_creation BETWEEN '".$db->idate($dates)."' AND '".$db->idate($datee)."'"; } $sql .= " ORDER BY rowid ASC"; // Required so later we can use the parameter $previoushash of checkSignature() @@ -200,7 +200,7 @@ if ($action === 'downloadblockchain') { if ($res) { header('Content-Type: application/octet-stream'); header("Content-Transfer-Encoding: Binary"); - header("Content-disposition: attachment; filename=\"unalterable-log-archive-".$dolibarr_main_db_name."-".(GETPOST('yeartoexport', 'int') > 0 ? GETPOST('yeartoexport', 'int').(GETPOST('monthtoexport', 'int') > 0 ? sprintf("%02d", GETPOST('monthtoexport', 'int')) : '').'-' : '').$previoushash.".csv\""); + header("Content-disposition: attachment; filename=\"unalterable-log-archive-".$dolibarr_main_db_name."-".(GETPOSTINT('yeartoexport') > 0 ? GETPOSTINT('yeartoexport').(GETPOSTINT('monthtoexport') > 0 ? sprintf("%02d", GETPOSTINT('monthtoexport')) : '').'-' : '').$previoushash.".csv\""); print $langs->transnoentities('Id') .';'.$langs->transnoentities('Date') @@ -298,7 +298,7 @@ if (GETPOST('withtab', 'alpha')) { } else { $title = $langs->trans("BrowseBlockedLog"); } -$help_url="EN:Module_Unalterable_Archives_-_Logs|FR:Module_Archives_-_Logs_Inaltérable"; +$help_url = "EN:Module_Unalterable_Archives_-_Logs|FR:Module_Archives_-_Logs_Inaltérable"; llxHeader('', $title, $help_url); @@ -353,16 +353,16 @@ if ($search_startday > 0) { $param .= '&search_startday='.urlencode($search_startday); } if ($search_endyear > 0) { - $param .= '&search_endyear='.urlencode($search_endyear); + $param .= '&search_endyear='.urlencode((string) ($search_endyear)); } if ($search_endmonth > 0) { - $param .= '&search_endmonth='.urlencode($search_endmonth); + $param .= '&search_endmonth='.urlencode((string) ($search_endmonth)); } if ($search_endday > 0) { - $param .= '&search_endday='.urlencode($search_endday); + $param .= '&search_endday='.urlencode((string) ($search_endday)); } if ($search_showonlyerrors > 0) { - $param .= '&search_showonlyerrors='.urlencode($search_showonlyerrors); + $param .= '&search_showonlyerrors='.urlencode((string) ($search_showonlyerrors)); } if ($optioncss != '') { $param .= '&optioncss='.urlencode($optioncss); @@ -379,7 +379,7 @@ print ''; print '
'; print $langs->trans("RestrictYearToExport").': '; -$smonth = GETPOST('monthtoexport', 'int'); +$smonth = GETPOSTINT('monthtoexport'); // Month $retstring = ''; $retstring .= '"; print $retstring; -print ''; +print ''; print ''; print ''; if (getDolGlobalString('BLOCKEDLOG_USE_REMOTE_AUTHORITY')) { diff --git a/htdocs/blockedlog/ajax/block-add.php b/htdocs/blockedlog/ajax/block-add.php index e2009a01da1..cebd9151b5b 100644 --- a/htdocs/blockedlog/ajax/block-add.php +++ b/htdocs/blockedlog/ajax/block-add.php @@ -38,7 +38,7 @@ if (!defined('NOREQUIREHTML')) { $res = require '../../main.inc.php'; -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $element = GETPOST('element', 'alpha'); $action = GETPOST('action', 'aZ09'); diff --git a/htdocs/blockedlog/ajax/block-info.php b/htdocs/blockedlog/ajax/block-info.php index 8660ebbbc82..66d146cc533 100644 --- a/htdocs/blockedlog/ajax/block-info.php +++ b/htdocs/blockedlog/ajax/block-info.php @@ -41,7 +41,7 @@ if (!defined('NOREQUIREHTML')) { require '../../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/blockedlog/class/blockedlog.class.php'; -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $block = new BlockedLog($db); if ((!$user->admin && !$user->hasRight('blockedlog', 'read')) || empty($conf->blockedlog->enabled)) { diff --git a/htdocs/blockedlog/class/authority.class.php b/htdocs/blockedlog/class/authority.class.php index 683276a82fb..7a4836f21fd 100644 --- a/htdocs/blockedlog/class/authority.class.php +++ b/htdocs/blockedlog/class/authority.class.php @@ -316,7 +316,7 @@ class BlockedLogAuthority if ($res['content'] === 'blockalreadyadded' || $res['content'] === 'blockadded') { $block->setCertified(); } else { - $this->error = $langs->trans('ImpossibleToContactAuthority ', $url); + $this->error = $langs->trans('ImpossibleToContactAuthority', $url); return -1; } } diff --git a/htdocs/blockedlog/class/blockedlog.class.php b/htdocs/blockedlog/class/blockedlog.class.php index 23c40994d9b..64f69ea390d 100644 --- a/htdocs/blockedlog/class/blockedlog.class.php +++ b/htdocs/blockedlog/class/blockedlog.class.php @@ -2,6 +2,7 @@ /* Copyright (C) 2017 ATM Consulting * Copyright (C) 2017-2020 Laurent Destailleur * Copyright (C) 2022 charlene benke + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -146,7 +147,7 @@ class BlockedLog $this->trackedevents = array(); // Customer Invoice/Facture / Payment - if (isModEnabled('facture')) { + if (isModEnabled('invoice')) { $this->trackedevents['BILL_VALIDATE'] = 'logBILL_VALIDATE'; $this->trackedevents['BILL_DELETE'] = 'logBILL_DELETE'; $this->trackedevents['BILL_SENTBYMAIL'] = 'logBILL_SENTBYMAIL'; @@ -188,14 +189,14 @@ class BlockedLog */ // Members - if (isModEnabled('adherent')) { + if (isModEnabled('member')) { $this->trackedevents['MEMBER_SUBSCRIPTION_CREATE'] = 'logMEMBER_SUBSCRIPTION_CREATE'; $this->trackedevents['MEMBER_SUBSCRIPTION_MODIFY'] = 'logMEMBER_SUBSCRIPTION_MODIFY'; $this->trackedevents['MEMBER_SUBSCRIPTION_DELETE'] = 'logMEMBER_SUBSCRIPTION_DELETE'; } // Bank - if (isModEnabled("banque")) { + if (isModEnabled("bank")) { $this->trackedevents['PAYMENT_VARIOUS_CREATE'] = 'logPAYMENT_VARIOUS_CREATE'; $this->trackedevents['PAYMENT_VARIOUS_MODIFY'] = 'logPAYMENT_VARIOUS_MODIFY'; $this->trackedevents['PAYMENT_VARIOUS_DELETE'] = 'logPAYMENT_VARIOUS_DELETE'; @@ -351,6 +352,7 @@ class BlockedLog global $langs, $cachedUser; if (empty($cachedUser)) { + // @phan-suppress-next-line PhanPluginRedundantAssignment $cachedUser = array(); } @@ -1014,7 +1016,7 @@ class BlockedLog unset($keyforsignature); return array('checkresult' => $res, 'calculatedsignature' => $signature, 'previoushash' => $previoushash); } else { // Consume much memory ($keyforsignature is a large var) - return array('checkresult' => $res, 'calculatedsignature' => $signature, 'previoushash' => $previoushash, 'keyforsignature'=>$keyforsignature); + return array('checkresult' => $res, 'calculatedsignature' => $signature, 'previoushash' => $previoushash, 'keyforsignature' => $keyforsignature); } } else { unset($keyforsignature); @@ -1227,7 +1229,7 @@ class BlockedLog dol_print_error($this->db); } - dol_syslog("Module Blockedlog alreadyUsed with ignoresystem=".$ignoresystem." is ".$result); + dol_syslog("Module Blockedlog alreadyUsed with ignoresystem=".$ignoresystem." is ".json_encode($result)); return $result; } diff --git a/htdocs/bom/ajax/ajax.php b/htdocs/bom/ajax/ajax.php index eddb8a40dc5..943230cbed7 100644 --- a/htdocs/bom/ajax/ajax.php +++ b/htdocs/bom/ajax/ajax.php @@ -46,7 +46,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/cunits.class.php'; $action = GETPOST('action', 'aZ09'); -$idproduct = GETPOST('idproduct', 'int'); +$idproduct = GETPOSTINT('idproduct'); /* diff --git a/htdocs/bom/bom_agenda.php b/htdocs/bom/bom_agenda.php index d4fb24d6daa..f6229b309a1 100644 --- a/htdocs/bom/bom_agenda.php +++ b/htdocs/bom/bom_agenda.php @@ -35,8 +35,8 @@ require_once DOL_DOCUMENT_ROOT.'/bom/lib/bom.lib.php'; $langs->loadLangs(array('mrp', 'other')); // Get parameters -$id = GETPOST('id', 'int'); -$socid = GETPOST('socid', 'int'); +$id = GETPOSTINT('id'); +$socid = GETPOSTINT('socid'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); @@ -56,10 +56,10 @@ $search_rowid = GETPOST('search_rowid'); $search_agenda_label = GETPOST('search_agenda_label'); // Load variables for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 diff --git a/htdocs/bom/bom_card.php b/htdocs/bom/bom_card.php index 9abba40be0c..5753ce0bc89 100644 --- a/htdocs/bom/bom_card.php +++ b/htdocs/bom/bom_card.php @@ -2,6 +2,7 @@ /* Copyright (C) 2017-2023 Laurent Destailleur * Copyright (C) 2019 Frédéric France * Copyright (C) 2023 Charlene Benke + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -36,8 +37,8 @@ require_once DOL_DOCUMENT_ROOT.'/mrp/lib/mrp.lib.php'; $langs->loadLangs(array('mrp', 'other')); // Get parameters -$id = GETPOST('id', 'int'); -$lineid = GETPOST('lineid', 'int'); +$id = GETPOSTINT('id'); +$lineid = GETPOSTINT('lineid'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm', 'alpha'); @@ -47,9 +48,9 @@ $backtopage = GETPOST('backtopage', 'alpha'); // PDF -$hidedetails = (GETPOST('hidedetails', 'int') ? GETPOST('hidedetails', 'int') : (getDolGlobalString('MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS') ? 1 : 0)); -$hidedesc = (GETPOST('hidedesc', 'int') ? GETPOST('hidedesc', 'int') : (getDolGlobalString('MAIN_GENERATE_DOCUMENTS_HIDE_DESC') ? 1 : 0)); -$hideref = (GETPOST('hideref', 'int') ? GETPOST('hideref', 'int') : (getDolGlobalString('MAIN_GENERATE_DOCUMENTS_HIDE_REF') ? 1 : 0)); +$hidedetails = (GETPOSTINT('hidedetails') ? GETPOSTINT('hidedetails') : (getDolGlobalString('MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS') ? 1 : 0)); +$hidedesc = (GETPOSTINT('hidedesc') ? GETPOSTINT('hidedesc') : (getDolGlobalString('MAIN_GENERATE_DOCUMENTS_HIDE_DESC') ? 1 : 0)); +$hideref = (GETPOSTINT('hideref') ? GETPOSTINT('hideref') : (getDolGlobalString('MAIN_GENERATE_DOCUMENTS_HIDE_REF') ? 1 : 0)); // Initialize technical objects $object = new BOM($db); @@ -155,7 +156,7 @@ if (empty($reshook)) { $predef = ''; // Set if we used free entry or predefined product - $bom_child_id = (int) GETPOST('bom_id', 'int'); + $bom_child_id = GETPOSTINT('bom_id'); if ($bom_child_id > 0) { $bom_child = new BOM($db); $res = $bom_child->fetch($bom_child_id); @@ -163,12 +164,12 @@ if (empty($reshook)) { $idprod = $bom_child->fk_product; } } else { - $idprod = (!empty(GETPOST('idprodservice', 'int')) ? GETPOST('idprodservice', 'int') : (int) GETPOST('idprod', 'int')); + $idprod = (!empty(GETPOSTINT('idprodservice')) ? GETPOSTINT('idprodservice') : GETPOSTINT('idprod')); } $qty = price2num(GETPOST('qty', 'alpha'), 'MS'); $qty_frozen = price2num(GETPOST('qty_frozen', 'alpha'), 'MS'); - $disable_stock_change = GETPOST('disable_stock_change', 'int'); + $disable_stock_change = GETPOSTINT('disable_stock_change'); $efficiency = price2num(GETPOST('efficiency', 'alpha')); $fk_unit = GETPOST('fk_unit', 'alphanohtml'); @@ -199,7 +200,7 @@ if (empty($reshook)) { } // We check if we're allowed to add this bom - $TParentBom=array(); + $TParentBom = array(); $object->getParentBomTreeRecursive($TParentBom); if ($bom_child_id > 0 && !empty($TParentBom) && in_array($bom_child_id, $TParentBom)) { $n_child = new BOM($db); @@ -247,7 +248,7 @@ if (empty($reshook)) { // Set if we used free entry or predefined product $qty = price2num(GETPOST('qty', 'alpha'), 'MS'); $qty_frozen = price2num(GETPOST('qty_frozen', 'alpha'), 'MS'); - $disable_stock_change = GETPOST('disable_stock_change', 'int'); + $disable_stock_change = GETPOSTINT('disable_stock_change'); $efficiency = price2num(GETPOST('efficiency', 'alpha')); $fk_unit = GETPOST('fk_unit', 'alphanohtml'); @@ -306,7 +307,7 @@ $formfile = new FormFile($db); $title = $langs->trans('BOM'); -$help_url ='EN:Module_BOM'; +$help_url = 'EN:Module_BOM'; llxHeader('', $title, $help_url); // Part to create @@ -590,7 +591,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea print ($res == 0 && $object->status >= $object::STATUS_VALIDATED) ? '' : load_fiche_titre($langs->trans('BOMProductsList'), '', 'product'); - print '
+ print ' @@ -608,7 +609,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } if (!empty($object->lines)) { - $object->printObjectLines($action, $mysoc, null, GETPOST('lineid', 'int'), 1, '/bom/tpl'); + $object->printObjectLines($action, $mysoc, null, GETPOSTINT('lineid'), 1, '/bom/tpl'); } // Form to add new line @@ -642,7 +643,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea print ($res == 0 && $object->status >= $object::STATUS_VALIDATED) ? '' : load_fiche_titre($langs->trans('BOMServicesList'), '', 'service'); - print ' + print ' @@ -660,7 +661,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } if (!empty($object->lines)) { - $object->printObjectLines($action, $mysoc, null, GETPOST('lineid', 'int'), 1, '/bom/tpl'); + $object->printObjectLines($action, $mysoc, null, GETPOSTINT('lineid'), 1, '/bom/tpl'); } // Form to add new line diff --git a/htdocs/bom/bom_document.php b/htdocs/bom/bom_document.php index df5a9044bf5..458d9d0b1aa 100644 --- a/htdocs/bom/bom_document.php +++ b/htdocs/bom/bom_document.php @@ -37,7 +37,7 @@ $langs->loadLangs(array("mrp", "companies", "other", "mails")); // Get parameters $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm', 'alpha'); -$id = (GETPOST('socid', 'int') ? GETPOST('socid', 'int') : GETPOST('id', 'int')); +$id = (GETPOSTINT('socid') ? GETPOSTINT('socid') : GETPOSTINT('id')); $ref = GETPOST('ref', 'alpha'); // Security check - Protection if external user @@ -46,10 +46,10 @@ $ref = GETPOST('ref', 'alpha'); // $result = restrictedArea($user, 'bom', $id); // Load variables for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 diff --git a/htdocs/bom/bom_list.php b/htdocs/bom/bom_list.php index a4d3be63e5f..a3d335c11da 100644 --- a/htdocs/bom/bom_list.php +++ b/htdocs/bom/bom_list.php @@ -1,5 +1,6 @@ + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -33,10 +34,10 @@ require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php'; $langs->loadLangs(array('mrp', 'other')); // Get Parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $action = GETPOST('action', 'aZ09') ? GETPOST('action', 'aZ09') : 'view'; // The action 'add', 'create', 'edit', 'update', 'view', ... $massaction = GETPOST('massaction', 'alpha'); // The bulk action (combo box choice into lists) -$show_files = GETPOST('show_files', 'int'); // Show files area generated by bulk actions ? +$show_files = GETPOSTINT('show_files'); // Show files area generated by bulk actions ? $confirm = GETPOST('confirm', 'alpha'); // Result of a confirmation $cancel = GETPOST('cancel', 'alpha'); // We click on a Cancel button $toselect = GETPOST('toselect', 'array'); // Array of ids of elements selected into a list @@ -47,7 +48,7 @@ $mode = GETPOST('mode', 'aZ'); // mode view (kanban or common) // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); $page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT('page'); @@ -89,8 +90,8 @@ foreach ($object->fields as $key => $val) { $search[$key] = GETPOST('search_'.$key, 'alpha'); } if (preg_match('/^(date|timestamp|datetime)/', $val['type'])) { - $search[$key.'_dtstart'] = dol_mktime(0, 0, 0, GETPOST('search_'.$key.'_dtstartmonth', 'int'), GETPOST('search_'.$key.'_dtstartday', 'int'), GETPOST('search_'.$key.'_dtstartyear', 'int')); - $search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOST('search_'.$key.'_dtendmonth', 'int'), GETPOST('search_'.$key.'_dtendday', 'int'), GETPOST('search_'.$key.'_dtendyear', 'int')); + $search[$key.'_dtstart'] = dol_mktime(0, 0, 0, GETPOSTINT('search_'.$key.'_dtstartmonth'), GETPOSTINT('search_'.$key.'_dtstartday'), GETPOSTINT('search_'.$key.'_dtstartyear')); + $search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOSTINT('search_'.$key.'_dtendmonth'), GETPOSTINT('search_'.$key.'_dtendday'), GETPOSTINT('search_'.$key.'_dtendyear')); } } @@ -109,11 +110,11 @@ foreach ($object->fields as $key => $val) { if (!empty($val['visible'])) { $visible = (int) dol_eval($val['visible'], 1); $arrayfields['t.'.$key] = array( - 'label'=>$val['label'], - 'checked'=>(($visible < 0) ? 0 : 1), - 'enabled'=>(abs($visible) != 3 && dol_eval($val['enabled'], 1)), - 'position'=>$val['position'], - 'help'=> isset($val['help']) ? $val['help'] : '' + 'label' => $val['label'], + 'checked' => (($visible < 0) ? 0 : 1), + 'enabled' => (abs($visible) != 3 && (int) dol_eval($val['enabled'], 1)), + 'position' => $val['position'], + 'help' => isset($val['help']) ? $val['help'] : '' ); } } @@ -218,11 +219,7 @@ if (empty($reshook)) { } if (!$error) { - if ($nbok > 1) { - setEventMessages($langs->trans("RecordsModified", $nbok), null, 'mesgs'); - } else { - setEventMessages($langs->trans("RecordsModified", $nbok), null, 'mesgs'); - } + setEventMessages($langs->trans("RecordsModified", $nbok), null, 'mesgs'); $db->commit(); } else { $db->rollback(); @@ -266,11 +263,7 @@ if (empty($reshook)) { } if (!$error) { - if ($nbok > 1) { - setEventMessages($langs->trans("RecordsModified", $nbok), null, 'mesgs'); - } else { - setEventMessages($langs->trans("RecordsModified", $nbok), null, 'mesgs'); - } + setEventMessages($langs->trans("RecordsModified", $nbok), null, 'mesgs'); $db->commit(); } else { $db->rollback(); @@ -322,7 +315,7 @@ $parameters = array(); $reshook = $hookmanager->executeHooks('printFieldListFrom', $parameters, $object, $action); // Note that $action and $object may have been modified by hook $sql .= $hookmanager->resPrint; if ($object->ismultientitymanaged == 1) { - $sql .= " WHERE t.entity IN (".getEntity($object->element, (GETPOST('search_current_entity', 'int') ? 0 : 1)).")"; + $sql .= " WHERE t.entity IN (".getEntity($object->element, (GETPOSTINT('search_current_entity') ? 0 : 1)).")"; } else { $sql .= " WHERE 1 = 1"; } @@ -339,17 +332,17 @@ foreach ($search as $key => $val) { $mode_search = 2; } if ($search[$key] != '') { - $sql .= natural_search("t.".$db->escape($key), $search[$key], (($key == 'status') ? 2 : $mode_search)); + $sql .= natural_search("t.".$db->sanitize($key), $search[$key], (($key == 'status') ? 2 : $mode_search)); } } else { if (preg_match('/(_dtstart|_dtend)$/', $key) && $search[$key] != '') { - $columnName=preg_replace('/(_dtstart|_dtend)$/', '', $key); + $columnName = preg_replace('/(_dtstart|_dtend)$/', '', $key); if (preg_match('/^(date|timestamp|datetime)/', $object->fields[$columnName]['type'])) { if (preg_match('/_dtstart$/', $key)) { - $sql .= " AND t.".$db->escape($columnName)." >= '".$db->idate($search[$key])."'"; + $sql .= " AND t.".$db->sanitize($columnName)." >= '".$db->idate($search[$key])."'"; } if (preg_match('/_dtend$/', $key)) { - $sql .= " AND t.".$db->escape($columnName)." <= '".$db->idate($search[$key])."'"; + $sql .= " AND t.".$db->sanitize($columnName)." <= '".$db->idate($search[$key])."'"; } } } @@ -457,9 +450,9 @@ foreach ($search as $key => $val) { } } } elseif (preg_match('/(_dtstart|_dtend)$/', $key) && !empty($val)) { - $param .= '&search_'.$key.'month='.((int) GETPOST('search_'.$key.'month', 'int')); - $param .= '&search_'.$key.'day='.((int) GETPOST('search_'.$key.'day', 'int')); - $param .= '&search_'.$key.'year='.((int) GETPOST('search_'.$key.'year', 'int')); + $param .= '&search_'.$key.'month='.(GETPOSTINT('search_'.$key.'month')); + $param .= '&search_'.$key.'day='.(GETPOSTINT('search_'.$key.'day')); + $param .= '&search_'.$key.'year='.(GETPOSTINT('search_'.$key.'year')); } elseif ($search[$key] != '') { $param .= '&search_'.$key.'='.urlencode($search[$key]); } @@ -474,13 +467,13 @@ $param .= $hookmanager->resPrint; // List of mass actions available $arrayofmassactions = array( //'presend'=>img_picto('', 'email', 'class="pictofixedwidth"').$langs->trans("SendByMail"), - 'enable'=>img_picto('', 'check', 'class="pictofixedwidth"').$langs->trans("Enable"), - 'disable'=>img_picto('', 'close_title', 'class="pictofixedwidth"').$langs->trans("Disable"), + 'enable' => img_picto('', 'check', 'class="pictofixedwidth"').$langs->trans("Enable"), + 'disable' => img_picto('', 'close_title', 'class="pictofixedwidth"').$langs->trans("Disable"), ); if (!empty($permissiontodelete)) { $arrayofmassactions['predelete'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete"); } -if (GETPOST('nomassaction', 'int') || in_array($massaction, array('presend', 'predelete'))) { +if (GETPOSTINT('nomassaction') || in_array($massaction, array('presend', 'predelete'))) { $arrayofmassactions = array(); } $massactionbutton = $form->selectMassAction('', $arrayofmassactions); @@ -500,8 +493,8 @@ print ''; print ''; $newcardbutton = ''; -$newcardbutton .= dolGetButtonTitle($langs->trans('ViewList'), '', 'fa fa-bars imgforviewmode', $_SERVER["PHP_SELF"].'?mode=common'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ((empty($mode) || $mode == 'common') ? 2 : 1), array('morecss'=>'reposition')); -$newcardbutton .= dolGetButtonTitle($langs->trans('ViewKanban'), '', 'fa fa-th-list imgforviewmode', $_SERVER["PHP_SELF"].'?mode=kanban'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ($mode == 'kanban' ? 2 : 1), array('morecss'=>'reposition')); +$newcardbutton .= dolGetButtonTitle($langs->trans('ViewList'), '', 'fa fa-bars imgforviewmode', $_SERVER["PHP_SELF"].'?mode=common'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ((empty($mode) || $mode == 'common') ? 2 : 1), array('morecss' => 'reposition')); +$newcardbutton .= dolGetButtonTitle($langs->trans('ViewKanban'), '', 'fa fa-th-list imgforviewmode', $_SERVER["PHP_SELF"].'?mode=kanban'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ($mode == 'kanban' ? 2 : 1), array('morecss' => 'reposition')); $newcardbutton .= dolGetButtonTitleSeparator(); $newcardbutton .= dolGetButtonTitle($langs->trans('New'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/bom/bom_card.php?action=create&backtopage='.urlencode($_SERVER['PHP_SELF']), '', $user->hasRight('bom', 'write')); @@ -547,7 +540,7 @@ if (!empty($moreforfilter)) { } $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; -$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')) : ''); // This also change content of $arrayfields +$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) : ''); // This also change content of $arrayfields $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); print '
'; @@ -607,7 +600,7 @@ foreach ($object->fields as $key => $val) { include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php'; // Fields from hook -$parameters = array('arrayfields'=>$arrayfields); +$parameters = array('arrayfields' => $arrayfields); $reshook = $hookmanager->executeHooks('printFieldListOption', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; // Action column @@ -650,7 +643,7 @@ foreach ($object->fields as $key => $val) { // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; // Hook fields -$parameters = array('arrayfields'=>$arrayfields, 'param'=>$param, 'sortfield'=>$sortfield, 'sortorder'=>$sortorder, 'totalarray'=>&$totalarray); +$parameters = array('arrayfields' => $arrayfields, 'param' => $param, 'sortfield' => $sortfield, 'sortorder' => $sortorder, 'totalarray' => &$totalarray); $reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; // Action column @@ -711,7 +704,7 @@ while ($i < $imaxinloop) { $selected = 1; } } - print $object->getKanbanView('', array('prod'=>$prod, 'selected' => $selected)); + print $object->getKanbanView('', array('prod' => $prod, 'selected' => $selected)); if ($i == ($imaxinloop - 1)) { print '
'; print ''; @@ -787,7 +780,7 @@ while ($i < $imaxinloop) { // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php'; // Fields from hook - $parameters = array('arrayfields'=>$arrayfields, 'object'=>$object, 'obj'=>$obj, 'i'=>$i, 'totalarray'=>&$totalarray); + $parameters = array('arrayfields' => $arrayfields, 'object' => $object, 'obj' => $obj, 'i' => $i, 'totalarray' => &$totalarray); $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; // Action column @@ -830,7 +823,7 @@ if ($num == 0) { $db->free($resql); -$parameters = array('arrayfields'=>$arrayfields, 'sql'=>$sql); +$parameters = array('arrayfields' => $arrayfields, 'sql' => $sql); $reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; diff --git a/htdocs/bom/bom_net_needs.php b/htdocs/bom/bom_net_needs.php index 52b472428b6..00383849710 100644 --- a/htdocs/bom/bom_net_needs.php +++ b/htdocs/bom/bom_net_needs.php @@ -33,8 +33,8 @@ require_once DOL_DOCUMENT_ROOT.'/bom/lib/bom.lib.php'; $langs->loadLangs(array("mrp", "other", "stocks")); // Get parameters -$id = GETPOST('id', 'int'); -$lineid = GETPOST('lineid', 'int'); +$id = GETPOSTINT('id'); +$lineid = GETPOSTINT('lineid'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm', 'alpha'); diff --git a/htdocs/bom/bom_note.php b/htdocs/bom/bom_note.php index aba22ade7ca..5237fc30066 100644 --- a/htdocs/bom/bom_note.php +++ b/htdocs/bom/bom_note.php @@ -31,7 +31,7 @@ require_once DOL_DOCUMENT_ROOT.'/bom/lib/bom.lib.php'; $langs->loadLangs(array("mrp", "companies")); // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'aZ09'); diff --git a/htdocs/bom/class/api_boms.class.php b/htdocs/bom/class/api_boms.class.php index 464f4193f35..f551600797a 100644 --- a/htdocs/bom/class/api_boms.class.php +++ b/htdocs/bom/class/api_boms.class.php @@ -180,7 +180,7 @@ class Boms extends DolibarrApi * Create bom object * * @param array $request_data Request datas - * @return int ID of bom + * @return int ID of bom * * @throws RestException 403 Access denied * @throws RestException 500 Error retrieving list of boms @@ -214,10 +214,9 @@ class Boms extends DolibarrApi /** * Update bom * - * @param int $id Id of bom to update - * @param array $request_data Datas - * - * @return int + * @param int $id Id of bom to update + * @param array $request_data Datas + * @return Object Object after update * * @throws RestException 403 Access denied * @throws RestException 404 BOM not found @@ -439,7 +438,7 @@ class Boms extends DolibarrApi * * @url DELETE {id}/lines/{lineid} * - * @return int + * @return array * * @throws RestException 403 Access denied * @throws RestException 404 BOM not found @@ -474,7 +473,12 @@ class Boms extends DolibarrApi $updateRes = $this->bom->deleteLine(DolibarrApiAccess::$user, $lineid); if ($updateRes > 0) { - return $this->get($id); + return array( + 'success' => array( + 'code' => 200, + 'message' => 'line ' .$lineid. ' deleted' + ) + ); } else { throw new RestException(500, $this->bom->error); } diff --git a/htdocs/bom/class/bom.class.php b/htdocs/bom/class/bom.class.php index eacbcec0f07..72aab83ac21 100644 --- a/htdocs/bom/class/bom.class.php +++ b/htdocs/bom/class/bom.class.php @@ -2,6 +2,8 @@ /* Copyright (C) 2019 Laurent Destailleur * Copyright (C) 2023 Benjamin Falière * Copyright (C) 2023 Charlene Benke + * Copyright (C) 2024 Frédéric France + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -109,32 +111,32 @@ class BOM extends CommonObject // BEGIN MODULEBUILDER PROPERTIES /** - * @var array Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. + * @var array|string,position:int,notnull?:int,visible:int,noteditable?:int,default?:string,index?:int,foreignkey?:string,searchall?:int,isameasure?:int,css?:string,csslist?:string,help?:string,showoncombobox?:int,disabled?:int,arrayofkeyval?:array,comment?:string}> Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. */ public $fields = array( - 'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>1, 'visible'=>-2, 'position'=>1, 'notnull'=>1, 'index'=>1, 'comment'=>"Id",), - 'entity' => array('type'=>'integer', 'label'=>'Entity', 'enabled'=>1, 'visible'=>0, 'notnull'=> 1, 'default'=>1, 'index'=>1, 'position'=>5), - 'ref' => array('type'=>'varchar(128)', 'label'=>'Ref', 'enabled'=>1, 'noteditable'=>1, 'visible'=>4, 'position'=>10, 'notnull'=>1, 'default'=>'(PROV)', 'index'=>1, 'searchall'=>1, 'comment'=>"Reference of BOM", 'showoncombobox'=>'1', 'csslist'=>'nowraponall'), - 'label' => array('type'=>'varchar(255)', 'label'=>'Label', 'enabled'=>1, 'visible'=>1, 'position'=>30, 'notnull'=>1, 'searchall'=>1, 'showoncombobox'=>'2', 'autofocusoncreate'=>1, 'css'=>'minwidth300 maxwidth400', 'csslist'=>'tdoverflowmax200'), - 'bomtype' => array('type'=>'integer', 'label'=>'Type', 'enabled'=>1, 'visible'=>1, 'position'=>33, 'notnull'=>1, 'default'=>'0', 'arrayofkeyval'=>array(0=>'Manufacturing', 1=>'Disassemble'), 'css'=>'minwidth175', 'csslist'=>'minwidth175 center'), + 'rowid' => array('type' => 'integer', 'label' => 'TechnicalID', 'enabled' => 1, 'visible' => -2, 'position' => 1, 'notnull' => 1, 'index' => 1, 'comment' => "Id",), + 'entity' => array('type' => 'integer', 'label' => 'Entity', 'enabled' => 1, 'visible' => 0, 'notnull' => 1, 'default' => 1, 'index' => 1, 'position' => 5), + 'ref' => array('type' => 'varchar(128)', 'label' => 'Ref', 'enabled' => 1, 'noteditable' => 1, 'visible' => 4, 'position' => 10, 'notnull' => 1, 'default' => '(PROV)', 'index' => 1, 'searchall' => 1, 'comment' => "Reference of BOM", 'showoncombobox' => 1, 'csslist' => 'nowraponall'), + 'label' => array('type' => 'varchar(255)', 'label' => 'Label', 'enabled' => 1, 'visible' => 1, 'position' => 30, 'notnull' => 1, 'searchall' => 1, 'showoncombobox' => '2', 'autofocusoncreate' => 1, 'css' => 'minwidth300 maxwidth400', 'csslist' => 'tdoverflowmax200'), + 'bomtype' => array('type' => 'integer', 'label' => 'Type', 'enabled' => 1, 'visible' => 1, 'position' => 33, 'notnull' => 1, 'default' => '0', 'arrayofkeyval' => array(0 => 'Manufacturing', 1 => 'Disassemble'), 'css' => 'minwidth175', 'csslist' => 'minwidth175 center'), //'bomtype' => array('type'=>'integer', 'label'=>'Type', 'enabled'=>1, 'visible'=>-1, 'position'=>32, 'notnull'=>1, 'default'=>'0', 'arrayofkeyval'=>array(0=>'Manufacturing')), - 'fk_product' => array('type'=>'integer:Product:product/class/product.class.php:1:((finished:is:null) or (finished:!=:0))', 'label'=>'Product', 'picto'=>'product', 'enabled'=>1, 'visible'=>1, 'position'=>35, 'notnull'=>1, 'index'=>1, 'help'=>'ProductBOMHelp', 'css'=>'maxwidth500', 'csslist'=>'tdoverflowmax100'), - 'description' => array('type'=>'text', 'label'=>'Description', 'enabled'=>1, 'visible'=>-1, 'position'=>60, 'notnull'=>-1,), - 'qty' => array('type'=>'real', 'label'=>'Quantity', 'enabled'=>1, 'visible'=>1, 'default'=>1, 'position'=>55, 'notnull'=>1, 'isameasure'=>'1', 'css'=>'maxwidth50imp right'), + 'fk_product' => array('type' => 'integer:Product:product/class/product.class.php:1:((finished:is:null) or (finished:!=:0))', 'label' => 'Product', 'picto' => 'product', 'enabled' => 1, 'visible' => 1, 'position' => 35, 'notnull' => 1, 'index' => 1, 'help' => 'ProductBOMHelp', 'css' => 'maxwidth500', 'csslist' => 'tdoverflowmax100'), + 'description' => array('type' => 'text', 'label' => 'Description', 'enabled' => 1, 'visible' => -1, 'position' => 60, 'notnull' => -1,), + 'qty' => array('type' => 'real', 'label' => 'Quantity', 'enabled' => 1, 'visible' => 1, 'default' => 1, 'position' => 55, 'notnull' => 1, 'isameasure' => 1, 'css' => 'maxwidth50imp right'), //'efficiency' => array('type'=>'real', 'label'=>'ManufacturingEfficiency', 'enabled'=>1, 'visible'=>-1, 'default'=>1, 'position'=>100, 'notnull'=>0, 'css'=>'maxwidth50imp', 'help'=>'ValueOfMeansLossForProductProduced'), - 'duration' => array('type'=>'duration', 'label'=>'EstimatedDuration', 'enabled'=>1, 'visible'=>-1, 'position'=>101, 'notnull'=>-1, 'css'=>'maxwidth50imp', 'help'=>'EstimatedDurationDesc'), - 'fk_warehouse' => array('type'=>'integer:Entrepot:product/stock/class/entrepot.class.php:0', 'label'=>'WarehouseForProduction', 'picto'=>'stock', 'enabled'=>1, 'visible'=>-1, 'position'=>102, 'css'=>'maxwidth500', 'csslist'=>'tdoverflowmax100'), - 'note_public' => array('type'=>'html', 'label'=>'NotePublic', 'enabled'=>1, 'visible'=>-2, 'position'=>161, 'notnull'=>-1,), - 'note_private' => array('type'=>'html', 'label'=>'NotePrivate', 'enabled'=>1, 'visible'=>-2, 'position'=>162, 'notnull'=>-1,), - 'date_creation' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>1, 'visible'=>-2, 'position'=>300, 'notnull'=>1,), - 'tms' => array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>1, 'visible'=>-2, 'position'=>501, 'notnull'=>1,), - 'date_valid' => array('type'=>'datetime', 'label'=>'DateValidation', 'enabled'=>1, 'visible'=>-2, 'position'=>502, 'notnull'=>0,), - 'fk_user_creat' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserCreation', 'picto'=>'user', 'enabled'=>1, 'visible'=>-2, 'position'=>510, 'notnull'=>1, 'foreignkey'=>'user.rowid', 'csslist'=>'tdoverflowmax100'), - 'fk_user_modif' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserModif', 'picto'=>'user', 'enabled'=>1, 'visible'=>-2, 'position'=>511, 'notnull'=>-1, 'csslist'=>'tdoverflowmax100'), - 'fk_user_valid' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserValidation', 'picto'=>'user', 'enabled'=>1, 'visible'=>-2, 'position'=>512, 'notnull'=>0, 'csslist'=>'tdoverflowmax100'), - 'import_key' => array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>1, 'visible'=>-2, 'position'=>1000, 'notnull'=>-1,), - 'model_pdf' =>array('type'=>'varchar(255)', 'label'=>'Model pdf', 'enabled'=>1, 'visible'=>0, 'position'=>1010), - 'status' => array('type'=>'integer', 'label'=>'Status', 'enabled'=>1, 'visible'=>2, 'position'=>1000, 'notnull'=>1, 'default'=>0, 'index'=>1, 'arrayofkeyval'=>array(0=>'Draft', 1=>'Enabled', 9=>'Disabled')), + 'duration' => array('type' => 'duration', 'label' => 'EstimatedDuration', 'enabled' => 1, 'visible' => -1, 'position' => 101, 'notnull' => -1, 'css' => 'maxwidth50imp', 'help' => 'EstimatedDurationDesc'), + 'fk_warehouse' => array('type' => 'integer:Entrepot:product/stock/class/entrepot.class.php:0', 'label' => 'WarehouseForProduction', 'picto' => 'stock', 'enabled' => 1, 'visible' => -1, 'position' => 102, 'css' => 'maxwidth500', 'csslist' => 'tdoverflowmax100'), + 'note_public' => array('type' => 'html', 'label' => 'NotePublic', 'enabled' => 1, 'visible' => -2, 'position' => 161, 'notnull' => -1,), + 'note_private' => array('type' => 'html', 'label' => 'NotePrivate', 'enabled' => 1, 'visible' => -2, 'position' => 162, 'notnull' => -1,), + 'date_creation' => array('type' => 'datetime', 'label' => 'DateCreation', 'enabled' => 1, 'visible' => -2, 'position' => 300, 'notnull' => 1,), + 'tms' => array('type' => 'timestamp', 'label' => 'DateModification', 'enabled' => 1, 'visible' => -2, 'position' => 501, 'notnull' => 1,), + 'date_valid' => array('type' => 'datetime', 'label' => 'DateValidation', 'enabled' => 1, 'visible' => -2, 'position' => 502, 'notnull' => 0,), + 'fk_user_creat' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'UserCreation', 'picto' => 'user', 'enabled' => 1, 'visible' => -2, 'position' => 510, 'notnull' => 1, 'foreignkey' => 'user.rowid', 'csslist' => 'tdoverflowmax100'), + 'fk_user_modif' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'UserModif', 'picto' => 'user', 'enabled' => 1, 'visible' => -2, 'position' => 511, 'notnull' => -1, 'csslist' => 'tdoverflowmax100'), + 'fk_user_valid' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'UserValidation', 'picto' => 'user', 'enabled' => 1, 'visible' => -2, 'position' => 512, 'notnull' => 0, 'csslist' => 'tdoverflowmax100'), + 'import_key' => array('type' => 'varchar(14)', 'label' => 'ImportId', 'enabled' => 1, 'visible' => -2, 'position' => 1000, 'notnull' => -1,), + 'model_pdf' => array('type' => 'varchar(255)', 'label' => 'Model pdf', 'enabled' => 1, 'visible' => 0, 'position' => 1010), + 'status' => array('type' => 'integer', 'label' => 'Status', 'enabled' => 1, 'visible' => 2, 'position' => 1000, 'notnull' => 1, 'default' => 0, 'index' => 1, 'arrayofkeyval' => array(0 => 'Draft', 1 => 'Enabled', 9 => 'Disabled')), ); /** @@ -235,7 +237,7 @@ class BOM extends CommonObject // protected $childtables=array(); /** - * @var array List of child tables. To know object to delete on cascade. + * @var string[] List of child tables. To know object to delete on cascade. */ protected $childtablesoncascade = array('bom_bomline'); @@ -484,18 +486,16 @@ class BOM extends CommonObject /** * Load list of objects in memory from the database. * - * @param string $sortorder Sort Order - * @param string $sortfield Sort field - * @param int $limit limit - * @param int $offset Offset - * @param array $filter Filter array. Example array('field'=>'valueforlike', 'customurl'=>...) - * @param string $filtermode Filter mode (AND or OR) - * @return array|int int <0 if KO, array of pages if OK + * @param string $sortorder Sort Order + * @param string $sortfield Sort field + * @param int $limit Limit + * @param int $offset Offset + * @param string $filter Filter USF + * @param string $filtermode Filter mode (AND or OR) + * @return array|int int <0 if KO, array of pages if OK */ - public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND') + public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, $filter = '', $filtermode = 'AND') { - global $conf; - dol_syslog(__METHOD__, LOG_DEBUG); $records = array(); @@ -508,23 +508,14 @@ class BOM extends CommonObject } else { $sql .= ' WHERE 1 = 1'; } + // Manage filter - $sqlwhere = array(); - if (count($filter) > 0) { - foreach ($filter as $key => $value) { - if ($key == 't.rowid') { - $sqlwhere[] = $key." = ".((int) $value); - } elseif (strpos($key, 'date') !== false) { - $sqlwhere[] = $key." = '".$this->db->idate($value)."'"; - } elseif ($key == 'customsql') { - $sqlwhere[] = $value; - } else { - $sqlwhere[] = $key." LIKE '%".$this->db->escape($value)."%'"; - } - } - } - if (count($sqlwhere) > 0) { - $sql .= " AND (".implode(" ".$filtermode." ", $sqlwhere).")"; + $errormessage = ''; + $sql .= forgeSQLFromUniversalSearchCriteria($filter, $errormessage); + if ($errormessage) { + $this->errors[] = $errormessage; + dol_syslog(__METHOD__.' '.implode(',', $this->errors), LOG_ERR); + return -1; } if (!empty($sortfield)) { @@ -600,7 +591,7 @@ class BOM extends CommonObject * @param int $fk_default_workstation Default workstation * @return int Return integer <0 if KO, Id of created object if OK */ - public function addLine($fk_product, $qty, $qty_frozen = 0, $disable_stock_change = 0, $efficiency = 1.0, $position = -1, $fk_bom_child = null, $import_key = null, $fk_unit = '', $array_options = array(), $fk_default_workstation = null) + public function addLine($fk_product, $qty, $qty_frozen = 0, $disable_stock_change = 0, $efficiency = 1.0, $position = -1, $fk_bom_child = null, $import_key = null, $fk_unit = 0, $array_options = array(), $fk_default_workstation = null) { global $mysoc, $conf, $langs, $user; @@ -1191,7 +1182,7 @@ class BOM extends CommonObject global $action, $hookmanager; $hookmanager->initHooks(array('bomdao')); - $parameters = array('id'=>$this->id, 'getnomurl' => &$result); + $parameters = array('id' => $this->id, 'getnomurl' => &$result); $reshook = $hookmanager->executeHooks('getNomUrl', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks if ($reshook > 0) { $result = $hookmanager->resPrint; @@ -1284,7 +1275,7 @@ class BOM extends CommonObject $this->lines = array(); $objectline = new BOMLine($this->db); - $result = $objectline->fetchAll('ASC', 'position', 0, 0, array('customsql'=>'fk_bom = '.((int) $this->id))); + $result = $objectline->fetchAll('ASC', 'position', 0, 0, '(fk_bom:=:'.((int) $this->id).')'); if (is_numeric($result)) { $this->error = $objectline->error; @@ -1368,13 +1359,15 @@ class BOM extends CommonObject * Initialise object with example values * Id must be 0 if object instance is a specimen * - * @return void + * @return int */ public function initAsSpecimen() { $this->initAsSpecimenCommon(); $this->ref = 'BOM-123'; $this->date_creation = dol_now() - 20000; + + return 1; } @@ -1411,7 +1404,7 @@ class BOM extends CommonObject * BOM costs calculation based on cost_price or pmp of each BOM line. * Set the property ->total_cost and ->unit_cost of BOM. * - * @return int Return integer <0 if KO, >0 if OK + * @return int|string Return integer <0 if KO, >0 if OK, or printable error result from hook */ public function calculateCosts() { @@ -1421,7 +1414,7 @@ class BOM extends CommonObject $this->unit_cost = 0; $this->total_cost = 0; - $parameters=array(); + $parameters = array(); $reshook = $hookmanager->executeHooks('calculateCostsBom', $parameters, $this); // Note that $action and $object may have been modified by hook if ($reshook > 0) { @@ -1548,13 +1541,13 @@ class BOM extends CommonObject foreach ($this->lines as $line) { if (!empty($line->childBom)) { foreach ($line->childBom as $childBom) { - $childBom->getNetNeeds($TNetNeeds, $line->qty*$qty); + $childBom->getNetNeeds($TNetNeeds, $line->qty * $qty); } } else { if (empty($TNetNeeds[$line->fk_product])) { $TNetNeeds[$line->fk_product] = 0; } - $TNetNeeds[$line->fk_product] += $line->qty*$qty; + $TNetNeeds[$line->fk_product] += $line->qty * $qty; } } } @@ -1576,9 +1569,9 @@ class BOM extends CommonObject foreach ($line->childBom as $childBom) { $TNetNeeds[$childBom->id]['bom'] = $childBom; $TNetNeeds[$childBom->id]['parentid'] = $this->id; - $TNetNeeds[$childBom->id]['qty'] = $line->qty*$qty; + $TNetNeeds[$childBom->id]['qty'] = $line->qty * $qty; $TNetNeeds[$childBom->id]['level'] = $level; - $childBom->getNetNeedsTree($TNetNeeds, $line->qty*$qty, $level+1); + $childBom->getNetNeedsTree($TNetNeeds, $line->qty * $qty, $level + 1); } } else { $TNetNeeds[$this->id]['product'][$line->fk_product]['qty'] += $line->qty * $qty; @@ -1605,7 +1598,7 @@ class BOM extends CommonObject } if (empty($bom_id)) { - $bom_id=$this->id; + $bom_id = $this->id; } $sql = 'SELECT l.fk_bom, b.label @@ -1617,7 +1610,7 @@ class BOM extends CommonObject if (!empty($resql)) { while ($res = $this->db->fetch_object($resql)) { $TParentBom[$res->fk_bom] = $res->fk_bom; - $this->getParentBomTreeRecursive($TParentBom, $res->fk_bom, $level+1); + $this->getParentBomTreeRecursive($TParentBom, $res->fk_bom, $level + 1); } } } @@ -1721,22 +1714,22 @@ class BOMLine extends CommonObjectLine // BEGIN MODULEBUILDER PROPERTIES /** - * @var array Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. + * @var array|string,position:int,notnull?:int,visible:int,noteditable?:int,default?:string,index?:int,foreignkey?:string,searchall?:int,isameasure?:int,css?:string,csslist?:string,help?:string,showoncombobox?:int,disabled?:int,arrayofkeyval?:array,comment?:string}> Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. */ public $fields = array( - 'rowid' => array('type'=>'integer', 'label'=>'LineID', 'enabled'=>1, 'visible'=>-1, 'position'=>1, 'notnull'=>1, 'index'=>1, 'comment'=>"Id",), - 'fk_bom' => array('type'=>'integer:BillOfMaterials:societe/class/bom.class.php', 'label'=>'BillOfMaterials', 'enabled'=>1, 'visible'=>1, 'position'=>10, 'notnull'=>1, 'index'=>1,), - 'fk_product' => array('type'=>'integer:Product:product/class/product.class.php', 'label'=>'Product', 'enabled'=>1, 'visible'=>1, 'position'=>20, 'notnull'=>1, 'index'=>1,), - 'fk_bom_child' => array('type'=>'integer:BOM:bom/class/bom.class.php', 'label'=>'BillOfMaterials', 'enabled'=>1, 'visible'=>-1, 'position'=>40, 'notnull'=>-1,), - 'description' => array('type'=>'text', 'label'=>'Description', 'enabled'=>1, 'visible'=>-1, 'position'=>60, 'notnull'=>-1,), - 'qty' => array('type'=>'double(24,8)', 'label'=>'Quantity', 'enabled'=>1, 'visible'=>1, 'position'=>100, 'notnull'=>1, 'isameasure'=>'1',), - 'qty_frozen' => array('type'=>'smallint', 'label'=>'QuantityFrozen', 'enabled'=>1, 'visible'=>1, 'default'=>0, 'position'=>105, 'css'=>'maxwidth50imp', 'help'=>'QuantityConsumedInvariable'), - 'disable_stock_change' => array('type'=>'smallint', 'label'=>'DisableStockChange', 'enabled'=>1, 'visible'=>1, 'default'=>0, 'position'=>108, 'css'=>'maxwidth50imp', 'help'=>'DisableStockChangeHelp'), - 'efficiency' => array('type'=>'double(24,8)', 'label'=>'ManufacturingEfficiency', 'enabled'=>1, 'visible'=>0, 'default'=>1, 'position'=>110, 'notnull'=>1, 'css'=>'maxwidth50imp', 'help'=>'ValueOfEfficiencyConsumedMeans'), - 'fk_unit' => array('type'=>'integer', 'label'=>'Unit', 'enabled'=>1, 'visible'=>1, 'position'=>120, 'notnull'=>-1,), - 'position' => array('type'=>'integer', 'label'=>'Rank', 'enabled'=>1, 'visible'=>0, 'default'=>0, 'position'=>200, 'notnull'=>1,), - 'import_key' => array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>1, 'visible'=>-2, 'position'=>1000, 'notnull'=>-1,), - 'fk_default_workstation' =>array('type'=>'integer', 'label'=>'DefaultWorkstation', 'enabled'=>1, 'visible'=>1, 'notnull'=>0, 'position'=>1050) + 'rowid' => array('type' => 'integer', 'label' => 'LineID', 'enabled' => 1, 'visible' => -1, 'position' => 1, 'notnull' => 1, 'index' => 1, 'comment' => "Id",), + 'fk_bom' => array('type' => 'integer:BillOfMaterials:societe/class/bom.class.php', 'label' => 'BillOfMaterials', 'enabled' => 1, 'visible' => 1, 'position' => 10, 'notnull' => 1, 'index' => 1,), + 'fk_product' => array('type' => 'integer:Product:product/class/product.class.php', 'label' => 'Product', 'enabled' => 1, 'visible' => 1, 'position' => 20, 'notnull' => 1, 'index' => 1,), + 'fk_bom_child' => array('type' => 'integer:BOM:bom/class/bom.class.php', 'label' => 'BillOfMaterials', 'enabled' => 1, 'visible' => -1, 'position' => 40, 'notnull' => -1,), + 'description' => array('type' => 'text', 'label' => 'Description', 'enabled' => 1, 'visible' => -1, 'position' => 60, 'notnull' => -1,), + 'qty' => array('type' => 'double(24,8)', 'label' => 'Quantity', 'enabled' => 1, 'visible' => 1, 'position' => 100, 'notnull' => 1, 'isameasure' => 1,), + 'qty_frozen' => array('type' => 'smallint', 'label' => 'QuantityFrozen', 'enabled' => 1, 'visible' => 1, 'default' => '0', 'position' => 105, 'css' => 'maxwidth50imp', 'help' => 'QuantityConsumedInvariable'), + 'disable_stock_change' => array('type' => 'smallint', 'label' => 'DisableStockChange', 'enabled' => 1, 'visible' => 1, 'default' => '0', 'position' => 108, 'css' => 'maxwidth50imp', 'help' => 'DisableStockChangeHelp'), + 'efficiency' => array('type' => 'double(24,8)', 'label' => 'ManufacturingEfficiency', 'enabled' => 1, 'visible' => 0, 'default' => '1', 'position' => 110, 'notnull' => 1, 'css' => 'maxwidth50imp', 'help' => 'ValueOfEfficiencyConsumedMeans'), + 'fk_unit' => array('type' => 'integer', 'label' => 'Unit', 'enabled' => 1, 'visible' => 1, 'position' => 120, 'notnull' => -1,), + 'position' => array('type' => 'integer', 'label' => 'Rank', 'enabled' => 1, 'visible' => 0, 'default' => '0', 'position' => 200, 'notnull' => 1,), + 'import_key' => array('type' => 'varchar(14)', 'label' => 'ImportId', 'enabled' => 1, 'visible' => -2, 'position' => 1000, 'notnull' => -1,), + 'fk_default_workstation' => array('type' => 'integer', 'label' => 'DefaultWorkstation', 'enabled' => 1, 'visible' => 1, 'notnull' => 0, 'position' => 1050) ); /** @@ -1811,7 +1804,9 @@ class BOMLine extends CommonObjectLine public $childBom = array(); /** - * @var int Service unit + * @var int|null ID of the unit of measurement (rowid in llx_c_units table) + * @see measuringUnitString() + * @see getLabelOfUnit() */ public $fk_unit; @@ -1890,18 +1885,17 @@ class BOMLine extends CommonObjectLine /** * Load list of objects in memory from the database. * - * @param string $sortorder Sort Order - * @param string $sortfield Sort field - * @param int $limit limit - * @param int $offset Offset - * @param array $filter Filter array. Example array('field'=>'valueforlike', 'customurl'=>...) - * @param string $filtermode Filter mode (AND or OR) - * @return array|int int <0 if KO, array of pages if OK + * @param string $sortorder Sort Order + * @param string $sortfield Sort field + * @param int $limit limit + * @param int $offset Offset + * @param string $filter Filter as an Universal Search string. + * Example: '((client:=:1) OR ((client:>=:2) AND (client:<=:3))) AND (client:!=:8) AND (nom:like:'a%')' + * @param string $filtermode No more used + * @return array|int int <0 if KO, array of pages if OK */ - public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND') + public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, $filter = '', $filtermode = 'AND') { - global $conf; - dol_syslog(__METHOD__, LOG_DEBUG); $records = array(); @@ -1914,23 +1908,14 @@ class BOMLine extends CommonObjectLine } else { $sql .= ' WHERE 1 = 1'; } + // Manage filter - $sqlwhere = array(); - if (count($filter) > 0) { - foreach ($filter as $key => $value) { - if ($key == 't.rowid') { - $sqlwhere[] = $key." = ".((int) $value); - } elseif (strpos($key, 'date') !== false) { - $sqlwhere[] = $key." = '".$this->db->idate($value)."'"; - } elseif ($key == 'customsql') { - $sqlwhere[] = $value; - } else { - $sqlwhere[] = $key." LIKE '%".$this->db->escape($value)."%'"; - } - } - } - if (count($sqlwhere) > 0) { - $sql .= ' AND ('.implode(' '.$this->db->escape($filtermode).' ', $sqlwhere).')'; + $errormessage = ''; + $sql .= forgeSQLFromUniversalSearchCriteria($filter, $errormessage); + if ($errormessage) { + $this->errors[] = $errormessage; + dol_syslog(__METHOD__.' '.implode(',', $this->errors), LOG_ERR); + return -1; } if (!empty($sortfield)) { @@ -1947,6 +1932,7 @@ class BOMLine extends CommonObjectLine while ($obj = $this->db->fetch_object($resql)) { $record = new self($this->db); $record->setVarsFromFetchObj($obj); + $record->fetch_optionals(); $records[$record->id] = $record; } @@ -2055,7 +2041,7 @@ class BOMLine extends CommonObjectLine global $action, $hookmanager; $hookmanager->initHooks(array('bomlinedao')); - $parameters = array('id'=>$this->id, 'getnomurl' => &$result); + $parameters = array('id' => $this->id, 'getnomurl' => &$result); $reshook = $hookmanager->executeHooks('getNomUrl', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks if ($reshook > 0) { $result = $hookmanager->resPrint; @@ -2125,10 +2111,10 @@ class BOMLine extends CommonObjectLine * Initialise object with example values * Id must be 0 if object instance is a specimen * - * @return void + * @return int */ public function initAsSpecimen() { - $this->initAsSpecimenCommon(); + return $this->initAsSpecimenCommon(); } } diff --git a/htdocs/bom/tpl/linkedobjectblock.tpl.php b/htdocs/bom/tpl/linkedobjectblock.tpl.php index 082936be50a..3ededc6bffa 100644 --- a/htdocs/bom/tpl/linkedobjectblock.tpl.php +++ b/htdocs/bom/tpl/linkedobjectblock.tpl.php @@ -21,7 +21,7 @@ // Protection to avoid direct call of template if (empty($conf) || !is_object($conf)) { print "Error, template page can't be called as URL"; - exit; + exit(1); } print "\n"; diff --git a/htdocs/bom/tpl/objectline_create.tpl.php b/htdocs/bom/tpl/objectline_create.tpl.php index 49c4bb474bc..cf927bc763c 100644 --- a/htdocs/bom/tpl/objectline_create.tpl.php +++ b/htdocs/bom/tpl/objectline_create.tpl.php @@ -37,6 +37,8 @@ if (empty($object) || !is_object($object)) { exit; } +'@phan-var-force CommonObject $this + @phan-var-force CommonObject $object'; global $forceall, $forcetoshowtitlelines, $filtertype; @@ -118,9 +120,9 @@ if (isModEnabled("product") || isModEnabled("service")) { $statustoshow = -1; if (getDolGlobalString('ENTREPOT_EXTRA_STATUS')) { // hide products in closed warehouse, but show products for internal transfer - print $form->select_produits(GETPOST('idprod', 'int'), (($filtertype == 1) ? 'idprodservice' : 'idprod'), $filtertype, $conf->product->limit_size, $buyer->price_level, $statustoshow, 2, '', 1, array(), $buyer->id, '1', 0, 'maxwidth500', 0, 'warehouseopen,warehouseinternal', GETPOST('combinations', 'array'), 1); + print $form->select_produits(GETPOSTINT('idprod'), (($filtertype == 1) ? 'idprodservice' : 'idprod'), $filtertype, $conf->product->limit_size, $buyer->price_level, $statustoshow, 2, '', 1, array(), $buyer->id, '1', 0, 'maxwidth500', 0, 'warehouseopen,warehouseinternal', GETPOSTINT('combinations'), 1); } else { - print $form->select_produits(GETPOST('idprod', 'int'), (($filtertype == 1) ? 'idprodservice' : 'idprod'), $filtertype, $conf->product->limit_size, $buyer->price_level, $statustoshow, 2, '', 1, array(), $buyer->id, '1', 0, 'maxwidth500', 0, '', GETPOST('combinations', 'array'), 1); + print $form->select_produits(GETPOSTINT('idprod'), (($filtertype == 1) ? 'idprodservice' : 'idprod'), $filtertype, $conf->product->limit_size, $buyer->price_level, $statustoshow, 2, '', 1, array(), $buyer->id, '1', 0, 'maxwidth500', 0, '', GETPOSTINT('combinations'), 1); } $urltocreateproduct = DOL_URL_ROOT.'/product/card.php?action=create&backtopage='.urlencode($_SERVER["PHP_SELF"].'?id='.$object->id); print ''; diff --git a/htdocs/bom/tpl/objectline_edit.tpl.php b/htdocs/bom/tpl/objectline_edit.tpl.php index 649115f1831..2d456007c73 100644 --- a/htdocs/bom/tpl/objectline_edit.tpl.php +++ b/htdocs/bom/tpl/objectline_edit.tpl.php @@ -37,9 +37,11 @@ require_once DOL_DOCUMENT_ROOT."/product/class/html.formproduct.class.php"; // Protection to avoid direct call of template if (empty($object) || !is_object($object)) { print "Error, template page can't be called as URL"; - exit; + exit(1); } +'@phan-var-force CommonObject $this + @phan-var-force CommonObject $object'; global $forceall, $filtertype; @@ -136,11 +138,11 @@ if ($filtertype != 1) { } $coldisplay++; - print '
'; $coldisplay++; - print ''; $coldisplay++; diff --git a/htdocs/bom/tpl/objectline_title.tpl.php b/htdocs/bom/tpl/objectline_title.tpl.php index 680ac6d1079..303e735a498 100644 --- a/htdocs/bom/tpl/objectline_title.tpl.php +++ b/htdocs/bom/tpl/objectline_title.tpl.php @@ -36,9 +36,12 @@ // Protection to avoid direct call of template if (empty($object) || !is_object($object)) { print "Error, template page can't be called as URL"; - exit; + exit(1); } +'@phan-var-force CommonObject $this + @phan-var-force CommonObject $object'; + global $filtertype; if (empty($filtertype)) { $filtertype = 0; diff --git a/htdocs/bom/tpl/objectline_view.tpl.php b/htdocs/bom/tpl/objectline_view.tpl.php index f01a7600c18..38da2d0077c 100644 --- a/htdocs/bom/tpl/objectline_view.tpl.php +++ b/htdocs/bom/tpl/objectline_view.tpl.php @@ -41,9 +41,12 @@ require_once DOL_DOCUMENT_ROOT.'/workstation/class/workstation.class.php'; // Protection to avoid direct call of template if (empty($object) || !is_object($object)) { print "Error, template page can't be called as URL"; - exit; + exit(1); } +'@phan-var-force CommonObject $this + @phan-var-force CommonObject $object'; + global $filtertype; if (empty($filtertype)) { $filtertype = 0; diff --git a/htdocs/bookcal/admin/calendar_extrafields.php b/htdocs/bookcal/admin/calendar_extrafields.php index 72c84e50e35..46a7a39ebb4 100644 --- a/htdocs/bookcal/admin/calendar_extrafields.php +++ b/htdocs/bookcal/admin/calendar_extrafields.php @@ -5,6 +5,7 @@ * Copyright (C) 2012 Regis Houssin * Copyright (C) 2014 Florian Henry * Copyright (C) 2015 Jean-François Ferry + * Copyright (C) 2024 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -27,39 +28,13 @@ */ // Load Dolibarr environment -$res = 0; -// Try main.inc.php into web root known defined into CONTEXT_DOCUMENT_ROOT (not always defined) -if (!$res && !empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) { - $res = @include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php"; -} -// Try main.inc.php into web root detected using web root calculated from SCRIPT_FILENAME -$tmp = empty($_SERVER['SCRIPT_FILENAME']) ? '' : $_SERVER['SCRIPT_FILENAME']; $tmp2 = realpath(__FILE__); $i = strlen($tmp) - 1; $j = strlen($tmp2) - 1; -while ($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i] == $tmp2[$j]) { - $i--; - $j--; -} -if (!$res && $i > 0 && file_exists(substr($tmp, 0, ($i + 1))."/main.inc.php")) { - $res = @include substr($tmp, 0, ($i + 1))."/main.inc.php"; -} -if (!$res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php")) { - $res = @include dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php"; -} -// Try main.inc.php using relative path -if (!$res && file_exists("../../main.inc.php")) { - $res = @include "../../main.inc.php"; -} -if (!$res && file_exists("../../../main.inc.php")) { - $res = @include "../../../main.inc.php"; -} -if (!$res) { - die("Include of main fails"); -} +require '../../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php'; require_once '../lib/bookcal.lib.php'; // Load translation files required by the page -$langs->loadLangs(array('bookcal@bookcal', 'admin')); +$langs->loadLangs(array('agenda', 'admin')); $extrafields = new ExtraFields($db); $form = new Form($db); @@ -106,7 +81,7 @@ print load_fiche_titre($langs->trans($page_name), $linkback, 'title_setup'); $head = bookcalAdminPrepareHead(); -print dol_get_fiche_head($head, 'calendar_extrafields', $langs->trans($page_name), -1, 'bookcal@bookcal'); +print dol_get_fiche_head($head, 'calendar_extrafields', $langs->trans($page_name), -1, 'agenda'); require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_view.tpl.php'; diff --git a/htdocs/bookcal/admin/setup.php b/htdocs/bookcal/admin/setup.php index 7117deee8e1..dd16dfb720e 100644 --- a/htdocs/bookcal/admin/setup.php +++ b/htdocs/bookcal/admin/setup.php @@ -1,6 +1,7 @@ * Copyright (C) 2022 Alice Adminson + * Copyright (C) 2024 MDW * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -102,7 +103,7 @@ $item->helpText = $langs->transnoentities('AnHelpMessage');*/ //$item->fieldOutputOverride = false; // set this var to override field output -$setupnotempty =+ count($formSetup->items); +$setupnotempty = + count($formSetup->items); $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']); @@ -135,46 +136,9 @@ if ($action == 'updateMask') { } else { setEventMessages($langs->trans("Error"), null, 'errors'); } -} elseif ($action == 'specimen') { - $modele = GETPOST('module', 'alpha'); - $tmpobjectkey = GETPOST('object'); - - $tmpobject = new $tmpobjectkey($db); - $tmpobject->initAsSpecimen(); - - // Search template files - $file = ''; - $classname = ''; - $filefound = 0; - $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']); - foreach ($dirmodels as $reldir) { - $file = dol_buildpath($reldir."core/modules/bookcal/doc/pdf_".$modele."_".strtolower($tmpobjectkey).".modules.php", 0); - if (file_exists($file)) { - $filefound = 1; - $classname = "pdf_".$modele."_".strtolower($tmpobjectkey); - break; - } - } - - if ($filefound) { - require_once $file; - - $module = new $classname($db); - - if ($module->write_file($tmpobject, $langs) > 0) { - header("Location: ".DOL_URL_ROOT."/document.php?modulepart=bookcal-".strtolower($tmpobjectkey)."&file=SPECIMEN.pdf"); - return; - } else { - setEventMessages($module->error, null, 'errors'); - dol_syslog($module->error, LOG_ERR); - } - } else { - setEventMessages($langs->trans("ErrorModuleNotFound"), null, 'errors'); - dol_syslog($langs->trans("ErrorModuleNotFound"), LOG_ERR); - } } elseif ($action == 'setmod') { // TODO Check if numbering module chosen can be activated by calling method canBeActivated - $tmpobjectkey = GETPOST('object'); + $tmpobjectkey = GETPOST('object', 'aZ09'); if (!empty($tmpobjectkey)) { $constforval = 'BOOKCAL_'.strtoupper($tmpobjectkey)."_ADDON"; dolibarr_set_const($db, $constforval, $value, 'chaine', 0, '', $conf->entity); @@ -185,7 +149,7 @@ if ($action == 'updateMask') { } elseif ($action == 'del') { $ret = delDocumentModel($value, $type); if ($ret > 0) { - $tmpobjectkey = GETPOST('object'); + $tmpobjectkey = GETPOST('object', 'aZ09'); if (!empty($tmpobjectkey)) { $constforval = 'BOOKCAL_'.strtoupper($tmpobjectkey).'_ADDON_PDF'; if (getDolGlobalString($constforval) == "$value") { @@ -195,7 +159,7 @@ if ($action == 'updateMask') { } } elseif ($action == 'setdoc') { // Set or unset default model - $tmpobjectkey = GETPOST('object'); + $tmpobjectkey = GETPOST('object', 'aZ09'); if (!empty($tmpobjectkey)) { $constforval = 'BOOKCAL_'.strtoupper($tmpobjectkey).'_ADDON_PDF'; if (dolibarr_set_const($db, $constforval, $value, 'chaine', 0, '', $conf->entity)) { @@ -211,7 +175,7 @@ if ($action == 'updateMask') { } } } elseif ($action == 'unsetdoc') { - $tmpobjectkey = GETPOST('object'); + $tmpobjectkey = GETPOST('object', 'aZ09'); if (!empty($tmpobjectkey)) { $constforval = 'BOOKCAL_'.strtoupper($tmpobjectkey).'_ADDON_PDF'; dolibarr_del_const($db, $constforval, $conf->entity); @@ -243,7 +207,6 @@ print dol_get_fiche_head($head, 'settings', $langs->trans($page_name), -1, "fa-c // Setup page goes here //echo ''.$langs->trans("BookCalSetupPage").'

'; - if ($action == 'edit') { print $formSetup->generateOutput(true); print '
'; diff --git a/htdocs/bookcal/availabilities_agenda.php b/htdocs/bookcal/availabilities_agenda.php index 484360aae04..5c29e0c45cc 100644 --- a/htdocs/bookcal/availabilities_agenda.php +++ b/htdocs/bookcal/availabilities_agenda.php @@ -35,7 +35,7 @@ require_once DOL_DOCUMENT_ROOT.'/bookcal/lib/bookcal_availabilities.lib.php'; $langs->loadLangs(array("agenda", "other")); // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'aZ09'); @@ -54,10 +54,10 @@ if (GETPOST('actioncode', 'array')) { $search_rowid = GETPOST('search_rowid'); $search_agenda_label = GETPOST('search_agenda_label'); -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -113,7 +113,7 @@ if (!$permissiontoread) { * Actions */ -$parameters = array('id'=>$id); +$parameters = array('id' => $id); $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); @@ -218,14 +218,14 @@ if ($object->id > 0) { $objthirdparty = $object; $objcon = new stdClass(); - $out = '&origin='.urlencode($object->element.'@'.$object->module).'&originid='.urlencode($object->id); + $out = '&origin='.urlencode((string) ($object->element.'@'.$object->module)).'&originid='.urlencode((string) ($object->id)); $urlbacktopage = $_SERVER['PHP_SELF'].'?id='.$object->id; $out .= '&backtopage='.urlencode($urlbacktopage); $permok = $user->hasRight('agenda', 'myactions', 'create'); if ((!empty($objthirdparty->id) || !empty($objcon->id)) && $permok) { //$out.='loadLangs(array("agenda", "other")); // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); -$lineid = GETPOST('lineid', 'int'); +$lineid = GETPOSTINT('lineid'); $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm', 'alpha'); @@ -105,6 +105,10 @@ if (!$permissiontoread) { } + + + + /* * Actions */ @@ -132,8 +136,39 @@ if (empty($reshook)) { $triggermodname = 'BOOKCAL_AVAILABILITIES_MODIFY'; // Name of trigger action code to execute when we modify record - // Actions cancel, add, update, update_extras, confirm_validate, confirm_delete, confirm_deleteline, confirm_clone, confirm_close, confirm_setdraft, confirm_reopen - include DOL_DOCUMENT_ROOT.'/core/actions_addupdatedelete.inc.php'; + + $startday = GETPOST('startday', 'int'); + $startmonth = GETPOST('startmonth', 'int'); + $startyear = GETPOST('startyear', 'int'); + $starthour = GETPOST('startHour', 'int'); + + $dateStartTimestamp = dol_mktime($starthour, 0, 0, $startmonth, $startday, $startyear); + + $endday = GETPOST('endday', 'int'); + $endmonth = GETPOST('endmonth', 'int'); + $endyear = GETPOST('endyear', 'int'); + $endhour = GETPOST('endHour', 'int'); + + + $dateEndTimestamp = dol_mktime($endhour, 0, 0, $endmonth, $endday, $endyear); + + // check hours + if ($starthour > $endhour) { + if ($dateStartTimestamp === $dateEndTimestamp) { + $error++; + setEventMessages($langs->trans("ErrorEndTimeMustBeGreaterThanStartTime"), null, 'errors'); + } + } + + // check date + if ($dateStartTimestamp > $dateEndTimestamp) { + $error++; + setEventMessages($langs->trans("ErrorIncoherentDates"), null, 'errors'); + } + + + // Actions cancel, add, update, update_extras, confirm_validate, confirm_delete, confirm_deleteline, confirm_clone, confirm_close, confirm_setdraft, confirm_reopen + include DOL_DOCUMENT_ROOT.'/core/actions_addupdatedelete.inc.php'; // Actions when linking object each other include DOL_DOCUMENT_ROOT.'/core/actions_dellink.inc.php'; @@ -148,10 +183,10 @@ if (empty($reshook)) { include DOL_DOCUMENT_ROOT.'/core/actions_builddoc.inc.php'; if ($action == 'set_thirdparty' && $permissiontoadd) { - $object->setValueFrom('fk_soc', GETPOST('fk_soc', 'int'), '', '', 'date', '', $user, $triggermodname); + $object->setValueFrom('fk_soc', GETPOSTINT('fk_soc'), '', '', 'date', '', $user, $triggermodname); } if ($action == 'classin' && $permissiontoadd) { - $object->setProject(GETPOST('projectid', 'int')); + $object->setProject(GETPOSTINT('projectid')); } // Actions to send emails @@ -202,10 +237,13 @@ if ($action == 'create') { } print load_fiche_titre($langs->trans("NewObject", $langs->transnoentitiesnoconv("Availabilities")), '', 'object_'.$object->picto); - print ''; print ''; - print ''; + if ($error != 0) { + print ''; + } else { + print ''; + } if ($backtopage) { print ''; } @@ -411,7 +449,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea // Show object lines $result = $object->getLinesArray(); - print ' + print ' @@ -429,7 +467,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } if (!empty($object->lines)) { - $object->printObjectLines($action, $mysoc, null, GETPOST('lineid', 'int'), 1); + $object->printObjectLines($action, $mysoc, null, GETPOSTINT('lineid'), 1); } // Form to add new line diff --git a/htdocs/bookcal/availabilities_contact.php b/htdocs/bookcal/availabilities_contact.php index 07278fd60c7..cfd91d3b2f6 100644 --- a/htdocs/bookcal/availabilities_contact.php +++ b/htdocs/bookcal/availabilities_contact.php @@ -32,10 +32,10 @@ require_once DOL_DOCUMENT_ROOT.'/bookcal/lib/bookcal_availabilities.lib.php'; // Load translation files required by the page $langs->loadLangs(array("agenda", "companies", "other", "mails")); -$id = (GETPOST('id') ? GETPOST('id', 'int') : GETPOST('facid', 'int')); // For backward compatibility +$id = (GETPOST('id') ? GETPOSTINT('id') : GETPOSTINT('facid')); // For backward compatibility $ref = GETPOST('ref', 'alpha'); -$lineid = GETPOST('lineid', 'int'); -$socid = GETPOST('socid', 'int'); +$lineid = GETPOSTINT('lineid'); +$socid = GETPOSTINT('socid'); $action = GETPOST('action', 'aZ09'); // Initialize technical objects @@ -78,7 +78,7 @@ if (!$permissiontoread) { */ if ($action == 'addcontact' && $permission) { - $contactid = (GETPOST('userid') ? GETPOST('userid', 'int') : GETPOST('contactid', 'int')); + $contactid = (GETPOST('userid') ? GETPOSTINT('userid') : GETPOSTINT('contactid')); $typeid = (GETPOST('typecontact') ? GETPOST('typecontact') : GETPOST('type')); $result = $object->add_contact($contactid, $typeid, GETPOST("source", 'aZ09')); @@ -95,7 +95,7 @@ if ($action == 'addcontact' && $permission) { } } elseif ($action == 'swapstatut' && $permission) { // Toggle the status of a contact - $result = $object->swapContactStatus(GETPOST('ligne', 'int')); + $result = $object->swapContactStatus(GETPOSTINT('ligne')); } elseif ($action == 'deletecontact' && $permission) { // Deletes a contact $result = $object->delete_contact($lineid); diff --git a/htdocs/bookcal/availabilities_document.php b/htdocs/bookcal/availabilities_document.php index 723df675ef5..433d92b144f 100644 --- a/htdocs/bookcal/availabilities_document.php +++ b/htdocs/bookcal/availabilities_document.php @@ -37,14 +37,14 @@ $langs->loadLangs(array("agenda", "companies", "other", "mails")); $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm'); -$id = (GETPOST('socid', 'int') ? GETPOST('socid', 'int') : GETPOST('id', 'int')); +$id = (GETPOSTINT('socid') ? GETPOSTINT('socid') : GETPOSTINT('id')); $ref = GETPOST('ref', 'alpha'); // Get parameters -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 diff --git a/htdocs/bookcal/availabilities_list.php b/htdocs/bookcal/availabilities_list.php index ca40cc6bc95..16efbe2d5df 100644 --- a/htdocs/bookcal/availabilities_list.php +++ b/htdocs/bookcal/availabilities_list.php @@ -37,12 +37,12 @@ require_once __DIR__.'/class/availabilities.class.php'; // Load translation files required by the page $langs->loadLangs(array("agenda", "other")); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09') ? GETPOST('action', 'aZ09') : 'view'; // The action 'add', 'create', 'edit', 'update', 'view', ... $massaction = GETPOST('massaction', 'alpha'); // The bulk action (combo box choice into lists) -$show_files = GETPOST('show_files', 'int'); // Show files area generated by bulk actions ? +$show_files = GETPOSTINT('show_files'); // Show files area generated by bulk actions ? $confirm = GETPOST('confirm', 'alpha'); // Result of a confirmation $cancel = GETPOST('cancel', 'alpha'); // We click on a Cancel button $toselect = GETPOST('toselect', 'array'); // Array of ids of elements selected into a list @@ -52,10 +52,10 @@ $optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always ' $mode = GETPOST('mode', 'aZ'); // The output mode ('list', 'kanban', 'hierarchy', 'calendar', ...) // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // If $page is not defined, or '' or -1 or if we click on clear filters $page = 0; @@ -93,8 +93,8 @@ foreach ($object->fields as $key => $val) { $search[$key] = GETPOST('search_'.$key, 'alpha'); } if (preg_match('/^(date|timestamp|datetime)/', $val['type'])) { - $search[$key.'_dtstart'] = dol_mktime(0, 0, 0, GETPOST('search_'.$key.'_dtstartmonth', 'int'), GETPOST('search_'.$key.'_dtstartday', 'int'), GETPOST('search_'.$key.'_dtstartyear', 'int')); - $search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOST('search_'.$key.'_dtendmonth', 'int'), GETPOST('search_'.$key.'_dtendday', 'int'), GETPOST('search_'.$key.'_dtendyear', 'int')); + $search[$key.'_dtstart'] = dol_mktime(0, 0, 0, GETPOSTINT('search_'.$key.'_dtstartmonth'), GETPOSTINT('search_'.$key.'_dtstartday'), GETPOSTINT('search_'.$key.'_dtstartyear')); + $search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOSTINT('search_'.$key.'_dtendmonth'), GETPOSTINT('search_'.$key.'_dtendday'), GETPOSTINT('search_'.$key.'_dtendyear')); } } @@ -113,6 +113,16 @@ foreach ($object->fields as $key => $val) { // $fieldstosearchall = array_merge($fieldstosearchall, empty($hookmanager->resArray['fieldstosearchall']) ? array() : $hookmanager->resArray['fieldstosearchall']); // } + +// $fieldstosearchall is supposedly defined further below, ensure that it is. +if (!isset($fieldstosearchall) || !is_array($fieldstosearchall)) { + $fieldstosearchall = array(); +} +' + @phan-var-force array $fieldstosearchall +'; + + // Definition of array of fields for columns $arrayfields = array(); foreach ($object->fields as $key => $val) { @@ -120,11 +130,11 @@ foreach ($object->fields as $key => $val) { if (!empty($val['visible'])) { $visible = (int) dol_eval($val['visible'], 1); $arrayfields['t.'.$key] = array( - 'label'=>$val['label'], - 'checked'=>(($visible < 0) ? 0 : 1), - 'enabled'=>(abs($visible) != 3 && dol_eval($val['enabled'], 1)), - 'position'=>$val['position'], - 'help'=> isset($val['help']) ? $val['help'] : '' + 'label' => $val['label'], + 'checked' => (($visible < 0) ? 0 : 1), + 'enabled' => (abs($visible) != 3 && (int) dol_eval($val['enabled'], 1)), + 'position' => $val['position'], + 'help' => isset($val['help']) ? $val['help'] : '' ); } } @@ -259,7 +269,7 @@ $parameters = array(); $reshook = $hookmanager->executeHooks('printFieldListFrom', $parameters, $object, $action); // Note that $action and $object may have been modified by hook $sql .= $hookmanager->resPrint; if ($object->ismultientitymanaged == 1) { - $sql .= " WHERE t.entity IN (".getEntity($object->element, (GETPOST('search_current_entity', 'int') ? 0 : 1)).")"; + $sql .= " WHERE t.entity IN (".getEntity($object->element, (GETPOSTINT('search_current_entity') ? 0 : 1)).")"; } else { $sql .= " WHERE 1 = 1"; } @@ -416,9 +426,9 @@ foreach ($search as $key => $val) { } } } elseif (preg_match('/(_dtstart|_dtend)$/', $key) && !empty($val)) { - $param .= '&search_'.$key.'month='.((int) GETPOST('search_'.$key.'month', 'int')); - $param .= '&search_'.$key.'day='.((int) GETPOST('search_'.$key.'day', 'int')); - $param .= '&search_'.$key.'year='.((int) GETPOST('search_'.$key.'year', 'int')); + $param .= '&search_'.$key.'month='.(GETPOSTINT('search_'.$key.'month')); + $param .= '&search_'.$key.'day='.(GETPOSTINT('search_'.$key.'day')); + $param .= '&search_'.$key.'year='.(GETPOSTINT('search_'.$key.'year')); } elseif ($search[$key] != '') { $param .= '&search_'.$key.'='.urlencode($search[$key]); } @@ -440,7 +450,7 @@ $arrayofmassactions = array( if (!empty($permissiontodelete)) { $arrayofmassactions['predelete'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete"); } -if (GETPOST('nomassaction', 'int') || in_array($massaction, array('presend', 'predelete'))) { +if (GETPOSTINT('nomassaction') || in_array($massaction, array('presend', 'predelete'))) { $arrayofmassactions = array(); } $massactionbutton = $form->selectMassAction('', $arrayofmassactions); @@ -460,8 +470,8 @@ print ''; $newcardbutton = ''; -$newcardbutton .= dolGetButtonTitle($langs->trans('ViewList'), '', 'fa fa-bars imgforviewmode', $_SERVER["PHP_SELF"].'?mode=common'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ((empty($mode) || $mode == 'common') ? 2 : 1), array('morecss'=>'reposition')); -$newcardbutton .= dolGetButtonTitle($langs->trans('ViewKanban'), '', 'fa fa-th-list imgforviewmode', $_SERVER["PHP_SELF"].'?mode=kanban'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ($mode == 'kanban' ? 2 : 1), array('morecss'=>'reposition')); +$newcardbutton .= dolGetButtonTitle($langs->trans('ViewList'), '', 'fa fa-bars imgforviewmode', $_SERVER["PHP_SELF"].'?mode=common'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ((empty($mode) || $mode == 'common') ? 2 : 1), array('morecss' => 'reposition')); +$newcardbutton .= dolGetButtonTitle($langs->trans('ViewKanban'), '', 'fa fa-th-list imgforviewmode', $_SERVER["PHP_SELF"].'?mode=kanban'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ($mode == 'kanban' ? 2 : 1), array('morecss' => 'reposition')); $newcardbutton .= dolGetButtonTitleSeparator(); $newcardbutton .= dolGetButtonTitle($langs->trans('New'), '', 'fa fa-plus-circle', dol_buildpath('/bookcal/availabilities_card.php', 1).'?action=create&backtopage='.urlencode($_SERVER['PHP_SELF']), '', $permissiontoadd); @@ -507,7 +517,7 @@ if (!empty($moreforfilter)) { } $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; -$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')) : ''); // This also change content of $arrayfields +$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) : ''); // This also change content of $arrayfields $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); print '
'; // You can use div-table-responsive-no-min if you don't need reserved height for your table @@ -563,7 +573,7 @@ foreach ($object->fields as $key => $val) { include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php'; // Fields from hook -$parameters = array('arrayfields'=>$arrayfields); +$parameters = array('arrayfields' => $arrayfields); $reshook = $hookmanager->executeHooks('printFieldListOption', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; /*if (!empty($arrayfields['anotherfield']['checked'])) { @@ -609,7 +619,7 @@ foreach ($object->fields as $key => $val) { // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; // Hook fields -$parameters = array('arrayfields'=>$arrayfields, 'param'=>$param, 'sortfield'=>$sortfield, 'sortorder'=>$sortorder, 'totalarray'=>&$totalarray); +$parameters = array('arrayfields' => $arrayfields, 'param' => $param, 'sortfield' => $sortfield, 'sortorder' => $sortorder, 'totalarray' => &$totalarray); $reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; /*if (!empty($arrayfields['anotherfield']['checked'])) { @@ -741,7 +751,7 @@ while ($i < $imaxinloop) { // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php'; // Fields from hook - $parameters = array('arrayfields'=>$arrayfields, 'object'=>$object, 'obj'=>$obj, 'i'=>$i, 'totalarray'=>&$totalarray); + $parameters = array('arrayfields' => $arrayfields, 'object' => $object, 'obj' => $obj, 'i' => $i, 'totalarray' => &$totalarray); $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; /*if (!empty($arrayfields['anotherfield']['checked'])) { @@ -786,7 +796,7 @@ if ($num == 0) { $db->free($resql); -$parameters = array('arrayfields'=>$arrayfields, 'sql'=>$sql); +$parameters = array('arrayfields' => $arrayfields, 'sql' => $sql); $reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; diff --git a/htdocs/bookcal/availabilities_note.php b/htdocs/bookcal/availabilities_note.php index 5b8b4dee169..3f7bf24edee 100644 --- a/htdocs/bookcal/availabilities_note.php +++ b/htdocs/bookcal/availabilities_note.php @@ -31,7 +31,7 @@ require_once DOL_DOCUMENT_ROOT.'/bookcal/lib/bookcal_availabilities.lib.php'; $langs->loadLangs(array("agenda", "companies")); // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'aZ09'); diff --git a/htdocs/bookcal/bookcalindex.php b/htdocs/bookcal/bookcalindex.php index cbffda374fd..c54181584d0 100644 --- a/htdocs/bookcal/bookcalindex.php +++ b/htdocs/bookcal/bookcalindex.php @@ -38,7 +38,7 @@ $action = GETPOST('action', 'aZ09'); // if (! $user->hasRight('bookcal', 'myobject', 'read')) { // accessforbidden(); // } -$socid = GETPOST('socid', 'int'); +$socid = GETPOSTINT('socid'); if (isset($user->socid) && $user->socid > 0) { $action = ''; $socid = $user->socid; @@ -64,7 +64,7 @@ $formfile = new FormFile($db); llxHeader("", $langs->trans("BookCalArea")); -print load_fiche_titre($langs->trans("BookCalArea"), '', 'bookcal.png@bookcal'); +print load_fiche_titre($langs->trans("BookCalArea"), '', 'fa-calendar-check'); print '
'; diff --git a/htdocs/bookcal/booking_list.php b/htdocs/bookcal/booking_list.php index 32d048a2b44..b4ac4cabe1b 100644 --- a/htdocs/bookcal/booking_list.php +++ b/htdocs/bookcal/booking_list.php @@ -5,7 +5,7 @@ * Copyright (C) 2005-2012 Regis Houssin * Copyright (C) 2010-2014 Juanjo Menent * Copyright (C) 2017 Ferran Marcet - * Copyright (C) 2018-2023 Frédéric France + * Copyright (C) 2023-2024 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -34,17 +34,17 @@ require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php'; require_once DOL_DOCUMENT_ROOT.'/comm/action/class/actioncomm.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; -dol_include_once('/bookcal/lib/bookcal_calendar.lib.php'); +require_once DOL_DOCUMENT_ROOT.'/bookcal/lib/bookcal_calendar.lib.php'; // load module libraries require_once __DIR__.'/class/calendar.class.php'; // Load translation files required by the page -$langs->loadLangs(array("bookcal@bookcal", "other")); +$langs->loadLangs(array("agenda", "other")); -$id = (GETPOST('id', 'int') ? GETPOST('id', 'int') : GETPOST('facid', 'int')); // For backward compatibility +$id = (GETPOSTINT('id') ? GETPOSTINT('id') : GETPOSTINT('facid')); // For backward compatibility $ref = GETPOST('ref', 'alpha'); -$socid = GETPOST('socid', 'int'); +$socid = GETPOSTINT('socid'); $action = GETPOST('action', 'aZ09'); $type = GETPOST('type', 'aZ09'); diff --git a/htdocs/bookcal/calendar_agenda.php b/htdocs/bookcal/calendar_agenda.php index deb1f993471..7ef31ec2c3e 100644 --- a/htdocs/bookcal/calendar_agenda.php +++ b/htdocs/bookcal/calendar_agenda.php @@ -1,6 +1,7 @@ * Copyright (C) 2023 Alice Adminson + * Copyright (C) 2024 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -32,10 +33,10 @@ require_once DOL_DOCUMENT_ROOT.'/bookcal/class/calendar.class.php'; require_once DOL_DOCUMENT_ROOT.'/bookcal/lib/bookcal_calendar.lib.php'; // Load translation files required by the page -$langs->loadLangs(array("bookcal@bookcal", "other")); +$langs->loadLangs(array("agenda", "other")); // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'aZ09'); @@ -53,10 +54,10 @@ if (GETPOST('actioncode', 'array')) { $search_rowid = GETPOST('search_rowid'); $search_agenda_label = GETPOST('search_agenda_label'); -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -112,7 +113,7 @@ if (!$permissiontoread) { * Actions */ -$parameters = array('id'=>$id); +$parameters = array('id' => $id); $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); @@ -216,14 +217,14 @@ if ($object->id > 0) { $objthirdparty = $object; $objcon = new stdClass(); - $out = '&origin='.urlencode($object->element.(property_exists($object, 'module') ? '@'.$object->module : '')).'&originid='.urlencode($object->id); + $out = '&origin='.urlencode((string) ($object->element.(property_exists($object, 'module') ? '@'.$object->module : ''))).'&originid='.urlencode((string) ($object->id)); $urlbacktopage = $_SERVER['PHP_SELF'].'?id='.$object->id; $out .= '&backtopage='.urlencode($urlbacktopage); $permok = $user->hasRight('agenda', 'myactions', 'create'); if ((!empty($objthirdparty->id) || !empty($objcon->id)) && $permok) { //$out.=' * Copyright (C) 2023 Alice Adminson + * Copyright (C) 2024 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,71 +23,22 @@ * \brief Page to create/edit/view calendar */ -//if (! defined('NOREQUIREDB')) define('NOREQUIREDB', '1'); // Do not create database handler $db -//if (! defined('NOREQUIREUSER')) define('NOREQUIREUSER', '1'); // Do not load object $user -//if (! defined('NOREQUIRESOC')) define('NOREQUIRESOC', '1'); // Do not load object $mysoc -//if (! defined('NOREQUIRETRAN')) define('NOREQUIRETRAN', '1'); // Do not load object $langs -//if (! defined('NOSCANGETFORINJECTION')) define('NOSCANGETFORINJECTION', '1'); // Do not check injection attack on GET parameters -//if (! defined('NOSCANPOSTFORINJECTION')) define('NOSCANPOSTFORINJECTION', '1'); // Do not check injection attack on POST parameters -//if (! defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL', '1'); // Do not roll the Anti CSRF token (used if MAIN_SECURITY_CSRF_WITH_TOKEN is on) -//if (! defined('NOSTYLECHECK')) define('NOSTYLECHECK', '1'); // Do not check style html tag into posted data -//if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU', '1'); // If there is no need to load and show top and left menu -//if (! defined('NOREQUIREHTML')) define('NOREQUIREHTML', '1'); // If we don't need to load the html.form.class.php -//if (! defined('NOREQUIREAJAX')) define('NOREQUIREAJAX', '1'); // Do not load ajax.lib.php library -//if (! defined("NOLOGIN")) define("NOLOGIN", '1'); // If this page is public (can be called outside logged session). This include the NOIPCHECK too. -//if (! defined('NOIPCHECK')) define('NOIPCHECK', '1'); // Do not check IP defined into conf $dolibarr_main_restrict_ip -//if (! defined("MAIN_LANG_DEFAULT")) define('MAIN_LANG_DEFAULT', 'auto'); // Force lang to a particular value -//if (! defined("MAIN_AUTHENTICATION_MODE")) define('MAIN_AUTHENTICATION_MODE', 'aloginmodule'); // Force authentication handler -//if (! defined("MAIN_SECURITY_FORCECSP")) define('MAIN_SECURITY_FORCECSP', 'none'); // Disable all Content Security Policies -//if (! defined('CSRFCHECK_WITH_TOKEN')) define('CSRFCHECK_WITH_TOKEN', '1'); // Force use of CSRF protection with tokens even for GET -//if (! defined('NOBROWSERNOTIF')) define('NOBROWSERNOTIF', '1'); // Disable browser notification -//if (! defined('NOSESSION')) define('NOSESSION', '1'); // Disable session - // Load Dolibarr environment -$res = 0; -// Try main.inc.php into web root known defined into CONTEXT_DOCUMENT_ROOT (not always defined) -if (!$res && !empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) { - $res = @include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php"; -} -// Try main.inc.php into web root detected using web root calculated from SCRIPT_FILENAME -$tmp = empty($_SERVER['SCRIPT_FILENAME']) ? '' : $_SERVER['SCRIPT_FILENAME']; $tmp2 = realpath(__FILE__); $i = strlen($tmp) - 1; $j = strlen($tmp2) - 1; -while ($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i] == $tmp2[$j]) { - $i--; - $j--; -} -if (!$res && $i > 0 && file_exists(substr($tmp, 0, ($i + 1))."/main.inc.php")) { - $res = @include substr($tmp, 0, ($i + 1))."/main.inc.php"; -} -if (!$res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php")) { - $res = @include dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php"; -} -// Try main.inc.php using relative path -if (!$res && file_exists("../main.inc.php")) { - $res = @include "../main.inc.php"; -} -if (!$res && file_exists("../../main.inc.php")) { - $res = @include "../../main.inc.php"; -} -if (!$res && file_exists("../../../main.inc.php")) { - $res = @include "../../../main.inc.php"; -} -if (!$res) { - die("Include of main fails"); -} +require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php'; -dol_include_once('/bookcal/class/calendar.class.php'); -dol_include_once('/bookcal/lib/bookcal_calendar.lib.php'); +require_once DOL_DOCUMENT_ROOT.'/bookcal/class/calendar.class.php'; +require_once DOL_DOCUMENT_ROOT.'/bookcal/lib/bookcal_calendar.lib.php'; // Load translation files required by the page -$langs->loadLangs(array("bookcal@bookcal", "other")); +$langs->loadLangs(array("agenda", "other")); // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); -$lineid = GETPOST('lineid', 'int'); +$lineid = GETPOSTINT('lineid'); $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm', 'alpha'); @@ -204,10 +156,10 @@ if (empty($reshook)) { include DOL_DOCUMENT_ROOT.'/core/actions_builddoc.inc.php'; if ($action == 'set_thirdparty' && $permissiontoadd) { - $object->setValueFrom('fk_soc', GETPOST('fk_soc', 'int'), '', '', 'date', '', $user, $triggermodname); + $object->setValueFrom('fk_soc', GETPOSTINT('fk_soc'), '', '', 'date', '', $user, $triggermodname); } if ($action == 'classin' && $permissiontoadd) { - $object->setProject(GETPOST('projectid', 'int')); + $object->setProject(GETPOSTINT('projectid')); } // Actions to send emails @@ -445,7 +397,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea // Show object lines $result = $object->getLinesArray(); - print ' + print ' @@ -463,7 +415,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } if (!empty($object->lines)) { - $object->printObjectLines($action, $mysoc, null, GETPOST('lineid', 'int'), 1); + $object->printObjectLines($action, $mysoc, null, GETPOSTINT('lineid'), 1); } // Form to add new line diff --git a/htdocs/bookcal/calendar_contact.php b/htdocs/bookcal/calendar_contact.php index 8247fa2ca74..4eb679a97f3 100644 --- a/htdocs/bookcal/calendar_contact.php +++ b/htdocs/bookcal/calendar_contact.php @@ -1,6 +1,7 @@ * Copyright (C) 2023 Alice Adminson + * Copyright (C) 2024 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -23,36 +24,7 @@ */ // Load Dolibarr environment -$res = 0; -// Try main.inc.php into web root known defined into CONTEXT_DOCUMENT_ROOT (not always defined) -if (!$res && !empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) { - $res = @include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php"; -} -// Try main.inc.php into web root detected using web root calculated from SCRIPT_FILENAME -$tmp = empty($_SERVER['SCRIPT_FILENAME']) ? '' : $_SERVER['SCRIPT_FILENAME']; $tmp2 = realpath(__FILE__); $i = strlen($tmp) - 1; $j = strlen($tmp2) - 1; -while ($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i] == $tmp2[$j]) { - $i--; - $j--; -} -if (!$res && $i > 0 && file_exists(substr($tmp, 0, ($i + 1))."/main.inc.php")) { - $res = @include substr($tmp, 0, ($i + 1))."/main.inc.php"; -} -if (!$res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php")) { - $res = @include dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php"; -} -// Try main.inc.php using relative path -if (!$res && file_exists("../main.inc.php")) { - $res = @include "../main.inc.php"; -} -if (!$res && file_exists("../../main.inc.php")) { - $res = @include "../../main.inc.php"; -} -if (!$res && file_exists("../../../main.inc.php")) { - $res = @include "../../../main.inc.php"; -} -if (!$res) { - die("Include of main fails"); -} +require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'; @@ -60,12 +32,12 @@ dol_include_once('/bookcal/class/calendar.class.php'); dol_include_once('/bookcal/lib/bookcal_calendar.lib.php'); // Load translation files required by the page -$langs->loadLangs(array("bookcal@bookcal", "companies", "other", "mails")); +$langs->loadLangs(array("agenda", "companies", "other", "mails")); -$id = (GETPOST('id') ? GETPOST('id', 'int') : GETPOST('facid', 'int')); // For backward compatibility +$id = (GETPOST('id') ? GETPOSTINT('id') : GETPOSTINT('facid')); // For backward compatibility $ref = GETPOST('ref', 'alpha'); -$lineid = GETPOST('lineid', 'int'); -$socid = GETPOST('socid', 'int'); +$lineid = GETPOSTINT('lineid'); +$socid = GETPOSTINT('socid'); $action = GETPOST('action', 'aZ09'); // Initialize technical objects @@ -108,7 +80,7 @@ if (!$permissiontoread) { */ if ($action == 'addcontact' && $permission) { - $contactid = (GETPOST('userid') ? GETPOST('userid', 'int') : GETPOST('contactid', 'int')); + $contactid = (GETPOST('userid') ? GETPOSTINT('userid') : GETPOSTINT('contactid')); $typeid = (GETPOST('typecontact') ? GETPOST('typecontact') : GETPOST('type')); $result = $object->add_contact($contactid, $typeid, GETPOST("source", 'aZ09')); @@ -125,7 +97,7 @@ if ($action == 'addcontact' && $permission) { } } elseif ($action == 'swapstatut' && $permission) { // Toggle the status of a contact - $result = $object->swapContactStatus(GETPOST('ligne', 'int')); + $result = $object->swapContactStatus(GETPOSTINT('ligne')); } elseif ($action == 'deletecontact' && $permission) { // Deletes a contact $result = $object->delete_contact($lineid); diff --git a/htdocs/bookcal/calendar_document.php b/htdocs/bookcal/calendar_document.php index 96b8b5b4d83..32aaf416f35 100644 --- a/htdocs/bookcal/calendar_document.php +++ b/htdocs/bookcal/calendar_document.php @@ -1,6 +1,7 @@ * Copyright (C) 2023 Alice Adminson + * Copyright (C) 2024 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,78 +23,30 @@ * \brief Tab for documents linked to Calendar */ -//if (! defined('NOREQUIREDB')) define('NOREQUIREDB', '1'); // Do not create database handler $db -//if (! defined('NOREQUIREUSER')) define('NOREQUIREUSER', '1'); // Do not load object $user -//if (! defined('NOREQUIRESOC')) define('NOREQUIRESOC', '1'); // Do not load object $mysoc -//if (! defined('NOREQUIRETRAN')) define('NOREQUIRETRAN', '1'); // Do not load object $langs -//if (! defined('NOSCANGETFORINJECTION')) define('NOSCANGETFORINJECTION', '1'); // Do not check injection attack on GET parameters -//if (! defined('NOSCANPOSTFORINJECTION')) define('NOSCANPOSTFORINJECTION', '1'); // Do not check injection attack on POST parameters -//if (! defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL', '1'); // Do not roll the Anti CSRF token (used if MAIN_SECURITY_CSRF_WITH_TOKEN is on) -//if (! defined('NOSTYLECHECK')) define('NOSTYLECHECK', '1'); // Do not check style html tag into posted data -//if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU', '1'); // If there is no need to load and show top and left menu -//if (! defined('NOREQUIREHTML')) define('NOREQUIREHTML', '1'); // If we don't need to load the html.form.class.php -//if (! defined('NOREQUIREAJAX')) define('NOREQUIREAJAX', '1'); // Do not load ajax.lib.php library -//if (! defined("NOLOGIN")) define("NOLOGIN", '1'); // If this page is public (can be called outside logged session). This include the NOIPCHECK too. -//if (! defined('NOIPCHECK')) define('NOIPCHECK', '1'); // Do not check IP defined into conf $dolibarr_main_restrict_ip -//if (! defined("MAIN_LANG_DEFAULT")) define('MAIN_LANG_DEFAULT', 'auto'); // Force lang to a particular value -//if (! defined("MAIN_AUTHENTICATION_MODE")) define('MAIN_AUTHENTICATION_MODE', 'aloginmodule'); // Force authentication handler -//if (! defined("MAIN_SECURITY_FORCECSP")) define('MAIN_SECURITY_FORCECSP', 'none'); // Disable all Content Security Policies -//if (! defined('CSRFCHECK_WITH_TOKEN')) define('CSRFCHECK_WITH_TOKEN', '1'); // Force use of CSRF protection with tokens even for GET -//if (! defined('NOBROWSERNOTIF')) define('NOBROWSERNOTIF', '1'); // Disable browser notification - // Load Dolibarr environment -$res = 0; -// Try main.inc.php into web root known defined into CONTEXT_DOCUMENT_ROOT (not always defined) -if (!$res && !empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) { - $res = @include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php"; -} -// Try main.inc.php into web root detected using web root calculated from SCRIPT_FILENAME -$tmp = empty($_SERVER['SCRIPT_FILENAME']) ? '' : $_SERVER['SCRIPT_FILENAME']; $tmp2 = realpath(__FILE__); $i = strlen($tmp) - 1; $j = strlen($tmp2) - 1; -while ($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i] == $tmp2[$j]) { - $i--; - $j--; -} -if (!$res && $i > 0 && file_exists(substr($tmp, 0, ($i + 1))."/main.inc.php")) { - $res = @include substr($tmp, 0, ($i + 1))."/main.inc.php"; -} -if (!$res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php")) { - $res = @include dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php"; -} -// Try main.inc.php using relative path -if (!$res && file_exists("../main.inc.php")) { - $res = @include "../main.inc.php"; -} -if (!$res && file_exists("../../main.inc.php")) { - $res = @include "../../main.inc.php"; -} -if (!$res && file_exists("../../../main.inc.php")) { - $res = @include "../../../main.inc.php"; -} -if (!$res) { - die("Include of main fails"); -} +require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/images.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php'; -dol_include_once('/bookcal/class/calendar.class.php'); -dol_include_once('/bookcal/lib/bookcal_calendar.lib.php'); +require_once DOL_DOCUMENT_ROOT.'/bookcal/class/calendar.class.php'; +require_once DOL_DOCUMENT_ROOT.'/bookcal/lib/bookcal_calendar.lib.php'; // Load translation files required by the page -$langs->loadLangs(array("bookcal@bookcal", "companies", "other", "mails")); +$langs->loadLangs(array("agenda", "companies", "other", "mails")); $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm'); -$id = (GETPOST('socid', 'int') ? GETPOST('socid', 'int') : GETPOST('id', 'int')); +$id = (GETPOSTINT('socid') ? GETPOSTINT('socid') : GETPOSTINT('id')); $ref = GETPOST('ref', 'alpha'); // Get parameters -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 diff --git a/htdocs/bookcal/calendar_list.php b/htdocs/bookcal/calendar_list.php index 9230edb9285..7a735b81c86 100644 --- a/htdocs/bookcal/calendar_list.php +++ b/htdocs/bookcal/calendar_list.php @@ -1,6 +1,7 @@ * Copyright (C) 2023 Alice Adminson + * Copyright (C) 2024 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -32,11 +33,11 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; require_once __DIR__.'/class/calendar.class.php'; // Load translation files required by the page -$langs->loadLangs(array("bookcal@bookcal", "other")); +$langs->loadLangs(array("agenda", "other")); $action = GETPOST('action', 'aZ09') ? GETPOST('action', 'aZ09') : 'view'; // The action 'create'/'add', 'edit'/'update', 'view', ... $massaction = GETPOST('massaction', 'alpha'); // The bulk action (combo box choice into lists) -$show_files = GETPOST('show_files', 'int'); // Show files area generated by bulk actions ? +$show_files = GETPOSTINT('show_files'); // Show files area generated by bulk actions ? $confirm = GETPOST('confirm', 'alpha'); // Result of a confirmation $cancel = GETPOST('cancel', 'alpha'); // We click on a Cancel button $toselect = GETPOST('toselect', 'array'); // Array of ids of elements selected into a list @@ -45,14 +46,14 @@ $backtopage = GETPOST('backtopage', 'alpha'); // Go back to a dedicated page $optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print') $mode = GETPOST('mode', 'aZ'); // The output mode ('list', 'kanban', 'hierarchy', 'calendar', ...) -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // If $page is not defined, or '' or -1 or if we click on clear filters $page = 0; @@ -90,8 +91,8 @@ foreach ($object->fields as $key => $val) { $search[$key] = GETPOST('search_'.$key, 'alpha'); } if (preg_match('/^(date|timestamp|datetime)/', $val['type'])) { - $search[$key.'_dtstart'] = dol_mktime(0, 0, 0, GETPOST('search_'.$key.'_dtstartmonth', 'int'), GETPOST('search_'.$key.'_dtstartday', 'int'), GETPOST('search_'.$key.'_dtstartyear', 'int')); - $search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOST('search_'.$key.'_dtendmonth', 'int'), GETPOST('search_'.$key.'_dtendday', 'int'), GETPOST('search_'.$key.'_dtendyear', 'int')); + $search[$key.'_dtstart'] = dol_mktime(0, 0, 0, GETPOSTINT('search_'.$key.'_dtstartmonth'), GETPOSTINT('search_'.$key.'_dtstartday'), GETPOSTINT('search_'.$key.'_dtstartyear')); + $search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOSTINT('search_'.$key.'_dtendmonth'), GETPOSTINT('search_'.$key.'_dtendday'), GETPOSTINT('search_'.$key.'_dtendyear')); } } @@ -110,6 +111,14 @@ foreach ($object->fields as $key => $val) { // $fieldstosearchall = array_merge($fieldstosearchall, empty($hookmanager->resArray['fieldstosearchall']) ? array() : $hookmanager->resArray['fieldstosearchall']); // } +// $fieldstosearchall is supposedly defined further below, ensure that it is. +if (!isset($fieldstosearchall) || !is_array($fieldstosearchall)) { + $fieldstosearchall = array(); +} +' + @phan-var-force array $fieldstosearchall +'; + // Definition of array of fields for columns $arrayfields = array(); foreach ($object->fields as $key => $val) { @@ -117,11 +126,11 @@ foreach ($object->fields as $key => $val) { if (!empty($val['visible'])) { $visible = (int) dol_eval($val['visible'], 1); $arrayfields['t.'.$key] = array( - 'label'=>$val['label'], - 'checked'=>(($visible < 0) ? 0 : 1), - 'enabled'=>(abs($visible) != 3 && dol_eval($val['enabled'], 1)), - 'position'=>$val['position'], - 'help'=> isset($val['help']) ? $val['help'] : '' + 'label' => $val['label'], + 'checked' => (($visible < 0) ? 0 : 1), + 'enabled' => (abs($visible) != 3 && (int) dol_eval($val['enabled'], 1)), + 'position' => $val['position'], + 'help' => isset($val['help']) ? $val['help'] : '' ); } } @@ -256,7 +265,7 @@ $parameters = array(); $reshook = $hookmanager->executeHooks('printFieldListFrom', $parameters, $object, $action); // Note that $action and $object may have been modified by hook $sql .= $hookmanager->resPrint; if ($object->ismultientitymanaged == 1) { - $sql .= " WHERE t.entity IN (".getEntity($object->element, (GETPOST('search_current_entity', 'int') ? 0 : 1)).")"; + $sql .= " WHERE t.entity IN (".getEntity($object->element, (GETPOSTINT('search_current_entity') ? 0 : 1)).")"; } else { $sql .= " WHERE 1 = 1"; } @@ -398,9 +407,9 @@ foreach ($search as $key => $val) { } } } elseif (preg_match('/(_dtstart|_dtend)$/', $key) && !empty($val)) { - $param .= '&search_'.$key.'month='.((int) GETPOST('search_'.$key.'month', 'int')); - $param .= '&search_'.$key.'day='.((int) GETPOST('search_'.$key.'day', 'int')); - $param .= '&search_'.$key.'year='.((int) GETPOST('search_'.$key.'year', 'int')); + $param .= '&search_'.$key.'month='.(GETPOSTINT('search_'.$key.'month')); + $param .= '&search_'.$key.'day='.(GETPOSTINT('search_'.$key.'day')); + $param .= '&search_'.$key.'year='.(GETPOSTINT('search_'.$key.'year')); } elseif ($search[$key] != '') { $param .= '&search_'.$key.'='.urlencode($search[$key]); } @@ -422,7 +431,7 @@ $arrayofmassactions = array( if (!empty($permissiontodelete)) { $arrayofmassactions['predelete'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete"); } -if (GETPOST('nomassaction', 'int') || in_array($massaction, array('presend', 'predelete'))) { +if (GETPOSTINT('nomassaction') || in_array($massaction, array('presend', 'predelete'))) { $arrayofmassactions = array(); } $massactionbutton = $form->selectMassAction('', $arrayofmassactions); @@ -443,8 +452,8 @@ print ''; $newcardbutton = ''; -$newcardbutton .= dolGetButtonTitle($langs->trans('ViewList'), '', 'fa fa-bars imgforviewmode', $_SERVER["PHP_SELF"].'?mode=common'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ((empty($mode) || $mode == 'common') ? 2 : 1), array('morecss'=>'reposition')); -$newcardbutton .= dolGetButtonTitle($langs->trans('ViewKanban'), '', 'fa fa-th-list imgforviewmode', $_SERVER["PHP_SELF"].'?mode=kanban'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ($mode == 'kanban' ? 2 : 1), array('morecss'=>'reposition')); +$newcardbutton .= dolGetButtonTitle($langs->trans('ViewList'), '', 'fa fa-bars imgforviewmode', $_SERVER["PHP_SELF"].'?mode=common'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ((empty($mode) || $mode == 'common') ? 2 : 1), array('morecss' => 'reposition')); +$newcardbutton .= dolGetButtonTitle($langs->trans('ViewKanban'), '', 'fa fa-th-list imgforviewmode', $_SERVER["PHP_SELF"].'?mode=kanban'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ($mode == 'kanban' ? 2 : 1), array('morecss' => 'reposition')); $newcardbutton .= dolGetButtonTitleSeparator(); $newcardbutton .= dolGetButtonTitle($langs->trans('New'), '', 'fa fa-plus-circle', dol_buildpath('/bookcal/calendar_card.php', 1).'?action=create&backtopage='.urlencode($_SERVER['PHP_SELF']), '', $permissiontoadd); @@ -490,7 +499,7 @@ if (!empty($moreforfilter)) { } $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; -$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')) : ''); // This also change content of $arrayfields +$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) : ''); // This also change content of $arrayfields $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); print '
'; // You can use div-table-responsive-no-min if you don't need reserved height for your table @@ -545,7 +554,7 @@ foreach ($object->fields as $key => $val) { include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php'; // Fields from hook -$parameters = array('arrayfields'=>$arrayfields); +$parameters = array('arrayfields' => $arrayfields); $reshook = $hookmanager->executeHooks('printFieldListOption', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; /*if (!empty($arrayfields['anotherfield']['checked'])) { @@ -591,7 +600,7 @@ foreach ($object->fields as $key => $val) { // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; // Hook fields -$parameters = array('arrayfields'=>$arrayfields, 'param'=>$param, 'sortfield'=>$sortfield, 'sortorder'=>$sortorder, 'totalarray'=>&$totalarray); +$parameters = array('arrayfields' => $arrayfields, 'param' => $param, 'sortfield' => $sortfield, 'sortorder' => $sortorder, 'totalarray' => &$totalarray); $reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; /*if (!empty($arrayfields['anotherfield']['checked'])) { @@ -723,7 +732,7 @@ while ($i < $imaxinloop) { // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php'; // Fields from hook - $parameters = array('arrayfields'=>$arrayfields, 'object'=>$object, 'obj'=>$obj, 'i'=>$i, 'totalarray'=>&$totalarray); + $parameters = array('arrayfields' => $arrayfields, 'object' => $object, 'obj' => $obj, 'i' => $i, 'totalarray' => &$totalarray); $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; /*if (!empty($arrayfields['anotherfield']['checked'])) { diff --git a/htdocs/bookcal/calendar_note.php b/htdocs/bookcal/calendar_note.php index 31f47504264..7eb44b892e2 100644 --- a/htdocs/bookcal/calendar_note.php +++ b/htdocs/bookcal/calendar_note.php @@ -1,6 +1,7 @@ * Copyright (C) 2023 Alice Adminson + * Copyright (C) 2024 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,65 +23,17 @@ * \brief Tab for notes on Calendar */ -//if (! defined('NOREQUIREDB')) define('NOREQUIREDB', '1'); // Do not create database handler $db -//if (! defined('NOREQUIREUSER')) define('NOREQUIREUSER', '1'); // Do not load object $user -//if (! defined('NOREQUIRESOC')) define('NOREQUIRESOC', '1'); // Do not load object $mysoc -//if (! defined('NOREQUIRETRAN')) define('NOREQUIRETRAN', '1'); // Do not load object $langs -//if (! defined('NOSCANGETFORINJECTION')) define('NOSCANGETFORINJECTION', '1'); // Do not check injection attack on GET parameters -//if (! defined('NOSCANPOSTFORINJECTION')) define('NOSCANPOSTFORINJECTION', '1'); // Do not check injection attack on POST parameters -//if (! defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL', '1'); // Do not roll the Anti CSRF token (used if MAIN_SECURITY_CSRF_WITH_TOKEN is on) -//if (! defined('NOSTYLECHECK')) define('NOSTYLECHECK', '1'); // Do not check style html tag into posted data -//if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU', '1'); // If there is no need to load and show top and left menu -//if (! defined('NOREQUIREHTML')) define('NOREQUIREHTML', '1'); // If we don't need to load the html.form.class.php -//if (! defined('NOREQUIREAJAX')) define('NOREQUIREAJAX', '1'); // Do not load ajax.lib.php library -//if (! defined("NOLOGIN")) define("NOLOGIN", '1'); // If this page is public (can be called outside logged session). This include the NOIPCHECK too. -//if (! defined('NOIPCHECK')) define('NOIPCHECK', '1'); // Do not check IP defined into conf $dolibarr_main_restrict_ip -//if (! defined("MAIN_LANG_DEFAULT")) define('MAIN_LANG_DEFAULT', 'auto'); // Force lang to a particular value -//if (! defined("MAIN_AUTHENTICATION_MODE")) define('MAIN_AUTHENTICATION_MODE', 'aloginmodule'); // Force authentication handler -//if (! defined("MAIN_SECURITY_FORCECSP")) define('MAIN_SECURITY_FORCECSP', 'none'); // Disable all Content Security Policies -//if (! defined('CSRFCHECK_WITH_TOKEN')) define('CSRFCHECK_WITH_TOKEN', '1'); // Force use of CSRF protection with tokens even for GET -//if (! defined('NOBROWSERNOTIF')) define('NOBROWSERNOTIF', '1'); // Disable browser notification - // Load Dolibarr environment -$res = 0; -// Try main.inc.php into web root known defined into CONTEXT_DOCUMENT_ROOT (not always defined) -if (!$res && !empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) { - $res = @include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php"; -} -// Try main.inc.php into web root detected using web root calculated from SCRIPT_FILENAME -$tmp = empty($_SERVER['SCRIPT_FILENAME']) ? '' : $_SERVER['SCRIPT_FILENAME']; $tmp2 = realpath(__FILE__); $i = strlen($tmp) - 1; $j = strlen($tmp2) - 1; -while ($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i] == $tmp2[$j]) { - $i--; - $j--; -} -if (!$res && $i > 0 && file_exists(substr($tmp, 0, ($i + 1))."/main.inc.php")) { - $res = @include substr($tmp, 0, ($i + 1))."/main.inc.php"; -} -if (!$res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php")) { - $res = @include dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php"; -} -// Try main.inc.php using relative path -if (!$res && file_exists("../main.inc.php")) { - $res = @include "../main.inc.php"; -} -if (!$res && file_exists("../../main.inc.php")) { - $res = @include "../../main.inc.php"; -} -if (!$res && file_exists("../../../main.inc.php")) { - $res = @include "../../../main.inc.php"; -} -if (!$res) { - die("Include of main fails"); -} +require '../main.inc.php'; -dol_include_once('/bookcal/class/calendar.class.php'); -dol_include_once('/bookcal/lib/bookcal_calendar.lib.php'); +require_once DOL_DOCUMENT_ROOT.'/bookcal/class/calendar.class.php'; +require_once DOL_DOCUMENT_ROOT.'/bookcal/lib/bookcal_calendar.lib.php'; // Load translation files required by the page -$langs->loadLangs(array("bookcal@bookcal", "companies")); +$langs->loadLangs(array("agenda", "companies")); // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'aZ09'); diff --git a/htdocs/bookcal/class/availabilities.class.php b/htdocs/bookcal/class/availabilities.class.php index 45adf964ae3..ad34e08abcd 100644 --- a/htdocs/bookcal/class/availabilities.class.php +++ b/htdocs/bookcal/class/availabilities.class.php @@ -1,6 +1,8 @@ * Copyright (C) 2022 Alice Adminson + * Copyright (C) 2024 Frédéric France + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -61,7 +63,7 @@ class Availabilities extends CommonObject /** * @var string String with name of icon for availabilities. Must be a 'fa-xxx' fontawesome code (or 'fa-xxx_fa_color_size') or 'availabilities@bookcal' if picto is file 'img/object_availabilities.png'. */ - public $picto = 'fa-file'; + public $picto = 'fa-calendar-check'; const STATUS_DRAFT = 0; @@ -110,28 +112,28 @@ class Availabilities extends CommonObject // BEGIN MODULEBUILDER PROPERTIES /** - * @var array Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. + * @var array|string,position:int,notnull?:int,visible:int,noteditable?:int,default?:string,index?:int,foreignkey?:string,searchall?:int,isameasure?:int,css?:string,csslist?:string,help?:string,showoncombobox?:int,disabled?:int,arrayofkeyval?:array,comment?:string}> Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. */ - public $fields=array( - 'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>'1', 'position'=>1, 'notnull'=>1, 'visible'=>2, 'noteditable'=>'1', 'index'=>1, 'css'=>'left', 'comment'=>"Id"), - 'label' => array('type'=>'varchar(255)', 'label'=>'Label', 'enabled'=>'1', 'position'=>20, 'notnull'=>0, 'visible'=>1, 'searchall'=>1, 'css'=>'minwidth300', 'csslist'=>'tdoverflowmax150', 'cssview'=>'wordbreak', 'help'=>"BookcalLabelAvailabilityHelp", 'showoncombobox'=>'2', 'validate'=>'1',), - 'fk_bookcal_calendar' => array('type'=>'integer:Calendar:bookcal/class/calendar.class.php:1', 'label'=>'Calendar', 'enabled'=>'1', 'position'=>25, 'notnull'=>1, 'visible'=>1, 'css'=>'maxwidth500 widthcentpercentminusxx', 'csslist'=>'tdoverflowmax100'), - 'description' => array('type'=>'text', 'label'=>'Description', 'enabled'=>'1', 'position'=>60, 'notnull'=>0, 'visible'=>3, 'validate'=>'1',), - 'note_public' => array('type'=>'html', 'label'=>'NotePublic', 'enabled'=>'1', 'position'=>61, 'notnull'=>0, 'visible'=>0, 'cssview'=>'wordbreak', 'validate'=>'1',), - 'note_private' => array('type'=>'html', 'label'=>'NotePrivate', 'enabled'=>'1', 'position'=>62, 'notnull'=>0, 'visible'=>0, 'cssview'=>'wordbreak', 'validate'=>'1',), - 'date_creation' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>'1', 'position'=>500, 'notnull'=>1, 'visible'=>-2,), - 'tms' => array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>'1', 'position'=>501, 'notnull'=>0, 'visible'=>-2,), - 'fk_user_creat' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserAuthor', 'picto'=>'user', 'enabled'=>'1', 'position'=>510, 'notnull'=>1, 'visible'=>-2, 'css'=>'maxwidth500 widthcentpercentminusxx', 'csslist'=>'tdoverflowmax150'), - 'fk_user_modif' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserModif', 'picto'=>'user', 'enabled'=>'1', 'position'=>511, 'notnull'=>-1, 'visible'=>-2, 'css'=>'maxwidth500 widthcentpercentminusxx', 'csslist'=>'tdoverflowmax150'), - 'last_main_doc' => array('type'=>'varchar(255)', 'label'=>'LastMainDoc', 'enabled'=>'1', 'position'=>600, 'notnull'=>0, 'visible'=>0,), - 'import_key' => array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>'1', 'position'=>1000, 'notnull'=>-1, 'visible'=>-2,), - 'model_pdf' => array('type'=>'varchar(255)', 'label'=>'Model pdf', 'enabled'=>'1', 'position'=>1010, 'notnull'=>-1, 'visible'=>0,), - 'start' => array('type'=>'date', 'label'=>'Start Date', 'enabled'=>'1', 'position'=>40, 'notnull'=>1, 'visible'=>1, 'searchall'=>1,), - 'end' => array('type'=>'date', 'label'=>'End Date', 'enabled'=>'1', 'position'=>45, 'notnull'=>1, 'visible'=>1, 'searchall'=>1,), - 'duration' => array('type'=>'integer', 'label'=>'DurationOfRange', 'enabled'=>'1', 'position'=>47, 'notnull'=>1, 'visible'=>1, 'default'=>'30', 'css'=>'width50 right'), - 'startHour' => array('type'=>'integer', 'label'=>'Start Hour', 'enabled'=>'1', 'position'=>46, 'notnull'=>1, 'visible'=>1,), - 'endHour' => array('type'=>'integer', 'label'=>'End Hour', 'enabled'=>'1', 'position'=>46.5, 'notnull'=>1, 'visible'=>1,), - 'status' => array('type'=>'integer', 'label'=>'Status', 'enabled'=>'1', 'position'=>2000, 'notnull'=>1, 'visible'=>1, 'index'=>1, 'arrayofkeyval'=>array('0'=>'Draft', '1'=>'Validated', '9'=>'Closed'), 'default'=>1, 'validate'=>'1'), + public $fields = array( + 'rowid' => array('type' => 'integer', 'label' => 'TechnicalID', 'enabled' => 1, 'position' => 1, 'notnull' => 1, 'visible' => 2, 'noteditable' => 1, 'index' => 1, 'css' => 'left', 'comment' => "Id"), + 'label' => array('type' => 'varchar(255)', 'label' => 'Label', 'enabled' => 1, 'position' => 20, 'notnull' => 0, 'visible' => 1, 'searchall' => 1, 'css' => 'minwidth300', 'csslist' => 'tdoverflowmax150', 'cssview' => 'wordbreak', 'help' => "BookcalLabelAvailabilityHelp", 'showoncombobox' => 2, 'validate' => 1,), + 'fk_bookcal_calendar' => array('type' => 'integer:Calendar:bookcal/class/calendar.class.php:1', 'label' => 'Calendar', 'enabled' => 1, 'position' => 25, 'notnull' => 1, 'visible' => 1, 'css' => 'maxwidth500 widthcentpercentminusxx', 'csslist' => 'tdoverflowmax100'), + 'description' => array('type' => 'text', 'label' => 'Description', 'enabled' => 1, 'position' => 60, 'notnull' => 0, 'visible' => 3, 'validate' => 1,), + 'note_public' => array('type' => 'html', 'label' => 'NotePublic', 'enabled' => 1, 'position' => 61, 'notnull' => 0, 'visible' => 0, 'cssview' => 'wordbreak', 'validate' => 1,), + 'note_private' => array('type' => 'html', 'label' => 'NotePrivate', 'enabled' => 1, 'position' => 62, 'notnull' => 0, 'visible' => 0, 'cssview' => 'wordbreak', 'validate' => 1,), + 'date_creation' => array('type' => 'datetime', 'label' => 'DateCreation', 'enabled' => 1, 'position' => 500, 'notnull' => 1, 'visible' => -2,), + 'tms' => array('type' => 'timestamp', 'label' => 'DateModification', 'enabled' => 1, 'position' => 501, 'notnull' => 0, 'visible' => -2,), + 'fk_user_creat' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'UserAuthor', 'picto' => 'user', 'enabled' => 1, 'position' => 510, 'notnull' => 1, 'visible' => -2, 'css' => 'maxwidth500 widthcentpercentminusxx', 'csslist' => 'tdoverflowmax150'), + 'fk_user_modif' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'UserModif', 'picto' => 'user', 'enabled' => 1, 'position' => 511, 'notnull' => -1, 'visible' => -2, 'css' => 'maxwidth500 widthcentpercentminusxx', 'csslist' => 'tdoverflowmax150'), + 'last_main_doc' => array('type' => 'varchar(255)', 'label' => 'LastMainDoc', 'enabled' => 1, 'position' => 600, 'notnull' => 0, 'visible' => 0,), + 'import_key' => array('type' => 'varchar(14)', 'label' => 'ImportId', 'enabled' => 1, 'position' => 1000, 'notnull' => -1, 'visible' => -2,), + 'model_pdf' => array('type' => 'varchar(255)', 'label' => 'Model pdf', 'enabled' => 1, 'position' => 1010, 'notnull' => -1, 'visible' => 0,), + 'start' => array('type' => 'date', 'label' => 'Start Date', 'enabled' => 1, 'position' => 40, 'notnull' => 1, 'visible' => 1, 'searchall' => 1,), + 'end' => array('type' => 'date', 'label' => 'End Date', 'enabled' => 1, 'position' => 45, 'notnull' => 1, 'visible' => 1, 'searchall' => 1,), + 'duration' => array('type' => 'integer', 'label' => 'DurationOfRange', 'enabled' => 1, 'position' => 47, 'notnull' => 1, 'visible' => 1, 'default' => '30', 'css' => 'width50 right'), + 'startHour' => array('type' => 'integer', 'label' => 'Start Hour', 'enabled' => 1, 'position' => 46, 'notnull' => 1, 'visible' => 1,), + 'endHour' => array('type' => 'integer', 'label' => 'End Hour', 'enabled' => 1, 'position' => 46.5, 'notnull' => 1, 'visible' => 1,), + 'status' => array('type' => 'integer', 'label' => 'Status', 'enabled' => 1, 'position' => 2000, 'notnull' => 1, 'visible' => 1, 'index' => 1, 'arrayofkeyval' => array('0' => 'Draft', '1' => 'Validated', '9' => 'Closed'), 'default' => '1', 'validate' => 1), ); public $rowid; public $label; @@ -382,18 +384,17 @@ class Availabilities extends CommonObject /** * Load list of objects in memory from the database. * - * @param string $sortorder Sort Order - * @param string $sortfield Sort field - * @param int $limit limit - * @param int $offset Offset - * @param array $filter Filter array. Example array('field'=>'valueforlike', 'customurl'=>...) - * @param string $filtermode Filter mode (AND or OR) - * @return array|int int <0 if KO, array of pages if OK + * @param string $sortorder Sort Order + * @param string $sortfield Sort field + * @param int $limit limit + * @param int $offset Offset + * @param string $filter Filter as an Universal Search string. + * Example: '((client:=:1) OR ((client:>=:2) AND (client:<=:3))) AND (client:!=:8) AND (nom:like:'a%')' + * @param string $filtermode No more used + * @return array|int int <0 if KO, array of pages if OK */ - public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND') + public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, $filter = '', $filtermode = 'AND') { - global $conf; - dol_syslog(__METHOD__, LOG_DEBUG); $records = array(); @@ -406,25 +407,14 @@ class Availabilities extends CommonObject } else { $sql .= " WHERE 1 = 1"; } + // Manage filter - $sqlwhere = array(); - if (count($filter) > 0) { - foreach ($filter as $key => $value) { - if ($key == 't.rowid') { - $sqlwhere[] = $key." = ".((int) $value); - } elseif (in_array($this->fields[$key]['type'], array('date', 'datetime', 'timestamp'))) { - $sqlwhere[] = $key." = '".$this->db->idate($value)."'"; - } elseif ($key == 'customsql') { - $sqlwhere[] = $value; - } elseif (strpos($value, '%') === false) { - $sqlwhere[] = $key." IN (".$this->db->sanitize($this->db->escape($value)).")"; - } else { - $sqlwhere[] = $key." LIKE '%".$this->db->escape($value)."%'"; - } - } - } - if (count($sqlwhere) > 0) { - $sql .= " AND (".implode(" ".$filtermode." ", $sqlwhere).")"; + $errormessage = ''; + $sql .= forgeSQLFromUniversalSearchCriteria($filter, $errormessage); + if ($errormessage) { + $this->errors[] = $errormessage; + dol_syslog(__METHOD__.' '.implode(',', $this->errors), LOG_ERR); + return -1; } if (!empty($sortfield)) { @@ -539,7 +529,7 @@ class Availabilities extends CommonObject if (!empty($num)) { // Validate $sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element; - $sql .= " SET ref = '".$this->db->escape($num)."',"; + $sql .= " SET label = '".$this->db->escape($num)."',"; $sql .= " status = ".self::STATUS_VALIDATED; if (!empty($this->fields['date_validation'])) { $sql .= ", date_validation = '".$this->db->idate($now)."'"; @@ -783,7 +773,7 @@ class Availabilities extends CommonObject global $action, $hookmanager; $hookmanager->initHooks(array('availabilitiesdao')); - $parameters = array('id'=>$this->id, 'getnomurl' => &$result); + $parameters = array('id' => $this->id, 'getnomurl' => &$result); $reshook = $hookmanager->executeHooks('getNomUrl', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks if ($reshook > 0) { $result = $hookmanager->resPrint; @@ -926,7 +916,7 @@ class Availabilities extends CommonObject * Initialise object with example values * Id must be 0 if object instance is a specimen * - * @return void + * @return int */ public function initAsSpecimen() { @@ -934,7 +924,7 @@ class Availabilities extends CommonObject // $this->property1 = ... // $this->property2 = ... - $this->initAsSpecimenCommon(); + return $this->initAsSpecimenCommon(); } /** @@ -947,7 +937,7 @@ class Availabilities extends CommonObject $this->lines = array(); $objectline = new AvailabilitiesLine($this->db); - $result = $objectline->fetchAll('ASC', 'position', 0, 0, array('customsql'=>'fk_availabilities = '.((int) $this->id))); + $result = $objectline->fetchAll('ASC', 'position', 0, 0, '(fk_availabilities:=:'.((int) $this->id).')'); if (is_numeric($result)) { $this->error = $objectline->error; diff --git a/htdocs/bookcal/class/calendar.class.php b/htdocs/bookcal/class/calendar.class.php index 7c84275f0ce..b66f950fd12 100644 --- a/htdocs/bookcal/class/calendar.class.php +++ b/htdocs/bookcal/class/calendar.class.php @@ -1,7 +1,8 @@ - * Copyright (C) 2023 Frédéric France + * Copyright (C) 2023-2024 Frédéric France * Copyright (C) 2023 Alice Adminson + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -62,7 +63,7 @@ class Calendar extends CommonObject /** * @var string String with name of icon for calendar. Must be a 'fa-xxx' fontawesome code (or 'fa-xxx_fa_color_size') or 'calendar@bookcal' if picto is file 'img/object_calendar.png'. */ - public $picto = 'fa-file'; + public $picto = 'fa-calendar-check'; const STATUS_DRAFT = 0; @@ -111,25 +112,25 @@ class Calendar extends CommonObject // BEGIN MODULEBUILDER PROPERTIES /** - * @var array Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. + * @var array|string,position:int,notnull?:int,visible:int,noteditable?:int,default?:string,index?:int,foreignkey?:string,searchall?:int,isameasure?:int,css?:string,csslist?:string,help?:string,showoncombobox?:int,disabled?:int,arrayofkeyval?:array,comment?:string}> Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. */ - public $fields=array( - 'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>'1', 'position'=>1, 'notnull'=>1, 'visible'=>0, 'noteditable'=>'1', 'index'=>1, 'css'=>'right', 'comment'=>"Id"), - 'ref' => array('type'=>'varchar(128)', 'label'=>'Ref', 'enabled'=>'1', 'position'=>20, 'notnull'=>1, 'visible'=>1, 'index'=>1, 'searchall'=>1, 'showoncombobox'=>'1', 'validate'=>'1', 'comment'=>"Reference of object", 'css'=>'width100'), - 'label' => array('type'=>'varchar(255)', 'label'=>'Label', 'enabled'=>'1', 'position'=>30, 'notnull'=>0, 'visible'=>1, 'alwayseditable'=>'1', 'searchall'=>1, 'css'=>'minwidth300', 'cssview'=>'wordbreak', 'help'=>"Help text", 'showoncombobox'=>'2', 'validate'=>'1',), - 'visibility' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'Owner', 'enabled'=>'1', 'position'=>40, 'notnull'=>1, 'visible'=>1, 'picto'=>'user', 'css'=>'maxwidth500 widthcentpercentminusxx', 'csslist'=>'tdoverflowmax150',), - 'type' => array('type'=>'integer', 'label'=>'Type', 'enabled'=>'1', 'position'=>42, 'notnull'=>1, 'visible'=>1, 'arrayofkeyval'=>array('0'=>'Customer', '1'=>'Supplier', '3'=>'Other'),), - 'fk_soc' => array('type'=>'integer:Societe:societe/class/societe.class.php:1:((status:=:1) AND (entity:IN:__SHARED_ENTITIES__))', 'label'=>'ThirdParty', 'picto'=>'company', 'enabled'=>'isModEnabled("societe")', 'position'=>50, 'notnull'=>-1, 'visible'=>1, 'index'=>1, 'css'=>'maxwidth500 widthcentpercentminusxx', 'csslist'=>'tdoverflowmax150', 'help'=>"ThirdPartyBookCalHelp", 'validate'=>'1',), - 'fk_project' => array('type'=>'integer:Project:projet/class/project.class.php:1', 'label'=>'Project', 'picto'=>'project', 'enabled'=>'isModEnabled("project")', 'position'=>52, 'notnull'=>-1, 'visible'=>-1, 'index'=>1, 'css'=>'maxwidth500 widthcentpercentminusxx', 'csslist'=>'tdoverflowmax150', 'validate'=>'1',), - 'description' => array('type'=>'text', 'label'=>'Description', 'enabled'=>'1', 'position'=>60, 'notnull'=>0, 'visible'=>3, 'validate'=>'1',), - 'note_public' => array('type'=>'html', 'label'=>'NotePublic', 'enabled'=>'1', 'position'=>61, 'notnull'=>0, 'visible'=>0, 'cssview'=>'wordbreak', 'validate'=>'1',), - 'note_private' => array('type'=>'html', 'label'=>'NotePrivate', 'enabled'=>'1', 'position'=>62, 'notnull'=>0, 'visible'=>0, 'cssview'=>'wordbreak', 'validate'=>'1',), - 'date_creation' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>'1', 'position'=>500, 'notnull'=>1, 'visible'=>-2,), - 'tms' => array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>'1', 'position'=>501, 'notnull'=>0, 'visible'=>-2,), - 'fk_user_creat' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserAuthor', 'picto'=>'user', 'enabled'=>'1', 'position'=>510, 'notnull'=>1, 'visible'=>-2, 'foreignkey'=>'user.rowid', 'csslist'=>'tdoverflowmax150',), - 'fk_user_modif' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserModif', 'picto'=>'user', 'enabled'=>'1', 'position'=>511, 'notnull'=>-1, 'visible'=>-2, 'csslist'=>'tdoverflowmax150',), - 'import_key' => array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>'1', 'position'=>1000, 'notnull'=>-1, 'visible'=>-2,), - 'status' => array('type'=>'integer', 'label'=>'Status', 'enabled'=>'1', 'position'=>2000, 'notnull'=>1, 'default'=>0, 'visible'=>1, 'index'=>1, 'arrayofkeyval'=>array('0'=>'Draft', '1'=>'Validated', '9'=>'Closed'), 'validate'=>'1',), + public $fields = array( + 'rowid' => array('type' => 'integer', 'label' => 'TechnicalID', 'enabled' => 1, 'position' => 1, 'notnull' => 1, 'visible' => 0, 'noteditable' => 1, 'index' => 1, 'css' => 'right', 'comment' => "Id"), + 'ref' => array('type' => 'varchar(128)', 'label' => 'Ref', 'enabled' => 1, 'position' => 20, 'notnull' => 1, 'visible' => 1, 'index' => 1, 'searchall' => 1, 'showoncombobox' => 1, 'validate' => 1, 'comment' => "Reference of object", 'css' => 'width100'), + 'label' => array('type' => 'varchar(255)', 'label' => 'Label', 'enabled' => 1, 'position' => 30, 'notnull' => 0, 'visible' => 1, 'alwayseditable' => 1, 'searchall' => 1, 'css' => 'minwidth300', 'cssview' => 'wordbreak', 'help' => "Help text", 'showoncombobox' => 2, 'validate' => 1,), + 'visibility' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'Owner', 'enabled' => 1, 'position' => 40, 'notnull' => 1, 'visible' => 1, 'picto' => 'user', 'css' => 'maxwidth500 widthcentpercentminusxx', 'csslist' => 'tdoverflowmax150',), + 'type' => array('type' => 'integer', 'label' => 'Type', 'enabled' => 1, 'position' => 42, 'notnull' => 1, 'visible' => 1, 'arrayofkeyval' => array('0' => 'Customer', '1' => 'Supplier', '3' => 'Other'),), + 'fk_soc' => array('type' => 'integer:Societe:societe/class/societe.class.php:1:((status:=:1) AND (entity:IN:__SHARED_ENTITIES__))', 'label' => 'ThirdParty', 'picto' => 'company', 'enabled' => 'isModEnabled("societe")', 'position' => 50, 'notnull' => -1, 'visible' => 1, 'index' => 1, 'css' => 'maxwidth500 widthcentpercentminusxx', 'csslist' => 'tdoverflowmax150', 'help' => "ThirdPartyBookCalHelp", 'validate' => 1,), + 'fk_project' => array('type' => 'integer:Project:projet/class/project.class.php:1', 'label' => 'Project', 'picto' => 'project', 'enabled' => 'isModEnabled("project")', 'position' => 52, 'notnull' => -1, 'visible' => -1, 'index' => 1, 'css' => 'maxwidth500 widthcentpercentminusxx', 'csslist' => 'tdoverflowmax150', 'validate' => 1,), + 'description' => array('type' => 'text', 'label' => 'Description', 'enabled' => 1, 'position' => 60, 'notnull' => 0, 'visible' => 3, 'validate' => 1,), + 'note_public' => array('type' => 'html', 'label' => 'NotePublic', 'enabled' => 1, 'position' => 61, 'notnull' => 0, 'visible' => 0, 'cssview' => 'wordbreak', 'validate' => 1,), + 'note_private' => array('type' => 'html', 'label' => 'NotePrivate', 'enabled' => 1, 'position' => 62, 'notnull' => 0, 'visible' => 0, 'cssview' => 'wordbreak', 'validate' => 1,), + 'date_creation' => array('type' => 'datetime', 'label' => 'DateCreation', 'enabled' => 1, 'position' => 500, 'notnull' => 1, 'visible' => -2,), + 'tms' => array('type' => 'timestamp', 'label' => 'DateModification', 'enabled' => 1, 'position' => 501, 'notnull' => 0, 'visible' => -2,), + 'fk_user_creat' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'UserAuthor', 'picto' => 'user', 'enabled' => 1, 'position' => 510, 'notnull' => 1, 'visible' => -2, 'foreignkey' => 'user.rowid', 'csslist' => 'tdoverflowmax150',), + 'fk_user_modif' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'UserModif', 'picto' => 'user', 'enabled' => 1, 'position' => 511, 'notnull' => -1, 'visible' => -2, 'csslist' => 'tdoverflowmax150',), + 'import_key' => array('type' => 'varchar(14)', 'label' => 'ImportId', 'enabled' => 1, 'position' => 1000, 'notnull' => -1, 'visible' => -2,), + 'status' => array('type' => 'integer', 'label' => 'Status', 'enabled' => 1, 'position' => 2000, 'notnull' => 1, 'default' => '0', 'visible' => 1, 'index' => 1, 'arrayofkeyval' => array('0' => 'Draft', '1' => 'Validated', '9' => 'Closed'), 'validate' => 1,), ); public $rowid; public $ref; @@ -341,15 +342,16 @@ class Calendar extends CommonObject /** * Load list of objects in memory from the database. * - * @param string $sortorder Sort Order - * @param string $sortfield Sort field - * @param int $limit limit - * @param int $offset Offset - * @param array $filter Filter array. Example array('field'=>'valueforlike', 'customurl'=>...) - * @param string $filtermode Filter mode (AND or OR) - * @return array|int int <0 if KO, array of pages if OK + * @param string $sortorder Sort Order + * @param string $sortfield Sort field + * @param int $limit limit + * @param int $offset Offset + * @param string $filter Filter as an Universal Search string. + * Example: '((client:=:1) OR ((client:>=:2) AND (client:<=:3))) AND (client:!=:8) AND (nom:like:'a%')' + * @param string $filtermode No more used + * @return array|int int <0 if KO, array of pages if OK */ - public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND') + public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, $filter = '', $filtermode = 'AND') { dol_syslog(__METHOD__, LOG_DEBUG); @@ -363,25 +365,14 @@ class Calendar extends CommonObject } else { $sql .= " WHERE 1 = 1"; } + // Manage filter - $sqlwhere = array(); - if (count($filter) > 0) { - foreach ($filter as $key => $value) { - if ($key == 't.rowid') { - $sqlwhere[] = $key." = ".((int) $value); - } elseif (in_array($this->fields[$key]['type'], array('date', 'datetime', 'timestamp'))) { - $sqlwhere[] = $key." = '".$this->db->idate($value)."'"; - } elseif ($key == 'customsql') { - $sqlwhere[] = $value; - } elseif (strpos($value, '%') === false) { - $sqlwhere[] = $key." IN (".$this->db->sanitize($this->db->escape($value)).")"; - } else { - $sqlwhere[] = $key." LIKE '%".$this->db->escape($value)."%'"; - } - } - } - if (count($sqlwhere) > 0) { - $sql .= " AND (".implode(" ".$filtermode." ", $sqlwhere).")"; + $errormessage = ''; + $sql .= forgeSQLFromUniversalSearchCriteria($filter, $errormessage); + if ($errormessage) { + $this->errors[] = $errormessage; + dol_syslog(__METHOD__.' '.implode(',', $this->errors), LOG_ERR); + return -1; } if (!empty($sortfield)) { @@ -915,7 +906,7 @@ class Calendar extends CommonObject * Initialise object with example values * Id must be 0 if object instance is a specimen * - * @return void + * @return int */ public function initAsSpecimen() { @@ -923,7 +914,7 @@ class Calendar extends CommonObject // $this->property1 = ... // $this->property2 = ... - $this->initAsSpecimenCommon(); + return $this->initAsSpecimenCommon(); } /** @@ -936,7 +927,7 @@ class Calendar extends CommonObject $this->lines = array(); $objectline = new CalendarLine($this->db); - $result = $objectline->fetchAll('ASC', 'position', 0, 0, array('customsql'=>'fk_calendar = '.((int) $this->id))); + $result = $objectline->fetchAll('ASC', 'position', 0, 0, '(fk_calendar:=:'.((int) $this->id).')'); if (is_numeric($result)) { $this->setErrorsFromObject($objectline); diff --git a/htdocs/bookcal/lib/bookcal.lib.php b/htdocs/bookcal/lib/bookcal.lib.php index 3f809da08d8..049de3c6472 100644 --- a/htdocs/bookcal/lib/bookcal.lib.php +++ b/htdocs/bookcal/lib/bookcal.lib.php @@ -1,5 +1,6 @@ + * Copyright (C) 2024 Frédéric France * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,7 +17,7 @@ */ /** - * \file bookcal/lib/bookcal.lib.php + * \file htdocs/bookcal/lib/bookcal.lib.php * \ingroup bookcal * \brief Library files with common functions for BookCal */ @@ -35,13 +36,13 @@ function bookcalAdminPrepareHead() $h = 0; $head = array(); - $head[$h][0] = dol_buildpath("/bookcal/admin/setup.php", 1); + $head[$h][0] = DOL_URL_ROOT . '/bookcal/admin/setup.php'; $head[$h][1] = $langs->trans("Settings"); $head[$h][2] = 'settings'; $h++; /* - $head[$h][0] = dol_buildpath("/bookcal/admin/myobject_extrafields.php", 1); + $head[$h][0] = DOL_URL_ROOT.'/bookcal/admin/myobject_extrafields.php'; $head[$h][1] = $langs->trans("ExtraFields"); $head[$h][2] = 'myobject_extrafields'; $h++; diff --git a/htdocs/bookcal/lib/bookcal_availabilities.lib.php b/htdocs/bookcal/lib/bookcal_availabilities.lib.php index 1fb93187f94..674c0ea70bb 100644 --- a/htdocs/bookcal/lib/bookcal_availabilities.lib.php +++ b/htdocs/bookcal/lib/bookcal_availabilities.lib.php @@ -1,5 +1,6 @@ + * Copyright (C) 2024 Frédéric France * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -41,13 +42,13 @@ function availabilitiesPrepareHead($object) $h = 0; $head = array(); - $head[$h][0] = dol_buildpath("/bookcal/availabilities_card.php", 1).'?id='.$object->id; + $head[$h][0] = DOL_URL_ROOT . '/bookcal/availabilities_card.php?id=' . $object->id; $head[$h][1] = $langs->trans("Card"); $head[$h][2] = 'card'; $h++; if ($showtabofpagecontact) { - $head[$h][0] = dol_buildpath("/bookcal/availabilities_contact.php", 1).'?id='.$object->id; + $head[$h][0] = DOL_URL_ROOT . '/bookcal/availabilities_contact.php?id=' . $object->id; $head[$h][1] = $langs->trans("Contacts"); $head[$h][2] = 'contact'; $h++; @@ -62,10 +63,10 @@ function availabilitiesPrepareHead($object) if (!empty($object->note_public)) { $nbNote++; } - $head[$h][0] = dol_buildpath('/bookcal/availabilities_note.php', 1).'?id='.$object->id; + $head[$h][0] = DOL_URL_ROOT . '/bookcal/availabilities_note.php?id=' . $object->id; $head[$h][1] = $langs->trans('Notes'); if ($nbNote > 0) { - $head[$h][1] .= (!getDolGlobalString('MAIN_OPTIMIZEFORTEXTBROWSER') ? ''.$nbNote.'' : ''); + $head[$h][1] .= (!getDolGlobalString('MAIN_OPTIMIZEFORTEXTBROWSER') ? '' . $nbNote . '' : ''); } $head[$h][2] = 'note'; $h++; @@ -73,22 +74,22 @@ function availabilitiesPrepareHead($object) } if ($showtabofpagedocument) { - require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; - require_once DOL_DOCUMENT_ROOT.'/core/class/link.class.php'; - $upload_dir = $conf->bookcal->dir_output."/availabilities/".dol_sanitizeFileName($object->ref); + require_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php'; + require_once DOL_DOCUMENT_ROOT . '/core/class/link.class.php'; + $upload_dir = $conf->bookcal->dir_output . "/availabilities/" . dol_sanitizeFileName($object->ref); $nbFiles = count(dol_dir_list($upload_dir, 'files', 0, '', '(\.meta|_preview.*\.png)$')); $nbLinks = Link::count($db, $object->element, $object->id); - $head[$h][0] = dol_buildpath("/bookcal/availabilities_document.php", 1).'?id='.$object->id; + $head[$h][0] = DOL_URL_ROOT . '/bookcal/availabilities_document.php?id=' . $object->id; $head[$h][1] = $langs->trans('Documents'); if (($nbFiles + $nbLinks) > 0) { - $head[$h][1] .= ''.($nbFiles + $nbLinks).''; + $head[$h][1] .= '' . ($nbFiles + $nbLinks) . ''; } $head[$h][2] = 'document'; $h++; } if ($showtabofpageagenda) { - $head[$h][0] = dol_buildpath("/bookcal/availabilities_agenda.php", 1).'?id='.$object->id; + $head[$h][0] = DOL_URL_ROOT . '/bookcal/availabilities_agenda.php?id=' . $object->id; $head[$h][1] = $langs->trans("Events"); $head[$h][2] = 'agenda'; $h++; diff --git a/htdocs/bookcal/lib/bookcal_calendar.lib.php b/htdocs/bookcal/lib/bookcal_calendar.lib.php index f586c8845df..d81d0f85d2e 100644 --- a/htdocs/bookcal/lib/bookcal_calendar.lib.php +++ b/htdocs/bookcal/lib/bookcal_calendar.lib.php @@ -1,5 +1,6 @@ + * Copyright (C) 2024 Frédéric France * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -41,13 +42,13 @@ function calendarPrepareHead($object) $h = 0; $head = array(); - $head[$h][0] = dol_buildpath("/bookcal/calendar_card.php", 1).'?id='.$object->id; + $head[$h][0] = DOL_URL_ROOT . '/bookcal/calendar_card.php?id=' . $object->id; $head[$h][1] = $langs->trans("Calendar"); $head[$h][2] = 'card'; $h++; if ($object->status == Calendar::STATUS_VALIDATED) { - $head[$h][0] = dol_buildpath("/bookcal/booking_list.php", 1).'?id='.$object->id; + $head[$h][0] = DOL_URL_ROOT . '/bookcal/booking_list.php?id=' . $object->id; $head[$h][1] = $langs->trans("Bookings"); $head[$h][2] = 'booking'; $h++; @@ -55,7 +56,7 @@ function calendarPrepareHead($object) if ($showtabofpagecontact) { - $head[$h][0] = dol_buildpath("/bookcal/calendar_contact.php", 1).'?id='.$object->id; + $head[$h][0] = DOL_URL_ROOT . '/bookcal/calendar_contact.php?id=' . $object->id; $head[$h][1] = $langs->trans("Contacts"); $head[$h][2] = 'contact'; $h++; @@ -70,10 +71,10 @@ function calendarPrepareHead($object) if (!empty($object->note_public)) { $nbNote++; } - $head[$h][0] = dol_buildpath('/bookcal/calendar_note.php', 1).'?id='.$object->id; + $head[$h][0] = DOL_URL_ROOT . '/bookcal/calendar_note.php?id=' . $object->id; $head[$h][1] = $langs->trans('Notes'); if ($nbNote > 0) { - $head[$h][1] .= (!getDolGlobalInt('MAIN_OPTIMIZEFORTEXTBROWSER') ? ''.$nbNote.'' : ''); + $head[$h][1] .= (!getDolGlobalInt('MAIN_OPTIMIZEFORTEXTBROWSER') ? '' . $nbNote . '' : ''); } $head[$h][2] = 'note'; $h++; @@ -81,22 +82,22 @@ function calendarPrepareHead($object) } if ($showtabofpagedocument) { - require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; - require_once DOL_DOCUMENT_ROOT.'/core/class/link.class.php'; - $upload_dir = $conf->bookcal->dir_output."/calendar/".dol_sanitizeFileName($object->ref); + require_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php'; + require_once DOL_DOCUMENT_ROOT . '/core/class/link.class.php'; + $upload_dir = $conf->bookcal->dir_output . "/calendar/" . dol_sanitizeFileName($object->ref); $nbFiles = count(dol_dir_list($upload_dir, 'files', 0, '', '(\.meta|_preview.*\.png)$')); $nbLinks = Link::count($db, $object->element, $object->id); - $head[$h][0] = dol_buildpath("/bookcal/calendar_document.php", 1).'?id='.$object->id; + $head[$h][0] = DOL_URL_ROOT . '/bookcal/calendar_document.php?id=' . $object->id; $head[$h][1] = $langs->trans('Documents'); if (($nbFiles + $nbLinks) > 0) { - $head[$h][1] .= ''.($nbFiles + $nbLinks).''; + $head[$h][1] .= '' . ($nbFiles + $nbLinks) . ''; } $head[$h][2] = 'document'; $h++; } if ($showtabofpageagenda) { - $head[$h][0] = dol_buildpath("/bookcal/calendar_agenda.php", 1).'?id='.$object->id; + $head[$h][0] = DOL_URL_ROOT . '/bookcal/calendar_agenda.php?id=' . $object->id; $head[$h][1] = $langs->trans("Events"); $head[$h][2] = 'agenda'; $h++; diff --git a/htdocs/bookmarks/bookmarks.lib.php b/htdocs/bookmarks/bookmarks.lib.php index 53e9879e176..711e4fa5a49 100644 --- a/htdocs/bookmarks/bookmarks.lib.php +++ b/htdocs/bookmarks/bookmarks.lib.php @@ -123,7 +123,7 @@ function printDropdownBookmarksList() $searchForm .= ''; } else { - $searchForm .= ''; //$searchForm .= ''; $searchForm .= ''; $searchForm .= '
'; // Visibility / Owner print ''; // Position print ''; print '
'.$langs->trans($mode_info['label']).'
qty_frozen ? ' checked="checked"' : '')) . '>'; + print 'qty_frozen ? ' checked="checked"' : '')) . '>'; print 'disable_stock_change ? ' checked="checked"' : '')) . '">'; + print 'disable_stock_change ? ' checked="checked"' : '')) . '">'; print ''.$langs->trans("ChooseIfANewWindowMustBeOpenedOnClickOnBookmark").'
'.$langs->trans("Visibility").''; print img_picto('', 'user', 'class="pictofixedwidth"'); - print $form->select_dolusers(GETPOSTISSET('userid') ? GETPOST('userid', 'int') : $user->id, 'userid', 0, '', 0, ($user->admin ? '' : array($user->id)), '', 0, 0, 0, '', ($user->admin) ? 1 : 0, '', 'maxwidth300 widthcentpercentminusx'); + print $form->select_dolusers(GETPOSTISSET('userid') ? GETPOSTINT('userid') : $user->id, 'userid', 0, '', 0, ($user->admin ? '' : array($user->id)), '', 0, 0, 0, '', ($user->admin) ? 1 : 0, '', 'maxwidth300 widthcentpercentminusx'); print '
'.$langs->trans("Position").''; - print 'position).'">'; + print 'position).'">'; print '
'; @@ -228,6 +228,7 @@ if ($id > 0 && !preg_match('/^add/i', $action)) { print '
'; print ''; + // Title print ''; + // URL print ''; print ''; + print ''; print ''; print ''; print ''; @@ -2225,6 +2274,7 @@ if (getDolGlobalString('PRODUIT_CUSTOMER_PRICES')) { print ''; print ''; + print ''; // User $userstatic = new User($db); @@ -2257,6 +2307,7 @@ if (getDolGlobalString('PRODUIT_CUSTOMER_PRICES')) { $option = '&search_soc='.$search_soc.'&id='.$object->id; + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder print_barre_liste($langs->trans('PriceByCustomer'), $page, $_SERVER ['PHP_SELF'], $option, $sortfield, $sortorder, '', count($prodcustprice->lines), $nbtotalofrecords, 'title_accountancy.png'); print ''; @@ -2268,7 +2319,7 @@ if (getDolGlobalString('PRODUIT_CUSTOMER_PRICES')) { print '
'; if ($action == 'edit') { print ''; @@ -247,6 +248,7 @@ if ($id > 0 && !preg_match('/^add/i', $action)) { } print '
'; if ($action == 'edit') { print ''; @@ -255,7 +257,7 @@ if ($id > 0 && !preg_match('/^add/i', $action)) { if ($action == 'edit') { print ''; } - print ''; + print ''; if ($action == 'edit') { print 'url).'">'; } else { @@ -284,7 +286,7 @@ if ($id > 0 && !preg_match('/^add/i', $action)) { print '
'.$langs->trans("Visibility").''; if ($action == 'edit' && $user->admin) { print img_picto('', 'user', 'class="pictofixedwidth"'); - print $form->select_dolusers(GETPOSTISSET('userid') ? GETPOST('userid', 'int') : ($object->fk_user ? $object->fk_user : ''), 'userid', 1, '', 0, '', '', 0, 0, 0, '', 0, '', 'maxwidth300 widthcentpercentminusx'); + print $form->select_dolusers(GETPOSTISSET('userid') ? GETPOSTINT('userid') : ($object->fk_user ? $object->fk_user : ''), 'userid', 1, '', 0, '', '', 0, 0, 0, '', 0, '', 'maxwidth300 widthcentpercentminusx'); } else { if ($object->fk_user > 0) { $fuser = new User($db); @@ -299,7 +301,7 @@ if ($id > 0 && !preg_match('/^add/i', $action)) { // Position print '
'.$langs->trans("Position").''; if ($action == 'edit') { - print 'position).'">'; + print 'position).'">'; } else { print $object->position; } diff --git a/htdocs/bookmarks/list.php b/htdocs/bookmarks/list.php index b22c1d294b4..f333df50690 100644 --- a/htdocs/bookmarks/list.php +++ b/htdocs/bookmarks/list.php @@ -31,7 +31,7 @@ $langs->loadLangs(array('bookmarks', 'admin')); // Get Parameters $action = GETPOST('action', 'aZ09'); $massaction = GETPOST('massaction', 'alpha'); -$show_files = GETPOST('show_files', 'int'); +$show_files = GETPOSTINT('show_files'); $confirm = GETPOST('confirm', 'alpha'); $cancel = GETPOST('cancel', 'alpha'); $toselect = GETPOST('toselect', 'array'); @@ -40,14 +40,14 @@ $backtopage = GETPOST('backtopage', 'alpha'); $optioncss = GETPOST('optioncss', 'alpha'); $mode = GETPOST('mode', 'aZ'); -$id = GETPOST("id", 'int'); +$id = GETPOSTINT("id"); $search_title = GETPOST('search_title', 'alpha'); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // If $page is not defined, or '' or -1 or if we click on clear filters $page = 0; @@ -247,7 +247,7 @@ $arrayofmassactions = array( if (!empty($permissiontodelete)) { $arrayofmassactions['predelete'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete"); } -if (GETPOST('nomassaction', 'int') || in_array($massaction, array('presend', 'predelete'))) { +if (GETPOSTINT('nomassaction') || in_array($massaction, array('presend', 'predelete'))) { $arrayofmassactions = array(); } $massactionbutton = $form->selectMassAction('', $arrayofmassactions); @@ -296,7 +296,7 @@ if (!empty($moreforfilter)) { } $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; -$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')); // This also change content of $arrayfields +$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')); // This also change content of $arrayfields $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); print '
'; diff --git a/htdocs/categories/card.php b/htdocs/categories/card.php index 9d66e35f9f1..06510e44aa7 100644 --- a/htdocs/categories/card.php +++ b/htdocs/categories/card.php @@ -37,7 +37,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php'; $langs->load("categories"); // Security check -$socid = (int) GETPOST('socid', 'int'); +$socid = GETPOSTINT('socid'); if (!$user->hasRight('categorie', 'lire')) { accessforbidden(); } @@ -45,7 +45,7 @@ if (!$user->hasRight('categorie', 'lire')) { $action = GETPOST('action', 'alpha'); $cancel = GETPOST('cancel', 'alpha'); $origin = GETPOST('origin', 'alpha'); -$catorigin = (int) GETPOST('catorigin', 'int'); +$catorigin = GETPOSTINT('catorigin'); $type = GETPOST('type', 'aZ09'); $urlfrom = GETPOST('urlfrom', 'alpha'); $backtopage = GETPOST('backtopage', 'alpha'); @@ -53,9 +53,9 @@ $backtopage = GETPOST('backtopage', 'alpha'); $label = (string) GETPOST('label', 'alphanohtml'); $description = (string) GETPOST('description', 'restricthtml'); $color = preg_replace('/[^0-9a-f#]/i', '', (string) GETPOST('color', 'alphanohtml')); -$position = (int) GETPOST('position', 'int'); -$visible = (int) GETPOST('visible', 'int'); -$parent = (int) GETPOST('parent', 'int'); +$position = GETPOSTINT('position'); +$visible = GETPOSTINT('visible'); +$parent = GETPOSTINT('parent'); if ($origin) { if ($type == Categorie::TYPE_PRODUCT) { diff --git a/htdocs/categories/class/api_categories.class.php b/htdocs/categories/class/api_categories.class.php index b938298f2c1..79b5007a241 100644 --- a/htdocs/categories/class/api_categories.class.php +++ b/htdocs/categories/class/api_categories.class.php @@ -218,9 +218,9 @@ class Categories extends DolibarrApi /** * Update category * - * @param int $id Id of category to update - * @param array $request_data Datas - * @return int + * @param int $id Id of category to update + * @param array $request_data Datas + * @return Object Updated object */ public function put($id, $request_data = null) { diff --git a/htdocs/categories/class/categorie.class.php b/htdocs/categories/class/categorie.class.php index 9fb167e4e46..78bfbb8bb4f 100644 --- a/htdocs/categories/class/categorie.class.php +++ b/htdocs/categories/class/categorie.class.php @@ -10,8 +10,9 @@ * Copyright (C) 2015 Marcos García * Copyright (C) 2015 Raphaël Doursenaud * Copyright (C) 2016 Charlie Benke - * Copyright (C) 2018-2023 Frédéric France + * Copyright (C) 2018-2024 Frédéric France * Copyright (C) 2023 Benjamin Falière + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -130,7 +131,7 @@ class Categorie extends CommonObject public $MAP_CAT_TABLE = array( 'customer' => 'societe', 'supplier' => 'fournisseur', - 'bank_account'=> 'account', + 'bank_account' => 'account', ); /** @@ -148,7 +149,7 @@ class Categorie extends CommonObject 'account' => 'Account', // old for bank account 'bank_account' => 'Account', 'project' => 'Project', - 'warehouse'=> 'Entrepot', + 'warehouse' => 'Entrepot', 'actioncomm' => 'ActionComm', 'website_page' => 'WebsitePage', 'ticket' => 'Ticket', @@ -170,7 +171,7 @@ class Categorie extends CommonObject 'account' => 'AccountsCategoriesArea', // old for bank account 'bank_account' => 'AccountsCategoriesArea', 'project' => 'ProjectsCategoriesArea', - 'warehouse'=> 'StocksCategoriesArea', + 'warehouse' => 'StocksCategoriesArea', 'actioncomm' => 'ActioncommCategoriesArea', 'website_page' => 'WebsitePageCategoriesArea' ); @@ -186,7 +187,7 @@ class Categorie extends CommonObject 'contact' => 'socpeople', 'account' => 'bank_account', // old for bank account 'project' => 'projet', - 'warehouse'=> 'entrepot', + 'warehouse' => 'entrepot', 'knowledgemanagement' => 'knowledgemanagement_knowledgerecord' ); @@ -255,7 +256,7 @@ class Categorie extends CommonObject public $type; /** - * @var array Categories table in memory + * @var array Categories table in memory */ public $cats = array(); @@ -270,7 +271,7 @@ class Categorie extends CommonObject public $childs = array(); /** - * @var array multilangs + * @var array{string,array{label:string,description:string,note?:string}} multilangs */ public $multilangs; @@ -422,12 +423,13 @@ class Categorie extends CommonObject * Add category into database * * @param User $user Object user + * @param int $notrigger 1=Does not execute triggers, 0= execute triggers * @return int -1 : SQL error * -2 : new ID unknown * -3 : Invalid category * -4 : category already exists */ - public function create($user) + public function create($user, $notrigger = 0) { global $conf, $langs, $hookmanager; $langs->load('categories'); @@ -514,7 +516,7 @@ class Categorie extends CommonObject } } - if (!$error) { + if (!$error && !$notrigger) { // Call trigger $result = $this->call_trigger('CATEGORY_CREATE', $user); if ($result < 0) { @@ -545,11 +547,12 @@ class Categorie extends CommonObject * Update category * * @param User $user Object user + * @param int $notrigger 1=Does not execute triggers, 0= execute triggers * @return int 1 : OK * -1 : SQL error * -2 : invalid category */ - public function update(User $user) + public function update(User $user, $notrigger = 0) { global $langs; @@ -596,7 +599,7 @@ class Categorie extends CommonObject } } - if (!$error) { + if (!$error && !$notrigger) { // Call trigger $result = $this->call_trigger('CATEGORY_MODIFY', $user); if ($result < 0) { @@ -777,7 +780,7 @@ class Categorie extends CommonObject } // Call trigger - $this->context = array('linkto'=>$obj); // Save object we want to link category to into category instance to provide information to trigger + $this->context = array('linkto' => $obj); // Save object we want to link category to into category instance to provide information to trigger $result = $this->call_trigger('CATEGORY_LINK', $user); if ($result < 0) { $error++; @@ -837,7 +840,7 @@ class Categorie extends CommonObject dol_syslog(get_class($this).'::del_type', LOG_DEBUG); if ($this->db->query($sql)) { // Call trigger - $this->context = array('unlinkoff'=>$obj); // Save object we want to link category to into category instance to provide information to trigger + $this->context = array('unlinkoff' => $obj); // Save object we want to link category to into category instance to provide information to trigger $result = $this->call_trigger('CATEGORY_UNLINK', $user); if ($result < 0) { $error++; @@ -861,18 +864,19 @@ class Categorie extends CommonObject /** * Return list of fetched instance of elements having this category * - * @param string $type Type of category ('customer', 'supplier', 'contact', 'product', 'member', 'knowledge_management', ...) - * @param int $onlyids Return only ids of objects (consume less memory) - * @param int $limit Limit - * @param int $offset Offset - * @param string $sortfield Sort fields - * @param string $sortorder Sort order ('ASC' or 'DESC'); - * @param array $filter Filter array. Example array('field'=>'valueforlike', 'customsql'=>...) - * @param string $filtermode Filter mode (AND or OR) - * @return CommonObject[]|int[]|int Return -1 if KO, array of instance of object if OK + * @param string $type Type of category ('customer', 'supplier', 'contact', 'product', 'member', 'knowledge_management', ...) + * @param int $onlyids Return only ids of objects (consume less memory) + * @param int $limit Limit + * @param int $offset Offset + * @param string $sortfield Sort fields + * @param string $sortorder Sort order ('ASC' or 'DESC'); + * @param string $filter Filter as an Universal Search string. + * Example: '((client:=:1) OR ((client:>=:2) AND (client:<=:3))) AND (client:!=:8) AND (nom:like:'a%')' + * @param string $filtermode No more used + * @return CommonObject[]|int[]|int Return -1 if KO, array of instance of object if OK * @see containsObject() */ - public function getObjectsInCateg($type, $onlyids = 0, $limit = 0, $offset = 0, $sortfield = '', $sortorder = 'ASC', $filter = array(), $filtermode = 'AND') + public function getObjectsInCateg($type, $onlyids = 0, $limit = 0, $offset = 0, $sortfield = '', $sortorder = 'ASC', $filter = '', $filtermode = 'AND') { global $user; @@ -896,20 +900,15 @@ class Categorie extends CommonObject if (($type == 'customer' || $type == 'supplier') && $user->socid > 0) { $sql .= " AND o.rowid = ".((int) $user->socid); } - // Manage filter - $sqlwhere = array(); - if (count($filter) > 0) { - foreach ($filter as $key => $value) { - if ($key == 'o.rowid') { - $sqlwhere[] = $key." = ".((int) $value); - } elseif ($key == 'customsql') { - $sqlwhere[] = $value; - } - } - } - if (count($sqlwhere) > 0) { - $sql .= " AND (".implode(" ".$filtermode." ", $sqlwhere).")"; + + $errormessage = ''; + $sql .= forgeSQLFromUniversalSearchCriteria($filter, $errormessage); + if ($errormessage) { + $this->errors[] = $errormessage; + dol_syslog(__METHOD__.' '.implode(',', $this->errors), LOG_ERR); + return -1; } + $sql .= $this->db->order($sortfield, $sortorder); if ($limit > 0 || $offset > 0) { $sql .= $this->db->plimit($limit + 1, $offset); @@ -971,7 +970,7 @@ class Categorie extends CommonObject * @param string $sortorder Sort order * @param int $limit Limit for list * @param int $page Page number - * @return array|int Array of categories, 0 if no cat, -1 on error + * @return int<-1,0>|array,visible:int,ref_ext:string,multilangs?:array{string,array{label:string,description:string,note?:string}}}> Array of categories, 0 if no cat, -1 on error */ public function getListForItem($id, $type = 'customer', $sortfield = "s.rowid", $sortorder = 'ASC', $limit = 0, $page = 0) { @@ -1011,7 +1010,7 @@ class Categorie extends CommonObject $nbtotalofrecords = $this->db->num_rows($result); if (($page * $limit) > $nbtotalofrecords) { // if total resultset is smaller then paging size (filtering), goto and load page 0 $page = 0; - $offset = 0; + $offset = 0; // @phan-suppress-current-line PhanPluginRedundantAssignment } } @@ -1140,7 +1139,7 @@ class Categorie extends CommonObject * - string (categories ids separated by comma) * - array (list of categories ids) * @param int $include [=0] Removed or 1=Keep only - * @return array|int Array of categories. this->cats and this->motherof are set, -1 on error + * @return int<-1,-1>|array Array of categories. this->cats and this->motherof are set, -1 on error */ public function get_full_arbo($type, $markafterid = 0, $include = 0) { @@ -1223,9 +1222,10 @@ class Categorie extends CommonObject $keyfilter2 = '_'.$keyfiltercatid.'$'; $keyfilter3 = '^'.$keyfiltercatid.'_'; $keyfilter4 = '_'.$keyfiltercatid.'_'; - foreach ($this->cats as $key => $val) { - $test = (preg_match('/'.$keyfilter1.'/', $val['fullpath']) || preg_match('/'.$keyfilter2.'/', $val['fullpath']) - || preg_match('/'.$keyfilter3.'/', $val['fullpath']) || preg_match('/'.$keyfilter4.'/', $val['fullpath'])); + foreach (array_keys($this->cats) as $key) { + $fullpath = $this->cats[$key]['fullpath']; + $test = (preg_match('/'.$keyfilter1.'/', $fullpath) || preg_match('/'.$keyfilter2.'/', $fullpath) + || preg_match('/'.$keyfilter3.'/', $fullpath) || preg_match('/'.$keyfilter4.'/', $fullpath)); if (($test && !$include) || (!$test && $include)) { unset($this->cats[$key]); @@ -1246,7 +1246,7 @@ class Categorie extends CommonObject * * @param int $id_categ id_categ entry to update * @param int $protection Deep counter to avoid infinite loop - * @return int Return integer <0 if KO, >0 if OK + * @return int<-1,1> Return integer <0 if KO, >0 if OK * @see get_full_arbo() */ private function buildPathFromId($id_categ, $protection = 1000) @@ -1707,7 +1707,7 @@ class Categorie extends CommonObject * @param int $save_lastsearch_value -1=Auto, 0=No save of lastsearch_values when clicking, 1=Save lastsearch_values whenclicking * @return string Chaine avec URL */ - public function getNomUrl($withpicto = 0, $option = '', $maxlength = 0, $moreparam = '', $notooltip = 0, $morecss = '', $save_lastsearch_value = '') + public function getNomUrl($withpicto = 0, $option = '', $maxlength = 0, $moreparam = '', $notooltip = 0, $morecss = '', $save_lastsearch_value = 0) { global $conf, $langs, $hookmanager; @@ -1790,7 +1790,7 @@ class Categorie extends CommonObject global $action; $hookmanager->initHooks(array($this->element . 'dao')); - $parameters = array('id'=>$this->id, 'getnomurl' => &$result); + $parameters = array('id' => $this->id, 'getnomurl' => &$result); $reshook = $hookmanager->executeHooks('getNomUrl', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks if ($reshook > 0) { $result = $hookmanager->resPrint; @@ -1851,9 +1851,9 @@ class Categorie extends CommonObject // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** - * Return tableau de toutes les photos de la categorie + * Return an array with all photos inside the directory * - * @param string $dir Repertoire a scanner + * @param string $dir Dir to scan * @param int $nbmax Nombre maximum de photos (0=pas de max) * @return array Tableau de photos */ @@ -1955,10 +1955,11 @@ class Categorie extends CommonObject * Update ou cree les traductions des infos produits * * @param User $user Object user + * @param int $notrigger 1=Does not execute triggers, 0= execute triggers * * @return int Return integer <0 if KO, >0 if OK */ - public function setMultiLangs($user) + public function setMultiLangs(User $user, $notrigger = 0) { global $langs; @@ -2013,10 +2014,12 @@ class Categorie extends CommonObject } // Call trigger - $result = $this->call_trigger('CATEGORY_SET_MULTILANGS', $user); - if ($result < 0) { - $this->error = $this->db->lasterror(); - return -1; + if (!$notrigger) { + $result = $this->call_trigger('CATEGORY_SET_MULTILANGS', $user); + if ($result < 0) { + $this->error = $this->db->lasterror(); + return -1; + } } // End call triggers @@ -2073,7 +2076,7 @@ class Categorie extends CommonObject * Used to build previews or test instances. * id must be 0 if object instance is a specimen. * - * @return void + * @return int */ public function initAsSpecimen() { @@ -2087,6 +2090,8 @@ class Categorie extends CommonObject $this->description = 'This is a description'; $this->socid = 1; $this->type = self::TYPE_PRODUCT; + + return 1; } /** diff --git a/htdocs/categories/edit.php b/htdocs/categories/edit.php index 16965accb55..a3fe18a25c1 100644 --- a/htdocs/categories/edit.php +++ b/htdocs/categories/edit.php @@ -34,20 +34,20 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php'; // Load translation files required by the page $langs->load("categories"); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alphanohtml'); $action = (GETPOST('action', 'aZ09') ? GETPOST('action', 'aZ09') : 'edit'); $confirm = GETPOST('confirm'); $cancel = GETPOST('cancel', 'alpha'); $backtopage = GETPOST('backtopage', 'alpha'); -$socid = (int) GETPOST('socid', 'int'); +$socid = GETPOSTINT('socid'); $label = (string) GETPOST('label', 'alphanohtml'); $description = (string) GETPOST('description', 'restricthtml'); $color = preg_replace('/[^0-9a-f#]/i', '', (string) GETPOST('color', 'alphanohtml')); -$position = (int) GETPOST('position', 'int'); -$visible = (int) GETPOST('visible', 'int'); -$parent = (int) GETPOST('parent', 'int'); +$position = GETPOSTINT('position'); +$visible = GETPOSTINT('visible'); +$parent = GETPOSTINT('parent'); if ($id == "") { dol_print_error(null, 'Missing parameter id'); diff --git a/htdocs/categories/index.php b/htdocs/categories/index.php index eb322bbeb3f..d3eeb6b8e16 100644 --- a/htdocs/categories/index.php +++ b/htdocs/categories/index.php @@ -36,10 +36,10 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; // Load translation files required by the page $langs->load("categories"); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $type = (GETPOST('type', 'aZ09') ? GETPOST('type', 'aZ09') : Categorie::TYPE_PRODUCT); $catname = GETPOST('catname', 'alpha'); -$nosearch = GETPOST('nosearch', 'int'); +$nosearch = GETPOSTINT('nosearch'); $categstatic = new Categorie($db); if (is_numeric($type)) { diff --git a/htdocs/categories/info.php b/htdocs/categories/info.php index aceabfdaffb..59dedc1312e 100644 --- a/htdocs/categories/info.php +++ b/htdocs/categories/info.php @@ -37,7 +37,7 @@ if (!$user->hasRight('categorie', 'lire')) { $langs->loadLangs(array('categories', 'sendings')); $socid = 0; -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $label = GETPOST('label', 'alpha'); // Security check diff --git a/htdocs/categories/photos.php b/htdocs/categories/photos.php index 4757aab5fdd..bd40d078fa1 100644 --- a/htdocs/categories/photos.php +++ b/htdocs/categories/photos.php @@ -37,7 +37,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/categories.lib.php'; $langs->loadlangs(array('categories', 'bills')); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $label = GETPOST('label', 'alpha'); $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm'); diff --git a/htdocs/categories/traduction.php b/htdocs/categories/traduction.php index 9293c62219b..1665c80150d 100644 --- a/htdocs/categories/traduction.php +++ b/htdocs/categories/traduction.php @@ -36,7 +36,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php'; // Load translation files required by the page $langs->loadLangs(array('categories', 'languages')); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $label = GETPOST('label', 'alpha'); $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'alpha'); diff --git a/htdocs/categories/viewcat.php b/htdocs/categories/viewcat.php index a7a13ff64d1..a277b9b03c8 100644 --- a/htdocs/categories/viewcat.php +++ b/htdocs/categories/viewcat.php @@ -37,14 +37,14 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php'; // Load translation files required by the page $langs->loadLangs(array("categories", "compta")); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $label = GETPOST('label', 'alpha'); -$removeelem = GETPOST('removeelem', 'int'); -$elemid = GETPOST('elemid', 'int'); +$removeelem = GETPOSTINT('removeelem'); +$elemid = GETPOSTINT('elemid'); $action = GETPOST('action', 'aZ09') ? GETPOST('action', 'aZ09') : 'view'; // The action 'add', 'create', 'edit', 'update', 'view', ... $massaction = GETPOST('massaction', 'alpha'); // The bulk action (combo box choice into lists) -$show_files = GETPOST('show_files', 'int'); // Show files area generated by bulk actions ? +$show_files = GETPOSTINT('show_files'); // Show files area generated by bulk actions ? $confirm = GETPOST('confirm', 'alpha'); // Result of a confirmation $cancel = GETPOST('cancel', 'alpha'); // We click on a Cancel button $toselect = GETPOST('toselect', 'array'); // Array of ids of elements selected into a list @@ -54,10 +54,10 @@ $optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha') || (empty($toselect) && $massaction === '0')) { $page = 0; } // If $page is not defined, or '' or -1 or if we click on clear filters or if we select empty mass action @@ -102,7 +102,7 @@ if ($confirm == 'no') { } } -$parameters = array(); +$parameters = array('type' => $type, 'id' => $id, 'label' => $label); $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks // Remove element from category if ($id > 0 && $removeelem > 0 && $action == 'unlink') { @@ -409,7 +409,7 @@ if ($cats < 0) { // Define data (format for treeview) $data = array(); - $data[] = array('rowid'=>0, 'fk_menu'=>-1, 'title'=>"racine", 'mainmenu'=>'', 'leftmenu'=>'', 'fk_mainmenu'=>'', 'fk_leftmenu'=>''); + $data[] = array('rowid' => 0, 'fk_menu' => -1, 'title' => "racine", 'mainmenu' => '', 'leftmenu' => '', 'fk_mainmenu' => '', 'fk_leftmenu' => ''); foreach ($fulltree as $key => $val) { $categstatic->id = $val['id']; $categstatic->ref = $val['label']; @@ -539,6 +539,7 @@ if ($type == Categorie::TYPE_PRODUCT) { $nbtotalofrecords = ''; $newcardbutton = dolGetButtonTitle($langs->trans("AddProduct"), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/product/card.php?action=create&categories[]='.$object->id.'&backtopage='.urlencode($_SERVER["PHP_SELF"].'?id='.$object->id), '', $user->rights->societe->creer); + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder print_barre_liste($langs->trans("ProductsAndServices"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'products', 0, $newcardbutton, '', $limit); @@ -626,6 +627,7 @@ if ($type == Categorie::TYPE_CUSTOMER) { $nbtotalofrecords = ''; $newcardbutton = dolGetButtonTitle($langs->trans("AddThirdParty"), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/societe/card.php?action=create&client=3&custcats[]='.$object->id.'&backtopage='.urlencode($_SERVER["PHP_SELF"].'?id='.$object->id), '', $user->rights->societe->creer); + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder print_barre_liste($langs->trans("Customers"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'companies', 0, $newcardbutton, '', $limit); print ''."\n"; @@ -690,7 +692,7 @@ if ($type == Categorie::TYPE_SUPPLIER) { print '
'; print ''; print ''; @@ -711,6 +713,7 @@ if ($type == Categorie::TYPE_SUPPLIER) { $nbtotalofrecords = ''; $newcardbutton = dolGetButtonTitle($langs->trans("AddSupplier"), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/societe/card.php?action=create&fournisseur=1&suppcats[]='.$object->id.'&backtopage='.urlencode($_SERVER["PHP_SELF"].'?id='.$object->id), '', $user->rights->societe->creer); + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder print_barre_liste($langs->trans("Suppliers"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'companies', 0, $newcardbutton, '', $limit); print '
'; print $langs->trans("AddSupplierIntoCategory").'  '; - $filter ='(s.fournisseur:=:1)'; + $filter = '(s.fournisseur:=:1)'; print $form->select_company('', 'elemid', $filter); print '
'."\n"; @@ -798,6 +801,7 @@ if ($type == Categorie::TYPE_MEMBER) { $nbtotalofrecords = ''; $newcardbutton = dolGetButtonTitle($langs->trans("AddMember"), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/adherents/card.php?action=create&memcats[]='.$object->id.'&backtopage='.urlencode($_SERVER["PHP_SELF"].'?id='.$object->id), '', $user->hasRight('adherent', 'creer')); + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder print_barre_liste($langs->trans("Member"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'members', 0, $newcardbutton, '', $limit); print '
'."\n"; @@ -884,6 +888,7 @@ if ($type == Categorie::TYPE_CONTACT) { $nbtotalofrecords = ''; $newcardbutton = dolGetButtonTitle($langs->trans("AddContact"), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/contact/card.php?action=create&contcats[]='.$object->id.'&backtopage='.urlencode($_SERVER["PHP_SELF"].'?id='.$object->id), '', $user->rights->societe->creer); + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder print_barre_liste($langs->trans("Contact"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'contact', 0, $newcardbutton, '', $limit); $objsoc = new Societe($db); @@ -977,6 +982,7 @@ if ($type == Categorie::TYPE_ACCOUNT) { $nbtotalofrecords = ''; $newcardbutton = ''; + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder print_barre_liste($langs->trans("Account"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'bank_account', 0, $newcardbutton, '', $limit); print '
'."\n"; @@ -1065,6 +1071,7 @@ if ($type == Categorie::TYPE_PROJECT) { $nbtotalofrecords = ''; $newcardbutton = ''; + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder print_barre_liste($langs->trans("Project"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'project', 0, $newcardbutton, '', $limit); print '
'."\n"; @@ -1152,6 +1159,7 @@ if ($type == Categorie::TYPE_USER) { $nbtotalofrecords = ''; $newcardbutton = ''; + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder print_barre_liste($langs->trans("Users"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'user', 0, '', '', $limit); print '
'."\n"; @@ -1216,6 +1224,7 @@ if ($type == Categorie::TYPE_WAREHOUSE) { $nbtotalofrecords = ''; $newcardbutton = ''; + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder print_barre_liste($langs->trans("Warehouses"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'stock', 0, $newcardbutton, '', $limit); print '
'."\n"; @@ -1302,6 +1311,7 @@ if ($type == Categorie::TYPE_TICKET) { $nbtotalofrecords = ''; $newcardbutton = ''; + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder print_barre_liste($langs->trans("Ticket"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'ticket', 0, $newcardbutton, '', $limit); @@ -1345,6 +1355,10 @@ if ($type == Categorie::TYPE_TICKET) { } } +// Note that $action and $object may have been modified by some hooks +$parameters = array('type' => $type, 'id' => $id, 'label' => $label); +$reshook = $hookmanager->executeHooks('addMoreCategoriesList', $parameters, $object, $action); + // End of page llxFooter(); $db->close(); diff --git a/htdocs/collab/index.php b/htdocs/collab/index.php index 746cc019a8b..bee5d778dc7 100644 --- a/htdocs/collab/index.php +++ b/htdocs/collab/index.php @@ -41,7 +41,7 @@ $conf->dol_hide_leftmenu = 1; // Force hide of left menu. $error = 0; $website = GETPOST('website', 'alpha'); $page = GETPOST('page', 'alpha'); -$pageid = GETPOST('pageid', 'int'); +$pageid = GETPOSTINT('pageid'); $action = GETPOST('action', 'aZ09'); if (GETPOST('delete')) { diff --git a/htdocs/comm/action/card.php b/htdocs/comm/action/card.php index be75149de77..9b688ac3d3e 100644 --- a/htdocs/comm/action/card.php +++ b/htdocs/comm/action/card.php @@ -9,6 +9,7 @@ * Copyright (C) 2015 Alexandre Spangaro * Copyright (C) 2018-2023 Frédéric France * Copyright (C) 2019 Ferran Marcet + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -58,15 +59,15 @@ $cancel = GETPOST('cancel', 'alpha'); $backtopage = GETPOST('backtopage', 'alpha'); $socpeopleassigned = GETPOST('socpeopleassigned', 'array'); $origin = GETPOST('origin', 'alpha'); -$originid = GETPOST('originid', 'int'); +$originid = GETPOSTINT('originid'); $confirm = GETPOST('confirm', 'alpha'); $fulldayevent = GETPOST('fullday', 'alpha'); -$aphour = GETPOST('aphour', 'int'); -$apmin = GETPOST('apmin', 'int'); -$p2hour = GETPOST('p2hour', 'int'); -$p2min = GETPOST('p2min', 'int'); +$aphour = GETPOSTINT('aphour'); +$apmin = GETPOSTINT('apmin'); +$p2hour = GETPOSTINT('p2hour'); +$p2min = GETPOSTINT('p2min'); $addreminder = GETPOST('addreminder', 'alpha'); $offsetvalue = GETPOSTINT('offsetvalue'); @@ -82,12 +83,12 @@ if ($complete == 'na' || $complete == -2) { if ($fulldayevent) { $tzforfullday = getDolGlobalString('MAIN_STORE_FULL_EVENT_IN_GMT'); // For "full day" events, we must store date in GMT (It must be viewed as same moment everywhere) - $datep = dol_mktime('00', '00', 0, GETPOST("apmonth", 'int'), GETPOST("apday", 'int'), GETPOST("apyear", 'int'), $tzforfullday ? $tzforfullday : 'tzuserrel'); - $datef = dol_mktime('23', '59', '59', GETPOST("p2month", 'int'), GETPOST("p2day", 'int'), GETPOST("p2year", 'int'), $tzforfullday ? $tzforfullday : 'tzuserrel'); + $datep = dol_mktime('00', '00', 0, GETPOSTINT("apmonth"), GETPOSTINT("apday"), GETPOSTINT("apyear"), $tzforfullday ? $tzforfullday : 'tzuserrel'); + $datef = dol_mktime('23', '59', '59', GETPOSTINT("p2month"), GETPOSTINT("p2day"), GETPOSTINT("p2year"), $tzforfullday ? $tzforfullday : 'tzuserrel'); //print $db->idate($datep); exit; } else { - $datep = dol_mktime($aphour, $apmin, 0, GETPOST("apmonth", 'int'), GETPOST("apday", 'int'), GETPOST("apyear", 'int'), 'tzuserrel'); - $datef = dol_mktime($p2hour, $p2min, '59', GETPOST("p2month", 'int'), GETPOST("p2day", 'int'), GETPOST("p2year", 'int'), 'tzuserrel'); + $datep = dol_mktime($aphour, $apmin, 0, GETPOSTINT("apmonth"), GETPOSTINT("apday"), GETPOSTINT("apyear"), 'tzuserrel'); + $datef = dol_mktime($p2hour, $p2min, '59', GETPOSTINT("p2month"), GETPOSTINT("p2day"), GETPOSTINT("p2year"), 'tzuserrel'); } $reg = array(); if (GETPOST('datep')) { @@ -99,8 +100,8 @@ if (GETPOST('datep')) { } // Security check -$socid = GETPOST('socid', 'int'); -$id = GETPOST('id', 'int'); +$socid = GETPOSTINT('socid'); +$id = GETPOSTINT('id'); if ($user->socid && ($socid != $user->socid)) { accessforbidden(); } @@ -145,13 +146,13 @@ if ($reshook < 0) { $TRemindTypes = array(); if (getDolGlobalString('AGENDA_REMINDER_BROWSER')) { - $TRemindTypes['browser'] = array('label'=>$langs->trans('BrowserPush'), 'disabled'=>(!getDolGlobalString('AGENDA_REMINDER_BROWSER') ? 1 : 0)); + $TRemindTypes['browser'] = array('label' => $langs->trans('BrowserPush'), 'disabled' => (!getDolGlobalString('AGENDA_REMINDER_BROWSER') ? 1 : 0)); } if (getDolGlobalString('AGENDA_REMINDER_EMAIL')) { - $TRemindTypes['email'] = array('label'=>$langs->trans('EMail'), 'disabled'=>(!getDolGlobalString('AGENDA_REMINDER_EMAIL') ? 1 : 0)); + $TRemindTypes['email'] = array('label' => $langs->trans('EMail'), 'disabled' => (!getDolGlobalString('AGENDA_REMINDER_EMAIL') ? 1 : 0)); } -$TDurationTypes = array('y'=>$langs->trans('Years'), 'm'=>$langs->trans('Month'), 'w'=>$langs->trans('Weeks'), 'd'=>$langs->trans('Days'), 'h'=>$langs->trans('Hours'), 'i'=>$langs->trans('Minutes')); +$TDurationTypes = array('y' => $langs->trans('Years'), 'm' => $langs->trans('Month'), 'w' => $langs->trans('Weeks'), 'd' => $langs->trans('Days'), 'h' => $langs->trans('Hours'), 'i' => $langs->trans('Minutes')); $result = restrictedArea($user, 'agenda', $object, 'actioncomm&societe', 'myactions|allactions', 'fk_soc', 'id'); @@ -171,7 +172,7 @@ if (empty($reshook) && (GETPOST('removedassigned') || GETPOST('removedassigned') $idtoremove = GETPOST('removedassigned'); if (!empty($_SESSION['assignedtouser'])) { - $tmpassigneduserids = json_decode($_SESSION['assignedtouser'], 1); + $tmpassigneduserids = json_decode($_SESSION['assignedtouser'], true); } else { $tmpassigneduserids = array(); } @@ -198,7 +199,7 @@ if (empty($reshook) && (GETPOST('removedassignedresource') || GETPOST('removedas $idtoremove = GETPOST('removedassignedresource'); if (!empty($_SESSION['assignedtoresource'])) { - $tmpassignedresourceids = json_decode($_SESSION['assignedtoresource'], 1); + $tmpassignedresourceids = json_decode($_SESSION['assignedtoresource'], true); } else { $tmpassignedresourceids = array(); } @@ -229,7 +230,7 @@ if (empty($reshook) && (GETPOST('addassignedtouser') || GETPOST('updateassignedt if (!empty($_SESSION['assignedtouser'])) { $assignedtouser = json_decode($_SESSION['assignedtouser'], true); } - $assignedtouser[GETPOST('assignedtouser')] = array('id'=>GETPOSTINT('assignedtouser'), 'transparency'=>GETPOST('transparency'), 'mandatory'=>1); + $assignedtouser[GETPOST('assignedtouser')] = array('id' => GETPOSTINT('assignedtouser'), 'transparency' => GETPOST('transparency'), 'mandatory' => 1); $_SESSION['assignedtouser'] = json_encode($assignedtouser); } $donotclearsession = 1; @@ -251,7 +252,7 @@ if (empty($reshook) && (GETPOST('addassignedtoresource') || GETPOST('updateassig if (!empty($_SESSION['assignedtoresource'])) { $assignedtoresource = json_decode($_SESSION['assignedtoresource'], true); } - $assignedtoresource[GETPOST('assignedtoresource')] = array('id'=>GETPOSTINT('assignedtoresource'), 'transparency'=>GETPOST('transparency'), 'mandatory'=>1); + $assignedtoresource[GETPOST('assignedtoresource')] = array('id' => GETPOSTINT('assignedtoresource'), 'transparency' => GETPOST('transparency'), 'mandatory' => 1); $_SESSION['assignedtoresource'] = json_encode($assignedtoresource); } $donotclearsession = 1; @@ -269,7 +270,7 @@ if (empty($reshook) && (GETPOST('addassignedtoresource') || GETPOST('updateassig if (empty($reshook) && $action == 'classin' && ($user->hasRight('agenda', 'allactions', 'create') || (($object->authorid == $user->id || $object->userownerid == $user->id) && $user->hasRight('agenda', 'myactions', 'create')))) { //$object->fetch($id); - $object->setProject(GETPOST('projectid', 'int')); + $object->setProject(GETPOSTINT('projectid')); } // Action clone object @@ -283,7 +284,7 @@ if (empty($reshook) && $action == 'confirm_clone' && $confirm == 'yes') { reset($object->socpeopleassigned); $object->contact_id = key($object->socpeopleassigned); } - $result = $object->createFromClone($user, GETPOST('socid', 'int')); + $result = $object->createFromClone($user, GETPOSTINT('socid')); if ($result > 0) { header("Location: ".$_SERVER['PHP_SELF'].'?id='.$result); exit(); @@ -316,17 +317,17 @@ if (empty($reshook) && $action == 'add') { exit; } - $percentage = in_array(GETPOST('status'), array(-1, 100)) ? GETPOST('status') : (in_array($complete, array(-1, 100)) ? $complete : GETPOST("percentage", 'int')); // If status is -1 or 100, percentage is not defined and we must use status + $percentage = in_array(GETPOST('status'), array(-1, 100)) ? GETPOST('status') : (in_array($complete, array(-1, 100)) ? $complete : GETPOSTINT("percentage")); // If status is -1 or 100, percentage is not defined and we must use status // Clean parameters if ($fulldayevent) { $tzforfullday = getDolGlobalString('MAIN_STORE_FULL_EVENT_IN_GMT'); // For "full day" events, we must store date in GMT (It must be viewed as same moment everywhere) - $datep = dol_mktime('00', '00', '00', GETPOST("apmonth", 'int'), GETPOST("apday", 'int'), GETPOST("apyear", 'int'), $tzforfullday ? $tzforfullday : 'tzuserrel'); - $datef = dol_mktime('23', '59', '59', GETPOST("p2month", 'int'), GETPOST("p2day", 'int'), GETPOST("p2year", 'int'), $tzforfullday ? $tzforfullday : 'tzuserrel'); + $datep = dol_mktime('00', '00', '00', GETPOSTINT("apmonth"), GETPOSTINT("apday"), GETPOSTINT("apyear"), $tzforfullday ? $tzforfullday : 'tzuserrel'); + $datef = dol_mktime('23', '59', '59', GETPOSTINT("p2month"), GETPOSTINT("p2day"), GETPOSTINT("p2year"), $tzforfullday ? $tzforfullday : 'tzuserrel'); } else { - $datep = dol_mktime(GETPOST("aphour", 'int'), GETPOST("apmin", 'int'), GETPOST("apsec", 'int'), GETPOST("apmonth", 'int'), GETPOST("apday", 'int'), GETPOST("apyear", 'int'), 'tzuserrel'); - $datef = dol_mktime(GETPOST("p2hour", 'int'), GETPOST("p2min", 'int'), GETPOST("apsec", 'int'), GETPOST("p2month", 'int'), GETPOST("p2day", 'int'), GETPOST("p2year", 'int'), 'tzuserrel'); + $datep = dol_mktime(GETPOSTINT("aphour"), GETPOSTINT("apmin"), GETPOSTINT("apsec"), GETPOSTINT("apmonth"), GETPOSTINT("apday"), GETPOSTINT("apyear"), 'tzuserrel'); + $datef = dol_mktime(GETPOSTINT("p2hour"), GETPOSTINT("p2min"), GETPOSTINT("apsec"), GETPOSTINT("p2month"), GETPOSTINT("p2day"), GETPOSTINT("p2year"), 'tzuserrel'); } // Check parameters @@ -356,7 +357,7 @@ if (empty($reshook) && $action == 'add') { if (!$error) { // Initialisation object actioncomm - $object->priority = GETPOSTISSET("priority") ? GETPOST("priority", "int") : 0; + $object->priority = GETPOSTISSET("priority") ? GETPOSTINT("priority") : 0; $object->fulldayevent = ($fulldayevent ? 1 : 0); $object->location = GETPOST("location", 'alphanohtml'); $object->label = GETPOST('label', 'alphanohtml'); @@ -386,7 +387,7 @@ if (empty($reshook) && $action == 'add') { } } } - $object->fk_project = GETPOSTISSET("projectid") ? GETPOST("projectid", 'int') : 0; + $object->fk_project = GETPOSTISSET("projectid") ? GETPOSTINT("projectid") : 0; $taskid = GETPOSTINT('taskid'); if (!empty($taskid)) { @@ -419,25 +420,19 @@ if (empty($reshook) && $action == 'add') { $object->transparency = $transparency; } - $object->userassigned[$value['id']] = array('id'=>$value['id'], 'transparency'=>$transparency); + $object->userassigned[$value['id']] = array('id' => $value['id'], 'transparency' => $transparency); $i++; } } - if (!$error && getDolGlobalString('AGENDA_ENABLE_DONEBY')) { - if (GETPOST("doneby") > 0) { - $object->userdoneid = GETPOSTINT("doneby"); - } - } - $object->note_private = trim(GETPOST("note", "restricthtml")); if (GETPOSTISSET("contactid")) { $object->contact = $contact; } - if (GETPOST('socid', 'int') > 0) { + if (GETPOSTINT('socid') > 0) { $object->socid = GETPOSTINT('socid'); $object->fetch_thirdparty(); @@ -476,7 +471,8 @@ if (empty($reshook) && $action == 'add') { // Fill array 'array_options' with data from add form $ret = $extrafields->setOptionalsFromPost(null, $object); if ($ret < 0) { - $error++; $donotclearsession = 1; + $error++; + $donotclearsession = 1; $action = 'create'; } @@ -511,7 +507,7 @@ if (empty($reshook) && $action == 'add') { if ($userepeatevent && !empty($selectedrecurrulefreq) && $selectedrecurrulefreq != 'no') { $eventisrecurring = 1; $object->recurid = dol_print_date(dol_now('gmt'), 'dayhourlog', 'gmt'); - $object->recurdateend = dol_mktime(0, 0, 0, GETPOST('limitmonth', 'int'), GETPOST('limitday', 'int'), GETPOST('limityear', 'int')); + $object->recurdateend = dol_mktime(0, 0, 0, GETPOSTINT('limitmonth'), GETPOSTINT('limitday'), GETPOSTINT('limityear')); } else { unset($object->recurid); unset($object->recurrule); @@ -609,24 +605,25 @@ if (empty($reshook) && $action == 'add') { if ($eventisrecurring) { // We set first date of recurrence and offsets if ($selectedrecurrulefreq == 'WEEKLY' && !empty($selectedrecurrulebyday)) { - $firstdatearray = dol_get_first_day_week(GETPOST("apday", 'int'), GETPOST("apmonth", 'int'), GETPOST("apyear", 'int')); - $datep = dol_mktime($fulldayevent ? '00' : GETPOST("aphour", 'int'), $fulldayevent ? '00' : GETPOST("apmin", 'int'), $fulldayevent ? '00' : GETPOST("apsec", 'int'), $firstdatearray['month'], $firstdatearray['first_day'], $firstdatearray['year'], $tzforfullday ? $tzforfullday : 'tzuserrel'); + $firstdatearray = dol_get_first_day_week(GETPOSTINT("apday"), GETPOSTINT("apmonth"), GETPOSTINT("apyear")); + $datep = dol_mktime($fulldayevent ? '00' : GETPOSTINT("aphour"), $fulldayevent ? '00' : GETPOSTINT("apmin"), $fulldayevent ? '00' : GETPOSTINT("apsec"), $firstdatearray['month'], $firstdatearray['first_day'], $firstdatearray['year'], $tzforfullday ? $tzforfullday : 'tzuserrel'); $datep = dol_time_plus_duree($datep, $selectedrecurrulebyday + 6, 'd');//We begin the week after $dayoffset = 7; $monthoffset = 0; } elseif ($selectedrecurrulefreq == 'MONTHLY' && !empty($selectedrecurrulebymonthday)) { $firstday = $selectedrecurrulebymonthday; - $firstmonth = GETPOST("apday") > $selectedrecurrulebymonthday ? GETPOST("apmonth", 'int') + 1 : GETPOST("apmonth", 'int');//We begin the week after - $datep = dol_mktime($fulldayevent ? '00' : GETPOST("aphour", 'int'), $fulldayevent ? '00' : GETPOST("apmin", 'int'), $fulldayevent ? '00' : GETPOST("apsec", 'int'), $firstmonth, $firstday, GETPOST("apyear", 'int'), $tzforfullday ? $tzforfullday : 'tzuserrel'); + $firstmonth = GETPOST("apday") > $selectedrecurrulebymonthday ? GETPOSTINT("apmonth") + 1 : GETPOSTINT("apmonth");//We begin the week after + $datep = dol_mktime($fulldayevent ? '00' : GETPOSTINT("aphour"), $fulldayevent ? '00' : GETPOSTINT("apmin"), $fulldayevent ? '00' : GETPOSTINT("apsec"), $firstmonth, $firstday, GETPOSTINT("apyear"), $tzforfullday ? $tzforfullday : 'tzuserrel'); $dayoffset = 0; $monthoffset = 1; } else { $error++; } // End date - $repeateventlimitdate = dol_mktime(23, 59, 59, GETPOSTISSET("limitmonth") ? GETPOST("limitmonth", 'int') : 1, GETPOSTISSET("limitday") ? GETPOST("limitday", 'int') : 1, GETPOSTISSET("limityear") && GETPOST("limityear", 'int') < 2100 ? GETPOST("limityear", 'int') : 2100, $tzforfullday ? $tzforfullday : 'tzuserrel'); + $repeateventlimitdate = dol_mktime(23, 59, 59, GETPOSTISSET("limitmonth") ? GETPOSTINT("limitmonth") : 1, GETPOSTISSET("limitday") ? GETPOSTINT("limitday") : 1, GETPOSTISSET("limityear") && GETPOSTINT("limityear") < 2100 ? GETPOSTINT("limityear") : 2100, $tzforfullday ? $tzforfullday : 'tzuserrel'); // Set date of end of event $deltatime = num_between_day($object->datep, $datep); + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder $datef = dol_time_plus_duree($datef, $deltatime, 'd'); while ($datep <= $repeateventlimitdate && !$error) { @@ -743,11 +740,11 @@ if (empty($reshook) && $action == 'add') { if (empty($reshook) && $action == 'update') { if (empty($cancel)) { $fulldayevent = GETPOST('fullday'); - $aphour = GETPOST('aphour', 'int'); - $apmin = GETPOST('apmin', 'int'); - $p2hour = GETPOST('p2hour', 'int'); - $p2min = GETPOST('p2min', 'int'); - $percentage = in_array(GETPOST('status'), array(-1, 100)) ? GETPOST('status') : (in_array($complete, array(-1, 100)) ? $complete : GETPOST("percentage", 'int')); // If status is -1 or 100, percentage is not defined and we must use status + $aphour = GETPOSTINT('aphour'); + $apmin = GETPOSTINT('apmin'); + $p2hour = GETPOSTINT('p2hour'); + $p2min = GETPOSTINT('p2min'); + $percentage = in_array(GETPOST('status'), array(-1, 100)) ? GETPOST('status') : (in_array($complete, array(-1, 100)) ? $complete : GETPOSTINT("percentage")); // If status is -1 or 100, percentage is not defined and we must use status // Clean parameters if ($aphour == -1) { @@ -772,11 +769,11 @@ if (empty($reshook) && $action == 'update') { if ($fulldayevent) { $tzforfullday = getDolGlobalString('MAIN_STORE_FULL_EVENT_IN_GMT'); // For "full day" events, we must store date in GMT (It must be viewed as same moment everywhere) - $datep = dol_mktime($fulldayevent ? '00' : GETPOST("aphour", 'int'), $fulldayevent ? '00' : GETPOST("apmin", 'int'), $fulldayevent ? '00' : GETPOST("apsec", 'int'), GETPOST("apmonth", 'int'), GETPOST("apday", 'int'), GETPOST("apyear", 'int'), $tzforfullday ? $tzforfullday : 'tzuserrel'); - $datef = dol_mktime($fulldayevent ? '23' : GETPOST("p2hour", 'int'), $fulldayevent ? '59' : GETPOST("p2min", 'int'), $fulldayevent ? '59' : GETPOST("apsec", 'int'), GETPOST("p2month", 'int'), GETPOST("p2day", 'int'), GETPOST("p2year", 'int'), $tzforfullday ? $tzforfullday : 'tzuserrel'); + $datep = dol_mktime($fulldayevent ? '00' : GETPOSTINT("aphour"), $fulldayevent ? '00' : GETPOSTINT("apmin"), $fulldayevent ? '00' : GETPOSTINT("apsec"), GETPOSTINT("apmonth"), GETPOSTINT("apday"), GETPOSTINT("apyear"), $tzforfullday ? $tzforfullday : 'tzuserrel'); + $datef = dol_mktime($fulldayevent ? '23' : GETPOSTINT("p2hour"), $fulldayevent ? '59' : GETPOSTINT("p2min"), $fulldayevent ? '59' : GETPOSTINT("apsec"), GETPOSTINT("p2month"), GETPOSTINT("p2day"), GETPOSTINT("p2year"), $tzforfullday ? $tzforfullday : 'tzuserrel'); } else { - $datep = dol_mktime($fulldayevent ? '00' : GETPOST("aphour", 'int'), $fulldayevent ? '00' : GETPOST("apmin", 'int'), $fulldayevent ? '00' : GETPOST("apsec", 'int'), GETPOST("apmonth", 'int'), GETPOST("apday", 'int'), GETPOST("apyear", 'int'), 'tzuserrel'); - $datef = dol_mktime($fulldayevent ? '23' : GETPOST("p2hour", 'int'), $fulldayevent ? '59' : GETPOST("p2min", 'int'), $fulldayevent ? '59' : GETPOST("apsec", 'int'), GETPOST("p2month", 'int'), GETPOST("p2day", 'int'), GETPOST("p2year", 'int'), 'tzuserrel'); + $datep = dol_mktime($fulldayevent ? '00' : GETPOSTINT("aphour"), $fulldayevent ? '00' : GETPOSTINT("apmin"), $fulldayevent ? '00' : GETPOSTINT("apsec"), GETPOSTINT("apmonth"), GETPOSTINT("apday"), GETPOSTINT("apyear"), 'tzuserrel'); + $datef = dol_mktime($fulldayevent ? '23' : GETPOSTINT("p2hour"), $fulldayevent ? '59' : GETPOSTINT("p2min"), $fulldayevent ? '59' : GETPOSTINT("apsec"), GETPOSTINT("p2month"), GETPOSTINT("p2day"), GETPOSTINT("p2year"), 'tzuserrel'); } if ($object->elementtype == 'ticket') { // code should be TICKET_MSG, TICKET_MSG_PRIVATE, TICKET_MSG_SENTBYMAIL, TICKET_MSG_PRIVATE_SENTBYMAIL @@ -805,21 +802,21 @@ if (empty($reshook) && $action == 'update') { $object->datep = $datep; $object->datef = $datef; $object->percentage = $percentage; - $object->priority = GETPOST("priority", "int"); + $object->priority = GETPOSTINT("priority"); $object->fulldayevent = GETPOST("fullday") ? 1 : 0; $object->location = GETPOST('location', "alphanohtml"); - $object->socid = GETPOST("socid", "int"); + $object->socid = GETPOSTINT("socid"); $socpeopleassigned = GETPOST("socpeopleassigned", 'array'); $object->socpeopleassigned = array(); foreach ($socpeopleassigned as $cid) { $object->socpeopleassigned[$cid] = array('id' => $cid); } - $object->contact_id = GETPOST("contactid", 'int'); + $object->contact_id = GETPOSTINT("contactid"); if (empty($object->contact_id) && !empty($object->socpeopleassigned)) { reset($object->socpeopleassigned); $object->contact_id = key($object->socpeopleassigned); } - $object->fk_project = GETPOST("projectid", 'int'); + $object->fk_project = GETPOSTINT("projectid"); $object->note_private = trim(GETPOST("note", "restricthtml")); if (GETPOST("elementtype", 'alpha')) { @@ -830,7 +827,7 @@ if (empty($reshook) && $action == 'update') { $hasPermissionOnLinkedObject = 1; } if ($hasPermissionOnLinkedObject) { - $object->fk_element = GETPOST("fk_element", 'int'); + $object->fk_element = GETPOSTINT("fk_element"); $object->elementtype = GETPOST("elementtype", 'alpha'); } } @@ -857,7 +854,7 @@ if (empty($reshook) && $action == 'update') { } else { $assignedtouser = (!empty($object->userownerid) && $object->userownerid > 0 ? $object->userownerid : 0); if ($assignedtouser) { - $listofuserid[$assignedtouser] = array('id'=>$assignedtouser, 'mandatory'=>0, 'transparency'=>($user->id == $assignedtouser ? $transparency : '')); // Owner first + $listofuserid[$assignedtouser] = array('id' => $assignedtouser, 'mandatory' => 0, 'transparency' => ($user->id == $assignedtouser ? $transparency : '')); // Owner first } } $object->userassigned = array(); @@ -867,19 +864,13 @@ if (empty($reshook) && $action == 'update') { if ($i == 0) { $object->userownerid = $val['id']; } - $object->userassigned[$val['id']] = array('id'=>$val['id'], 'mandatory'=>0, 'transparency'=>($user->id == $val['id'] ? $transparency : '')); + $object->userassigned[$val['id']] = array('id' => $val['id'], 'mandatory' => 0, 'transparency' => ($user->id == $val['id'] ? $transparency : '')); $i++; } $object->transparency = $transparency; // We set transparency on event (even if we can also store it on each user, standard says this property is for event) // TODO store also transparency on owner user - if (getDolGlobalString('AGENDA_ENABLE_DONEBY')) { - if (GETPOST("doneby")) { - $object->userdoneid = GETPOST("doneby", "int"); - } - } - // Check parameters if (GETPOSTISSET('actioncode') && !GETPOST('actioncode', 'aZ09')) { // actioncode is '0' $error++; @@ -1049,7 +1040,7 @@ if (empty($reshook) && $action == 'confirm_delete' && GETPOST("confirm") == 'yes if ($user->hasRight('agenda', 'myactions', 'delete') || $user->hasRight('agenda', 'allactions', 'delete')) { - $result = $object->delete(); + $result = $object->delete($user); if ($result >= 0) { header("Location: index.php"); @@ -1180,9 +1171,9 @@ $form = new Form($db); $formproject = new FormProjets($db); $arrayrecurrulefreq = array( - 'no'=>$langs->trans("OnceOnly"), - 'MONTHLY'=>$langs->trans("EveryMonth"), - 'WEEKLY'=>$langs->trans("EveryWeek") + 'no' => $langs->trans("OnceOnly"), + 'MONTHLY' => $langs->trans("EveryMonth"), + 'WEEKLY' => $langs->trans("EveryWeek") // 'DAILY'=>$langs->trans("EveryDay") ); @@ -1227,16 +1218,6 @@ if ($action == 'create') { setdatefields(); }); - $("#selectcomplete").change(function() { - console.log("we change the complete status - set the doneby"); - if ($("#selectcomplete").val() == 100) { - if ($("#doneby").val() <= 0) $("#doneby").val(\''.((int) $user->id).'\'); - } - if ($("#selectcomplete").val() == 0) { - $("#doneby").val(-1); - } - }); - $("#actioncode").change(function() { if ($("#actioncode").val() == \'AC_RDV\') $("#dateend").addClass("fieldrequired"); else $("#dateend").removeClass("fieldrequired"); @@ -1386,12 +1367,12 @@ if ($action == 'create') { print ''; $datep = ($datep ? $datep : (is_null($object->datep) ? '' : $object->datep)); - if (GETPOST('datep', 'int', 1)) { - $datep = dol_stringtotime(GETPOST('datep', 'int', 1), 'tzuserrel'); + if (GETPOSTINT('datep', 1)) { + $datep = dol_stringtotime(GETPOSTINT('datep', 1), 'tzuserrel'); } $datef = ($datef ? $datef : $object->datef); - if (GETPOST('datef', 'int', 1)) { - $datef = dol_stringtotime(GETPOST('datef', 'int', 1), 'tzuserrel'); + if (GETPOSTINT('datef', 1)) { + $datef = dol_stringtotime(GETPOSTINT('datef', 1), 'tzuserrel'); } if (empty($datef) && !empty($datep)) { if (GETPOST("actioncode", 'aZ09') == 'AC_RDV' || !getDolGlobalString('AGENDA_USE_EVENT_TYPE_DEFAULT')) { @@ -1408,11 +1389,7 @@ if ($action == 'create') { print $form->selectDate($datep, 'ap', 1, 1, 1, "action", 1, 2, 0, 'fulldaystart', '', '', '', 1, '', '', 'tzuserrel'); } print '     -     '; - if (GETPOST("afaire") == 1) { - print $form->selectDate($datef, 'p2', 1, 1, 1, "action", 1, 2, 0, 'fulldayend', '', '', '', 1, '', '', 'tzuserrel'); - } else { - print $form->selectDate($datef, 'p2', 1, 1, 1, "action", 1, 2, 0, 'fulldayend', '', '', '', 1, '', '', 'tzuserrel'); - } + print $form->selectDate($datef, 'p2', 1, 1, 1, "action", 1, 2, 0, 'fulldayend', '', '', '', 1, '', '', 'tzuserrel'); print ''; print ''; @@ -1426,7 +1403,7 @@ if ($action == 'create') { if (empty($donotclearsession)) { $assignedtouser = GETPOST("assignedtouser") ? GETPOST("assignedtouser") : (!empty($object->userownerid) && $object->userownerid > 0 ? $object->userownerid : $user->id); if ($assignedtouser) { - $listofuserid[$assignedtouser] = array('id'=>$assignedtouser, 'mandatory'=>0); // Owner first + $listofuserid[$assignedtouser] = array('id' => $assignedtouser, 'mandatory' => 0); // Owner first } //$listofuserid[$user->id] = array('id'=>$user->id, 'mandatory'=>0, 'transparency'=>(GETPOSTISSET('transparency') ? GETPOST('transparency', 'alpha') : 1)); // 1 by default at first init $listofuserid[$assignedtouser]['transparency'] = (GETPOSTISSET('transparency') ? GETPOST('transparency', 'alpha') : 1); // 1 by default at first init @@ -1445,19 +1422,12 @@ if ($action == 'create') { print ''; print ''; - // Done by - if (getDolGlobalString('AGENDA_ENABLE_DONEBY')) { - print ''; - } - // Location if (!getDolGlobalString('AGENDA_DISABLE_LOCATION')) { print ''; } - if (isModEnabled('categorie')) { + if (isModEnabled('category')) { // Categories print ''; print ''; @@ -1632,7 +1602,7 @@ if ($action == 'create') { // Priority if (getDolGlobalString('AGENDA_SUPPORT_PRIORITY_IN_EVENTS')) { print ''; } @@ -1666,7 +1636,7 @@ if ($action == 'create') { //Reminder print ''; @@ -1744,10 +1714,10 @@ if ($id > 0) { $result5 = $object->fetch_optionals(); if ($listUserAssignedUpdated || $donotclearsession) { - $percentage = in_array(GETPOST('status'), array(-1, 100)) ? GETPOST('status') : (in_array($complete, array(-1, 100)) ? $complete : GETPOST("percentage", 'int')); // If status is -1 or 100, percentage is not defined and we must use status + $percentage = in_array(GETPOST('status'), array(-1, 100)) ? GETPOST('status') : (in_array($complete, array(-1, 100)) ? $complete : GETPOSTINT("percentage")); // If status is -1 or 100, percentage is not defined and we must use status - $datep = dol_mktime($fulldayevent ? '00' : $aphour, $fulldayevent ? '00' : $apmin, 0, GETPOST("apmonth", 'int'), GETPOST("apday", 'int'), GETPOST("apyear", 'int'), 'tzuserrel'); - $datef = dol_mktime($fulldayevent ? '23' : $p2hour, $fulldayevent ? '59' : $p2min, $fulldayevent ? '59' : '0', GETPOST("p2month", 'int'), GETPOST("p2day", 'int'), GETPOST("p2year", 'int'), 'tzuserrel'); + $datep = dol_mktime($fulldayevent ? '00' : $aphour, $fulldayevent ? '00' : $apmin, 0, GETPOSTINT("apmonth"), GETPOSTINT("apday"), GETPOSTINT("apyear"), 'tzuserrel'); + $datef = dol_mktime($fulldayevent ? '23' : $p2hour, $fulldayevent ? '59' : $p2min, $fulldayevent ? '59' : '0', GETPOSTINT("p2month"), GETPOSTINT("p2day"), GETPOSTINT("p2year"), 'tzuserrel'); $object->type_id = dol_getIdFromCode($db, GETPOST("actioncode", 'aZ09'), 'c_actioncomm'); $object->label = GETPOST("label", "alphanohtml"); @@ -1757,13 +1727,13 @@ if ($id > 0) { $object->priority = GETPOST("priority", "alphanohtml"); $object->fulldayevent = GETPOST("fullday") ? 1 : 0; $object->location = GETPOST('location', "alphanohtml"); - $object->socid = GETPOST("socid", "int"); + $object->socid = GETPOSTINT("socid"); $socpeopleassigned = GETPOST("socpeopleassigned", 'array'); foreach ($socpeopleassigned as $tmpid) { $object->socpeopleassigned[$id] = array('id' => $tmpid); } - $object->contact_id = GETPOST("contactid", 'int'); - $object->fk_project = GETPOST("projectid", 'int'); + $object->contact_id = GETPOSTINT("contactid"); + $object->fk_project = GETPOSTINT("projectid"); $object->note_private = GETPOST("note", 'restricthtml'); } @@ -1797,7 +1767,7 @@ if ($id > 0) { // Confirmation suppression action if ($action == 'delete') { - print $form->formconfirm("card.php?id=".urlencode($id), $langs->trans("DeleteAction"), $langs->trans("ConfirmDeleteAction"), "confirm_delete", '', '', 1); + print $form->formconfirm("card.php?id=".urlencode((string) ($id)), $langs->trans("DeleteAction"), $langs->trans("ConfirmDeleteAction"), "confirm_delete", '', '', 1); } if ($action == 'edit') { @@ -1946,21 +1916,9 @@ if ($id > 0) { */ print ''; print ''; @@ -1970,12 +1928,12 @@ if ($id > 0) { if (empty($donotclearsession)) { if ($object->userownerid > 0) { $listofuserid[$object->userownerid] = array( - 'id'=>$object->userownerid, - 'type'=>'user', + 'id' => $object->userownerid, + 'type' => 'user', //'transparency'=>$object->userassigned[$user->id]['transparency'], - 'transparency'=>$object->transparency, // Force transparency on ownerfrom event - 'answer_status'=>$object->userassigned[$object->userownerid]['answer_status'], - 'mandatory'=>$object->userassigned[$object->userownerid]['mandatory'] + 'transparency' => $object->transparency, // Force transparency on ownerfrom event + 'answer_status' => $object->userassigned[$object->userownerid]['answer_status'], + 'mandatory' => $object->userassigned[$object->userownerid]['mandatory'] ); } if (!empty($object->userassigned)) { // Now concat assigned users @@ -2008,13 +1966,6 @@ if ($id > 0) { }*/ print ''; - // Realised by - if (getDolGlobalString('AGENDA_ENABLE_DONEBY')) { - print ''; - } - // Location if (!getDolGlobalString('AGENDA_DISABLE_LOCATION')) { print ''; @@ -2022,12 +1973,12 @@ if ($id > 0) { // Status print ''; // Tags-Categories - if (isModEnabled('categorie')) { + if (isModEnabled('category')) { print ''; - // Done by - if (getDolGlobalString('AGENDA_ENABLE_DONEBY')) { - print ''; - } - // Categories - if (isModEnabled('categorie')) { + if (isModEnabled('category')) { print '"; diff --git a/htdocs/comm/action/class/actioncomm.class.php b/htdocs/comm/action/class/actioncomm.class.php index 7bfbe08af9c..f4f77bcaa9d 100644 --- a/htdocs/comm/action/class/actioncomm.class.php +++ b/htdocs/comm/action/class/actioncomm.class.php @@ -5,7 +5,9 @@ * Copyright (C) 2011-2017 Juanjo Menent * Copyright (C) 2015 Marcos García * Copyright (C) 2018 Nicolas ZABOURI - * Copyright (C) 2018-2023 Frédéric France + * Copyright (C) 2018-2024 Frédéric France + * Copyright (C) 2024 MDW + * Copyright (C) 2024 William Mead * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -75,7 +77,7 @@ class ActionComm extends CommonObject public $id; /** - * @var int Id of the event. Use $id as possible + * @var string Id of the event. Use $id as possible */ public $ref; @@ -230,7 +232,7 @@ class ActionComm extends CommonObject public $priority; /** - * @var int[] Array of user ids + * @var array Array of users */ public $userassigned = array(); @@ -239,11 +241,6 @@ class ActionComm extends CommonObject */ public $userownerid; - /** - * @var int Id of user that has done the event. Used only if AGENDA_ENABLE_DONEBY is set. - */ - public $userdoneid; - /** * @var int[] Array of contact ids */ @@ -311,7 +308,7 @@ class ActionComm extends CommonObject public $icalname; /** - * @var string Ical color + * @var int<0,3> Ical color */ public $icalcolor; @@ -488,15 +485,14 @@ class ActionComm extends CommonObject if (!is_array($this->userassigned) && !empty($this->userassigned)) { // For backward compatibility when userassigned was an int instead of an array $tmpid = (int) $this->userassigned; $this->userassigned = array(); - $this->userassigned[$tmpid] = array('id'=>$tmpid, 'transparency'=>$this->transparency); + $this->userassigned[$tmpid] = array('id' => $tmpid, 'transparency' => $this->transparency); } $userownerid = $this->userownerid; - $userdoneid = $this->userdoneid; // Be sure assigned user is defined as an array of array('id'=>,'mandatory'=>,...). if (empty($this->userassigned) || count($this->userassigned) == 0 || !is_array($this->userassigned)) { - $this->userassigned = array($userownerid=>array('id'=>$userownerid, 'transparency'=>$this->transparency)); + $this->userassigned = array($userownerid => array('id' => $userownerid, 'transparency' => $this->transparency)); } if (!$this->type_id || !$this->type_code) { @@ -542,7 +538,6 @@ class ActionComm extends CommonObject $sql .= "fk_contact,"; $sql .= "fk_user_author,"; $sql .= "fk_user_action,"; - $sql .= "fk_user_done,"; $sql .= "label,percent,priority,fulldayevent,location,"; $sql .= "transparency,"; $sql .= "fk_element,"; @@ -581,7 +576,6 @@ class ActionComm extends CommonObject $sql .= ((isset($this->contact_id) && $this->contact_id > 0) ? ((int) $this->contact_id) : "null").", "; // deprecated, use ->socpeopleassigned $sql .= (isset($user->id) && $user->id > 0 ? $user->id : "null").", "; $sql .= ($userownerid > 0 ? $userownerid : "null").", "; - $sql .= ($userdoneid > 0 ? $userdoneid : "null").", "; $sql .= "'".$this->db->escape($this->label)."', "; $sql .= "'".$this->db->escape($this->percentage)."', "; $sql .= "'".$this->db->escape($this->priority)."', "; @@ -614,7 +608,8 @@ class ActionComm extends CommonObject dol_syslog(get_class($this)."::add", LOG_DEBUG); $resql = $this->db->query($sql); if ($resql) { - $this->ref = $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."actioncomm", "id"); + $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."actioncomm", "id"); + $this->ref = (string) $this->id; $sql = "UPDATE ".MAIN_DB_PREFIX."actioncomm SET ref='".$this->db->escape($this->ref)."' WHERE id=".$this->id; $resql = $this->db->query($sql); if (!$resql) { @@ -629,7 +624,7 @@ class ActionComm extends CommonObject foreach ($this->userassigned as $key => $val) { // Common value with new behavior is to have $val = array('id'=>iduser, 'transparency'=>0|1) and $this->userassigned is an array of iduser => $val. if (!is_array($val)) { // For backward compatibility when $val='id'. - $val = array('id'=>$val); + $val = array('id' => $val); } if ($val['id'] > 0) { @@ -748,7 +743,7 @@ class ActionComm extends CommonObject if (!$error) { // Hook of thirdparty module if (is_object($hookmanager)) { - $parameters = array('objFrom'=>$objFrom); + $parameters = array('objFrom' => $objFrom); $action = ''; $reshook = $hookmanager->executeHooks('createFrom', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { @@ -809,7 +804,7 @@ class ActionComm extends CommonObject $sql .= " a.fk_soc,"; $sql .= " a.fk_project,"; $sql .= " a.fk_user_author, a.fk_user_mod,"; - $sql .= " a.fk_user_action, a.fk_user_done,"; + $sql .= " a.fk_user_action,"; $sql .= " a.fk_contact, a.percent as percentage,"; $sql .= " a.fk_element as elementid, a.elementtype,"; $sql .= " a.priority, a.fulldayevent, a.location, a.transparency,"; @@ -903,14 +898,14 @@ class ActionComm extends CommonObject $this->status = $obj->status; //email information - $this->email_msgid=$obj->email_msgid; - $this->email_from=$obj->email_from; - $this->email_sender=$obj->email_sender; - $this->email_to=$obj->email_to; - $this->email_tocc=$obj->email_tocc; - $this->email_tobcc=$obj->email_tobcc; - $this->email_subject=$obj->email_subject; - $this->errors_to=$obj->errors_to; + $this->email_msgid = $obj->email_msgid; + $this->email_from = $obj->email_from; + $this->email_sender = $obj->email_sender; + $this->email_to = $obj->email_to; + $this->email_tocc = $obj->email_tocc; + $this->email_tobcc = $obj->email_tobcc; + $this->email_subject = $obj->email_subject; + $this->errors_to = $obj->errors_to; $this->fetch_optionals(); @@ -946,20 +941,20 @@ class ActionComm extends CommonObject if ($resql) { // If owner is known, we must but id first into list if ($this->userownerid > 0) { - $this->userassigned[$this->userownerid] = array('id'=>$this->userownerid); // Set first so will be first into list. + $this->userassigned[$this->userownerid] = array('id' => $this->userownerid); // Set first so will be first into list. } while ($obj = $this->db->fetch_object($resql)) { if ($obj->fk_element > 0) { switch ($obj->element_type) { case 'user': - $this->userassigned[$obj->fk_element] = array('id'=>$obj->fk_element, 'mandatory'=>$obj->mandatory, 'answer_status'=>$obj->answer_status, 'transparency'=>$obj->transparency); + $this->userassigned[$obj->fk_element] = array('id' => $obj->fk_element, 'mandatory' => $obj->mandatory, 'answer_status' => $obj->answer_status, 'transparency' => $obj->transparency); if (empty($this->userownerid)) { $this->userownerid = $obj->fk_element; // If not defined (should not happened, we fix this) } break; case 'socpeople': - $this->socpeopleassigned[$obj->fk_element] = array('id'=>$obj->fk_element, 'mandatory'=>$obj->mandatory, 'answer_status'=>$obj->answer_status, 'transparency'=>$obj->transparency); + $this->socpeopleassigned[$obj->fk_element] = array('id' => $obj->fk_element, 'mandatory' => $obj->mandatory, 'answer_status' => $obj->answer_status, 'transparency' => $obj->transparency); break; } } @@ -993,15 +988,15 @@ class ActionComm extends CommonObject // If owner is known, we must but id first into list if ($this->userownerid > 0) { // Set first so will be first into list. - $this->userassigned[$this->userownerid] = array('id'=>$this->userownerid); + $this->userassigned[$this->userownerid] = array('id' => $this->userownerid); } while ($obj = $this->db->fetch_object($resql2)) { if ($obj->fk_element > 0) { - $this->userassigned[$obj->fk_element] = array('id'=>$obj->fk_element, - 'mandatory'=>$obj->mandatory, - 'answer_status'=>$obj->answer_status, - 'transparency'=>$obj->transparency); + $this->userassigned[$obj->fk_element] = array('id' => $obj->fk_element, + 'mandatory' => $obj->mandatory, + 'answer_status' => $obj->answer_status, + 'transparency' => $obj->transparency); } if ($override === true) { @@ -1021,15 +1016,13 @@ class ActionComm extends CommonObject /** * Delete event from database - * @TODO Add User $user as first param * + * @param User $user User making the delete * @param int $notrigger 1 = disable triggers, 0 = enable triggers * @return int Return integer <0 if KO, >0 if OK */ - public function delete($notrigger = 0) + public function delete($user, $notrigger = 0) { - global $user; - $error = 0; dol_syslog(get_class($this)."::delete", LOG_DEBUG); @@ -1161,16 +1154,9 @@ class ActionComm extends CommonObject $this->fk_project = 0; } - // Check parameters - if ($this->percentage == 0 && $this->userdoneid > 0) { - $this->error = "ErrorCantSaveADoneUserWithZeroPercentage"; - return -1; - } - $socid = (($this->socid > 0) ? $this->socid : 0); $contactid = (($this->contact_id > 0) ? $this->contact_id : 0); $userownerid = ($this->userownerid ? $this->userownerid : 0); - $userdoneid = ($this->userdoneid ? $this->userdoneid : 0); // If a type_id is set, we must also have the type_code set if ($this->type_id > 0) { @@ -1208,7 +1194,6 @@ class ActionComm extends CommonObject $sql .= ", transparency = '".$this->db->escape($this->transparency)."'"; $sql .= ", fk_user_mod = ".((int) $user->id); $sql .= ", fk_user_action = ".($userownerid > 0 ? ((int) $userownerid) : "null"); - $sql .= ", fk_user_done = ".($userdoneid > 0 ? ((int) $userdoneid) : "null"); if (!empty($this->fk_element)) { $sql .= ", fk_element=".($this->fk_element ? ((int) $this->fk_element) : "null"); } @@ -1246,7 +1231,7 @@ class ActionComm extends CommonObject $already_inserted = array(); foreach ($this->userassigned as $key => $val) { if (!is_array($val)) { // For backward compatibility when val=id - $val = array('id'=>$val); + $val = array('id' => $val); } if (!empty($already_inserted[$val['id']])) { continue; @@ -1274,7 +1259,7 @@ class ActionComm extends CommonObject $already_inserted = array(); foreach (array_keys($this->socpeopleassigned) as $key => $val) { if (!is_array($val)) { // For backward compatibility when val=id - $val = array('id'=>$val); + $val = array('id' => $val); } if (!empty($already_inserted[$val['id']])) { continue; @@ -1352,7 +1337,7 @@ class ActionComm extends CommonObject $parameters = array('sql' => &$sql, 'socid' => $socid, 'fk_element' => $fk_element, 'elementtype' => $elementtype); $reshook = $hookmanager->executeHooks('getActionsListFrom', $parameters); // Note that $action and $object may have been modified by hook if (!empty($hookmanager->resPrint)) { - $sql.= $hookmanager->resPrint; + $sql .= $hookmanager->resPrint; } $sql .= " WHERE a.entity IN (".getEntity('agenda').")"; if (!empty($socid)) { @@ -1376,7 +1361,7 @@ class ActionComm extends CommonObject $parameters = array('sql' => &$sql, 'socid' => $socid, 'fk_element' => $fk_element, 'elementtype' => $elementtype); $reshook = $hookmanager->executeHooks('getActionsListWhere', $parameters); // Note that $action and $object may have been modified by hook if (!empty($hookmanager->resPrint)) { - $sql.= $hookmanager->resPrint; + $sql .= $hookmanager->resPrint; } if ($sortorder && $sortfield) { $sql .= $this->db->order($sortfield, $sortorder); @@ -1431,7 +1416,7 @@ class ActionComm extends CommonObject } $sql .= " AND a.entity IN (".getEntity('agenda').")"; if (!$user->hasRight('agenda', 'allactions', 'read')) { - $sql .= " AND (a.fk_user_author = ".((int) $user->id)." OR a.fk_user_action = ".((int) $user->id)." OR a.fk_user_done = ".((int) $user->id); + $sql .= " AND (a.fk_user_author = ".((int) $user->id)." OR a.fk_user_action = ".((int) $user->id); $sql .= " OR ar.fk_element = ".((int) $user->id); $sql .= ")"; } @@ -1578,7 +1563,7 @@ class ActionComm extends CommonObject $statusType = 'status9'; if ($percent == -1 && !$hidenastatus) { - $statusType = 'status9'; + $statusType = 'status9'; // @phan-suppress-current-line PhanPluginRedundantAssignment } if ($percent == 0) { $statusType = 'status1'; @@ -1660,7 +1645,7 @@ class ActionComm extends CommonObject $datas['note'] .= ''; } // show categories for this record only in ajax to not overload lists - if (isModEnabled('categorie') && !$nofetch) { + if (isModEnabled('category') && !$nofetch) { require_once DOL_DOCUMENT_ROOT . '/categories/class/categorie.class.php'; $form = new Form($this->db); $datas['categories'] = '
' . $form->showCategories($this->id, Categorie::TYPE_ACTIONCOMM, 1); @@ -1848,7 +1833,7 @@ class ActionComm extends CommonObject global $action; $hookmanager->initHooks(array('actiondao')); - $parameters = array('id'=>$this->id, 'getnomurl' => &$result); + $parameters = array('id' => $this->id, 'getnomurl' => &$result); $reshook = $hookmanager->executeHooks('getNomUrl', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks if ($reshook > 0) { $result = $hookmanager->resPrint; @@ -2003,7 +1988,6 @@ class ActionComm extends CommonObject $buildfile = true; $login = ''; $logina = ''; - $logind = ''; $logint = ''; $eventorganization = ''; @@ -2354,9 +2338,6 @@ class ActionComm extends CommonObject if ($logint) { $more = $langs->transnoentities("ActionsToDoBy").' '.$logint; } - if ($logind) { - $more = $langs->transnoentities("ActionsDoneBy").' '.$logind; - } if ($eventorganization) { $langs->load("eventorganization"); $title = $langs->transnoentities("OrganizedEvent").(empty($eventarray[0]['label']) ? '' : ' '.$eventarray[0]['label']); @@ -2443,7 +2424,7 @@ class ActionComm extends CommonObject $this->note_private = "This is a 'private' note."; $this->userownerid = $user->id; - $this->userassigned[$user->id] = array('id'=>$user->id, 'transparency'=> 1); + $this->userassigned[$user->id] = array('id' => $user->id, 'transparency' => 1); return 1; } @@ -2729,7 +2710,7 @@ class ActionComm extends CommonObject return 0; } else { $this->db->commit(); // We commit also on error, to have the error message recorded. - $this->error = 'Nb of emails sent : '.$nbMailSend.', '.(!empty($errorsMsg)) ? implode(', ', $errorsMsg) : $error; + $this->error = 'Nb of emails sent : '.$nbMailSend.', '.(!empty($errorsMsg) ? implode(', ', $errorsMsg) : $error); dol_syslog(__METHOD__." end - ".$this->error, LOG_INFO); diff --git a/htdocs/comm/action/class/actioncommreminder.class.php b/htdocs/comm/action/class/actioncommreminder.class.php index 81d6249eaad..711e890e02d 100644 --- a/htdocs/comm/action/class/actioncommreminder.class.php +++ b/htdocs/comm/action/class/actioncommreminder.class.php @@ -1,5 +1,7 @@ + * Copyright (C) 2024 Frédéric France + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -74,20 +76,20 @@ class ActionCommReminder extends CommonObject // BEGIN MODULEBUILDER PROPERTIES /** - * @var array Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. + * @var array|string,position:int,notnull?:int,visible:int,noteditable?:int,default?:string,index?:int,foreignkey?:string,searchall?:int,isameasure?:int,css?:string,csslist?:string,help?:string,showoncombobox?:int,disabled?:int,arrayofkeyval?:array,comment?:string}> Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. */ public $fields = array( - 'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'visible'=>-1, 'enabled'=>1, 'position'=>1, 'notnull'=>1, 'index'=>1, 'comment'=>"Id",), - 'entity' => array('type'=>'integer', 'label'=>'Entity', 'visible'=>0, 'enabled'=>1, 'position'=>20, 'notnull'=>1, 'index'=>1,), - 'dateremind' => array('type'=>'datetime', 'label'=>'DateRemind', 'visible'=>1, 'enabled'=>1, 'position'=>60, 'notnull'=>1, 'index'=>1,), - 'typeremind' => array('type'=>'varchar(32)', 'label'=>'TypeRemind', 'visible'=>-1, 'enabled'=>1, 'position'=>55, 'notnull'=>1, 'comment'=>"email, browser, sms",), - 'fk_user' => array('type'=>'integer', 'label'=>'User', 'visible'=>-1, 'enabled'=>1, 'position'=>65, 'notnull'=>1, 'index'=>1,), - 'offsetvalue' => array('type'=>'integer', 'label'=>'OffsetValue', 'visible'=>1, 'enabled'=>1, 'position'=>56, 'notnull'=>1,), - 'offsetunit' => array('type'=>'varchar(1)', 'label'=>'OffsetUnit', 'visible'=>1, 'enabled'=>1, 'position'=>57, 'notnull'=>1, 'comment'=>"y, m, d, w, h, i",), - 'status' => array('type'=>'integer', 'label'=>'Status', 'visible'=>1, 'enabled'=>1, 'position'=>58, 'notnull'=>1, 'default'=>0, 'index'=>0, 'arrayofkeyval'=>array('0'=>'ToDo', '1'=>'Done')), - 'lasterror' => array('type'=>'varchar(128)', 'label'=>'LastError', 'visible'=>-1, 'enabled'=>1, 'position'=>59, 'index'=>0), - 'fk_actioncomm' => array('type'=>'integer', 'label'=>'Project', 'visible'=>1, 'enabled'=>1, 'position'=>70, 'notnull'=>1, 'index'=>1,), - 'fk_email_template' => array('type'=>'integer', 'label'=>'EmailTemplate', 'visible'=>1, 'enabled'=>1, 'position'=>80, 'notnull'=>0), + 'rowid' => array('type' => 'integer', 'label' => 'TechnicalID', 'visible' => -1, 'enabled' => 1, 'position' => 1, 'notnull' => 1, 'index' => 1, 'comment' => "Id",), + 'entity' => array('type' => 'integer', 'label' => 'Entity', 'visible' => 0, 'enabled' => 1, 'position' => 20, 'notnull' => 1, 'index' => 1,), + 'dateremind' => array('type' => 'datetime', 'label' => 'DateRemind', 'visible' => 1, 'enabled' => 1, 'position' => 60, 'notnull' => 1, 'index' => 1,), + 'typeremind' => array('type' => 'varchar(32)', 'label' => 'TypeRemind', 'visible' => -1, 'enabled' => 1, 'position' => 55, 'notnull' => 1, 'comment' => "email, browser, sms",), + 'fk_user' => array('type' => 'integer', 'label' => 'User', 'visible' => -1, 'enabled' => 1, 'position' => 65, 'notnull' => 1, 'index' => 1,), + 'offsetvalue' => array('type' => 'integer', 'label' => 'OffsetValue', 'visible' => 1, 'enabled' => 1, 'position' => 56, 'notnull' => 1,), + 'offsetunit' => array('type' => 'varchar(1)', 'label' => 'OffsetUnit', 'visible' => 1, 'enabled' => 1, 'position' => 57, 'notnull' => 1, 'comment' => "y, m, d, w, h, i",), + 'status' => array('type' => 'integer', 'label' => 'Status', 'visible' => 1, 'enabled' => 1, 'position' => 58, 'notnull' => 1, 'default' => '0', 'index' => 0, 'arrayofkeyval' => array('0' => 'ToDo', '1' => 'Done')), + 'lasterror' => array('type' => 'varchar(128)', 'label' => 'LastError', 'visible' => -1, 'enabled' => 1, 'position' => 59, 'index' => 0), + 'fk_actioncomm' => array('type' => 'integer', 'label' => 'Project', 'visible' => 1, 'enabled' => 1, 'position' => 70, 'notnull' => 1, 'index' => 1,), + 'fk_email_template' => array('type' => 'integer', 'label' => 'EmailTemplate', 'visible' => 1, 'enabled' => 1, 'position' => 80, 'notnull' => 0), ); /** @@ -264,10 +266,10 @@ class ActionCommReminder extends CommonObject * Initialise object with example values * Id must be 0 if object instance is a specimen * - * @return void + * @return int */ public function initAsSpecimen() { - $this->initAsSpecimenCommon(); + return $this->initAsSpecimenCommon(); } } diff --git a/htdocs/comm/action/class/api_agendaevents.class.php b/htdocs/comm/action/class/api_agendaevents.class.php index 9c266c92cb6..6aa5bd090d8 100644 --- a/htdocs/comm/action/class/api_agendaevents.class.php +++ b/htdocs/comm/action/class/api_agendaevents.class.php @@ -229,10 +229,9 @@ class AgendaEvents extends DolibarrApi /** * Update Agenda Event general fields * - * @param int $id Id of Agenda Event to update - * @param array $request_data Datas - * - * @return Object|false Object with cleaned properties + * @param int $id Id of Agenda Event to update + * @param array $request_data Datas + * @return Object|false Object with cleaned properties */ public function put($id, $request_data = null) { diff --git a/htdocs/comm/action/class/cactioncomm.class.php b/htdocs/comm/action/class/cactioncomm.class.php index 93191e69bea..d308ce7bd1c 100644 --- a/htdocs/comm/action/class/cactioncomm.class.php +++ b/htdocs/comm/action/class/cactioncomm.class.php @@ -192,9 +192,21 @@ class CActionComm $nump = $this->db->num_rows($resql); if ($nump) { $idforallfornewmodule = 96; - $TSystem = array(); - $TSystemAuto = array(); - $TModule = array(); + $TSystem = array( + 'id' => [], + 'code' => [], + 'all' => [] + ); + $TSystemAuto = array( + 'id' => [], + 'code' => [], + 'all' => [] + ); + $TModule = array( + 'id' => [], + 'code' => [], + 'all' => [] + ); $i = 0; while ($i < $nump) { $obj = $this->db->fetch_object($resql); @@ -213,10 +225,10 @@ class CActionComm //var_dump($obj->type.' '.$obj->module.' '); var_dump($user->hasRight('facture', 'lire')); $qualified = 0; // Special cases - if ($obj->module == 'invoice' && isModEnabled('facture') && $user->hasRight('facture', 'lire')) { + if ($obj->module == 'invoice' && isModEnabled('invoice') && $user->hasRight('facture', 'lire')) { $qualified = 1; } - if ($obj->module == 'order' && isModEnabled('commande') && !$user->hasRight('commande', 'lire')) { + if ($obj->module == 'order' && isModEnabled('order') && !$user->hasRight('commande', 'lire')) { $qualified = 1; } if ($obj->module == 'propal' && isModEnabled("propal") && $user->hasRight('propal', 'lire')) { @@ -228,7 +240,7 @@ class CActionComm if ($obj->module == 'order_supplier' && ((isModEnabled("fournisseur") && !getDolGlobalString('MAIN_USE_NEW_SUPPLIERMOD') && $user->hasRight('fournisseur', 'commande', 'lire')) || (!isModEnabled('supplier_order') && $user->hasRight('supplier_order', 'lire')))) { $qualified = 1; } - if ($obj->module == 'shipping' && isModEnabled("expedition") && $user->hasRight('expedition', 'lire')) { + if ($obj->module == 'shipping' && isModEnabled("shipping") && $user->hasRight('expedition', 'lire')) { $qualified = 1; } // For case module = 'myobject@eventorganization' @@ -319,8 +331,8 @@ class CActionComm } if ($onlyautoornot > 0 && preg_match('/^module/', $obj->type) && $obj->module) { - $TModule['code'][$obj->code] .= ' ('.$langs->trans("Module").': '.$obj->module.')'; - $TModule['all'][$obj->code]['label'] .= ' ('.$langs->trans("Module").': '.$obj->module.')'; + array_key_exists($obj->code, $TModule['code']) ? ($TModule['code'][$obj->code] .= ' ('.$langs->trans("Module").': '.$obj->module.')') : ($TModule['code'][$obj->code] = ' ('.$langs->trans("Module").': '.$obj->module.')'); + array_key_exists($obj->code, $TModule['all']) ? ($TModule['all'][$obj->code]['label'] .= ' ('.$langs->trans("Module").': '.$obj->module.')') : ($TModule['all'][$obj->code]['label'] = ' ('.$langs->trans("Module").': '.$obj->module.')'); } } $i++; diff --git a/htdocs/comm/action/class/ical.class.php b/htdocs/comm/action/class/ical.class.php index a6dce13a694..258539a8cd8 100644 --- a/htdocs/comm/action/class/ical.class.php +++ b/htdocs/comm/action/class/ical.class.php @@ -3,7 +3,7 @@ * Copyright (C) 2011 Juanjo Menent * Copyright (C) 2013-2014 Laurent Destailleur * Copyright (C) 2012 Regis Houssin - * Copyright (C) 2019 Frédéric France + * Copyright (C) 2019-2024 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -38,13 +38,39 @@ class ICal */ public $file; - // Text in file + /** + * @var string Text in file + */ public $file_text; - public $cal; // Array to save iCalendar parse data - public $event_count; // Number of Events - public $todo_count; // Number of Todos - public $freebusy_count; // Number of Freebusy - public $last_key; //Help variable save last key (multiline string) + + /** + * @var array Array to save iCalendar parse data + */ + public $cal; + + /** + * @var int Number of Events + */ + public $event_count; + + /** + * @var int Number of Todos + */ + public $todo_count; + + /** + * @var int Number of Freebusy + */ + public $freebusy_count; + + /** + * @var string Help variable save last key (multiline string) + */ + public $last_key; + + /** + * @var string error message + */ public $error; @@ -117,7 +143,7 @@ class ICal $this->cal = array(); // new empty array $this->event_count = -1; - $this->file_text = null; + $this->file_text = ''; // Save file into a cache if ($usecachefile) { @@ -142,10 +168,10 @@ class ICal } } - $this->file_text = preg_split("[\n]", $this->file_text); + $file_text_array = preg_split("[\n]", $this->file_text); // is this text vcalendar standard text ? on line 1 is BEGIN:VCALENDAR - if (!stristr($this->file_text[0], 'BEGIN:VCALENDAR')) { + if (!stristr($file_text_array[0], 'BEGIN:VCALENDAR')) { return 'error not VCALENDAR'; } @@ -153,7 +179,7 @@ class ICal $tmpkey = ''; $tmpvalue = ''; $type = ''; - foreach ($this->file_text as $text) { + foreach ($file_text_array as $text) { $text = trim($text); // trim one line if (!empty($text)) { // get Key and Value VCALENDAR:Begin -> Key = VCALENDAR, Value = begin diff --git a/htdocs/comm/action/document.php b/htdocs/comm/action/document.php index a27f7bfef20..ccda6ff5be1 100644 --- a/htdocs/comm/action/document.php +++ b/htdocs/comm/action/document.php @@ -42,12 +42,12 @@ if (isModEnabled('project')) { // Load translation files required by the page $langs->loadLangs(array('companies', 'commercial', 'other', 'bills')); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm', 'alpha'); // Security check -$socid = GETPOST('socid', 'int'); +$socid = GETPOSTINT('socid'); if ($user->socid) { $socid = $user->socid; } @@ -67,10 +67,10 @@ if ($id > 0) { $hookmanager->initHooks(array('actioncard', 'globalcard')); // Get parameters -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 diff --git a/htdocs/comm/action/index.php b/htdocs/comm/action/index.php index 62b5600af50..f2427e17501 100644 --- a/htdocs/comm/action/index.php +++ b/htdocs/comm/action/index.php @@ -8,6 +8,7 @@ * Copyright (C) 2015 Marcos García * Copyright (C) 2017 Open-DSI * Copyright (C) 2018-2021 Frédéric France + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -51,14 +52,14 @@ if (!getDolGlobalString('AGENDA_EXT_NB')) { $MAXAGENDA = getDolGlobalString('AGENDA_EXT_NB'); $DELAYFORCACHE = 300; // 300 seconds -$disabledefaultvalues = GETPOST('disabledefaultvalues', 'int'); +$disabledefaultvalues = GETPOSTINT('disabledefaultvalues'); -$check_holiday = GETPOST('check_holiday', 'int'); +$check_holiday = GETPOSTINT('check_holiday'); $filter = GETPOST("search_filter", 'alpha', 3) ? GETPOST("search_filter", 'alpha', 3) : GETPOST("filter", 'alpha', 3); -$filtert = GETPOST("search_filtert", "int", 3) ? GETPOST("search_filtert", "int", 3) : GETPOST("filtert", "int", 3); -$usergroup = GETPOST("search_usergroup", "int", 3) ? GETPOST("search_usergroup", "int", 3) : GETPOST("usergroup", "int", 3); -$showbirthday = empty($conf->use_javascript_ajax) ? GETPOST("showbirthday", "int") : 1; -$search_categ_cus = GETPOST("search_categ_cus", "int", 3) ? GETPOST("search_categ_cus", "int", 3) : 0; +$filtert = GETPOSTINT("search_filtert", 3) ? GETPOSTINT("search_filtert", 3) : GETPOSTINT("filtert", 3); +$usergroup = GETPOSTINT("search_usergroup", 3) ? GETPOSTINT("search_usergroup", 3) : GETPOSTINT("usergroup", 3); +$showbirthday = empty($conf->use_javascript_ajax) ? GETPOSTINT("showbirthday") : 1; +$search_categ_cus = GETPOSTINT("search_categ_cus", 3) ? GETPOSTINT("search_categ_cus", 3) : 0; // If not choice done on calendar owner (like on left menu link "Agenda"), we filter on user. if (empty($filtert) && !getDolGlobalString('AGENDA_ALL_CALENDARS')) { @@ -69,11 +70,11 @@ $newparam = ''; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $offset = $limit * $page; if (!$sortorder) { $sortorder = "ASC"; @@ -83,7 +84,7 @@ if (!$sortfield) { } // Security check -$socid = GETPOST("search_socid", "int") ? GETPOST("search_socid", "int") : GETPOST("socid", "int"); +$socid = GETPOSTINT("search_socid") ? GETPOSTINT("search_socid") : GETPOSTINT("socid"); if ($user->socid) { $socid = $user->socid; } @@ -108,22 +109,22 @@ $mode = GETPOST('mode', 'aZ09'); if (empty($mode) && preg_match('/show_/', $action)) { $mode = $action; // For backward compatibility } -$resourceid = GETPOST("search_resourceid", "int"); -$year = GETPOST("year", "int") ? GETPOST("year", "int") : date("Y"); -$month = GETPOST("month", "int") ? GETPOST("month", "int") : date("m"); -$week = GETPOST("week", "int") ? GETPOST("week", "int") : date("W"); -$day = GETPOST("day", "int") ? GETPOST("day", "int") : date("d"); -$pid = GETPOST("search_projectid", "int", 3) ? GETPOST("search_projectid", "int", 3) : GETPOST("projectid", "int", 3); +$resourceid = GETPOSTINT("search_resourceid"); +$year = GETPOSTINT("year") ? GETPOSTINT("year") : date("Y"); +$month = GETPOSTINT("month") ? GETPOSTINT("month") : date("m"); +$week = GETPOSTINT("week") ? GETPOSTINT("week") : date("W"); +$day = GETPOSTINT("day") ? GETPOSTINT("day") : date("d"); +$pid = GETPOSTINT("search_projectid", 3) ? GETPOSTINT("search_projectid", 3) : GETPOSTINT("projectid", 3); $status = GETPOSTISSET("search_status") ? GETPOST("search_status", 'aZ09') : GETPOST("status", 'aZ09'); // status may be 0, 50, 100, 'todo', 'na' or -1 $type = GETPOSTISSET("search_type") ? GETPOST("search_type", 'aZ09') : GETPOST("type", 'aZ09'); -$maxprint = GETPOSTISSET("maxprint") ? GETPOST("maxprint", 'int') : $conf->global->AGENDA_MAX_EVENTS_DAY_VIEW; +$maxprint = GETPOSTISSET("maxprint") ? GETPOSTINT("maxprint") : $conf->global->AGENDA_MAX_EVENTS_DAY_VIEW; $optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print') -$dateselect = dol_mktime(0, 0, 0, GETPOST('dateselectmonth', 'int'), GETPOST('dateselectday', 'int'), GETPOST('dateselectyear', 'int')); +$dateselect = dol_mktime(0, 0, 0, GETPOSTINT('dateselectmonth'), GETPOSTINT('dateselectday'), GETPOSTINT('dateselectyear')); if ($dateselect > 0) { - $day = GETPOST('dateselectday', 'int'); - $month = GETPOST('dateselectmonth', 'int'); - $year = GETPOST('dateselectyear', 'int'); + $day = GETPOSTINT('dateselectday'); + $month = GETPOSTINT('dateselectmonth'); + $year = GETPOSTINT('dateselectyear'); } // Set actioncode (this code must be same for setting actioncode into peruser, listacton and index) @@ -148,16 +149,16 @@ if (empty($mode) && !GETPOSTISSET('mode')) { if ($mode == 'default') { // When action is default, we want a calendar view and not the list $mode = (($defaultview != 'show_list') ? $defaultview : 'show_month'); } -if (GETPOST('viewcal', 'int') && GETPOST('mode', 'alpha') != 'show_day' && GETPOST('mode', 'alpha') != 'show_week') { +if (GETPOSTINT('viewcal') && GETPOSTINT('mode') != 'show_day' && GETPOSTINT('mode') != 'show_week') { $mode = 'show_month'; $day = ''; } // View by month -if (GETPOST('viewweek', 'int') || GETPOST('mode', 'alpha') == 'show_week') { +if (GETPOSTINT('viewweek') || GETPOSTINT('mode') == 'show_week') { $mode = 'show_week'; $week = ($week ? $week : date("W")); $day = ($day ? $day : date("d")); } // View by week -if (GETPOST('viewday', 'int') || GETPOST('mode', 'alpha') == 'show_day') { +if (GETPOSTINT('viewday') || GETPOSTINT('mode') == 'show_day') { $mode = 'show_day'; $day = ($day ? $day : date("d")); } // View by day @@ -275,6 +276,7 @@ if (!getDolGlobalString('AGENDA_DISABLE_EXT')) { 'name' => dol_string_nohtmltag(getDolGlobalString($name)), 'offsettz' => (int) getDolGlobalInt($offsettz, 0), 'color' => dol_string_nohtmltag(getDolGlobalString($color)), + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition 'default' => dol_string_nohtmltag(getDolGlobalString($default)), 'buggedfile' => dol_string_nohtmltag(getDolGlobalString('buggedfile', '')) ); @@ -301,6 +303,7 @@ if (empty($user->conf->AGENDA_DISABLE_EXT)) { 'name' => dol_string_nohtmltag(getDolUserString($name)), 'offsettz' => (int) (empty($user->conf->$offsettz) ? 0 : $user->conf->$offsettz), 'color' => dol_string_nohtmltag(getDolUserString($color)), + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition 'default' => dol_string_nohtmltag(getDolUserString($default)), 'buggedfile' => dol_string_nohtmltag(isset($user->conf->buggedfile) ? $user->conf->buggedfile : '') ); @@ -316,10 +319,10 @@ if (empty($mode) || $mode == 'show_month') { $next_year = $next['year']; $next_month = $next['month']; - $max_day_in_prev_month = date("t", dol_mktime(12, 0, 0, $prev_month, 1, $prev_year, 'gmt')); // Nb of days in previous month - $max_day_in_month = date("t", dol_mktime(12, 0, 0, $month, 1, $year, 'gmt')); // Nb of days in next month + $max_day_in_prev_month = (int) date("t", dol_mktime(12, 0, 0, $prev_month, 1, $prev_year, 'gmt')); // Nb of days in previous month + $max_day_in_month = (int) date("t", dol_mktime(12, 0, 0, $month, 1, $year, 'gmt')); // Nb of days in next month // tmpday is a negative or null cursor to know how many days before the 1st to show on month view (if tmpday=0, 1st is monday) - $tmpday = -date("w", dol_mktime(12, 0, 0, $month, 1, $year, 'gmt')) + 2; // date('w') is 0 for sunday + $tmpday = - (int) date("w", dol_mktime(12, 0, 0, $month, 1, $year, 'gmt')) + 2; // date('w') is 0 for sunday $tmpday += ((isset($conf->global->MAIN_START_WEEK) ? $conf->global->MAIN_START_WEEK : 1) - 1); if ($tmpday >= 1) { $tmpday -= 7; // If tmpday is 0 we start with sunday, if -6, we start with monday of previous week. @@ -390,7 +393,7 @@ if ($actioncode || GETPOSTISSET('search_actioncode')) { } } if ($resourceid > 0) { - $param .= "&search_resourceid=".urlencode($resourceid); + $param .= "&search_resourceid=".urlencode((string) ($resourceid)); } if ($status || GETPOSTISSET('status') || GETPOSTISSET('search_status')) { $param .= "&search_status=".urlencode($status); @@ -402,26 +405,26 @@ if ($filtert) { $param .= "&search_filtert=".urlencode($filtert); } if ($usergroup > 0) { - $param .= "&search_usergroup=".urlencode($usergroup); + $param .= "&search_usergroup=".urlencode((string) ($usergroup)); } if ($socid > 0) { - $param .= "&search_socid=".urlencode($socid); + $param .= "&search_socid=".urlencode((string) ($socid)); } if ($showbirthday) { $param .= "&search_showbirthday=1"; } if ($pid) { - $param .= "&search_projectid=".urlencode($pid); + $param .= "&search_projectid=".urlencode((string) ($pid)); } if ($type) { $param .= "&search_type=".urlencode($type); } -$param .= "&maxprint=".urlencode($maxprint); +$param .= "&maxprint=".urlencode((string) ($maxprint)); if ($mode == 'show_day' || $mode == 'show_week' || $mode == 'show_month') { $param .= '&mode='.urlencode($mode); } if ($search_categ_cus != 0) { - $param .= '&search_categ_cus='.urlencode($search_categ_cus); + $param .= '&search_categ_cus='.urlencode((string) ($search_categ_cus)); } // Show navigation bar @@ -523,7 +526,8 @@ $viewmode .= img_picto($langs->trans("ViewPerUser"), 'object_calendarperuser', ' $viewmode .= ''.$langs->trans("ViewPerUser").''; // Add more views from hooks -$parameters = array(); $object = null; +$parameters = array(); +$object = null; $reshook = $hookmanager->executeHooks('addCalendarView', $parameters, $object, $action); if (empty($reshook)) { $viewmode .= $hookmanager->resPrint; @@ -546,11 +550,16 @@ if ($user->hasRight('agenda', 'myactions', 'create') || $user->hasRight('agenda' //$param='month='.$monthshown.'&year='.$year; $hourminsec = dol_print_date(dol_mktime(10, 0, 0, 1, 1, 1970, 'gmt'), '%H', 'gmt').'0000'; // Set $hourminsec to '100000' to auto set hour to 10:00 at creation - $newcardbutton .= dolGetButtonTitle($langs->trans("AddAction"), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/comm/action/card.php?action=create&datep='.sprintf("%04d%02d%02d", $tmpforcreatebutton['year'], $tmpforcreatebutton['mon'], $tmpforcreatebutton['mday']).$hourminsec.'&backtopage='.urlencode($_SERVER["PHP_SELF"].($newparam ? '?'.$newparam : ''))); + $urltocreateaction = DOL_URL_ROOT.'/comm/action/card.php?action=create'; + $urltocreateaction .= '&apyear='.$tmpforcreatebutton['year'].'&apmonth='.$tmpforcreatebutton['mon'].'&apday='.$tmpforcreatebutton['mday'].'&aphour='.$tmpforcreatebutton['hours'].'&apmin='.$tmpforcreatebutton['minutes']; + $urltocreateaction .= '&backtopage='.urlencode($_SERVER["PHP_SELF"].($newparam ? '?'.$newparam : '')); + + $newcardbutton .= dolGetButtonTitle($langs->trans("AddAction"), '', 'fa fa-plus-circle', $urltocreateaction); } // Define the legend/list of calendard to show -$s = ''; $link = ''; +$s = ''; +$link = ''; $showextcals = $listofextcals; $bookcalcalendars = array(); @@ -647,7 +656,7 @@ if (!empty($conf->use_javascript_ajax)) { // If javascript on foreach ($showextcals as $val) { $htmlname = md5($val['name']); // not used for security purpose, only to get a string with no special char - if (!empty($val['default']) || GETPOST('check_ext'.$htmlname, 'int')) { + if (!empty($val['default']) || GETPOSTINT('check_ext'.$htmlname)) { $default = "checked"; } else { $default = ''; @@ -1455,7 +1464,8 @@ if (count($listofextcals)) { // Complete $eventarray with events coming from external module -$parameters = array(); $object = null; +$parameters = array(); +$object = null; $reshook = $hookmanager->executeHooks('getCalendarEvents', $parameters, $object, $action); if (!empty($hookmanager->resArray['eventarray'])) { foreach ($hookmanager->resArray['eventarray'] as $keyDate => $events) { @@ -1483,10 +1493,10 @@ if (is_readable($color_file)) { include $color_file; } if (!is_array($theme_datacolor)) { - $theme_datacolor = array(array(120, 130, 150), array(200, 160, 180), array(190, 190, 220)); + $theme_datacolor = array(array(137, 86, 161), array(60, 147, 183), array(250, 190, 80), array(80, 166, 90), array(190, 190, 100), array(91, 115, 247), array(140, 140, 220), array(190, 120, 120), array(115, 125, 150), array(100, 170, 20), array(150, 135, 125), array(85, 135, 150), array(150, 135, 80), array(150, 80, 150)); } -$massactionbutton =''; +$massactionbutton = ''; print_barre_liste($langs->trans("Agenda"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, -1, 'object_action', 0, $nav.''.$newcardbutton, '', $limit, 1, 0, 1, $viewmode); @@ -1520,7 +1530,7 @@ if (empty($mode) || $mode == 'show_month') { // View by month print '
\n"; } elseif ($tmpday <= $max_day_in_month) { @@ -1579,6 +1590,7 @@ if (empty($mode) || $mode == 'show_month') { // View by month } //var_dump($todayarray['mday']."==".$tmpday." && ".$todayarray['mon']."==".$month." && ".$todayarray['year']."==".$year.' -> '.$style); echo ' \n"; } else { @@ -1588,6 +1600,7 @@ if (empty($mode) || $mode == 'show_month') { // View by month $style .= ' cal_other_month_right'; } echo ' \n"; } @@ -1652,6 +1665,7 @@ if (empty($mode) || $mode == 'show_month') { // View by month } echo ' \n"; } @@ -1742,12 +1756,14 @@ if (empty($mode) || $mode == 'show_month') { // View by month echo ''; + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition show_day_events($db, $day, $month, $year, $month, $style, $eventarray, 0, $maxnbofchar, $newparam, 1, 300, 1, $bookcalcalendars); print ''; } else { print '
'; // You can use div-table-responsive-no-min if you don't need reserved height for your table + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition show_day_events($db, $day, $month, $year, $month, $style, $eventarray, 0, $maxnbofchar, $newparam, 1, 300, 0, $bookcalcalendars); print '
'; @@ -1777,7 +1793,7 @@ $db->close(); * @param int $showinfo Add extended information (used by day and week view) * @param int $minheight Minimum height for each event. 60px by default. * @param int $nonew 0=Add "new entry button", 1=No "new entry button", -1=Only "new entry button" - * @param array $bookcalcalendarsarray Used for Bookcal module array of calendar of bookcal + * @param array{}|array{0:array{0:int,1:int,2:int},1:array{0:int,1:int,2:int},2:array{0:int,1:int,2:int}} $bookcalcalendarsarray Used for Bookcal module array of calendar of bookcal * @return void */ function show_day_events($db, $day, $month, $year, $monthshown, $style, &$eventarray, $maxprint = 0, $maxnbofchar = 16, $newparam = '', $showinfo = 0, $minheight = 60, $nonew = 0, $bookcalcalendarsarray = array()) @@ -1788,6 +1804,10 @@ function show_day_events($db, $day, $month, $year, $monthshown, $style, &$eventa global $cachethirdparties, $cachecontacts, $cacheusers, $colorindexused; global $hookmanager; + '@phan-var-force array{0:array{0:int,1:int,2:int},1:array{0:int,1:int,2:int},2:array{0:int,1:int,2:int},3:array{0:int,1:int,2:int}} $theme_datacolor + @phan-var-force User[] $cacheusers + @phan-var-force array> $colorindexused'; + if ($conf->use_javascript_ajax) { // Enable the "Show more button..." $conf->global->MAIN_JS_SWITCH_AGENDA = 1; } @@ -1938,7 +1958,7 @@ function show_day_events($db, $day, $month, $year, $monthshown, $style, &$eventa } } //print '|'.($color).'='.($idusertouse?$idusertouse:0).'='.$colorindex.'
'; - // Define color + // Define color // @suppress-next-line PhanPluginPrintfIncompatibleArgumentType $color = sprintf("%02x%02x%02x", $theme_datacolor[$colorindex][0], $theme_datacolor[$colorindex][1], $theme_datacolor[$colorindex][2]); } $cssclass = $cssclass.' eventday_'.$ymd; @@ -2057,12 +2077,13 @@ function show_day_events($db, $day, $month, $year, $monthshown, $style, &$eventa //print img_picto($langs->trans("Birthday"), 'birthday-cake').' '; $tmpid = $event->id; + if (empty($cachecontacts[$tmpid])) { $newcontact = new Contact($db); $newcontact->fetch($tmpid); - $cachecontact[$tmpid] = $newcontact; + $cachecontacts[$tmpid] = $newcontact; } - print $cachecontact[$tmpid]->getNomUrl(1, '', 0, '', -1, 0, 'valignmiddle inline-block'); + print $cachecontacts[$tmpid]->getNomUrl(1, '', 0, '', -1, 0, 'valignmiddle inline-block'); //$event->picto = 'birthday-cake'; //print $event->getNomUrl(1, $maxnbofchar, 'cal_event', 'birthday', 'contact'); diff --git a/htdocs/comm/action/info.php b/htdocs/comm/action/info.php index 591fb5082d3..0b16f28193e 100644 --- a/htdocs/comm/action/info.php +++ b/htdocs/comm/action/info.php @@ -37,7 +37,7 @@ if (isModEnabled('project')) { // Load translation files required by the page $langs->load("commercial"); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context $hookmanager->initHooks(array('actioncard', 'globalcard')); diff --git a/htdocs/comm/action/list.php b/htdocs/comm/action/list.php index 55cb92d71f3..408b64c6fc9 100644 --- a/htdocs/comm/action/list.php +++ b/htdocs/comm/action/list.php @@ -6,6 +6,7 @@ * Copyright (C) 2017 Open-DSI * Copyright (C) 2018-2021 Frédéric France * Copyright (C) 2020 Tobias Sekan + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -50,19 +51,19 @@ $contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'ac $optioncss = GETPOST('optioncss', 'alpha'); -$disabledefaultvalues = GETPOST('disabledefaultvalues', 'int'); +$disabledefaultvalues = GETPOSTINT('disabledefaultvalues'); $mode = GETPOST('mode', 'aZ09'); if (empty($mode) && preg_match('/show_/', $action)) { $mode = $action; // For backward compatibility } -$resourceid = GETPOST("search_resourceid", "int") ? GETPOST("search_resourceid", "int") : GETPOST("resourceid", "int"); -$pid = GETPOST("search_projectid", 'int', 3) ? GETPOST("search_projectid", 'int', 3) : GETPOST("projectid", 'int', 3); +$resourceid = GETPOSTINT("search_resourceid") ? GETPOSTINT("search_resourceid") : GETPOSTINT("resourceid"); +$pid = GETPOSTINT("search_projectid", 3) ? GETPOSTINT("search_projectid", 3) : GETPOSTINT("projectid", 3); $search_status = (GETPOST("search_status", 'aZ09') != '') ? GETPOST("search_status", 'aZ09') : GETPOST("status", 'aZ09'); $type = GETPOST('search_type', 'alphanohtml') ? GETPOST('search_type', 'alphanohtml') : GETPOST('type', 'alphanohtml'); -$year = GETPOST("year", 'int'); -$month = GETPOST("month", 'int'); -$day = GETPOST("day", 'int'); +$year = GETPOSTINT("year"); +$month = GETPOSTINT("month"); +$day = GETPOSTINT("day"); // Set actioncode (this code must be same for setting actioncode into peruser, listacton and index) if (GETPOST('search_actioncode', 'array')) { @@ -80,11 +81,11 @@ $search_title = GETPOST('search_title', 'alpha'); $search_note = GETPOST('search_note', 'alpha'); // $dateselect is a day included inside the event range -$dateselect = dol_mktime(0, 0, 0, GETPOST('dateselectmonth', 'int'), GETPOST('dateselectday', 'int'), GETPOST('dateselectyear', 'int'), 'tzuserrel'); -$datestart_dtstart = dol_mktime(0, 0, 0, GETPOST('datestart_dtstartmonth', 'int'), GETPOST('datestart_dtstartday', 'int'), GETPOST('datestart_dtstartyear', 'int'), 'tzuserrel'); -$datestart_dtend = dol_mktime(23, 59, 59, GETPOST('datestart_dtendmonth', 'int'), GETPOST('datestart_dtendday', 'int'), GETPOST('datestart_dtendyear', 'int'), 'tzuserrel'); -$dateend_dtstart = dol_mktime(0, 0, 0, GETPOST('dateend_dtstartmonth', 'int'), GETPOST('dateend_dtstartday', 'int'), GETPOST('dateend_dtstartyear', 'int'), 'tzuserrel'); -$dateend_dtend = dol_mktime(23, 59, 59, GETPOST('dateend_dtendmonth', 'int'), GETPOST('dateend_dtendday', 'int'), GETPOST('dateend_dtendyear', 'int'), 'tzuserrel'); +$dateselect = dol_mktime(0, 0, 0, GETPOSTINT('dateselectmonth'), GETPOSTINT('dateselectday'), GETPOSTINT('dateselectyear'), 'tzuserrel'); +$datestart_dtstart = dol_mktime(0, 0, 0, GETPOSTINT('datestart_dtstartmonth'), GETPOSTINT('datestart_dtstartday'), GETPOSTINT('datestart_dtstartyear'), 'tzuserrel'); +$datestart_dtend = dol_mktime(23, 59, 59, GETPOSTINT('datestart_dtendmonth'), GETPOSTINT('datestart_dtendday'), GETPOSTINT('datestart_dtendyear'), 'tzuserrel'); +$dateend_dtstart = dol_mktime(0, 0, 0, GETPOSTINT('dateend_dtstartmonth'), GETPOSTINT('dateend_dtstartday'), GETPOSTINT('dateend_dtstartyear'), 'tzuserrel'); +$dateend_dtend = dol_mktime(23, 59, 59, GETPOSTINT('dateend_dtendmonth'), GETPOSTINT('dateend_dtendday'), GETPOSTINT('dateend_dtendyear'), 'tzuserrel'); if ($search_status == '' && !GETPOSTISSET('search_status')) { $search_status = ((!getDolGlobalString('AGENDA_DEFAULT_FILTER_STATUS') || $disabledefaultvalues) ? '' : $conf->global->AGENDA_DEFAULT_FILTER_STATUS); } @@ -93,10 +94,10 @@ if (empty($mode) && !GETPOSTISSET('mode')) { } $filter = GETPOST("search_filter", 'alpha', 3) ? GETPOST("search_filter", 'alpha', 3) : GETPOST("filter", 'alpha', 3); -$filtert = GETPOST("search_filtert", "int", 3) ? GETPOST("search_filtert", "int", 3) : GETPOST("filtert", "int", 3); -$usergroup = GETPOST("search_usergroup", "int", 3) ? GETPOST("search_usergroup", "int", 3) : GETPOST("usergroup", "int", 3); -$showbirthday = empty($conf->use_javascript_ajax) ? (GETPOST("search_showbirthday", "int") ? GETPOST("search_showbirthday", "int") : GETPOST("showbirthday", "int")) : 1; -$search_categ_cus = GETPOST("search_categ_cus", "int", 3) ? GETPOST("search_categ_cus", "int", 3) : 0; +$filtert = GETPOSTINT("search_filtert", 3) ? GETPOSTINT("search_filtert", 3) : GETPOSTINT("filtert", 3); +$usergroup = GETPOSTINT("search_usergroup", 3) ? GETPOSTINT("search_usergroup", 3) : GETPOSTINT("usergroup", 3); +$showbirthday = empty($conf->use_javascript_ajax) ? (GETPOSTINT("search_showbirthday") ? GETPOSTINT("search_showbirthday") : GETPOSTINT("showbirthday")) : 1; +$search_categ_cus = GETPOSTINT("search_categ_cus", 3) ? GETPOSTINT("search_categ_cus", 3) : 0; // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context $object = new ActionComm($db); @@ -114,10 +115,10 @@ if (empty($filtert) && !getDolGlobalString('AGENDA_ALL_CALENDARS')) { } // Pagination parameters -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // If $page is not defined, or '' or -1 or if we click on clear filters $page = 0; @@ -137,7 +138,7 @@ if (!$sortfield) { } // Security check -$socid = GETPOST("search_socid", 'int') ? GETPOST("search_socid", 'int') : GETPOST("socid", 'int'); +$socid = GETPOSTINT("search_socid") ? GETPOSTINT("search_socid") : GETPOSTINT("socid"); if ($user->socid) { $socid = $user->socid; } @@ -157,19 +158,19 @@ if (!$user->hasRight('agenda', 'allactions', 'read') || $filter == 'mine') { // } $arrayfields = array( - 'a.id'=>array('label'=>"Ref", 'checked'=>1), - 'owner'=>array('label'=>"Owner", 'checked'=>1), - 'c.libelle'=>array('label'=>"Type", 'checked'=>1), - 'a.label'=>array('label'=>"Title", 'checked'=>1), - 'a.note'=>array('label'=>'Description', 'checked'=>0), - 'a.datep'=>array('label'=>"DateStart", 'checked'=>1), - 'a.datep2'=>array('label'=>"DateEnd", 'checked'=>1), - 's.nom'=>array('label'=>"ThirdParty", 'checked'=>1), - 'a.fk_contact'=>array('label'=>"Contact", 'checked'=>0), - 'a.fk_element'=>array('label'=>"LinkedObject", 'checked'=>1, 'enabled'=>(getDolGlobalString('AGENDA_SHOW_LINKED_OBJECT'))), - 'a.datec'=>array('label'=>'DateCreation', 'checked'=>0, 'position'=>510), - 'a.tms'=>array('label'=>'DateModification', 'checked'=>0, 'position'=>520), - 'a.percent'=>array('label'=>"Status", 'checked'=>1, 'position'=>1000) + 'a.id' => array('label' => "Ref", 'checked' => 1), + 'owner' => array('label' => "Owner", 'checked' => 1), + 'c.libelle' => array('label' => "Type", 'checked' => 1), + 'a.label' => array('label' => "Title", 'checked' => 1), + 'a.note' => array('label' => 'Description', 'checked' => 0), + 'a.datep' => array('label' => "DateStart", 'checked' => 1), + 'a.datep2' => array('label' => "DateEnd", 'checked' => 1), + 's.nom' => array('label' => "ThirdParty", 'checked' => 1), + 'a.fk_contact' => array('label' => "Contact", 'checked' => 0), + 'a.fk_element' => array('label' => "LinkedObject", 'checked' => 1, 'enabled' => (getDolGlobalString('AGENDA_SHOW_LINKED_OBJECT'))), + 'a.datec' => array('label' => 'DateCreation', 'checked' => 0, 'position' => 510), + 'a.tms' => array('label' => 'DateModification', 'checked' => 0, 'position' => 520), + 'a.percent' => array('label' => "Status", 'checked' => 1, 'position' => 1000) ); // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_array_fields.tpl.php'; @@ -204,7 +205,7 @@ if (GETPOST("viewcal") || GETPOST("viewweek") || GETPOST("viewday")) { exit; } -$parameters = array('id'=>$socid); +$parameters = array('id' => $socid); $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); @@ -315,7 +316,7 @@ if ($actioncode != '') { } } if ($resourceid > 0) { - $param .= "&search_resourceid=".urlencode($resourceid); + $param .= "&search_resourceid=".urlencode((string) ($resourceid)); } if ($search_status != '') { $param .= "&search_status=".urlencode($search_status); @@ -327,16 +328,16 @@ if ($filtert) { $param .= "&search_filtert=".urlencode($filtert); } if ($usergroup > 0) { - $param .= "&search_usergroup=".urlencode($usergroup); + $param .= "&search_usergroup=".urlencode((string) ($usergroup)); } if ($socid > 0) { - $param .= "&search_socid=".urlencode($socid); + $param .= "&search_socid=".urlencode((string) ($socid)); } if ($showbirthday) { $param .= "&search_showbirthday=1"; } if ($pid) { - $param .= "&search_projectid=".urlencode($pid); + $param .= "&search_projectid=".urlencode((string) ($pid)); } if ($type) { $param .= "&search_type=".urlencode($type); @@ -350,47 +351,47 @@ if ($search_title != '') { if ($search_note != '') { $param .= '&search_note='.urlencode($search_note); } -if (GETPOST('datestart_dtstartday', 'int')) { - $param .= '&datestart_dtstartday='.GETPOST('datestart_dtstartday', 'int'); +if (GETPOSTINT('datestart_dtstartday')) { + $param .= '&datestart_dtstartday='.GETPOSTINT('datestart_dtstartday'); } -if (GETPOST('datestart_dtstartmonth', 'int')) { - $param .= '&datestart_dtstartmonth='.GETPOST('datestart_dtstartmonth', 'int'); +if (GETPOSTINT('datestart_dtstartmonth')) { + $param .= '&datestart_dtstartmonth='.GETPOSTINT('datestart_dtstartmonth'); } -if (GETPOST('datestart_dtstartyear', 'int')) { - $param .= '&datestart_dtstartyear='.GETPOST('datestart_dtstartyear', 'int'); +if (GETPOSTINT('datestart_dtstartyear')) { + $param .= '&datestart_dtstartyear='.GETPOSTINT('datestart_dtstartyear'); } -if (GETPOST('datestart_dtendday', 'int')) { - $param .= '&datestart_dtendday='.GETPOST('datestart_dtendday', 'int'); +if (GETPOSTINT('datestart_dtendday')) { + $param .= '&datestart_dtendday='.GETPOSTINT('datestart_dtendday'); } -if (GETPOST('datestart_dtendmonth', 'int')) { - $param .= '&datestart_dtendmonth='.GETPOST('datestart_dtendmonth', 'int'); +if (GETPOSTINT('datestart_dtendmonth')) { + $param .= '&datestart_dtendmonth='.GETPOSTINT('datestart_dtendmonth'); } -if (GETPOST('datestart_dtendyear', 'int')) { - $param .= '&datestart_dtendyear='.GETPOST('datestart_dtendyear', 'int'); +if (GETPOSTINT('datestart_dtendyear')) { + $param .= '&datestart_dtendyear='.GETPOSTINT('datestart_dtendyear'); } -if (GETPOST('dateend_dtstartday', 'int')) { - $param .= '&dateend_dtstartday='.GETPOST('dateend_dtstartday', 'int'); +if (GETPOSTINT('dateend_dtstartday')) { + $param .= '&dateend_dtstartday='.GETPOSTINT('dateend_dtstartday'); } -if (GETPOST('dateend_dtstartmonth', 'int')) { - $param .= '&dateend_dtstartmonth='.GETPOST('dateend_dtstartmonth', 'int'); +if (GETPOSTINT('dateend_dtstartmonth')) { + $param .= '&dateend_dtstartmonth='.GETPOSTINT('dateend_dtstartmonth'); } -if (GETPOST('dateend_dtstartyear', 'int')) { - $param .= '&dateend_dtstartyear='.GETPOST('dateend_dtstartyear', 'int'); +if (GETPOSTINT('dateend_dtstartyear')) { + $param .= '&dateend_dtstartyear='.GETPOSTINT('dateend_dtstartyear'); } -if (GETPOST('dateend_dtendday', 'int')) { - $param .= '&dateend_dtendday='.GETPOST('dateend_dtendday', 'int'); +if (GETPOSTINT('dateend_dtendday')) { + $param .= '&dateend_dtendday='.GETPOSTINT('dateend_dtendday'); } -if (GETPOST('dateend_dtendmonth', 'int')) { - $param .= '&dateend_dtendmonth='.GETPOST('dateend_dtendmonth', 'int'); +if (GETPOSTINT('dateend_dtendmonth')) { + $param .= '&dateend_dtendmonth='.GETPOSTINT('dateend_dtendmonth'); } -if (GETPOST('dateend_dtendyear', 'int')) { - $param .= '&dateend_dtendyear='.GETPOST('dateend_dtendyear', 'int'); +if (GETPOSTINT('dateend_dtendyear')) { + $param .= '&dateend_dtendyear='.GETPOSTINT('dateend_dtendyear'); } if ($optioncss != '') { $param .= '&optioncss='.urlencode($optioncss); } if ($search_categ_cus != 0) { - $param .= '&search_categ_cus='.urlencode($search_categ_cus); + $param .= '&search_categ_cus='.urlencode((string) ($search_categ_cus)); } // Add $param from extra fields @@ -410,7 +411,7 @@ if ($user->hasRight('agenda', 'allactions', 'delete')) { if (isModEnabled('category') && $user->hasRight('agenda', 'myactions', 'create')) { $arrayofmassactions['preaffecttag'] = img_picto('', 'category', 'class="pictofixedwidth"').$langs->trans("AffectTag"); } -if (GETPOST('nomassaction', 'int') || in_array($massaction, array('presend', 'predelete','preaffecttag'))) { +if (GETPOSTINT('nomassaction') || in_array($massaction, array('presend', 'predelete','preaffecttag'))) { $arrayofmassactions = array(); } $massactionbutton = $form->selectMassAction('', $arrayofmassactions); @@ -723,16 +724,13 @@ $tmpforcreatebutton = dol_getdate(dol_now(), true); $newparam = '&month='.str_pad($month, 2, "0", STR_PAD_LEFT).'&year='.$tmpforcreatebutton['year']; -//$param='month='.$monthshown.'&year='.$year; -$hourminsec = dol_print_date(dol_mktime(10, 0, 0, 1, 1, 1970, 'gmt'), '%H', 'gmt').'0000'; // Set $hourminsec to '100000' to auto set hour to 10:00 at creation - $url = DOL_URL_ROOT.'/comm/action/card.php?action=create'; -$url .= '&datep='.sprintf("%04d%02d%02d", $tmpforcreatebutton['year'], $tmpforcreatebutton['mon'], $tmpforcreatebutton['mday']).$hourminsec; +$url .= '&apyear='.$tmpforcreatebutton['year'].'&apmonth='.$tmpforcreatebutton['mon'].'&apday='.$tmpforcreatebutton['mday'].'&aphour='.$tmpforcreatebutton['hours'].'&apmin='.$tmpforcreatebutton['minutes']; $url .= '&backtopage='.urlencode($_SERVER["PHP_SELF"].($newparam ? '?'.$newparam : '')); $newcardbutton = dolGetButtonTitle($langs->trans('AddAction'), '', 'fa fa-plus-circle', $url, '', $user->rights->agenda->myactions->create || $user->hasRight('agenda', 'allactions', 'create')); -$param .= '&mode='.$mode; +$param .= '&mode='.urlencode($mode); print_barre_liste($langs->trans("Agenda"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, is_numeric($nbtotalofrecords) ? -1 * $nbtotalofrecords : $nbtotalofrecords, 'object_action', 0, $nav.$newcardbutton, '', $limit, 0, 0, 1, $viewmode); @@ -814,7 +812,7 @@ if (!empty($arrayfields['a.fk_element']['checked'])) { include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php'; // Fields from hook -$parameters = array('arrayfields'=>$arrayfields); +$parameters = array('arrayfields' => $arrayfields); $reshook = $hookmanager->executeHooks('printFieldListOption', $parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; @@ -892,7 +890,7 @@ if (!empty($arrayfields['a.fk_element']['checked'])) { // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; // Hook fields -$parameters = array('arrayfields'=>$arrayfields, 'param'=>$param, 'sortfield'=>$sortfield, 'sortorder'=>$sortorder); +$parameters = array('arrayfields' => $arrayfields, 'param' => $param, 'sortfield' => $sortfield, 'sortorder' => $sortorder); $reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; @@ -1196,7 +1194,7 @@ while ($i < $imaxinloop) { // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php'; // Fields from hook - $parameters = array('arrayfields'=>$arrayfields, 'obj'=>$obj, 'i'=>$i, 'totalarray'=>&$totalarray); + $parameters = array('arrayfields' => $arrayfields, 'obj' => $obj, 'i' => $i, 'totalarray' => &$totalarray); $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; diff --git a/htdocs/comm/action/pertype.php b/htdocs/comm/action/pertype.php index f226da960c4..990c9af705f 100644 --- a/htdocs/comm/action/pertype.php +++ b/htdocs/comm/action/pertype.php @@ -6,6 +6,7 @@ * Copyright (C) 2011 Juanjo Menent * Copyright (C) 2014 Cedric GROSS * Copyright (C) 2018-2019 Frédéric France + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -46,11 +47,11 @@ if (!isset($conf->global->AGENDA_MAX_EVENTS_DAY_VIEW)) { $action = GETPOST('action', 'aZ09'); -$disabledefaultvalues = GETPOST('disabledefaultvalues', 'int'); +$disabledefaultvalues = GETPOSTINT('disabledefaultvalues'); $filter = GETPOST("search_filter", 'alpha', 3) ? GETPOST("search_filter", 'alpha', 3) : GETPOST("filter", 'alpha', 3); -$filtert = GETPOST("search_filtert", "int", 3) ? GETPOST("search_filtert", "int", 3) : GETPOST("filtert", "int", 3); -$usergroup = GETPOST("search_usergroup", "int", 3) ? GETPOST("search_usergroup", "int", 3) : GETPOST("usergroup", "int", 3); +$filtert = GETPOSTINT("search_filtert", 3) ? GETPOSTINT("search_filtert", 3) : GETPOSTINT("filtert", 3); +$usergroup = GETPOSTINT("search_usergroup", 3) ? GETPOSTINT("search_usergroup", 3) : GETPOSTINT("usergroup", 3); //if (! ($usergroup > 0) && ! ($filtert > 0)) $filtert = $user->id; // $showbirthday = empty($conf->use_javascript_ajax)?GETPOST("showbirthday","int"):1; @@ -64,11 +65,11 @@ if (empty($filtert) && !getDolGlobalString('AGENDA_ALL_CALENDARS')) { // Sorting $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $offset = $limit * $page; if (!$sortorder) { $sortorder = "ASC"; @@ -79,7 +80,7 @@ if (!$sortfield) { // Security check -$socid = GETPOST("search_socid", "int") ? GETPOST("search_socid", "int") : GETPOST("socid", "int"); +$socid = GETPOSTINT("search_socid") ? GETPOSTINT("search_socid") : GETPOSTINT("socid"); if ($user->socid) { $socid = $user->socid; } @@ -100,15 +101,15 @@ if (!$user->hasRight('agenda', 'allactions', 'read') || $filter == 'mine') { // } $mode = 'show_pertype'; -$resourceid = GETPOST("search_resourceid", "int") ? GETPOST("search_resourceid", "int") : GETPOST("resourceid", "int"); -$year = GETPOST("year", "int") ? GETPOST("year", "int") : date("Y"); -$month = GETPOST("month", "int") ? GETPOST("month", "int") : date("m"); -$week = GETPOST("week", "int") ? GETPOST("week", "int") : date("W"); -$day = GETPOST("day", "int") ? GETPOST("day", "int") : date("d"); -$pid = GETPOSTISSET("search_projectid") ? GETPOST("search_projectid", "int", 3) : GETPOST("projectid", "int", 3); +$resourceid = GETPOSTINT("search_resourceid") ? GETPOSTINT("search_resourceid") : GETPOSTINT("resourceid"); +$year = GETPOSTINT("year") ? GETPOSTINT("year") : date("Y"); +$month = GETPOSTINT("month") ? GETPOSTINT("month") : date("m"); +$week = GETPOSTINT("week") ? GETPOSTINT("week") : date("W"); +$day = GETPOSTINT("day") ? GETPOSTINT("day") : date("d"); +$pid = GETPOSTISSET("search_projectid") ? GETPOSTINT("search_projectid", 3) : GETPOSTINT("projectid", 3); $status = GETPOSTISSET("search_status") ? GETPOST("search_status", 'aZ09') : GETPOST("status", 'aZ09'); $type = GETPOSTISSET("search_type") ? GETPOST("search_type", 'alpha') : GETPOST("type", 'alpha'); -$maxprint = ((GETPOST("maxprint", 'int') != '') ? GETPOST("maxprint", 'int') : $conf->global->AGENDA_MAX_EVENTS_DAY_VIEW); +$maxprint = ((GETPOSTINT("maxprint") != '') ? GETPOSTINT("maxprint") : $conf->global->AGENDA_MAX_EVENTS_DAY_VIEW); $optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print') // Set actioncode (this code must be same for setting actioncode into peruser, listacton and index) @@ -121,19 +122,19 @@ if (GETPOST('search_actioncode', 'array:aZ09')) { $actioncode = GETPOST("search_actioncode", "alpha", 3) ? GETPOST("search_actioncode", "alpha", 3) : (GETPOST("search_actioncode", "alpha") == '0' ? '0' : ((!getDolGlobalString('AGENDA_DEFAULT_FILTER_TYPE') || $disabledefaultvalues) ? '' : $conf->global->AGENDA_DEFAULT_FILTER_TYPE)); } -$dateselect = dol_mktime(0, 0, 0, GETPOST('dateselectmonth', 'int'), GETPOST('dateselectday', 'int'), GETPOST('dateselectyear', 'int')); +$dateselect = dol_mktime(0, 0, 0, GETPOSTINT('dateselectmonth'), GETPOSTINT('dateselectday'), GETPOSTINT('dateselectyear')); if ($dateselect > 0) { - $day = GETPOST('dateselectday', 'int'); - $month = GETPOST('dateselectmonth', 'int'); - $year = GETPOST('dateselectyear', 'int'); + $day = GETPOSTINT('dateselectday'); + $month = GETPOSTINT('dateselectmonth'); + $year = GETPOSTINT('dateselectyear'); } // working hours $tmp = !getDolGlobalString('MAIN_DEFAULT_WORKING_HOURS') ? '9-18' : $conf->global->MAIN_DEFAULT_WORKING_HOURS; $tmp = str_replace(' ', '', $tmp); // FIX 7533 $tmparray = explode('-', $tmp); -$begin_h = GETPOST('begin_h', 'int') != '' ? GETPOST('begin_h', 'int') : ($tmparray[0] != '' ? $tmparray[0] : 9); -$end_h = GETPOST('end_h', 'int') ? GETPOST('end_h', 'int') : ($tmparray[1] != '' ? $tmparray[1] : 18); +$begin_h = GETPOSTINT('begin_h') != '' ? GETPOSTINT('begin_h') : ($tmparray[0] != '' ? $tmparray[0] : 9); +$end_h = GETPOSTINT('end_h') ? GETPOSTINT('end_h') : ($tmparray[1] != '' ? $tmparray[1] : 18); if ($begin_h < 0 || $begin_h > 23) { $begin_h = 9; } @@ -285,7 +286,7 @@ if ($actioncode || GETPOSTISSET('search_actioncode')) { } } if ($resourceid > 0) { - $param .= "&search_resourceid=".urlencode($resourceid); + $param .= "&search_resourceid=".urlencode((string) ($resourceid)); } if ($status || GETPOSTISSET('status') || GETPOSTISSET('search_status')) { $param .= "&search_status=".urlencode($status); @@ -297,16 +298,16 @@ if ($filtert) { $param .= "&search_filtert=".urlencode($filtert); } if ($usergroup > 0) { - $param .= "&search_usergroup=".urlencode($usergroup); + $param .= "&search_usergroup=".urlencode((string) ($usergroup)); } if ($socid > 0) { - $param .= "&search_socid=".urlencode($socid); + $param .= "&search_socid=".urlencode((string) ($socid)); } if ($showbirthday) { $param .= "&search_showbirthday=1"; } if ($pid) { - $param .= "&search_projectid=".urlencode($pid); + $param .= "&search_projectid=".urlencode((string) ($pid)); } if ($type) { $param .= "&search_type=".urlencode($type); @@ -321,12 +322,12 @@ if ($end_h != '') { $param .= '&end_h='.urlencode($end_h); } if ($begin_d != '') { - $param .= '&begin_d='.urlencode($begin_d); + $param .= '&begin_d='.urlencode((string) ($begin_d)); } if ($end_d != '') { - $param .= '&end_d='.urlencode($end_d); + $param .= '&end_d='.urlencode((string) ($end_d)); } -$param .= "&maxprint=".urlencode($maxprint); +$param .= "&maxprint=".urlencode((string) ($maxprint)); $paramnoactionodate = $param; @@ -373,7 +374,7 @@ $nav .= $form->selectDate($dateselect, 'dateselect', 0, 0, 1, '', 1, 0); $nav .= ' '; // Must be after the nav definition -$param .= '&year='.urlencode($year).'&month='.urlencode($month).($day ? '&day='.urlencode($day) : ''); +$param .= '&year='.urlencode((string) ($year)).'&month='.urlencode((string) ($month)).($day ? '&day='.urlencode((string) ($day)) : ''); //print 'x'.$param; @@ -463,7 +464,8 @@ $viewmode .= ''; // Add more views from hooks -$parameters = array(); $object = null; +$parameters = array(); +$object = null; $reshook = $hookmanager->executeHooks('addCalendarView', $parameters, $object, $action); if (empty($reshook)) { $viewmode .= $hookmanager->resPrint; @@ -478,9 +480,11 @@ if ($user->hasRight('agenda', 'myactions', 'create') || $user->hasRight('agenda' $newparam .= '&month='.str_pad($month, 2, "0", STR_PAD_LEFT).'&year='.$tmpforcreatebutton['year']; - //$param='month='.$monthshown.'&year='.$year; - $hourminsec = '100000'; - $newcardbutton .= dolGetButtonTitle($langs->trans("AddAction"), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/comm/action/card.php?action=create&datep='.sprintf("%04d%02d%02d", $tmpforcreatebutton['year'], $tmpforcreatebutton['mon'], $tmpforcreatebutton['mday']).$hourminsec.'&backtopage='.urlencode($_SERVER["PHP_SELF"].($newparam ? '?'.$newparam : ''))); + $urltocreateaction = DOL_URL_ROOT.'/comm/action/card.php?action=create'; + $urltocreateaction .= '&apyear='.$tmpforcreatebutton['year'].'&apmonth='.$tmpforcreatebutton['mon'].'&apday='.$tmpforcreatebutton['mday'].'&aphour='.$tmpforcreatebutton['hours'].'&apmin='.$tmpforcreatebutton['minutes']; + $urltocreateaction .= '&backtopage='.urlencode($_SERVER["PHP_SELF"].($newparam ? '?'.$newparam : '')); + + $newcardbutton .= dolGetButtonTitle($langs->trans("AddAction"), '', 'fa fa-plus-circle', $urltocreateaction); } print_barre_liste($langs->trans("Agenda"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, -1, 'object_action', 0, $nav.''.$newcardbutton, '', $limit, 1, 0, 1, $viewmode); @@ -693,20 +697,11 @@ if ($resql) { // Defined date_start_in_calendar and date_end_in_calendar property // They are date start and end of action but modified to not be outside calendar view. - if ($event->percentage <= 0) { - $event->date_start_in_calendar = $datep; - if ($datep2 != '' && $datep2 >= $datep) { - $event->date_end_in_calendar = $datep2; - } else { - $event->date_end_in_calendar = $datep; - } + $event->date_start_in_calendar = $datep; + if ($datep2 != '' && $datep2 >= $datep) { + $event->date_end_in_calendar = $datep2; } else { - $event->date_start_in_calendar = $datep; - if ($datep2 != '' && $datep2 >= $datep) { - $event->date_end_in_calendar = $datep2; - } else { - $event->date_end_in_calendar = $datep; - } + $event->date_end_in_calendar = $datep; } // Check values @@ -1209,7 +1204,7 @@ function show_day_events_pertype($username, $day, $month, $year, $monthshown, $s if (count($cases1[$h]) > 1) { $title1 .= count($cases1[$h]).' '.(count($cases1[$h]) == 1 ? $langs->trans("Event") : $langs->trans("Events")); } - $string1 = ' '; + if (!getDolGlobalString('AGENDA_NO_TRANSPARENT_ON_NOT_BUSY')) { $style1 = 'peruser_notbusy'; } else { @@ -1226,7 +1221,7 @@ function show_day_events_pertype($username, $day, $month, $year, $monthshown, $s if (count($cases2[$h]) > 1) { $title2 .= count($cases2[$h]).' '.(count($cases2[$h]) == 1 ? $langs->trans("Event") : $langs->trans("Events")); } - $string2 = ' '; + if (!getDolGlobalString('AGENDA_NO_TRANSPARENT_ON_NOT_BUSY')) { $style2 = 'peruser_notbusy'; } else { diff --git a/htdocs/comm/action/peruser.php b/htdocs/comm/action/peruser.php index a3ae68e6bd3..97098383652 100644 --- a/htdocs/comm/action/peruser.php +++ b/htdocs/comm/action/peruser.php @@ -7,6 +7,7 @@ * Copyright (C) 2014 Cedric GROSS * Copyright (C) 2018-2019 Frédéric France * Copyright (C) 2023 Florian HENRY + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -47,11 +48,11 @@ if (!isset($conf->global->AGENDA_MAX_EVENTS_DAY_VIEW)) { $action = GETPOST('action', 'aZ09'); -$disabledefaultvalues = GETPOST('disabledefaultvalues', 'int'); +$disabledefaultvalues = GETPOSTINT('disabledefaultvalues'); $filter = GETPOST("search_filter", 'alpha', 3) ? GETPOST("search_filter", 'alpha', 3) : GETPOST("filter", 'alpha', 3); -$filtert = GETPOST("search_filtert", "int", 3) ? GETPOST("search_filtert", "int", 3) : GETPOST("filtert", "int", 3); -$usergroup = GETPOST("search_usergroup", "int", 3) ? GETPOST("search_usergroup", "int", 3) : GETPOST("usergroup", "int", 3); +$filtert = GETPOSTINT("search_filtert", 3) ? GETPOSTINT("search_filtert", 3) : GETPOSTINT("filtert", 3); +$usergroup = GETPOSTINT("search_usergroup", 3) ? GETPOSTINT("search_usergroup", 3) : GETPOSTINT("usergroup", 3); //if (! ($usergroup > 0) && ! ($filtert > 0)) $filtert = $user->id; //$showbirthday = empty($conf->use_javascript_ajax)?GETPOST("showbirthday","int"):1; $showbirthday = 0; @@ -64,11 +65,11 @@ $showbirthday = 0; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $offset = $limit * $page; if (!$sortorder) { $sortorder = "ASC"; @@ -77,7 +78,7 @@ if (!$sortfield) { $sortfield = "a.datec"; } -$socid = GETPOST("search_socid", "int") ? GETPOST("search_socid", "int") : GETPOST("socid", "int"); +$socid = GETPOSTINT("search_socid") ? GETPOSTINT("search_socid") : GETPOSTINT("socid"); if ($user->socid) { $socid = $user->socid; } @@ -97,17 +98,17 @@ if (!$user->hasRight('agenda', 'allactions', 'read') || $filter == 'mine') { // } $mode = 'show_peruser'; -$resourceid = GETPOST("search_resourceid", "int") ? GETPOST("search_resourceid", "int") : GETPOST("resourceid", "int"); -$year = GETPOST("year", "int") ? GETPOST("year", "int") : date("Y"); -$month = GETPOST("month", "int") ? GETPOST("month", "int") : date("m"); -$week = GETPOST("week", "int") ? GETPOST("week", "int") : date("W"); -$day = GETPOST("day", "int") ? GETPOST("day", "int") : date("d"); -$pid = GETPOSTISSET("search_projectid") ? GETPOST("search_projectid", "int", 3) : GETPOST("projectid", "int", 3); +$resourceid = GETPOSTINT("search_resourceid") ? GETPOSTINT("search_resourceid") : GETPOSTINT("resourceid"); +$year = GETPOSTINT("year") ? GETPOSTINT("year") : date("Y"); +$month = GETPOSTINT("month") ? GETPOSTINT("month") : date("m"); +$week = GETPOSTINT("week") ? GETPOSTINT("week") : date("W"); +$day = GETPOSTINT("day") ? GETPOSTINT("day") : date("d"); +$pid = GETPOSTISSET("search_projectid") ? GETPOSTINT("search_projectid", 3) : GETPOSTINT("projectid", 3); $status = GETPOSTISSET("search_status") ? GETPOST("search_status", 'aZ09') : GETPOST("status", 'aZ09'); // status may be 0, 50, 100, 'todo', 'na' or -1 $type = GETPOSTISSET("search_type") ? GETPOST("search_type", 'alpha') : GETPOST("type", 'alpha'); -$maxprint = ((GETPOST("maxprint", 'int') != '') ? GETPOST("maxprint", 'int') : $conf->global->AGENDA_MAX_EVENTS_DAY_VIEW); +$maxprint = ((GETPOSTINT("maxprint") != '') ? GETPOSTINT("maxprint") : $conf->global->AGENDA_MAX_EVENTS_DAY_VIEW); $optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print') -$search_categ_cus = GETPOST("search_categ_cus", "int", 3) ? GETPOST("search_categ_cus", "int", 3) : 0; +$search_categ_cus = GETPOSTINT("search_categ_cus", 3) ? GETPOSTINT("search_categ_cus", 3) : 0; // Set actioncode (this code must be same for setting actioncode into peruser, listacton and index) if (GETPOST('search_actioncode', 'array:aZ09')) { $actioncode = GETPOST('search_actioncode', 'array:aZ09', 3); @@ -118,18 +119,18 @@ if (GETPOST('search_actioncode', 'array:aZ09')) { $actioncode = GETPOST("search_actioncode", "alpha", 3) ? GETPOST("search_actioncode", "alpha", 3) : (GETPOST("search_actioncode", "alpha") == '0' ? '0' : ((!getDolGlobalString('AGENDA_DEFAULT_FILTER_TYPE') || $disabledefaultvalues) ? '' : $conf->global->AGENDA_DEFAULT_FILTER_TYPE)); } -$dateselect = dol_mktime(0, 0, 0, GETPOST('dateselectmonth', 'int'), GETPOST('dateselectday', 'int'), GETPOST('dateselectyear', 'int')); +$dateselect = dol_mktime(0, 0, 0, GETPOSTINT('dateselectmonth'), GETPOSTINT('dateselectday'), GETPOSTINT('dateselectyear')); if ($dateselect > 0) { - $day = GETPOST('dateselectday', 'int'); - $month = GETPOST('dateselectmonth', 'int'); - $year = GETPOST('dateselectyear', 'int'); + $day = GETPOSTINT('dateselectday'); + $month = GETPOSTINT('dateselectmonth'); + $year = GETPOSTINT('dateselectyear'); } $tmp = !getDolGlobalString('MAIN_DEFAULT_WORKING_HOURS') ? '9-18' : $conf->global->MAIN_DEFAULT_WORKING_HOURS; $tmp = str_replace(' ', '', $tmp); // FIX 7533 $tmparray = explode('-', $tmp); -$begin_h = GETPOST('begin_h', 'int') != '' ? GETPOST('begin_h', 'int') : ($tmparray[0] != '' ? $tmparray[0] : 9); -$end_h = GETPOST('end_h', 'int') ? GETPOST('end_h', 'int') : ($tmparray[1] != '' ? $tmparray[1] : 18); +$begin_h = GETPOSTISSET('begin_h') ? GETPOSTINT('begin_h') : ($tmparray[0] != '' ? $tmparray[0] : 9); +$end_h = GETPOSTISSET('end_h') ? GETPOSTINT('end_h') : ($tmparray[1] != '' ? $tmparray[1] : 18); if ($begin_h < 0 || $begin_h > 23) { $begin_h = 9; } @@ -143,8 +144,8 @@ if ($end_h <= $begin_h) { $tmp = !getDolGlobalString('MAIN_DEFAULT_WORKING_DAYS') ? '1-5' : $conf->global->MAIN_DEFAULT_WORKING_DAYS; $tmp = str_replace(' ', '', $tmp); // FIX 7533 $tmparray = explode('-', $tmp); -$begin_d = GETPOST('begin_d', 'int') ? GETPOST('begin_d', 'int') : ($tmparray[0] != '' ? $tmparray[0] : 1); -$end_d = GETPOST('end_d', 'int') ? GETPOST('end_d', 'int') : ($tmparray[1] != '' ? $tmparray[1] : 5); +$begin_d = GETPOSTISSET('begin_d') ? GETPOSTINT('begin_d') : ($tmparray[0] != '' ? $tmparray[0] : 1); +$end_d = GETPOSTISSET('end_d') ? GETPOSTINT('end_d') : ($tmparray[1] != '' ? $tmparray[1] : 5); if ($begin_d < 1 || $begin_d > 7) { $begin_d = 1; } @@ -281,7 +282,7 @@ if ($actioncode || GETPOSTISSET('search_actioncode')) { } } if ($resourceid > 0) { - $param .= "&search_resourceid=".urlencode($resourceid); + $param .= "&search_resourceid=".urlencode((string) ($resourceid)); } if ($status || GETPOSTISSET('status') || GETPOSTISSET('search_status')) { @@ -294,16 +295,16 @@ if ($filtert) { $param .= "&search_filtert=".urlencode($filtert); } if ($usergroup > 0) { - $param .= "&search_usergroup=".urlencode($usergroup); + $param .= "&search_usergroup=".urlencode((string) ($usergroup)); } if ($socid > 0) { - $param .= "&search_socid=".urlencode($socid); + $param .= "&search_socid=".urlencode((string) ($socid)); } if ($showbirthday) { $param .= "&search_showbirthday=1"; } if ($pid) { - $param .= "&search_projectid=".urlencode($pid); + $param .= "&search_projectid=".urlencode((string) ($pid)); } if ($type) { $param .= "&search_type=".urlencode($type); @@ -324,9 +325,9 @@ if ($end_d != '') { $param .= '&end_d='.urlencode($end_d); } if ($search_categ_cus != 0) { - $param .= '&search_categ_cus='.urlencode($search_categ_cus); + $param .= '&search_categ_cus='.urlencode((string) ($search_categ_cus)); } -$param .= "&maxprint=".urlencode($maxprint); +$param .= "&maxprint=".urlencode((string) ($maxprint)); $paramnoactionodate = $param; @@ -376,7 +377,7 @@ $nav .= $form->selectDate($dateselect, 'dateselect', 0, 0, 1, '', 1, 0); $nav .= ' '; // Must be after the nav definition -$param .= '&year='.urlencode($year).'&month='.urlencode($month).($day ? '&day='.urlencode($day) : ''); +$param .= '&year='.urlencode((string) ($year)).'&month='.urlencode((string) ($month)).($day ? '&day='.urlencode((string) ($day)) : ''); //print 'x'.$param; @@ -466,7 +467,8 @@ $viewmode .= ''; // Add more views from hooks -$parameters = array(); $object = null; +$parameters = array(); +$object = null; $reshook = $hookmanager->executeHooks('addCalendarView', $parameters, $object, $action); if (empty($reshook)) { $viewmode .= $hookmanager->resPrint; @@ -494,9 +496,11 @@ if ($user->hasRight('agenda', 'myactions', 'create') || $user->hasRight('agenda' $newparam .= '&end_d='.urlencode($end_d); } - //$param='month='.$monthshown.'&year='.$year; - $hourminsec = '100000'; - $newcardbutton .= dolGetButtonTitle($langs->trans("AddAction"), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/comm/action/card.php?action=create&datep='.sprintf("%04d%02d%02d", $tmpforcreatebutton['year'], $tmpforcreatebutton['mon'], $tmpforcreatebutton['mday']).$hourminsec.'&backtopage='.urlencode($_SERVER["PHP_SELF"].($newparam ? '?'.$newparam : ''))); + $urltocreateaction = DOL_URL_ROOT.'/comm/action/card.php?action=create'; + $urltocreateaction .= '&apyear='.$tmpforcreatebutton['year'].'&apmonth='.$tmpforcreatebutton['mon'].'&apday='.$tmpforcreatebutton['mday'].'&aphour='.$tmpforcreatebutton['hours'].'&apmin='.$tmpforcreatebutton['minutes']; + $urltocreateaction .= '&backtopage='.urlencode($_SERVER["PHP_SELF"].($newparam ? '?'.$newparam : '')); + + $newcardbutton .= dolGetButtonTitle($langs->trans("AddAction"), '', 'fa fa-plus-circle', $urltocreateaction); } $num = ''; @@ -712,20 +716,11 @@ if ($resql) { // Defined date_start_in_calendar and date_end_in_calendar property // They are date start and end of action but modified to not be outside calendar view. - if ($event->percentage <= 0) { - $event->date_start_in_calendar = $datep; - if ($datep2 != '' && $datep2 >= $datep) { - $event->date_end_in_calendar = $datep2; - } else { - $event->date_end_in_calendar = $datep; - } + $event->date_start_in_calendar = $datep; + if ($datep2 != '' && $datep2 >= $datep) { + $event->date_end_in_calendar = $datep2; } else { - $event->date_start_in_calendar = $datep; - if ($datep2 != '' && $datep2 >= $datep) { - $event->date_end_in_calendar = $datep2; - } else { - $event->date_end_in_calendar = $datep; - } + $event->date_end_in_calendar = $datep; } //print '
'.$i.' - eventid='.$event->id.' '.dol_print_date($event->date_start_in_calendar, 'dayhour').' '.dol_print_date($firstdaytoshow, 'dayhour').' - '.dol_print_date($event->date_end_in_calendar, 'dayhour').' '.dol_print_date($lastdaytoshow, 'dayhour').'
'."\n"; @@ -938,7 +933,7 @@ while ($currentdaytoshow < $lastdaytoshow) { if ($filtert > 0) { $sql .= " AND u.rowid = ".((int) $filtert); } - if ($usergroup > 0) { + if ($usergroup > 0) { $sql .= " AND ug.fk_usergroup = ".((int) $usergroup); } if ($user->socid > 0) { @@ -1501,7 +1496,7 @@ function show_day_events2($username, $day, $month, $year, $monthshown, $style, & if (count($cases1[$h]) > 1) { $title1 .= count($cases1[$h]).' '.(count($cases1[$h]) == 1 ? $langs->trans("Event") : $langs->trans("Events")); } - $string1 = ' '; + if (!getDolGlobalString('AGENDA_NO_TRANSPARENT_ON_NOT_BUSY')) { $style1 = 'peruser_notbusy'; } else { @@ -1518,7 +1513,7 @@ function show_day_events2($username, $day, $month, $year, $monthshown, $style, & if (count($cases2[$h]) > 1) { $title2 .= count($cases2[$h]).' '.(count($cases2[$h]) == 1 ? $langs->trans("Event") : $langs->trans("Events")); } - $string2 = ' '; + if (!getDolGlobalString('AGENDA_NO_TRANSPARENT_ON_NOT_BUSY')) { $style2 = 'peruser_notbusy'; } else { @@ -1535,7 +1530,7 @@ function show_day_events2($username, $day, $month, $year, $monthshown, $style, & if (count($cases3[$h]) > 1) { $title3 .= count($cases3[$h]).' '.(count($cases3[$h]) == 1 ? $langs->trans("Event") : $langs->trans("Events")); } - $string3 = ' '; + if (!getDolGlobalString('AGENDA_NO_TRANSPARENT_ON_NOT_BUSY')) { $style3 = 'peruser_notbusy'; } else { @@ -1552,7 +1547,7 @@ function show_day_events2($username, $day, $month, $year, $monthshown, $style, & if (count($cases4[$h]) > 1) { $title4 .= count($cases4[$h]).' '.(count($cases4[$h]) == 1 ? $langs->trans("Event") : $langs->trans("Events")); } - $string4 = ' '; + if (!getDolGlobalString('AGENDA_NO_TRANSPARENT_ON_NOT_BUSY')) { $style4 = 'peruser_notbusy'; } else { diff --git a/htdocs/comm/action/rapport/index.php b/htdocs/comm/action/rapport/index.php index 5ef15ca226a..5bf0b91974b 100644 --- a/htdocs/comm/action/rapport/index.php +++ b/htdocs/comm/action/rapport/index.php @@ -35,14 +35,14 @@ require_once DOL_DOCUMENT_ROOT.'/comm/action/class/actioncomm.class.php'; $langs->loadLangs(array("agenda", "commercial")); $action = GETPOST('action', 'aZ09'); -$month = GETPOST('month', 'int'); -$year = GETPOST('year', 'int'); +$month = GETPOSTINT('month'); +$year = GETPOSTINT('year'); $optioncss = GETPOST('optioncss', 'alpha'); -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // If $page is not defined, or '' or -1 or if we click on clear filters $page = 0; @@ -130,6 +130,7 @@ if ($resql) { print ''; print ''; + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder print_barre_liste($langs->trans("EventReports"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $num, $nbtotalofrecords, 'title_agenda', 0, '', '', $limit, 0, 0, 1); $moreforfilter = ''; @@ -177,7 +178,7 @@ if ($resql) { print '
"; print ''; - if (isModEnabled("banque")) { + if (isModEnabled("bank")) { // Default bank account for payments print ''; if ($page) { - $param .= "&page=".urlencode($page); + $param .= "&page=".urlencode((string) ($page)); } print ''; @@ -783,6 +786,7 @@ if ($object->fetch($id) >= 0) { include_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php'; include_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php'; include_once DOL_DOCUMENT_ROOT.'/eventorganization/class/conferenceorboothattendee.class.php'; + $objectstaticmember = new Adherent($db); $objectstaticuser = new User($db); $objectstaticcompany = new Societe($db); @@ -822,7 +826,7 @@ if ($object->fetch($id) >= 0) { print ''; - print ''; + print ''; print ''; } @@ -1955,7 +1971,7 @@ if ($action == 'create') { // Date print ''; // Validaty duration @@ -1975,7 +1991,7 @@ if ($action == 'create') { print ''; // Bank Account - if (getDolGlobalString('BANK_ASK_PAYMENT_BANK_DURING_PROPOSAL') && isModEnabled("banque")) { + if (getDolGlobalString('BANK_ASK_PAYMENT_BANK_DURING_PROPOSAL') && isModEnabled("bank")) { print ''; @@ -1984,17 +2000,17 @@ if ($action == 'create') { // Source / Channel - What trigger creation print ''; // Shipping Method - if (isModEnabled("expedition")) { + if (isModEnabled("shipping")) { if (getDolGlobalString('SOCIETE_ASK_FOR_SHIPPING_METHOD') && !empty($soc->shipping_method_id)) { $shipping_method_id = $soc->shipping_method_id; } print ''; } @@ -2009,12 +2025,12 @@ if ($action == 'create') { // Delivery delay print ''; // Delivery date (or manufacturing) @@ -2026,9 +2042,9 @@ if ($action == 'create') { $syear = date("Y", $tmpdte); $smonth = date("m", $tmpdte); $sday = date("d", $tmpdte); - print $form->selectDate($syear."-".$smonth."-".$sday, 'date_livraison', '', '', '', "addprop"); + print $form->selectDate($syear."-".$smonth."-".$sday, 'date_livraison', 0, 0, 0, "addprop"); } else { - print $form->selectDate(-1, 'date_livraison', '', '', '', "addprop", 1, 1); + print $form->selectDate(-1, 'date_livraison', 0, 0, 0, "addprop", 1, 1); } print ''; @@ -2242,7 +2258,7 @@ if ($action == 'create') { $formquestion = array( // 'text' => $langs->trans("ConfirmClone"), // array('type' => 'checkbox', 'name' => 'clone_content', 'label' => $langs->trans("CloneMainAttributes"), 'value' => 1), - array('type' => 'other', 'name' => 'socid', 'label' => $langs->trans("SelectThirdParty"), 'value' => $form->select_company(GETPOST('socid', 'int'), 'socid', $filter, '', 0, 0, null, 0, 'maxwidth300')), + array('type' => 'other', 'name' => 'socid', 'label' => $langs->trans("SelectThirdParty"), 'value' => $form->select_company(GETPOSTINT('socid'), 'socid', $filter, '', 0, 0, null, 0, 'maxwidth300')), array('type' => 'checkbox', 'name' => 'update_prices', 'label' => $langs->trans('PuttingPricesUpToDate'), 'value' => 0), array('type' => 'checkbox', 'name' => 'update_desc', 'label' => $langs->trans('PuttingDescUpToDate'), 'value' => 0), ); @@ -2268,7 +2284,7 @@ if ($action == 'create') { // It may also break step of creating an order when invoicing must be done from orders and not from proposal $deposit_percent_from_payment_terms = getDictionaryValue('c_payment_term', 'deposit_percent', $object->cond_reglement_id); - if (!empty($deposit_percent_from_payment_terms) && isModEnabled('facture') && $user->hasRight('facture', 'creer')) { + if (!empty($deposit_percent_from_payment_terms) && isModEnabled('invoice') && $user->hasRight('facture', 'creer')) { require_once DOL_DOCUMENT_ROOT . '/compta/facture/class/facture.class.php'; $object->fetchObjectLinked(); @@ -2566,7 +2582,7 @@ if ($action == 'create') { print ''; print ''; print ''; - print $form->selectDate($object->date, 're', '', '', 0, "editdate"); + print $form->selectDate($object->date, 're', 0, 0, 0, "editdate"); print ''; print ''; } else { @@ -2594,7 +2610,7 @@ if ($action == 'create') { print ''; print ''; print ''; - print $form->selectDate($object->fin_validite, 'ech', '', '', '', "editecheance"); + print $form->selectDate($object->fin_validite, 'ech', 0, 0, 0, "editecheance"); print ''; print ''; } else { @@ -2658,7 +2674,7 @@ if ($action == 'create') { // Delivery delay print ''."\n"; -if (isModEnabled('categorie') && $user->hasRight('categorie', 'lire')) { +if (isModEnabled('category') && $user->hasRight('categorie', 'lire')) { // Customer Categories print ''; $i = 0; while ($i < $totalarray['nbfield']) { @@ -100,12 +102,12 @@ function printTotalValCell($type, $val) switch ($type) { case 'duration': print ''; break; case 'string': // This type is no more used. type is now varchar(x) print ''; break; case 'stock': diff --git a/htdocs/core/tpl/login.tpl.php b/htdocs/core/tpl/login.tpl.php index 7bedfdecfef..e7eea603e18 100644 --- a/htdocs/core/tpl/login.tpl.php +++ b/htdocs/core/tpl/login.tpl.php @@ -27,7 +27,7 @@ if (!defined('NOBROWSERNOTIF')) { // Protection to avoid direct call of template if (empty($conf) || !is_object($conf)) { print "Error, template page can't be called as URL"; - exit; + exit(1); } // DDOS protection @@ -204,7 +204,7 @@ if ($disablenofollow) { } ?> -" name="username" class="flat input-icon-user minwidth150" value="" tabindex="1" autofocus="autofocus" /> +" name="username" class="flat input-icon-user minwidth150" value="" tabindex="1" autofocus="autofocus" autocapitalize="off" autocomplete="on" spellcheck="false" autocorrect="off" /> @@ -402,9 +402,9 @@ if (!empty($_SESSION['dol_loginmesg'])) { $message = $_SESSION['dol_loginmesg']; // By default this is an error message if (preg_match('//', $message)) { // if it contains this comment, this is a warning message $message = str_replace('', '', $message); - print '
'; + print '
- '; $coldisplay++; @@ -472,7 +477,7 @@ if ($nolinesbefore) { - @@ -507,21 +512,21 @@ if ($nolinesbefore) { $coldisplay++; ?> - %'; - $coldisplay++; - } - if (getDolGlobalString('DISPLAY_MARK_RATES')) { - echo ''; - $coldisplay++; - } + %'; + $coldisplay++; + } + if (getDolGlobalString('DISPLAY_MARK_RATES')) { + echo ''; + $coldisplay++; + } } } $coldisplay += $colspan; @@ -533,15 +538,15 @@ if ($nolinesbefore) { element == 'contrat')) && $dateSelector && GETPOST('type') != '0') { // We show date field if required - print ''."\n"; + print ''."\n"; if (getDolGlobalString('MAIN_VIEW_LINE_NUMBER')) { print ''; } - print ''; - print ''."\n"; + print ''; + print ''; + print ''."\n"; } @@ -775,7 +780,7 @@ if (!empty($usemargins) && $user->hasRight('margins', 'creer')) { } } }); - /* When changing predefined product, we reload list of supplier prices required for margin combo */ $("#idprod, #idprodfournprice").change(function() @@ -887,18 +892,18 @@ if (!empty($usemargins) && $user->hasRight('margins', 'creer')) { console.log("stringforvatrateselection="+stringforvatrateselection+" -> value of option label for this key="+$('#tva_tx option[value="'+stringforvatrateselection+'"]').val()); $('#tva_tx option[value="'+stringforvatrateselection+'"]').prop('selected', true); - - var proddesc = data.desc_trans; - - var proddesc = data.desc; - - console.log("objectline_create.tpl Load description into text area : "+proddesc); + if (getDolGlobalInt('PRODUIT_AUTOFILL_DESC') == 1) { + if (getDolGlobalInt('MAIN_MULTILANGS') && getDolGlobalString('PRODUIT_TEXTS_IN_THIRDPARTY_LANGUAGE')) { ?> + var proddesc = data.desc_trans; + + var proddesc = data.desc; + + console.log("objectline_create.tpl Load description into text area : "+proddesc); + if (typeof CKEDITOR == "object" && typeof CKEDITOR.instances != "undefined") { var editor = CKEDITOR.instances['dp_desc']; @@ -906,25 +911,25 @@ if (!empty($usemargins) && $user->hasRight('margins', 'creer')) { editor.setData(proddesc); } } - + jQuery('#dp_desc').text(proddesc); + - + if (getDolGlobalString('PRODUCT_LOAD_EXTRAFIELD_INTO_OBJECTLINES')) { ?> jQuery.each(data.array_options, function( key, value ) { jQuery('div[class*="det'+key.replace('options_','_extras_')+'"] > #'+key).val(value); }); - + }, 'json' ); } - hasRight('margins', 'creer')) { @@ -1033,7 +1038,7 @@ if (!empty($usemargins) && $user->hasRight('margins', 'creer')) { }, 'json'); - diff --git a/htdocs/core/tpl/objectline_edit.tpl.php b/htdocs/core/tpl/objectline_edit.tpl.php index 948ee08ae50..cf4ddd5c88b 100644 --- a/htdocs/core/tpl/objectline_edit.tpl.php +++ b/htdocs/core/tpl/objectline_edit.tpl.php @@ -36,7 +36,7 @@ // Protection to avoid direct call of template if (empty($object) || !is_object($object)) { print "Error, template page can't be called as URL"; - exit; + exit(1); } @@ -129,13 +129,14 @@ $coldisplay++; fk_parent_line); + $fk_parent_line = (GETPOST('fk_parent_line') ? GETPOSTINT('fk_parent_line') : $line->fk_parent_line); $parameters = array('line'=>$line, 'fk_parent_line'=>$fk_parent_line, 'var'=>$var, 'dateSelector'=>$dateSelector, 'seller'=>$seller, 'buyer'=>$buyer); $reshook = $hookmanager->executeHooks('formEditProductOptions', $parameters, $this, $action); } $situationinvoicelinewithparent = 0; if ($line->fk_prev_id != null && in_array($object->element, array('facture', 'facturedet'))) { + // @phan-suppress-next-line PhanUndeclaredConstantOfClass if ($object->type == $object::TYPE_SITUATION) { // The constant TYPE_SITUATION exists only for object invoice // Set constant to disallow editing during a situation cycle $situationinvoicelinewithparent = 1; @@ -186,10 +187,10 @@ $coldisplay++; } echo '
'; echo $langs->trans('AutoFillDateFrom').' '; - echo $form->selectyesno('date_start_fill', GETPOSTISSET('date_start_fill') ? GETPOST('date_start_fill', 'int') : $line->date_start_fill, 1); + echo $form->selectyesno('date_start_fill', GETPOSTISSET('date_start_fill') ? GETPOSTINT('date_start_fill') : $line->date_start_fill, 1); echo ' - '; echo $langs->trans('AutoFillDateTo').' '; - echo $form->selectyesno('date_end_fill', GETPOSTISSET('date_end_fill') ? GETPOST('date_end_fill', 'int') : $line->date_end_fill, 1); + echo $form->selectyesno('date_end_fill', GETPOSTISSET('date_end_fill') ? GETPOSTINT('date_end_fill') : $line->date_end_fill, 1); } ?> @@ -357,11 +358,43 @@ $coldisplay++; '; // Payment term @@ -2657,7 +2660,7 @@ if ($action == 'create') { // Due date print ''; // Payment mode @@ -2667,7 +2670,7 @@ if ($action == 'create') { print ''; // Bank Account - if (isModEnabled("banque")) { + if (isModEnabled("bank")) { print ''; print ''; } @@ -3083,12 +3090,13 @@ if ($action == 'create') { $close[$i]['reason'] = $form->textwithpicto($langs->transnoentities("Other"), $close[$i]['label'], 1); $i++; // arrayreasons[code]=reason + $arrayreasons = array(); foreach ($close as $key => $val) { $arrayreasons[$close[$key]['code']] = $close[$key]['reason']; } // Create a form table - $formquestion = array('text' => $langs->trans("ConfirmClassifyPaidPartiallyQuestion"), array('type' => 'radio', 'name' => 'close_code', 'label' => $langs->trans("Reason"), 'values' => $arrayreasons), array('type' => 'text', 'name' => 'close_note', 'label' => $langs->trans("Comment"), 'value' => '', 'morecss' => 'minwidth300')); + $formquestion = array('text' => $langs->trans("ConfirmClassifyPaidPartiallyQuestion"), 0 => array('type' => 'radio', 'name' => 'close_code', 'label' => $langs->trans("Reason"), 'values' => $arrayreasons), 1 => array('type' => 'text', 'name' => 'close_note', 'label' => $langs->trans("Comment"), 'value' => '', 'morecss' => 'minwidth300')); // Incomplete payment. We ask if the reason is discount or other $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?facid='.$object->id, $langs->trans('ClassifyPaid'), $langs->trans('ConfirmClassifyPaidPartially', $object->ref), 'confirm_paid_partially', $formquestion, "yes", 1, 310); } @@ -3109,7 +3117,7 @@ if ($action == 'create') { $arrayreasons[$close[2]['code']] = $close[2]['reason']; // Create a form table - $formquestion = array('text' => $langs->trans("ConfirmCancelBillQuestion"), array('type' => 'radio', 'name' => 'close_code', 'label' => $langs->trans("Reason"), 'values' => $arrayreasons), array('type' => 'text', 'name' => 'close_note', 'label' => $langs->trans("Comment"), 'value' => '', 'morecss' => 'minwidth300')); + $formquestion = array('text' => $langs->trans("ConfirmCancelBillQuestion"), 0 => array('type' => 'radio', 'name' => 'close_code', 'label' => $langs->trans("Reason"), 'values' => $arrayreasons), 1 => array('type' => 'text', 'name' => 'close_note', 'label' => $langs->trans("Comment"), 'value' => '', 'morecss' => 'minwidth300')); $formconfirm = $form->formconfirm($_SERVER['PHP_SELF'].'?id='.$object->id, $langs->trans('CancelBill'), $langs->trans('ConfirmCancelBill', $object->ref), 'confirm_canceled', $formquestion, "yes", 1, 280); } @@ -3175,7 +3183,7 @@ if ($action == 'create') { } if (!$formconfirm) { - $parameters = array('formConfirm' => $formconfirm, 'lineid'=>$lineid); + $parameters = array('formConfirm' => $formconfirm, 'lineid' => $lineid); $reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook if (empty($reshook)) { $formconfirm .= $hookmanager->resPrint; @@ -3431,7 +3439,7 @@ if ($action == 'create') { } // Bank Account - if (isModEnabled("banque")) { + if (isModEnabled("bank")) { print ''; + + + // Price Label + print ''; + print ''; + print '
 
'.$langs->trans("ActionDoneBy").''; - print $form->select_dolusers(GETPOSTISSET("doneby") ? GETPOST("doneby", 'int') : (!empty($object->userdoneid) && $percent == 100 ? $object->userdoneid : 0), 'doneby', 1); - print '
'.$langs->trans("Location").'
'.$langs->trans("Categories").''; $cate_arbo = $form->select_all_categories(Categorie::TYPE_ACTIONCOMM, '', 'parent', 64, 0, 1); @@ -1473,7 +1443,7 @@ if ($action == 'create') { if (empty($donotclearsession)) { $assignedtoresource = GETPOST("assignedtoresource"); if ($assignedtoresource) { - $listofresourceid[$assignedtoresource] = array('id'=>$assignedtoresource, 'mandatory'=>0); // Owner first + $listofresourceid[$assignedtoresource] = array('id' => $assignedtoresource, 'mandatory' => 0); // Owner first } $_SESSION['assignedtoresource'] = json_encode($listofresourceid); } else { @@ -1494,11 +1464,11 @@ if ($action == 'create') { // Status print '
'.$langs->trans("Status").' / '.$langs->trans("Percentage").''; - $percent = $complete !=='' ? $complete : -1; + $percent = $complete !== '' ? $complete : -1; if (GETPOSTISSET('status')) { $percent = GETPOST('status'); } elseif (GETPOSTISSET('percentage')) { - $percent = GETPOST('percentage', 'int'); + $percent = GETPOSTINT('percentage'); } else { if ($complete == '0' || GETPOST("afaire") == 1) { $percent = '0'; @@ -1520,11 +1490,11 @@ if ($action == 'create') { if (isModEnabled("societe")) { // Related company print '
'.$langs->trans("ActionOnCompany").''; - if (GETPOST('socid', 'int') > 0) { + if (GETPOSTINT('socid') > 0) { $societe = new Societe($db); - $societe->fetch(GETPOST('socid', 'int')); + $societe->fetch(GETPOSTINT('socid')); print $societe->getNomUrl(1); - print ''; + print ''; } else { $events = array(); $events[] = array('method' => 'getContacts', 'url' => dol_buildpath('/core/ajax/contacts.php?showempty=1', 1), 'htmlname' => 'contactid', 'params' => array('add-customer-contact' => 'disabled')); @@ -1540,11 +1510,11 @@ if ($action == 'create') { // Related contact print '
'.$langs->trans("ActionOnContact").''; $preselectedids = GETPOST('socpeopleassigned', 'array'); - if (GETPOST('contactid', 'int')) { - $preselectedids[GETPOST('contactid', 'int')] = GETPOST('contactid', 'int'); + if (GETPOSTINT('contactid')) { + $preselectedids[GETPOSTINT('contactid')] = GETPOSTINT('contactid'); } - if ($origin=='contact') { - $preselectedids[GETPOST('originid', 'int')] = GETPOST('originid', 'int'); + if ($origin == 'contact') { + $preselectedids[GETPOSTINT('originid')] = GETPOSTINT('originid'); } // select "all" or "none" contact by default if (getDolGlobalInt('MAIN_ACTIONCOM_CAN_ADD_ANY_CONTACT')) { @@ -1561,7 +1531,7 @@ if ($action == 'create') { if (isModEnabled('project')) { $langs->load("projects"); - $projectid = GETPOST('projectid', 'int'); + $projectid = GETPOSTINT('projectid'); print '
'.$langs->trans("Project").''; print img_picto('', 'project', 'class="pictofixedwidth"'); @@ -1596,7 +1566,7 @@ if ($action == 'create') { $projectsListId = $projectid; } - $tid = GETPOSTISSET("projecttaskid") ? GETPOST("projecttaskid", 'int') : (GETPOSTISSET("taskid") ? GETPOST("taskid", 'int') : ''); + $tid = GETPOSTISSET("projecttaskid") ? GETPOSTINT("projecttaskid") : (GETPOSTISSET("taskid") ? GETPOSTINT("taskid") : ''); $formproject->selectTasks((!empty($societe->id) ? $societe->id : -1), $tid, 'taskid', 24, 0, '1', 1, 0, 0, 'maxwidth500 widthcentpercentminusxx', $projectsListId); print '
'.$langs->trans("Priority").''; - print ''; + print ''; print '
'.$langs->trans("ReminderTime").''; - print ' '; + print ' '; print $form->selectTypeDuration('offsetunit', 'i', array('y', 'm')); print '
'; $tzforfullday = getDolGlobalString('MAIN_STORE_FULL_EVENT_IN_GMT'); - if (GETPOST("afaire") == 1) { - print $form->selectDate($datep ? $datep : $object->datep, 'ap', 1, 1, 0, "action", 1, 1, 0, 'fulldaystart', '', '', '', 1, '', '', $object->fulldayevent ? ($tzforfullday ? $tzforfullday : 'tzuserrel') : 'tzuserrel'); - } elseif (GETPOST("afaire") == 2) { - print $form->selectDate($datep ? $datep : $object->datep, 'ap', 1, 1, 1, "action", 1, 1, 0, 'fulldaystart', '', '', '', 1, '', '', $object->fulldayevent ? ($tzforfullday ? $tzforfullday : 'tzuserrel') : 'tzuserrel'); - } else { - print $form->selectDate($datep ? $datep : $object->datep, 'ap', 1, 1, 1, "action", 1, 1, 0, 'fulldaystart', '', '', '', 1, '', '', $object->fulldayevent ? ($tzforfullday ? $tzforfullday : 'tzuserrel') : 'tzuserrel'); - } + print $form->selectDate($datep ? $datep : $object->datep, 'ap', 1, 1, 0, "action", 1, 1, 0, 'fulldaystart', '', '', '', 1, '', '', $object->fulldayevent ? ($tzforfullday ? $tzforfullday : 'tzuserrel') : 'tzuserrel'); print '     -     '; - if (GETPOST("afaire") == 1) { - print $form->selectDate($datef ? $datef : $object->datef, 'p2', 1, 1, 1, "action", 1, 0, 0, 'fulldayend', '', '', '', 1, '', '', $object->fulldayevent ? ($tzforfullday ? $tzforfullday : 'tzuserrel') : 'tzuserrel'); - } elseif (GETPOST("afaire") == 2) { - print $form->selectDate($datef ? $datef : $object->datef, 'p2', 1, 1, 1, "action", 1, 0, 0, 'fulldayend', '', '', '', 1, '', '', $object->fulldayevent ? ($tzforfullday ? $tzforfullday : 'tzuserrel') : 'tzuserrel'); - } else { - print $form->selectDate($datef ? $datef : $object->datef, 'p2', 1, 1, 1, "action", 1, 0, 0, 'fulldayend', '', '', '', 1, '', '', $object->fulldayevent ? ($tzforfullday ? $tzforfullday : 'tzuserrel') : 'tzuserrel'); - } + print $form->selectDate($datef ? $datef : $object->datef, 'p2', 1, 1, 1, "action", 1, 0, 0, 'fulldayend', '', '', '', 1, '', '', $object->fulldayevent ? ($tzforfullday ? $tzforfullday : 'tzuserrel') : 'tzuserrel'); print '
 
'.$langs->trans("ActionDoneBy").''; - print $form->select_dolusers($object->userdoneid > 0 ? $object->userdoneid : -1, 'doneby', 1); - print '
'.$langs->trans("Location").'
'.$langs->trans("Status").' / '.$langs->trans("Percentage").''; - $percent = GETPOSTISSET("percentage") ? GETPOST("percentage", "int") : $object->percentage; + $percent = GETPOSTISSET("percentage") ? GETPOSTINT("percentage") : $object->percentage; $formactions->form_select_status_action('formaction', $percent, 1, 'complete', 0, 0, 'maxwidth200'); print '
'.$langs->trans("Categories").''; $cate_arbo = $form->select_all_categories(Categorie::TYPE_ACTIONCOMM, '', 'parent', 64, 0, 1); $c = new Categorie($db); @@ -2253,9 +2204,9 @@ if ($id > 0) { $parameters = array(); $reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook if (empty($reshook)) { - $formconfirm.=$hookmanager->resPrint; + $formconfirm .= $hookmanager->resPrint; } elseif ($reshook > 0) { - $formconfirm=$hookmanager->resPrint; + $formconfirm = $hookmanager->resPrint; } // Print form confirm @@ -2403,10 +2354,10 @@ if ($id > 0) { if (empty($donotclearsession)) { if ($object->userownerid > 0) { $listofuserid[$object->userownerid] = array( - 'id'=>$object->userownerid, - 'transparency'=>$object->transparency, // Force transparency on owner from property of event - 'answer_status'=>$object->userassigned[$object->userownerid]['answer_status'], - 'mandatory'=>$object->userassigned[$object->userownerid]['mandatory'] + 'id' => $object->userownerid, + 'transparency' => $object->transparency, // Force transparency on owner from property of event + 'answer_status' => $object->userassigned[$object->userownerid]['answer_status'], + 'mandatory' => $object->userassigned[$object->userownerid]['mandatory'] ); } if (!empty($object->userassigned)) { // Now concat assigned users @@ -2440,19 +2391,8 @@ if ($id > 0) { */ print '
'.$langs->trans("ActionDoneBy").''; - if ($object->userdoneid > 0) { - $tmpuser = new User($db); - $tmpuser->fetch($object->userdoneid); - print $tmpuser->getNomUrl(1); - } - print '
'.$langs->trans("Categories").''; print $form->showCategories($object->id, Categorie::TYPE_ACTIONCOMM, 1); print "
'; $numdayinweek = (($i + (isset($conf->global->MAIN_START_WEEK) ? $conf->global->MAIN_START_WEEK : 1)) % 7); if (!empty($conf->dol_optimize_smallscreen)) { - $labelshort = array(0=>'SundayMin', 1=>'MondayMin', 2=>'TuesdayMin', 3=>'WednesdayMin', 4=>'ThursdayMin', 5=>'FridayMin', 6=>'SaturdayMin'); + $labelshort = array(0 => 'SundayMin', 1 => 'MondayMin', 2 => 'TuesdayMin', 3 => 'WednesdayMin', 4 => 'ThursdayMin', 5 => 'FridayMin', 6 => 'SaturdayMin'); print $langs->trans($labelshort[$numdayinweek]); } else { print $langs->trans("Day".$numdayinweek); @@ -1558,6 +1568,7 @@ if (empty($mode) || $mode == 'show_month') { // View by month $style .= ' cal_other_month_right'; } echo ' '; + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition show_day_events($db, $max_day_in_prev_month + $tmpday, $prev_month, $prev_year, $month, $style, $eventarray, $maxprint, $maxnbofchar, $newparam); echo " '; + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition show_day_events($db, $tmpday, $month, $year, $month, $style, $eventarray, $maxprint, $maxnbofchar, $newparam, 0, 60, 0, $bookcalcalendars); echo "'; + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition show_day_events($db, $tmpday - $max_day_in_month, $next_month, $next_year, $month, $style, $eventarray, $maxprint, $maxnbofchar, $newparam); echo "'; + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition show_day_events($db, $tmpday, $tmpmonth, $tmpyear, $month, $style, $eventarray, 0, $maxnbofchar, $newparam, 1, 300, 0, $bookcalcalendars); echo " '; //print ''.img_pdf().''; - $filearray = array('name'=>basename($file), 'fullname'=>$file, 'type'=>'file'); + $filearray = array('name' => basename($file), 'fullname' => $file, 'type' => 'file'); $out = ''; // Show file name with link to download diff --git a/htdocs/comm/card.php b/htdocs/comm/card.php index ac3c2b57bbb..796f17e710c 100644 --- a/htdocs/comm/card.php +++ b/htdocs/comm/card.php @@ -7,7 +7,7 @@ * Copyright (C) 2008 Raphael Bertrand (Resultic) * Copyright (C) 2010-2020 Juanjo Menent * Copyright (C) 2013 Alexandre Spangaro - * Copyright (C) 2015-2021 Frédéric France + * Copyright (C) 2021-2024 Frédéric France * Copyright (C) 2015 Marcos García * Copyright (C) 2020 Open-Dsi * Copyright (C) 2022 Anthony Berton @@ -36,53 +36,54 @@ require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; require_once DOL_DOCUMENT_ROOT.'/societe/class/client.class.php'; require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'; require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php'; -if (isModEnabled('facture')) { +if (isModEnabled('invoice')) { require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture-rec.class.php'; } if (isModEnabled("propal")) { require_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php'; } -if (isModEnabled('commande')) { +if (isModEnabled('order')) { require_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php'; } -if (isModEnabled("expedition")) { +if (isModEnabled("shipping")) { require_once DOL_DOCUMENT_ROOT.'/expedition/class/expedition.class.php'; } -if (isModEnabled('contrat')) { +if (isModEnabled('contract')) { require_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php'; } -if (isModEnabled('adherent')) { +if (isModEnabled('member')) { require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php'; } -if (isModEnabled('ficheinter')) { +if (isModEnabled('intervention')) { require_once DOL_DOCUMENT_ROOT.'/fichinter/class/fichinter.class.php'; } // Load translation files required by the page $langs->loadLangs(array('companies', 'banks')); -if (isModEnabled('contrat')) { +if (isModEnabled('contract')) { $langs->load("contracts"); } -if (isModEnabled('commande')) { +if (isModEnabled('order')) { $langs->load("orders"); } -if (isModEnabled("expedition")) { +if (isModEnabled("shipping")) { $langs->load("sendings"); } -if (isModEnabled('facture')) { +if (isModEnabled('invoice')) { $langs->load("bills"); } if (isModEnabled('project')) { $langs->load("projects"); } -if (isModEnabled('ficheinter')) { +if (isModEnabled('intervention')) { $langs->load("interventions"); } if (isModEnabled('notification')) { @@ -91,12 +92,12 @@ if (isModEnabled('notification')) { $action = GETPOST('action', 'aZ09'); -$id = (GETPOST('socid', 'int') ? GETPOST('socid', 'int') : GETPOST('id', 'int')); +$id = (GETPOSTINT('socid') ? GETPOSTINT('socid') : GETPOSTINT('id')); -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -173,7 +174,7 @@ if (empty($reshook)) { // Payment terms of the settlement if ($action == 'setconditions' && $user->hasRight('societe', 'creer')) { $object->fetch($id); - $result = $object->setPaymentTerms(GETPOST('cond_reglement_id', 'int'), GETPOST('cond_reglement_id_deposit_percent', 'alpha')); + $result = $object->setPaymentTerms(GETPOSTINT('cond_reglement_id'), GETPOSTINT('cond_reglement_id_deposit_percent')); if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); } @@ -182,7 +183,7 @@ if (empty($reshook)) { // Payment mode if ($action == 'setmode' && $user->hasRight('societe', 'creer')) { $object->fetch($id); - $result = $object->setPaymentMethods(GETPOST('mode_reglement_id', 'int')); + $result = $object->setPaymentMethods(GETPOSTINT('mode_reglement_id')); if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); } @@ -200,7 +201,7 @@ if (empty($reshook)) { // Bank account if ($action == 'setbankaccount' && $user->hasRight('societe', 'creer')) { $object->fetch($id); - $result = $object->setBankAccount(GETPOST('fk_account', 'int')); + $result = $object->setBankAccount(GETPOSTINT('fk_account')); if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); } @@ -209,7 +210,7 @@ if (empty($reshook)) { // customer preferred shipping method if ($action == 'setshippingmethod' && $user->hasRight('societe', 'creer')) { $object->fetch($id); - $result = $object->setShippingMethod(GETPOST('shipping_method_id', 'int')); + $result = $object->setShippingMethod(GETPOSTINT('shipping_method_id')); if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); } @@ -219,7 +220,7 @@ if (empty($reshook)) { if ($action == 'setassujtva' && $user->hasRight('societe', 'creer')) { $object->fetch($id); $object->tva_assuj = GETPOSTINT('assujtva_value'); - $result = $object->update($object->id); + $result = $object->update($object->id, $user); if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); } @@ -297,7 +298,7 @@ if (empty($reshook)) { // warehouse if ($action == 'setwarehouse' && $user->hasRight('societe', 'creer')) { - $result = $object->setWarehouse(GETPOST('fk_warehouse', 'int')); + $result = $object->setWarehouse(GETPOSTINT('fk_warehouse')); } } @@ -440,7 +441,7 @@ if ($object->id > 0) { print "
'; print ''; print ''; print '
'; @@ -512,7 +513,7 @@ if ($object->id > 0) { } if ($object->client) { - if (isModEnabled('commande') && getDolGlobalString('ORDER_MANAGE_MIN_AMOUNT')) { + if (isModEnabled('order') && getDolGlobalString('ORDER_MANAGE_MIN_AMOUNT')) { print ''."\n"; print '
'; @@ -607,7 +608,7 @@ if ($object->id > 0) { } // Categories - if (isModEnabled('categorie') && $user->hasRight('categorie', 'lire')) { + if (isModEnabled('category') && $user->hasRight('categorie', 'lire')) { $langs->load("categories"); print '
'.$langs->trans("CustomersCategoriesShort").''; @@ -623,7 +624,7 @@ if ($object->id > 0) { include DOL_DOCUMENT_ROOT.'/societe/tpl/linesalesrepresentative.tpl.php'; // Module Adherent - if (isModEnabled('adherent')) { + if (isModEnabled('member')) { $langs->load("members"); $langs->load("users"); @@ -721,7 +722,7 @@ if ($object->id > 0) { } } - if (isModEnabled('commande') && $user->hasRight('commande', 'lire')) { + if (isModEnabled('order') && $user->hasRight('commande', 'lire')) { // Box commandes $tmp = $object->getOutstandingOrders(); $outstandingOpened = $tmp['opened']; @@ -742,7 +743,7 @@ if ($object->id > 0) { } } - if (isModEnabled('facture') && $user->hasRight('facture', 'lire')) { + if (isModEnabled('invoice') && $user->hasRight('facture', 'lire')) { // Box factures $tmp = $object->getOutstandingBills('customer', 0); $outstandingOpened = $tmp['opened']; @@ -917,7 +918,7 @@ if ($object->id > 0) { /* * Latest orders */ - if (isModEnabled('commande') && $user->hasRight('commande', 'lire')) { + if (isModEnabled('order') && $user->hasRight('commande', 'lire')) { $param =""; $sql = "SELECT s.nom, s.rowid"; @@ -1028,7 +1029,7 @@ if ($object->id > 0) { /* * Latest shipments */ - if (isModEnabled("expedition") && $user->hasRight('expedition', 'lire')) { + if (isModEnabled("shipping") && $user->hasRight('expedition', 'lire')) { $sql = 'SELECT e.rowid as id'; $sql .= ', e.ref, e.entity'; $sql .= ', e.date_creation'; @@ -1126,7 +1127,7 @@ if ($object->id > 0) { /* * Latest contracts */ - if (isModEnabled('contrat') && $user->hasRight('contrat', 'lire')) { + if (isModEnabled('contract') && $user->hasRight('contrat', 'lire')) { $sql = "SELECT s.nom, s.rowid, c.rowid as id, c.ref as ref, c.statut as contract_status, c.datec as dc, c.date_contrat as dcon, c.ref_customer as refcus, c.ref_supplier as refsup, c.entity,"; $sql .= " c.last_main_doc, c.model_pdf"; $sql .= " FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."contrat as c"; @@ -1234,7 +1235,7 @@ if ($object->id > 0) { /* * Latest interventions */ - if (isModEnabled('ficheinter') && $user->hasRight('ficheinter', 'lire')) { + if (isModEnabled('intervention') && $user->hasRight('ficheinter', 'lire')) { $sql = "SELECT s.nom, s.rowid, f.rowid as id, f.ref, f.fk_statut, f.duree as duration, f.datei as startdate, f.entity"; $sql .= " FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."fichinter as f"; $sql .= " WHERE f.fk_soc = s.rowid"; @@ -1320,7 +1321,7 @@ if ($object->id > 0) { /* * Latest invoices templates */ - if (isModEnabled('facture') && $user->hasRight('facture', 'lire')) { + if (isModEnabled('invoice') && $user->hasRight('facture', 'lire')) { $sql = 'SELECT f.rowid as id, f.titre as ref'; $sql .= ', f.total_ht'; $sql .= ', f.total_tva'; @@ -1421,7 +1422,7 @@ if ($object->id > 0) { /* * Latest invoices */ - if (isModEnabled('facture') && $user->hasRight('facture', 'lire')) { + if (isModEnabled('invoice') && $user->hasRight('facture', 'lire')) { $sql = 'SELECT f.rowid as facid, f.ref, f.type'; $sql .= ', f.total_ht'; $sql .= ', f.total_tva'; @@ -1579,7 +1580,7 @@ if ($object->id > 0) { print ''; } - if (isModEnabled('commande') && $user->hasRight('commande', 'creer') && $object->status == 1) { + if (isModEnabled('order') && $user->hasRight('commande', 'creer') && $object->status == 1) { $langs->load("orders"); print ''; } @@ -1589,7 +1590,7 @@ if ($object->id > 0) { print ''; } - if (isModEnabled('ficheinter') && $user->hasRight('ficheinter', 'creer') && $object->status == 1) { + if (isModEnabled('intervention') && $user->hasRight('ficheinter', 'creer') && $object->status == 1) { $langs->load("fichinter"); print ''; } @@ -1601,14 +1602,14 @@ if ($object->id > 0) { print ''; } - if (isModEnabled('facture') && $object->status == 1) { + if (isModEnabled('invoice') && $object->status == 1) { if (!$user->hasRight('facture', 'creer')) { $langs->load("bills"); print ''; } else { $langs->loadLangs(array("orders", "bills")); - if (isModEnabled('commande')) { + if (isModEnabled('order')) { if ($object->client != 0 && $object->client != 2) { if (!empty($orders2invoice) && $orders2invoice > 0) { print ''; diff --git a/htdocs/comm/contact.php b/htdocs/comm/contact.php index 255ab70afa7..a0eec00fa04 100644 --- a/htdocs/comm/contact.php +++ b/htdocs/comm/contact.php @@ -32,7 +32,7 @@ $langs->load("companies"); $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (!$sortorder) { $sortorder = "ASC"; } @@ -42,7 +42,7 @@ if (!$sortfield) { if ($page < 0) { $page = 0; } -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $offset = $limit * $page; $type = GETPOST('type', 'alpha'); @@ -53,7 +53,7 @@ $contactname = GETPOST('contactname'); $begin = GETPOST('begin', 'alpha'); // Security check -$socid = GETPOST('socid', 'int'); +$socid = GETPOSTINT('socid'); if ($user->socid) { $action = ''; $socid = $user->socid; diff --git a/htdocs/comm/index.php b/htdocs/comm/index.php index a8f940ba16e..77f0c7ea647 100644 --- a/htdocs/comm/index.php +++ b/htdocs/comm/index.php @@ -39,10 +39,10 @@ require_once DOL_DOCUMENT_ROOT.'/societe/class/client.class.php'; require_once DOL_DOCUMENT_ROOT.'/supplier_proposal/class/supplier_proposal.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/propal.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/order.lib.php'; -if (isModEnabled('contrat')) { +if (isModEnabled('contract')) { require_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php'; } -if (isModEnabled('ficheinter')) { +if (isModEnabled('intervention')) { require_once DOL_DOCUMENT_ROOT.'/fichinter/class/fichinter.class.php'; } @@ -54,10 +54,10 @@ $hookmanager->initHooks(array('commercialindex')); $langs->loadLangs(array("boxes", "commercial", "contracts", "orders", "propal", "supplier_proposal")); $action = GETPOST('action', 'aZ09'); -$bid = GETPOST('bid', 'int'); +$bid = GETPOSTINT('bid'); // Securite access client -$socid = GETPOST('socid', 'int'); +$socid = GETPOSTINT('socid'); if (isset($user->socid) && $user->socid > 0) { $action = ''; $socid = $user->socid; @@ -96,14 +96,14 @@ if (isModEnabled("propal")) { if (isModEnabled('supplier_proposal')) { $supplierproposalstatic = new SupplierProposal($db); } -if (isModEnabled('commande')) { +if (isModEnabled('order')) { $orderstatic = new Commande($db); } if (isModEnabled("supplier_order")) { $supplierorderstatic = new CommandeFournisseur($db); } -if (isModEnabled('ficheinter')) { +if (isModEnabled('intervention')) { $fichinterstatic = new Fichinter($db); } @@ -323,7 +323,7 @@ if (isModEnabled('supplier_proposal') && $user->hasRight("supplier_proposal", "l * Draft sales orders */ -if (isModEnabled('commande') && $user->hasRight('commande', 'lire')) { +if (isModEnabled('order') && $user->hasRight('commande', 'lire')) { $sql = "SELECT c.rowid, c.ref, c.ref_client, c.total_ht, c.total_tva, c.total_ttc, c.fk_statut as status"; $sql .= ", s.rowid as socid, s.nom as name, s.name_alias"; $sql .= ", s.code_client, s.code_compta, s.client"; @@ -518,7 +518,7 @@ if ((isModEnabled("fournisseur") && !getDolGlobalString('MAIN_USE_NEW_SUPPLIERMO /* * Draft interventions */ -if (isModEnabled('ficheinter')) { +if (isModEnabled('intervention')) { $sql = "SELECT f.rowid, f.ref, s.nom as name, f.fk_statut, f.duree as duration"; $sql .= ", s.rowid as socid, s.nom as name, s.name_alias"; $sql .= ", s.code_client, s.code_compta, s.client"; @@ -591,7 +591,7 @@ if (isModEnabled('ficheinter')) { addSummaryTableLine(3, $num, $nbofloop, $total, "NoIntervention"); finishSimpleTable(true); - print "
"; + $db->free($resql); } } @@ -817,7 +817,7 @@ if ((isModEnabled("supplier_order") || isModEnabled("supplier_invoice")) && $use /* * Latest contracts */ -if (isModEnabled('contrat') && $user->hasRight("contrat", "lire") && 0) { // TODO A REFAIRE DEPUIS NOUVEAU CONTRAT +if (isModEnabled('contract') && $user->hasRight("contrat", "lire") && 0) { // TODO A REFAIRE DEPUIS NOUVEAU CONTRAT $staticcontrat = new Contrat($db); $sql = "SELECT s.rowid as socid, s.nom as name, s.name_alias"; @@ -1014,7 +1014,7 @@ if (isModEnabled("propal") && $user->hasRight("propal", "lire")) { /* * Opened (validated) order */ -if (isModEnabled('commande') && $user->hasRight('commande', 'lire')) { +if (isModEnabled('order') && $user->hasRight('commande', 'lire')) { $sql = "SELECT c.rowid as commandeid, c.total_ttc, c.total_ht, c.total_tva, c.ref, c.ref_client, c.fk_statut, c.date_valid as dv, c.facture as billed"; $sql .= ", s.rowid as socid, s.nom as name, s.name_alias"; $sql .= ", s.code_client, s.code_compta, s.client"; diff --git a/htdocs/comm/mailing/advtargetemailing.php b/htdocs/comm/mailing/advtargetemailing.php index 73fc1826706..e0098643747 100644 --- a/htdocs/comm/mailing/advtargetemailing.php +++ b/htdocs/comm/mailing/advtargetemailing.php @@ -39,15 +39,15 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php'; // Load translation files required by the page $langs->loadLangs(array('mails', 'companies')); -if (isModEnabled('categorie')) { +if (isModEnabled('category')) { $langs->load("categories"); } // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -62,12 +62,12 @@ if (!$sortfield) { } $id = GETPOSTINT('id'); -$rowid = GETPOST('rowid', 'int'); +$rowid = GETPOSTINT('rowid'); $action = GETPOST('action', 'aZ09'); $search_nom = GETPOST("search_nom"); $search_prenom = GETPOST("search_prenom"); $search_email = GETPOST("search_email"); -$template_id = GETPOST('template_id', 'int'); +$template_id = GETPOSTINT('template_id'); // Do we click on purge search criteria ? if (GETPOST('button_removefilter_x', 'alpha')) { @@ -134,14 +134,14 @@ if ($action == 'add') { $dtarr = array(); $dtarr = explode('_', $key); if (!array_key_exists('options_'.$dtarr[1].'_st_dt', $array_query)) { - $array_query['options_'.$dtarr[1].'_st_dt'] = dol_mktime(0, 0, 0, GETPOST('options_'.$dtarr[1].'_st_dtmonth', 'int'), GETPOST('options_'.$dtarr[1].'_st_dtday', 'int'), GETPOST('options_'.$dtarr[1].'_st_dtyear', 'int')); + $array_query['options_'.$dtarr[1].'_st_dt'] = dol_mktime(0, 0, 0, GETPOSTINT('options_'.$dtarr[1].'_st_dtmonth'), GETPOSTINT('options_'.$dtarr[1].'_st_dtday'), GETPOSTINT('options_'.$dtarr[1].'_st_dtyear')); } } elseif (preg_match("/end_dt/", $key)) { // Special case for end date come with 3 inputs day, month, year $dtarr = array(); $dtarr = explode('_', $key); if (!array_key_exists('options_'.$dtarr[1].'_end_dt', $array_query)) { - $array_query['options_'.$dtarr[1].'_end_dt'] = dol_mktime(0, 0, 0, GETPOST('options_'.$dtarr[1].'_end_dtmonth', 'int'), GETPOST('options_'.$dtarr[1].'_end_dtday', 'int'), GETPOST('options_'.$dtarr[1].'_end_dtyear', 'int')); + $array_query['options_'.$dtarr[1].'_end_dt'] = dol_mktime(0, 0, 0, GETPOSTINT('options_'.$dtarr[1].'_end_dtmonth'), GETPOSTINT('options_'.$dtarr[1].'_end_dtday'), GETPOSTINT('options_'.$dtarr[1].'_end_dtyear')); } } else { $array_query[$key] = GETPOST($key); @@ -154,14 +154,14 @@ if ($action == 'add') { $dtarr = array(); $dtarr = explode('_', $key); if (!array_key_exists('options_'.$dtarr[1].'_st_dt_cnct', $array_query)) { - $array_query['options_'.$dtarr[1].'_st_dt_cnct'] = dol_mktime(0, 0, 0, GETPOST('options_'.$dtarr[1].'_st_dtmonth_cnct', 'int'), GETPOST('options_'.$dtarr[1].'_st_dtday_cnct', 'int'), GETPOST('options_'.$dtarr[1].'_st_dtyear_cnct', 'int')); + $array_query['options_'.$dtarr[1].'_st_dt_cnct'] = dol_mktime(0, 0, 0, GETPOSTINT('options_'.$dtarr[1].'_st_dtmonth_cnct'), GETPOSTINT('options_'.$dtarr[1].'_st_dtday_cnct'), GETPOSTINT('options_'.$dtarr[1].'_st_dtyear_cnct')); } } elseif (preg_match("/end_dt/", $key)) { // Special case for end date come with 3 inputs day, month, year $dtarr = array(); $dtarr = explode('_', $key); if (!array_key_exists('options_'.$dtarr[1].'_end_dt_cnct', $array_query)) { - $array_query['options_'.$dtarr[1].'_end_dt_cnct'] = dol_mktime(0, 0, 0, GETPOST('options_'.$dtarr[1].'_end_dtmonth_cnct', 'int'), GETPOST('options_'.$dtarr[1].'_end_dtday_cnct', 'int'), GETPOST('options_'.$dtarr[1].'_end_dtyear_cnct', 'int')); + $array_query['options_'.$dtarr[1].'_end_dt_cnct'] = dol_mktime(0, 0, 0, GETPOSTINT('options_'.$dtarr[1].'_end_dtmonth_cnct'), GETPOSTINT('options_'.$dtarr[1].'_end_dtday_cnct'), GETPOSTINT('options_'.$dtarr[1].'_end_dtyear_cnct')); } } else { $array_query[$key] = GETPOST($key); @@ -185,7 +185,7 @@ if ($action == 'add') { if ($key == $date_key) { $dt = GETPOST($date_key); if (!empty($dt)) { - $array_query[$key] = dol_mktime(0, 0, 0, GETPOST($date_key.'month', 'int'), GETPOST($date_key.'day', 'int'), GETPOST($date_key.'year', 'int')); + $array_query[$key] = dol_mktime(0, 0, 0, GETPOSTINT($date_key.'month'), GETPOSTINT($date_key.'day'), GETPOSTINT($date_key.'year')); } else { $array_query[$key] = ''; } @@ -285,14 +285,14 @@ if ($action == 'savefilter' || $action == 'createfilter') { $dtarr = array(); $dtarr = explode('_', $key); if (!array_key_exists('options_'.$dtarr[1].'_st_dt', $array_query)) { - $array_query['options_'.$dtarr[1].'_st_dt'] = dol_mktime(0, 0, 0, GETPOST('options_'.$dtarr[1].'_st_dtmonth', 'int'), GETPOST('options_'.$dtarr[1].'_st_dtday', 'int'), GETPOST('options_'.$dtarr[1].'_st_dtyear', 'int')); + $array_query['options_'.$dtarr[1].'_st_dt'] = dol_mktime(0, 0, 0, GETPOSTINT('options_'.$dtarr[1].'_st_dtmonth'), GETPOSTINT('options_'.$dtarr[1].'_st_dtday'), GETPOSTINT('options_'.$dtarr[1].'_st_dtyear')); } } elseif (preg_match("/end_dt/", $key)) { // Special case for end date come with 3 inputs day, month, year $dtarr = array(); $dtarr = explode('_', $key); if (!array_key_exists('options_'.$dtarr[1].'_end_dt', $array_query)) { - $array_query['options_'.$dtarr[1].'_end_dt'] = dol_mktime(0, 0, 0, GETPOST('options_'.$dtarr[1].'_end_dtmonth', 'int'), GETPOST('options_'.$dtarr[1].'_end_dtday', 'int'), GETPOST('options_'.$dtarr[1].'_end_dtyear', 'int')); + $array_query['options_'.$dtarr[1].'_end_dt'] = dol_mktime(0, 0, 0, GETPOSTINT('options_'.$dtarr[1].'_end_dtmonth'), GETPOSTINT('options_'.$dtarr[1].'_end_dtday'), GETPOSTINT('options_'.$dtarr[1].'_end_dtyear')); // print $array_query['options_'.$dtarr[1].'_end_dt']; // 01/02/1013=1361228400 } @@ -306,14 +306,14 @@ if ($action == 'savefilter' || $action == 'createfilter') { $dtarr = array(); $dtarr = explode('_', $key); if (!array_key_exists('options_'.$dtarr[1].'_st_dt_cnct', $array_query)) { - $array_query['options_'.$dtarr[1].'_st_dt_cnct'] = dol_mktime(0, 0, 0, GETPOST('options_'.$dtarr[1].'_st_dtmonth_cnct', 'int'), GETPOST('options_'.$dtarr[1].'_st_dtday_cnct', 'int'), GETPOST('options_'.$dtarr[1].'_st_dtyear_cnct', 'int')); + $array_query['options_'.$dtarr[1].'_st_dt_cnct'] = dol_mktime(0, 0, 0, GETPOSTINT('options_'.$dtarr[1].'_st_dtmonth_cnct'), GETPOSTINT('options_'.$dtarr[1].'_st_dtday_cnct'), GETPOSTINT('options_'.$dtarr[1].'_st_dtyear_cnct')); } } elseif (preg_match("/end_dt/", $key)) { // Special case for end date come with 3 inputs day, month, year $dtarr = array(); $dtarr = explode('_', $key); if (!array_key_exists('options_'.$dtarr[1].'_end_dt_cnct', $array_query)) { - $array_query['options_'.$dtarr[1].'_end_dt_cnct'] = dol_mktime(0, 0, 0, GETPOST('options_'.$dtarr[1].'_end_dtmonth_cnct', 'int'), GETPOST('options_'.$dtarr[1].'_end_dtday_cnct', 'int'), GETPOST('options_'.$dtarr[1].'_end_dtyear_cnct', 'int')); + $array_query['options_'.$dtarr[1].'_end_dt_cnct'] = dol_mktime(0, 0, 0, GETPOSTINT('options_'.$dtarr[1].'_end_dtmonth_cnct'), GETPOSTINT('options_'.$dtarr[1].'_end_dtday_cnct'), GETPOSTINT('options_'.$dtarr[1].'_end_dtyear_cnct')); // print $array_query['cnct_options_'.$dtarr[1].'_end_dt']; // 01/02/1013=1361228400 } @@ -339,7 +339,7 @@ if ($action == 'savefilter' || $action == 'createfilter') { if ($key == $date_key) { $dt = GETPOST($date_key); if (!empty($dt)) { - $array_query[$key] = dol_mktime(0, 0, 0, GETPOST($date_key.'month', 'int'), GETPOST($date_key.'day', 'int'), GETPOST($date_key.'year', 'int')); + $array_query[$key] = dol_mktime(0, 0, 0, GETPOSTINT($date_key.'month'), GETPOSTINT($date_key.'day'), GETPOSTINT($date_key.'year')); } else { $array_query[$key] = ''; } @@ -448,6 +448,7 @@ if ($object->fetch($id) >= 0) { $nbemail = ($object->nbemail ? $object->nbemail : '0'); if (getDolGlobalString('MAILING_LIMIT_SENDBYWEB') && $conf->global->MAILING_LIMIT_SENDBYWEB < $nbemail) { $text = $langs->trans('LimitSendingEmailing', getDolGlobalString('MAILING_LIMIT_SENDBYWEB')); + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition print $form->textwithpicto($nbemail, $text, 1, 'warning'); } else { print $nbemail; diff --git a/htdocs/comm/mailing/card.php b/htdocs/comm/mailing/card.php index 645d24a0e75..9c512bfc047 100644 --- a/htdocs/comm/mailing/card.php +++ b/htdocs/comm/mailing/card.php @@ -3,6 +3,7 @@ * Copyright (C) 2005-2019 Laurent Destailleur * Copyright (C) 2005-2016 Regis Houssin * Copyright (C) 2021 Waël Almoman + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -42,7 +43,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php'; // Load translation files required by the page $langs->loadLangs(array("mails", "admin")); -$id = (GETPOST('mailid', 'int') ? GETPOST('mailid', 'int') : GETPOST('id', 'int')); +$id = (GETPOSTINT('mailid') ? GETPOSTINT('mailid') : GETPOSTINT('id')); $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm', 'alpha'); @@ -70,7 +71,7 @@ $signature = ((!empty($user->signature) && !getDolGlobalString('MAIN_MAIL_DO_NOT $targetobject = null; // Not defined with mass emailing -$parameters = array('mode'=>'emailing'); +$parameters = array('mode' => 'emailing'); $substitutionarray = FormMail::getAvailableSubstitKey('emailing', $targetobject); $object->substitutionarrayfortest = $substitutionarray; @@ -237,7 +238,7 @@ if (empty($reshook)) { $signature = ((!empty($user->signature) && !getDolGlobalString('MAIN_MAIL_DO_NOT_USE_SIGN')) ? $user->signature : ''); - $parameters = array('mode'=>'emailing'); + $parameters = array('mode' => 'emailing'); $substitutionarray = getCommonSubstitutionArray($langs, 0, array('object', 'objectamount'), $targetobject); // Note: On mass emailing, this is null because be don't know object // Array of possible substitutions (See also file mailing-send.php that should manage same substitutions) @@ -437,19 +438,14 @@ if (empty($reshook)) { // Loop finished, set global statut of mail if ($nbko > 0) { $statut = 2; // Status 'sent partially' (because at least one error) - if ($nbok > 0) { - setEventMessages($langs->transnoentitiesnoconv("EMailSentToNRecipients", $nbok), null, 'mesgs'); - } else { - setEventMessages($langs->transnoentitiesnoconv("EMailSentToNRecipients", $nbok), null, 'mesgs'); - } + setEventMessages($langs->transnoentitiesnoconv("EMailSentToNRecipients", $nbok), null, 'mesgs'); } else { if ($nbok >= $num) { $statut = 3; // Send to everybody - setEventMessages($langs->transnoentitiesnoconv("EMailSentToNRecipients", $nbok), null, 'mesgs'); } else { $statut = 2; // Status 'sent partially' (because not send to everybody) - setEventMessages($langs->transnoentitiesnoconv("EMailSentToNRecipients", $nbok), null, 'mesgs'); } + setEventMessages($langs->transnoentitiesnoconv("EMailSentToNRecipients", $nbok), null, 'mesgs'); } $sql = "UPDATE ".MAIN_DB_PREFIX."mailing SET statut=".((int) $statut)." WHERE rowid = ".((int) $object->id); @@ -488,7 +484,7 @@ if (empty($reshook)) { $signature = ((!empty($user->signature) && !getDolGlobalString('MAIN_MAIL_DO_NOT_USE_SIGN')) ? $user->signature : ''); - $parameters = array('mode'=>'emailing'); + $parameters = array('mode' => 'emailing'); $substitutionarray = getCommonSubstitutionArray($langs, 0, array('object', 'objectamount'), $targetobject); // Note: On mass emailing, this is null because be don't know object // other are set at begin of page @@ -536,7 +532,7 @@ if (empty($reshook)) { setEventMessages($langs->trans("MailSuccessfulySent", $mailfile->getValidAddress($object->email_from, 2), $mailfile->getValidAddress($object->sendto, 2)), null, 'mesgs'); $action = ''; } else { - setEventMessages($langs->trans("ResultKo").'
'.$mailfile->error.' '.$result, null, 'errors'); + setEventMessages($langs->trans("ResultKo").'
'.$mailfile->error.' '.json_encode($result), null, 'errors'); $action = 'test'; } } @@ -547,7 +543,11 @@ if (empty($reshook)) { $mesgs = array(); $object->messtype = (string) GETPOST("messtype"); - $object->email_from = (string) GETPOST("from", 'alphawithlgt'); // Must allow 'name ' + if ($object->messtype == 'sms') { + $object->email_from = (string) GETPOST("from_phone", 'alphawithlgt'); // Must allow 'name ' + } else { + $object->email_from = (string) GETPOST("from", 'alphawithlgt'); // Must allow 'name ' + } $object->email_replyto = (string) GETPOST("replyto", 'alphawithlgt'); // Must allow 'name ' $object->email_errorsto = (string) GETPOST("errorsto", 'alphawithlgt'); // Must allow 'name ' $object->title = (string) GETPOST("title"); @@ -823,7 +823,8 @@ if ($action == 'create') { print ''; print ''; - print ''; + + print ''; print ''; @@ -844,6 +845,63 @@ if ($action == 'create') { print $htmlother->selectColor(GETPOST('bgcolor'), 'bgcolor', '', 0); print ''; + $formmail = new FormMail($db); + $formmail->withfckeditor = 1; + $formmail->withaiprompt = 'html'; + $formmail->withlayout = 1; + + print ''; print '
'.$langs->trans("MailFrom").'
'.$langs->trans("MailErrorsTo").'
'; + $out = ''; + // Add link to add layout + if ($formmail->withlayout && $formmail->withfckeditor) { + $out .= ''; + $out .= img_picto($langs->trans("FillMessageWithALayout"), 'layout', 'class="paddingrightonly"'); + $out .= $langs->trans("FillMessageWithALayout").'...'; + $out .= '     '; + + $out .= ' + '; + } + + // Add link to add AI content + if ($formmail->withaiprompt && isModEnabled('ai')) { + $out .= ''; + $out .= img_picto($langs->trans("FillMessageWithAIContent"), 'ai', 'class="paddingrightonly"'); + $out .= $langs->trans("FillMessageWithAIContent").'...'; + $out .= ''; + $out .= ''; + } + if ($formmail->withfckeditor) { + $out .= $formmail->getModelEmailTemplate('bodyemail'); + } + if ($formmail->withaiprompt && isModEnabled('ai')) { + $out .= $formmail->getSectionForAIPrompt('', 'bodyemail'); + } + print $out; + print '
'; print '
'; @@ -875,10 +933,10 @@ if ($action == 'create') { print $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id, $langs->trans("ResetMailing"), $langs->trans("ConfirmResetMailing", $object->ref), "confirm_reset", '', '', 2); } elseif ($action == 'delete') { // Confirm delete - print $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id.(!empty($urlfrom) ? '&urlfrom='.urlencode($urlfrom) : ''), $langs->trans("DeleteAMailing"), $langs->trans("ConfirmDeleteMailing"), "confirm_delete", '', '', 1); + print $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id.(!empty($urlfrom) ? '&urlfrom='.urlencode($urlfrom) : ''), $langs->trans("DeleteMailing"), $langs->trans("ConfirmDeleteMailing"), "confirm_delete", '', '', 1); } - if ($action != 'edit' && $action != 'edittxt' &&$action != 'edithtml') { + if ($action != 'edit' && $action != 'edittxt' && $action != 'edithtml') { print dol_get_fiche_head($head, 'card', $langs->trans("Mailing"), -1, 'email'); /* @@ -965,20 +1023,20 @@ if ($action == 'create') { $morehtmlref .= $form->editfieldval("", 'title', $object->title, $object, $user->hasRight('mailing', 'creer'), 'string', '', null, null, '', 1); $morehtmlref .= '
'; - $morehtmlright = ''; + $morehtmlstatus = ''; $nbtry = $nbok = 0; if ($object->status == 2 || $object->status == 3) { $nbtry = $object->countNbOfTargets('alreadysent'); $nbko = $object->countNbOfTargets('alreadysentko'); - $morehtmlright .= ' ('.$nbtry.'/'.$object->nbemail; + $morehtmlstatus .= ' ('.$nbtry.'/'.$object->nbemail; if ($nbko) { - $morehtmlright .= ' - '.$nbko.' '.$langs->trans("Error"); + $morehtmlstatus .= ' - '.$nbko.' '.$langs->trans("Error"); } - $morehtmlright .= ')   '; + $morehtmlstatus .= ')   '; } - dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'ref', $morehtmlref, '', 0, '', $morehtmlright); + dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'ref', $morehtmlref, '', 0, '', $morehtmlstatus); print '
'; print '
'; @@ -1093,8 +1151,8 @@ if ($action == 'create') { // Create an array for form $formquestion = array( 'text' => $langs->trans("ConfirmClone"), - array('type' => 'checkbox', 'name' => 'clone_content', 'label' => $langs->trans("CloneContent"), 'value' => 1), - array('type' => 'checkbox', 'name' => 'clone_receivers', 'label' => $langs->trans("CloneReceivers"), 'value' => 0) + 0 => array('type' => 'checkbox', 'name' => 'clone_content', 'label' => $langs->trans("CloneContent"), 'value' => 1), + 1 => array('type' => 'checkbox', 'name' => 'clone_receivers', 'label' => $langs->trans("CloneReceivers"), 'value' => 0) ); // Incomplete payment. On demande si motif = escompte ou autre print $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ToClone'), $langs->trans('ConfirmCloneEMailing', $object->ref), 'confirm_clone', $formquestion, 'yes', 2, 240); @@ -1185,7 +1243,7 @@ if ($action == 'create') { $formmail = new FormMail($db); $formmail->fromname = $object->email_from; $formmail->frommail = $object->email_from; - $formmail->withsubstit =0; + $formmail->withsubstit = 0; $formmail->withfrom = 0; $formmail->withto = $user->email ? $user->email : 1; $formmail->withtocc = 0; @@ -1194,7 +1252,7 @@ if ($action == 'create') { $formmail->withtopicreadonly = 1; $formmail->withfile = 0; $formmail->withlayout = 0; - $formmail->withaiprompt = 0; + $formmail->withaiprompt = ''; $formmail->withbody = 0; $formmail->withbodyreadonly = 1; $formmail->withcancel = 1; @@ -1287,20 +1345,20 @@ if ($action == 'create') { $morehtmlref .= $form->editfieldval("", 'title', $object->title, $object, $user->hasRight('mailing', 'creer'), 'string', '', null, null, '', 1); $morehtmlref .= '
'; - $morehtmlright = ''; + $morehtmlstatus = ''; $nbtry = $nbok = 0; if ($object->status == 2 || $object->status == 3) { $nbtry = $object->countNbOfTargets('alreadysent'); $nbko = $object->countNbOfTargets('alreadysentko'); - $morehtmlright .= ' ('.$nbtry.'/'.$object->nbemail; + $morehtmlstatus .= ' ('.$nbtry.'/'.$object->nbemail; if ($nbko) { - $morehtmlright .= ' - '.$nbko.' '.$langs->trans("Error"); + $morehtmlstatus .= ' - '.$nbko.' '.$langs->trans("Error"); } - $morehtmlright .= ')   '; + $morehtmlstatus .= ')   '; } - dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'ref', $morehtmlref, '', 0, '', $morehtmlright); + dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'ref', $morehtmlref, '', 0, '', $morehtmlstatus); print '
'; print '
'; @@ -1433,6 +1491,7 @@ if ($action == 'create') { print '
'; // List of files $listofpaths = dol_dir_list($upload_dir, 'all', 0, '', '', 'name', SORT_ASC, 0); + $out = ''; // TODO Trick to have param removedfile containing nb of image to delete. But this does not works without javascript $out .= ''."\n"; diff --git a/htdocs/comm/mailing/cibles.php b/htdocs/comm/mailing/cibles.php index 4dac837e45b..4b36bba8cda 100644 --- a/htdocs/comm/mailing/cibles.php +++ b/htdocs/comm/mailing/cibles.php @@ -3,6 +3,7 @@ * Copyright (C) 2005-2023 Laurent Destailleur * Copyright (C) 2005-2010 Regis Houssin * Copyright (C) 2014 Florian Henry + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -38,10 +39,10 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/ajax.lib.php'; $langs->loadLangs(array("mails", "admin")); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -55,14 +56,14 @@ if (!$sortorder) { $sortorder = "DESC,ASC"; } -$id = GETPOST('id', 'int'); -$rowid = GETPOST('rowid', 'int'); +$id = GETPOSTINT('id'); +$rowid = GETPOSTINT('rowid'); $action = GETPOST('action', 'aZ09'); $search_lastname = GETPOST("search_lastname", 'alphanohtml'); $search_firstname = GETPOST("search_firstname", 'alphanohtml'); $search_email = GETPOST("search_email", 'alphanohtml'); $search_other = GETPOST("search_other", 'alphanohtml'); -$search_dest_status = GETPOST('search_dest_status', 'int'); +$search_dest_status = GETPOST('search_dest_status'); // Must be '' if not set, so do not use GETPOSTINT here. // Search modules dirs $modulesdir = dolGetModulesDirs('/mailings'); @@ -145,7 +146,7 @@ if ($action == 'add' && $user->hasRight('mailing', 'creer')) { // Add recipient } } -if (GETPOST('clearlist', 'int') && $user->hasRight('mailing', 'creer')) { +if (GETPOSTINT('clearlist') && $user->hasRight('mailing', 'creer')) { // Loading Class $obj = new MailingTargets($db); $obj->clear_target($id); @@ -155,7 +156,7 @@ if (GETPOST('clearlist', 'int') && $user->hasRight('mailing', 'creer')) { */ } -if (GETPOST('exportcsv', 'int') && $user->hasRight('mailing', 'lire')) { +if (GETPOSTINT('exportcsv') && $user->hasRight('mailing', 'lire')) { $completefilename = 'targets_emailing'.$object->id.'_'.dol_print_date(dol_now(), 'dayhourlog').'.csv'; header('Content-Type: text/csv'); header('Content-Disposition: attachment;filename='.$completefilename); @@ -278,21 +279,21 @@ if ($object->fetch($id) >= 0) { $morehtmlref .= $form->editfieldval("", 'title', $object->title, $object, 0, 'string', '', null, null, '', 1); $morehtmlref .= ''; - $morehtmlright = ''; + $morehtmlstatus = ''; $nbtry = $nbok = 0; if ($object->status == $object::STATUS_SENTPARTIALY || $object->status == $object::STATUS_SENTCOMPLETELY) { $nbtry = $object->countNbOfTargets('alreadysent'); $nbko = $object->countNbOfTargets('alreadysentko'); $nbok = ($nbtry - $nbko); - $morehtmlright .= ' ('.$nbtry.'/'.$object->nbemail; + $morehtmlstatus .= ' ('.$nbtry.'/'.$object->nbemail; if ($nbko) { - $morehtmlright .= ' - '.$nbko.' '.$langs->trans("Error"); + $morehtmlstatus .= ' - '.$nbko.' '.$langs->trans("Error"); } - $morehtmlright .= ')   '; + $morehtmlstatus .= ')   '; } - dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'ref', $morehtmlref, '', 0, '', $morehtmlright); + dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'ref', $morehtmlref, '', 0, '', $morehtmlstatus); print '
'; print '
'; @@ -364,6 +365,7 @@ if ($object->fetch($id) >= 0) { $nbemail .= ' '.img_warning($langs->trans('ToAddRecipientsChooseHere'));//.' '.$langs->trans("NoTargetYet").''; } if ($text) { + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition print $form->textwithpicto($nbemail, $text, 1, 'warning'); } else { print $nbemail; @@ -480,7 +482,7 @@ if ($object->fetch($id) >= 0) { $obj = new $classname($db); // Check if qualified - $qualified = (is_null($obj->enabled) ? 1 : dol_eval($obj->enabled, 1)); + $qualified = (is_null($obj->enabled) ? 1 : (int) dol_eval($obj->enabled, 1)); // Check dependencies foreach ($obj->require_module as $key) { @@ -582,7 +584,7 @@ if ($object->fetch($id) >= 0) { } // List of selected targets - $sql = "SELECT mc.rowid, mc.lastname, mc.firstname, mc.email, mc.other, mc.statut, mc.date_envoi, mc.tms,"; + $sql = "SELECT mc.rowid, mc.lastname, mc.firstname, mc.email, mc.other, mc.statut as status, mc.date_envoi, mc.tms,"; $sql .= " mc.source_url, mc.source_id, mc.source_type, mc.error_text,"; $sql .= " COUNT(mu.rowid) as nb"; $sql .= " FROM ".MAIN_DB_PREFIX."mailing_cibles as mc"; @@ -605,7 +607,7 @@ if ($object->fetch($id) >= 0) { $sql .= natural_search("mc.other", $search_other); $asearchcriteriahasbeenset++; } - if ($search_dest_status != '' && $search_dest_status >= -1) { + if ($search_dest_status != '' && (int) $search_dest_status >= -1) { $sql .= " AND mc.statut = ".((int) $search_dest_status); $asearchcriteriahasbeenset++; } @@ -677,6 +679,7 @@ if ($object->fetch($id) >= 0) { $massactionbutton = ''; + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder print_barre_liste($langs->trans("MailSelectedRecipients"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $morehtmlcenter, $num, $nbtotalofrecords, 'generic', 0, $newcardbutton, '', $limit, 0, 0, 1); print ''; @@ -751,7 +754,7 @@ if ($object->fetch($id) >= 0) { print '
'.dol_escape_htmltag($obj->firstname).''.dol_escape_htmltag($obj->other).''.dol_escape_htmltag($obj->other).''; if (empty($obj->source_id) || empty($obj->source_type)) { diff --git a/htdocs/comm/mailing/class/mailing.class.php b/htdocs/comm/mailing/class/mailing.class.php index fb378c8f8cd..8884af4f085 100644 --- a/htdocs/comm/mailing/class/mailing.class.php +++ b/htdocs/comm/mailing/class/mailing.class.php @@ -226,7 +226,11 @@ class Mailing extends CommonObject $this->email_from = trim($this->email_from); if (!$this->email_from) { - $this->error = $langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("From")); + if ($this->messtype !== 'sms') { + $this->error = $langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("MailFrom")); + } else { + $this->error = $langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("PhoneFrom")); + } return -1; } @@ -287,6 +291,8 @@ class Mailing extends CommonObject */ public function update($user, $notrigger = 0) { + global $langs; + // Check properties if (preg_match('/^InvalidHTMLStringCantBeCleaned/', $this->body)) { $this->error = 'InvalidHTMLStringCantBeCleaned'; @@ -331,7 +337,11 @@ class Mailing extends CommonObject return -2; } } else { - $this->error = $this->db->lasterror(); + if ($this->db->lasterrno() == 'DB_ERROR_RECORD_ALREADY_EXISTS') { + $this->error = $langs->trans("ErrorTitleAlreadyExists", $this->title); + } else { + $this->error = $this->db->lasterror(); + } $this->db->rollback(); return -1; } diff --git a/htdocs/comm/mailing/info.php b/htdocs/comm/mailing/info.php index 12ca330896b..08aaad90c2a 100644 --- a/htdocs/comm/mailing/info.php +++ b/htdocs/comm/mailing/info.php @@ -28,7 +28,7 @@ require_once DOL_DOCUMENT_ROOT.'/comm/mailing/class/mailing.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/emailing.lib.php'; -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); // Load translation files required by the page $langs->load("mails"); @@ -64,20 +64,20 @@ if ($object->fetch($id) >= 0) { $morehtmlref .= $form->editfieldval("", 'title', $object->title, $object, 0, 'string', '', null, null, '', 1); $morehtmlref .= ''; - $morehtmlright = ''; + $morehtmlstatus = ''; $nbtry = $nbok = 0; if ($object->status == 2 || $object->status == 3) { $nbtry = $object->countNbOfTargets('alreadysent'); $nbko = $object->countNbOfTargets('alreadysentko'); - $morehtmlright .= ' ('.$nbtry.'/'.$object->nbemail; + $morehtmlstatus .= ' ('.$nbtry.'/'.$object->nbemail; if ($nbko) { - $morehtmlright .= ' - '.$nbko.' '.$langs->trans("Error"); + $morehtmlstatus .= ' - '.$nbko.' '.$langs->trans("Error"); } - $morehtmlright .= ')   '; + $morehtmlstatus .= ')   '; } - dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'ref', $morehtmlref, '', 0, '', $morehtmlright); + dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'ref', $morehtmlref, '', 0, '', $morehtmlstatus); print '

'; diff --git a/htdocs/comm/mailing/list.php b/htdocs/comm/mailing/list.php index 0383ee5a5a1..42673dea754 100644 --- a/htdocs/comm/mailing/list.php +++ b/htdocs/comm/mailing/list.php @@ -32,7 +32,7 @@ $langs->load('mails'); // Get Parameters $action = GETPOST('action', 'aZ09') ? GETPOST('action', 'aZ09') : 'view'; // The action 'create'/'add', 'edit'/'update', 'view', ... $massaction = GETPOST('massaction', 'alpha'); // The bulk action (combo box choice into lists) -$show_files = GETPOST('show_files', 'int'); // Show files area generated by bulk actions ? +$show_files = GETPOSTINT('show_files'); // Show files area generated by bulk actions ? $confirm = GETPOST('confirm', 'alpha'); // Result of a confirmation $cancel = GETPOST('cancel', 'alpha'); // We click on a Cancel button $toselect = GETPOST('toselect', 'array'); // Array of ids of elements selected into a list @@ -42,10 +42,10 @@ $optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always ' $mode = GETPOST('mode', 'aZ'); // The output mode ('list', 'kanban', 'hierarchy', 'calendar', ...) // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // If $page is not defined, or '' or -1 or if we click on clear filters $page = 0; @@ -314,7 +314,7 @@ $arrayofmassactions = array( if (!empty($permissiontodelete)) { $arrayofmassactions['predelete'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete"); } -if (GETPOST('nomassaction', 'int') || in_array($massaction, array('presend', 'predelete'))) { +if (GETPOSTINT('nomassaction') || in_array($massaction, array('presend', 'predelete'))) { $arrayofmassactions = array(); } $massactionbutton = $form->selectMassAction('', $arrayofmassactions); @@ -377,7 +377,7 @@ if (!empty($moreforfilter)) { } $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; -$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')); // This also change content of $arrayfields +$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')); // This also change content of $arrayfields $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); print '
'; diff --git a/htdocs/comm/mailing/note.php b/htdocs/comm/mailing/note.php index 19e623d519b..6b7a5153bd7 100644 --- a/htdocs/comm/mailing/note.php +++ b/htdocs/comm/mailing/note.php @@ -32,7 +32,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/emailing.lib.php'; $langs->loadLangs(array("mails", "mailing", "companies")); // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'aZ09'); diff --git a/htdocs/comm/multiprix.php b/htdocs/comm/multiprix.php index d2729885b96..c9a4dd839ed 100644 --- a/htdocs/comm/multiprix.php +++ b/htdocs/comm/multiprix.php @@ -34,15 +34,15 @@ $langs->loadLangs(array('orders', 'companies')); $action = GETPOST('action', 'alpha'); $cancel = GETPOST('cancel', 'alpha'); -$id = GETPOST('id', 'int'); -$_socid = GETPOST("id", 'int'); +$id = GETPOSTINT('id'); +$_socid = GETPOSTINT("id"); // Security check if ($user->socid > 0) { $_socid = $user->socid; } // Security check -$socid = GETPOST("socid", 'int'); +$socid = GETPOSTINT("socid"); if ($user->socid > 0) { $action = ''; $id = $user->socid; diff --git a/htdocs/comm/propal/agenda.php b/htdocs/comm/propal/agenda.php index bcf710dac81..1fe3cf6d5dd 100644 --- a/htdocs/comm/propal/agenda.php +++ b/htdocs/comm/propal/agenda.php @@ -32,7 +32,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; $langs->loadLangs(array("propal", "other")); // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'aZ09'); @@ -50,10 +50,10 @@ if (GETPOST('actioncode', 'array')) { $search_rowid = GETPOST('search_rowid'); $search_agenda_label = GETPOST('search_agenda_label'); -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -96,7 +96,7 @@ restrictedArea($user, 'propal', $object->id, '', '', 'fk_soc', 'rowid', $isdraft * Actions */ -$parameters = array('id'=>$id); +$parameters = array('id' => $id); $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); @@ -191,14 +191,14 @@ if ($object->id > 0) { $objthirdparty = $object; $objcon = new stdClass(); - $out = '&origin='.urlencode($object->element.(property_exists($object, 'module') ? '@'.$object->module : '')).'&originid='.urlencode($object->id); + $out = '&origin='.urlencode((string) ($object->element.(property_exists($object, 'module') ? '@'.$object->module : ''))).'&originid='.urlencode((string) ($object->id)); $urlbacktopage = $_SERVER['PHP_SELF'].'?id='.$object->id; $out .= '&backtopage='.urlencode($urlbacktopage); $permok = $user->hasRight('agenda', 'myactions', 'create'); if ((!empty($objthirdparty->id) || !empty($objcon->id)) && $permok) { //$out.=' 0) ? GETPOST('rank', 'int') : -1; +$lineid = GETPOSTINT('lineid'); +$contactid = GETPOSTINT('contactid'); +$projectid = GETPOSTINT('projectid'); +$rank = (GETPOSTINT('rank') > 0) ? GETPOSTINT('rank') : -1; // PDF -$hidedetails = (GETPOST('hidedetails', 'int') ? GETPOST('hidedetails', 'int') : (getDolGlobalString('MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS') ? 1 : 0)); -$hidedesc = (GETPOST('hidedesc', 'int') ? GETPOST('hidedesc', 'int') : (getDolGlobalString('MAIN_GENERATE_DOCUMENTS_HIDE_DESC') ? 1 : 0)); -$hideref = (GETPOST('hideref', 'int') ? GETPOST('hideref', 'int') : (getDolGlobalString('MAIN_GENERATE_DOCUMENTS_HIDE_REF') ? 1 : 0)); +$hidedetails = (GETPOSTINT('hidedetails') ? GETPOSTINT('hidedetails') : (getDolGlobalString('MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS') ? 1 : 0)); +$hidedesc = (GETPOSTINT('hidedesc') ? GETPOSTINT('hidedesc') : (getDolGlobalString('MAIN_GENERATE_DOCUMENTS_HIDE_DESC') ? 1 : 0)); +$hideref = (GETPOSTINT('hideref') ? GETPOSTINT('hideref') : (getDolGlobalString('MAIN_GENERATE_DOCUMENTS_HIDE_REF') ? 1 : 0)); $object = new Propal($db); $extrafields = new ExtraFields($db); @@ -193,9 +193,9 @@ if (empty($reshook)) { 12, 0, 0, - GETPOST('date_deliverymonth', 'int'), - GETPOST('date_deliveryday', 'int'), - GETPOST('date_deliveryyear', 'int') + GETPOSTINT('date_deliverymonth'), + GETPOSTINT('date_deliveryday'), + GETPOSTINT('date_deliveryyear') ); $date_delivery_old = $object->delivery_date; if (!empty($date_delivery_old) && !empty($date_delivery)) { @@ -224,8 +224,24 @@ if (empty($reshook)) { } } - $result = $object->createFromClone($user, $socid, (GETPOSTISSET('entity') ? GETPOST('entity', 'int') : null), (GETPOST('update_prices', 'aZ') ? true : false), (GETPOST('update_desc', 'aZ') ? true : false)); + $result = $object->createFromClone($user, $socid, (GETPOSTISSET('entity') ? GETPOSTINT('entity') : null), (GETPOSTINT('update_prices') ? true : false), (GETPOSTINT('update_desc') ? true : false)); if ($result > 0) { + $warningMsgLineList = array(); + // check all product lines are to sell otherwise add a warning message for each product line is not to sell + foreach ($object->lines as $line) { + if (!is_object($line->product)) { + $line->fetch_product(); + } + if (is_object($line->product) && $line->product->id > 0) { + if (empty($line->product->status)) { + $warningMsgLineList[$line->id] = $langs->trans('WarningLineProductNotToSell', $line->product->ref); + } + } + } + if (!empty($warningMsgLineList)) { + setEventMessages('', $warningMsgLineList, 'warnings'); + } + header("Location: ".$_SERVER['PHP_SELF'].'?id='.$result); exit(); } else { @@ -286,7 +302,7 @@ if (empty($reshook)) { exit(); } elseif ($action == 'confirm_validate' && $confirm == 'yes' && $usercanvalidate) { // Validation - $idwarehouse = GETPOST('idwarehouse', 'int'); + $idwarehouse = GETPOSTINT('idwarehouse'); $result = $object->valid($user); if ($result > 0 && getDolGlobalString('PROPAL_SKIP_ACCEPT_REFUSE')) { $result = $object->closeProposal($user, $object::STATUS_SIGNED); @@ -322,7 +338,7 @@ if (empty($reshook)) { } } } elseif ($action == 'setdate' && $usercancreate) { - $datep = dol_mktime(12, 0, 0, GETPOST('remonth', 'int'), GETPOST('reday', 'int'), GETPOST('reyear', 'int')); + $datep = dol_mktime(12, 0, 0, GETPOSTINT('remonth'), GETPOSTINT('reday'), GETPOSTINT('reyear')); if (empty($datep)) { $error++; @@ -360,7 +376,7 @@ if (empty($reshook)) { } } } elseif ($action == 'setecheance' && $usercancreate) { - $result = $object->set_echeance($user, dol_mktime(12, 0, 0, GETPOST('echmonth', 'int'), GETPOST('echday', 'int'), GETPOST('echyear', 'int'))); + $result = $object->set_echeance($user, dol_mktime(12, 0, 0, GETPOSTINT('echmonth'), GETPOSTINT('echday'), GETPOSTINT('echyear'))); if ($result >= 0) { if (!getDolGlobalString('MAIN_DISABLE_PDF_AUTOUPDATE')) { $outputlangs = $langs; @@ -387,7 +403,7 @@ if (empty($reshook)) { setEventMessages($object->error, $object->errors, 'errors'); } } elseif ($action == 'setdate_livraison' && $usercancreate) { - $result = $object->setDeliveryDate($user, dol_mktime(12, 0, 0, GETPOST('date_livraisonmonth', 'int'), GETPOST('date_livraisonday', 'int'), GETPOST('date_livraisonyear', 'int'))); + $result = $object->setDeliveryDate($user, dol_mktime(12, 0, 0, GETPOSTINT('date_livraisonmonth'), GETPOSTINT('date_livraisonday'), GETPOSTINT('date_livraisonyear'))); if ($result < 0) { dol_print_error($db, $object->error); } @@ -399,7 +415,7 @@ if (empty($reshook)) { } } elseif ($action == 'set_incoterms' && isModEnabled('incoterm') && $usercancreate) { // Set incoterm - $result = $object->setIncoterms(GETPOST('incoterm_id', 'int'), GETPOST('location_incoterms', 'alpha')); + $result = $object->setIncoterms(GETPOSTINT('incoterm_id'), GETPOSTINT('location_incoterms')); } elseif ($action == 'add' && $usercancreate) { // Create proposal $object->socid = $socid; @@ -407,7 +423,7 @@ if (empty($reshook)) { $datep = dol_mktime(12, 0, 0, GETPOST('remonth'), GETPOST('reday'), GETPOST('reyear')); $date_delivery = dol_mktime(12, 0, 0, GETPOST('date_livraisonmonth'), GETPOST('date_livraisonday'), GETPOST('date_livraisonyear')); - $duration = GETPOST('duree_validite', 'int'); + $duration = GETPOSTINT('duree_validite'); if (empty($datep)) { setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("DatePropal")), null, 'errors'); @@ -432,7 +448,7 @@ if (empty($reshook)) { // If we select proposal to clone during creation (when option PROPAL_CLONE_ON_CREATE_PAGE is on) if (GETPOST('createmode') == 'copy' && GETPOST('copie_propal')) { - if ($object->fetch(GETPOST('copie_propal', 'int')) > 0) { + if ($object->fetch(GETPOSTINT('copie_propal')) > 0) { $object->ref = GETPOST('ref'); $object->datep = $datep; $object->date = $datep; @@ -561,7 +577,7 @@ if (empty($reshook)) { $num = count($lines); for ($i = 0; $i < $num; $i++) { $label = (!empty($lines[$i]->label) ? $lines[$i]->label : ''); - $desc = (!empty($lines[$i]->desc) ? $lines[$i]->desc : $lines[$i]->label); + $desc = (!empty($lines[$i]->desc) ? $lines[$i]->desc : ''); // Positive line $product_type = ($lines[$i]->product_type ? $lines[$i]->product_type : 0); @@ -717,16 +733,16 @@ if (empty($reshook)) { } } elseif ($action == 'confirm_closeas' && $usercanclose && !GETPOST('cancel', 'alpha')) { // Close proposal - if (!(GETPOST('statut', 'int') > 0)) { + if (!(GETPOSTINT('statut') > 0)) { setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("CloseAs")), null, 'errors'); $action = 'closeas'; - } elseif (GETPOST('statut', 'int') == $object::STATUS_SIGNED || GETPOST('statut', 'int') == $object::STATUS_NOTSIGNED) { + } elseif (GETPOSTINT('statut') == $object::STATUS_SIGNED || GETPOSTINT('statut') == $object::STATUS_NOTSIGNED) { $locationTarget = ''; // prevent browser refresh from closing proposal several times if ($object->statut == $object::STATUS_VALIDATED || (getDolGlobalString('PROPAL_SKIP_ACCEPT_REFUSE') && $object->statut == $object::STATUS_DRAFT)) { $db->begin(); - $result = $object->closeProposal($user, GETPOST('statut', 'int'), GETPOST('note_private', 'restricthtml')); + $result = $object->closeProposal($user, GETPOSTINT('statut'), GETPOSTINT('note_private')); if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); $error++; @@ -740,19 +756,19 @@ if (empty($reshook)) { $deposit_percent_from_payment_terms = getDictionaryValue('c_payment_term', 'deposit_percent', $object->cond_reglement_id); if ( - !$error && GETPOST('statut', 'int') == $object::STATUS_SIGNED && GETPOST('generate_deposit', 'alpha') == 'on' - && !empty($deposit_percent_from_payment_terms) && isModEnabled('facture') && $user->hasRight('facture', 'creer') + !$error && GETPOSTINT('statut') == $object::STATUS_SIGNED && GETPOSTINT('generate_deposit') == 'on' + && !empty($deposit_percent_from_payment_terms) && isModEnabled('invoice') && $user->hasRight('facture', 'creer') ) { require_once DOL_DOCUMENT_ROOT . '/compta/facture/class/facture.class.php'; - $date = dol_mktime(0, 0, 0, GETPOST('datefmonth', 'int'), GETPOST('datefday', 'int'), GETPOST('datefyear', 'int')); + $date = dol_mktime(0, 0, 0, GETPOSTINT('datefmonth'), GETPOSTINT('datefday'), GETPOSTINT('datefyear')); $forceFields = array(); if (GETPOSTISSET('date_pointoftax')) { - $forceFields['date_pointoftax'] = dol_mktime(0, 0, 0, GETPOST('date_pointoftaxmonth', 'int'), GETPOST('date_pointoftaxday', 'int'), GETPOST('date_pointoftaxyear', 'int')); + $forceFields['date_pointoftax'] = dol_mktime(0, 0, 0, GETPOSTINT('date_pointoftaxmonth'), GETPOSTINT('date_pointoftaxday'), GETPOSTINT('date_pointoftaxyear')); } - $deposit = Facture::createDepositFromOrigin($object, $date, GETPOST('cond_reglement_id', 'int'), $user, 0, GETPOST('validate_generated_deposit', 'alpha') == 'on', $forceFields); + $deposit = Facture::createDepositFromOrigin($object, $date, GETPOSTINT('cond_reglement_id'), $user, 0, GETPOSTINT('validate_generated_deposit') == 'on', $forceFields); if ($deposit) { setEventMessage('DepositGenerated'); @@ -818,7 +834,7 @@ if (empty($reshook)) { } elseif ($action == 'import_lines_from_object' && $user->hasRight('propal', 'creer') && $object->statut == Propal::STATUS_DRAFT - ) { + ) { // add lines from objectlinked $fromElement = GETPOST('fromelement'); $fromElementid = GETPOST('fromelementid'); @@ -853,7 +869,7 @@ if (empty($reshook)) { $remise_percent = $originLine->remise_percent; $date_start = $originLine->date_start; $date_end = $originLine->date_end; - $ventil = 0; + $fk_code_ventilation = 0; $info_bits = $originLine->info_bits; $fk_remise_except = $originLine->fk_remise_except; $price_base_type = 'HT'; @@ -920,9 +936,9 @@ if (empty($reshook)) { $object->generateDocument($object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref); } } elseif ($action == "setabsolutediscount" && $usercancreate) { - if (GETPOST("remise_id", "int")) { + if (GETPOSTINT("remise_id")) { if ($object->id > 0) { - $result = $object->insert_discount(GETPOST("remise_id", "int")); + $result = $object->insert_discount(GETPOSTINT("remise_id")); if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); } @@ -948,7 +964,7 @@ if (empty($reshook)) { // Define margin $margin_rate = (GETPOST('marginforalllines') ? GETPOST('marginforalllines') : 0); foreach ($object->lines as &$line) { - $subprice = price2num($line->pa_ht * (1 + $margin_rate/100), 'MU'); + $subprice = price2num($line->pa_ht * (1 + $margin_rate / 100), 'MU'); $prod = new Product($db); $prod->fetch($line->fk_product); if ($prod->price_min > $subprice) { @@ -1004,7 +1020,7 @@ if (empty($reshook)) { if ($prod_entry_mode == 'free') { $idprod = 0; } else { - $idprod = GETPOST('idprod', 'int'); + $idprod = GETPOSTINT('idprod'); if (getDolGlobalString('MAIN_DISABLE_FREE_LINES') && $idprod <= 0) { setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("ProductOrService")), null, 'errors'); @@ -1067,7 +1083,7 @@ if (empty($reshook)) { $pu_ttc_devise = 0; $price_min = 0; $price_min_ttc = 0; - $tva_npr=0; + $tva_npr = 0; $price_base_type = (GETPOST('price_base_type', 'alpha') ? GETPOST('price_base_type', 'alpha') : 'HT'); $db->begin(); @@ -1143,7 +1159,7 @@ if (empty($reshook)) { // If price per quantity if ($prod->prices_by_qty[0]) { // yes, this product has some prices per quantity // Search the correct price into loaded array product_price_by_qty using id of array retrieved into POST['pqp']. - $pqp = GETPOST('pbq', 'int'); + $pqp = GETPOSTINT('pbq'); // Search price into product_price_by_qty from $prod->id foreach ($prod->prices_by_qty_list[0] as $priceforthequantityarray) { @@ -1164,7 +1180,7 @@ if (empty($reshook)) { // If price per quantity and customer if ($prod->prices_by_qty[$object->thirdparty->price_level]) { // yes, this product has some prices per quantity // Search the correct price into loaded array product_price_by_qty using id of array retrieved into POST['pqp']. - $pqp = GETPOST('pbq', 'int'); + $pqp = GETPOSTINT('pbq'); // Search price into product_price_by_qty from $prod->id foreach ($prod->prices_by_qty_list[$object->thirdparty->price_level] as $priceforthequantityarray) { @@ -1229,8 +1245,8 @@ if (empty($reshook)) { } //If text set in desc is the same as product description (as now it's preloaded) we add it only one time - if ($product_desc==$desc && getDolGlobalString('PRODUIT_AUTOFILL_DESC')) { - $product_desc=''; + if ($product_desc == $desc && getDolGlobalString('PRODUIT_AUTOFILL_DESC')) { + $product_desc = ''; } if (!empty($product_desc) && getDolGlobalString('MAIN_NO_CONCAT_DESCRIPTION')) { @@ -1494,13 +1510,13 @@ if (empty($reshook)) { } // Define special_code for special lines - $special_code = GETPOST('special_code', 'int'); + $special_code = GETPOSTINT('special_code'); if (!GETPOST('qty')) { $special_code = 3; } // Check minimum price - $productid = GETPOST('productid', 'int'); + $productid = GETPOSTINT('productid'); if (!empty($productid)) { $product = new Product($db); $res = $product->fetch($productid); @@ -1550,7 +1566,7 @@ if (empty($reshook)) { if (!$user->hasRight('margins', 'creer')) { foreach ($object->lines as &$line) { - if ($line->id == GETPOST('lineid', 'int')) { + if ($line->id == GETPOSTINT('lineid')) { $fournprice = $line->fk_fournprice; $buyingprice = $line->pa_ht; break; @@ -1567,7 +1583,7 @@ if (empty($reshook)) { $price_base_type = 'TTC'; } - $result = $object->updateline(GETPOST('lineid', 'int'), $pu, $qty, $remise_percent, $vat_rate, $localtax1_rate, $localtax2_rate, $description, $price_base_type, $info_bits, $special_code, GETPOST('fk_parent_line'), 0, $fournprice, $buyingprice, $label, $type, $date_start, $date_end, $array_options, GETPOST("units"), $pu_ht_devise); + $result = $object->updateline(GETPOSTINT('lineid'), $pu, $qty, $remise_percent, $vat_rate, $localtax1_rate, $localtax2_rate, $description, $price_base_type, $info_bits, $special_code, GETPOST('fk_parent_line'), 0, $fournprice, $buyingprice, $label, $type, $date_start, $date_end, $array_options, GETPOST("units"), $pu_ht_devise); if ($result >= 0) { $db->commit(); @@ -1624,38 +1640,38 @@ if (empty($reshook)) { exit(); } elseif ($action == 'classin' && $usercancreate) { // Set project - $object->setProject(GETPOST('projectid', 'int')); + $object->setProject(GETPOSTINT('projectid')); } elseif ($action == 'setavailability' && $usercancreate) { // Delivery time - $result = $object->set_availability($user, GETPOST('availability_id', 'int')); + $result = $object->set_availability($user, GETPOSTINT('availability_id')); } elseif ($action == 'setdemandreason' && $usercancreate) { // Origin of the commercial proposal - $result = $object->set_demand_reason($user, GETPOST('demand_reason_id', 'int')); + $result = $object->set_demand_reason($user, GETPOSTINT('demand_reason_id')); } elseif ($action == 'setconditions' && $usercancreate) { // Terms of payment - $result = $object->setPaymentTerms(GETPOST('cond_reglement_id', 'int'), GETPOST('cond_reglement_id_deposit_percent', 'alpha')); + $result = $object->setPaymentTerms(GETPOSTINT('cond_reglement_id'), GETPOSTINT('cond_reglement_id_deposit_percent')); //} elseif ($action == 'setremisepercent' && $usercancreate) { // $result = $object->set_remise_percent($user, price2num(GETPOST('remise_percent'), '', 2)); //} elseif ($action == 'setremiseabsolue' && $usercancreate) { // $result = $object->set_remise_absolue($user, price2num(GETPOST('remise_absolue'), 'MU', 2)); } elseif ($action == 'setmode' && $usercancreate) { // Payment choice - $result = $object->setPaymentMethods(GETPOST('mode_reglement_id', 'int')); + $result = $object->setPaymentMethods(GETPOSTINT('mode_reglement_id')); } elseif ($action == 'setmulticurrencycode' && $usercancreate) { // Multicurrency Code $result = $object->setMulticurrencyCode(GETPOST('multicurrency_code', 'alpha')); } elseif ($action == 'setmulticurrencyrate' && $usercancreate) { // Multicurrency rate - $result = $object->setMulticurrencyRate(price2num(GETPOST('multicurrency_tx')), GETPOST('calculation_mode', 'int')); + $result = $object->setMulticurrencyRate(price2num(GETPOST('multicurrency_tx')), GETPOSTINT('calculation_mode')); } elseif ($action == 'setbankaccount' && $usercancreate) { // bank account - $result = $object->setBankAccount(GETPOST('fk_account', 'int')); + $result = $object->setBankAccount(GETPOSTINT('fk_account')); } elseif ($action == 'setshippingmethod' && $usercancreate) { // shipping method - $result = $object->setShippingMethod(GETPOST('shipping_method_id', 'int')); + $result = $object->setShippingMethod(GETPOSTINT('shipping_method_id')); } elseif ($action == 'setwarehouse' && $usercancreate) { // warehouse - $result = $object->setWarehouse(GETPOST('warehouse_id', 'int')); + $result = $object->setWarehouse(GETPOSTINT('warehouse_id')); } elseif ($action == 'update_extras') { $object->oldcopy = dol_clone($object, 2); $attribute_name = GETPOST('attribute', 'restricthtml'); @@ -1699,7 +1715,7 @@ if (empty($reshook)) { } elseif ($action == 'swapstatut') { // Toggle the status of a contact if ($object->fetch($id) > 0) { - $result = $object->swapContactStatus(GETPOST('ligne', 'int')); + $result = $object->swapContactStatus(GETPOSTINT('ligne')); } else { dol_print_error($db); } @@ -1759,10 +1775,10 @@ if ($action == 'create') { $currency_code = $conf->currency; - $cond_reglement_id = GETPOST('cond_reglement_id', 'int'); + $cond_reglement_id = GETPOSTINT('cond_reglement_id'); $deposit_percent = GETPOST('cond_reglement_id_deposit_percent', 'alpha'); - $mode_reglement_id = GETPOST('mode_reglement_id', 'int'); - $fk_account = GETPOST('fk_account', 'int'); + $mode_reglement_id = GETPOSTINT('mode_reglement_id'); + $fk_account = GETPOSTINT('fk_account'); // Load objectsrc if (!empty($origin) && !empty($originid)) { @@ -1841,16 +1857,16 @@ if ($action == 'create') { // If form was posted (but error returned), we must reuse the value posted in priority (standard Dolibarr behaviour) if (!GETPOST('changecompany')) { if (GETPOSTISSET('cond_reglement_id')) { - $cond_reglement_id = GETPOST('cond_reglement_id', 'int'); + $cond_reglement_id = GETPOSTINT('cond_reglement_id'); } if (GETPOSTISSET('deposit_percent')) { $deposit_percent = price2num(GETPOST('deposit_percent', 'alpha')); } if (GETPOSTISSET('mode_reglement_id')) { - $mode_reglement_id = GETPOST('mode_reglement_id', 'int'); + $mode_reglement_id = GETPOSTINT('mode_reglement_id'); } if (GETPOSTISSET('cond_reglement_id')) { - $fk_account = GETPOST('fk_account', 'int'); + $fk_account = GETPOSTINT('fk_account'); } } @@ -1947,7 +1963,7 @@ if ($action == 'create') { $thirdparty = $soc; $discount_type = 0; - $backtopage = $_SERVER["PHP_SELF"].'?socid='.$thirdparty->id.'&action='.$action.'&origin='.urlencode(GETPOST('origin')).'&originid='.urlencode(GETPOSTINT('originid')); + $backtopage = $_SERVER["PHP_SELF"].'?socid='.$thirdparty->id.'&action='.$action.'&origin='.urlencode((string) (GETPOST('origin'))).'&originid='.urlencode((string) (GETPOSTINT('originid'))); include DOL_DOCUMENT_ROOT.'/core/tpl/object_discounts.tpl.php'; print '
'.$langs->trans('DatePropal').''; print img_picto('', 'action', 'class="pictofixedwidth"'); - print $form->selectDate('', '', '', '', '', "addprop", 1, 1); + print $form->selectDate('', '', 0, 0, 0, "addprop", 1, 1); print '
'.$langs->trans('Source').''; print img_picto('', 'question', 'class="pictofixedwidth"'); - $form->selectInputReason((GETPOSTISSET('demand_reason_id') ? GETPOST('demand_reason_id', 'int') : ''), 'demand_reason_id', "SRC_PROP", 1, 'maxwidth200 widthcentpercentminusx'); + $form->selectInputReason((GETPOSTISSET('demand_reason_id') ? GETPOSTINT('demand_reason_id') : ''), 'demand_reason_id', "SRC_PROP", 1, 'maxwidth200 widthcentpercentminusx'); print '
'.$langs->trans('SendingMethod').''; print img_picto('', 'dolly', 'class="pictofixedwidth"'); - $form->selectShippingMethod((GETPOSTISSET('shipping_method_id') ? GETPOST('shipping_method_id', 'int') : $shipping_method_id), 'shipping_method_id', '', 1, '', 0, 'maxwidth200 widthcentpercentminusx'); + $form->selectShippingMethod((GETPOSTISSET('shipping_method_id') ? GETPOSTINT('shipping_method_id') : $shipping_method_id), 'shipping_method_id', '', 1, '', 0, 'maxwidth200 widthcentpercentminusx'); print '
'.$langs->trans('AvailabilityPeriod'); - if (isModEnabled('commande')) { + if (isModEnabled('order')) { print ' ('.$langs->trans('AfterOrder').')'; } print ''; print img_picto('', 'clock', 'class="pictofixedwidth"'); - $form->selectAvailabilityDelay((GETPOSTISSET('availability_id') ? GETPOST('availability_id', 'int') : ''), 'availability_id', '', 1, 'maxwidth200 widthcentpercentminusx'); + $form->selectAvailabilityDelay((GETPOSTISSET('availability_id') ? GETPOSTINT('availability_id') : ''), 'availability_id', '', 1, 'maxwidth200 widthcentpercentminusx'); print '
'; print ''; // Shipping Method - if (isModEnabled("expedition")) { + if (isModEnabled("shipping")) { print ''; } diff --git a/htdocs/comm/remx.php b/htdocs/comm/remx.php index 068fdff9052..1ed17699c6d 100644 --- a/htdocs/comm/remx.php +++ b/htdocs/comm/remx.php @@ -2,7 +2,8 @@ /* Copyright (C) 2001-2004 Rodolphe Quiedeville * Copyright (C) 2004-2019 Laurent Destailleur * Copyright (C) 2008 Raphael Bertrand (Resultic) - * Copyright (C) 2019 Frédéric France + * Copyright (C) 2019-2024 Frédéric France + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -38,13 +39,14 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/discount.class.php'; // Load translation files required by the page $langs->loadLangs(array('orders', 'bills', 'companies')); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $action = GETPOST('action', 'aZ09'); $backtopage = GETPOST('backtopage', 'alpha'); // Security check -$socid = GETPOST('id', 'int') ? GETPOST('id', 'int') : GETPOST('socid', 'int'); +$socid = GETPOSTINT('id') ? GETPOSTINT('id') : GETPOSTINT('socid'); +/** @var User $user */ if ($user->socid > 0) { $socid = $user->socid; } @@ -55,7 +57,7 @@ if ($user->socid > 0) { } $result = restrictedArea($user, 'societe', $id, '&societe', '', 'fk_soc', 'rowid', 0); -$permissiontocreate = ($user->rights->societe->creer || $user->rights->facture->creer); +$permissiontocreate = ($user->hasRight('societe', 'creer') || $user->hasRight('facture', 'creer')); @@ -75,7 +77,7 @@ if ($action == 'confirm_split' && GETPOST("confirm", "alpha") == 'yes' && $permi $amount_ttc_2 = price2num($amount_ttc_2); $error = 0; - $remid = (GETPOST("remid", 'int') ? GETPOST("remid", 'int') : 0); + $remid = (GETPOSTINT("remid") ? GETPOSTINT("remid") : 0); $discount = new DiscountAbsolute($db); $res = $discount->fetch($remid); if (!($res > 0)) { @@ -559,8 +561,8 @@ if ($socid > 0) { $amount2 = ($showconfirminfo['amount_ttc'] - $amount1); $formquestion = array( 'text' => $langs->trans('TypeAmountOfEachNewDiscount'), - array('type' => 'text', 'name' => 'amount_ttc_1', 'label' => $langs->trans("AmountTTC").' 1', 'value' => $amount1, 'size' => '5'), - array('type' => 'text', 'name' => 'amount_ttc_2', 'label' => $langs->trans("AmountTTC").' 2', 'value' => $amount2, 'size' => '5') + 0 => array('type' => 'text', 'name' => 'amount_ttc_1', 'label' => $langs->trans("AmountTTC").' 1', 'value' => $amount1, 'size' => '5'), + 1 => array('type' => 'text', 'name' => 'amount_ttc_2', 'label' => $langs->trans("AmountTTC").' 2', 'value' => $amount2, 'size' => '5') ); $langs->load("dict"); print $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id.'&remid='.$showconfirminfo['rowid'].($backtopage ? '&backtopage='.urlencode($backtopage) : ''), $langs->trans('SplitDiscount'), $langs->trans('ConfirmSplitDiscount', price($showconfirminfo['amount_ttc']), $langs->transnoentities("Currency".$conf->currency)), 'confirm_split', $formquestion, '', 0); @@ -706,8 +708,8 @@ if ($socid > 0) { $amount2 = ($showconfirminfo['amount_ttc'] - $amount1); $formquestion = array( 'text' => $langs->trans('TypeAmountOfEachNewDiscount'), - array('type' => 'text', 'name' => 'amount_ttc_1', 'label' => $langs->trans("AmountTTC").' 1', 'value' => $amount1, 'size' => '5'), - array('type' => 'text', 'name' => 'amount_ttc_2', 'label' => $langs->trans("AmountTTC").' 2', 'value' => $amount2, 'size' => '5') + 0 => array('type' => 'text', 'name' => 'amount_ttc_1', 'label' => $langs->trans("AmountTTC").' 1', 'value' => $amount1, 'size' => '5'), + 1 => array('type' => 'text', 'name' => 'amount_ttc_2', 'label' => $langs->trans("AmountTTC").' 2', 'value' => $amount2, 'size' => '5') ); $langs->load("dict"); print $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id.'&remid='.$showconfirminfo['rowid'].($backtopage ? '&backtopage='.urlencode($backtopage) : ''), $langs->trans('SplitDiscount'), $langs->trans('ConfirmSplitDiscount', price($showconfirminfo['amount_ttc']), $langs->transnoentities("Currency".$conf->currency)), 'confirm_split', $formquestion, 0, 0); diff --git a/htdocs/commande/agenda.php b/htdocs/commande/agenda.php index 49fe399610b..af2a5da5594 100644 --- a/htdocs/commande/agenda.php +++ b/htdocs/commande/agenda.php @@ -32,7 +32,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; $langs->loadLangs(array("order", "other")); // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'aZ09'); @@ -50,10 +50,10 @@ if (GETPOST('actioncode', 'array')) { $search_rowid = GETPOST('search_rowid'); $search_agenda_label = GETPOST('search_agenda_label'); -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -96,7 +96,7 @@ restrictedArea($user, 'commande', $object->id, '', '', 'fk_soc', 'rowid', $isdra * Actions */ -$parameters = array('id'=>$id); +$parameters = array('id' => $id); $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); @@ -191,14 +191,14 @@ if ($object->id > 0) { $objthirdparty = $object; $objcon = new stdClass(); - $out = '&origin='.urlencode($object->element.(property_exists($object, 'module') ? '@'.$object->module : '')).'&originid='.urlencode($object->id); + $out = '&origin='.urlencode((string) ($object->element.(property_exists($object, 'module') ? '@'.$object->module : ''))).'&originid='.urlencode((string) ($object->id)); $urlbacktopage = $_SERVER['PHP_SELF'].'?id='.$object->id; $out .= '&backtopage='.urlencode($urlbacktopage); $permok = $user->hasRight('agenda', 'myactions', 'create'); if ((!empty($objthirdparty->id) || !empty($objcon->id)) && $permok) { //$out.=' 0) ? GETPOST('rank', 'int') : -1; +$originid = (GETPOSTINT('originid') ? GETPOSTINT('originid') : GETPOSTINT('origin_id')); // For backward compatibility +$rank = (GETPOSTINT('rank') > 0) ? GETPOSTINT('rank') : -1; // PDF -$hidedetails = (GETPOST('hidedetails', 'int') ? GETPOST('hidedetails', 'int') : (getDolGlobalString('MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS') ? 1 : 0)); -$hidedesc = (GETPOST('hidedesc', 'int') ? GETPOST('hidedesc', 'int') : (getDolGlobalString('MAIN_GENERATE_DOCUMENTS_HIDE_DESC') ? 1 : 0)); -$hideref = (GETPOST('hideref', 'int') ? GETPOST('hideref', 'int') : (getDolGlobalString('MAIN_GENERATE_DOCUMENTS_HIDE_REF') ? 1 : 0)); +$hidedetails = (GETPOSTINT('hidedetails') ? GETPOSTINT('hidedetails') : (getDolGlobalString('MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS') ? 1 : 0)); +$hidedesc = (GETPOSTINT('hidedesc') ? GETPOSTINT('hidedesc') : (getDolGlobalString('MAIN_GENERATE_DOCUMENTS_HIDE_DESC') ? 1 : 0)); +$hideref = (GETPOSTINT('hideref') ? GETPOSTINT('hideref') : (getDolGlobalString('MAIN_GENERATE_DOCUMENTS_HIDE_REF') ? 1 : 0)); // Security check if (!empty($user->socid)) { @@ -139,7 +139,7 @@ $permissiontoadd = $usercancreate; // Used by the include of actions_addu $error = 0; -$date_delivery = dol_mktime(GETPOST('liv_hour', 'int'), GETPOST('liv_min', 'int'), 0, GETPOST('liv_month', 'int'), GETPOST('liv_day', 'int'), GETPOST('liv_year', 'int')); +$date_delivery = dol_mktime(GETPOSTINT('liv_hour'), GETPOSTINT('liv_min'), 0, GETPOSTINT('liv_month'), GETPOSTINT('liv_day'), GETPOSTINT('liv_year')); /* @@ -187,8 +187,8 @@ if (empty($reshook)) { // Action clone object if ($action == 'confirm_clone' && $confirm == 'yes' && $usercancreate) { - if (1 == 0 && !GETPOST('clone_content') && !GETPOST('clone_receivers')) { - setEventMessages($langs->trans("NoCloneOptionsSpecified"), null, 'errors'); + if (!($socid > 0)) { + setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('IdThirdParty')), null, 'errors'); } else { if ($object->id > 0) { // Because createFromClone modifies the object, we must clone it so that we can restore it later @@ -196,6 +196,22 @@ if (empty($reshook)) { $result = $object->createFromClone($user, $socid); if ($result > 0) { + $warningMsgLineList = array(); + // check all product lines are to sell otherwise add a warning message for each product line is not to sell + foreach ($object->lines as $line) { + if (!is_object($line->product)) { + $line->fetch_product(); + } + if (is_object($line->product) && $line->product->id > 0) { + if (empty($line->product->status)) { + $warningMsgLineList[$line->id] = $langs->trans('WarningLineProductNotToSell', $line->product->ref); + } + } + } + if (!empty($warningMsgLineList)) { + setEventMessages('', $warningMsgLineList, 'warnings'); + } + header("Location: ".$_SERVER['PHP_SELF'].'?id='.$result); exit; } else { @@ -262,11 +278,11 @@ if (empty($reshook)) { } } elseif ($action == 'classin' && $usercancreate) { // Link to a project - $object->setProject(GETPOST('projectid', 'int')); + $object->setProject(GETPOSTINT('projectid')); } elseif ($action == 'add' && $usercancreate) { // Add order $datecommande = dol_mktime(12, 0, 0, GETPOST('remonth'), GETPOST('reday'), GETPOST('reyear')); - $date_delivery = dol_mktime(GETPOST('liv_hour', 'int'), GETPOST('liv_min', 'int'), 0, GETPOST('liv_month', 'int'), GETPOST('liv_day', 'int'), GETPOST('liv_year', 'int')); + $date_delivery = dol_mktime(GETPOSTINT('liv_hour'), GETPOSTINT('liv_min'), 0, GETPOSTINT('liv_month'), GETPOSTINT('liv_day'), GETPOSTINT('liv_year')); if ($datecommande == '') { setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentities('Date')), null, 'errors'); @@ -289,7 +305,7 @@ if (empty($reshook)) { $object->date_commande = $datecommande; $object->note_private = GETPOST('note_private', 'restricthtml'); $object->note_public = GETPOST('note_public', 'restricthtml'); - $object->source = GETPOST('source_id', 'int'); + $object->source = GETPOSTINT('source_id'); $object->fk_project = GETPOSTINT('projectid'); $object->ref_client = GETPOST('ref_client', 'alpha'); $object->model_pdf = GETPOST('model'); @@ -504,8 +520,8 @@ if (empty($reshook)) { // Insert default contacts if defined if ($object_id > 0) { - if (GETPOST('contactid', 'int')) { - $result = $object->add_contact(GETPOST('contactid', 'int'), 'CUSTOMER', 'external'); + if (GETPOSTINT('contactid')) { + $result = $object->add_contact(GETPOSTINT('contactid'), 'CUSTOMER', 'external'); if ($result < 0) { setEventMessages($langs->trans("ErrorFailedToAddContact"), null, 'errors'); $error++; @@ -558,14 +574,14 @@ if (empty($reshook)) { } } } elseif ($action == 'setdate' && $usercancreate) { - $date = dol_mktime(0, 0, 0, GETPOST('order_month', 'int'), GETPOST('order_day', 'int'), GETPOST('order_year', 'int')); + $date = dol_mktime(0, 0, 0, GETPOSTINT('order_month'), GETPOSTINT('order_day'), GETPOSTINT('order_year')); $result = $object->set_date($user, $date); if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); } } elseif ($action == 'setdate_livraison' && $usercancreate) { - $date_delivery = dol_mktime(GETPOST('liv_hour', 'int'), GETPOST('liv_min', 'int'), 0, GETPOST('liv_month', 'int'), GETPOST('liv_day', 'int'), GETPOST('liv_year', 'int')); + $date_delivery = dol_mktime(GETPOSTINT('liv_hour'), GETPOSTINT('liv_min'), 0, GETPOSTINT('liv_month'), GETPOSTINT('liv_day'), GETPOSTINT('liv_year')); $object->fetch($id); $result = $object->setDeliveryDate($user, $date_delivery); @@ -573,7 +589,7 @@ if (empty($reshook)) { setEventMessages($object->error, $object->errors, 'errors'); } } elseif ($action == 'setmode' && $usercancreate) { - $result = $object->setPaymentMethods(GETPOST('mode_reglement_id', 'int')); + $result = $object->setPaymentMethods(GETPOSTINT('mode_reglement_id')); if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); } @@ -582,7 +598,7 @@ if (empty($reshook)) { $result = $object->setMulticurrencyCode(GETPOST('multicurrency_code', 'alpha')); } elseif ($action == 'setmulticurrencyrate' && $usercancreate) { // Multicurrency rate - $result = $object->setMulticurrencyRate(price2num(GETPOST('multicurrency_tx')), GETPOST('calculation_mode', 'int')); + $result = $object->setMulticurrencyRate(price2num(GETPOST('multicurrency_tx')), GETPOSTINT('calculation_mode')); } elseif ($action == 'setavailability' && $usercancreate) { $result = $object->availability(GETPOST('availability_id')); if ($result < 0) { @@ -622,19 +638,19 @@ if (empty($reshook)) { } } elseif ($action == 'setbankaccount' && $usercancreate) { // bank account - $result = $object->setBankAccount(GETPOST('fk_account', 'int')); + $result = $object->setBankAccount(GETPOSTINT('fk_account')); if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); } } elseif ($action == 'setshippingmethod' && $usercancreate) { // shipping method - $result = $object->setShippingMethod(GETPOST('shipping_method_id', 'int')); + $result = $object->setShippingMethod(GETPOSTINT('shipping_method_id')); if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); } } elseif ($action == 'setwarehouse' && $usercancreate) { // warehouse - $result = $object->setWarehouse(GETPOST('warehouse_id', 'int')); + $result = $object->setWarehouse(GETPOSTINT('warehouse_id')); if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); } @@ -692,7 +708,7 @@ if (empty($reshook)) { if ($prod_entry_mode == 'free') { $idprod = 0; } else { - $idprod = GETPOST('idprod', 'int'); + $idprod = GETPOSTINT('idprod'); if (getDolGlobalString('MAIN_DISABLE_FREE_LINES') && $idprod <= 0) { setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("ProductOrService")), null, 'errors'); @@ -766,6 +782,7 @@ if (empty($reshook)) { $price_base_type = (GETPOST('price_base_type', 'alpha') ? GETPOST('price_base_type', 'alpha') : 'HT'); $price_min = $price_min_ttc = 0; + $tva_npr = 0; // Ecrase $pu par celui du produit // Ecrase $desc par celui du produit @@ -836,7 +853,7 @@ if (empty($reshook)) { // If price per quantity if ($prod->prices_by_qty[0]) { // yes, this product has some prices per quantity // Search the correct price into loaded array product_price_by_qty using id of array retrieved into POST['pqp']. - $pqp = GETPOST('pbq', 'int'); + $pqp = GETPOSTINT('pbq'); // Search price into product_price_by_qty from $prod->id foreach ($prod->prices_by_qty_list[0] as $priceforthequantityarray) { @@ -857,7 +874,7 @@ if (empty($reshook)) { // If price per quantity and customer if ($prod->prices_by_qty[$object->thirdparty->price_level]) { // yes, this product has some prices per quantity // Search the correct price into loaded array product_price_by_qty using id of array retrieved into POST['pqp']. - $pqp = GETPOST('pbq', 'int'); + $pqp = GETPOSTINT('pbq'); // Search price into product_price_by_qty from $prod->id foreach ($prod->prices_by_qty_list[$object->thirdparty->price_level] as $priceforthequantityarray) { if ($priceforthequantityarray['rowid'] != $pqp) { @@ -875,8 +892,8 @@ if (empty($reshook)) { } } - $tmpvat = price2num(preg_replace('/\s*\(.*\)/', '', $tva_tx)); - $tmpprodvat = price2num(preg_replace('/\s*\(.*\)/', '', $prod->tva_tx)); + $tmpvat = (float) price2num(preg_replace('/\s*\(.*\)/', '', $tva_tx)); + $tmpprodvat = (float) price2num(preg_replace('/\s*\(.*\)/', '', $prod->tva_tx)); // Set unit price to use if (!empty($price_ht) || $price_ht === '0') { @@ -917,8 +934,8 @@ if (empty($reshook)) { } //If text set in desc is the same as product descpription (as now it's preloaded) we add it only one time - if ($product_desc==$desc && getDolGlobalString('PRODUIT_AUTOFILL_DESC')) { - $product_desc=''; + if ($product_desc == $desc && getDolGlobalString('PRODUIT_AUTOFILL_DESC')) { + $product_desc = ''; } if (!empty($product_desc) && getDolGlobalString('MAIN_NO_CONCAT_DESCRIPTION')) { @@ -1183,7 +1200,7 @@ if (empty($reshook)) { $remise_percent = GETPOST('remise_percent') != '' ? price2num(GETPOST('remise_percent'), '', 2) : 0; // Check minimum price - $productid = GETPOST('productid', 'int'); + $productid = GETPOSTINT('productid'); if (!empty($productid)) { $product = new Product($db); $product->fetch($productid); @@ -1236,7 +1253,7 @@ if (empty($reshook)) { if (!$error) { if (!$user->hasRight('margins', 'creer')) { foreach ($object->lines as &$line) { - if ($line->id == GETPOST('lineid', 'int')) { + if ($line->id == GETPOSTINT('lineid')) { $fournprice = $line->fk_fournprice; $buyingprice = $line->pa_ht; break; @@ -1251,7 +1268,7 @@ if (empty($reshook)) { $price_base_type = 'TTC'; } - $result = $object->updateline(GETPOST('lineid', 'int'), $description, $pu, $qty, $remise_percent, $vat_rate, $localtax1_rate, $localtax2_rate, $price_base_type, $info_bits, $date_start, $date_end, $type, GETPOST('fk_parent_line'), 0, $fournprice, $buyingprice, $label, $special_code, $array_options, GETPOST('units'), $pu_ht_devise); + $result = $object->updateline(GETPOSTINT('lineid'), $description, $pu, $qty, $remise_percent, $vat_rate, $localtax1_rate, $localtax2_rate, $price_base_type, $info_bits, $date_start, $date_end, $type, GETPOST('fk_parent_line'), 0, $fournprice, $buyingprice, $label, $special_code, $array_options, GETPOST('units'), $pu_ht_devise); if ($result >= 0) { if (!getDolGlobalString('MAIN_DISABLE_PDF_AUTOUPDATE')) { @@ -1307,7 +1324,7 @@ if (empty($reshook)) { header('Location: '.$_SERVER['PHP_SELF'].'?id='.$object->id); // To re-display card in edit mode exit(); } elseif ($action == 'confirm_validate' && $confirm == 'yes' && $usercanvalidate) { - $idwarehouse = GETPOST('idwarehouse', 'int'); + $idwarehouse = GETPOSTINT('idwarehouse'); $qualified_for_stock_change = 0; if (!getDolGlobalString('STOCK_SUPPORTS_SERVICES')) { @@ -1339,18 +1356,18 @@ if (empty($reshook)) { if ( GETPOST('generate_deposit', 'alpha') == 'on' && !empty($deposit_percent_from_payment_terms) - && isModEnabled('facture') && $user->hasRight('facture', 'creer') + && isModEnabled('invoice') && $user->hasRight('facture', 'creer') ) { require_once DOL_DOCUMENT_ROOT . '/compta/facture/class/facture.class.php'; - $date = dol_mktime(0, 0, 0, GETPOST('datefmonth', 'int'), GETPOST('datefday', 'int'), GETPOST('datefyear', 'int')); + $date = dol_mktime(0, 0, 0, GETPOSTINT('datefmonth'), GETPOSTINT('datefday'), GETPOSTINT('datefyear')); $forceFields = array(); if (GETPOSTISSET('date_pointoftax')) { - $forceFields['date_pointoftax'] = dol_mktime(0, 0, 0, GETPOST('date_pointoftaxmonth', 'int'), GETPOST('date_pointoftaxday', 'int'), GETPOST('date_pointoftaxyear', 'int')); + $forceFields['date_pointoftax'] = dol_mktime(0, 0, 0, GETPOSTINT('date_pointoftaxmonth'), GETPOSTINT('date_pointoftaxday'), GETPOSTINT('date_pointoftaxyear')); } - $deposit = Facture::createDepositFromOrigin($object, $date, GETPOST('cond_reglement_id', 'int'), $user, 0, GETPOST('validate_generated_deposit', 'alpha') == 'on', $forceFields); + $deposit = Facture::createDepositFromOrigin($object, $date, GETPOSTINT('cond_reglement_id'), $user, 0, GETPOSTINT('validate_generated_deposit') == 'on', $forceFields); if ($deposit) { setEventMessage('DepositGenerated'); @@ -1453,7 +1470,7 @@ if (empty($reshook)) { setEventMessages($object->error, $object->errors, 'errors'); } } elseif ($action == 'confirm_cancel' && $confirm == 'yes' && $usercanvalidate) { - $idwarehouse = GETPOST('idwarehouse', 'int'); + $idwarehouse = GETPOSTINT('idwarehouse'); $qualified_for_stock_change = 0; if (!getDolGlobalString('STOCK_SUPPORTS_SERVICES')) { @@ -1507,7 +1524,7 @@ if (empty($reshook)) { if ($action == 'import_lines_from_object' && $usercancreate && $object->statut == Commande::STATUS_DRAFT - ) { + ) { $fromElement = GETPOST('fromelement'); $fromElementid = GETPOST('fromelementid'); $importLines = GETPOST('line_checkbox'); @@ -1541,7 +1558,7 @@ if (empty($reshook)) { $remise_percent = $originLine->remise_percent; $date_start = $originLine->date_start; $date_end = $originLine->date_end; - $ventil = 0; + $fk_code_ventilation = 0; $info_bits = $originLine->info_bits; $fk_remise_except = $originLine->fk_remise_except; $price_base_type = 'HT'; @@ -1617,7 +1634,7 @@ if (empty($reshook)) { } elseif ($action == 'swapstatut') { // bascule du statut d'un contact if ($object->id > 0) { - $result = $object->swapContactStatus(GETPOST('ligne', 'int')); + $result = $object->swapContactStatus(GETPOSTINT('ligne')); } else { dol_print_error($db); } @@ -1890,7 +1907,7 @@ if ($action == 'create' && $usercancreate) { $thirdparty = $soc; $discount_type = 0; - $backtopage = $_SERVER["PHP_SELF"].'?socid='.$thirdparty->id.'&action='.$action.'&origin='.urlencode(GETPOST('origin')).'&originid='.urlencode(GETPOSTINT('originid')); + $backtopage = $_SERVER["PHP_SELF"].'?socid='.$thirdparty->id.'&action='.$action.'&origin='.urlencode((string) (GETPOST('origin'))).'&originid='.urlencode((string) (GETPOSTINT('originid'))); include DOL_DOCUMENT_ROOT.'/core/tpl/object_discounts.tpl.php'; print ''; @@ -1899,7 +1916,7 @@ if ($action == 'create' && $usercancreate) { // Date print ''; // Date delivery planned @@ -1930,17 +1947,17 @@ if ($action == 'create' && $usercancreate) { print ''; // Bank Account - if (getDolGlobalString('BANK_ASK_PAYMENT_BANK_DURING_ORDER') && isModEnabled("banque")) { + if (getDolGlobalString('BANK_ASK_PAYMENT_BANK_DURING_ORDER') && isModEnabled("bank")) { print ''; } // Shipping Method - if (isModEnabled('expedition')) { + if (isModEnabled('shipping')) { print ''; } @@ -2200,7 +2217,7 @@ if ($action == 'create' && $usercancreate) { // 'text' => $langs->trans("ConfirmClone"), // array('type' => 'checkbox', 'name' => 'clone_content', 'label' => $langs->trans("CloneMainAttributes"), 'value' => 1), // array('type' => 'checkbox', 'name' => 'update_prices', 'label' => $langs->trans("PuttingPricesUpToDate"), 'value' => 1), - array('type' => 'other', 'name' => 'idwarehouse', 'label' => $langs->trans("SelectWarehouseForStockDecrease"), 'value' => $formproduct->selectWarehouses(GETPOST('idwarehouse', 'int') ? GETPOST('idwarehouse', 'int') : 'ifone', 'idwarehouse', '', 1, 0, 0, '', 0, $forcecombo)) + array('type' => 'other', 'name' => 'idwarehouse', 'label' => $langs->trans("SelectWarehouseForStockDecrease"), 'value' => $formproduct->selectWarehouses(GETPOSTINT('idwarehouse') ? GETPOSTINT('idwarehouse') : 'ifone', 'idwarehouse', '', 1, 0, 0, '', 0, $forcecombo)) ); } @@ -2226,7 +2243,7 @@ if ($action == 'create' && $usercancreate) { // It may also break step of creating an order when invoicing must be done from proposals and not from orders $deposit_percent_from_payment_terms = (float) getDictionaryValue('c_payment_term', 'deposit_percent', $object->cond_reglement_id); - if (!empty($deposit_percent_from_payment_terms) && isModEnabled('facture') && $user->hasRight('facture', 'creer')) { + if (!empty($deposit_percent_from_payment_terms) && isModEnabled('invoice') && $user->hasRight('facture', 'creer')) { require_once DOL_DOCUMENT_ROOT . '/compta/facture/class/facture.class.php'; $object->fetchObjectLinked(); @@ -2412,7 +2429,7 @@ if ($action == 'create' && $usercancreate) { $filter = '(s.client:IN:1,2,3)'; // Create an array for form $formquestion = array( - array('type' => 'other', 'name' => 'socid', 'label' => $langs->trans("SelectThirdParty"), 'value' => $form->select_company(GETPOST('socid', 'int'), 'socid', $filter, '', 0, 0, null, 0, 'maxwidth300')) + array('type' => 'other', 'name' => 'socid', 'label' => $langs->trans("SelectThirdParty"), 'value' => $form->select_company(GETPOSTINT('socid'), 'socid', $filter, '', 0, 0, null, 0, 'maxwidth300')) ); $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ToClone'), $langs->trans('ConfirmCloneOrder', $object->ref), 'confirm_clone', $formquestion, 'yes', 1); } @@ -2530,7 +2547,7 @@ if ($action == 'create' && $usercancreate) { print ''; print ''; print ''; - print $form->selectDate($object->date, 'order_', '', '', '', "setdate"); + print $form->selectDate($object->date, 'order_', 0, 0, 0, "setdate"); print ''; print ''; } else { @@ -2552,7 +2569,7 @@ if ($action == 'create' && $usercancreate) { print ''; print ''; print ''; - print $form->selectDate($object->delivery_date ? $object->delivery_date : -1, 'liv_', 1, 1, '', "setdate_livraison", 1, 0); + print $form->selectDate($object->delivery_date ? $object->delivery_date : -1, 'liv_', 1, 1, 0, "setdate_livraison", 1, 0); print ''; print ''; } else { @@ -2577,7 +2594,7 @@ if ($action == 'create' && $usercancreate) { print ''; // Shipping Method - if (isModEnabled('expedition')) { + if (isModEnabled('shipping')) { print ''; print ''; - print ''; + print ''; if (isModEnabled("multicurrency") && ($object->multicurrency_code && $object->multicurrency_code != $conf->currency)) { // Multicurrency Amount HT - print ''; + print ''; } print ''; print ''; print ''; - print ''; + print ''; if (isModEnabled("multicurrency") && ($object->multicurrency_code && $object->multicurrency_code != $conf->currency)) { // Multicurrency Amount VAT - print ''; + print ''; } print ''; @@ -2786,22 +2803,26 @@ if ($action == 'create' && $usercancreate) { if ($mysoc->localtax1_assuj == "1" || $object->total_localtax1 != 0) { print ''; print ''; - print ''; + print ''; if (isModEnabled("multicurrency") && ($object->multicurrency_code && $object->multicurrency_code != $conf->currency)) { - print ''; + $object->multicurrency_total_localtax1 = price2num($object->total_localtax1 * $object->multicurrency_tx, 'MT'); + + print ''; } print ''; + } - // Amount Local Taxes - if ($mysoc->localtax2_assuj == "1" || $object->total_localtax2 != 0) { - print ''; - print ''; - print ''; - if (isModEnabled("multicurrency") && ($object->multicurrency_code && $object->multicurrency_code != $conf->currency)) { - print ''; - } - print ''; + // Amount Local Taxes + if ($mysoc->localtax2_assuj == "1" || $object->total_localtax2 != 0) { + print ''; + print ''; + print ''; + if (isModEnabled("multicurrency") && ($object->multicurrency_code && $object->multicurrency_code != $conf->currency)) { + $object->multicurrency_total_localtax2 = price2num($object->total_localtax2 * $object->multicurrency_tx, 'MT'); + + print ''; } + print ''; } print ''; @@ -2947,7 +2968,7 @@ if ($action == 'create' && $usercancreate) { $arrayforbutaction = array(); // Create a purchase order - $arrayforbutaction[] = array('lang'=>'orders', 'enabled'=>(isModEnabled("supplier_order") && $object->statut > Commande::STATUS_DRAFT && $object->getNbOfServicesLines() > 0), 'perm'=>$usercancreatepurchaseorder, 'label'=>'AddPurchaseOrder', 'url'=>'/fourn/commande/card.php?action=create&origin='.$object->element.'&originid='.$object->id); + $arrayforbutaction[] = array('lang' => 'orders', 'enabled' => (isModEnabled("supplier_order") && $object->statut > Commande::STATUS_DRAFT && $object->getNbOfServicesLines() > 0), 'perm' => $usercancreatepurchaseorder, 'label' => 'AddPurchaseOrder', 'url' => '/fourn/commande/card.php?action=create&origin='.$object->element.'&originid='.$object->id); /*if (isModEnabled("supplier_order") && $object->statut > Commande::STATUS_DRAFT && $object->getNbOfServicesLines() > 0) { if ($usercancreatepurchaseorder) { print dolGetButtonAction('', $langs->trans('AddPurchaseOrder'), 'default', DOL_URL_ROOT.'/fourn/commande/card.php?action=create&origin='.$object->element.'&originid='.$object->id, ''); @@ -2955,7 +2976,7 @@ if ($action == 'create' && $usercancreate) { }*/ // Create intervention - $arrayforbutaction[] = array('lang'=>'interventions', 'enabled'=>(isModEnabled("ficheinter") && $object->statut > Commande::STATUS_DRAFT && $object->statut < Commande::STATUS_CLOSED && $object->getNbOfServicesLines() > 0), 'perm'=>$user->hasRight('ficheinter', 'creer'), 'label'=>'AddIntervention', 'url'=>'/fichinter/card.php?action=create&origin='.$object->element.'&originid='.$object->id.'&socid='.$object->socid); + $arrayforbutaction[] = array('lang' => 'interventions', 'enabled' => (isModEnabled("intervention") && $object->statut > Commande::STATUS_DRAFT && $object->statut < Commande::STATUS_CLOSED && $object->getNbOfServicesLines() > 0), 'perm' => $user->hasRight('ficheinter', 'creer'), 'label' => 'AddIntervention', 'url' => '/fichinter/card.php?action=create&origin='.$object->element.'&originid='.$object->id.'&socid='.$object->socid); /*if (isModEnabled('ficheinter')) { $langs->load("interventions"); @@ -2969,7 +2990,7 @@ if ($action == 'create' && $usercancreate) { }*/ // Create contract - $arrayforbutaction[] = array('lang'=>'contracts', 'enabled'=>(isModEnabled("contrat") && ($object->statut == Commande::STATUS_VALIDATED || $object->statut == Commande::STATUS_SHIPMENTONPROCESS || $object->statut == Commande::STATUS_CLOSED)), 'perm'=>$user->hasRight('contrat', 'creer'), 'label'=>'AddContract', 'url'=>'/contrat/card.php?action=create&origin='.$object->element.'&originid='.$object->id.'&socid='.$object->socid); + $arrayforbutaction[] = array('lang' => 'contracts', 'enabled' => (isModEnabled("contract") && ($object->statut == Commande::STATUS_VALIDATED || $object->statut == Commande::STATUS_SHIPMENTONPROCESS || $object->statut == Commande::STATUS_CLOSED)), 'perm' => $user->hasRight('contrat', 'creer'), 'label' => 'AddContract', 'url' => '/contrat/card.php?action=create&origin='.$object->element.'&originid='.$object->id.'&socid='.$object->socid); /*if (isModEnabled('contrat') && ($object->statut == Commande::STATUS_VALIDATED || $object->statut == Commande::STATUS_SHIPMENTONPROCESS || $object->statut == Commande::STATUS_CLOSED)) { $langs->load("contracts"); @@ -2979,14 +3000,14 @@ if ($action == 'create' && $usercancreate) { }*/ $numshipping = 0; - if (isModEnabled('expedition')) { + if (isModEnabled('shipping')) { $numshipping = $object->countNbOfShipments(); } // Create shipment if ($object->statut > Commande::STATUS_DRAFT && $object->statut < Commande::STATUS_CLOSED && ($object->getNbOfProductsLines() > 0 || getDolGlobalString('STOCK_SUPPORTS_SERVICES'))) { if ((getDolGlobalInt('MAIN_SUBMODULE_EXPEDITION') && $user->hasRight('expedition', 'creer')) || (getDolGlobalInt('MAIN_SUBMODULE_DELIVERY') && $user->hasRight('expedition', 'delivery', 'creer'))) { - $arrayforbutaction[] = array('lang'=>'sendings', 'enabled'=>(isModEnabled("expedition") && ($object->statut > Commande::STATUS_DRAFT && $object->statut < Commande::STATUS_CLOSED && ($object->getNbOfProductsLines() > 0 || getDolGlobalString('STOCK_SUPPORTS_SERVICES')))), 'perm'=>$user->hasRight('expedition', 'creer'), 'label'=>'CreateShipment', 'url'=>'/expedition/shipment.php?id='.$object->id); + $arrayforbutaction[] = array('lang' => 'sendings', 'enabled' => (isModEnabled("shipping") && ($object->statut > Commande::STATUS_DRAFT && $object->statut < Commande::STATUS_CLOSED && ($object->getNbOfProductsLines() > 0 || getDolGlobalString('STOCK_SUPPORTS_SERVICES')))), 'perm' => $user->hasRight('expedition', 'creer'), 'label' => 'CreateShipment', 'url' => '/expedition/shipment.php?id='.$object->id); /* if ($user->hasRight('expedition', 'creer')) { print dolGetButtonAction('', $langs->trans('CreateShipment'), 'default', DOL_URL_ROOT.'/expedition/shipment.php?id='.$object->id, ''); @@ -3001,11 +3022,11 @@ if ($action == 'create' && $usercancreate) { // Create bill $arrayforbutaction[] = array( - 'lang'=>'bills', - 'enabled'=>(isModEnabled('facture') && $object->statut > Commande::STATUS_DRAFT && !$object->billed && $object->total_ttc >= 0), - 'perm'=>($user->hasRight('facture', 'creer') && !getDolGlobalInt('WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER')), - 'label'=>'CreateBill', - 'url'=>'/compta/facture/card.php?action=create&token='.newToken().'&origin='.urlencode($object->element).'&originid='.$object->id.'&socid='.$object->socid + 'lang' => 'bills', + 'enabled' => (isModEnabled('invoice') && $object->statut > Commande::STATUS_DRAFT && !$object->billed && $object->total_ttc >= 0), + 'perm' => ($user->hasRight('facture', 'creer') && !getDolGlobalInt('WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER')), + 'label' => 'CreateBill', + 'url' => '/compta/facture/card.php?action=create&token='.newToken().'&origin='.urlencode($object->element).'&originid='.$object->id.'&socid='.$object->socid ); /* if (isModEnabled('facture') && $object->statut > Commande::STATUS_DRAFT && !$object->billed && $object->total_ttc >= 0) { diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php index 75d9e0b3e75..931fbbd94d6 100644 --- a/htdocs/commande/class/commande.class.php +++ b/htdocs/commande/class/commande.class.php @@ -11,8 +11,9 @@ * Copyright (C) 2014-2015 Marcos García * Copyright (C) 2018 Nicolas ZABOURI * Copyright (C) 2016-2022 Ferran Marcet - * Copyright (C) 2021-2023 Frédéric France + * Copyright (C) 2021-2024 Frédéric France * Copyright (C) 2022 Gauthier VERDOL + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -242,11 +243,6 @@ class Commande extends CommonOrder */ public $user_author_id; - /** - * @var int User validator ID - */ - public $user_valid; - /** * @var OrderLine one line of an order */ @@ -257,20 +253,6 @@ class Commande extends CommonOrder */ public $lines = array(); - // Multicurrency - /** - * @var int Currency ID - */ - public $fk_multicurrency; - - /** - * @var string multicurrency code - */ - public $multicurrency_code; - public $multicurrency_tx; - public $multicurrency_total_ht; - public $multicurrency_total_tva; - public $multicurrency_total_ttc; //! key of module source when order generated from a dedicated module ('cashdesk', 'takepos', ...) public $module_source; @@ -315,59 +297,59 @@ class Commande extends CommonOrder // BEGIN MODULEBUILDER PROPERTIES /** - * @var array Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. + * @var array|string,position:int,notnull?:int,visible:int,noteditable?:int,default?:string,index?:int,foreignkey?:string,searchall?:int,isameasure?:int,css?:string,csslist?:string,help?:string,showoncombobox?:int,disabled?:int,arrayofkeyval?:array,comment?:string}> Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. */ public $fields = array( - 'rowid' =>array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>1, 'visible'=>-1, 'notnull'=>1, 'position'=>10), - 'entity' =>array('type'=>'integer', 'label'=>'Entity', 'default'=>1, 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>20, 'index'=>1), - 'ref' =>array('type'=>'varchar(30)', 'label'=>'Ref', 'enabled'=>1, 'visible'=>-1, 'notnull'=>1, 'showoncombobox'=>1, 'position'=>25), - 'ref_ext' =>array('type'=>'varchar(255)', 'label'=>'RefExt', 'enabled'=>1, 'visible'=>0, 'position'=>26), - 'ref_client' =>array('type'=>'varchar(255)', 'label'=>'RefCustomer', 'enabled'=>1, 'visible'=>-1, 'position'=>28), - 'fk_soc' =>array('type'=>'integer:Societe:societe/class/societe.class.php', 'label'=>'ThirdParty', 'enabled'=>'isModEnabled("societe")', 'visible'=>-1, 'notnull'=>1, 'position'=>20), - 'fk_projet' =>array('type'=>'integer:Project:projet/class/project.class.php:1:(fk_statut:=:1)', 'label'=>'Project', 'enabled'=>"isModEnabled('project')", 'visible'=>-1, 'position'=>25), - 'date_commande' =>array('type'=>'date', 'label'=>'Date', 'enabled'=>1, 'visible'=>1, 'position'=>60, 'csslist'=>'nowraponall'), - 'date_valid' =>array('type'=>'datetime', 'label'=>'DateValidation', 'enabled'=>1, 'visible'=>-1, 'position'=>62, 'csslist'=>'nowraponall'), - 'date_cloture' =>array('type'=>'datetime', 'label'=>'DateClosing', 'enabled'=>1, 'visible'=>-1, 'position'=>65, 'csslist'=>'nowraponall'), - 'fk_user_valid' =>array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserValidation', 'enabled'=>1, 'visible'=>-1, 'position'=>85), - 'fk_user_cloture' =>array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserClosing', 'enabled'=>1, 'visible'=>-1, 'position'=>90), - 'source' =>array('type'=>'smallint(6)', 'label'=>'Source', 'enabled'=>1, 'visible'=>-1, 'position'=>95), - 'total_tva' =>array('type'=>'double(24,8)', 'label'=>'VAT', 'enabled'=>1, 'visible'=>-1, 'position'=>125, 'isameasure'=>1), - 'localtax1' =>array('type'=>'double(24,8)', 'label'=>'LocalTax1', 'enabled'=>1, 'visible'=>-1, 'position'=>130, 'isameasure'=>1), - 'localtax2' =>array('type'=>'double(24,8)', 'label'=>'LocalTax2', 'enabled'=>1, 'visible'=>-1, 'position'=>135, 'isameasure'=>1), - 'total_ht' =>array('type'=>'double(24,8)', 'label'=>'TotalHT', 'enabled'=>1, 'visible'=>-1, 'position'=>140, 'isameasure'=>1), - 'total_ttc' =>array('type'=>'double(24,8)', 'label'=>'TotalTTC', 'enabled'=>1, 'visible'=>-1, 'position'=>145, 'isameasure'=>1), - 'note_private' =>array('type'=>'html', 'label'=>'NotePrivate', 'enabled'=>1, 'visible'=>0, 'position'=>150), - 'note_public' =>array('type'=>'html', 'label'=>'NotePublic', 'enabled'=>1, 'visible'=>0, 'position'=>155), - 'model_pdf' =>array('type'=>'varchar(255)', 'label'=>'PDFTemplate', 'enabled'=>1, 'visible'=>0, 'position'=>160), - 'fk_account' =>array('type'=>'integer', 'label'=>'BankAccount', 'enabled'=>'isModEnabled("banque")', 'visible'=>-1, 'position'=>170), - 'fk_currency' =>array('type'=>'varchar(3)', 'label'=>'MulticurrencyID', 'enabled'=>1, 'visible'=>-1, 'position'=>175), - 'fk_cond_reglement' =>array('type'=>'integer', 'label'=>'PaymentTerm', 'enabled'=>1, 'visible'=>-1, 'position'=>180), - 'deposit_percent' =>array('type'=>'varchar(63)', 'label'=>'DepositPercent', 'enabled'=>1, 'visible'=>-1, 'position'=>181), - 'fk_mode_reglement' =>array('type'=>'integer', 'label'=>'PaymentMode', 'enabled'=>1, 'visible'=>-1, 'position'=>185), - 'date_livraison' =>array('type'=>'date', 'label'=>'DateDeliveryPlanned', 'enabled'=>1, 'visible'=>-1, 'position'=>190, 'csslist'=>'nowraponall'), - 'fk_shipping_method' =>array('type'=>'integer', 'label'=>'ShippingMethod', 'enabled'=>1, 'visible'=>-1, 'position'=>195), - 'fk_warehouse' =>array('type'=>'integer:Entrepot:product/stock/class/entrepot.class.php', 'label'=>'Fk warehouse', 'enabled'=>'isModEnabled("stock")', 'visible'=>-1, 'position'=>200), - 'fk_availability' =>array('type'=>'integer', 'label'=>'Availability', 'enabled'=>1, 'visible'=>-1, 'position'=>205), - 'fk_input_reason' =>array('type'=>'integer', 'label'=>'InputReason', 'enabled'=>1, 'visible'=>-1, 'position'=>210), + 'rowid' => array('type' => 'integer', 'label' => 'TechnicalID', 'enabled' => 1, 'visible' => -1, 'notnull' => 1, 'position' => 10), + 'entity' => array('type' => 'integer', 'label' => 'Entity', 'default' => '1', 'enabled' => 1, 'visible' => -2, 'notnull' => 1, 'position' => 20, 'index' => 1), + 'ref' => array('type' => 'varchar(30)', 'label' => 'Ref', 'enabled' => 1, 'visible' => -1, 'notnull' => 1, 'showoncombobox' => 1, 'position' => 25), + 'ref_ext' => array('type' => 'varchar(255)', 'label' => 'RefExt', 'enabled' => 1, 'visible' => 0, 'position' => 26), + 'ref_client' => array('type' => 'varchar(255)', 'label' => 'RefCustomer', 'enabled' => 1, 'visible' => -1, 'position' => 28), + 'fk_soc' => array('type' => 'integer:Societe:societe/class/societe.class.php', 'label' => 'ThirdParty', 'enabled' => 'isModEnabled("societe")', 'visible' => -1, 'notnull' => 1, 'position' => 20), + 'fk_projet' => array('type' => 'integer:Project:projet/class/project.class.php:1:(fk_statut:=:1)', 'label' => 'Project', 'enabled' => "isModEnabled('project')", 'visible' => -1, 'position' => 25), + 'date_commande' => array('type' => 'date', 'label' => 'Date', 'enabled' => 1, 'visible' => 1, 'position' => 60, 'csslist' => 'nowraponall'), + 'date_valid' => array('type' => 'datetime', 'label' => 'DateValidation', 'enabled' => 1, 'visible' => -1, 'position' => 62, 'csslist' => 'nowraponall'), + 'date_cloture' => array('type' => 'datetime', 'label' => 'DateClosing', 'enabled' => 1, 'visible' => -1, 'position' => 65, 'csslist' => 'nowraponall'), + 'fk_user_valid' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'UserValidation', 'enabled' => 1, 'visible' => -1, 'position' => 85), + 'fk_user_cloture' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'UserClosing', 'enabled' => 1, 'visible' => -1, 'position' => 90), + 'source' => array('type' => 'smallint(6)', 'label' => 'Source', 'enabled' => 1, 'visible' => -1, 'position' => 95), + 'total_tva' => array('type' => 'double(24,8)', 'label' => 'VAT', 'enabled' => 1, 'visible' => -1, 'position' => 125, 'isameasure' => 1), + 'localtax1' => array('type' => 'double(24,8)', 'label' => 'LocalTax1', 'enabled' => 1, 'visible' => -1, 'position' => 130, 'isameasure' => 1), + 'localtax2' => array('type' => 'double(24,8)', 'label' => 'LocalTax2', 'enabled' => 1, 'visible' => -1, 'position' => 135, 'isameasure' => 1), + 'total_ht' => array('type' => 'double(24,8)', 'label' => 'TotalHT', 'enabled' => 1, 'visible' => -1, 'position' => 140, 'isameasure' => 1), + 'total_ttc' => array('type' => 'double(24,8)', 'label' => 'TotalTTC', 'enabled' => 1, 'visible' => -1, 'position' => 145, 'isameasure' => 1), + 'note_private' => array('type' => 'html', 'label' => 'NotePrivate', 'enabled' => 1, 'visible' => 0, 'position' => 150), + 'note_public' => array('type' => 'html', 'label' => 'NotePublic', 'enabled' => 1, 'visible' => 0, 'position' => 155), + 'model_pdf' => array('type' => 'varchar(255)', 'label' => 'PDFTemplate', 'enabled' => 1, 'visible' => 0, 'position' => 160), + 'fk_account' => array('type' => 'integer', 'label' => 'BankAccount', 'enabled' => 'isModEnabled("bank")', 'visible' => -1, 'position' => 170), + 'fk_currency' => array('type' => 'varchar(3)', 'label' => 'MulticurrencyID', 'enabled' => 1, 'visible' => -1, 'position' => 175), + 'fk_cond_reglement' => array('type' => 'integer', 'label' => 'PaymentTerm', 'enabled' => 1, 'visible' => -1, 'position' => 180), + 'deposit_percent' => array('type' => 'varchar(63)', 'label' => 'DepositPercent', 'enabled' => 1, 'visible' => -1, 'position' => 181), + 'fk_mode_reglement' => array('type' => 'integer', 'label' => 'PaymentMode', 'enabled' => 1, 'visible' => -1, 'position' => 185), + 'date_livraison' => array('type' => 'date', 'label' => 'DateDeliveryPlanned', 'enabled' => 1, 'visible' => -1, 'position' => 190, 'csslist' => 'nowraponall'), + 'fk_shipping_method' => array('type' => 'integer', 'label' => 'ShippingMethod', 'enabled' => 1, 'visible' => -1, 'position' => 195), + 'fk_warehouse' => array('type' => 'integer:Entrepot:product/stock/class/entrepot.class.php', 'label' => 'Fk warehouse', 'enabled' => 'isModEnabled("stock")', 'visible' => -1, 'position' => 200), + 'fk_availability' => array('type' => 'integer', 'label' => 'Availability', 'enabled' => 1, 'visible' => -1, 'position' => 205), + 'fk_input_reason' => array('type' => 'integer', 'label' => 'InputReason', 'enabled' => 1, 'visible' => -1, 'position' => 210), //'fk_delivery_address' =>array('type'=>'integer', 'label'=>'DeliveryAddress', 'enabled'=>1, 'visible'=>-1, 'position'=>215), - 'extraparams' =>array('type'=>'varchar(255)', 'label'=>'Extraparams', 'enabled'=>1, 'visible'=>-1, 'position'=>225), - 'fk_incoterms' =>array('type'=>'integer', 'label'=>'IncotermCode', 'enabled'=>'$conf->incoterm->enabled', 'visible'=>-1, 'position'=>230), - 'location_incoterms' =>array('type'=>'varchar(255)', 'label'=>'IncotermLabel', 'enabled'=>'$conf->incoterm->enabled', 'visible'=>-1, 'position'=>235), - 'fk_multicurrency' =>array('type'=>'integer', 'label'=>'Fk multicurrency', 'enabled'=>'isModEnabled("multicurrency")', 'visible'=>-1, 'position'=>240), - 'multicurrency_code' =>array('type'=>'varchar(255)', 'label'=>'MulticurrencyCurrency', 'enabled'=>'isModEnabled("multicurrency")', 'visible'=>-1, 'position'=>245), - 'multicurrency_tx' =>array('type'=>'double(24,8)', 'label'=>'MulticurrencyRate', 'enabled'=>'isModEnabled("multicurrency")', 'visible'=>-1, 'position'=>250, 'isameasure'=>1), - 'multicurrency_total_ht' =>array('type'=>'double(24,8)', 'label'=>'MulticurrencyAmountHT', 'enabled'=>'isModEnabled("multicurrency")', 'visible'=>-1, 'position'=>255, 'isameasure'=>1), - 'multicurrency_total_tva' =>array('type'=>'double(24,8)', 'label'=>'MulticurrencyAmountVAT', 'enabled'=>'isModEnabled("multicurrency")', 'visible'=>-1, 'position'=>260, 'isameasure'=>1), - 'multicurrency_total_ttc' =>array('type'=>'double(24,8)', 'label'=>'MulticurrencyAmountTTC', 'enabled'=>'isModEnabled("multicurrency")', 'visible'=>-1, 'position'=>265, 'isameasure'=>1), - 'last_main_doc' =>array('type'=>'varchar(255)', 'label'=>'LastMainDoc', 'enabled'=>1, 'visible'=>-1, 'position'=>270), - 'module_source' =>array('type'=>'varchar(32)', 'label'=>'POSModule', 'enabled'=>1, 'visible'=>-1, 'position'=>275), - 'pos_source' =>array('type'=>'varchar(32)', 'label'=>'POSTerminal', 'enabled'=>1, 'visible'=>-1, 'position'=>280), - 'fk_user_author' =>array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserAuthor', 'enabled'=>1, 'visible'=>-1, 'position'=>300), - 'fk_user_modif' =>array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserModif', 'enabled'=>1, 'visible'=>-2, 'notnull'=>-1, 'position'=>302), - 'date_creation' =>array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>1, 'visible'=>-2, 'position'=>304, 'csslist'=>'nowraponall'), - 'tms' =>array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>1, 'visible'=>-1, 'notnull'=>1, 'position'=>306), - 'import_key' =>array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>1, 'visible'=>-2, 'position'=>400), - 'fk_statut' =>array('type'=>'smallint(6)', 'label'=>'Status', 'enabled'=>1, 'visible'=>-1, 'position'=>500), + 'extraparams' => array('type' => 'varchar(255)', 'label' => 'Extraparams', 'enabled' => 1, 'visible' => -1, 'position' => 225), + 'fk_incoterms' => array('type' => 'integer', 'label' => 'IncotermCode', 'enabled' => '$conf->incoterm->enabled', 'visible' => -1, 'position' => 230), + 'location_incoterms' => array('type' => 'varchar(255)', 'label' => 'IncotermLabel', 'enabled' => '$conf->incoterm->enabled', 'visible' => -1, 'position' => 235), + 'fk_multicurrency' => array('type' => 'integer', 'label' => 'Fk multicurrency', 'enabled' => 'isModEnabled("multicurrency")', 'visible' => -1, 'position' => 240), + 'multicurrency_code' => array('type' => 'varchar(255)', 'label' => 'MulticurrencyCurrency', 'enabled' => 'isModEnabled("multicurrency")', 'visible' => -1, 'position' => 245), + 'multicurrency_tx' => array('type' => 'double(24,8)', 'label' => 'MulticurrencyRate', 'enabled' => 'isModEnabled("multicurrency")', 'visible' => -1, 'position' => 250, 'isameasure' => 1), + 'multicurrency_total_ht' => array('type' => 'double(24,8)', 'label' => 'MulticurrencyAmountHT', 'enabled' => 'isModEnabled("multicurrency")', 'visible' => -1, 'position' => 255, 'isameasure' => 1), + 'multicurrency_total_tva' => array('type' => 'double(24,8)', 'label' => 'MulticurrencyAmountVAT', 'enabled' => 'isModEnabled("multicurrency")', 'visible' => -1, 'position' => 260, 'isameasure' => 1), + 'multicurrency_total_ttc' => array('type' => 'double(24,8)', 'label' => 'MulticurrencyAmountTTC', 'enabled' => 'isModEnabled("multicurrency")', 'visible' => -1, 'position' => 265, 'isameasure' => 1), + 'last_main_doc' => array('type' => 'varchar(255)', 'label' => 'LastMainDoc', 'enabled' => 1, 'visible' => -1, 'position' => 270), + 'module_source' => array('type' => 'varchar(32)', 'label' => 'POSModule', 'enabled' => 1, 'visible' => -1, 'position' => 275), + 'pos_source' => array('type' => 'varchar(32)', 'label' => 'POSTerminal', 'enabled' => 1, 'visible' => -1, 'position' => 280), + 'fk_user_author' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'UserAuthor', 'enabled' => 1, 'visible' => -1, 'position' => 300), + 'fk_user_modif' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'UserModif', 'enabled' => 1, 'visible' => -2, 'notnull' => -1, 'position' => 302), + 'date_creation' => array('type' => 'datetime', 'label' => 'DateCreation', 'enabled' => 1, 'visible' => -2, 'position' => 304, 'csslist' => 'nowraponall'), + 'tms' => array('type' => 'timestamp', 'label' => 'DateModification', 'enabled' => 1, 'visible' => -1, 'notnull' => 1, 'position' => 306), + 'import_key' => array('type' => 'varchar(14)', 'label' => 'ImportId', 'enabled' => 1, 'visible' => -2, 'position' => 400), + 'fk_statut' => array('type' => 'smallint(6)', 'label' => 'Status', 'enabled' => 1, 'visible' => -1, 'position' => 500), ); // END MODULEBUILDER PROPERTIES @@ -1287,7 +1269,7 @@ class Commande extends CommonOrder if (!$error) { // Hook of thirdparty module if (is_object($hookmanager)) { - $parameters = array('objFrom'=>$objFrom); + $parameters = array('objFrom' => $objFrom); $action = ''; $reshook = $hookmanager->executeHooks('createFrom', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { @@ -1321,8 +1303,8 @@ class Commande extends CommonOrder { global $conf, $hookmanager; - dol_include_once('/multicurrency/class/multicurrency.class.php'); - dol_include_once('/core/class/extrafields.class.php'); + require_once DOL_DOCUMENT_ROOT . '/multicurrency/class/multicurrency.class.php'; + require_once DOL_DOCUMENT_ROOT . '/core/class/extrafields.class.php'; $error = 0; @@ -1446,7 +1428,7 @@ class Commande extends CommonOrder // Actions hooked (by external module) $hookmanager->initHooks(array('orderdao')); - $parameters = array('objFrom'=>$object); + $parameters = array('objFrom' => $object); $action = ''; $reshook = $hookmanager->executeHooks('createFrom', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { @@ -1495,7 +1477,7 @@ class Commande extends CommonOrder * @param int $pa_ht Buying price (without tax) * @param string $label Label * @param array $array_options extrafields array. Example array('options_codeforfield1'=>'valueforfield1', 'options_codeforfield2'=>'valueforfield2', ...) - * @param string $fk_unit Code of the unit to use. Null to use the default one + * @param int|null $fk_unit Code of the unit to use. Null to use the default one * @param string $origin Depend on global conf MAIN_CREATEFROM_KEEP_LINE_ORIGIN_INFORMATION can be 'orderdet', 'propaldet'..., else 'order','propal,'.... * @param int $origin_id Depend on global conf MAIN_CREATEFROM_KEEP_LINE_ORIGIN_INFORMATION can be Id of origin object (aka line id), else object id * @param double $pu_ht_devise Unit price in currency @@ -2442,7 +2424,7 @@ class Commande extends CommonOrder /** * Applique une remise relative * - * @deprecated + * @deprecated Use setDiscount() instead. * @see setDiscount() * @param User $user User qui positionne la remise * @param float $remise Discount (percent) @@ -2453,6 +2435,7 @@ class Commande extends CommonOrder { // phpcs:enable dol_syslog(get_class($this)."::set_remise is deprecated, use setDiscount instead", LOG_NOTICE); + // @phan-suppress-next-line PhanDeprecatedFunction return $this->setDiscount($user, $remise, $notrigger); } @@ -2463,7 +2446,6 @@ class Commande extends CommonOrder * @param float $remise Discount (percent) * @param int $notrigger 1=Does not execute triggers, 0= execute triggers * @return int Return integer <0 if KO, >0 if OK - * @deprecated remise_percent is a deprecated field for object parent */ public function setDiscount($user, $remise, $notrigger = 0) { @@ -3104,7 +3086,7 @@ class Commande extends CommonOrder * @param string $label Label * @param int $special_code Special code (also used by externals modules!) * @param array $array_options extrafields array - * @param string $fk_unit Code of the unit to use. Null to use the default one + * @param int|null $fk_unit Code of the unit to use. Null to use the default one * @param double $pu_ht_devise Amount in currency * @param int $notrigger disable line update trigger * @param string $ref_ext external reference @@ -3830,7 +3812,7 @@ class Commande extends CommonOrder $result = ''; - if (isModEnabled("expedition") && ($option == '1' || $option == '2')) { + if (isModEnabled("shipping") && ($option == '1' || $option == '2')) { $url = DOL_URL_ROOT.'/expedition/shipment.php?id='.$this->id; } else { $url = DOL_URL_ROOT.'/commande/card.php?id='.$this->id; @@ -3919,7 +3901,7 @@ class Commande extends CommonOrder global $action; $hookmanager->initHooks(array($this->element . 'dao')); - $parameters = array('id'=>$this->id, 'getnomurl' => &$result); + $parameters = array('id' => $this->id, 'getnomurl' => &$result); $reshook = $hookmanager->executeHooks('getNomUrl', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks if ($reshook > 0) { $result = $hookmanager->resPrint; @@ -3977,7 +3959,7 @@ class Commande extends CommonOrder * Used to build previews or test instances. * id must be 0 if object instance is a specimen. * - * @return void + * @return int */ public function initAsSpecimen() { @@ -4061,6 +4043,8 @@ class Commande extends CommonOrder $xnbp++; } + + return 1; } diff --git a/htdocs/commande/contact.php b/htdocs/commande/contact.php index f031865993b..0df141b3c41 100644 --- a/htdocs/commande/contact.php +++ b/htdocs/commande/contact.php @@ -37,7 +37,7 @@ require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; // Load translation files required by the page $langs->loadLangs(array('orders', 'sendings', 'companies', 'bills')); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); @@ -71,7 +71,7 @@ if (empty($reshook)) { $result = $object->fetch($id); if ($result > 0 && $id > 0) { - $contactid = (GETPOST('userid', 'int') ? GETPOST('userid', 'int') : GETPOST('contactid', 'int')); + $contactid = (GETPOSTINT('userid') ? GETPOSTINT('userid') : GETPOSTINT('contactid')); $typeid = (GETPOST('typecontact') ? GETPOST('typecontact') : GETPOST('type')); $result = $object->add_contact($contactid, $typeid, GETPOST("source", 'aZ09')); } @@ -90,14 +90,14 @@ if (empty($reshook)) { } elseif ($action == 'swapstatut' && $user->hasRight('commande', 'creer')) { // Toggle the status of a contact if ($object->fetch($id)) { - $result = $object->swapContactStatus(GETPOST('ligne', 'int')); + $result = $object->swapContactStatus(GETPOSTINT('ligne')); } else { dol_print_error($db); } } elseif ($action == 'deletecontact' && $user->hasRight('commande', 'creer')) { // Delete contact $object->fetch($id); - $result = $object->delete_contact(GETPOST("lineid", 'int')); + $result = $object->delete_contact(GETPOSTINT("lineid")); if ($result >= 0) { header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id); diff --git a/htdocs/commande/customer.php b/htdocs/commande/customer.php index 828722687d4..4f826bf3af3 100644 --- a/htdocs/commande/customer.php +++ b/htdocs/commande/customer.php @@ -46,10 +46,10 @@ if (!$user->hasRight('facture', 'creer')) { // Load translation files required by the page $langs->loadLangs(array("companies", "orders")); -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 diff --git a/htdocs/commande/document.php b/htdocs/commande/document.php index 864375fbf5d..06ada04a04f 100644 --- a/htdocs/commande/document.php +++ b/htdocs/commande/document.php @@ -42,14 +42,14 @@ $langs->loadLangs(array('companies', 'other', 'bills', 'orders')); $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm'); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref'); // Get parameters -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 diff --git a/htdocs/commande/index.php b/htdocs/commande/index.php index 3d3bdc94425..564cfcde895 100644 --- a/htdocs/commande/index.php +++ b/htdocs/commande/index.php @@ -50,7 +50,7 @@ $hookmanager->initHooks(array('ordersindex')); // Security check -$socid = GETPOST('socid', 'int'); +$socid = GETPOSTINT('socid'); if ($user->socid > 0) { $action = ''; $socid = $user->socid; @@ -92,7 +92,7 @@ if ($tmp) { /* * Draft orders */ -if (isModEnabled('commande')) { +if (isModEnabled('order')) { $sql = "SELECT c.rowid, c.ref, s.nom as name, s.rowid as socid"; $sql .= ", s.client"; $sql .= ", s.code_client"; @@ -244,7 +244,7 @@ $max = 10; /* * Orders to process */ -if (isModEnabled('commande')) { +if (isModEnabled('order')) { $sql = "SELECT c.rowid, c.entity, c.ref, c.fk_statut, c.facture, c.date_commande as date, s.nom as name, s.rowid as socid"; $sql .= ", s.client"; $sql .= ", s.code_client"; @@ -333,7 +333,7 @@ if (isModEnabled('commande')) { /* * Orders that are in process */ -if (isModEnabled('commande')) { +if (isModEnabled('order')) { $sql = "SELECT c.rowid, c.entity, c.ref, c.fk_statut, c.facture, c.date_commande as date, s.nom as name, s.rowid as socid"; $sql .= ", s.client"; $sql .= ", s.code_client"; diff --git a/htdocs/commande/list.php b/htdocs/commande/list.php index 5ac2f55457c..e01dd74859e 100644 --- a/htdocs/commande/list.php +++ b/htdocs/commande/list.php @@ -11,7 +11,8 @@ * Copyright (C) 2015 Jean-François Ferry * Copyright (C) 2016-2023 Ferran Marcet * Copyright (C) 2018-2023 Charlene Benke - * Copyright (C) 2021 Anthony Berton + * Copyright (C) 2021-2024 Anthony Berton + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -56,29 +57,33 @@ $langs->loadLangs(array('orders', 'sendings', 'deliveries', 'companies', 'compta // Get Parameters $action = GETPOST('action', 'aZ09'); $massaction = GETPOST('massaction', 'alpha'); -$show_files = GETPOST('show_files', 'int'); +$show_files = GETPOSTINT('show_files'); $confirm = GETPOST('confirm', 'alpha'); $toselect = GETPOST('toselect', 'array'); $contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'orderlist'; $mode = GETPOST('mode', 'alpha'); -// Search Parameters -$search_datecloture_start = GETPOST('search_datecloture_start', 'int'); -if (empty($search_datecloture_start)) { - $search_datecloture_start = dol_mktime(0, 0, 0, GETPOST('search_datecloture_startmonth', 'int'), GETPOST('search_datecloture_startday', 'int'), GETPOST('search_datecloture_startyear', 'int')); +if (getDolGlobalInt('MAIN_SEE_SUBORDINATES')) { + $userschilds = $user->getAllChildIds(); } -$search_datecloture_end = GETPOST('search_datecloture_end', 'int'); -if (empty($search_datecloture_end)) { - $search_datecloture_end = dol_mktime(23, 59, 59, GETPOST('search_datecloture_endmonth', 'int'), GETPOST('search_datecloture_endday', 'int'), GETPOST('search_datecloture_endyear', 'int')); -} -$search_dateorder_start = dol_mktime(0, 0, 0, GETPOST('search_dateorder_start_month', 'int'), GETPOST('search_dateorder_start_day', 'int'), GETPOST('search_dateorder_start_year', 'int')); -$search_dateorder_end = dol_mktime(23, 59, 59, GETPOST('search_dateorder_end_month', 'int'), GETPOST('search_dateorder_end_day', 'int'), GETPOST('search_dateorder_end_year', 'int')); -$search_datedelivery_start = dol_mktime(0, 0, 0, GETPOST('search_datedelivery_start_month', 'int'), GETPOST('search_datedelivery_start_day', 'int'), GETPOST('search_datedelivery_start_year', 'int')); -$search_datedelivery_end = dol_mktime(23, 59, 59, GETPOST('search_datedelivery_end_month', 'int'), GETPOST('search_datedelivery_end_day', 'int'), GETPOST('search_datedelivery_end_year', 'int')); -$socid = GETPOST('socid', 'int'); +// Search Parameters +$search_datecloture_start = GETPOSTINT('search_datecloture_start'); +if (empty($search_datecloture_start)) { + $search_datecloture_start = dol_mktime(0, 0, 0, GETPOSTINT('search_datecloture_startmonth'), GETPOSTINT('search_datecloture_startday'), GETPOSTINT('search_datecloture_startyear')); +} +$search_datecloture_end = GETPOSTINT('search_datecloture_end'); +if (empty($search_datecloture_end)) { + $search_datecloture_end = dol_mktime(23, 59, 59, GETPOSTINT('search_datecloture_endmonth'), GETPOSTINT('search_datecloture_endday'), GETPOSTINT('search_datecloture_endyear')); +} +$search_dateorder_start = dol_mktime(0, 0, 0, GETPOSTINT('search_dateorder_start_month'), GETPOSTINT('search_dateorder_start_day'), GETPOSTINT('search_dateorder_start_year')); +$search_dateorder_end = dol_mktime(23, 59, 59, GETPOSTINT('search_dateorder_end_month'), GETPOSTINT('search_dateorder_end_day'), GETPOSTINT('search_dateorder_end_year')); +$search_datedelivery_start = dol_mktime(0, 0, 0, GETPOSTINT('search_datedelivery_start_month'), GETPOSTINT('search_datedelivery_start_day'), GETPOSTINT('search_datedelivery_start_year')); +$search_datedelivery_end = dol_mktime(23, 59, 59, GETPOSTINT('search_datedelivery_end_month'), GETPOSTINT('search_datedelivery_end_day'), GETPOSTINT('search_datedelivery_end_year')); + +$socid = GETPOSTINT('socid'); $search_all = trim((GETPOST('search_all', 'alphanohtml') != '') ? GETPOST('search_all', 'alphanohtml') : GETPOST('sall', 'alphanohtml')); -$search_product_category = GETPOST('search_product_category', 'int'); +$search_product_category = GETPOSTINT('search_product_category'); $search_ref = GETPOST('search_ref', 'alpha') != '' ? GETPOST('search_ref', 'alpha') : GETPOST('sref', 'alpha'); $search_ref_customer = GETPOST('search_ref_customer', 'alpha'); $search_company = GETPOST('search_company', 'alpha'); @@ -87,14 +92,14 @@ $search_parent_name = trim(GETPOST('search_parent_name', 'alphanohtml')); $search_town = GETPOST('search_town', 'alpha'); $search_zip = GETPOST('search_zip', 'alpha'); $search_state = GETPOST('search_state', 'alpha'); -$search_country = GETPOST('search_country', 'int'); -$search_type_thirdparty = GETPOST('search_type_thirdparty', 'int'); -$search_user = GETPOST('search_user', 'int'); -$search_sale = GETPOST('search_sale', 'int'); +$search_country = GETPOSTINT('search_country'); +$search_type_thirdparty = GETPOSTINT('search_type_thirdparty'); +$search_user = GETPOSTINT('search_user'); +$search_sale = GETPOSTINT('search_sale'); $search_total_ht = GETPOST('search_total_ht', 'alpha'); $search_total_vat = GETPOST('search_total_vat', 'alpha'); $search_total_ttc = GETPOST('search_total_ttc', 'alpha'); -$search_warehouse = GETPOST('search_warehouse', 'int'); +$search_warehouse = GETPOSTINT('search_warehouse'); $search_multicurrency_code = GETPOST('search_multicurrency_code', 'alpha'); $search_multicurrency_tx = GETPOST('search_multicurrency_tx', 'alpha'); @@ -103,26 +108,26 @@ $search_multicurrency_montant_vat = GETPOST('search_multicurrency_montant_vat', $search_multicurrency_montant_ttc = GETPOST('search_multicurrency_montant_ttc', 'alpha'); $search_login = GETPOST('search_login', 'alpha'); -$search_categ_cus = GETPOST("search_categ_cus", 'int'); +$search_categ_cus = GETPOSTINT("search_categ_cus"); $optioncss = GETPOST('optioncss', 'alpha'); $search_billed = GETPOST('search_billed', 'int'); -$search_status = GETPOST('search_status', 'int'); +$search_status = GETPOST('search_status', 'intcomma'); $search_project_ref = GETPOST('search_project_ref', 'alpha'); $search_project = GETPOST('search_project', 'alpha'); $search_shippable = GETPOST('search_shippable', 'aZ09'); -$search_fk_cond_reglement = GETPOST('search_fk_cond_reglement', 'int'); -$search_fk_shipping_method = GETPOST('search_fk_shipping_method', 'int'); -$search_fk_mode_reglement = GETPOST('search_fk_mode_reglement', 'int'); -$search_fk_input_reason = GETPOST('search_fk_input_reason', 'int'); +$search_fk_cond_reglement = GETPOSTINT('search_fk_cond_reglement'); +$search_fk_shipping_method = GETPOSTINT('search_fk_shipping_method'); +$search_fk_mode_reglement = GETPOSTINT('search_fk_mode_reglement'); +$search_fk_input_reason = GETPOSTINT('search_fk_input_reason'); $diroutputmassaction = $conf->commande->multidir_output[$conf->entity].'/temp/massgeneration/'.$user->id; // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // If $page is not defined, or '' or -1 or if we click on clear filters $page = 0; @@ -150,14 +155,14 @@ $search_array_options = $extrafields->getOptionalsFromPost($object->table_elemen // List of fields to search into when doing a "search in all" $fieldstosearchall = array( - 'c.ref'=>'Ref', - 'c.ref_client'=>'RefCustomerOrder', - 'pd.description'=>'Description', - 's.nom'=>"ThirdParty", - 's.name_alias'=>"AliasNameShort", - 's.zip'=>"Zip", - 's.town'=>"Town", - 'c.note_public'=>'NotePublic', + 'c.ref' => 'Ref', + 'c.ref_client' => 'RefCustomerOrder', + 'pd.description' => 'Description', + 's.nom' => "ThirdParty", + 's.name_alias' => "AliasNameShort", + 's.zip' => "Zip", + 's.town' => "Town", + 'c.note_public' => 'NotePublic', ); if (empty($user->socid)) { $fieldstosearchall["c.note_private"] = "NotePrivate"; @@ -165,50 +170,50 @@ if (empty($user->socid)) { $checkedtypetiers = 0; $arrayfields = array( - 'c.ref'=>array('label'=>"Ref", 'checked'=>1, 'position'=>5, 'searchall'=>1), - 'c.ref_client'=>array('label'=>"RefCustomerOrder", 'checked'=>-1, 'position'=>10, 'searchall'=>1), - 'p.ref'=>array('label'=>"ProjectRef", 'checked'=>-1, 'enabled'=>(!isModEnabled('project') ? 0 : 1), 'position'=>20), - 'p.title'=>array('label'=>"ProjectLabel", 'checked'=>0, 'enabled'=>(!isModEnabled('project') ? 0 : 1), 'position'=>25), - 's.nom'=>array('label'=>"ThirdParty", 'checked'=>1, 'position'=>30, 'searchall'=>1), - 's.name_alias'=>array('label'=>"AliasNameShort", 'checked'=>-1, 'position'=>31, 'searchall'=>1), - 's2.nom'=>array('label'=>'ParentCompany', 'position'=>32, 'checked'=>0), - 's.town'=>array('label'=>"Town", 'checked'=>-1, 'position'=>35, 'searchall'=>1), - 's.zip'=>array('label'=>"Zip", 'checked'=>-1, 'position'=>40, 'searchall'=>1), - 'state.nom'=>array('label'=>"StateShort", 'checked'=>0, 'position'=>45), - 'country.code_iso'=>array('label'=>"Country", 'checked'=>0, 'position'=>50), - 'typent.code'=>array('label'=>"ThirdPartyType", 'checked'=>$checkedtypetiers, 'position'=>55), - 'c.date_commande'=>array('label'=>"OrderDateShort", 'checked'=>1, 'position'=>60, 'csslist'=>'nowraponall'), - 'c.date_delivery'=>array('label'=>"DateDeliveryPlanned", 'checked'=>1, 'enabled'=>!getDolGlobalString('ORDER_DISABLE_DELIVERY_DATE'), 'position'=>65, 'csslist'=>'nowraponall'), - 'c.fk_shipping_method'=>array('label'=>"SendingMethod", 'checked'=>-1, 'position'=>66 , 'enabled'=>isModEnabled("expedition")), - 'c.fk_cond_reglement'=>array('label'=>"PaymentConditionsShort", 'checked'=>-1, 'position'=>67), - 'c.fk_mode_reglement'=>array('label'=>"PaymentMode", 'checked'=>-1, 'position'=>68), - 'c.fk_input_reason'=>array('label'=>"Channel", 'checked'=>-1, 'position'=>69), - 'c.total_ht'=>array('label'=>"AmountHT", 'checked'=>1, 'position'=>75), - 'c.total_vat'=>array('label'=>"AmountVAT", 'checked'=>0, 'position'=>80), - 'c.total_ttc'=>array('label'=>"AmountTTC", 'checked'=>0, 'position'=>85), - 'c.multicurrency_code'=>array('label'=>'Currency', 'checked'=>0, 'enabled'=>(!isModEnabled("multicurrency") ? 0 : 1), 'position'=>90), - 'c.multicurrency_tx'=>array('label'=>'CurrencyRate', 'checked'=>0, 'enabled'=>(!isModEnabled("multicurrency") ? 0 : 1), 'position'=>95), - 'c.multicurrency_total_ht'=>array('label'=>'MulticurrencyAmountHT', 'checked'=>0, 'enabled'=>(!isModEnabled("multicurrency") ? 0 : 1), 'position'=>100), - 'c.multicurrency_total_vat'=>array('label'=>'MulticurrencyAmountVAT', 'checked'=>0, 'enabled'=>(!isModEnabled("multicurrency") ? 0 : 1), 'position'=>105), - 'c.multicurrency_total_ttc'=>array('label'=>'MulticurrencyAmountTTC', 'checked'=>0, 'enabled'=>(!isModEnabled("multicurrency") ? 0 : 1), 'position'=>110), - 'u.login'=>array('label'=>"Author", 'checked'=>1, 'position'=>115), - 'sale_representative'=>array('label'=>"SaleRepresentativesOfThirdParty", 'checked'=>0, 'position'=>116), + 'c.ref' => array('label' => "Ref", 'checked' => 1, 'position' => 5, 'searchall' => 1), + 'c.ref_client' => array('label' => "RefCustomerOrder", 'checked' => -1, 'position' => 10, 'searchall' => 1), + 'p.ref' => array('label' => "ProjectRef", 'checked' => -1, 'enabled' => (!isModEnabled('project') ? 0 : 1), 'position' => 20), + 'p.title' => array('label' => "ProjectLabel", 'checked' => 0, 'enabled' => (!isModEnabled('project') ? 0 : 1), 'position' => 25), + 's.nom' => array('label' => "ThirdParty", 'checked' => 1, 'position' => 30, 'searchall' => 1), + 's.name_alias' => array('label' => "AliasNameShort", 'checked' => -1, 'position' => 31, 'searchall' => 1), + 's2.nom' => array('label' => 'ParentCompany', 'position' => 32, 'checked' => 0), + 's.town' => array('label' => "Town", 'checked' => -1, 'position' => 35, 'searchall' => 1), + 's.zip' => array('label' => "Zip", 'checked' => -1, 'position' => 40, 'searchall' => 1), + 'state.nom' => array('label' => "StateShort", 'checked' => 0, 'position' => 45), + 'country.code_iso' => array('label' => "Country", 'checked' => 0, 'position' => 50), + 'typent.code' => array('label' => "ThirdPartyType", 'checked' => $checkedtypetiers, 'position' => 55), + 'c.date_commande' => array('label' => "OrderDateShort", 'checked' => 1, 'position' => 60, 'csslist' => 'nowraponall'), + 'c.date_delivery' => array('label' => "DateDeliveryPlanned", 'checked' => 1, 'enabled' => !getDolGlobalString('ORDER_DISABLE_DELIVERY_DATE'), 'position' => 65, 'csslist' => 'nowraponall'), + 'c.fk_shipping_method' => array('label' => "SendingMethod", 'checked' => -1, 'position' => 66 , 'enabled' => isModEnabled("shipping")), + 'c.fk_cond_reglement' => array('label' => "PaymentConditionsShort", 'checked' => -1, 'position' => 67), + 'c.fk_mode_reglement' => array('label' => "PaymentMode", 'checked' => -1, 'position' => 68), + 'c.fk_input_reason' => array('label' => "Channel", 'checked' => -1, 'position' => 69), + 'c.total_ht' => array('label' => "AmountHT", 'checked' => 1, 'position' => 75), + 'c.total_vat' => array('label' => "AmountVAT", 'checked' => 0, 'position' => 80), + 'c.total_ttc' => array('label' => "AmountTTC", 'checked' => 0, 'position' => 85), + 'c.multicurrency_code' => array('label' => 'Currency', 'checked' => 0, 'enabled' => (!isModEnabled("multicurrency") ? 0 : 1), 'position' => 90), + 'c.multicurrency_tx' => array('label' => 'CurrencyRate', 'checked' => 0, 'enabled' => (!isModEnabled("multicurrency") ? 0 : 1), 'position' => 95), + 'c.multicurrency_total_ht' => array('label' => 'MulticurrencyAmountHT', 'checked' => 0, 'enabled' => (!isModEnabled("multicurrency") ? 0 : 1), 'position' => 100), + 'c.multicurrency_total_vat' => array('label' => 'MulticurrencyAmountVAT', 'checked' => 0, 'enabled' => (!isModEnabled("multicurrency") ? 0 : 1), 'position' => 105), + 'c.multicurrency_total_ttc' => array('label' => 'MulticurrencyAmountTTC', 'checked' => 0, 'enabled' => (!isModEnabled("multicurrency") ? 0 : 1), 'position' => 110), + 'u.login' => array('label' => "Author", 'checked' => 1, 'position' => 115), + 'sale_representative' => array('label' => "SaleRepresentativesOfThirdParty", 'checked' => 0, 'position' => 116), 'total_pa' => array('label' => (getDolGlobalString('MARGIN_TYPE') == '1' ? 'BuyingPrice' : 'CostPrice'), 'checked' => 0, 'position' => 300, 'enabled' => (!isModEnabled('margin') || !$user->hasRight("margins", "liretous") ? 0 : 1)), 'total_margin' => array('label' => 'Margin', 'checked' => 0, 'position' => 301, 'enabled' => (!isModEnabled('margin') || !$user->hasRight("margins", "liretous") ? 0 : 1)), 'total_margin_rate' => array('label' => 'MarginRate', 'checked' => 0, 'position' => 302, 'enabled' => (!isModEnabled('margin') || !$user->hasRight("margins", "liretous") || !getDolGlobalString('DISPLAY_MARGIN_RATES') ? 0 : 1)), 'total_mark_rate' => array('label' => 'MarkRate', 'checked' => 0, 'position' => 303, 'enabled' => (!isModEnabled('margin') || !$user->hasRight("margins", "liretous") || !getDolGlobalString('DISPLAY_MARK_RATES') ? 0 : 1)), - 'c.datec'=>array('label'=>"DateCreation", 'checked'=>0, 'position'=>120), - 'c.tms'=>array('label'=>"DateModificationShort", 'checked'=>0, 'position'=>125), - 'c.date_cloture'=>array('label'=>"DateClosing", 'checked'=>0, 'position'=>130), - 'c.note_public'=>array('label'=>'NotePublic', 'checked'=>0, 'enabled'=>(!getDolGlobalInt('MAIN_LIST_HIDE_PUBLIC_NOTES')), 'position'=>135, 'searchall'=>1), - 'c.note_private'=>array('label'=>'NotePrivate', 'checked'=>0, 'enabled'=>(!getDolGlobalInt('MAIN_LIST_HIDE_PRIVATE_NOTES')), 'position'=>140), - 'shippable'=>array('label'=>"Shippable", 'checked'=>1,'enabled'=>(isModEnabled("expedition")), 'position'=>990), - 'c.facture'=>array('label'=>"Billed", 'checked'=>1, 'enabled'=>(!getDolGlobalString('WORKFLOW_BILL_ON_SHIPMENT')), 'position'=>995), - 'c.import_key' =>array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>1, 'visible'=>-2, 'position'=>999), - 'c.fk_statut'=>array('label'=>"Status", 'checked'=>1, 'position'=>1000) + 'c.datec' => array('label' => "DateCreation", 'checked' => 0, 'position' => 120), + 'c.tms' => array('label' => "DateModificationShort", 'checked' => 0, 'position' => 125), + 'c.date_cloture' => array('label' => "DateClosing", 'checked' => 0, 'position' => 130), + 'c.note_public' => array('label' => 'NotePublic', 'checked' => 0, 'enabled' => (!getDolGlobalInt('MAIN_LIST_HIDE_PUBLIC_NOTES')), 'position' => 135, 'searchall' => 1), + 'c.note_private' => array('label' => 'NotePrivate', 'checked' => 0, 'enabled' => (!getDolGlobalInt('MAIN_LIST_HIDE_PRIVATE_NOTES')), 'position' => 140), + 'shippable' => array('label' => "Shippable", 'checked' => 1,'enabled' => (isModEnabled("shipping")), 'position' => 990), + 'c.facture' => array('label' => "Billed", 'checked' => 1, 'enabled' => (!getDolGlobalString('WORKFLOW_BILL_ON_SHIPMENT')), 'position' => 995), + 'c.import_key' => array('type' => 'varchar(14)', 'label' => 'ImportId', 'enabled' => 1, 'visible' => -2, 'position' => 999), + 'c.fk_statut' => array('label' => "Status", 'checked' => 1, 'position' => 1000) ); -$parameters = array('fieldstosearchall'=>$fieldstosearchall); +$parameters = array('fieldstosearchall' => $fieldstosearchall); $reshook = $hookmanager->executeHooks('completeFieldsToSearchAll', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks if ($reshook > 0) { $fieldstosearchall = empty($hookmanager->resArray['fieldstosearchall']) ? array() : $hookmanager->resArray['fieldstosearchall']; @@ -223,15 +228,16 @@ $object->fields = dol_sort_array($object->fields, 'position'); //$arrayfields['anotherfield'] = array('type'=>'integer', 'label'=>'AnotherField', 'checked'=>1, 'enabled'=>1, 'position'=>90, 'csslist'=>'right'); $arrayfields = dol_sort_array($arrayfields, 'position'); -if (!$user->hasRight('societe', 'client', 'voir')) { - $search_sale = $user->id; -} // Security check -$id = (GETPOST('orderid') ? GETPOST('orderid', 'int') : GETPOST('id', 'int')); +$id = (GETPOST('orderid') ? GETPOSTINT('orderid') : GETPOSTINT('id')); if ($user->socid) { $socid = $user->socid; } + +$permissiontoreadallthirdparty = $user->hasRight('societe', 'client', 'voir'); + + $result = restrictedArea($user, 'commande', $id, ''); $error = 0; @@ -249,7 +255,7 @@ if (!GETPOST('confirmmassaction', 'alpha') && $massaction != 'presend' && $massa $massaction = ''; } -$parameters = array('socid'=>$socid, 'arrayfields'=>&$arrayfields); +$parameters = array('socid' => $socid, 'arrayfields' => &$arrayfields); $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); @@ -327,14 +333,14 @@ if (empty($reshook)) { } $uploaddir = $conf->commande->multidir_output[$conf->entity]; $triggersendname = 'ORDER_SENTBYMAIL'; - $year=""; - $month=""; + $year = ""; + $month = ""; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; if ($massaction == 'confirm_createbills') { // Create bills from orders. $orders = GETPOST('toselect', 'array'); - $createbills_onebythird = GETPOST('createbills_onebythird', 'int'); - $validate_invoices = GETPOST('validate_invoices', 'int'); + $createbills_onebythird = GETPOSTINT('createbills_onebythird'); + $validate_invoices = GETPOSTINT('validate_invoices'); $errors = array(); @@ -343,7 +349,7 @@ if (empty($reshook)) { $TFactThirdNbLines = array(); $nb_bills_created = 0; - $lastid= 0; + $lastid = 0; $lastref = ''; $db->begin(); @@ -376,7 +382,7 @@ if (empty($reshook)) { $objecttmp->ref_client = $cmd->ref_client; } - $datefacture = dol_mktime(12, 0, 0, GETPOST('remonth', 'int'), GETPOST('reday', 'int'), GETPOST('reyear', 'int')); + $datefacture = dol_mktime(12, 0, 0, GETPOSTINT('remonth'), GETPOSTINT('reday'), GETPOSTINT('reyear')); if (empty($datefacture)) { $datefacture = dol_now(); } @@ -587,7 +593,7 @@ if (empty($reshook)) { if ($nb_bills_created == 1) { $texttoshow = $langs->trans('BillXCreated', '{s1}'); - $texttoshow = str_replace('{s1}', ''.$lastref.'', $texttoshow); + $texttoshow = str_replace('{s1}', ''.$lastref.'', $texttoshow); setEventMessages($texttoshow, null, 'mesgs'); } else { setEventMessages($langs->trans('BillCreated', $nb_bills_created), null, 'mesgs'); @@ -611,10 +617,10 @@ if (empty($reshook)) { $param .= '&search_all='.urlencode($search_all); } if ($show_files) { - $param .= '&show_files='.urlencode($show_files); + $param .= '&show_files='.urlencode((string) ($show_files)); } if ($socid > 0) { - $param .= '&socid='.urlencode($socid); + $param .= '&socid='.urlencode((string) ($socid)); } if ($search_status != '') { $param .= '&search_status='.urlencode($search_status); @@ -647,10 +653,10 @@ if (empty($reshook)) { $param .= '&search_ref_customer='.urlencode($search_ref_customer); } if ($search_user > 0) { - $param .= '&search_user='.urlencode($search_user); + $param .= '&search_user='.urlencode((string) ($search_user)); } if ($search_sale > 0) { - $param .= '&search_sale='.urlencode($search_sale); + $param .= '&search_sale='.urlencode((string) ($search_sale)); } if ($search_total_ht != '') { $param .= '&search_total_ht='.urlencode($search_total_ht); @@ -778,11 +784,7 @@ if (!$error && $massaction === 'setbilled' && $permissiontoclose) { } if (!$error) { - if ($nbok > 1) { - setEventMessages($langs->trans("RecordsModified", $nbok), null, 'mesgs'); - } else { - setEventMessages($langs->trans("RecordsModified", $nbok), null, 'mesgs'); - } + setEventMessages($langs->trans("RecordsModified", $nbok), null, 'mesgs'); $db->commit(); } else { $db->rollback(); @@ -879,6 +881,16 @@ $sql .= ' AND c.entity IN ('.getEntity('commande').')'; if ($socid > 0) { $sql .= ' AND s.rowid = '.((int) $socid); } + +// Restriction on sale representative +if (!$permissiontoreadallthirdparty) { + $sql .= " AND (EXISTS (SELECT sc.fk_soc FROM ".MAIN_DB_PREFIX."societe_commerciaux as sc WHERE sc.fk_soc = c.fk_soc AND sc.fk_user = ".((int) $user->id).")"; + if (getDolGlobalInt('MAIN_SEE_SUBORDINATES') && $userschilds) { + $sql .= " OR EXISTS (SELECT sc.fk_soc FROM ".MAIN_DB_PREFIX."societe_commerciaux as sc WHERE sc.fk_soc = c.fk_soc AND sc.fk_user IN (".$db->sanitize(implode(',', $userschilds))."))"; + } + $sql .= ")"; +} + if ($search_ref) { $sql .= natural_search('c.ref', $search_ref); } @@ -893,7 +905,7 @@ if ($search_billed != '' && $search_billed >= 0) { } if ($search_status != '') { if ($search_status <= 3 && $search_status >= -1) { // status from -1 to 3 are real status (other are virtual combination) - if ($search_status == 1 && !isModEnabled('expedition')) { + if ($search_status == 1 && !isModEnabled('shipping')) { $sql .= ' AND c.fk_statut IN (1,2)'; // If module expedition disabled, we include order with status "sent" into "validated" } else { $sql .= ' AND c.fk_statut = '.((int) $search_status); // draft, validated, in process or canceled @@ -1150,7 +1162,7 @@ if ($search_status == -2) { $title .= ' - '.$langs->trans('StatusOrderToProcessShort'); } if ($search_status == -3) { - $title .= ' - '.$langs->trans('StatusOrderValidated').', '.(!isModEnabled('expedition') ? '' : $langs->trans("StatusOrderSent").', ').$langs->trans('StatusOrderToBill'); + $title .= ' - '.$langs->trans('StatusOrderValidated').', '.(!isModEnabled('shipping') ? '' : $langs->trans("StatusOrderSent").', ').$langs->trans('StatusOrderToBill'); } if ($search_status == -4) { $title .= ' - '.$langs->trans("StatusOrderValidatedShort").'+'.$langs->trans("StatusOrderSentShort"); @@ -1227,10 +1239,10 @@ if ($search_ref_customer) { $param .= '&search_ref_customer='.urlencode($search_ref_customer); } if ($search_user > 0) { - $param .= '&search_user='.urlencode($search_user); + $param .= '&search_user='.urlencode((string) ($search_user)); } if ($search_sale > 0) { - $param .= '&search_sale='.urlencode($search_sale); + $param .= '&search_sale='.urlencode((string) ($search_sale)); } if ($search_total_ht != '') { $param .= '&search_total_ht='.urlencode($search_total_ht); @@ -1242,7 +1254,7 @@ if ($search_total_ttc != '') { $param .= '&search_total_ttc='.urlencode($search_total_ttc); } if ($search_warehouse != '') { - $param .= '&search_warehouse='.urlencode($search_warehouse); + $param .= '&search_warehouse='.urlencode((string) ($search_warehouse)); } if ($search_login) { $param .= '&search_login='.urlencode($search_login); @@ -1275,19 +1287,19 @@ if ($search_state != '') { $param .= '&search_state='.urlencode($search_state); } if ($search_country != '') { - $param .= '&search_country='.urlencode($search_country); + $param .= '&search_country='.urlencode((string) ($search_country)); } if ($search_type_thirdparty && $search_type_thirdparty != '-1') { - $param .= '&search_type_thirdparty='.urlencode($search_type_thirdparty); + $param .= '&search_type_thirdparty='.urlencode((string) ($search_type_thirdparty)); } if ($search_product_category != '') { - $param .= '&search_product_category='.urlencode($search_product_category); + $param .= '&search_product_category='.urlencode((string) ($search_product_category)); } if (($search_categ_cus > 0) || ($search_categ_cus == -2)) { - $param .= '&search_categ_cus='.urlencode($search_categ_cus); + $param .= '&search_categ_cus='.urlencode((string) ($search_categ_cus)); } if ($show_files) { - $param .= '&show_files='.urlencode($show_files); + $param .= '&show_files='.urlencode((string) ($show_files)); } if ($optioncss != '') { $param .= '&optioncss='.urlencode($optioncss); @@ -1296,16 +1308,16 @@ if ($search_billed != '') { $param .= '&search_billed='.urlencode($search_billed); } if ($search_fk_cond_reglement > 0) { - $param .= '&search_fk_cond_reglement='.urlencode($search_fk_cond_reglement); + $param .= '&search_fk_cond_reglement='.urlencode((string) ($search_fk_cond_reglement)); } if ($search_fk_shipping_method > 0) { - $param .= '&search_fk_shipping_method='.urlencode($search_fk_shipping_method); + $param .= '&search_fk_shipping_method='.urlencode((string) ($search_fk_shipping_method)); } if ($search_fk_mode_reglement > 0) { - $param .= '&search_fk_mode_reglement='.urlencode($search_fk_mode_reglement); + $param .= '&search_fk_mode_reglement='.urlencode((string) ($search_fk_mode_reglement)); } if ($search_fk_input_reason > 0) { - $param .= '&search_fk_input_reason='.urlencode($search_fk_input_reason); + $param .= '&search_fk_input_reason='.urlencode((string) ($search_fk_input_reason)); } // Add $param from extra fields @@ -1318,8 +1330,8 @@ $param .= $hookmanager->resPrint; // List of mass actions available $arrayofmassactions = array( - 'generate_doc'=>img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("ReGeneratePDF"), - 'builddoc'=>img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("PDFMerge"), + 'generate_doc' => img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("ReGeneratePDF"), + 'builddoc' => img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("PDFMerge"), ); if ($permissiontovalidate) { $arrayofmassactions['prevalidate'] = img_picto('', 'check', 'class="pictofixedwidth"').$langs->trans("Validate"); @@ -1327,7 +1339,7 @@ if ($permissiontovalidate) { if ($permissiontoclose) { $arrayofmassactions['preshipped'] = img_picto('', 'dollyrevert', 'class="pictofixedwidth"').$langs->trans("ClassifyShipped"); } -if (isModEnabled('facture') && $user->hasRight("facture", "creer")) { +if (isModEnabled('invoice') && $user->hasRight("facture", "creer")) { $arrayofmassactions['createbills'] = img_picto('', 'bill', 'class="pictofixedwidth"').$langs->trans("CreateInvoiceForThisCustomer"); } if ($permissiontoclose) { @@ -1352,8 +1364,8 @@ if (!empty($socid)) { $url .= '&socid='.$socid; } $newcardbutton = ''; -$newcardbutton .= dolGetButtonTitle($langs->trans('ViewList'), '', 'fa fa-bars imgforviewmode', $_SERVER["PHP_SELF"].'?mode=common'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ((empty($mode) || $mode == 'common') ? 2 : 1), array('morecss'=>'reposition')); -$newcardbutton .= dolGetButtonTitle($langs->trans('ViewKanban'), '', 'fa fa-th-list imgforviewmode', $_SERVER["PHP_SELF"].'?mode=kanban'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ($mode == 'kanban' ? 2 : 1), array('morecss'=>'reposition')); +$newcardbutton .= dolGetButtonTitle($langs->trans('ViewList'), '', 'fa fa-bars imgforviewmode', $_SERVER["PHP_SELF"].'?mode=common'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ((empty($mode) || $mode == 'common') ? 2 : 1), array('morecss' => 'reposition')); +$newcardbutton .= dolGetButtonTitle($langs->trans('ViewKanban'), '', 'fa fa-th-list imgforviewmode', $_SERVER["PHP_SELF"].'?mode=kanban'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ($mode == 'kanban' ? 2 : 1), array('morecss' => 'reposition')); $newcardbutton .= dolGetButtonTitleSeparator(); $newcardbutton .= dolGetButtonTitle($langs->trans('NewOrder'), '', 'fa fa-plus-circle', $url, '', ($contextpage == 'orderlist' || $contextpage == 'billableorders') && $permissiontoadd); @@ -1398,7 +1410,7 @@ if ($massaction == 'createbills') { print $langs->trans('DateInvoice'); print ''; print ''; print ''; print ''; @@ -1466,7 +1478,7 @@ if ($user->hasRight("user", "user", "lire")) { } // If the user can view other products/services than his own -if (isModEnabled('categorie') && $user->hasRight("categorie", "lire") && ($user->hasRight("produit", "lire") || $user->hasRight("service", "lire"))) { +if (isModEnabled('category') && $user->hasRight("categorie", "lire") && ($user->hasRight("produit", "lire") || $user->hasRight("service", "lire"))) { include_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; $moreforfilter .= '
'; $tmptitle = $langs->trans('IncludingProductWithTag'); @@ -1475,7 +1487,7 @@ if (isModEnabled('categorie') && $user->hasRight("categorie", "lire") && ($user- $moreforfilter .= '
'; } // If Categories are enabled & user has rights to see -if (isModEnabled('categorie') && $user->hasRight("categorie", "lire")) { +if (isModEnabled('category') && $user->hasRight("categorie", "lire")) { require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; $moreforfilter .= '
'; $tmptitle = $langs->trans('CustomersProspectsCategoriesShort'); @@ -1509,10 +1521,10 @@ if (!empty($moreforfilter)) { } $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; -$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')) : ''); // This also change content of $arrayfields +$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) : ''); // This also change content of $arrayfields $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); -if (GETPOST('autoselectall', 'int')) { +if (GETPOSTINT('autoselectall')) { $selectedfields .= ''; } - if (!GETPOST('fac_rec', 'int')) { + if (!GETPOSTINT('fac_rec')) { print ' '; } print ''; @@ -3359,8 +3403,8 @@ if ($action == 'create') { } // Overwrite some values if creation of invoice is from a predefined invoice - if (empty($origin) && empty($originid) && GETPOST('fac_rec', 'int') > 0) { - $invoice_predefined->fetch(GETPOST('fac_rec', 'int')); + if (empty($origin) && empty($originid) && GETPOSTINT('fac_rec') > 0) { + $invoice_predefined->fetch(GETPOSTINT('fac_rec')); $dateinvoice = $invoice_predefined->date_when; // To use next gen date by default later if (empty($projectid)) { @@ -3396,9 +3440,9 @@ if ($action == 'create') { while ($i < $num) { $objp = $db->fetch_object($resql); print ''; $i++; @@ -3434,8 +3478,9 @@ if ($action == 'create') { // Standard invoice print '
'; - $tmp = ' '; + $tmp = ' '; $tmp = $tmp.''; + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder $desc = $form->textwithpicto($tmp, $langs->transnoentities("InvoiceStandardDesc"), 1, 'help', '', 0, 3, 'standardonsmartphone'); print '
'; - if (isModEnabled('commande')) { + if (isModEnabled('order')) { print $form->textwithpicto($langs->trans('AvailabilityPeriod'), $langs->trans('AvailabilityPeriod').' ('.$langs->trans('AfterOrder').')'); } else { print $langs->trans('AvailabilityPeriod'); @@ -2679,7 +2695,7 @@ if ($action == 'create') { print '
'; print ''; } - if (getDolGlobalString('BANK_ASK_PAYMENT_BANK_DURING_PROPOSAL') && isModEnabled("banque")) { + if (getDolGlobalString('BANK_ASK_PAYMENT_BANK_DURING_PROPOSAL') && isModEnabled("bank")) { // Bank Account print ''; + if (!$i) { + $totalarray['nbfield']++; + } + } + // Date cloture + if (!empty($arrayfields['p.date_cloture']['checked'])) { + print ''; + if (!$i) { + $totalarray['nbfield']++; + } + } + // Note public + if (!empty($arrayfields['p.note_public']['checked'])) { + print ''; + if (!$i) { + $totalarray['nbfield']++; + } + } + // Note private + if (!empty($arrayfields['p.note_private']['checked'])) { + print ''; + if (!$i) { + $totalarray['nbfield']++; + } + } + // Status + if (!empty($arrayfields['p.fk_statut']['checked'])) { + print ''; + if (!$i) { + $totalarray['nbfield']++; + } + } + // Action column + if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) { + print ''; + if (!$i) { + $totalarray['nbfield']++; + } } - require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php'; - $formfile = new FormFile($db); - // Show list of available documents - $urlsource = $_SERVER['PHP_SELF'].'?sortfield='.$sortfield.'&sortorder='.$sortorder; - $urlsource .= str_replace('&', '&', $param); - - $filedir = $diroutputmassaction; - $genallowed = $permissiontoread; - $delallowed = $permissiontoadd; - - print $formfile->showdocuments('massfilesarea_proposals', '', $filedir, $urlsource, 0, $delallowed, '', 1, 1, 0, 48, 1, $param, $title, '', '', '', null, $hidegeneratedfilelistifempty); + print ''."\n"; } - // End of page - llxFooter(); - $db->close(); + $i++; +} + +// Show total line +include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php'; + +// If no record found +if ($num == 0) { + $colspan = 1; + foreach ($arrayfields as $key => $val) { + if (!empty($val['checked'])) { + $colspan++; + } + } + print ''; +} + +$db->free($resql); + +$parameters = array('arrayfields' => $arrayfields, 'sql' => $sql); +$reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters, $object, $action); // Note that $action and $object may have been modified by hook +print $hookmanager->resPrint; + +print '
'; print $langs->trans('SendingMethod'); @@ -2797,7 +2813,7 @@ if ($action == 'create') { print '
'; print ''; print ''; - print ''; + print ''; if (isModEnabled("multicurrency") && ($object->multicurrency_code && $object->multicurrency_code != $conf->currency)) { - print ''; + print ''; } print ''; print ''; print ''; - print ''; + print ''; if (isModEnabled("multicurrency") && ($object->multicurrency_code && $object->multicurrency_code != $conf->currency)) { - print ''; + print ''; } print ''; if ($mysoc->localtax1_assuj == "1" || $object->total_localtax1 != 0) { print ''; print ''; - print ''; + print ''; if (isModEnabled("multicurrency") && ($object->multicurrency_code && $object->multicurrency_code != $conf->currency)) { - print ''; + $object->multicurrency_total_localtax1 = price2num($object->total_localtax1 * $object->multicurrency_tx, 'MT'); + + print ''; } print ''; + } - if ($mysoc->localtax2_assuj == "1" || $object->total_localtax2 != 0) { - print ''; - print ''; - print ''; - if (isModEnabled("multicurrency") && ($object->multicurrency_code && $object->multicurrency_code != $conf->currency)) { - print ''; - } - print ''; + if ($mysoc->localtax2_assuj == "1" || $object->total_localtax2 != 0) { + print ''; + print ''; + print ''; + if (isModEnabled("multicurrency") && ($object->multicurrency_code && $object->multicurrency_code != $conf->currency)) { + $object->multicurrency_total_localtax2 = price2num($object->total_localtax2 * $object->multicurrency_tx, 'MT'); + + print ''; } + print ''; } print ''; print ''; - print ''; + print ''; if (isModEnabled("multicurrency") && ($object->multicurrency_code && $object->multicurrency_code != $conf->currency)) { - print ''; + print ''; } print ''; @@ -3041,7 +3061,7 @@ if ($action == 'create') { } // Create a sale order - if (isModEnabled('commande') && $object->statut == Propal::STATUS_SIGNED) { + if (isModEnabled('order') && $object->statut == Propal::STATUS_SIGNED) { if ($usercancreateorder) { print ''.$langs->trans("AddOrder").''; } @@ -3057,7 +3077,7 @@ if ($action == 'create') { } // Create an intervention - if (isModEnabled("service") && isModEnabled('ficheinter') && $object->statut == Propal::STATUS_SIGNED) { + if (isModEnabled("service") && isModEnabled('intervention') && $object->statut == Propal::STATUS_SIGNED) { if ($usercancreateintervention) { $langs->load("interventions"); print ''.$langs->trans("AddIntervention").''; @@ -3065,7 +3085,7 @@ if ($action == 'create') { } // Create contract - if (isModEnabled('contrat') && $object->statut == Propal::STATUS_SIGNED) { + if (isModEnabled('contract') && $object->statut == Propal::STATUS_SIGNED) { $langs->load("contracts"); if ($usercancreatecontract) { @@ -3075,7 +3095,7 @@ if ($action == 'create') { // Create an invoice and classify billed if ($object->statut == Propal::STATUS_SIGNED && !getDolGlobalString('PROPOSAL_ARE_NOT_BILLABLE')) { - if (isModEnabled('facture') && $usercancreateinvoice) { + if (isModEnabled('invoice') && $usercancreateinvoice) { print ''.$langs->trans("CreateBill").''; } diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index e7b60d6ad39..9ea34ae4d3a 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -13,12 +13,13 @@ * Copyright (C) 2013 Florian Henry * Copyright (C) 2014-2015 Marcos García * Copyright (C) 2018 Nicolas ZABOURI - * Copyright (C) 2018-2021 Frédéric France + * Copyright (C) 2018-2024 Frédéric France * Copyright (C) 2018 Ferran Marcet * Copyright (C) 2022 ATM Consulting * Copyright (C) 2022 OpenDSI * Copyright (C) 2022 Gauthier VERDOL * Copyright (C) 2023 William Mead + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -280,18 +281,6 @@ class Propal extends CommonObject public $labelStatus = array(); public $labelStatusShort = array(); - // Multicurrency - /** - * @var int ID - */ - public $fk_multicurrency; - - public $multicurrency_code; - public $multicurrency_tx; - public $multicurrency_total_ht; - public $multicurrency_total_tva; - public $multicurrency_total_ttc; - /** * 'type' if the field format ('integer', 'integer:ObjectClass:PathToClass[:AddCreateButtonOrNot[:Filter]]', 'varchar(x)', 'double(24,8)', 'real', 'price', 'text', 'html', 'date', 'datetime', 'timestamp', 'duration', 'mail', 'phone', 'url', 'password') @@ -319,58 +308,58 @@ class Propal extends CommonObject // BEGIN MODULEBUILDER PROPERTIES /** - * @var array Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. + * @var array|string,position:int,notnull?:int,visible:int,noteditable?:int,default?:string,index?:int,foreignkey?:string,searchall?:int,isameasure?:int,css?:string,csslist?:string,help?:string,showoncombobox?:int,disabled?:int,arrayofkeyval?:array,comment?:string}> Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. */ public $fields = array( - 'rowid' =>array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>1, 'visible'=>-1, 'notnull'=>1, 'position'=>10), - 'entity' =>array('type'=>'integer', 'label'=>'Entity', 'default'=>1, 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>15, 'index'=>1), - 'ref' =>array('type'=>'varchar(30)', 'label'=>'Ref', 'enabled'=>1, 'visible'=>-1, 'notnull'=>1, 'showoncombobox'=>1, 'position'=>20), - 'ref_client' =>array('type'=>'varchar(255)', 'label'=>'RefCustomer', 'enabled'=>1, 'visible'=>-1, 'position'=>22), - 'ref_ext' =>array('type'=>'varchar(255)', 'label'=>'RefExt', 'enabled'=>1, 'visible'=>0, 'position'=>40), - 'fk_soc' =>array('type'=>'integer:Societe:societe/class/societe.class.php', 'label'=>'ThirdParty', 'enabled'=>'isModEnabled("societe")', 'visible'=>-1, 'position'=>23), - 'fk_projet' =>array('type'=>'integer:Project:projet/class/project.class.php:1:(fk_statut:=:1)', 'label'=>'Fk projet', 'enabled'=>"isModEnabled('project')", 'visible'=>-1, 'position'=>24), - 'tms' =>array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>1, 'visible'=>-1, 'notnull'=>1, 'position'=>25), - 'datec' =>array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>1, 'visible'=>-1, 'position'=>55), - 'datep' =>array('type'=>'date', 'label'=>'Date', 'enabled'=>1, 'visible'=>-1, 'position'=>60), - 'fin_validite' =>array('type'=>'datetime', 'label'=>'DateEnd', 'enabled'=>1, 'visible'=>-1, 'position'=>65), - 'date_valid' =>array('type'=>'datetime', 'label'=>'DateValidation', 'enabled'=>1, 'visible'=>-1, 'position'=>70), - 'date_cloture' =>array('type'=>'datetime', 'label'=>'DateClosing', 'enabled'=>1, 'visible'=>-1, 'position'=>75), - 'fk_user_author' =>array('type'=>'integer:User:user/class/user.class.php', 'label'=>'Fk user author', 'enabled'=>1, 'visible'=>-1, 'position'=>80), - 'fk_user_modif' =>array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserModif', 'enabled'=>1, 'visible'=>-2, 'notnull'=>-1, 'position'=>85), - 'fk_user_valid' =>array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserValidation', 'enabled'=>1, 'visible'=>-1, 'position'=>90), - 'fk_user_cloture' =>array('type'=>'integer:User:user/class/user.class.php', 'label'=>'Fk user cloture', 'enabled'=>1, 'visible'=>-1, 'position'=>95), - 'price' =>array('type'=>'double', 'label'=>'Price', 'enabled'=>1, 'visible'=>-1, 'position'=>105), - 'total_ht' =>array('type'=>'double(24,8)', 'label'=>'TotalHT', 'enabled'=>1, 'visible'=>-1, 'position'=>125, 'isameasure'=>1), - 'total_tva' =>array('type'=>'double(24,8)', 'label'=>'VAT', 'enabled'=>1, 'visible'=>-1, 'position'=>130, 'isameasure'=>1), - 'localtax1' =>array('type'=>'double(24,8)', 'label'=>'LocalTax1', 'enabled'=>1, 'visible'=>-1, 'position'=>135, 'isameasure'=>1), - 'localtax2' =>array('type'=>'double(24,8)', 'label'=>'LocalTax2', 'enabled'=>1, 'visible'=>-1, 'position'=>140, 'isameasure'=>1), - 'total_ttc' =>array('type'=>'double(24,8)', 'label'=>'TotalTTC', 'enabled'=>1, 'visible'=>-1, 'position'=>145, 'isameasure'=>1), - 'fk_account' =>array('type'=>'integer', 'label'=>'BankAccount', 'enabled'=>'isModEnabled("banque")', 'visible'=>-1, 'position'=>150), - 'fk_currency' =>array('type'=>'varchar(3)', 'label'=>'Currency', 'enabled'=>1, 'visible'=>-1, 'position'=>155), - 'fk_cond_reglement' =>array('type'=>'integer', 'label'=>'PaymentTerm', 'enabled'=>1, 'visible'=>-1, 'position'=>160), - 'deposit_percent' =>array('type'=>'varchar(63)', 'label'=>'DepositPercent', 'enabled'=>1, 'visible'=>-1, 'position'=>161), - 'fk_mode_reglement' =>array('type'=>'integer', 'label'=>'PaymentMode', 'enabled'=>1, 'visible'=>-1, 'position'=>165), - 'note_private' =>array('type'=>'html', 'label'=>'NotePrivate', 'enabled'=>1, 'visible'=>0, 'position'=>170), - 'note_public' =>array('type'=>'html', 'label'=>'NotePublic', 'enabled'=>1, 'visible'=>0, 'position'=>175), - 'model_pdf' =>array('type'=>'varchar(255)', 'label'=>'PDFTemplate', 'enabled'=>1, 'visible'=>0, 'position'=>180), - 'date_livraison' =>array('type'=>'date', 'label'=>'DateDeliveryPlanned', 'enabled'=>1, 'visible'=>-1, 'position'=>185), - 'fk_shipping_method' =>array('type'=>'integer', 'label'=>'ShippingMethod', 'enabled'=>1, 'visible'=>-1, 'position'=>190), - 'fk_warehouse' =>array('type'=>'integer:Entrepot:product/stock/class/entrepot.class.php', 'label'=>'Fk warehouse', 'enabled'=>'isModEnabled("stock")', 'visible'=>-1, 'position'=>191), - 'fk_availability' =>array('type'=>'integer', 'label'=>'Availability', 'enabled'=>1, 'visible'=>-1, 'position'=>195), - 'fk_delivery_address' =>array('type'=>'integer', 'label'=>'DeliveryAddress', 'enabled'=>1, 'visible'=>0, 'position'=>200), // deprecated - 'fk_input_reason' =>array('type'=>'integer', 'label'=>'InputReason', 'enabled'=>1, 'visible'=>-1, 'position'=>205), - 'extraparams' =>array('type'=>'varchar(255)', 'label'=>'Extraparams', 'enabled'=>1, 'visible'=>-1, 'position'=>215), - 'fk_incoterms' =>array('type'=>'integer', 'label'=>'IncotermCode', 'enabled'=>'$conf->incoterm->enabled', 'visible'=>-1, 'position'=>220), - 'location_incoterms' =>array('type'=>'varchar(255)', 'label'=>'IncotermLabel', 'enabled'=>'$conf->incoterm->enabled', 'visible'=>-1, 'position'=>225), - 'fk_multicurrency' =>array('type'=>'integer', 'label'=>'MulticurrencyID', 'enabled'=>1, 'visible'=>-1, 'position'=>230), - 'multicurrency_code' =>array('type'=>'varchar(255)', 'label'=>'MulticurrencyCurrency', 'enabled'=>'isModEnabled("multicurrency")', 'visible'=>-1, 'position'=>235), - 'multicurrency_tx' =>array('type'=>'double(24,8)', 'label'=>'MulticurrencyRate', 'enabled'=>'isModEnabled("multicurrency")', 'visible'=>-1, 'position'=>240, 'isameasure'=>1), - 'multicurrency_total_ht' =>array('type'=>'double(24,8)', 'label'=>'MulticurrencyAmountHT', 'enabled'=>'isModEnabled("multicurrency")', 'visible'=>-1, 'position'=>245, 'isameasure'=>1), - 'multicurrency_total_tva' =>array('type'=>'double(24,8)', 'label'=>'MulticurrencyAmountVAT', 'enabled'=>'isModEnabled("multicurrency")', 'visible'=>-1, 'position'=>250, 'isameasure'=>1), - 'multicurrency_total_ttc' =>array('type'=>'double(24,8)', 'label'=>'MulticurrencyAmountTTC', 'enabled'=>'isModEnabled("multicurrency")', 'visible'=>-1, 'position'=>255, 'isameasure'=>1), - 'last_main_doc' =>array('type'=>'varchar(255)', 'label'=>'LastMainDoc', 'enabled'=>1, 'visible'=>-1, 'position'=>260), - 'fk_statut' =>array('type'=>'smallint(6)', 'label'=>'Status', 'enabled'=>1, 'visible'=>-1, 'notnull'=>1, 'position'=>500), - 'import_key' =>array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>1, 'visible'=>-2, 'position'=>900), + 'rowid' => array('type' => 'integer', 'label' => 'TechnicalID', 'enabled' => 1, 'visible' => -1, 'notnull' => 1, 'position' => 10), + 'entity' => array('type' => 'integer', 'label' => 'Entity', 'default' => '1', 'enabled' => 1, 'visible' => -2, 'notnull' => 1, 'position' => 15, 'index' => 1), + 'ref' => array('type' => 'varchar(30)', 'label' => 'Ref', 'enabled' => 1, 'visible' => -1, 'notnull' => 1, 'showoncombobox' => 1, 'position' => 20), + 'ref_client' => array('type' => 'varchar(255)', 'label' => 'RefCustomer', 'enabled' => 1, 'visible' => -1, 'position' => 22), + 'ref_ext' => array('type' => 'varchar(255)', 'label' => 'RefExt', 'enabled' => 1, 'visible' => 0, 'position' => 40), + 'fk_soc' => array('type' => 'integer:Societe:societe/class/societe.class.php', 'label' => 'ThirdParty', 'enabled' => 'isModEnabled("societe")', 'visible' => -1, 'position' => 23), + 'fk_projet' => array('type' => 'integer:Project:projet/class/project.class.php:1:(fk_statut:=:1)', 'label' => 'Fk projet', 'enabled' => "isModEnabled('project')", 'visible' => -1, 'position' => 24), + 'tms' => array('type' => 'timestamp', 'label' => 'DateModification', 'enabled' => 1, 'visible' => -1, 'notnull' => 1, 'position' => 25), + 'datec' => array('type' => 'datetime', 'label' => 'DateCreation', 'enabled' => 1, 'visible' => -1, 'position' => 55), + 'datep' => array('type' => 'date', 'label' => 'Date', 'enabled' => 1, 'visible' => -1, 'position' => 60), + 'fin_validite' => array('type' => 'datetime', 'label' => 'DateEnd', 'enabled' => 1, 'visible' => -1, 'position' => 65), + 'date_valid' => array('type' => 'datetime', 'label' => 'DateValidation', 'enabled' => 1, 'visible' => -1, 'position' => 70), + 'date_cloture' => array('type' => 'datetime', 'label' => 'DateClosing', 'enabled' => 1, 'visible' => -1, 'position' => 75), + 'fk_user_author' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'Fk user author', 'enabled' => 1, 'visible' => -1, 'position' => 80), + 'fk_user_modif' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'UserModif', 'enabled' => 1, 'visible' => -2, 'notnull' => -1, 'position' => 85), + 'fk_user_valid' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'UserValidation', 'enabled' => 1, 'visible' => -1, 'position' => 90), + 'fk_user_cloture' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'Fk user cloture', 'enabled' => 1, 'visible' => -1, 'position' => 95), + 'price' => array('type' => 'double', 'label' => 'Price', 'enabled' => 1, 'visible' => -1, 'position' => 105), + 'total_ht' => array('type' => 'double(24,8)', 'label' => 'TotalHT', 'enabled' => 1, 'visible' => -1, 'position' => 125, 'isameasure' => 1), + 'total_tva' => array('type' => 'double(24,8)', 'label' => 'VAT', 'enabled' => 1, 'visible' => -1, 'position' => 130, 'isameasure' => 1), + 'localtax1' => array('type' => 'double(24,8)', 'label' => 'LocalTax1', 'enabled' => 1, 'visible' => -1, 'position' => 135, 'isameasure' => 1), + 'localtax2' => array('type' => 'double(24,8)', 'label' => 'LocalTax2', 'enabled' => 1, 'visible' => -1, 'position' => 140, 'isameasure' => 1), + 'total_ttc' => array('type' => 'double(24,8)', 'label' => 'TotalTTC', 'enabled' => 1, 'visible' => -1, 'position' => 145, 'isameasure' => 1), + 'fk_account' => array('type' => 'integer', 'label' => 'BankAccount', 'enabled' => 'isModEnabled("bank")', 'visible' => -1, 'position' => 150), + 'fk_currency' => array('type' => 'varchar(3)', 'label' => 'Currency', 'enabled' => 1, 'visible' => -1, 'position' => 155), + 'fk_cond_reglement' => array('type' => 'integer', 'label' => 'PaymentTerm', 'enabled' => 1, 'visible' => -1, 'position' => 160), + 'deposit_percent' => array('type' => 'varchar(63)', 'label' => 'DepositPercent', 'enabled' => 1, 'visible' => -1, 'position' => 161), + 'fk_mode_reglement' => array('type' => 'integer', 'label' => 'PaymentMode', 'enabled' => 1, 'visible' => -1, 'position' => 165), + 'note_private' => array('type' => 'html', 'label' => 'NotePrivate', 'enabled' => 1, 'visible' => 0, 'position' => 170), + 'note_public' => array('type' => 'html', 'label' => 'NotePublic', 'enabled' => 1, 'visible' => 0, 'position' => 175), + 'model_pdf' => array('type' => 'varchar(255)', 'label' => 'PDFTemplate', 'enabled' => 1, 'visible' => 0, 'position' => 180), + 'date_livraison' => array('type' => 'date', 'label' => 'DateDeliveryPlanned', 'enabled' => 1, 'visible' => -1, 'position' => 185), + 'fk_shipping_method' => array('type' => 'integer', 'label' => 'ShippingMethod', 'enabled' => 1, 'visible' => -1, 'position' => 190), + 'fk_warehouse' => array('type' => 'integer:Entrepot:product/stock/class/entrepot.class.php', 'label' => 'Fk warehouse', 'enabled' => 'isModEnabled("stock")', 'visible' => -1, 'position' => 191), + 'fk_availability' => array('type' => 'integer', 'label' => 'Availability', 'enabled' => 1, 'visible' => -1, 'position' => 195), + 'fk_delivery_address' => array('type' => 'integer', 'label' => 'DeliveryAddress', 'enabled' => 1, 'visible' => 0, 'position' => 200), // deprecated + 'fk_input_reason' => array('type' => 'integer', 'label' => 'InputReason', 'enabled' => 1, 'visible' => -1, 'position' => 205), + 'extraparams' => array('type' => 'varchar(255)', 'label' => 'Extraparams', 'enabled' => 1, 'visible' => -1, 'position' => 215), + 'fk_incoterms' => array('type' => 'integer', 'label' => 'IncotermCode', 'enabled' => '$conf->incoterm->enabled', 'visible' => -1, 'position' => 220), + 'location_incoterms' => array('type' => 'varchar(255)', 'label' => 'IncotermLabel', 'enabled' => '$conf->incoterm->enabled', 'visible' => -1, 'position' => 225), + 'fk_multicurrency' => array('type' => 'integer', 'label' => 'MulticurrencyID', 'enabled' => 1, 'visible' => -1, 'position' => 230), + 'multicurrency_code' => array('type' => 'varchar(255)', 'label' => 'MulticurrencyCurrency', 'enabled' => 'isModEnabled("multicurrency")', 'visible' => -1, 'position' => 235), + 'multicurrency_tx' => array('type' => 'double(24,8)', 'label' => 'MulticurrencyRate', 'enabled' => 'isModEnabled("multicurrency")', 'visible' => -1, 'position' => 240, 'isameasure' => 1), + 'multicurrency_total_ht' => array('type' => 'double(24,8)', 'label' => 'MulticurrencyAmountHT', 'enabled' => 'isModEnabled("multicurrency")', 'visible' => -1, 'position' => 245, 'isameasure' => 1), + 'multicurrency_total_tva' => array('type' => 'double(24,8)', 'label' => 'MulticurrencyAmountVAT', 'enabled' => 'isModEnabled("multicurrency")', 'visible' => -1, 'position' => 250, 'isameasure' => 1), + 'multicurrency_total_ttc' => array('type' => 'double(24,8)', 'label' => 'MulticurrencyAmountTTC', 'enabled' => 'isModEnabled("multicurrency")', 'visible' => -1, 'position' => 255, 'isameasure' => 1), + 'last_main_doc' => array('type' => 'varchar(255)', 'label' => 'LastMainDoc', 'enabled' => 1, 'visible' => -1, 'position' => 260), + 'fk_statut' => array('type' => 'smallint(6)', 'label' => 'Status', 'enabled' => 1, 'visible' => -1, 'notnull' => 1, 'position' => 500), + 'import_key' => array('type' => 'varchar(14)', 'label' => 'ImportId', 'enabled' => 1, 'visible' => -2, 'position' => 900), ); // END MODULEBUILDER PROPERTIES @@ -409,8 +398,6 @@ class Propal extends CommonObject */ public function __construct($db, $socid = 0, $propalid = 0) { - global $conf, $langs; - $this->db = $db; $this->socid = $socid; @@ -514,7 +501,7 @@ class Propal extends CommonObject $line = new PropaleLigne($this->db); - $this->line->context = $this->context; + $line->context = $this->context; $line->fk_propal = $this->id; $line->fk_remise_except = $remise->id; @@ -585,7 +572,7 @@ class Propal extends CommonObject * @param int|string $date_start Start date of the line * @param int|string $date_end End date of the line * @param array $array_options extrafields array - * @param string $fk_unit Code of the unit to use. Null to use the default one + * @param int|null $fk_unit Code of the unit to use. Null to use the default one * @param string $origin Depend on global conf MAIN_CREATEFROM_KEEP_LINE_ORIGIN_INFORMATION can be 'orderdet', 'propaldet'..., else 'order','propal,'.... * @param int $origin_id Depend on global conf MAIN_CREATEFROM_KEEP_LINE_ORIGIN_INFORMATION can be Id of origin object (aka line id), else object id * @param double $pu_ht_devise Unit price in currency @@ -674,7 +661,6 @@ class Propal extends CommonObject // Clean vat code $reg = array(); $vat_src_code = ''; - $reg = array(); if (preg_match('/\((.*)\)/', $txtva, $reg)) { $vat_src_code = $reg[1]; $txtva = preg_replace('/\s*\(.*\)/', '', $txtva); // Remove code into vatrate. @@ -835,7 +821,7 @@ class Propal extends CommonObject * @param int|string $date_start Start date of the line * @param int|string $date_end End date of the line * @param array $array_options extrafields array - * @param string $fk_unit Code of the unit to use. Null to use the default one + * @param int|null $fk_unit Code of the unit to use. Null to use the default one * @param double $pu_ht_devise Unit price in currency * @param int $notrigger disable line update trigger * @param integer $rang line rank @@ -1536,7 +1522,7 @@ class Propal extends CommonObject if (!$error) { // Hook of thirdparty module if (is_object($hookmanager)) { - $parameters = array('objFrom'=>$this, 'clonedObj'=>$object); + $parameters = array('objFrom' => $this, 'clonedObj' => $object); $action = ''; $reshook = $hookmanager->executeHooks('createFrom', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { @@ -2475,136 +2461,6 @@ class Propal extends CommonObject return -1; } - // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps - /** - * Set an overall discount on the proposal - * - * @param User $user Object user that modify - * @param double $remise Amount discount - * @param int $notrigger 1=Does not execute triggers, 0= execute triggers - * @return int Return integer <0 if ko, >0 if ok - * @deprecated remise_percent is a deprecated field for object parent - */ - /* - public function set_remise_percent($user, $remise, $notrigger = 0) - { - // phpcs:enable - $remise = trim($remise) ?trim($remise) : 0; - - if ($user->hasRight('propal', 'creer')) { - $remise = price2num($remise, 2); - - $error = 0; - - $this->db->begin(); - - $sql = "UPDATE ".MAIN_DB_PREFIX."propal SET remise_percent = ".((float) $remise); - $sql .= " WHERE rowid = ".((int) $this->id)." AND fk_statut = ".self::STATUS_DRAFT; - - dol_syslog(__METHOD__, LOG_DEBUG); - $resql = $this->db->query($sql); - if (!$resql) { - $this->errors[] = $this->db->error(); - $error++; - } - - if (!$error) { - $this->oldcopy = clone $this; - $this->remise_percent = $remise; - $this->update_price(1); - } - - if (!$notrigger && empty($error)) { - // Call trigger - $result = $this->call_trigger('PROPAL_MODIFY', $user); - if ($result < 0) { - $error++; - } - // End call triggers - } - - if (!$error) { - $this->db->commit(); - return 1; - } else { - foreach ($this->errors as $errmsg) { - dol_syslog(__METHOD__.' Error: '.$errmsg, LOG_ERR); - $this->error .= ($this->error ? ', '.$errmsg : $errmsg); - } - $this->db->rollback(); - return -1 * $error; - } - } - - return -1; - } - */ - - // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps - /** - * Set an absolute overall discount on the proposal - * - * @param User $user Object user that modify - * @param double $remise Amount discount - * @param int $notrigger 1=Does not execute triggers, 0= execute triggers - * @return int Return integer <0 if ko, >0 if ok - */ - /* - public function set_remise_absolue($user, $remise, $notrigger = 0) - { - // phpcs:enable - if (empty($remise)) { - $remise = 0; - } - $remise = price2num($remise); - - if ($user->hasRight('propal', 'creer')) { - $error = 0; - - $this->db->begin(); - - $sql = "UPDATE ".MAIN_DB_PREFIX."propal"; - $sql .= " SET remise_absolue = ".((float) $remise); - $sql .= " WHERE rowid = ".((int) $this->id)." AND fk_statut = ".self::STATUS_DRAFT; - - dol_syslog(__METHOD__, LOG_DEBUG); - $resql = $this->db->query($sql); - if (!$resql) { - $this->errors[] = $this->db->error(); - $error++; - } - - if (!$error) { - $this->oldcopy = clone $this; - $this->update_price(1); - } - - if (!$notrigger && empty($error)) { - // Call trigger - $result = $this->call_trigger('PROPAL_MODIFY', $user); - if ($result < 0) { - $error++; - } - // End call triggers - } - - if (!$error) { - $this->db->commit(); - return 1; - } else { - foreach ($this->errors as $errmsg) { - dol_syslog(__METHOD__.' Error: '.$errmsg, LOG_ERR); - $this->error .= ($this->error ? ', '.$errmsg : $errmsg); - } - $this->db->rollback(); - return -1 * $error; - } - } - - return -1; - } - */ - /** * Reopen the commercial proposal @@ -2706,7 +2562,7 @@ class Propal extends CommonObject $resql = $this->db->query($sql); if ($resql) { // Status self::STATUS_REFUSED by default - $modelpdf = getDolGlobalString('PROPALE_ADDON_PDF_ODT_CLOSED') ? $conf->global->PROPALE_ADDON_PDF_ODT_CLOSED : $this->model_pdf; + $modelpdf = getDolGlobalString('PROPALE_ADDON_PDF_ODT_CLOSED', $this->model_pdf); $trigger_name = 'PROPAL_CLOSE_REFUSED'; // used later in call_trigger() if ($status == self::STATUS_SIGNED) { // Status self::STATUS_SIGNED @@ -2714,12 +2570,12 @@ class Propal extends CommonObject $modelpdf = getDolGlobalString('PROPALE_ADDON_PDF_ODT_TOBILL') ? $conf->global->PROPALE_ADDON_PDF_ODT_TOBILL : $this->model_pdf; // The connected company is classified as a client - $soc=new Societe($this->db); + $soc = new Societe($this->db); $soc->id = $this->socid; $result = $soc->setAsCustomer(); if ($result < 0) { - $this->error=$this->db->lasterror(); + $this->error = $this->db->lasterror(); $this->db->rollback(); return -2; } @@ -2744,7 +2600,7 @@ class Propal extends CommonObject } if (!$error) { - $this->oldcopy= clone $this; + $this->oldcopy = clone $this; $this->statut = $status; $this->status = $status; $this->date_signature = $date_signature; @@ -2753,7 +2609,7 @@ class Propal extends CommonObject if (!$notrigger && empty($error)) { // Call trigger - $result=$this->call_trigger($trigger_name, $user); + $result = $this->call_trigger($trigger_name, $user); if ($result < 0) { $error++; } @@ -2816,7 +2672,7 @@ class Propal extends CommonObject } if (!$error) { - $modelpdf = $conf->global->PROPALE_ADDON_PDF_ODT_CLOSED ? $conf->global->PROPALE_ADDON_PDF_ODT_CLOSED : $this->model_pdf; + $modelpdf = getDolGlobalString('PROPALE_ADDON_PDF_ODT_CLOSED', $this->model_pdf); if (!getDolGlobalString('MAIN_DISABLE_PDF_AUTOUPDATE')) { // Define output language @@ -3598,7 +3454,7 @@ class Propal extends CommonObject * Used to build previews or test instances. * id must be 0 if object instance is a specimen. * - * @return void + * @return int */ public function initAsSpecimen() { @@ -3683,6 +3539,8 @@ class Propal extends CommonObject $xnbp++; } + + return 1; } /** @@ -3974,7 +3832,7 @@ class Propal extends CommonObject global $action; $hookmanager->initHooks(array($this->element . 'dao')); - $parameters = array('id'=>$this->id, 'getnomurl' => &$result); + $parameters = array('id' => $this->id, 'getnomurl' => &$result); $reshook = $hookmanager->executeHooks('getNomUrl', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks if ($reshook > 0) { $result = $hookmanager->resPrint; @@ -4092,7 +3950,7 @@ class Propal extends CommonObject $return .= '
'.$arraydata['authorlink'].''; } if (property_exists($this, 'total_ht')) { - $return .='
'.price($this->total_ht).''; + $return .= '
'.price($this->total_ht).''; } if (method_exists($this, 'getLibStatut')) { $return .= '
'.$this->getLibStatut(3).'
'; diff --git a/htdocs/comm/propal/contact.php b/htdocs/comm/propal/contact.php index 1da537b7d89..3e47a6921e3 100644 --- a/htdocs/comm/propal/contact.php +++ b/htdocs/comm/propal/contact.php @@ -37,9 +37,9 @@ require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; // Load translation files required by the page $langs->loadLangs(array('facture', 'propal', 'orders', 'sendings', 'companies')); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); -$lineid = GETPOST('lineid', 'int'); +$lineid = GETPOSTINT('lineid'); $action = GETPOST('action', 'aZ09'); $object = new Propal($db); @@ -87,7 +87,7 @@ if (empty($reshook)) { // Add new contact if ($action == 'addcontact' && $user->hasRight('propal', 'creer')) { if ($object->id > 0) { - $contactid = (GETPOST('userid', 'int') ? GETPOST('userid', 'int') : GETPOST('contactid', 'int')); + $contactid = (GETPOSTINT('userid') ? GETPOSTINT('userid') : GETPOSTINT('contactid')); $typeid = (GETPOST('typecontact') ? GETPOST('typecontact') : GETPOST('type')); $result = $object->add_contact($contactid, $typeid, GETPOST("source", 'aZ09')); } @@ -106,7 +106,7 @@ if (empty($reshook)) { } elseif ($action == 'swapstatut' && $user->hasRight('propal', 'creer')) { // Toggle the status of a contact if ($object->id > 0) { - $result = $object->swapContactStatus(GETPOST('ligne', 'int')); + $result = $object->swapContactStatus(GETPOSTINT('ligne')); } } elseif ($action == 'deletecontact' && $user->hasRight('propal', 'creer')) { // Delete contact diff --git a/htdocs/comm/propal/document.php b/htdocs/comm/propal/document.php index 00ec2367c8a..e0dbd6b45b1 100644 --- a/htdocs/comm/propal/document.php +++ b/htdocs/comm/propal/document.php @@ -42,14 +42,14 @@ $langs->loadLangs(array('propal', 'compta', 'other', 'companies')); $action = GETPOST('action', 'alpha'); $confirm = GETPOST('confirm', 'alpha'); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); // Get parameters -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 diff --git a/htdocs/comm/propal/index.php b/htdocs/comm/propal/index.php index ce58344c3d9..ebc5905dc2a 100644 --- a/htdocs/comm/propal/index.php +++ b/htdocs/comm/propal/index.php @@ -42,7 +42,7 @@ $now = dol_now(); $max = 5; // Security check -$socid = GETPOST('socid', 'int'); +$socid = GETPOSTINT('socid'); if (isset($user->socid) && $user->socid > 0) { $action = ''; $socid = $user->socid; diff --git a/htdocs/comm/propal/list.php b/htdocs/comm/propal/list.php index d427b44a5af..26e2ba473ff 100644 --- a/htdocs/comm/propal/list.php +++ b/htdocs/comm/propal/list.php @@ -11,12 +11,13 @@ * Copyright (C) 2013 Cédric Salvador * Copyright (C) 2015 Jean-François Ferry * Copyright (C) 2016-2021 Ferran Marcet - * Copyright (C) 2017-2018 Charlene Benke + * Copyright (C) 2017-2023 Charlene Benke * Copyright (C) 2018 Nicolas ZABOURI * Copyright (C) 2019-2021 Alexandre Spangaro * Copyright (C) 2021 Anthony Berton * Copyright (C) 2021 Frédéric France * Copyright (C) 2022 Josep Lluís Amador + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -51,23 +52,23 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; require_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php'; require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; -if (isModEnabled('categorie')) { +if (isModEnabled('category')) { require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcategory.class.php'; } // Load translation files required by the page $langs->loadLangs(array('companies', 'propal', 'compta', 'bills', 'orders', 'products', 'deliveries', 'categories')); -if (isModEnabled("expedition")) { +if (isModEnabled("shipping")) { $langs->loadLangs(array('sendings')); } // Get Parameters -$socid = GETPOST('socid', 'int'); +$socid = GETPOSTINT('socid'); $action = GETPOST('action', 'aZ09'); $massaction = GETPOST('massaction', 'alpha'); -$show_files = GETPOST('show_files', 'int'); +$show_files = GETPOSTINT('show_files'); $confirm = GETPOST('confirm', 'alpha'); $cancel = GETPOST('cancel', 'alpha'); $toselect = GETPOST('toselect', 'array'); @@ -76,8 +77,11 @@ $mode = GETPOST('mode', 'alpha'); // Search Fields $search_all = trim((GETPOST('search_all', 'alphanohtml') != '') ? GETPOST('search_all', 'alphanohtml') : GETPOST('sall', 'alphanohtml')); -$search_user = GETPOST('search_user', 'int'); -$search_sale = GETPOST('search_sale', 'int'); +$search_user = GETPOSTINT('search_user'); +if ($search_user == -1) { + $search_user = 0; +} +$search_sale = GETPOSTINT('search_sale'); $search_ref = GETPOST('sf_ref') ? GETPOST('sf_ref', 'alpha') : GETPOST('search_ref', 'alpha'); $search_refcustomer = GETPOST('search_refcustomer', 'alpha'); $search_refproject = GETPOST('search_refproject', 'alpha'); @@ -94,60 +98,59 @@ $search_multicurrency_montant_ht = GETPOST('search_multicurrency_montant_ht', 'a $search_multicurrency_montant_vat = GETPOST('search_multicurrency_montant_vat', 'alpha'); $search_multicurrency_montant_ttc = GETPOST('search_multicurrency_montant_ttc', 'alpha'); $search_login = GETPOST('search_login', 'alpha'); -$search_product_category = GETPOST('search_product_category', 'int'); +$search_product_category = GETPOSTINT('search_product_category'); $search_town = GETPOST('search_town', 'alpha'); $search_zip = GETPOST('search_zip', 'alpha'); $search_state = GETPOST("search_state"); -$search_country = GETPOST("search_country", 'int'); -$search_type_thirdparty = GETPOST("search_type_thirdparty", 'int'); -$search_date_startday = GETPOST('search_date_startday', 'int'); -$search_date_startmonth = GETPOST('search_date_startmonth', 'int'); -$search_date_startyear = GETPOST('search_date_startyear', 'int'); -$search_date_endday = GETPOST('search_date_endday', 'int'); -$search_date_endmonth = GETPOST('search_date_endmonth', 'int'); -$search_date_endyear = GETPOST('search_date_endyear', 'int'); +$search_country = GETPOSTINT("search_country"); +$search_type_thirdparty = GETPOSTINT("search_type_thirdparty"); +$search_date_startday = GETPOSTINT('search_date_startday'); +$search_date_startmonth = GETPOSTINT('search_date_startmonth'); +$search_date_startyear = GETPOSTINT('search_date_startyear'); +$search_date_endday = GETPOSTINT('search_date_endday'); +$search_date_endmonth = GETPOSTINT('search_date_endmonth'); +$search_date_endyear = GETPOSTINT('search_date_endyear'); $search_date_start = dol_mktime(0, 0, 0, $search_date_startmonth, $search_date_startday, $search_date_startyear); // Use tzserver $search_date_end = dol_mktime(23, 59, 59, $search_date_endmonth, $search_date_endday, $search_date_endyear); -$search_date_end_startday = GETPOST('search_date_end_startday', 'int'); -$search_date_end_startmonth = GETPOST('search_date_end_startmonth', 'int'); -$search_date_end_startyear = GETPOST('search_date_end_startyear', 'int'); -$search_date_end_endday = GETPOST('search_date_end_endday', 'int'); -$search_date_end_endmonth = GETPOST('search_date_end_endmonth', 'int'); -$search_date_end_endyear = GETPOST('search_date_end_endyear', 'int'); +$search_date_end_startday = GETPOSTINT('search_date_end_startday'); +$search_date_end_startmonth = GETPOSTINT('search_date_end_startmonth'); +$search_date_end_startyear = GETPOSTINT('search_date_end_startyear'); +$search_date_end_endday = GETPOSTINT('search_date_end_endday'); +$search_date_end_endmonth = GETPOSTINT('search_date_end_endmonth'); +$search_date_end_endyear = GETPOSTINT('search_date_end_endyear'); $search_date_end_start = dol_mktime(0, 0, 0, $search_date_end_startmonth, $search_date_end_startday, $search_date_end_startyear); // Use tzserver $search_date_end_end = dol_mktime(23, 59, 59, $search_date_end_endmonth, $search_date_end_endday, $search_date_end_endyear); -$search_date_delivery_startday = GETPOST('search_date_delivery_startday', 'int'); -$search_date_delivery_startmonth = GETPOST('search_date_delivery_startmonth', 'int'); -$search_date_delivery_startyear = GETPOST('search_date_delivery_startyear', 'int'); -$search_date_delivery_endday = GETPOST('search_date_delivery_endday', 'int'); -$search_date_delivery_endmonth = GETPOST('search_date_delivery_endmonth', 'int'); -$search_date_delivery_endyear = GETPOST('search_date_delivery_endyear', 'int'); +$search_date_delivery_startday = GETPOSTINT('search_date_delivery_startday'); +$search_date_delivery_startmonth = GETPOSTINT('search_date_delivery_startmonth'); +$search_date_delivery_startyear = GETPOSTINT('search_date_delivery_startyear'); +$search_date_delivery_endday = GETPOSTINT('search_date_delivery_endday'); +$search_date_delivery_endmonth = GETPOSTINT('search_date_delivery_endmonth'); +$search_date_delivery_endyear = GETPOSTINT('search_date_delivery_endyear'); $search_date_delivery_start = dol_mktime(0, 0, 0, $search_date_delivery_startmonth, $search_date_delivery_startday, $search_date_delivery_startyear); $search_date_delivery_end = dol_mktime(23, 59, 59, $search_date_delivery_endmonth, $search_date_delivery_endday, $search_date_delivery_endyear); -$search_availability = GETPOST('search_availability', 'int'); -$search_categ_cus = GETPOST("search_categ_cus", 'int'); -$search_fk_cond_reglement = GETPOST("search_fk_cond_reglement", 'int'); -$search_fk_shipping_method = GETPOST("search_fk_shipping_method", 'int'); -$search_fk_input_reason = GETPOST("search_fk_input_reason", 'int'); -$search_fk_mode_reglement = GETPOST("search_fk_mode_reglement", 'int'); -$search_date_signature_startday = GETPOST('search_date_signature_startday', 'int'); -$search_date_signature_startmonth = GETPOST('search_date_signature_startmonth', 'int'); -$search_date_signature_startyear = GETPOST('search_date_signature_startyear', 'int'); -$search_date_signature_endday = GETPOST('search_date_signature_endday', 'int'); -$search_date_signature_endmonth = GETPOST('search_date_signature_endmonth', 'int'); -$search_date_signature_endyear = GETPOST('search_date_signature_endyear', 'int'); +$search_availability = GETPOSTINT('search_availability'); +$search_categ_cus = GETPOSTINT("search_categ_cus"); +$search_fk_cond_reglement = GETPOSTINT("search_fk_cond_reglement"); +$search_fk_shipping_method = GETPOSTINT("search_fk_shipping_method"); +$search_fk_input_reason = GETPOSTINT("search_fk_input_reason"); +$search_fk_mode_reglement = GETPOSTINT("search_fk_mode_reglement"); +$search_date_signature_startday = GETPOSTINT('search_date_signature_startday'); +$search_date_signature_startmonth = GETPOSTINT('search_date_signature_startmonth'); +$search_date_signature_startyear = GETPOSTINT('search_date_signature_startyear'); +$search_date_signature_endday = GETPOSTINT('search_date_signature_endday'); +$search_date_signature_endmonth = GETPOSTINT('search_date_signature_endmonth'); +$search_date_signature_endyear = GETPOSTINT('search_date_signature_endyear'); $search_date_signature_start = dol_mktime(0, 0, 0, $search_date_signature_startmonth, $search_date_signature_startday, $search_date_signature_startyear); $search_date_signature_end = dol_mktime(23, 59, 59, $search_date_signature_endmonth, $search_date_signature_endday, $search_date_signature_endyear); $search_status = GETPOST('search_status', 'alpha'); $optioncss = GETPOST('optioncss', 'alpha'); -$object_statut = GETPOST('search_statut', 'alpha'); // Pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // If $page is not defined, or '' or -1 or if we click on clear filters $page = 0; @@ -190,14 +193,14 @@ $search_array_options = $extrafields->getOptionalsFromPost($object->table_elemen // List of fields to search into when doing a "search in all" $fieldstosearchall = array( - 'p.ref'=>'Ref', - 'p.ref_client'=>'RefCustomer', - 'pd.description'=>'Description', - 's.nom'=>"ThirdParty", - 's.name_alias'=>"AliasNameShort", - 's.zip'=>"Zip", - 's.town'=>"Town", - 'p.note_public'=>'NotePublic', + 'p.ref' => 'Ref', + 'p.ref_client' => 'RefCustomer', + 'pd.description' => 'Description', + 's.nom' => "ThirdParty", + 's.name_alias' => "AliasNameShort", + 's.zip' => "Zip", + 's.town' => "Town", + 'p.note_public' => 'NotePublic', ); if (empty($user->socid)) { $fieldstosearchall["p.note_private"] = "NotePrivate"; @@ -206,50 +209,50 @@ if (empty($user->socid)) { $checkedtypetiers = 0; $arrayfields = array( - 'p.ref'=>array('label'=>"Ref", 'checked'=>1), - 'p.ref_client'=>array('label'=>"RefCustomer", 'checked'=>-1), - 'pr.ref'=>array('label'=>"ProjectRef", 'checked'=>1, 'enabled'=>(isModEnabled('project') ? 1 : 0)), - 'pr.title'=>array('label'=>"ProjectLabel", 'checked'=>0, 'enabled'=>(isModEnabled('project') ? 1 : 0)), - 's.nom'=>array('label'=>"ThirdParty", 'checked'=>1), - 's.name_alias'=>array('label'=>"AliasNameShort", 'checked'=>-1), - 's.town'=>array('label'=>"Town", 'checked'=>-1), - 's.zip'=>array('label'=>"Zip", 'checked'=>-1), - 'state.nom'=>array('label'=>"StateShort", 'checked'=>0), - 'country.code_iso'=>array('label'=>"Country", 'checked'=>0), - 'typent.code'=>array('label'=>"ThirdPartyType", 'checked'=>$checkedtypetiers), - 'p.date'=>array('label'=>"DatePropal", 'checked'=>1), - 'p.fin_validite'=>array('label'=>"DateEnd", 'checked'=>1), - 'p.date_livraison'=>array('label'=>"DeliveryDate", 'checked'=>0), - 'p.date_signature'=>array('label'=>"DateSigning", 'checked'=>0), - 'ava.rowid'=>array('label'=>"AvailabilityPeriod", 'checked'=>0), - 'p.fk_shipping_method'=>array('label'=>"SendingMethod", 'checked'=>0, 'enabled'=>isModEnabled("expedition")), - 'p.fk_input_reason'=>array('label'=>"Origin", 'checked'=>0, 'enabled'=>1), - 'p.fk_cond_reglement'=>array('label'=>"PaymentConditionsShort", 'checked'=>0), - 'p.fk_mode_reglement'=>array('label'=>"PaymentMode", 'checked'=>0), - 'p.total_ht'=>array('label'=>"AmountHT", 'checked'=>1), - 'p.total_tva'=>array('label'=>"AmountVAT", 'checked'=>0), - 'p.total_ttc'=>array('label'=>"AmountTTC", 'checked'=>0), - 'p.total_ht_invoiced'=>array('label'=>"AmountInvoicedHT", 'checked'=>0, 'enabled'=>getDolGlobalString('PROPOSAL_SHOW_INVOICED_AMOUNT')), - 'p.total_invoiced'=>array('label'=>"AmountInvoicedTTC", 'checked'=>0, 'enabled'=>getDolGlobalString('PROPOSAL_SHOW_INVOICED_AMOUNT')), - 'p.multicurrency_code'=>array('label'=>'Currency', 'checked'=>0, 'enabled'=>(!isModEnabled("multicurrency") ? 0 : 1)), - 'p.multicurrency_tx'=>array('label'=>'CurrencyRate', 'checked'=>0, 'enabled'=>(!isModEnabled("multicurrency") ? 0 : 1)), - 'p.multicurrency_total_ht'=>array('label'=>'MulticurrencyAmountHT', 'checked'=>0, 'enabled'=>(!isModEnabled("multicurrency") ? 0 : 1)), - 'p.multicurrency_total_tva'=>array('label'=>'MulticurrencyAmountVAT', 'checked'=>0, 'enabled'=>(!isModEnabled("multicurrency") ? 0 : 1)), - 'p.multicurrency_total_ttc'=>array('label'=>'MulticurrencyAmountTTC', 'checked'=>0, 'enabled'=>(!isModEnabled("multicurrency") ? 0 : 1)), - 'p.multicurrency_total_ht_invoiced'=>array('label'=>'MulticurrencyAmountInvoicedHT', 'checked'=>0, 'enabled'=>isModEnabled("multicurrency") && getDolGlobalString('PROPOSAL_SHOW_INVOICED_AMOUNT')), - 'p.multicurrency_total_invoiced'=>array('label'=>'MulticurrencyAmountInvoicedTTC', 'checked'=>0, 'enabled'=>isModEnabled("multicurrency") && getDolGlobalString('PROPOSAL_SHOW_INVOICED_AMOUNT')), - 'u.login'=>array('label'=>"Author", 'checked'=>1, 'position'=>10), - 'sale_representative'=>array('label'=>"SaleRepresentativesOfThirdParty", 'checked'=>-1), + 'p.ref' => array('label' => "Ref", 'checked' => 1), + 'p.ref_client' => array('label' => "RefCustomer", 'checked' => -1), + 'pr.ref' => array('label' => "ProjectRef", 'checked' => 1, 'enabled' => (isModEnabled('project') ? 1 : 0)), + 'pr.title' => array('label' => "ProjectLabel", 'checked' => 0, 'enabled' => (isModEnabled('project') ? 1 : 0)), + 's.nom' => array('label' => "ThirdParty", 'checked' => 1), + 's.name_alias' => array('label' => "AliasNameShort", 'checked' => -1), + 's.town' => array('label' => "Town", 'checked' => -1), + 's.zip' => array('label' => "Zip", 'checked' => -1), + 'state.nom' => array('label' => "StateShort", 'checked' => 0), + 'country.code_iso' => array('label' => "Country", 'checked' => 0), + 'typent.code' => array('label' => "ThirdPartyType", 'checked' => $checkedtypetiers), + 'p.date' => array('label' => "DatePropal", 'checked' => 1), + 'p.fin_validite' => array('label' => "DateEnd", 'checked' => 1), + 'p.date_livraison' => array('label' => "DeliveryDate", 'checked' => 0), + 'p.date_signature' => array('label' => "DateSigning", 'checked' => 0), + 'ava.rowid' => array('label' => "AvailabilityPeriod", 'checked' => 0), + 'p.fk_shipping_method' => array('label' => "SendingMethod", 'checked' => 0, 'enabled' => isModEnabled("shipping")), + 'p.fk_input_reason' => array('label' => "Origin", 'checked' => 0, 'enabled' => 1), + 'p.fk_cond_reglement' => array('label' => "PaymentConditionsShort", 'checked' => 0), + 'p.fk_mode_reglement' => array('label' => "PaymentMode", 'checked' => 0), + 'p.total_ht' => array('label' => "AmountHT", 'checked' => 1), + 'p.total_tva' => array('label' => "AmountVAT", 'checked' => 0), + 'p.total_ttc' => array('label' => "AmountTTC", 'checked' => 0), + 'p.total_ht_invoiced' => array('label' => "AmountInvoicedHT", 'checked' => 0, 'enabled' => getDolGlobalString('PROPOSAL_SHOW_INVOICED_AMOUNT')), + 'p.total_invoiced' => array('label' => "AmountInvoicedTTC", 'checked' => 0, 'enabled' => getDolGlobalString('PROPOSAL_SHOW_INVOICED_AMOUNT')), + 'p.multicurrency_code' => array('label' => 'Currency', 'checked' => 0, 'enabled' => (!isModEnabled("multicurrency") ? 0 : 1)), + 'p.multicurrency_tx' => array('label' => 'CurrencyRate', 'checked' => 0, 'enabled' => (!isModEnabled("multicurrency") ? 0 : 1)), + 'p.multicurrency_total_ht' => array('label' => 'MulticurrencyAmountHT', 'checked' => 0, 'enabled' => (!isModEnabled("multicurrency") ? 0 : 1)), + 'p.multicurrency_total_tva' => array('label' => 'MulticurrencyAmountVAT', 'checked' => 0, 'enabled' => (!isModEnabled("multicurrency") ? 0 : 1)), + 'p.multicurrency_total_ttc' => array('label' => 'MulticurrencyAmountTTC', 'checked' => 0, 'enabled' => (!isModEnabled("multicurrency") ? 0 : 1)), + 'p.multicurrency_total_ht_invoiced' => array('label' => 'MulticurrencyAmountInvoicedHT', 'checked' => 0, 'enabled' => isModEnabled("multicurrency") && getDolGlobalString('PROPOSAL_SHOW_INVOICED_AMOUNT')), + 'p.multicurrency_total_invoiced' => array('label' => 'MulticurrencyAmountInvoicedTTC', 'checked' => 0, 'enabled' => isModEnabled("multicurrency") && getDolGlobalString('PROPOSAL_SHOW_INVOICED_AMOUNT')), + 'u.login' => array('label' => "Author", 'checked' => 1, 'position' => 10), + 'sale_representative' => array('label' => "SaleRepresentativesOfThirdParty", 'checked' => -1), 'total_pa' => array('label' => (getDolGlobalString('MARGIN_TYPE') == '1' ? 'BuyingPrice' : 'CostPrice'), 'checked' => 0, 'position' => 300, 'enabled' => (!isModEnabled('margin') || !$user->hasRight('margins', 'liretous') ? 0 : 1)), 'total_margin' => array('label' => 'Margin', 'checked' => 0, 'position' => 301, 'enabled' => (!isModEnabled('margin') || !$user->hasRight('margins', 'liretous') ? 0 : 1)), 'total_margin_rate' => array('label' => 'MarginRate', 'checked' => 0, 'position' => 302, 'enabled' => (!isModEnabled('margin') || !$user->hasRight('margins', 'liretous') || !getDolGlobalString('DISPLAY_MARGIN_RATES') ? 0 : 1)), 'total_mark_rate' => array('label' => 'MarkRate', 'checked' => 0, 'position' => 303, 'enabled' => (!isModEnabled('margin') || !$user->hasRight('margins', 'liretous') || !getDolGlobalString('DISPLAY_MARK_RATES') ? 0 : 1)), - 'p.datec'=>array('label'=>"DateCreation", 'checked'=>0, 'position'=>500), - 'p.tms'=>array('label'=>"DateModificationShort", 'checked'=>0, 'position'=>500), - 'p.date_cloture'=>array('label'=>"DateClosing", 'checked'=>0, 'position'=>500), - 'p.note_public'=>array('label'=>'NotePublic', 'checked'=>0, 'position'=>510, 'enabled'=>(!getDolGlobalInt('MAIN_LIST_HIDE_PUBLIC_NOTES'))), - 'p.note_private'=>array('label'=>'NotePrivate', 'checked'=>0, 'position'=>511, 'enabled'=>(!getDolGlobalInt('MAIN_LIST_HIDE_PRIVATE_NOTES'))), - 'p.fk_statut'=>array('label'=>"Status", 'checked'=>1, 'position'=>1000), + 'p.datec' => array('label' => "DateCreation", 'checked' => 0, 'position' => 500), + 'p.tms' => array('label' => "DateModificationShort", 'checked' => 0, 'position' => 500), + 'p.date_cloture' => array('label' => "DateClosing", 'checked' => 0, 'position' => 500), + 'p.note_public' => array('label' => 'NotePublic', 'checked' => 0, 'position' => 510, 'enabled' => (!getDolGlobalInt('MAIN_LIST_HIDE_PUBLIC_NOTES'))), + 'p.note_private' => array('label' => 'NotePrivate', 'checked' => 0, 'position' => 511, 'enabled' => (!getDolGlobalInt('MAIN_LIST_HIDE_PRIVATE_NOTES'))), + 'p.fk_statut' => array('label' => "Status", 'checked' => 1, 'position' => 1000), ); // List of fields to search into when doing a "search in all" @@ -269,7 +272,7 @@ foreach ($object->fields as $key => $val) { $arrayfields['t.'.$key] = array( 'label'=>$val['label'], 'checked'=>(($visible < 0) ? 0 : 1), - 'enabled'=>(abs($visible) != 3 && dol_eval($val['enabled'], 1)), + 'enabled'=>(abs($visible) != 3 && (int) dol_eval($val['enabled'], 1)), 'position'=>$val['position'], 'help'=> isset($val['help']) ? $val['help'] : '' ); @@ -310,7 +313,7 @@ if (!GETPOST('confirmmassaction', 'alpha') && $massaction != 'presend' && $massa $massaction = ''; } -$parameters = array('socid'=>$socid, 'arrayfields'=>&$arrayfields); +$parameters = array('socid' => $socid, 'arrayfields' => &$arrayfields); $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); @@ -373,7 +376,6 @@ if (empty($reshook)) { $search_date_delivery_end = ''; $search_availability = ''; $search_status = ''; - $object_statut = ''; $search_categ_cus = 0; $search_fk_cond_reglement = ''; $search_fk_shipping_method = ''; @@ -390,9 +392,6 @@ if (empty($reshook)) { $toselect = array(); $search_array_options = array(); } - if ($object_statut != '') { - $search_status = $object_statut; - } // Mass actions $objectclass = 'Propal'; @@ -522,11 +521,7 @@ if (!$error && $massaction === 'setbilled' && $permissiontoclose) { } if (!$error) { - if ($nbok > 1) { - setEventMessages($langs->trans("RecordsModified", $nbok), null, 'mesgs'); - } else { - setEventMessages($langs->trans("RecordsModified", $nbok), null, 'mesgs'); - } + setEventMessages($langs->trans("RecordsModified", $nbok), null, 'mesgs'); $db->commit(); } else { $db->rollback(); @@ -592,7 +587,7 @@ $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_country as country on (country.rowid = s $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_typent as typent on (typent.id = s.fk_typent)"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_departements as state on (state.rowid = s.fk_departement)"; -$sql .= ', '.MAIN_DB_PREFIX.'propal as p'; +$sql .= ' INNER JOIN '.MAIN_DB_PREFIX.'propal as p ON p.fk_soc = s.rowid'; if (!empty($extrafields->attributes[$object->table_element]['label']) && is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) { $sql .= " LEFT JOIN ".MAIN_DB_PREFIX.$object->table_element."_extrafields as ef on (p.rowid = ef.fk_object)"; } @@ -603,8 +598,10 @@ $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'user as u ON p.fk_user_author = u.rowid'; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."projet as pr ON pr.rowid = p.fk_projet"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_availability as ava on (ava.rowid = p.fk_availability)"; if ($search_user > 0) { - $sql .= ", ".MAIN_DB_PREFIX."element_contact as c"; - $sql .= ", ".MAIN_DB_PREFIX."c_type_contact as tc"; + $sql .= " INNER JOIN ".MAIN_DB_PREFIX."element_contact as c"; + $sql .= " ON c.element_id = p.rowid AND c.fk_socpeople = ".((int) $search_user); + $sql .= " INNER JOIN ".MAIN_DB_PREFIX."c_type_contact as tc"; + $sql .= " ON c.fk_c_type_contact = tc.rowid AND tc.element='propal' AND tc.source='internal'"; } // Add table from hooks @@ -612,8 +609,8 @@ $parameters = array(); $reshook = $hookmanager->executeHooks('printFieldListFrom', $parameters, $object); // Note that $action and $object may have been modified by hook $sql .= $hookmanager->resPrint; -$sql .= ' WHERE p.fk_soc = s.rowid'; -$sql .= ' AND p.entity IN ('.getEntity('propal').')'; +$sql .= ' WHERE'; +$sql .= ' p.entity IN ('.getEntity('propal').')'; if ($search_town) { $sql .= natural_search('s.town', $search_town); } @@ -723,9 +720,6 @@ if ($search_date_delivery_start) { if ($search_date_delivery_end) { $sql .= " AND p.date_livraison <= '".$db->idate($search_date_delivery_end)."'"; } -if ($search_user > 0) { - $sql .= " AND c.fk_c_type_contact = tc.rowid AND tc.element='propal' AND tc.source='internal' AND c.element_id = p.rowid AND c.fk_socpeople = ".((int) $search_user); -} if ($search_date_signature_start) { $sql .= " AND p.date_signature >= '".$db->idate($search_date_signature_start)."'"; } @@ -848,8 +842,8 @@ if (!$resql) { exit; } - $objectstatic = new Propal($db); - $userstatic = new User($db); +$objectstatic = new Propal($db); +$userstatic = new User($db); if ($socid > 0) { $soc = new Societe($db); @@ -862,9 +856,9 @@ if ($socid > 0) { $title = $langs->trans('Proposals'); } - $num = $db->num_rows($resql); +$num = $db->num_rows($resql); - $arrayofselected = is_array($toselect) ? $toselect : array(); +$arrayofselected = is_array($toselect) ? $toselect : array(); if ($num == 1 && getDolGlobalString('MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE') && $search_all) { $obj = $db->fetch_object($resql); @@ -875,10 +869,10 @@ if ($num == 1 && getDolGlobalString('MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE') && $s exit; } - $help_url = 'EN:Commercial_Proposals|FR:Proposition_commerciale|ES:Presupuestos'; - llxHeader('', $title, $help_url); +$help_url = 'EN:Commercial_Proposals|FR:Proposition_commerciale|ES:Presupuestos'; +llxHeader('', $title, $help_url); - $param = '&search_status='.urlencode($search_status); +$param = '&search_status='.urlencode($search_status); if (!empty($mode)) { $param .= '&mode='.urlencode($mode); } @@ -892,58 +886,58 @@ if ($search_all) { $param .= '&search_all='.urlencode($search_all); } if ($search_date_startday) { - $param .= '&search_date_startday='.urlencode($search_date_startday); + $param .= '&search_date_startday='.urlencode((string) ($search_date_startday)); } if ($search_date_startmonth) { - $param .= '&search_date_startmonth='.urlencode($search_date_startmonth); + $param .= '&search_date_startmonth='.urlencode((string) ($search_date_startmonth)); } if ($search_date_startyear) { - $param .= '&search_date_startyear='.urlencode($search_date_startyear); + $param .= '&search_date_startyear='.urlencode((string) ($search_date_startyear)); } if ($search_date_endday) { - $param .= '&search_date_endday='.urlencode($search_date_endday); + $param .= '&search_date_endday='.urlencode((string) ($search_date_endday)); } if ($search_date_endmonth) { - $param .= '&search_date_endmonth='.urlencode($search_date_endmonth); + $param .= '&search_date_endmonth='.urlencode((string) ($search_date_endmonth)); } if ($search_date_endyear) { - $param .= '&search_date_endyear='.urlencode($search_date_endyear); + $param .= '&search_date_endyear='.urlencode((string) ($search_date_endyear)); } if ($search_date_end_startday) { - $param .= '&search_date_end_startday='.urlencode($search_date_end_startday); + $param .= '&search_date_end_startday='.urlencode((string) ($search_date_end_startday)); } if ($search_date_end_startmonth) { - $param .= '&search_date_end_startmonth='.urlencode($search_date_end_startmonth); + $param .= '&search_date_end_startmonth='.urlencode((string) ($search_date_end_startmonth)); } if ($search_date_end_startyear) { - $param .= '&search_date_end_startyear='.urlencode($search_date_end_startyear); + $param .= '&search_date_end_startyear='.urlencode((string) ($search_date_end_startyear)); } if ($search_date_end_endday) { - $param .= '&search_date_end_endday='.urlencode($search_date_end_endday); + $param .= '&search_date_end_endday='.urlencode((string) ($search_date_end_endday)); } if ($search_date_end_endmonth) { - $param .= '&search_date_end_endmonth='.urlencode($search_date_end_endmonth); + $param .= '&search_date_end_endmonth='.urlencode((string) ($search_date_end_endmonth)); } if ($search_date_end_endyear) { - $param .= '&search_date_end_endyear='.urlencode($search_date_end_endyear); + $param .= '&search_date_end_endyear='.urlencode((string) ($search_date_end_endyear)); } if ($search_date_delivery_startday) { - $param .= '&search_date_delivery_startday='.urlencode($search_date_delivery_startday); + $param .= '&search_date_delivery_startday='.urlencode((string) ($search_date_delivery_startday)); } if ($search_date_delivery_startmonth) { - $param .= '&search_date_delivery_startmonth='.urlencode($search_date_delivery_startmonth); + $param .= '&search_date_delivery_startmonth='.urlencode((string) ($search_date_delivery_startmonth)); } if ($search_date_delivery_startyear) { - $param .= '&search_date_delivery_startyear='.urlencode($search_date_delivery_startyear); + $param .= '&search_date_delivery_startyear='.urlencode((string) ($search_date_delivery_startyear)); } if ($search_date_delivery_endday) { - $param .= '&search_date_delivery_endday='.urlencode($search_date_delivery_endday); + $param .= '&search_date_delivery_endday='.urlencode((string) ($search_date_delivery_endday)); } if ($search_date_delivery_endmonth) { - $param .= '&search_date_delivery_endmonth='.urlencode($search_date_delivery_endmonth); + $param .= '&search_date_delivery_endmonth='.urlencode((string) ($search_date_delivery_endmonth)); } if ($search_date_delivery_endyear) { - $param .= '&search_date_delivery_endyear='.urlencode($search_date_delivery_endyear); + $param .= '&search_date_delivery_endyear='.urlencode((string) ($search_date_delivery_endyear)); } if ($search_ref) { $param .= '&search_ref='.urlencode($search_ref); @@ -961,7 +955,7 @@ if ($search_societe_alias) { $param .= '&search_societe_alias='.urlencode($search_societe_alias); } if ($search_user > 0) { - $param .= '&search_user='.urlencode($search_user); + $param .= '&search_user='.urlencode((string) ($search_user)); } if ($search_sale > 0) { $param .= '&search_sale='.urlencode($search_sale); @@ -994,31 +988,31 @@ if ($search_zip) { $param .= '&search_zip='.urlencode($search_zip); } if ($socid > 0) { - $param .= '&socid='.urlencode($socid); + $param .= '&socid='.urlencode((string) ($socid)); } if ($optioncss != '') { $param .= '&optioncss='.urlencode($optioncss); } if ($search_categ_cus > 0) { - $param .= '&search_categ_cus='.urlencode($search_categ_cus); + $param .= '&search_categ_cus='.urlencode((string) ($search_categ_cus)); } if ($search_product_category != '') { - $param .= '&search_product_category='.urlencode($search_product_category); + $param .= '&search_product_category='.urlencode((string) ($search_product_category)); } if ($search_fk_cond_reglement > 0) { - $param .= '&search_fk_cond_reglement='.urlencode($search_fk_cond_reglement); + $param .= '&search_fk_cond_reglement='.urlencode((string) ($search_fk_cond_reglement)); } if ($search_fk_shipping_method > 0) { - $param .= '&search_fk_shipping_method='.urlencode($search_fk_shipping_method); + $param .= '&search_fk_shipping_method='.urlencode((string) ($search_fk_shipping_method)); } if ($search_fk_input_reason > 0) { - $param .= '&search_fk_input_reason='.urlencode($search_fk_input_reason); + $param .= '&search_fk_input_reason='.urlencode((string) ($search_fk_input_reason)); } if ($search_fk_mode_reglement > 0) { - $param .= '&search_fk_mode_reglement='.urlencode($search_fk_mode_reglement); + $param .= '&search_fk_mode_reglement='.urlencode((string) ($search_fk_mode_reglement)); } if ($search_type_thirdparty > 0) { - $param .= '&search_type_thirdparty='.urlencode($search_type_thirdparty); + $param .= '&search_type_thirdparty='.urlencode((string) ($search_type_thirdparty)); } if ($search_town) { $param .= '&search_town='.urlencode($search_town); @@ -1033,1379 +1027,1383 @@ if ($search_town) { $param .= '&search_town='.urlencode($search_town); } if ($search_country) { - $param .= '&search_country='.urlencode($search_country); + $param .= '&search_country='.urlencode((string) ($search_country)); } if ($search_date_signature_startday) { - $param .= '&search_date_signature_startday='.urlencode($search_date_signature_startday); + $param .= '&search_date_signature_startday='.urlencode((string) ($search_date_signature_startday)); } if ($search_date_signature_startmonth) { - $param .= '&search_date_signature_startmonth='.urlencode($search_date_signature_startmonth); + $param .= '&search_date_signature_startmonth='.urlencode((string) ($search_date_signature_startmonth)); } if ($search_date_signature_startyear) { - $param .= '&search_date_signature_startyear='.urlencode($search_date_signature_startyear); + $param .= '&search_date_signature_startyear='.urlencode((string) ($search_date_signature_startyear)); } if ($search_date_signature_endday) { - $param .= '&search_date_signature_endday='.urlencode($search_date_signature_endday); + $param .= '&search_date_signature_endday='.urlencode((string) ($search_date_signature_endday)); } if ($search_date_signature_endmonth) { - $param .= '&search_date_signature_endmonth='.urlencode($search_date_signature_endmonth); + $param .= '&search_date_signature_endmonth='.urlencode((string) ($search_date_signature_endmonth)); } if ($search_date_signature_endyear) { - $param .= '&search_date_signature_endyear='.urlencode($search_date_signature_endyear); + $param .= '&search_date_signature_endyear='.urlencode((string) ($search_date_signature_endyear)); } - // Add $param from extra fields - include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php'; - // Add $param from hooks - $parameters = array(); - $reshook = $hookmanager->executeHooks('printFieldListSearchParam', $parameters, $object, $action); // Note that $action and $object may have been modified by hook - $param .= $hookmanager->resPrint; +// Add $param from extra fields +include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php'; +// Add $param from hooks +$parameters = array(); +$reshook = $hookmanager->executeHooks('printFieldListSearchParam', $parameters, $object, $action); // Note that $action and $object may have been modified by hook +$param .= $hookmanager->resPrint; - // List of mass actions available - $arrayofmassactions = array( - 'generate_doc'=>img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("ReGeneratePDF"), - 'builddoc'=>img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("PDFMerge"), - ); - if ($permissiontosendbymail) { - $arrayofmassactions['presend']=img_picto('', 'email', 'class="pictofixedwidth"').$langs->trans("SendByMail"); +// List of mass actions available +$arrayofmassactions = array( + 'generate_doc' => img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("ReGeneratePDF"), + 'builddoc' => img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("PDFMerge"), +); +if ($permissiontosendbymail) { + $arrayofmassactions['presend'] = img_picto('', 'email', 'class="pictofixedwidth"').$langs->trans("SendByMail"); +} +if ($permissiontovalidate) { + $arrayofmassactions['prevalidate'] = img_picto('', 'check', 'class="pictofixedwidth"').$langs->trans("Validate"); +} +if ($permissiontoclose) { + $arrayofmassactions['presign'] = img_picto('', 'propal', 'class="pictofixedwidth"').$langs->trans("Sign"); + $arrayofmassactions['nopresign'] = img_picto('', 'propal', 'class="pictofixedwidth"').$langs->trans("NoSign"); + $arrayofmassactions['setbilled'] = img_picto('', 'bill', 'class="pictofixedwidth"').$langs->trans("ClassifyBilled"); +} +if ($permissiontodelete) { + $arrayofmassactions['predelete'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete"); +} + +if (in_array($massaction, array('presend', 'predelete', 'closed'))) { + $arrayofmassactions = array(); +} +$massactionbutton = $form->selectMassAction('', $arrayofmassactions); + +$url = DOL_URL_ROOT.'/comm/propal/card.php?action=create'; +if (!empty($socid)) { + $url .= '&socid='.$socid; +} +$newcardbutton = ''; +$newcardbutton .= dolGetButtonTitle($langs->trans('ViewList'), '', 'fa fa-bars imgforviewmode', $_SERVER["PHP_SELF"].'?mode=common'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ((empty($mode) || $mode == 'common') ? 2 : 1), array('morecss' => 'reposition')); +$newcardbutton .= dolGetButtonTitle($langs->trans('ViewKanban'), '', 'fa fa-th-list imgforviewmode', $_SERVER["PHP_SELF"].'?mode=kanban'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ($mode == 'kanban' ? 2 : 1), array('morecss' => 'reposition')); +$newcardbutton .= dolGetButtonTitleSeparator(); +$newcardbutton .= dolGetButtonTitle($langs->trans('NewPropal'), '', 'fa fa-plus-circle', $url, '', $user->hasRight('propal', 'creer')); + +// Fields title search +print '
'; +if ($optioncss != '') { + print ''; +} +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; + +print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'propal', 0, $newcardbutton, '', $limit, 0, 0, 1); + +$topicmail = "SendPropalRef"; +$modelmail = "propal_send"; +$objecttmp = new Propal($db); +$trackid = 'pro'.$object->id; +include DOL_DOCUMENT_ROOT.'/core/tpl/massactions_pre.tpl.php'; + +if ($massaction == 'prevalidate') { + print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassValidation"), $langs->trans("ConfirmMassValidationQuestion"), "validate", null, '', 0, 200, 500, 1); +} + +if ($massaction == 'presign') { + print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassSignature"), $langs->trans("ConfirmMassSignatureQuestion"), "sign", null, '', 0, 200, 500, 1); +} + +if ($massaction == 'nopresign') { + print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassNoSignature"), $langs->trans("ConfirmMassNoSignatureQuestion"), "nosign", null, '', 0, 200, 500, 1); +} + +if ($search_all) { + foreach ($fieldstosearchall as $key => $val) { + $fieldstosearchall[$key] = $langs->trans($val); } - if ($permissiontovalidate) { - $arrayofmassactions['prevalidate']=img_picto('', 'check', 'class="pictofixedwidth"').$langs->trans("Validate"); - } - if ($permissiontoclose) { - $arrayofmassactions['presign']=img_picto('', 'propal', 'class="pictofixedwidth"').$langs->trans("Sign"); - $arrayofmassactions['nopresign']=img_picto('', 'propal', 'class="pictofixedwidth"').$langs->trans("NoSign"); - $arrayofmassactions['setbilled'] =img_picto('', 'bill', 'class="pictofixedwidth"').$langs->trans("ClassifyBilled"); - } - if ($permissiontodelete) { - $arrayofmassactions['predelete'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete"); + print '
'.$langs->trans("FilterOnInto", $search_all).implode(', ', $fieldstosearchall).'
'; +} + +$i = 0; + +$moreforfilter = ''; + +// If the user can view prospects other than his' +if ($user->hasRight('user', 'user', 'lire')) { + $langs->load("commercial"); + $moreforfilter .= '
'; + $tmptitle = $langs->trans('ThirdPartiesOfSaleRepresentative'); + $moreforfilter .= img_picto($tmptitle, 'user', 'class="pictofixedwidth"').$formother->select_salesrepresentatives($search_sale, 'search_sale', $user, 0, $tmptitle, 'maxwidth250 widthcentpercentminusx', 1); + $moreforfilter .= '
'; +} +// If the user can view prospects other than his' +if ($user->hasRight('user', 'user', 'lire')) { + $moreforfilter .= '
'; + $tmptitle = $langs->trans('LinkedToSpecificUsers'); + $moreforfilter .= img_picto($tmptitle, 'user', 'class="pictofixedwidth"').$form->select_dolusers((empty($search_user) ? -2 : 0), 'search_user', $tmptitle, '', 0, '', '', 0, 0, 0, '', 0, '', 'maxwidth250 widthcentpercentminusx'); + $moreforfilter .= '
'; +} +// If the user can view products +if (isModEnabled('category') && $user->hasRight('categorie', 'read') && ($user->hasRight('product', 'read') || $user->hasRight('service', 'read'))) { + $searchCategoryProductOperator = -1; + include_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; + $tmptitle = $langs->trans('IncludingProductWithTag'); + $formcategory = new FormCategory($db); + $moreforfilter .= $formcategory->getFilterBox(Categorie::TYPE_PRODUCT, array($search_product_category), 'maxwidth300', $searchCategoryProductOperator, 0, 0, $tmptitle); +} +if (isModEnabled('category') && $user->hasRight('categorie', 'lire')) { + require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; + $moreforfilter .= '
'; + $tmptitle = $langs->trans('CustomersProspectsCategoriesShort'); + $moreforfilter .= img_picto($tmptitle, 'category', 'class="pictofixedwidth"').$formother->select_categories('customer', $search_categ_cus, 'search_categ_cus', 1, $tmptitle, (empty($conf->dol_optimize_smallscreen) ? 'maxwidth300 widthcentpercentminusx' : 'maxwidth250 widthcentpercentminusx')); + $moreforfilter .= '
'; +} +if (isModEnabled('stock') && getDolGlobalString('WAREHOUSE_ASK_WAREHOUSE_DURING_PROPAL')) { + require_once DOL_DOCUMENT_ROOT.'/product/class/html.formproduct.class.php'; + $formproduct = new FormProduct($db); + $moreforfilter .= '
'; + $tmptitle = $langs->trans('Warehouse'); + $moreforfilter .= img_picto($tmptitle, 'stock', 'class="pictofixedwidth"').$formproduct->selectWarehouses($search_warehouse, 'search_warehouse', '', $tmptitle, 0, 0, $tmptitle); + $moreforfilter .= '
'; +} +$parameters = array(); +$reshook = $hookmanager->executeHooks('printFieldPreListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook +if (empty($reshook)) { + $moreforfilter .= $hookmanager->resPrint; +} else { + $moreforfilter = $hookmanager->resPrint; +} + +if (!empty($moreforfilter)) { + print '
'; + print $moreforfilter; + print '
'; +} + +$varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; +$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')); // This also change content of $arrayfields +$selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); + +print '
'; +print '
'; @@ -2868,45 +2884,49 @@ if ($action == 'create') { print '
' . $langs->trans('AmountHT') . '' . price($object->total_ht, '', $langs, 1, -1, -1, $conf->currency) . '' . price($object->total_ht, 0, $langs, 1, -1, -1, $conf->currency) . '' . price($object->multicurrency_total_ht, '', $langs, 1, -1, -1, $object->multicurrency_code) . '' . price($object->multicurrency_total_ht, 0, $langs, 1, -1, -1, $object->multicurrency_code) . '
' . $langs->trans('AmountVAT') . '' . price($object->total_tva, '', $langs, 1, -1, -1, $conf->currency) . '' . price($object->total_tva, 0, $langs, 1, -1, -1, $conf->currency) . '' . price($object->multicurrency_total_tva, '', $langs, 1, -1, -1, $object->multicurrency_code) . '' . price($object->multicurrency_total_tva, 0, $langs, 1, -1, -1, $object->multicurrency_code) . '
' . $langs->transcountry("AmountLT1", $mysoc->country_code) . '' . price($object->total_localtax1, '', $langs, 1, -1, -1, $conf->currency) . '' . price($object->total_localtax1, 0, $langs, 1, -1, -1, $conf->currency) . '' . price($object->total_localtax1, '', $langs, 1, -1, -1, $object->multicurrency_code) . '' . price($object->multicurrency_total_localtax1, 0, $langs, 1, -1, -1, $object->multicurrency_code) . '
' . $langs->transcountry("AmountLT2", $mysoc->country_code) . '' . price($object->total_localtax2, '', $langs, 1, -1, -1, $conf->currency) . '' . price($object->total_localtax2, '', $langs, 1, -1, -1, $object->multicurrency_code) . '
' . $langs->transcountry("AmountLT2", $mysoc->country_code) . '' . price($object->total_localtax2, 0, $langs, 1, -1, -1, $conf->currency) . '' . price($object->multicurrency_total_localtax2, 0, $langs, 1, -1, -1, $object->multicurrency_code) . '
' . $langs->trans('AmountTTC') . '' . price($object->total_ttc, '', $langs, 1, -1, -1, $conf->currency) . '' . price($object->total_ttc, 0, $langs, 1, -1, -1, $conf->currency) . '' . price($object->multicurrency_total_ttc, '', $langs, 1, -1, -1, $object->multicurrency_code) . '' . price($object->multicurrency_total_ttc, 0, $langs, 1, -1, -1, $object->multicurrency_code) . '
'."\n"; + +print ''; + +// Action column +if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) { + print ''; +} + +if (!empty($arrayfields['p.ref']['checked'])) { + print ''; +} +if (!empty($arrayfields['p.ref_client']['checked'])) { + print ''; +} +if (!empty($arrayfields['pr.ref']['checked'])) { + print ''; +} +if (!empty($arrayfields['pr.title']['checked'])) { + print ''; +} +if (!empty($arrayfields['s.nom']['checked'])) { + print ''; +} +if (!empty($arrayfields['s.name_alias']['checked'])) { + print ''; +} +if (!empty($arrayfields['s.town']['checked'])) { + print ''; +} +if (!empty($arrayfields['s.zip']['checked'])) { + print ''; +} +// State +if (!empty($arrayfields['state.nom']['checked'])) { + print ''; +} +// Country +if (!empty($arrayfields['country.code_iso']['checked'])) { + print ''; +} +// Company type +if (!empty($arrayfields['typent.code']['checked'])) { + print ''; +} +// Date +if (!empty($arrayfields['p.date']['checked'])) { + print ''; +} +// Date end +if (!empty($arrayfields['p.fin_validite']['checked'])) { + print ''; +} +// Date delivery +if (!empty($arrayfields['p.date_livraison']['checked'])) { + print ''; +} +// Date Signature +if (!empty($arrayfields['p.date_signature']['checked'])) { + print ''; +} +// Availability +if (!empty($arrayfields['ava.rowid']['checked'])) { + print ''; +} +// Shipping Method +if (!empty($arrayfields['p.fk_shipping_method']['checked'])) { + print ''; +} +// Source - Input reason +if (!empty($arrayfields['p.fk_input_reason']['checked'])) { + print ''; +} +// Payment term +if (!empty($arrayfields['p.fk_cond_reglement']['checked'])) { + print ''; +} +// Payment mode +if (!empty($arrayfields['p.fk_mode_reglement']['checked'])) { + print ''; +} +if (!empty($arrayfields['p.total_ht']['checked'])) { + // Amount + print ''; +} +if (!empty($arrayfields['p.total_tva']['checked'])) { + // Amount + print ''; +} +if (!empty($arrayfields['p.total_ttc']['checked'])) { + // Amount + print ''; +} +if (!empty($arrayfields['p.total_ht_invoiced']['checked'])) { + // Amount invoiced + print ''; +} +if (!empty($arrayfields['p.total_invoiced']['checked'])) { + // Amount invoiced + print ''; +} +if (!empty($arrayfields['p.multicurrency_code']['checked'])) { + // Currency + print ''; +} +if (!empty($arrayfields['p.multicurrency_tx']['checked'])) { + // Currency rate + print ''; +} +if (!empty($arrayfields['p.multicurrency_total_ht']['checked'])) { + // Amount + print ''; +} +if (!empty($arrayfields['p.multicurrency_total_tva']['checked'])) { + // Amount + print ''; +} +if (!empty($arrayfields['p.multicurrency_total_ttc']['checked'])) { + // Amount + print ''; +} +if (!empty($arrayfields['p.multicurrency_total_ht_invoiced']['checked'])) { + // Amount invoiced + print ''; +} +if (!empty($arrayfields['p.multicurrency_total_invoiced']['checked'])) { + // Amount invoiced + print ''; +} +if (!empty($arrayfields['u.login']['checked'])) { + // Author + print ''; +} +if (!empty($arrayfields['sale_representative']['checked'])) { + print ''; +} +if (!empty($arrayfields['total_pa']['checked'])) { + print ''; +} +if (!empty($arrayfields['total_margin']['checked'])) { + print ''; +} +if (!empty($arrayfields['total_margin_rate']['checked'])) { + print ''; +} +if (!empty($arrayfields['total_mark_rate']['checked'])) { + print ''; +} +// Extra fields +include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php'; + +// Fields from hook +$parameters = array('arrayfields' => $arrayfields); +$reshook = $hookmanager->executeHooks('printFieldListOption', $parameters, $object, $action); // Note that $action and $object may have been modified by hook +print $hookmanager->resPrint; +// Date creation +if (!empty($arrayfields['p.datec']['checked'])) { + print ''; +} +// Date modification +if (!empty($arrayfields['p.tms']['checked'])) { + print ''; +} +// Date cloture +if (!empty($arrayfields['p.date_cloture']['checked'])) { + print ''; +} +if (!empty($arrayfields['p.note_public']['checked'])) { + // Note public + print ''; +} +if (!empty($arrayfields['p.note_private']['checked'])) { + // Note private + print ''; +} +// Status +if (!empty($arrayfields['p.fk_statut']['checked'])) { + print ''; +} +// Action column +if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) { + print ''; +} +print "\n"; + +$totalarray = array( + 'nbfield' => 0, + 'val' => array( + 'p.total_ht' => 0, + 'p.total_tva' => 0, + 'p.total_ttc' => 0, + ), +); + +// Fields title +print ''; +if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) { + print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', 'align="center"', $sortfield, $sortorder, 'maxwidthsearch '); + $totalarray['nbfield']++; +} +if (!empty($arrayfields['p.ref']['checked'])) { + print_liste_field_titre($arrayfields['p.ref']['label'], $_SERVER["PHP_SELF"], 'p.ref', '', $param, '', $sortfield, $sortorder); + $totalarray['nbfield']++; +} +if (!empty($arrayfields['p.ref_client']['checked'])) { + print_liste_field_titre($arrayfields['p.ref_client']['label'], $_SERVER["PHP_SELF"], 'p.ref_client', '', $param, '', $sortfield, $sortorder); + $totalarray['nbfield']++; +} +if (!empty($arrayfields['pr.ref']['checked'])) { + print_liste_field_titre($arrayfields['pr.ref']['label'], $_SERVER["PHP_SELF"], 'pr.ref', '', $param, '', $sortfield, $sortorder); + $totalarray['nbfield']++; +} +if (!empty($arrayfields['pr.title']['checked'])) { + print_liste_field_titre($arrayfields['pr.title']['label'], $_SERVER["PHP_SELF"], 'pr.title', '', $param, '', $sortfield, $sortorder); + $totalarray['nbfield']++; +} +if (!empty($arrayfields['s.nom']['checked'])) { + print_liste_field_titre($arrayfields['s.nom']['label'], $_SERVER["PHP_SELF"], 's.nom', '', $param, '', $sortfield, $sortorder); + $totalarray['nbfield']++; +} +if (!empty($arrayfields['s.name_alias']['checked'])) { + print_liste_field_titre($arrayfields['s.name_alias']['label'], $_SERVER["PHP_SELF"], 's.name_alias', '', $param, '', $sortfield, $sortorder); + $totalarray['nbfield']++; +} +if (!empty($arrayfields['s.town']['checked'])) { + print_liste_field_titre($arrayfields['s.town']['label'], $_SERVER["PHP_SELF"], 's.town', '', $param, '', $sortfield, $sortorder); + $totalarray['nbfield']++; +} +if (!empty($arrayfields['s.zip']['checked'])) { + print_liste_field_titre($arrayfields['s.zip']['label'], $_SERVER["PHP_SELF"], 's.zip', '', $param, '', $sortfield, $sortorder); + $totalarray['nbfield']++; +} +if (!empty($arrayfields['state.nom']['checked'])) { + print_liste_field_titre($arrayfields['state.nom']['label'], $_SERVER["PHP_SELF"], "state.nom", "", $param, '', $sortfield, $sortorder); + $totalarray['nbfield']++; +} +if (!empty($arrayfields['country.code_iso']['checked'])) { + print_liste_field_titre($arrayfields['country.code_iso']['label'], $_SERVER["PHP_SELF"], "country.code_iso", "", $param, 'class="center"', $sortfield, $sortorder); + $totalarray['nbfield']++; +} +if (!empty($arrayfields['typent.code']['checked'])) { + print_liste_field_titre($arrayfields['typent.code']['label'], $_SERVER["PHP_SELF"], "typent.code", "", $param, 'class="center"', $sortfield, $sortorder); + $totalarray['nbfield']++; +} +if (!empty($arrayfields['p.date']['checked'])) { + print_liste_field_titre($arrayfields['p.date']['label'], $_SERVER["PHP_SELF"], 'p.datep', '', $param, 'class="center"', $sortfield, $sortorder); + $totalarray['nbfield']++; +} +if (!empty($arrayfields['p.fin_validite']['checked'])) { + print_liste_field_titre($arrayfields['p.fin_validite']['label'], $_SERVER["PHP_SELF"], 'dfv', '', $param, 'class="center"', $sortfield, $sortorder); + $totalarray['nbfield']++; +} +if (!empty($arrayfields['p.date_livraison']['checked'])) { + print_liste_field_titre($arrayfields['p.date_livraison']['label'], $_SERVER["PHP_SELF"], 'p.date_livraison', '', $param, 'class="center"', $sortfield, $sortorder); + $totalarray['nbfield']++; +} +if (!empty($arrayfields['p.date_signature']['checked'])) { + print_liste_field_titre($arrayfields['p.date_signature']['label'], $_SERVER["PHP_SELF"], 'p.date_signature', '', $param, 'class="center"', $sortfield, $sortorder); + $totalarray['nbfield']++; +} +if (!empty($arrayfields['ava.rowid']['checked'])) { + print_liste_field_titre($arrayfields['ava.rowid']['label'], $_SERVER["PHP_SELF"], 'availability', '', $param, '', $sortfield, $sortorder); + $totalarray['nbfield']++; +} +if (!empty($arrayfields['p.fk_shipping_method']['checked'])) { + print_liste_field_titre($arrayfields['p.fk_shipping_method']['label'], $_SERVER["PHP_SELF"], "p.fk_shipping_method", "", $param, '', $sortfield, $sortorder); + $totalarray['nbfield']++; +} +if (!empty($arrayfields['p.fk_input_reason']['checked'])) { + print_liste_field_titre($arrayfields['p.fk_input_reason']['label'], $_SERVER["PHP_SELF"], "p.fk_input_reason", "", $param, '', $sortfield, $sortorder); + $totalarray['nbfield']++; +} +if (!empty($arrayfields['p.fk_cond_reglement']['checked'])) { + print_liste_field_titre($arrayfields['p.fk_cond_reglement']['label'], $_SERVER["PHP_SELF"], "p.fk_cond_reglement", "", $param, '', $sortfield, $sortorder); + $totalarray['nbfield']++; +} +if (!empty($arrayfields['p.fk_mode_reglement']['checked'])) { + print_liste_field_titre($arrayfields['p.fk_mode_reglement']['label'], $_SERVER["PHP_SELF"], "p.fk_mode_reglement", "", $param, '', $sortfield, $sortorder); + $totalarray['nbfield']++; +} +if (!empty($arrayfields['p.total_ht']['checked'])) { + print_liste_field_titre($arrayfields['p.total_ht']['label'], $_SERVER["PHP_SELF"], 'p.total_ht', '', $param, '', $sortfield, $sortorder, 'right '); + $totalarray['nbfield']++; +} +if (!empty($arrayfields['p.total_tva']['checked'])) { + print_liste_field_titre($arrayfields['p.total_tva']['label'], $_SERVER["PHP_SELF"], 'p.total_tva', '', $param, '', $sortfield, $sortorder, 'right '); + $totalarray['nbfield']++; +} +if (!empty($arrayfields['p.total_ttc']['checked'])) { + print_liste_field_titre($arrayfields['p.total_ttc']['label'], $_SERVER["PHP_SELF"], 'p.total_ttc', '', $param, '', $sortfield, $sortorder, 'right '); + $totalarray['nbfield']++; +} +if (!empty($arrayfields['p.total_ht_invoiced']['checked'])) { + print_liste_field_titre($arrayfields['p.total_ht_invoiced']['label'], $_SERVER["PHP_SELF"], '', '', $param, '', $sortfield, $sortorder, 'right '); + $totalarray['nbfield']++; +} +if (!empty($arrayfields['p.total_invoiced']['checked'])) { + print_liste_field_titre($arrayfields['p.total_invoiced']['label'], $_SERVER["PHP_SELF"], '', '', $param, '', $sortfield, $sortorder, 'right '); + $totalarray['nbfield']++; +} +if (!empty($arrayfields['p.multicurrency_code']['checked'])) { + print_liste_field_titre($arrayfields['p.multicurrency_code']['label'], $_SERVER['PHP_SELF'], 'p.multicurrency_code', '', $param, '', $sortfield, $sortorder); + $totalarray['nbfield']++; +} +if (!empty($arrayfields['p.multicurrency_tx']['checked'])) { + print_liste_field_titre($arrayfields['p.multicurrency_tx']['label'], $_SERVER['PHP_SELF'], 'p.multicurrency_tx', '', $param, '', $sortfield, $sortorder); + $totalarray['nbfield']++; +} +if (!empty($arrayfields['p.multicurrency_total_ht']['checked'])) { + print_liste_field_titre($arrayfields['p.multicurrency_total_ht']['label'], $_SERVER['PHP_SELF'], 'p.multicurrency_total_ht', '', $param, '', $sortfield, $sortorder, 'right '); + $totalarray['nbfield']++; +} +if (!empty($arrayfields['p.multicurrency_total_tva']['checked'])) { + print_liste_field_titre($arrayfields['p.multicurrency_total_tva']['label'], $_SERVER['PHP_SELF'], 'p.multicurrency_total_tva', '', $param, '', $sortfield, $sortorder, 'right '); + $totalarray['nbfield']++; +} +if (!empty($arrayfields['p.multicurrency_total_ttc']['checked'])) { + print_liste_field_titre($arrayfields['p.multicurrency_total_ttc']['label'], $_SERVER['PHP_SELF'], 'p.multicurrency_total_ttc', '', $param, '', $sortfield, $sortorder, 'right '); + $totalarray['nbfield']++; +} +if (!empty($arrayfields['p.multicurrency_total_ht_invoiced']['checked'])) { + print_liste_field_titre($arrayfields['p.multicurrency_total_ht_invoiced']['label'], $_SERVER["PHP_SELF"], '', '', $param, '', $sortfield, $sortorder, 'right '); + $totalarray['nbfield']++; +} +if (!empty($arrayfields['p.multicurrency_total_invoiced']['checked'])) { + print_liste_field_titre($arrayfields['p.multicurrency_total_invoiced']['label'], $_SERVER["PHP_SELF"], '', '', $param, '', $sortfield, $sortorder, 'right '); + $totalarray['nbfield']++; +} +if (!empty($arrayfields['u.login']['checked'])) { + print_liste_field_titre($arrayfields['u.login']['label'], $_SERVER["PHP_SELF"], 'u.login', '', $param, '', $sortfield, $sortorder); + $totalarray['nbfield']++; +} +if (!empty($arrayfields['sale_representative']['checked'])) { + print_liste_field_titre($arrayfields['sale_representative']['label'], $_SERVER["PHP_SELF"], "", "", "$param", '', $sortfield, $sortorder); + $totalarray['nbfield']++; +} +if (!empty($arrayfields['total_pa']['checked'])) { + print_liste_field_titre($arrayfields['total_pa']['label'], $_SERVER['PHP_SELF'], '', '', $param, '', $sortfield, $sortorder, 'right '); + $totalarray['nbfield']++; +} +if (!empty($arrayfields['total_margin']['checked'])) { + print_liste_field_titre($arrayfields['total_margin']['label'], $_SERVER['PHP_SELF'], '', '', $param, '', $sortfield, $sortorder, 'right '); + $totalarray['nbfield']++; +} +if (!empty($arrayfields['total_margin_rate']['checked'])) { + print_liste_field_titre($arrayfields['total_margin_rate']['label'], $_SERVER['PHP_SELF'], '', '', $param, '', $sortfield, $sortorder, 'right '); + $totalarray['nbfield']++; +} +if (!empty($arrayfields['total_mark_rate']['checked'])) { + print_liste_field_titre($arrayfields['total_mark_rate']['label'], $_SERVER['PHP_SELF'], '', '', $param, '', $sortfield, $sortorder, 'right '); + $totalarray['nbfield']++; +} +// Extra fields +include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; +// Hook fields +$parameters = array( + 'arrayfields' => $arrayfields, + 'param' => $param, + 'sortfield' => $sortfield, + 'sortorder' => $sortorder, + 'totalarray' => &$totalarray, +); + +$reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook + +print $hookmanager->resPrint; +if (!empty($arrayfields['p.datec']['checked'])) { + print_liste_field_titre($arrayfields['p.datec']['label'], $_SERVER["PHP_SELF"], "p.datec", "", $param, '', $sortfield, $sortorder, 'center nowraponall '); + $totalarray['nbfield']++; +} +if (!empty($arrayfields['p.tms']['checked'])) { + print_liste_field_titre($arrayfields['p.tms']['label'], $_SERVER["PHP_SELF"], "p.tms", "", $param, '', $sortfield, $sortorder, 'center nowraponall '); + $totalarray['nbfield']++; +} +if (!empty($arrayfields['p.date_cloture']['checked'])) { + print_liste_field_titre($arrayfields['p.date_cloture']['label'], $_SERVER["PHP_SELF"], "p.date_cloture", "", $param, 'align="center" class="nowrap"', $sortfield, $sortorder); + $totalarray['nbfield']++; +} +if (!empty($arrayfields['p.note_public']['checked'])) { + print_liste_field_titre($arrayfields['p.note_public']['label'], $_SERVER["PHP_SELF"], "p.note_public", "", $param, '', $sortfield, $sortorder, 'center nowrap '); + $totalarray['nbfield']++; +} +if (!empty($arrayfields['p.note_private']['checked'])) { + print_liste_field_titre($arrayfields['p.note_private']['label'], $_SERVER["PHP_SELF"], "p.note_private", "", $param, '', $sortfield, $sortorder, 'center nowrap '); + $totalarray['nbfield']++; +} +if (!empty($arrayfields['p.fk_statut']['checked'])) { + print_liste_field_titre($arrayfields['p.fk_statut']['label'], $_SERVER["PHP_SELF"], "p.fk_statut", "", $param, '', $sortfield, $sortorder, 'center '); + $totalarray['nbfield']++; +} +if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) { + print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', 'align="center"', $sortfield, $sortorder, 'maxwidthsearch '); + $totalarray['nbfield']++; +} +print ''."\n"; + +// Loop on record +// -------------------------------------------------------------------- +$typenArray = null; +$now = dol_now(); + +$with_margin_info = false; +if (isModEnabled('margin') && ( + !empty($arrayfields['total_pa']['checked']) + || !empty($arrayfields['total_margin']['checked']) + || !empty($arrayfields['total_margin_rate']['checked']) + || !empty($arrayfields['total_mark_rate']['checked']) +) +) { + $with_margin_info = true; +} +$total_ht = 0; +$total_margin = 0; + +$i = 0; +$savnbfield = $totalarray['nbfield']; +$totalarray = array(); +$totalarray['nbfield'] = 0; +$imaxinloop = ($limit ? min($num, $limit) : $num); +while ($i < $imaxinloop) { + $obj = $db->fetch_object($resql); + if (empty($obj)) { + break; // Should not happen } - if (in_array($massaction, array('presend', 'predelete', 'closed'))) { - $arrayofmassactions = array(); - } - $massactionbutton = $form->selectMassAction('', $arrayofmassactions); + $objectstatic->id = $obj->rowid; + $objectstatic->ref = $obj->ref; + $objectstatic->ref_client = $obj->ref_client; + $objectstatic->note_public = $obj->note_public; + $objectstatic->note_private = $obj->note_private; + $objectstatic->statut = $obj->status; + $objectstatic->status = $obj->status; - $url = DOL_URL_ROOT.'/comm/propal/card.php?action=create'; - if (!empty($socid)) { - $url .= '&socid='.$socid; - } - $newcardbutton = ''; - $newcardbutton .= dolGetButtonTitle($langs->trans('ViewList'), '', 'fa fa-bars imgforviewmode', $_SERVER["PHP_SELF"].'?mode=common'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ((empty($mode) || $mode == 'common') ? 2 : 1), array('morecss'=>'reposition')); - $newcardbutton .= dolGetButtonTitle($langs->trans('ViewKanban'), '', 'fa fa-th-list imgforviewmode', $_SERVER["PHP_SELF"].'?mode=kanban'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ($mode == 'kanban' ? 2 : 1), array('morecss'=>'reposition')); - $newcardbutton .= dolGetButtonTitleSeparator(); - $newcardbutton .= dolGetButtonTitle($langs->trans('NewPropal'), '', 'fa fa-plus-circle', $url, '', $user->hasRight('propal', 'creer')); + $companystatic->id = $obj->socid; + $companystatic->name = $obj->name; + $companystatic->name_alias = $obj->alias; + $companystatic->client = $obj->client; + $companystatic->fournisseur = $obj->fournisseur; + $companystatic->code_client = $obj->code_client; + $companystatic->email = $obj->email; + $companystatic->phone = $obj->phone; + $companystatic->address = $obj->address; + $companystatic->zip = $obj->zip; + $companystatic->town = $obj->town; + $companystatic->country_code = $obj->country_code; - // Fields title search - print ''; - if ($optioncss != '') { - print ''; - } - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; + $projectstatic->id = $obj->project_id; + $projectstatic->ref = $obj->project_ref; + $projectstatic->title = $obj->project_label; - print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'propal', 0, $newcardbutton, '', $limit, 0, 0, 1); + $totalInvoicedHT = 0; + $totalInvoicedTTC = 0; + $multicurrency_totalInvoicedHT = 0; + $multicurrency_totalInvoicedTTC = 0; - $topicmail = "SendPropalRef"; - $modelmail = "propal_send"; - $objecttmp = new Propal($db); - $trackid = 'pro'.$object->id; - include DOL_DOCUMENT_ROOT.'/core/tpl/massactions_pre.tpl.php'; + $TInvoiceData = $objectstatic->InvoiceArrayList($obj->rowid); - if ($massaction == 'prevalidate') { - print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassValidation"), $langs->trans("ConfirmMassValidationQuestion"), "validate", null, '', 0, 200, 500, 1); - } + if (!empty($TInvoiceData)) { + foreach ($TInvoiceData as $invoiceData) { + $invoice = new Facture($db); + $invoice->fetch($invoiceData->facid); - if ($massaction == 'presign') { - print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassSignature"), $langs->trans("ConfirmMassSignatureQuestion"), "sign", null, '', 0, 200, 500, 1); - } + if (getDolGlobalString('FACTURE_DEPOSITS_ARE_JUST_PAYMENTS') && $invoice->type == Facture::TYPE_DEPOSIT) { + continue; + } - if ($massaction == 'nopresign') { - print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassNoSignature"), $langs->trans("ConfirmMassNoSignatureQuestion"), "nosign", null, '', 0, 200, 500, 1); - } - - if ($search_all) { - foreach ($fieldstosearchall as $key => $val) { - $fieldstosearchall[$key] = $langs->trans($val); + $totalInvoicedHT += $invoice->total_ht; + $totalInvoicedTTC += $invoice->total_ttc; + $multicurrency_totalInvoicedHT += $invoice->multicurrency_total_ht; + $multicurrency_totalInvoicedTTC += $invoice->multicurrency_total_ttc; } - print '
'.$langs->trans("FilterOnInto", $search_all).implode(', ', $fieldstosearchall).'
'; } - $i = 0; + $marginInfo = array(); + if ($with_margin_info === true) { + $objectstatic->fetch_lines(); + $marginInfo = $formmargin->getMarginInfosArray($objectstatic); + $total_ht += $obj->total_ht; + $total_margin += $marginInfo['total_margin']; + } - $moreforfilter = ''; - - // If the user can view prospects other than his' - if ($user->hasRight('user', 'user', 'lire')) { - $langs->load("commercial"); - $moreforfilter .= '
'; - $tmptitle = $langs->trans('ThirdPartiesOfSaleRepresentative'); - $moreforfilter .= img_picto($tmptitle, 'user', 'class="pictofixedwidth"').$formother->select_salesrepresentatives($search_sale, 'search_sale', $user, 0, $tmptitle, 'maxwidth250 widthcentpercentminusx', 1); - $moreforfilter .= '
'; - } - // If the user can view prospects other than his' - if ($user->hasRight('user', 'user', 'lire')) { - $moreforfilter .= '
'; - $tmptitle = $langs->trans('LinkedToSpecificUsers'); - $moreforfilter .= img_picto($tmptitle, 'user', 'class="pictofixedwidth"').$form->select_dolusers($search_user, 'search_user', $tmptitle, '', 0, '', '', 0, 0, 0, '', 0, '', 'maxwidth250 widthcentpercentminusx'); - $moreforfilter .= '
'; - } - // If the user can view products - if (isModEnabled('categorie') && $user->hasRight('categorie', 'read') && ($user->hasRight('product', 'read') || $user->hasRight('service', 'read'))) { - $searchCategoryProductOperator = -1; - include_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; - $tmptitle = $langs->trans('IncludingProductWithTag'); - $formcategory = new FormCategory($db); - $moreforfilter .= $formcategory->getFilterBox(Categorie::TYPE_PRODUCT, array($search_product_category), 'maxwidth300', $searchCategoryProductOperator, 0, 0, $tmptitle); - } - if (isModEnabled('categorie') && $user->hasRight('categorie', 'lire')) { - require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; - $moreforfilter .= '
'; - $tmptitle = $langs->trans('CustomersProspectsCategoriesShort'); - $moreforfilter .= img_picto($tmptitle, 'category', 'class="pictofixedwidth"').$formother->select_categories('customer', $search_categ_cus, 'search_categ_cus', 1, $tmptitle, (empty($conf->dol_optimize_smallscreen) ? 'maxwidth300 widthcentpercentminusx' : 'maxwidth250 widthcentpercentminusx')); - $moreforfilter .= '
'; - } - if (isModEnabled('stock') && getDolGlobalString('WAREHOUSE_ASK_WAREHOUSE_DURING_PROPAL')) { - require_once DOL_DOCUMENT_ROOT.'/product/class/html.formproduct.class.php'; - $formproduct = new FormProduct($db); - $moreforfilter .= '
'; - $tmptitle = $langs->trans('Warehouse'); - $moreforfilter .= img_picto($tmptitle, 'stock', 'class="pictofixedwidth"').$formproduct->selectWarehouses($search_warehouse, 'search_warehouse', '', $tmptitle, 0, 0, $tmptitle); - $moreforfilter .= '
'; - } - $parameters = array(); - $reshook = $hookmanager->executeHooks('printFieldPreListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook - if (empty($reshook)) { - $moreforfilter .= $hookmanager->resPrint; + if ($mode == 'kanban') { + if ($i == 0) { + print ''; + } } else { - $moreforfilter = $hookmanager->resPrint; - } + print ''; - if (!empty($moreforfilter)) { - print '
'; - print $moreforfilter; - print '
'; - } - - $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; - $selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')); // This also change content of $arrayfields - $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); - - print '
'; - print '
'; + $searchpicto = $form->showFilterButtons('left'); + print $searchpicto; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print $form->select_country($search_country, 'search_country', '', 0, 'minwidth100imp maxwidth100'); + print ''; + print $form->selectarray("search_type_thirdparty", $formcompany->typent_array(0), $search_type_thirdparty, 1, 0, 0, '', 0, 0, 0, (!getDolGlobalString('SOCIETE_SORT_ON_TYPEENT') ? 'ASC' : $conf->global->SOCIETE_SORT_ON_TYPEENT), '', 1); + print ajax_combobox('search_type_thirdparty'); + print ''; + print '
'; + print $form->selectDate($search_date_start ? $search_date_start : -1, 'search_date_start', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('From')); + print '
'; + print '
'; + print $form->selectDate($search_date_end ? $search_date_end : -1, 'search_date_end', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('to')); + print '
'; + print '
'; + print '
'; + print $form->selectDate($search_date_end_start ? $search_date_end_start : -1, 'search_date_end_start', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('From')); + print '
'; + print '
'; + print $form->selectDate($search_date_end_end ? $search_date_end_end : -1, 'search_date_end_end', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('to')); + print '
'; + print '
'; + print '
'; + print $form->selectDate($search_date_delivery_start ? $search_date_delivery_start : -1, 'search_date_delivery_start', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('From')); + print '
'; + print '
'; + print $form->selectDate($search_date_delivery_end ? $search_date_delivery_end : -1, 'search_date_delivery_end', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('From')); + print '
'; + print '
'; + print '
'; + print $form->selectDate($search_date_signature_start ? $search_date_signature_start : -1, 'search_date_signature_start', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('From')); + print '
'; + print '
'; + print $form->selectDate($search_date_signature_end ? $search_date_signature_end : -1, 'search_date_signature_end', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('From')); + print '
'; + print '
'; + $form->selectAvailabilityDelay($search_availability, 'search_availability', '', 1); + print ajax_combobox('search_availability'); + print ''; + $form->selectShippingMethod($search_fk_shipping_method, 'search_fk_shipping_method', '', 1, '', 1); + print ''; + $form->selectInputReason($search_fk_input_reason, 'search_fk_input_reason', '', 1, 'maxwidth125', 1); + print ''; + print $form->getSelectConditionsPaiements($search_fk_cond_reglement, 'search_fk_cond_reglement', 1, 1, 1); + print ''; + print $form->select_types_paiements($search_fk_mode_reglement, 'search_fk_mode_reglement', '', 0, 1, 1, 0, -1, '', 1); + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print $form->selectMultiCurrency($search_multicurrency_code, 'search_multicurrency_code', 1); + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + $formpropal->selectProposalStatus($search_status, 1, 0, 1, 'customer', 'search_status', 'search_status width100 onrightofpage'); + print ''; + $searchpicto = $form->showFilterButtons(); + print $searchpicto; + print '
'; + print '
'; + } + // Output Kanban + $userstatic->fetch($obj->fk_user_author); + $arrayofparams = array('selected' => in_array($object->id, $arrayofselected), 'authorlink' => $userstatic->getNomUrl(-2), 'projectlink' => $projectstatic->getNomUrl(2)); + print $objectstatic->getKanbanView('', $arrayofparams); + if ($i == ($imaxinloop - 1)) { + print '
'; + print '
'."\n"; - - print ''; - - // Action column - if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) { - print ''; - } - - if (!empty($arrayfields['p.ref']['checked'])) { - print ''; - } - if (!empty($arrayfields['p.ref_client']['checked'])) { - print ''; - } - if (!empty($arrayfields['pr.ref']['checked'])) { - print ''; - } - if (!empty($arrayfields['pr.title']['checked'])) { - print ''; - } - if (!empty($arrayfields['s.nom']['checked'])) { - print ''; - } - if (!empty($arrayfields['s.name_alias']['checked'])) { - print ''; - } - if (!empty($arrayfields['s.town']['checked'])) { - print ''; - } - if (!empty($arrayfields['s.zip']['checked'])) { - print ''; - } - // State - if (!empty($arrayfields['state.nom']['checked'])) { - print ''; - } - // Country - if (!empty($arrayfields['country.code_iso']['checked'])) { - print ''; - } - // Company type - if (!empty($arrayfields['typent.code']['checked'])) { - print ''; - } - // Date - if (!empty($arrayfields['p.date']['checked'])) { - print ''; - } - // Date end - if (!empty($arrayfields['p.fin_validite']['checked'])) { - print ''; - } - // Date delivery - if (!empty($arrayfields['p.date_livraison']['checked'])) { - print ''; - } - // Date Signature - if (!empty($arrayfields['p.date_signature']['checked'])) { - print ''; - } - // Availability - if (!empty($arrayfields['ava.rowid']['checked'])) { - print ''; - } - // Shipping Method - if (!empty($arrayfields['p.fk_shipping_method']['checked'])) { - print ''; - } - // Source - Input reason - if (!empty($arrayfields['p.fk_input_reason']['checked'])) { - print ''; - } - // Payment term - if (!empty($arrayfields['p.fk_cond_reglement']['checked'])) { - print ''; - } - // Payment mode - if (!empty($arrayfields['p.fk_mode_reglement']['checked'])) { - print ''; - } - if (!empty($arrayfields['p.total_ht']['checked'])) { - // Amount - print ''; - } - if (!empty($arrayfields['p.total_tva']['checked'])) { - // Amount - print ''; - } - if (!empty($arrayfields['p.total_ttc']['checked'])) { - // Amount - print ''; - } - if (!empty($arrayfields['p.total_ht_invoiced']['checked'])) { - // Amount invoiced - print ''; - } - if (!empty($arrayfields['p.total_invoiced']['checked'])) { - // Amount invoiced - print ''; - } - if (!empty($arrayfields['p.multicurrency_code']['checked'])) { - // Currency - print ''; - } - if (!empty($arrayfields['p.multicurrency_tx']['checked'])) { - // Currency rate - print ''; - } - if (!empty($arrayfields['p.multicurrency_total_ht']['checked'])) { - // Amount - print ''; - } - if (!empty($arrayfields['p.multicurrency_total_tva']['checked'])) { - // Amount - print ''; - } - if (!empty($arrayfields['p.multicurrency_total_ttc']['checked'])) { - // Amount - print ''; - } - if (!empty($arrayfields['p.multicurrency_total_ht_invoiced']['checked'])) { - // Amount invoiced - print ''; - } - if (!empty($arrayfields['p.multicurrency_total_invoiced']['checked'])) { - // Amount invoiced - print ''; - } - if (!empty($arrayfields['u.login']['checked'])) { - // Author - print ''; - } - if (!empty($arrayfields['sale_representative']['checked'])) { - print ''; - } - if (!empty($arrayfields['total_pa']['checked'])) { - print ''; - } - if (!empty($arrayfields['total_margin']['checked'])) { - print ''; - } - if (!empty($arrayfields['total_margin_rate']['checked'])) { - print ''; - } - if (!empty($arrayfields['total_mark_rate']['checked'])) { - print ''; - } - // Extra fields - include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php'; - - // Fields from hook - $parameters = array('arrayfields'=>$arrayfields); - $reshook = $hookmanager->executeHooks('printFieldListOption', $parameters, $object, $action); // Note that $action and $object may have been modified by hook - print $hookmanager->resPrint; - // Date creation - if (!empty($arrayfields['p.datec']['checked'])) { - print ''; - } - // Date modification - if (!empty($arrayfields['p.tms']['checked'])) { - print ''; - } - // Date cloture - if (!empty($arrayfields['p.date_cloture']['checked'])) { - print ''; - } - if (!empty($arrayfields['p.note_public']['checked'])) { - // Note public - print ''; - } - if (!empty($arrayfields['p.note_private']['checked'])) { - // Note private - print ''; - } - // Status - if (!empty($arrayfields['p.fk_statut']['checked'])) { - print ''; - } - // Action column - if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) { - print ''; - } - print "\n"; - - $totalarray = array( - 'nbfield' => 0, - 'val' => array( - 'p.total_ht' => 0, - 'p.total_tva' => 0, - 'p.total_ttc' => 0, - ), - ); - - // Fields title - print ''; - if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) { - print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', 'align="center"', $sortfield, $sortorder, 'maxwidthsearch '); - $totalarray['nbfield']++; - } - if (!empty($arrayfields['p.ref']['checked'])) { - print_liste_field_titre($arrayfields['p.ref']['label'], $_SERVER["PHP_SELF"], 'p.ref', '', $param, '', $sortfield, $sortorder); - $totalarray['nbfield']++; - } - if (!empty($arrayfields['p.ref_client']['checked'])) { - print_liste_field_titre($arrayfields['p.ref_client']['label'], $_SERVER["PHP_SELF"], 'p.ref_client', '', $param, '', $sortfield, $sortorder); - $totalarray['nbfield']++; - } - if (!empty($arrayfields['pr.ref']['checked'])) { - print_liste_field_titre($arrayfields['pr.ref']['label'], $_SERVER["PHP_SELF"], 'pr.ref', '', $param, '', $sortfield, $sortorder); - $totalarray['nbfield']++; - } - if (!empty($arrayfields['pr.title']['checked'])) { - print_liste_field_titre($arrayfields['pr.title']['label'], $_SERVER["PHP_SELF"], 'pr.title', '', $param, '', $sortfield, $sortorder); - $totalarray['nbfield']++; - } - if (!empty($arrayfields['s.nom']['checked'])) { - print_liste_field_titre($arrayfields['s.nom']['label'], $_SERVER["PHP_SELF"], 's.nom', '', $param, '', $sortfield, $sortorder); - $totalarray['nbfield']++; - } - if (!empty($arrayfields['s.name_alias']['checked'])) { - print_liste_field_titre($arrayfields['s.name_alias']['label'], $_SERVER["PHP_SELF"], 's.name_alias', '', $param, '', $sortfield, $sortorder); - $totalarray['nbfield']++; - } - if (!empty($arrayfields['s.town']['checked'])) { - print_liste_field_titre($arrayfields['s.town']['label'], $_SERVER["PHP_SELF"], 's.town', '', $param, '', $sortfield, $sortorder); - $totalarray['nbfield']++; - } - if (!empty($arrayfields['s.zip']['checked'])) { - print_liste_field_titre($arrayfields['s.zip']['label'], $_SERVER["PHP_SELF"], 's.zip', '', $param, '', $sortfield, $sortorder); - $totalarray['nbfield']++; - } - if (!empty($arrayfields['state.nom']['checked'])) { - print_liste_field_titre($arrayfields['state.nom']['label'], $_SERVER["PHP_SELF"], "state.nom", "", $param, '', $sortfield, $sortorder); - $totalarray['nbfield']++; - } - if (!empty($arrayfields['country.code_iso']['checked'])) { - print_liste_field_titre($arrayfields['country.code_iso']['label'], $_SERVER["PHP_SELF"], "country.code_iso", "", $param, 'class="center"', $sortfield, $sortorder); - $totalarray['nbfield']++; - } - if (!empty($arrayfields['typent.code']['checked'])) { - print_liste_field_titre($arrayfields['typent.code']['label'], $_SERVER["PHP_SELF"], "typent.code", "", $param, 'class="center"', $sortfield, $sortorder); - $totalarray['nbfield']++; - } - if (!empty($arrayfields['p.date']['checked'])) { - print_liste_field_titre($arrayfields['p.date']['label'], $_SERVER["PHP_SELF"], 'p.datep', '', $param, 'class="center"', $sortfield, $sortorder); - $totalarray['nbfield']++; - } - if (!empty($arrayfields['p.fin_validite']['checked'])) { - print_liste_field_titre($arrayfields['p.fin_validite']['label'], $_SERVER["PHP_SELF"], 'dfv', '', $param, 'class="center"', $sortfield, $sortorder); - $totalarray['nbfield']++; - } - if (!empty($arrayfields['p.date_livraison']['checked'])) { - print_liste_field_titre($arrayfields['p.date_livraison']['label'], $_SERVER["PHP_SELF"], 'p.date_livraison', '', $param, 'class="center"', $sortfield, $sortorder); - $totalarray['nbfield']++; - } - if (!empty($arrayfields['p.date_signature']['checked'])) { - print_liste_field_titre($arrayfields['p.date_signature']['label'], $_SERVER["PHP_SELF"], 'p.date_signature', '', $param, 'class="center"', $sortfield, $sortorder); - $totalarray['nbfield']++; - } - if (!empty($arrayfields['ava.rowid']['checked'])) { - print_liste_field_titre($arrayfields['ava.rowid']['label'], $_SERVER["PHP_SELF"], 'availability', '', $param, '', $sortfield, $sortorder); - $totalarray['nbfield']++; - } - if (!empty($arrayfields['p.fk_shipping_method']['checked'])) { - print_liste_field_titre($arrayfields['p.fk_shipping_method']['label'], $_SERVER["PHP_SELF"], "p.fk_shipping_method", "", $param, '', $sortfield, $sortorder); - $totalarray['nbfield']++; - } - if (!empty($arrayfields['p.fk_input_reason']['checked'])) { - print_liste_field_titre($arrayfields['p.fk_input_reason']['label'], $_SERVER["PHP_SELF"], "p.fk_input_reason", "", $param, '', $sortfield, $sortorder); - $totalarray['nbfield']++; - } - if (!empty($arrayfields['p.fk_cond_reglement']['checked'])) { - print_liste_field_titre($arrayfields['p.fk_cond_reglement']['label'], $_SERVER["PHP_SELF"], "p.fk_cond_reglement", "", $param, '', $sortfield, $sortorder); - $totalarray['nbfield']++; - } - if (!empty($arrayfields['p.fk_mode_reglement']['checked'])) { - print_liste_field_titre($arrayfields['p.fk_mode_reglement']['label'], $_SERVER["PHP_SELF"], "p.fk_mode_reglement", "", $param, '', $sortfield, $sortorder); - $totalarray['nbfield']++; - } - if (!empty($arrayfields['p.total_ht']['checked'])) { - print_liste_field_titre($arrayfields['p.total_ht']['label'], $_SERVER["PHP_SELF"], 'p.total_ht', '', $param, '', $sortfield, $sortorder, 'right '); - $totalarray['nbfield']++; - } - if (!empty($arrayfields['p.total_tva']['checked'])) { - print_liste_field_titre($arrayfields['p.total_tva']['label'], $_SERVER["PHP_SELF"], 'p.total_tva', '', $param, '', $sortfield, $sortorder, 'right '); - $totalarray['nbfield']++; - } - if (!empty($arrayfields['p.total_ttc']['checked'])) { - print_liste_field_titre($arrayfields['p.total_ttc']['label'], $_SERVER["PHP_SELF"], 'p.total_ttc', '', $param, '', $sortfield, $sortorder, 'right '); - $totalarray['nbfield']++; - } - if (!empty($arrayfields['p.total_ht_invoiced']['checked'])) { - print_liste_field_titre($arrayfields['p.total_ht_invoiced']['label'], $_SERVER["PHP_SELF"], '', '', $param, '', $sortfield, $sortorder, 'right '); - $totalarray['nbfield']++; - } - if (!empty($arrayfields['p.total_invoiced']['checked'])) { - print_liste_field_titre($arrayfields['p.total_invoiced']['label'], $_SERVER["PHP_SELF"], '', '', $param, '', $sortfield, $sortorder, 'right '); - $totalarray['nbfield']++; - } - if (!empty($arrayfields['p.multicurrency_code']['checked'])) { - print_liste_field_titre($arrayfields['p.multicurrency_code']['label'], $_SERVER['PHP_SELF'], 'p.multicurrency_code', '', $param, '', $sortfield, $sortorder); - $totalarray['nbfield']++; - } - if (!empty($arrayfields['p.multicurrency_tx']['checked'])) { - print_liste_field_titre($arrayfields['p.multicurrency_tx']['label'], $_SERVER['PHP_SELF'], 'p.multicurrency_tx', '', $param, '', $sortfield, $sortorder); - $totalarray['nbfield']++; - } - if (!empty($arrayfields['p.multicurrency_total_ht']['checked'])) { - print_liste_field_titre($arrayfields['p.multicurrency_total_ht']['label'], $_SERVER['PHP_SELF'], 'p.multicurrency_total_ht', '', $param, '', $sortfield, $sortorder, 'right '); - $totalarray['nbfield']++; - } - if (!empty($arrayfields['p.multicurrency_total_tva']['checked'])) { - print_liste_field_titre($arrayfields['p.multicurrency_total_tva']['label'], $_SERVER['PHP_SELF'], 'p.multicurrency_total_tva', '', $param, '', $sortfield, $sortorder, 'right '); - $totalarray['nbfield']++; - } - if (!empty($arrayfields['p.multicurrency_total_ttc']['checked'])) { - print_liste_field_titre($arrayfields['p.multicurrency_total_ttc']['label'], $_SERVER['PHP_SELF'], 'p.multicurrency_total_ttc', '', $param, '', $sortfield, $sortorder, 'right '); - $totalarray['nbfield']++; - } - if (!empty($arrayfields['p.multicurrency_total_ht_invoiced']['checked'])) { - print_liste_field_titre($arrayfields['p.multicurrency_total_ht_invoiced']['label'], $_SERVER["PHP_SELF"], '', '', $param, '', $sortfield, $sortorder, 'right '); - $totalarray['nbfield']++; - } - if (!empty($arrayfields['p.multicurrency_total_invoiced']['checked'])) { - print_liste_field_titre($arrayfields['p.multicurrency_total_invoiced']['label'], $_SERVER["PHP_SELF"], '', '', $param, '', $sortfield, $sortorder, 'right '); - $totalarray['nbfield']++; - } - if (!empty($arrayfields['u.login']['checked'])) { - print_liste_field_titre($arrayfields['u.login']['label'], $_SERVER["PHP_SELF"], 'u.login', '', $param, '', $sortfield, $sortorder, 'center '); - $totalarray['nbfield']++; - } - if (!empty($arrayfields['sale_representative']['checked'])) { - print_liste_field_titre($arrayfields['sale_representative']['label'], $_SERVER["PHP_SELF"], "", "", "$param", '', $sortfield, $sortorder); - $totalarray['nbfield']++; - } - if (!empty($arrayfields['total_pa']['checked'])) { - print_liste_field_titre($arrayfields['total_pa']['label'], $_SERVER['PHP_SELF'], '', '', $param, '', $sortfield, $sortorder, 'right '); - $totalarray['nbfield']++; - } - if (!empty($arrayfields['total_margin']['checked'])) { - print_liste_field_titre($arrayfields['total_margin']['label'], $_SERVER['PHP_SELF'], '', '', $param, '', $sortfield, $sortorder, 'right '); - $totalarray['nbfield']++; - } - if (!empty($arrayfields['total_margin_rate']['checked'])) { - print_liste_field_titre($arrayfields['total_margin_rate']['label'], $_SERVER['PHP_SELF'], '', '', $param, '', $sortfield, $sortorder, 'right '); - $totalarray['nbfield']++; - } - if (!empty($arrayfields['total_mark_rate']['checked'])) { - print_liste_field_titre($arrayfields['total_mark_rate']['label'], $_SERVER['PHP_SELF'], '', '', $param, '', $sortfield, $sortorder, 'right '); - $totalarray['nbfield']++; - } - // Extra fields - include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; - // Hook fields - $parameters = array( - 'arrayfields' => $arrayfields, - 'param' => $param, - 'sortfield' => $sortfield, - 'sortorder' => $sortorder, - 'totalarray' => &$totalarray, - ); - - $reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook - - print $hookmanager->resPrint; - if (!empty($arrayfields['p.datec']['checked'])) { - print_liste_field_titre($arrayfields['p.datec']['label'], $_SERVER["PHP_SELF"], "p.datec", "", $param, '', $sortfield, $sortorder, 'center nowraponall '); - $totalarray['nbfield']++; - } - if (!empty($arrayfields['p.tms']['checked'])) { - print_liste_field_titre($arrayfields['p.tms']['label'], $_SERVER["PHP_SELF"], "p.tms", "", $param, '', $sortfield, $sortorder, 'center nowraponall '); - $totalarray['nbfield']++; - } - if (!empty($arrayfields['p.date_cloture']['checked'])) { - print_liste_field_titre($arrayfields['p.date_cloture']['label'], $_SERVER["PHP_SELF"], "p.date_cloture", "", $param, 'align="center" class="nowrap"', $sortfield, $sortorder); - $totalarray['nbfield']++; - } - if (!empty($arrayfields['p.note_public']['checked'])) { - print_liste_field_titre($arrayfields['p.note_public']['label'], $_SERVER["PHP_SELF"], "p.note_public", "", $param, '', $sortfield, $sortorder, 'center nowrap '); - $totalarray['nbfield']++; - } - if (!empty($arrayfields['p.note_private']['checked'])) { - print_liste_field_titre($arrayfields['p.note_private']['label'], $_SERVER["PHP_SELF"], "p.note_private", "", $param, '', $sortfield, $sortorder, 'center nowrap '); - $totalarray['nbfield']++; - } - if (!empty($arrayfields['p.fk_statut']['checked'])) { - print_liste_field_titre($arrayfields['p.fk_statut']['label'], $_SERVER["PHP_SELF"], "p.fk_statut", "", $param, '', $sortfield, $sortorder, 'center '); - $totalarray['nbfield']++; - } - if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) { - print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', 'align="center"', $sortfield, $sortorder, 'maxwidthsearch '); - $totalarray['nbfield']++; - } - print ''."\n"; - - // Loop on record - // -------------------------------------------------------------------- - $typenArray = null; - $now = dol_now(); - - $with_margin_info = false; - if (isModEnabled('margin') && ( - !empty($arrayfields['total_pa']['checked']) - || !empty($arrayfields['total_margin']['checked']) - || !empty($arrayfields['total_margin_rate']['checked']) - || !empty($arrayfields['total_mark_rate']['checked']) - ) - ) { - $with_margin_info = true; - } - $total_ht = 0; - $total_margin = 0; - - $i = 0; - $savnbfield = $totalarray['nbfield']; - $totalarray = array(); - $totalarray['nbfield'] = 0; - $imaxinloop = ($limit ? min($num, $limit) : $num); - while ($i < $imaxinloop) { - $obj = $db->fetch_object($resql); - if (empty($obj)) { - break; // Should not happen - } - - $objectstatic->id = $obj->rowid; - $objectstatic->ref = $obj->ref; - $objectstatic->ref_client = $obj->ref_client; - $objectstatic->note_public = $obj->note_public; - $objectstatic->note_private = $obj->note_private; - $objectstatic->statut = $obj->status; - $objectstatic->status = $obj->status; - - $companystatic->id = $obj->socid; - $companystatic->name = $obj->name; - $companystatic->name_alias = $obj->alias; - $companystatic->client = $obj->client; - $companystatic->fournisseur = $obj->fournisseur; - $companystatic->code_client = $obj->code_client; - $companystatic->email = $obj->email; - $companystatic->phone = $obj->phone; - $companystatic->address = $obj->address; - $companystatic->zip = $obj->zip; - $companystatic->town = $obj->town; - $companystatic->country_code = $obj->country_code; - - $projectstatic->id = $obj->project_id; - $projectstatic->ref = $obj->project_ref; - $projectstatic->title = $obj->project_label; - - $totalInvoicedHT = 0; - $totalInvoicedTTC = 0; - $multicurrency_totalInvoicedHT = 0; - $multicurrency_totalInvoicedTTC = 0; - - $TInvoiceData = $objectstatic->InvoiceArrayList($obj->rowid); - - if (!empty($TInvoiceData)) { - foreach ($TInvoiceData as $invoiceData) { - $invoice = new Facture($db); - $invoice->fetch($invoiceData->facid); - - if (getDolGlobalString('FACTURE_DEPOSITS_ARE_JUST_PAYMENTS') && $invoice->type == Facture::TYPE_DEPOSIT) { - continue; + // Action column + if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) { + print ''; + if (!$i) { + $totalarray['nbfield']++; } } - $marginInfo = array(); - if ($with_margin_info === true) { - $objectstatic->fetch_lines(); - $marginInfo = $formmargin->getMarginInfosArray($objectstatic); - $total_ht += $obj->total_ht; - $total_margin += $marginInfo['total_margin']; + if (!empty($arrayfields['p.ref']['checked'])) { + print '\n"; + if (!$i) { + $totalarray['nbfield']++; + } } - if ($mode == 'kanban') { - if ($i == 0) { - print ''; + if (!$i) { + $totalarray['nbfield']++; } - // Output Kanban - $userstatic->fetch($obj->fk_user_author); - $arrayofparams = array('selected' => in_array($object->id, $arrayofselected), 'authorlink' => $userstatic->getNomUrl(-2), 'projectlink' => $projectstatic->getNomUrl(2)); - print $objectstatic->getKanbanView('', $arrayofparams); - if ($i == ($imaxinloop - 1)) { - print ''; - print ''; - } - } else { - print ''; + } - // Action column - if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) { - print ''; - if (!$i) { - $totalarray['nbfield']++; - } + if (!empty($arrayfields['pr.ref']['checked'])) { + // Project ref + print ''; + if (!$i) { + $totalarray['nbfield']++; + } + } + + if (!empty($arrayfields['pr.title']['checked'])) { + // Project label + print ''; + if (!$i) { + $totalarray['nbfield']++; + } + } + + // Thirdparty + if (!empty($arrayfields['s.nom']['checked'])) { + print ''; + if (!$i) { + $totalarray['nbfield']++; + } + } + + // Alias + if (!empty($arrayfields['s.name_alias']['checked'])) { + print ''; + if (!$i) { + $totalarray['nbfield']++; + } + } + + // Town + if (!empty($arrayfields['s.town']['checked'])) { + print ''; + if (!$i) { + $totalarray['nbfield']++; + } + } + // Zip + if (!empty($arrayfields['s.zip']['checked'])) { + print ''; + if (!$i) { + $totalarray['nbfield']++; + } + } + // State + if (!empty($arrayfields['state.nom']['checked'])) { + print "\n"; + if (!$i) { + $totalarray['nbfield']++; + } + } + // Country + if (!empty($arrayfields['country.code_iso']['checked'])) { + print ''; + if (!$i) { + $totalarray['nbfield']++; + } + } + // Type ent + if (!empty($arrayfields['typent.code']['checked'])) { + if (!is_array($typenArray) || empty($typenArray)) { + $typenArray = $formcompany->typent_array(1); } - if (!empty($arrayfields['p.ref']['checked'])) { - print '\n"; - if (!$i) { - $totalarray['nbfield']++; - } - } - - if (!empty($arrayfields['p.ref_client']['checked'])) { - // Customer ref - print ''; - if (!$i) { - $totalarray['nbfield']++; - } - } - - if (!empty($arrayfields['pr.ref']['checked'])) { - // Project ref - print ''; - if (!$i) { - $totalarray['nbfield']++; - } - } - - if (!empty($arrayfields['pr.title']['checked'])) { - // Project label - print ''; - if (!$i) { - $totalarray['nbfield']++; - } - } - - // Thirdparty - if (!empty($arrayfields['s.nom']['checked'])) { - print ''; - if (!$i) { - $totalarray['nbfield']++; - } - } - - // Alias - if (!empty($arrayfields['s.name_alias']['checked'])) { - print ''; - if (!$i) { - $totalarray['nbfield']++; - } - } - - // Town - if (!empty($arrayfields['s.town']['checked'])) { - print ''; - if (!$i) { - $totalarray['nbfield']++; - } - } - // Zip - if (!empty($arrayfields['s.zip']['checked'])) { - print ''; - if (!$i) { - $totalarray['nbfield']++; - } - } - // State - if (!empty($arrayfields['state.nom']['checked'])) { - print "\n"; - if (!$i) { - $totalarray['nbfield']++; - } - } - // Country - if (!empty($arrayfields['country.code_iso']['checked'])) { - print ''; - if (!$i) { - $totalarray['nbfield']++; - } - } - // Type ent - if (!empty($arrayfields['typent.code']['checked'])) { - if (!is_array($typenArray) || empty($typenArray)) { - $typenArray = $formcompany->typent_array(1); - } - - print ''; - if (!$i) { - $totalarray['nbfield']++; - } } + print ''; + if (!$i) { + $totalarray['nbfield']++; + } + } - // Date proposal - if (!empty($arrayfields['p.date']['checked'])) { - print '\n"; - if (!$i) { - $totalarray['nbfield']++; - } + // Date proposal + if (!empty($arrayfields['p.date']['checked'])) { + print '\n"; + if (!$i) { + $totalarray['nbfield']++; } + } - // Date end validity - if (!empty($arrayfields['p.fin_validite']['checked'])) { - if ($obj->dfv) { - print ''; - } else { - print ''; - } - if (!$i) { - $totalarray['nbfield']++; - } - } - // Date delivery - if (!empty($arrayfields['p.date_livraison']['checked'])) { - if ($obj->ddelivery) { - print ''; - } else { - print ''; - } - if (!$i) { - $totalarray['nbfield']++; - } - } - // Date Signature - if (!empty($arrayfields['p.date_signature']['checked'])) { - if ($obj->dsignature) { - print ''; - } else { - print ''; - } - if (!$i) { - $totalarray['nbfield']++; - } - } - // Availability - if (!empty($arrayfields['ava.rowid']['checked'])) { - print ''; - if (!$i) { - $totalarray['nbfield']++; - } + } else { + print ''; } - // Shipping Method - if (!empty($arrayfields['p.fk_shipping_method']['checked'])) { - print ''; - if (!$i) { - $totalarray['nbfield']++; - } + } else { + print ''; } - // Source - input reason - if (!empty($arrayfields['p.fk_input_reason']['checked'])) { - print ''; - if (!$i) { - $totalarray['nbfield']++; - } + } else { + print ''; } - // Payment terms - if (!empty($arrayfields['p.fk_cond_reglement']['checked'])) { - print ''; - if (!$i) { - $totalarray['nbfield']++; - } + if (!$i) { + $totalarray['nbfield']++; } - // Payment mode - if (!empty($arrayfields['p.fk_mode_reglement']['checked'])) { - print ''; - if (!$i) { - $totalarray['nbfield']++; - } + } + // Availability + if (!empty($arrayfields['ava.rowid']['checked'])) { + print ''; + if (!$i) { + $totalarray['nbfield']++; } - // Amount HT - if (!empty($arrayfields['p.total_ht']['checked'])) { - print '\n"; - if (!$i) { - $totalarray['nbfield']++; - } - if (!$i) { - $totalarray['pos'][$totalarray['nbfield']] = 'p.total_ht'; - } - if (empty($totalarray['val']['p.total_ht'])) { - $totalarray['val']['p.total_ht'] = $obj->total_ht; - } else { - $totalarray['val']['p.total_ht'] += $obj->total_ht; - } + } + // Shipping Method + if (!empty($arrayfields['p.fk_shipping_method']['checked'])) { + print ''; + if (!$i) { + $totalarray['nbfield']++; } - // Amount VAT - if (!empty($arrayfields['p.total_tva']['checked'])) { - print '\n"; - if (!$i) { - $totalarray['nbfield']++; - } - if (!$i) { - $totalarray['pos'][$totalarray['nbfield']] = 'p.total_tva'; - } - if (empty($totalarray['val']['p.total_tva'])) { - $totalarray['val']['p.total_tva'] = $obj->total_tva; - } else { - $totalarray['val']['p.total_tva'] += $obj->total_tva; - } + } + // Source - input reason + if (!empty($arrayfields['p.fk_input_reason']['checked'])) { + $labelInputReason = ''; + if ($obj->fk_input_reason > 0) { + $labelInputReason = $form->cache_demand_reason[$obj->fk_input_reason]['label']; } - // Amount TTC - if (!empty($arrayfields['p.total_ttc']['checked'])) { - print '\n"; - if (!$i) { - $totalarray['nbfield']++; - } - if (!$i) { - $totalarray['pos'][$totalarray['nbfield']] = 'p.total_ttc'; - } - if (empty($totalarray['val']['p.total_ttc'])) { - $totalarray['val']['p.total_ttc'] = $obj->total_ttc; - } else { - $totalarray['val']['p.total_ttc'] += $obj->total_ttc; - } + print ''; + if (!$i) { + $totalarray['nbfield']++; } - // Amount invoiced HT - if (!empty($arrayfields['p.total_ht_invoiced']['checked'])) { - print '\n"; - if (!$i) { - $totalarray['nbfield']++; - } - if (!$i) { - $totalarray['pos'][$totalarray['nbfield']] = 'p.total_ht_invoiced'; - } - if (empty($totalarray['val']['p.total_ht_invoiced'])) { - $totalarray['val']['p.total_ht_invoiced'] = $totalInvoicedHT; - } else { - $totalarray['val']['p.total_ht_invoiced'] += $totalInvoicedHT; - } + } + // Payment terms + if (!empty($arrayfields['p.fk_cond_reglement']['checked'])) { + print ''; + if (!$i) { + $totalarray['nbfield']++; } - // Amount invoiced TTC - if (!empty($arrayfields['p.total_invoiced']['checked'])) { - print '\n"; - if (!$i) { - $totalarray['nbfield']++; - } - if (!$i) { - $totalarray['pos'][$totalarray['nbfield']] = 'p.total_invoiced'; - } - if (empty($totalarray['val']['p.total_invoiced'])) { - $totalarray['val']['p.total_invoiced'] = $totalInvoicedTTC; - } else { - $totalarray['val']['p.total_invoiced'] += $totalInvoicedTTC; - } + } + // Payment mode + if (!empty($arrayfields['p.fk_mode_reglement']['checked'])) { + print ''; + if (!$i) { + $totalarray['nbfield']++; } - // Currency - if (!empty($arrayfields['p.multicurrency_code']['checked'])) { - print '\n"; - if (!$i) { - $totalarray['nbfield']++; - } + } + // Amount HT + if (!empty($arrayfields['p.total_ht']['checked'])) { + print '\n"; + if (!$i) { + $totalarray['nbfield']++; } + if (!$i) { + $totalarray['pos'][$totalarray['nbfield']] = 'p.total_ht'; + } + if (empty($totalarray['val']['p.total_ht'])) { + $totalarray['val']['p.total_ht'] = $obj->total_ht; + } else { + $totalarray['val']['p.total_ht'] += $obj->total_ht; + } + } + // Amount VAT + if (!empty($arrayfields['p.total_tva']['checked'])) { + print '\n"; + if (!$i) { + $totalarray['nbfield']++; + } + if (!$i) { + $totalarray['pos'][$totalarray['nbfield']] = 'p.total_tva'; + } + if (empty($totalarray['val']['p.total_tva'])) { + $totalarray['val']['p.total_tva'] = $obj->total_tva; + } else { + $totalarray['val']['p.total_tva'] += $obj->total_tva; + } + } + // Amount TTC + if (!empty($arrayfields['p.total_ttc']['checked'])) { + print '\n"; + if (!$i) { + $totalarray['nbfield']++; + } + if (!$i) { + $totalarray['pos'][$totalarray['nbfield']] = 'p.total_ttc'; + } + if (empty($totalarray['val']['p.total_ttc'])) { + $totalarray['val']['p.total_ttc'] = $obj->total_ttc; + } else { + $totalarray['val']['p.total_ttc'] += $obj->total_ttc; + } + } + // Amount invoiced HT + if (!empty($arrayfields['p.total_ht_invoiced']['checked'])) { + print '\n"; + if (!$i) { + $totalarray['nbfield']++; + } + if (!$i) { + $totalarray['pos'][$totalarray['nbfield']] = 'p.total_ht_invoiced'; + } + if (empty($totalarray['val']['p.total_ht_invoiced'])) { + $totalarray['val']['p.total_ht_invoiced'] = $totalInvoicedHT; + } else { + $totalarray['val']['p.total_ht_invoiced'] += $totalInvoicedHT; + } + } + // Amount invoiced TTC + if (!empty($arrayfields['p.total_invoiced']['checked'])) { + print '\n"; + if (!$i) { + $totalarray['nbfield']++; + } + if (!$i) { + $totalarray['pos'][$totalarray['nbfield']] = 'p.total_invoiced'; + } + if (empty($totalarray['val']['p.total_invoiced'])) { + $totalarray['val']['p.total_invoiced'] = $totalInvoicedTTC; + } else { + $totalarray['val']['p.total_invoiced'] += $totalInvoicedTTC; + } + } + // Currency + if (!empty($arrayfields['p.multicurrency_code']['checked'])) { + print '\n"; + if (!$i) { + $totalarray['nbfield']++; + } + } - // Currency rate - if (!empty($arrayfields['p.multicurrency_tx']['checked'])) { - print '\n"; - if (!$i) { - $totalarray['nbfield']++; - } + // Currency rate + if (!empty($arrayfields['p.multicurrency_tx']['checked'])) { + print '\n"; + if (!$i) { + $totalarray['nbfield']++; } - // Amount HT - if (!empty($arrayfields['p.multicurrency_total_ht']['checked'])) { - print '\n"; - if (!$i) { - $totalarray['nbfield']++; - } + } + // Amount HT + if (!empty($arrayfields['p.multicurrency_total_ht']['checked'])) { + print '\n"; + if (!$i) { + $totalarray['nbfield']++; } - // Amount VAT - if (!empty($arrayfields['p.multicurrency_total_tva']['checked'])) { - print '\n"; - if (!$i) { - $totalarray['nbfield']++; - } + } + // Amount VAT + if (!empty($arrayfields['p.multicurrency_total_tva']['checked'])) { + print '\n"; + if (!$i) { + $totalarray['nbfield']++; } - // Amount TTC - if (!empty($arrayfields['p.multicurrency_total_ttc']['checked'])) { - print '\n"; - if (!$i) { - $totalarray['nbfield']++; - } + } + // Amount TTC + if (!empty($arrayfields['p.multicurrency_total_ttc']['checked'])) { + print '\n"; + if (!$i) { + $totalarray['nbfield']++; } - // Amount invoiced - if (!empty($arrayfields['p.multicurrency_total_ht_invoiced']['checked'])) { - print '\n"; - if (!$i) { - $totalarray['nbfield']++; - } + } + // Amount invoiced + if (!empty($arrayfields['p.multicurrency_total_ht_invoiced']['checked'])) { + print '\n"; + if (!$i) { + $totalarray['nbfield']++; } - // Amount invoiced - if (!empty($arrayfields['p.multicurrency_total_invoiced']['checked'])) { - print '\n"; - if (!$i) { - $totalarray['nbfield']++; - } + } + // Amount invoiced + if (!empty($arrayfields['p.multicurrency_total_invoiced']['checked'])) { + print '\n"; + if (!$i) { + $totalarray['nbfield']++; } + } - $userstatic->id = $obj->fk_user_author; - $userstatic->login = $obj->login; - $userstatic->lastname = $obj->lastname; - $userstatic->firstname = $obj->firstname; - $userstatic->email = $obj->user_email; - $userstatic->statut = $obj->user_statut; - $userstatic->entity = $obj->user_entity; - $userstatic->photo = $obj->photo; - $userstatic->office_phone = $obj->office_phone; - $userstatic->office_fax = $obj->office_fax; - $userstatic->user_mobile = $obj->user_mobile; - $userstatic->job = $obj->job; - $userstatic->gender = $obj->gender; + $userstatic->id = $obj->fk_user_author; + $userstatic->login = $obj->login; + $userstatic->lastname = $obj->lastname; + $userstatic->firstname = $obj->firstname; + $userstatic->email = $obj->user_email; + $userstatic->statut = $obj->user_statut; + $userstatic->entity = $obj->user_entity; + $userstatic->photo = $obj->photo; + $userstatic->office_phone = $obj->office_phone; + $userstatic->office_fax = $obj->office_fax; + $userstatic->user_mobile = $obj->user_mobile; + $userstatic->job = $obj->job; + $userstatic->gender = $obj->gender; - // Author - if (!empty($arrayfields['u.login']['checked'])) { - print '\n"; - if (!$i) { - $totalarray['nbfield']++; - } + // Author + if (!empty($arrayfields['u.login']['checked'])) { + print '\n"; + if (!$i) { + $totalarray['nbfield']++; + } + } - if (!empty($arrayfields['sale_representative']['checked'])) { - // Sales representatives - print ''; + if (!$i) { + $totalarray['nbfield']++; + } + } + + // Total buying or cost price + if (!empty($arrayfields['total_pa']['checked'])) { + print ''; + if (!$i) { + $totalarray['nbfield']++; + } + } + // Total margin + if (!empty($arrayfields['total_margin']['checked'])) { + print ''; + if (!$i) { + $totalarray['nbfield']++; + } + if (!$i) { + $totalarray['pos'][$totalarray['nbfield']] = 'total_margin'; + } + $totalarray['val']['total_margin'] = $total_margin; + } + // Total margin rate + if (!empty($arrayfields['total_margin_rate']['checked'])) { + print ''; + if (!$i) { + $totalarray['nbfield']++; + } + } + // Total mark rate + if (!empty($arrayfields['total_mark_rate']['checked'])) { + print ''; + if (!$i) { + $totalarray['nbfield']++; + } + if (!$i) { + $totalarray['pos'][$totalarray['nbfield']] = 'total_mark_rate'; + } + if ($i >= $imaxinloop - 1) { + if (!empty($total_ht)) { + $totalarray['val']['total_mark_rate'] = price2num($total_margin * 100 / $total_ht, 'MT'); } else { - print ' '; - } - print ''; - if (!$i) { - $totalarray['nbfield']++; + $totalarray['val']['total_mark_rate'] = ''; } } - - // Total buying or cost price - if (!empty($arrayfields['total_pa']['checked'])) { - print ''; - if (!$i) { - $totalarray['nbfield']++; - } - } - // Total margin - if (!empty($arrayfields['total_margin']['checked'])) { - print ''; - if (!$i) { - $totalarray['nbfield']++; - } - if (!$i) { - $totalarray['pos'][$totalarray['nbfield']] = 'total_margin'; - } - $totalarray['val']['total_margin'] = $total_margin; - } - // Total margin rate - if (!empty($arrayfields['total_margin_rate']['checked'])) { - print ''; - if (!$i) { - $totalarray['nbfield']++; - } - } - // Total mark rate - if (!empty($arrayfields['total_mark_rate']['checked'])) { - print ''; - if (!$i) { - $totalarray['nbfield']++; - } - if (!$i) { - $totalarray['pos'][$totalarray['nbfield']] = 'total_mark_rate'; - } - if ($i >= $imaxinloop - 1) { - if (!empty($total_ht)) { - $totalarray['val']['total_mark_rate'] = price2num($total_margin * 100 / $total_ht, 'MT'); - } else { - $totalarray['val']['total_mark_rate'] = ''; - } - } - } - - // Extra fields - include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php'; - // Fields from hook - $parameters = array('arrayfields'=>$arrayfields, 'obj'=>$obj, 'i'=>$i, 'totalarray'=>&$totalarray); - $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters, $object, $action); // Note that $action and $object may have been modified by hook - print $hookmanager->resPrint; - // Date creation - if (!empty($arrayfields['p.datec']['checked'])) { - print ''; - if (!$i) { - $totalarray['nbfield']++; - } - } - // Date modification - if (!empty($arrayfields['p.tms']['checked'])) { - print ''; - if (!$i) { - $totalarray['nbfield']++; - } - } - // Date cloture - if (!empty($arrayfields['p.date_cloture']['checked'])) { - print ''; - if (!$i) { - $totalarray['nbfield']++; - } - } - // Note public - if (!empty($arrayfields['p.note_public']['checked'])) { - print ''; - if (!$i) { - $totalarray['nbfield']++; - } - } - // Note private - if (!empty($arrayfields['p.note_private']['checked'])) { - print ''; - if (!$i) { - $totalarray['nbfield']++; - } - } - // Status - if (!empty($arrayfields['p.fk_statut']['checked'])) { - print ''; - if (!$i) { - $totalarray['nbfield']++; - } - } - // Action column - if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) { - print ''; - if (!$i) { - $totalarray['nbfield']++; - } - } - - - print ''."\n"; } - $i++; - } - - // Show total line - include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php'; - - // If no record found - if ($num == 0) { - $colspan = 1; - foreach ($arrayfields as $key => $val) { - if (!empty($val['checked'])) { - $colspan++; + // Extra fields + include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php'; + // Fields from hook + $parameters = array('arrayfields' => $arrayfields, 'obj' => $obj, 'i' => $i, 'totalarray' => &$totalarray); + $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters, $object, $action); // Note that $action and $object may have been modified by hook + print $hookmanager->resPrint; + // Date creation + if (!empty($arrayfields['p.datec']['checked'])) { + print ''; + if (!$i) { + $totalarray['nbfield']++; } } - print ''; - } - - $db->free($resql); - - $parameters = array('arrayfields'=>$arrayfields, 'sql'=>$sql); - $reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters, $object, $action); // Note that $action and $object may have been modified by hook - print $hookmanager->resPrint; - - print '
'; - $searchpicto = $form->showFilterButtons('left'); - print $searchpicto; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print $form->select_country($search_country, 'search_country', '', 0, 'minwidth100imp maxwidth100'); - print ''; - print $form->selectarray("search_type_thirdparty", $formcompany->typent_array(0), $search_type_thirdparty, 1, 0, 0, '', 0, 0, 0, (!getDolGlobalString('SOCIETE_SORT_ON_TYPEENT') ? 'ASC' : $conf->global->SOCIETE_SORT_ON_TYPEENT), '', 1); - print ajax_combobox('search_type_thirdparty'); - print ''; - print '
'; - print $form->selectDate($search_date_start ? $search_date_start : -1, 'search_date_start', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('From')); - print '
'; - print '
'; - print $form->selectDate($search_date_end ? $search_date_end : -1, 'search_date_end', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('to')); - print '
'; - print '
'; - print '
'; - print $form->selectDate($search_date_end_start ? $search_date_end_start : -1, 'search_date_end_start', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('From')); - print '
'; - print '
'; - print $form->selectDate($search_date_end_end ? $search_date_end_end : -1, 'search_date_end_end', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('to')); - print '
'; - print '
'; - print '
'; - print $form->selectDate($search_date_delivery_start ? $search_date_delivery_start : -1, 'search_date_delivery_start', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('From')); - print '
'; - print '
'; - print $form->selectDate($search_date_delivery_end ? $search_date_delivery_end : -1, 'search_date_delivery_end', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('From')); - print '
'; - print '
'; - print '
'; - print $form->selectDate($search_date_signature_start ? $search_date_signature_start : -1, 'search_date_signature_start', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('From')); - print '
'; - print '
'; - print $form->selectDate($search_date_signature_end ? $search_date_signature_end : -1, 'search_date_signature_end', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('From')); - print '
'; - print '
'; - $form->selectAvailabilityDelay($search_availability, 'search_availability', '', 1); - print ajax_combobox('search_availability'); - print ''; - $form->selectShippingMethod($search_fk_shipping_method, 'search_fk_shipping_method', '', 1, '', 1); - print ''; - $form->selectInputReason($search_fk_input_reason, 'search_fk_input_reason', '', 1, 'maxwidth125', 1); - print ''; - print $form->getSelectConditionsPaiements($search_fk_cond_reglement, 'search_fk_cond_reglement', 1, 1, 1); - print ''; - print $form->select_types_paiements($search_fk_mode_reglement, 'search_fk_mode_reglement', '', 0, 1, 1, 0, -1, '', 1); - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print $form->selectMultiCurrency($search_multicurrency_code, 'search_multicurrency_code', 1); - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - $formpropal->selectProposalStatus($search_status, 1, 0, 1, 'customer', 'search_statut', 'search_status width100 onrightofpage'); - print ''; - $searchpicto = $form->showFilterButtons(); - print $searchpicto; - print '
'; + if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined + $selected = 0; + if (in_array($obj->rowid, $arrayofselected)) { + $selected = 1; } - - $totalInvoicedHT += $invoice->total_ht; - $totalInvoicedTTC += $invoice->total_ttc; - $multicurrency_totalInvoicedHT += $invoice->multicurrency_total_ht; - $multicurrency_totalInvoicedTTC += $invoice->multicurrency_total_ttc; + print ''; + } + print ''; + + print ''; + // Picto + Ref + print ''; + // Warning + $warnornote = ''; + if ($obj->status == Propal::STATUS_VALIDATED && $db->jdate($obj->dfv) < ($now - $conf->propal->cloture->warning_delay)) { + $warnornote .= img_warning($langs->trans("Late")); + } + if ($warnornote) { + print ''; + } + // Other picto tool + print '
'; + print $objectstatic->getNomUrl(1, '', '', 0, 1, (isset($conf->global->PROPAL_LIST_SHOW_NOTES) ? $conf->global->PROPAL_LIST_SHOW_NOTES : 1)); + print ''; + print $warnornote; + print ''; + $filename = dol_sanitizeFileName($obj->ref); + $filedir = $conf->propal->multidir_output[$obj->propal_entity].'/'.dol_sanitizeFileName($obj->ref); + $urlsource = $_SERVER['PHP_SELF'].'?id='.$obj->rowid; + print $formfile->getDocumentsLink($objectstatic->element, $filename, $filedir); + print '
'; + + print "
'; - print '
'; + if (!empty($arrayfields['p.ref_client']['checked'])) { + // Customer ref + print '
'; + print dol_escape_htmltag($obj->ref_client); + print '
'; - if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined - $selected = 0; - if (in_array($obj->rowid, $arrayofselected)) { - $selected = 1; - } - print ''; - } - print ''; + if ($obj->project_id > 0) { + print $projectstatic->getNomUrl(1); + } + print ''; + if ($obj->project_id > 0) { + print dol_escape_htmltag($projectstatic->title); + } + print ''; + print $companystatic->getNomUrl(1, 'customer', 0, 0, 1, empty($arrayfields['s.name_alias']['checked']) ? 0 : 1); + print ''; + print $obj->alias; + print ''; + print dol_escape_htmltag($obj->town); + print ''; + print $obj->zip; + print '".$obj->state_name."'; + $tmparray = getCountry($obj->fk_pays, 'all'); + print $tmparray['label']; + print ''; - - print ''; - // Picto + Ref - print ''; - // Warning - $warnornote = ''; - if ($obj->status == Propal::STATUS_VALIDATED && $db->jdate($obj->dfv) < ($now - $conf->propal->cloture->warning_delay)) { - $warnornote .= img_warning($langs->trans("Late")); - } - if ($warnornote) { - print ''; - } - // Other picto tool - print '
'; - print $objectstatic->getNomUrl(1, '', '', 0, 1, (isset($conf->global->PROPAL_LIST_SHOW_NOTES) ? $conf->global->PROPAL_LIST_SHOW_NOTES : 1)); - print ''; - print $warnornote; - print ''; - $filename = dol_sanitizeFileName($obj->ref); - $filedir = $conf->propal->multidir_output[$obj->propal_entity].'/'.dol_sanitizeFileName($obj->ref); - $urlsource = $_SERVER['PHP_SELF'].'?id='.$obj->rowid; - print $formfile->getDocumentsLink($objectstatic->element, $filename, $filedir); - print '
'; - - print "
'; - print dol_escape_htmltag($obj->ref_client); - print ''; - if ($obj->project_id > 0) { - print $projectstatic->getNomUrl(1); - } - print ''; - if ($obj->project_id > 0) { - print dol_escape_htmltag($projectstatic->title); - } - print ''; - print $companystatic->getNomUrl(1, 'customer', 0, 0, 1, empty($arrayfields['s.name_alias']['checked']) ? 0 : 1); - print ''; - print $obj->alias; - print ''; - print dol_escape_htmltag($obj->town); - print ''; - print $obj->zip; - print '".$obj->state_name."'; - $tmparray = getCountry($obj->fk_pays, 'all'); - print $tmparray['label']; - print ''; + print ''; + if (!empty($obj->typent_code)) { print $typenArray[$obj->typent_code]; - print ''; - print dol_print_date($db->jdate($obj->dp), 'day'); - print "'; + print dol_print_date($db->jdate($obj->dp), 'day'); + print "'.dol_print_date($db->jdate($obj->dfv), 'day'); - print ' '.dol_print_date($db->jdate($obj->ddelivery), 'day'); - print ' '.dol_print_date($db->jdate($obj->dsignature), 'day'); - print ' '; - $form->form_availability('', $obj->availability, 'none', 1); + // Date end validity + if (!empty($arrayfields['p.fin_validite']['checked'])) { + if ($obj->dfv) { + print ''.dol_print_date($db->jdate($obj->dfv), 'day'); print ' '; - $form->formSelectShippingMethod('', $obj->fk_shipping_method, 'none', 1); + if (!$i) { + $totalarray['nbfield']++; + } + } + // Date delivery + if (!empty($arrayfields['p.date_livraison']['checked'])) { + if ($obj->ddelivery) { + print ''.dol_print_date($db->jdate($obj->ddelivery), 'day'); print ' '; - if ($obj->fk_input_reason > 0) { - print $form->cache_demand_reason[$obj->fk_input_reason]['label']; - } + if (!$i) { + $totalarray['nbfield']++; + } + } + // Date Signature + if (!empty($arrayfields['p.date_signature']['checked'])) { + if ($obj->dsignature) { + print ''.dol_print_date($db->jdate($obj->dsignature), 'day'); print ' '; - $form->form_conditions_reglement($_SERVER['PHP_SELF'], $obj->fk_cond_reglement, 'none', 0, '', 1, $obj->deposit_percent); - print ''; - $form->form_modes_reglement($_SERVER['PHP_SELF'], $obj->fk_mode_reglement, 'none', '', -1); - print ''; + $form->form_availability('', $obj->availability, 'none', 1); + print ''.price($obj->total_ht)."'; + $form->formSelectShippingMethod('', $obj->fk_shipping_method, 'none', 1); + print ''.price($obj->total_tva)."'.price($obj->total_ttc)."'; + print dol_escape_htmltag($labelInputReason); + print ''.price($totalInvoicedHT)."'; + $form->form_conditions_reglement($_SERVER['PHP_SELF'], $obj->fk_cond_reglement, 'none', 0, '', 1, $obj->deposit_percent); + print ''.price($totalInvoicedTTC)."'; + $form->form_modes_reglement($_SERVER['PHP_SELF'], $obj->fk_mode_reglement, 'none', '', -1); + print ''.$obj->multicurrency_code.' - '.$langs->trans('Currency'.$obj->multicurrency_code)."'.price($obj->total_ht)."'.price($obj->total_tva)."'.price($obj->total_ttc)."'.price($totalInvoicedHT)."'.price($totalInvoicedTTC)."'.$obj->multicurrency_code.' - '.$langs->trans('Currency'.$obj->multicurrency_code)."'; - $form->form_multicurrency_rate($_SERVER['PHP_SELF'].'?id='.$obj->rowid, $obj->multicurrency_tx, 'none', $obj->multicurrency_code); - print "'; + $form->form_multicurrency_rate($_SERVER['PHP_SELF'].'?id='.$obj->rowid, $obj->multicurrency_tx, 'none', $obj->multicurrency_code); + print "'.price($obj->multicurrency_total_ht)."'.price($obj->multicurrency_total_ht)."'.price($obj->multicurrency_total_tva)."'.price($obj->multicurrency_total_tva)."'.price($obj->multicurrency_total_ttc)."'.price($obj->multicurrency_total_ttc)."'.price($multicurrency_totalInvoicedHT)."'.price($multicurrency_totalInvoicedHT)."'.price($multicurrency_totalInvoicedTTC)."'.price($multicurrency_totalInvoicedTTC)."'; - if ($userstatic->id) { - print $userstatic->getNomUrl(-1); - } - print "'; + if ($userstatic->id) { + print $userstatic->getNomUrl(-1); } + print "'; - if ($obj->socid > 0) { - $listsalesrepresentatives = $companystatic->getSalesRepresentatives($user); - if ($listsalesrepresentatives < 0) { - dol_print_error($db); - } - $nbofsalesrepresentative = count($listsalesrepresentatives); - if ($nbofsalesrepresentative > 6) { - // We print only number - print $nbofsalesrepresentative; - } elseif ($nbofsalesrepresentative > 0) { - $userstatic = new User($db); - $j = 0; - foreach ($listsalesrepresentatives as $val) { - $userstatic->id = $val['id']; - $userstatic->lastname = $val['lastname']; - $userstatic->firstname = $val['firstname']; - $userstatic->email = $val['email']; - $userstatic->statut = $val['statut']; - $userstatic->entity = $val['entity']; - $userstatic->photo = $val['photo']; - $userstatic->login = $val['login']; - $userstatic->office_phone = $val['office_phone']; - $userstatic->office_fax = $val['office_fax']; - $userstatic->user_mobile = $val['user_mobile']; - $userstatic->job = $val['job']; - $userstatic->gender = $val['gender']; - //print '
': - print ($nbofsalesrepresentative < 2) ? $userstatic->getNomUrl(-1, '', 0, 0, 12) : $userstatic->getNomUrl(-2); - $j++; - if ($j < $nbofsalesrepresentative) { - print ' '; - } - //print '
'; + if (!empty($arrayfields['sale_representative']['checked'])) { + // Sales representatives + print '
'; + if ($obj->socid > 0) { + $listsalesrepresentatives = $companystatic->getSalesRepresentatives($user); + if ($listsalesrepresentatives < 0) { + dol_print_error($db); + } + $nbofsalesrepresentative = count($listsalesrepresentatives); + if ($nbofsalesrepresentative > 6) { + // We print only number + print $nbofsalesrepresentative; + } elseif ($nbofsalesrepresentative > 0) { + $userstatic = new User($db); + $j = 0; + foreach ($listsalesrepresentatives as $val) { + $userstatic->id = $val['id']; + $userstatic->lastname = $val['lastname']; + $userstatic->firstname = $val['firstname']; + $userstatic->email = $val['email']; + $userstatic->statut = $val['statut']; + $userstatic->entity = $val['entity']; + $userstatic->photo = $val['photo']; + $userstatic->login = $val['login']; + $userstatic->office_phone = $val['office_phone']; + $userstatic->office_fax = $val['office_fax']; + $userstatic->user_mobile = $val['user_mobile']; + $userstatic->job = $val['job']; + $userstatic->gender = $val['gender']; + //print '
': + print ($nbofsalesrepresentative < 2) ? $userstatic->getNomUrl(-1, '', 0, 0, 12) : $userstatic->getNomUrl(-2); + $j++; + if ($j < $nbofsalesrepresentative) { + print ' '; } + //print '
'; } - //else print $langs->trans("NoSalesRepresentativeAffected"); + } + //else print $langs->trans("NoSalesRepresentativeAffected"); + } else { + print ' '; + } + print '
'.price($marginInfo['pa_total']).''.price($marginInfo['total_margin']).''.(($marginInfo['total_margin_rate'] == '') ? '' : price($marginInfo['total_margin_rate'], 0, null, null, null, 2).'%').''.(($marginInfo['total_mark_rate'] == '') ? '' : price($marginInfo['total_mark_rate'], 0, null, null, null, 2).'%').''.price($marginInfo['pa_total']).''.price($marginInfo['total_margin']).''.(($marginInfo['total_margin_rate'] == '') ? '' : price($marginInfo['total_margin_rate'], null, null, null, null, 2).'%').''.(($marginInfo['total_mark_rate'] == '') ? '' : price($marginInfo['total_mark_rate'], null, null, null, null, 2).'%').''; - print dol_print_date($db->jdate($obj->date_creation), 'dayhour', 'tzuser'); - print ''; - print dol_print_date($db->jdate($obj->date_modification), 'dayhour', 'tzuser'); - print ''; - print dol_print_date($db->jdate($obj->date_cloture), 'dayhour', 'tzuser'); - print ''; - print dolPrintHTML($obj->note_public); - print ''; - print dolPrintHTML($obj->note_private); - print ''.$objectstatic->getLibStatut(5).''; - if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined - $selected = 0; - if (in_array($obj->rowid, $arrayofselected)) { - $selected = 1; - } - print ''; - } - print '
'; + print dol_print_date($db->jdate($obj->date_creation), 'dayhour', 'tzuser'); + print '
'.$langs->trans("NoRecordFound").'
'."\n"; - print ''."\n"; - - print ''."\n"; - - if (in_array('builddoc', array_keys($arrayofmassactions)) && ($nbtotalofrecords === '' || $nbtotalofrecords)) { - $hidegeneratedfilelistifempty = 1; - if ($massaction == 'builddoc' || $action == 'remove_file' || $show_files) { - $hidegeneratedfilelistifempty = 0; + // Date modification + if (!empty($arrayfields['p.tms']['checked'])) { + print '
'; + print dol_print_date($db->jdate($obj->date_modification), 'dayhour', 'tzuser'); + print ''; + print dol_print_date($db->jdate($obj->date_cloture), 'dayhour', 'tzuser'); + print ''; + print dolPrintHTML($obj->note_public); + print ''; + print dolPrintHTML($obj->note_private); + print ''.$objectstatic->getLibStatut(5).''; + if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined + $selected = 0; + if (in_array($obj->rowid, $arrayofselected)) { + $selected = 1; + } + print ''; + } + print '
'.$langs->trans("NoRecordFound").'
'."\n"; +print ''."\n"; + +print ''."\n"; + +if (in_array('builddoc', array_keys($arrayofmassactions)) && ($nbtotalofrecords === '' || $nbtotalofrecords)) { + $hidegeneratedfilelistifempty = 1; + if ($massaction == 'builddoc' || $action == 'remove_file' || $show_files) { + $hidegeneratedfilelistifempty = 0; + } + + require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php'; + $formfile = new FormFile($db); + + // Show list of available documents + $urlsource = $_SERVER['PHP_SELF'].'?sortfield='.$sortfield.'&sortorder='.$sortorder; + $urlsource .= str_replace('&', '&', $param); + + $filedir = $diroutputmassaction; + $genallowed = $permissiontoread; + $delallowed = $permissiontoadd; + + print $formfile->showdocuments('massfilesarea_proposals', '', $filedir, $urlsource, 0, $delallowed, '', 1, 1, 0, 48, 1, $param, $title, '', '', '', null, $hidegeneratedfilelistifempty); +} + +// End of page +llxFooter(); +$db->close(); diff --git a/htdocs/comm/propal/note.php b/htdocs/comm/propal/note.php index bc408a1c6de..e412b5d1077 100644 --- a/htdocs/comm/propal/note.php +++ b/htdocs/comm/propal/note.php @@ -37,7 +37,7 @@ if (isModEnabled('project')) { // Load translation files required by the page $langs->loadLangs(array('propal', 'compta', 'bills', 'companies')); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); diff --git a/htdocs/comm/propal/stats/index.php b/htdocs/comm/propal/stats/index.php index 4e0a4071ae0..76809fc222f 100644 --- a/htdocs/comm/propal/stats/index.php +++ b/htdocs/comm/propal/stats/index.php @@ -41,11 +41,11 @@ $HEIGHT = DolGraph::getDefaultGraphSizeForStats('height'); $mode = GETPOSTISSET("mode") ? GETPOST("mode", 'aZ09') : 'customer'; $object_status = GETPOST('object_status', 'intcomma'); -$typent_id = GETPOST('typent_id', 'int'); -$categ_id = GETPOST('categ_id', 'categ_id'); +$typent_id = GETPOSTINT('typent_id'); +$categ_id = GETPOSTINT('categ_id'); -$userid = GETPOST('userid', 'int'); -$socid = GETPOST('socid', 'int'); +$userid = GETPOSTINT('userid'); +$socid = GETPOSTINT('socid'); // Security check if ($user->socid > 0) { $action = ''; @@ -53,7 +53,7 @@ if ($user->socid > 0) { } $nowyear = dol_print_date(dol_now('gmt'), "%Y", 'gmt'); -$year = GETPOST('year') > 0 ? GETPOST('year', 'int') : $nowyear; +$year = GETPOST('year') > 0 ? GETPOSTINT('year') : $nowyear; $startyear = $year - (!getDolGlobalString('MAIN_STATS_GRAPHS_SHOW_N_YEARS') ? 2 : max(1, min(10, getDolGlobalString('MAIN_STATS_GRAPHS_SHOW_N_YEARS')))); $endyear = $year; diff --git a/htdocs/comm/propal/tpl/linkedobjectblock.tpl.php b/htdocs/comm/propal/tpl/linkedobjectblock.tpl.php index b81a31e1891..05692d23ae0 100644 --- a/htdocs/comm/propal/tpl/linkedobjectblock.tpl.php +++ b/htdocs/comm/propal/tpl/linkedobjectblock.tpl.php @@ -26,7 +26,7 @@ // Protection to avoid direct call of template if (empty($conf) || !is_object($conf)) { print "Error, template page can't be called as URL"; - exit; + exit(1); } diff --git a/htdocs/comm/prospect/index.php b/htdocs/comm/prospect/index.php index 551172f2674..122d0f88811 100644 --- a/htdocs/comm/prospect/index.php +++ b/htdocs/comm/prospect/index.php @@ -36,7 +36,7 @@ if ($user->socid > 0) { } // Security check -$socid = GETPOST('socid', 'int'); +$socid = GETPOSTINT('socid'); if ($user->socid) { $action = ''; $socid = $user->socid; diff --git a/htdocs/comm/recap-client.php b/htdocs/comm/recap-client.php index b1f003f9e11..0c9a7454620 100644 --- a/htdocs/comm/recap-client.php +++ b/htdocs/comm/recap-client.php @@ -29,12 +29,12 @@ require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; // Load translation files required by the page $langs->load("companies"); -if (isModEnabled('facture')) { +if (isModEnabled('invoice')) { $langs->load("bills"); } // Security check -$socid = GETPOST("socid", 'int'); +$socid = GETPOSTINT("socid"); if ($user->socid > 0) { $action = ''; $id = $user->socid; diff --git a/htdocs/comm/remise.php b/htdocs/comm/remise.php index f1c5f748e62..2a3ee4a4991 100644 --- a/htdocs/comm/remise.php +++ b/htdocs/comm/remise.php @@ -30,9 +30,9 @@ require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php'; // Load translation files required by the page $langs->loadLangs(array('companies', 'orders', 'bills')); -$id = GETPOST("id", 'int'); +$id = GETPOSTINT("id"); -$socid = GETPOST('id', 'int') ? GETPOST('id', 'int') : GETPOST('socid', 'int'); +$socid = GETPOSTINT('id') ? GETPOSTINT('id') : GETPOSTINT('socid'); // Security check if ($user->socid > 0) { $socid = $user->socid; @@ -66,7 +66,7 @@ if ($action == 'setremise') { $object = new Societe($db); $object->fetch($id); - $discount_type = GETPOST('discount_type', 'int'); + $discount_type = GETPOSTINT('discount_type'); if (!empty($discount_type)) { $result = $object->set_remise_supplier(price2num(GETPOST("remise")), GETPOST("note", "alphanohtml"), $user); @@ -79,7 +79,7 @@ if ($action == 'setremise') { header("Location: ".$backtopage); exit; } else { - header("Location: remise.php?id=".GETPOST("id", 'int')); + header("Location: remise.php?id=".GETPOSTINT("id")); exit; } } else { @@ -175,10 +175,10 @@ if ($socid > 0) { // Discount type print '
'.$langs->trans('DiscountType').''; if ($isCustomer) { - print ' '; + print ' '; } if ($isSupplier) { - print ' '; + print ' '; } print '
'.$langs->trans('Date').''; print img_picto('', 'action', 'class="pictofixedwidth"'); - print $form->selectDate('', 're', '', '', '', "crea_commande", 1, 1); // Always autofill date with current date + print $form->selectDate('', 're', 0, 0, 0, "crea_commande", 1, 1); // Always autofill date with current date print '
'.$langs->trans('BankAccount').''; print img_picto('', 'bank_account', 'class="pictofixedwidth"').$form->select_comptes($fk_account, 'fk_account', 0, '', 1, '', 0, 'maxwidth200 widthcentpercentminusx', 1); print '
'.$langs->trans('SendingMethod').''; print img_picto('', 'object_dolly', 'class="pictofixedwidth"'); - $form->selectShippingMethod(((GETPOSTISSET('shipping_method_id') && GETPOST('shipping_method_id', 'int') != 0) ? GETPOST('shipping_method_id') : $shipping_method_id), 'shipping_method_id', '', 1, '', 0, 'maxwidth200 widthcentpercentminusx'); + $form->selectShippingMethod(((GETPOSTISSET('shipping_method_id') && GETPOSTINT('shipping_method_id') != 0) ? GETPOST('shipping_method_id') : $shipping_method_id), 'shipping_method_id', '', 1, '', 0, 'maxwidth200 widthcentpercentminusx'); print '
'; $editenable = $usercancreate; print $form->editfieldkey("SendingMethod", 'shippingmethod', '', $object, $editenable); @@ -2734,7 +2751,7 @@ if ($action == 'create' && $usercancreate) { } // Bank Account - if (getDolGlobalString('BANK_ASK_PAYMENT_BANK_DURING_ORDER') && isModEnabled("banque")) { + if (getDolGlobalString('BANK_ASK_PAYMENT_BANK_DURING_ORDER') && isModEnabled("bank")) { print '
'; $editenable = $usercancreate; print $form->editfieldkey("BankAccount", 'bankaccount', '', $object, $editenable); @@ -2766,19 +2783,19 @@ if ($action == 'create' && $usercancreate) { print '
' . $langs->trans('AmountHT') . '' . price($object->total_ht, '', $langs, 0, -1, -1, $conf->currency) . '' . price($object->total_ht, 0, $langs, 0, -1, -1, $conf->currency) . '' . price($object->multicurrency_total_ht, '', $langs, 0, -1, -1, $object->multicurrency_code) . '' . price($object->multicurrency_total_ht, 0, $langs, 0, -1, -1, $object->multicurrency_code) . '
' . $langs->trans('AmountVAT') . '' . price($object->total_tva, '', $langs, 0, -1, -1, $conf->currency) . '' . price($object->total_tva, 0, $langs, 0, -1, -1, $conf->currency) . '' . price($object->multicurrency_total_tva, '', $langs, 0, -1, -1, $object->multicurrency_code) . '' . price($object->multicurrency_total_tva, 0, $langs, 0, -1, -1, $object->multicurrency_code) . '
' . $langs->transcountry("AmountLT1", $mysoc->country_code) . '' . price($object->total_localtax1, '', $langs, 0, -1, -1, $conf->currency) . '' . price($object->total_localtax1, 0, $langs, 0, -1, -1, $conf->currency) . '' . price($object->total_localtax1, '', $langs, 0, -1, -1, $object->multicurrency_code) . '' . price($object->multicurrency_total_localtax1, 0, $langs, 0, -1, -1, $object->multicurrency_code) . '
' . $langs->transcountry("AmountLT2", $mysoc->country_code) . '' . price($object->total_localtax2, '', $langs, 0, -1, -1, $conf->currency) . '' . price($object->total_localtax2, '', $langs, 0, -1, -1, $object->multicurrency_code) . '
' . $langs->transcountry("AmountLT2", $mysoc->country_code) . '' . price($object->total_localtax2, 0, $langs, 0, -1, -1, $conf->currency) . '' . price($object->multicurrency_total_localtax2, 0, $langs, 0, -1, -1, $object->multicurrency_code) . '
'; - print $form->selectDate('', '', '', '', '', '', 1, 1); + print $form->selectDate('', '', 0, 0, 0, '', 1, 1); print '
'; print ''; $addcolumforpicto = ($delallowed || $printer || $morepicto); $colspan = (4 + ($addcolumforpicto ? 1 : 0)); - $colspanmore = 0; + $colspanmore = 0; // @phan-suppress-current-line PhanPluginRedundantAssignment $out .= ''; // Execute hooks - $parameters = array('colspan'=>($colspan + $colspanmore), 'socid'=>(isset($GLOBALS['socid']) ? $GLOBALS['socid'] : ''), 'id'=>(isset($GLOBALS['id']) ? $GLOBALS['id'] : ''), 'modulepart'=>$modulepart); + $parameters = array('colspan' => ($colspan + $colspanmore), 'socid' => (isset($GLOBALS['socid']) ? $GLOBALS['socid'] : ''), 'id' => (isset($GLOBALS['id']) ? $GLOBALS['id'] : ''), 'modulepart' => $modulepart); if (is_object($hookmanager)) { $reshook = $hookmanager->executeHooks('formBuilddocOptions', $parameters, $GLOBALS['object']); $out .= $hookmanager->resPrint; @@ -967,7 +968,7 @@ class FormFile $addcolumforpicto = ($delallowed || $printer || $morepicto); $colspan = (4 + ($addcolumforpicto ? 1 : 0)); $colspanmore = 0; - $parameters = array('colspan'=>($colspan + $colspanmore), 'socid'=>(isset($GLOBALS['socid']) ? $GLOBALS['socid'] : ''), 'id'=>(isset($GLOBALS['id']) ? $GLOBALS['id'] : ''), 'modulepart'=>$modulepart, 'relativepath'=>$relativepath); + $parameters = array('colspan' => ($colspan + $colspanmore), 'socid' => (isset($GLOBALS['socid']) ? $GLOBALS['socid'] : ''), 'id' => (isset($GLOBALS['id']) ? $GLOBALS['id'] : ''), 'modulepart' => $modulepart, 'relativepath' => $relativepath); $res = $hookmanager->executeHooks('formBuilddocLineOptions', $parameters, $file); if (empty($res)) { $out .= $hookmanager->resPrint; // Complete line @@ -1056,7 +1057,7 @@ class FormFile include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; $out = ''; - $this->infofiles = array('nboffiles'=>0, 'extensions'=>array(), 'files'=>array()); + $this->infofiles = array('nboffiles' => 0, 'extensions' => array(), 'files' => array()); $entity = 1; // Without multicompany @@ -1230,7 +1231,7 @@ class FormFile $hookmanager->initHooks(array('formfile')); $parameters = array( 'filearray' => $filearray, - 'modulepart'=> $modulepart, + 'modulepart' => $modulepart, 'param' => $param, 'forcedownload' => $forcedownload, 'relativepath' => $relativepath, // relative filename to module dir @@ -1775,7 +1776,7 @@ class FormFile include_once DOL_DOCUMENT_ROOT.'/mrp/class/mo.class.php'; $object_instance = new Mo($this->db); } else { - $parameters = array('modulepart'=>$modulepart); + $parameters = array('modulepart' => $modulepart); $reshook = $hookmanager->executeHooks('addSectionECMAuto', $parameters); if ($reshook > 0 && is_array($hookmanager->resArray) && count($hookmanager->resArray) > 0) { if (array_key_exists('classpath', $hookmanager->resArray) && !empty($hookmanager->resArray['classpath'])) { @@ -1859,7 +1860,7 @@ class FormFile preg_match('/(.*)\/[^\/]+$/', $relativefile, $reg); $ref = (isset($reg[1]) ? $reg[1] : ''); } else { - $parameters = array('modulepart'=>$modulepart, 'fileinfo'=>$file); + $parameters = array('modulepart' => $modulepart, 'fileinfo' => $file); $reshook = $hookmanager->executeHooks('addSectionECMAuto', $parameters); if ($reshook > 0 && is_array($hookmanager->resArray) && count($hookmanager->resArray) > 0) { if (array_key_exists('ref', $hookmanager->resArray) && !empty($hookmanager->resArray['ref'])) { diff --git a/htdocs/core/class/html.formintervention.class.php b/htdocs/core/class/html.formintervention.class.php index d6f7a8bf795..08587f3fad2 100644 --- a/htdocs/core/class/html.formintervention.class.php +++ b/htdocs/core/class/html.formintervention.class.php @@ -59,7 +59,7 @@ class FormIntervention * @param int $maxlength Maximum length of label * @param int $showempty Show empty line ('1' or string to show for empty line) * @param bool $draftonly Show only drafts intervention - * @return int Nbre of project if OK, <0 if KO + * @return string HTML code for the select list if OK, empty if KO */ public function select_interventions($socid = -1, $selected = 0, $htmlname = 'interventionid', $maxlength = 16, $showempty = 1, $draftonly = false) { diff --git a/htdocs/core/class/html.formmail.class.php b/htdocs/core/class/html.formmail.class.php index 78e5d7e0e9e..7d369ebe4f4 100644 --- a/htdocs/core/class/html.formmail.class.php +++ b/htdocs/core/class/html.formmail.class.php @@ -7,6 +7,7 @@ * Copyright (C) 2018-2022 Frédéric France * Copyright (C) 2022 Charlene Benke * Copyright (C) 2023 Anthony Berton + * Copyright (C) 2024 MDW * * * This program is free software; you can redistribute it and/or modify @@ -137,17 +138,17 @@ class FormMail extends Form public $witherrorsto; /** - * @var int 0=No attaches files, 1=Show attached files, 2=Can add new attached files + * @var int|string 0=No attaches files, 1=Show attached files, 2=Can add new attached files, 'text'=Show attached files and the text */ public $withfile; /** - * @var int 1=Add a button "Fill with layout" + * @var int 1=Add a button "Fill with layout" */ public $withlayout; /** - * @var int 1=Add a button "Fill with AI generation" + * @var string 'text' or 'html' to add a button "Fill with AI generation" */ public $withaiprompt; @@ -178,6 +179,9 @@ class FormMail extends Form public $substit = array(); public $substit_lines = array(); + /** + * @var array{models:string,langmodels?:string,fileinit?:string[],returnurl:string} + */ public $param = array(); public $withtouser = array(); @@ -350,7 +354,7 @@ class FormMail extends Form if (!empty($_SESSION["listofmimes".$keytoavoidconflict])) { $listofmimes = explode(';', $_SESSION["listofmimes".$keytoavoidconflict]); } - return array('paths'=>$listofpaths, 'names'=>$listofnames, 'mimes'=>$listofmimes); + return array('paths' => $listofpaths, 'names' => $listofnames, 'mimes' => $listofmimes); } // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps @@ -407,8 +411,8 @@ class FormMail extends Form $parameters = array( 'addfileaction' => $addfileaction, - 'removefileaction'=> $removefileaction, - 'trackid'=> $this->trackid + 'removefileaction' => $removefileaction, + 'trackid' => $this->trackid ); $reshook = $hookmanager->executeHooks('getFormMail', $parameters, $this); @@ -521,7 +525,7 @@ class FormMail extends Form // Zone to select email template if (count($modelmail_array) > 0) { - $model_mail_selected_id = GETPOSTISSET('modelmailselected') ? GETPOST('modelmailselected', 'int') : ($arraydefaultmessage->id > 0 ? $arraydefaultmessage->id : 0); + $model_mail_selected_id = GETPOSTISSET('modelmailselected') ? GETPOSTINT('modelmailselected') : ($arraydefaultmessage->id > 0 ? $arraydefaultmessage->id : 0); // If list of template is filled $out .= '
'."\n"; @@ -599,7 +603,7 @@ class FormMail extends Form && !preg_match('/user_aliases/', $this->fromtype) && !preg_match('/global_aliases/', $this->fromtype) && !preg_match('/senderprofile/', $this->fromtype) - ) { + ) { // Use this->fromname and this->frommail or error if not defined $out .= $this->fromname; if ($this->frommail) { @@ -646,7 +650,7 @@ class FormMail extends Form if ($this->frommail) { $s .= ' <' . getDolGlobalString('MAIN_MAIL_EMAIL_FROM').'>'; } - array('label' => $s, 'data-html' => $s); + $liste['main_from'] = array('label' => $s, 'data-html' => $s); } } @@ -910,7 +914,6 @@ class FormMail extends Form } // Complete substitution array with the url to make online payment - $paymenturl = ''; $validpaymentmethod = array(); if (empty($this->substit['__REF__'])) { $paymenturl = ''; @@ -1051,7 +1054,7 @@ class FormMail extends Form $out .= $this->getModelEmailTemplate(); } if ($this->withaiprompt && isModEnabled('ai')) { - $out .= $this->getSectionForAIPrompt(); + $out .= $this->getSectionForAIPrompt($this->withaiprompt); } $out .= ''; $out .= ''; @@ -1187,7 +1190,7 @@ class FormMail extends Form $tmparray[$key]['label'] = $label; $tmparray[$key]['label'] = str_replace(array('<', '>'), array('(', ')'), $tmparray[$key]['label']); // multiselect array convert html entities into options tags, even if we don't want this, so we encode them a second time - $tmparray[$key]['label'] = dol_htmlentities($tmparray[$key]['label'], ENT_QUOTES|ENT_SUBSTITUTE, 'UTF-8', true); + $tmparray[$key]['label'] = dol_htmlentities($tmparray[$key]['label'], ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8', true); $tmparray[$key]['labelhtml'] = $label; $tmparray[$key]['labelhtml'] = str_replace(array('<', '<', '>', '>'), array('__LTCHAR__', '__LTCHAR__', '__GTCHAR__', '__GTCHAR__'), $tmparray[$key]['labelhtml']); @@ -1240,7 +1243,7 @@ class FormMail extends Form $tmparray[$key]['label'] = $label; $tmparray[$key]['label'] = str_replace(array('<', '>'), array('(', ')'), $tmparray[$key]['label']); // multiselect array convert html entities into options tags, even if we don't want this, so we encode them a second time - $tmparray[$key]['label'] = dol_htmlentities($tmparray[$key]['label'], ENT_QUOTES|ENT_SUBSTITUTE, 'UTF-8', true); + $tmparray[$key]['label'] = dol_htmlentities($tmparray[$key]['label'], ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8', true); $tmparray[$key]['labelhtml'] = $label; $tmparray[$key]['labelhtml'] = str_replace(array('<', '<', '>', '>'), array('__LTCHAR__', '__LTCHAR__', '__GTCHAR__', '__GTCHAR__'), $tmparray[$key]['labelhtml']); @@ -1289,7 +1292,7 @@ class FormMail extends Form $tmparray[$key]['label'] = $label; $tmparray[$key]['label'] = str_replace(array('<', '>'), array('(', ')'), $tmparray[$key]['label']); // multiselect array convert html entities into options tags, even if we don't want this, so we encode them a second time - $tmparray[$key]['label'] = dol_htmlentities($tmparray[$key]['label'], ENT_QUOTES|ENT_SUBSTITUTE, 'UTF-8', true); + $tmparray[$key]['label'] = dol_htmlentities($tmparray[$key]['label'], ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8', true); $tmparray[$key]['labelhtml'] = $label; $tmparray[$key]['labelhtml'] = str_replace(array('<', '<', '>', '>'), array('__LTCHAR__', '__LTCHAR__', '__GTCHAR__', '__GTCHAR__'), $tmparray[$key]['labelhtml']); @@ -1399,7 +1402,7 @@ class FormMail extends Form } /** - * get Html For Topic of message + * Return Html section for the Topic of message * * @param array $arraydefaultmessage Array with message template content * @param string $helpforsubstitution Help string for substitution @@ -1437,11 +1440,13 @@ class FormMail extends Form } /** - * Return Html code for AI instruction of message + * Return Html code for AI instruction of message and autofill result * - * @return string Text for instructions + * @param string $format Format for output ('', 'html', ...) + * @param string $htmlContent HTML name of WYSIWIG field + * @return string HTML code to ask AI instruction and autofill result */ - public function getSectionForAIPrompt() + public function getSectionForAIPrompt($format = '', $htmlContent = 'message') { global $langs; @@ -1453,9 +1458,11 @@ class FormMail extends Form $out .= '
\n"; - $out .= "'; -} -print '
'; - -// Filter (you can use param &show_search_component_params_hidden=1 for debug) -print '
'; -print $form->searchComponent(array($object->element => $object->fields), $search_component_params, array(), $search_component_params_hidden); -print '
'; - -// YAxis (add measures into array) -$count = 0; -//var_dump($arrayofmesures); -print '
'; -print '
'; -$simplearrayofmesures = array(); -foreach ($arrayofmesures as $key => $val) { - $simplearrayofmesures[$key] = $arrayofmesures[$key]['label']; -} -print $form->multiselectarray('search_measures', $simplearrayofmesures, $search_measures, 0, 0, 'minwidth300', 1, 0, '', '', $langs->trans("Measures")); // Fill the array $arrayofmeasures with possible fields -print '
'; - -// XAxis -$count = 0; -print '
'; -print '
'; -//var_dump($arrayofxaxis); -print $formother->selectXAxisField($object, $search_xaxis, $arrayofxaxis, $langs->trans("XAxis"), 'minwidth300 maxwidth400'); // Fill the array $arrayofxaxis with possible fields -print '
'; - -// Group by -$count = 0; -print '
'; -print '
'; -print $formother->selectGroupByField($object, $search_groupby, $arrayofgroupby, 'minwidth250 maxwidth300', $langs->trans("GroupBy")); // Fill the array $arrayofgroupby with possible fields -print '
'; - - -if ($mode == 'grid') { - // YAxis - print '
'; - foreach ($object->fields as $key => $val) { - if (empty($val['measure']) && (!isset($val['enabled']) || dol_eval($val['enabled'], 1, 1, '1'))) { - if (in_array($key, array('id', 'rowid', 'entity', 'last_main_doc', 'extraparams'))) { - continue; - } - if (preg_match('/^fk_/', $key)) { - continue; - } - if (in_array($val['type'], array('html', 'text'))) { - continue; - } - if (in_array($val['type'], array('timestamp', 'date', 'datetime'))) { - $arrayofyaxis['t.'.$key.'-year'] = array( - 'label' => $langs->trans($val['label']).' ('.$YYYY.')', - 'position' => $val['position'], - 'table' => $object->table_element - ); - $arrayofyaxis['t.'.$key.'-month'] = array( - 'label' => $langs->trans($val['label']).' ('.$YYYY.'-'.$MM.')', - 'position' => $val['position'], - 'table' => $object->table_element - ); - $arrayofyaxis['t.'.$key.'-day'] = array( - 'label' => $langs->trans($val['label']).' ('.$YYYY.'-'.$MM.'-'.$DD.')', - 'position' => $val['position'], - 'table' => $object->table_element - ); - } else { - $arrayofyaxis['t.'.$key] = array( - 'label' => $val['label'], - 'position' => (int) $val['position'], - 'table' => $object->table_element - ); - } - } + foreach ($newarrayoftype as $tmpkey => $tmpval) { + $newarrayoftype[$tmpkey]['label'] = img_picto('', $tmpval['picto'], 'class="pictofixedwidth"').$langs->trans($tmpval['label']); } - // Add measure from extrafields - if ($object->isextrafieldmanaged) { - foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) { - if (!empty($extrafields->attributes[$object->table_element]['totalizable'][$key]) && (!isset($extrafields->attributes[$object->table_element]['enabled'][$key]) || dol_eval($extrafields->attributes[$object->table_element]['enabled'][$key], 1, 1, '1'))) { - $arrayofyaxis['te.'.$key] = array( - 'label' => $extrafields->attributes[$object->table_element]['label'][$key], - 'position' => (int) $extrafields->attributes[$object->table_element]['pos'][$key], - 'table' => $object->table_element - ); - } - } + + print '
'; + + // Select object + print '
'; + print '
'.$langs->trans("StatisticsOn").'
'; + print $form->selectarray('objecttype', $newarrayoftype, $objecttype, 0, 0, 0, '', 1, 0, 0, '', 'minwidth200', 1, '', 0, 1); + if (empty($conf->use_javascript_ajax)) { + print ''; + } else { + print ' + '; } - $arrayofyaxis = dol_sort_array($arrayofyaxis, 'position'); - $arrayofyaxislabel = array(); - foreach ($arrayofyaxis as $key => $val) { - $arrayofyaxislabel[$key] = $val['label']; + print '
'; + + // Filter (you can use param &show_search_component_params_hidden=1 for debug) + if (!empty($object)) { + print '
'; + print $form->searchComponent(array($object->element => $object->fields), $search_component_params, array(), $search_component_params_hidden); + print '
'; } - print '
'.$langs->trans("YAxis").'
'; - print $form->multiselectarray('search_yaxis', $arrayofyaxislabel, $search_yaxis, 0, 0, 'minwidth100', 1); + + // YAxis (add measures into array) + $count = 0; + //var_dump($arrayofmesures); + print '
'; + print '
'; + $simplearrayofmesures = array(); + foreach ($arrayofmesures as $key => $val) { + $simplearrayofmesures[$key] = $arrayofmesures[$key]['label']; + } + print $form->multiselectarray('search_measures', $simplearrayofmesures, $search_measures, 0, 0, 'minwidth300', 1, 0, '', '', $langs->trans("Measures")); // Fill the array $arrayofmeasures with possible fields print '
'; -} -if ($mode == 'graph') { - // -} + // XAxis + $count = 0; + print '
'; + print '
'; + //var_dump($arrayofxaxis); + print $formother->selectXAxisField($object, $search_xaxis, $arrayofxaxis, $langs->trans("XAxis"), 'minwidth300 maxwidth400'); // Fill the array $arrayofxaxis with possible fields + print '
'; -print '
'; -print ''; -print '
'; -print '
'; -print ''; + // Group by + $count = 0; + print '
'; + print '
'; + print $formother->selectGroupByField($object, $search_groupby, $arrayofgroupby, 'minwidth250 maxwidth300', $langs->trans("GroupBy")); // Fill the array $arrayofgroupby with possible fields + print '
'; + + + if ($mode == 'grid') { + // YAxis + print '
'; + foreach ($object->fields as $key => $val) { + if (empty($val['measure']) && (!isset($val['enabled']) || dol_eval($val['enabled'], 1, 1, '1'))) { + if (in_array($key, array('id', 'rowid', 'entity', 'last_main_doc', 'extraparams'))) { + continue; + } + if (preg_match('/^fk_/', $key)) { + continue; + } + if (in_array($val['type'], array('html', 'text'))) { + continue; + } + if (in_array($val['type'], array('timestamp', 'date', 'datetime'))) { + $arrayofyaxis['t.'.$key.'-year'] = array( + 'label' => $langs->trans($val['label']).' ('.$YYYY.')', + 'position' => $val['position'], + 'table' => $object->table_element + ); + $arrayofyaxis['t.'.$key.'-month'] = array( + 'label' => $langs->trans($val['label']).' ('.$YYYY.'-'.$MM.')', + 'position' => $val['position'], + 'table' => $object->table_element + ); + $arrayofyaxis['t.'.$key.'-day'] = array( + 'label' => $langs->trans($val['label']).' ('.$YYYY.'-'.$MM.'-'.$DD.')', + 'position' => $val['position'], + 'table' => $object->table_element + ); + } else { + $arrayofyaxis['t.'.$key] = array( + 'label' => $val['label'], + 'position' => (int) $val['position'], + 'table' => $object->table_element + ); + } + } + } + // Add measure from extrafields + if ($object->isextrafieldmanaged) { + foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) { + if (!empty($extrafields->attributes[$object->table_element]['totalizable'][$key]) && (!isset($extrafields->attributes[$object->table_element]['enabled'][$key]) || dol_eval($extrafields->attributes[$object->table_element]['enabled'][$key], 1, 1, '1'))) { + $arrayofyaxis['te.'.$key] = array( + 'label' => $extrafields->attributes[$object->table_element]['label'][$key], + 'position' => (int) $extrafields->attributes[$object->table_element]['pos'][$key], + 'table' => $object->table_element + ); + } + } + } + $arrayofyaxis = dol_sort_array($arrayofyaxis, 'position'); + $arrayofyaxislabel = array(); + foreach ($arrayofyaxis as $key => $val) { + $arrayofyaxislabel[$key] = $val['label']; + } + print '
'.$langs->trans("YAxis").'
'; + print $form->multiselectarray('search_yaxis', $arrayofyaxislabel, $search_yaxis, 0, 0, 'minwidth100', 1); + print '
'; + } + + if ($mode == 'graph') { + // + } + + print '
'; + print ''; + print '
'; + print '
'; + print ''; +} // Generate the SQL request $sql = ''; @@ -684,18 +730,20 @@ if (!empty($search_measures) && !empty($search_xaxis)) { $sql .= $val." as x_".$key.", "; } } - foreach ($search_groupby as $key => $val) { - if (preg_match('/\-year$/', $val)) { - $tmpval = preg_replace('/\-year$/', '', $val); - $sql .= "DATE_FORMAT(".$tmpval.", '%Y') as g_".$key.', '; - } elseif (preg_match('/\-month$/', $val)) { - $tmpval = preg_replace('/\-month$/', '', $val); - $sql .= "DATE_FORMAT(".$tmpval.", '%Y-%m') as g_".$key.', '; - } elseif (preg_match('/\-day$/', $val)) { - $tmpval = preg_replace('/\-day$/', '', $val); - $sql .= "DATE_FORMAT(".$tmpval.", '%Y-%m-%d') as g_".$key.', '; - } else { - $sql .= $val." as g_".$key.", "; + if (!empty($search_groupby)) { + foreach ($search_groupby as $key => $val) { + if (preg_match('/\-year$/', $val)) { + $tmpval = preg_replace('/\-year$/', '', $val); + $sql .= "DATE_FORMAT(".$tmpval.", '%Y') as g_".$key.', '; + } elseif (preg_match('/\-month$/', $val)) { + $tmpval = preg_replace('/\-month$/', '', $val); + $sql .= "DATE_FORMAT(".$tmpval.", '%Y-%m') as g_".$key.', '; + } elseif (preg_match('/\-day$/', $val)) { + $tmpval = preg_replace('/\-day$/', '', $val); + $sql .= "DATE_FORMAT(".$tmpval.", '%Y-%m-%d') as g_".$key.', '; + } else { + $sql .= $val." as g_".$key.", "; + } } } foreach ($search_measures as $key => $val) { @@ -840,18 +888,20 @@ if (!empty($search_measures) && !empty($search_xaxis)) { $sql .= $val.", "; } } - foreach ($search_groupby as $key => $val) { - if (preg_match('/\-year$/', $val)) { - $tmpval = preg_replace('/\-year$/', '', $val); - $sql .= "DATE_FORMAT(".$tmpval.", '%Y'), "; - } elseif (preg_match('/\-month$/', $val)) { - $tmpval = preg_replace('/\-month$/', '', $val); - $sql .= "DATE_FORMAT(".$tmpval.", '%Y-%m'), "; - } elseif (preg_match('/\-day$/', $val)) { - $tmpval = preg_replace('/\-day$/', '', $val); - $sql .= "DATE_FORMAT(".$tmpval.", '%Y-%m-%d'), "; - } else { - $sql .= $val.', '; + if (!empty($search_groupby)) { + foreach ($search_groupby as $key => $val) { + if (preg_match('/\-year$/', $val)) { + $tmpval = preg_replace('/\-year$/', '', $val); + $sql .= "DATE_FORMAT(".$tmpval.", '%Y'), "; + } elseif (preg_match('/\-month$/', $val)) { + $tmpval = preg_replace('/\-month$/', '', $val); + $sql .= "DATE_FORMAT(".$tmpval.", '%Y-%m'), "; + } elseif (preg_match('/\-day$/', $val)) { + $tmpval = preg_replace('/\-day$/', '', $val); + $sql .= "DATE_FORMAT(".$tmpval.", '%Y-%m-%d'), "; + } else { + $sql .= $val.', '; + } } } $sql = preg_replace('/,\s*$/', '', $sql); @@ -870,21 +920,28 @@ if (!empty($search_measures) && !empty($search_xaxis)) { $sql .= $val.', '; } } - foreach ($search_groupby as $key => $val) { - if (preg_match('/\-year$/', $val)) { - $tmpval = preg_replace('/\-year$/', '', $val); - $sql .= "DATE_FORMAT(".$tmpval.", '%Y'), "; - } elseif (preg_match('/\-month$/', $val)) { - $tmpval = preg_replace('/\-month$/', '', $val); - $sql .= "DATE_FORMAT(".$tmpval.", '%Y-%m'), "; - } elseif (preg_match('/\-day$/', $val)) { - $tmpval = preg_replace('/\-day$/', '', $val); - $sql .= "DATE_FORMAT(".$tmpval.", '%Y-%m-%d'), "; - } else { - $sql .= $val.', '; + if (!empty($search_groupby)) { + foreach ($search_groupby as $key => $val) { + if (preg_match('/\-year$/', $val)) { + $tmpval = preg_replace('/\-year$/', '', $val); + $sql .= "DATE_FORMAT(".$tmpval.", '%Y'), "; + } elseif (preg_match('/\-month$/', $val)) { + $tmpval = preg_replace('/\-month$/', '', $val); + $sql .= "DATE_FORMAT(".$tmpval.", '%Y-%m'), "; + } elseif (preg_match('/\-day$/', $val)) { + $tmpval = preg_replace('/\-day$/', '', $val); + $sql .= "DATE_FORMAT(".$tmpval.", '%Y-%m-%d'), "; + } else { + $sql .= $val.', '; + } } } $sql = preg_replace('/,\s*$/', '', $sql); + + // Can overwrite the SQL with a custom SQL string (when used as an include) + if (!empty($customsql)) { + $sql = $customsql; + } } //print $sql; @@ -933,7 +990,7 @@ if ($sql) { } $labeltouse = (($xlabel || $xlabel == '0') ? dol_trunc($xlabel, 20, 'middle') : ($xlabel === '' ? $langs->transnoentitiesnoconv("Empty") : $langs->transnoentitiesnoconv("NotDefined"))); - if ($oldlabeltouse && ($labeltouse != $oldlabeltouse)) { + if ($oldlabeltouse !== '' && ($labeltouse != $oldlabeltouse)) { $xi++; // Increase $xi } //var_dump($labeltouse.' '.$oldlabeltouse.' '.$xi); @@ -1057,6 +1114,7 @@ if ($mode == 'graph') { } $px1->SetLegend($legend); + $px1->setShowLegend($SHOWLEGEND); $px1->SetMinValue($px1->GetFloorMinValue()); $px1->SetMaxValue($px1->GetCeilMaxValue()); $px1->SetWidth($WIDTH); @@ -1071,10 +1129,11 @@ if ($mode == 'graph') { $dir = $conf->user->dir_temp; dol_mkdir($dir); - $filenamenb = $dir.'/customreport_'.$object->element.'.png'; - $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=user&file=customreport_'.$object->element.'.png'; + // $customreportkey may be defined when using customreports.php as an include + $filenamekey = $dir.'/customreport_'.$object->element.(empty($customreportkey) ? '' : $customreportkey).'.png'; + $fileurlkey = DOL_URL_ROOT.'/viewimage.php?modulepart=user&file=customreport_'.$object->element.(empty($customreportkey) ? '' : $customreportkey).'.png'; - $px1->draw($filenamenb, $fileurlnb); + $px1->draw($filenamekey, $fileurlkey); $texttoshow = $langs->trans("NoRecordFound"); if (!GETPOSTISSET('search_measures') || !GETPOSTISSET('search_xaxis')) { @@ -1085,7 +1144,7 @@ if ($mode == 'graph') { } } -if ($sql) { +if ($sql && !defined('MAIN_CUSTOM_REPORT_KEEP_GRAPH_ONLY')) { // Show admin info print '
'.info_admin($langs->trans("SQLUsedForExport").':
'.$sql, 0, 0, 1, '', 'TechnicalInformation'); } @@ -1094,471 +1153,9 @@ print '
'; if (!defined('USE_CUSTOM_REPORT_AS_INCLUDE')) { print dol_get_fiche_end(); -} - -// End of page -llxFooter(); - -$db->close(); - - - - -/** - * Fill arrayofmesures for an object - * - * @param mixed $object Any object - * @param string $tablealias Alias of table - * @param string $labelofobject Label of object - * @param array $arrayofmesures Array of measures already filled - * @param int $level Level - * @param int $count Count - * @param string $tablepath Path of all tables ('t' or 't,contract' or 't,contract,societe'...) - * @return array Array of measures - */ -function fillArrayOfMeasures($object, $tablealias, $labelofobject, &$arrayofmesures, $level = 0, &$count = 0, &$tablepath = '') -{ - global $langs, $extrafields, $db; - - if ($level > 10) { // Protection against infinite loop - return $arrayofmesures; - } - - if (empty($tablepath)) { - $tablepath = $object->table_element.'='.$tablealias; - } else { - $tablepath .= ','.$object->table_element.'='.$tablealias; - } - - if ($level == 0) { - // Add the count of record only for the main/first level object. Parents are necessarily unique for each record. - $arrayofmesures[$tablealias.'.count'] = array( - 'label' => img_picto('', $object->picto, 'class="pictofixedwidth"').$labelofobject.': '.$langs->trans("Number"), - 'labelnohtml' => $labelofobject.': '.$langs->trans("Number"), - 'position' => 0, - 'table' => $object->table_element, - 'tablefromt' => $tablepath - ); - } - - // Note: here $tablealias can be 't' or 't__fk_contract' or 't_fk_contract_fk_soc' - - // Add main fields of object - foreach ($object->fields as $key => $val) { - if (!empty($val['isameasure']) && (!isset($val['enabled']) || dol_eval($val['enabled'], 1, 1, '1'))) { - $position = (empty($val['position']) ? 0 : intval($val['position'])); - $arrayofmesures[$tablealias.'.'.$key.'-sum'] = array( - 'label' => img_picto('', $object->picto, 'class="pictofixedwidth"').$labelofobject.': '.$langs->trans($val['label']).' ('.$langs->trans("Sum").')', - 'labelnohtml' => $labelofobject.': '.$langs->trans($val['label']), - 'position' => ($position + ($count * 100000)).'.1', - 'table' => $object->table_element, - 'tablefromt' => $tablepath - ); - $arrayofmesures[$tablealias.'.'.$key.'-average'] = array( - 'label' => img_picto('', $object->picto, 'class="pictofixedwidth"').$labelofobject.': '.$langs->trans($val['label']).' ('.$langs->trans("Average").')', - 'labelnohtml' => $labelofobject.': '.$langs->trans($val['label']), - 'position' => ($position + ($count * 100000)).'.2', - 'table' => $object->table_element, - 'tablefromt' => $tablepath - ); - $arrayofmesures[$tablealias.'.'.$key.'-min'] = array( - 'label' => img_picto('', $object->picto, 'class="pictofixedwidth"').$labelofobject.': '.$langs->trans($val['label']).' ('.$langs->trans("Minimum").')', - 'labelnohtml' => $labelofobject.': '.$langs->trans($val['label']), - 'position' => ($position + ($count * 100000)).'.3', - 'table' => $object->table_element, - 'tablefromt' => $tablepath - ); - $arrayofmesures[$tablealias.'.'.$key.'-max'] = array( - 'label' => img_picto('', $object->picto, 'class="pictofixedwidth"').$labelofobject.': '.$langs->trans($val['label']).' ('.$langs->trans("Maximum").')', - 'labelnohtml' => $labelofobject.': '.$langs->trans($val['label']), - 'position' => ($position + ($count * 100000)).'.4', - 'table' => $object->table_element, - 'tablefromt' => $tablepath - ); - } - } - // Add extrafields to Measures - if (!empty($object->isextrafieldmanaged) && isset($extrafields->attributes[$object->table_element]['label'])) { - foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) { - if (!empty($extrafields->attributes[$object->table_element]['totalizable'][$key]) && (!isset($extrafields->attributes[$object->table_element]['enabled'][$key]) || dol_eval($extrafields->attributes[$object->table_element]['enabled'][$key], 1, 1, '1'))) { - $position = (!empty($val['position']) ? $val['position'] : 0); - $arrayofmesures[preg_replace('/^t/', 'te', $tablealias).'.'.$key.'-sum'] = array( - 'label' => img_picto('', $object->picto, 'class="pictofixedwidth"').$labelofobject.': '.$langs->trans($extrafields->attributes[$object->table_element]['label'][$key]).' ('.$langs->trans("Sum").')', - 'labelnohtml' => $labelofobject.': '.$langs->trans($val), - 'position' => ($position+($count * 100000)).'.1', - 'table' => $object->table_element, - 'tablefromt' => $tablepath - ); - $arrayofmesures[preg_replace('/^t/', 'te', $tablealias).'.'.$key.'-average'] = array( - 'label' => img_picto('', $object->picto, 'class="pictofixedwidth"').$labelofobject.': '.$langs->trans($extrafields->attributes[$object->table_element]['label'][$key]).' ('.$langs->trans("Average").')', - 'labelnohtml' => $labelofobject.': '.$langs->trans($val), - 'position' => ($position+($count * 100000)).'.2', - 'table' => $object->table_element, - 'tablefromt' => $tablepath - ); - $arrayofmesures[preg_replace('/^t/', 'te', $tablealias).'.'.$key.'-min'] = array( - 'label' => img_picto('', $object->picto, 'class="pictofixedwidth"').$labelofobject.': '.$langs->trans($extrafields->attributes[$object->table_element]['label'][$key]).' ('.$langs->trans("Minimum").')', - 'labelnohtml' => $labelofobject.': '.$langs->trans($val), - 'position' => ($position+($count * 100000)).'.3', - 'table' => $object->table_element, - 'tablefromt' => $tablepath - ); - $arrayofmesures[preg_replace('/^t/', 'te', $tablealias).'.'.$key.'-max'] = array( - 'label' => img_picto('', $object->picto, 'class="pictofixedwidth"').$labelofobject.': '.$langs->trans($extrafields->attributes[$object->table_element]['label'][$key]).' ('.$langs->trans("Maximum").')', - 'labelnohtml' => $labelofobject.': '.$langs->trans($val), - 'position' => ($position+($count * 100000)).'.4', - 'table' => $object->table_element, - 'tablefromt' => $tablepath - ); - } - } - } - // Add fields for parent objects - foreach ($object->fields as $key => $val) { - if (preg_match('/^[^:]+:[^:]+:/', $val['type'])) { - $tmptype = explode(':', $val['type'], 4); - if ($tmptype[0] == 'integer' && !empty($tmptype[1]) && !empty($tmptype[2])) { - $newobject = $tmptype[1]; - dol_include_once($tmptype[2]); - if (class_exists($newobject)) { - $tmpobject = new $newobject($db); - //var_dump($key); var_dump($tmpobject->element); var_dump($val['label']); var_dump($tmptype); var_dump('t-'.$key); - $count++; - $arrayofmesures = fillArrayOfMeasures($tmpobject, $tablealias.'__'.$key, $langs->trans($val['label']), $arrayofmesures, $level + 1, $count, $tablepath); - } else { - print 'For property '.$object->element.'->'.$key.', type="'.$val['type'].'": Failed to find class '.$newobject." in file ".$tmptype[2]."
\n"; - } - } - } - } - - return $arrayofmesures; -} - - -/** - * Fill arrayofmesures for an object - * - * @param mixed $object Any object - * @param string $tablealias Alias of table ('t' for example) - * @param string $labelofobject Label of object - * @param array $arrayofxaxis Array of xaxis already filled - * @param int $level Level - * @param int $count Count - * @param string $tablepath Path of all tables ('t' or 't,contract' or 't,contract,societe'...) - * @return array Array of xaxis - */ -function fillArrayOfXAxis($object, $tablealias, $labelofobject, &$arrayofxaxis, $level = 0, &$count = 0, &$tablepath = '') -{ - global $langs, $extrafields, $db; - - if ($level >= 3) { // Limit scan on 2 levels max - return $arrayofxaxis; - } - - if (empty($tablepath)) { - $tablepath = $object->table_element.'='.$tablealias; - } else { - $tablepath .= ','.$object->table_element.'='.$tablealias; - } - - $YYYY = substr($langs->trans("Year"), 0, 1).substr($langs->trans("Year"), 0, 1).substr($langs->trans("Year"), 0, 1).substr($langs->trans("Year"), 0, 1); - $MM = substr($langs->trans("Month"), 0, 1).substr($langs->trans("Month"), 0, 1); - $DD = substr($langs->trans("Day"), 0, 1).substr($langs->trans("Day"), 0, 1); - $HH = substr($langs->trans("Hour"), 0, 1).substr($langs->trans("Hour"), 0, 1); - $MI = substr($langs->trans("Minute"), 0, 1).substr($langs->trans("Minute"), 0, 1); - $SS = substr($langs->trans("Second"), 0, 1).substr($langs->trans("Second"), 0, 1); - - /*if ($level > 0) { - var_dump($object->element.' '.$object->isextrafieldmanaged); - }*/ - - // Note: here $tablealias can be 't' or 't__fk_contract' or 't_fk_contract_fk_soc' - - // Add main fields of object - foreach ($object->fields as $key => $val) { - if (empty($val['measure'])) { - if (in_array($key, array( - 'id', 'ref_ext', 'rowid', 'entity', 'last_main_doc', 'logo', 'logo_squarred', 'extraparams', - 'parent', 'photo', 'socialnetworks', 'webservices_url', 'webservices_key'))) { - continue; - } - if (isset($val['enabled']) && !dol_eval($val['enabled'], 1, 1, '1')) { - continue; - } - if (isset($val['visible']) && !dol_eval($val['visible'], 1, 1, '1')) { - continue; - } - if (preg_match('/^fk_/', $key) && !preg_match('/^fk_statu/', $key)) { - continue; - } - if (preg_match('/^pass/', $key)) { - continue; - } - if (in_array($val['type'], array('html', 'text'))) { - continue; - } - if (in_array($val['type'], array('timestamp', 'date', 'datetime'))) { - $position = (empty($val['position']) ? 0 : intval($val['position'])); - $arrayofxaxis[$tablealias.'.'.$key.'-year'] = array( - 'label' => img_picto('', $object->picto, 'class="pictofixedwidth"').' '.$labelofobject.': '.$langs->trans($val['label']).' ('.$YYYY.')', - 'labelnohtml' => $labelofobject.': '.$langs->trans($val['label']), - 'position' => ($position + ($count * 100000)).'.1', - 'table' => $object->table_element, - 'tablefromt' => $tablepath - ); - $arrayofxaxis[$tablealias.'.'.$key.'-month'] = array( - 'label' => img_picto('', $object->picto, 'class="pictofixedwidth"').' '.$labelofobject.': '.$langs->trans($val['label']).' ('.$YYYY.'-'.$MM.')', - 'labelnohtml' => $labelofobject.': '.$langs->trans($val['label']), - 'position' => ($position + ($count * 100000)).'.2', - 'table' => $object->table_element, - 'tablefromt' => $tablepath - ); - $arrayofxaxis[$tablealias.'.'.$key.'-day'] = array( - 'label' => img_picto('', $object->picto, 'class="pictofixedwidth"').' '.$labelofobject.': '.$langs->trans($val['label']).' ('.$YYYY.'-'.$MM.'-'.$DD.')', - 'labelnohtml' => $labelofobject.': '.$langs->trans($val['label']), - 'position' => ($position + ($count * 100000)).'.3', - 'table' => $object->table_element, - 'tablefromt' => $tablepath - ); - } else { - $position = (empty($val['position']) ? 0 : intval($val['position'])); - $arrayofxaxis[$tablealias.'.'.$key] = array( - 'label' => img_picto('', $object->picto, 'class="pictofixedwidth"').' '.$labelofobject.': '.$langs->trans($val['label']), - 'labelnohtml' => $labelofobject.': '.$langs->trans($val['label']), - 'position' => ($position + ($count * 100000)), - 'table' => $object->table_element, - 'tablefromt' => $tablepath - ); - } - } - } - - // Add extrafields to X-Axis - if (!empty($object->isextrafieldmanaged) && isset($extrafields->attributes[$object->table_element]['label'])) { - foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) { - if ($extrafields->attributes[$object->table_element]['type'][$key] == 'separate') { - continue; - } - if (!empty($extrafields->attributes[$object->table_element]['totalizable'][$key])) { - continue; - } - - if (in_array($extrafields->attributes[$object->table_element]['type'][$key], array('timestamp', 'date', 'datetime'))) { - $position = (empty($extrafields->attributes[$object->table_element]['pos'][$key]) ? 0 : intval($extrafields->attributes[$object->table_element]['pos'][$key])); - $arrayofxaxis[preg_replace('/^t/', 'te', $tablealias).'.'.$key.'-year'] = array( - 'label' => img_picto('', $object->picto, 'class="pictofixedwidth"').' '.$labelofobject.': '.$langs->trans($val).' ('.$YYYY.')', - 'labelnohtml' => $labelofobject.': '.$langs->trans($val), - 'position' => ($position + ($count * 100000)).'.1', - 'table' => $object->table_element, - 'tablefromt' => $tablepath - ); - $arrayofxaxis[preg_replace('/^t/', 'te', $tablealias).'.'.$key.'-month'] = array( - 'label' => img_picto('', $object->picto, 'class="pictofixedwidth"').' '.$labelofobject.': '.$langs->trans($val).' ('.$YYYY.'-'.$MM.')', - 'labelnohtml' => $labelofobject.': '.$langs->trans($val), - 'position' => ($position + ($count * 100000)).'.2', - 'table' => $object->table_element, - 'tablefromt' => $tablepath - ); - $arrayofxaxis[preg_replace('/^t/', 'te', $tablealias).'.'.$key.'-day'] = array( - 'label' => img_picto('', $object->picto, 'class="pictofixedwidth"').' '.$labelofobject.': '.$langs->trans($val).' ('.$YYYY.'-'.$MM.'-'.$DD.')', - 'labelnohtml' => $labelofobject.': '.$langs->trans($val), - 'position' => ($position + ($count * 100000)).'.3', - 'table' => $object->table_element, - 'tablefromt' => $tablepath - ); - } else { - $arrayofxaxis[preg_replace('/^t/', 'te', $tablealias).'.'.$key] = array( - 'label' => img_picto('', $object->picto, 'class="pictofixedwidth"').' '.$labelofobject.': '.$langs->trans($val), - 'labelnohtml' => $labelofobject.': '.$langs->trans($val), - 'position' => 1000 + (int) $extrafields->attributes[$object->table_element]['pos'][$key] + ($count * 100000), - 'table' => $object->table_element, - 'tablefromt' => $tablepath - ); - } - } - } - - // Add fields for parent objects - foreach ($object->fields as $key => $val) { - if (preg_match('/^[^:]+:[^:]+:/', $val['type'])) { - $tmptype = explode(':', $val['type'], 4); - if ($tmptype[0] == 'integer' && $tmptype[1] && $tmptype[2]) { - $newobject = $tmptype[1]; - dol_include_once($tmptype[2]); - if (class_exists($newobject)) { - $tmpobject = new $newobject($db); - //var_dump($key); var_dump($tmpobject->element); var_dump($val['label']); var_dump($tmptype); var_dump('t-'.$key); - $count++; - $arrayofxaxis = fillArrayOfXAxis($tmpobject, $tablealias.'__'.$key, $langs->trans($val['label']), $arrayofxaxis, $level + 1, $count, $tablepath); - } else { - print 'For property '.$object->element.'->'.$key.', type="'.$val['type'].'": Failed to find class '.$newobject." in file ".$tmptype[2]."
\n"; - } - } - } - } - - return $arrayofxaxis; -} - - -/** - * Fill arrayofgrupby for an object - * - * @param mixed $object Any object - * @param string $tablealias Alias of table - * @param string $labelofobject Label of object - * @param array $arrayofgroupby Array of groupby already filled - * @param int $level Level - * @param int $count Count - * @param string $tablepath Path of all tables ('t' or 't,contract' or 't,contract,societe'...) - * @return array Array of groupby - */ -function fillArrayOfGroupBy($object, $tablealias, $labelofobject, &$arrayofgroupby, $level = 0, &$count = 0, &$tablepath = '') -{ - global $langs, $extrafields, $db; - - if ($level >= 3) { - return $arrayofgroupby; - } - - if (empty($tablepath)) { - $tablepath = $object->table_element.'='.$tablealias; - } else { - $tablepath .= ','.$object->table_element.'='.$tablealias; - } - - $YYYY = substr($langs->trans("Year"), 0, 1).substr($langs->trans("Year"), 0, 1).substr($langs->trans("Year"), 0, 1).substr($langs->trans("Year"), 0, 1); - $MM = substr($langs->trans("Month"), 0, 1).substr($langs->trans("Month"), 0, 1); - $DD = substr($langs->trans("Day"), 0, 1).substr($langs->trans("Day"), 0, 1); - $HH = substr($langs->trans("Hour"), 0, 1).substr($langs->trans("Hour"), 0, 1); - $MI = substr($langs->trans("Minute"), 0, 1).substr($langs->trans("Minute"), 0, 1); - $SS = substr($langs->trans("Second"), 0, 1).substr($langs->trans("Second"), 0, 1); - - // Note: here $tablealias can be 't' or 't__fk_contract' or 't_fk_contract_fk_soc' - - // Add main fields of object - foreach ($object->fields as $key => $val) { - if (empty($val['isameasure'])) { - if (in_array($key, array( - 'id', 'ref_ext', 'rowid', 'entity', 'last_main_doc', 'logo', 'logo_squarred', 'extraparams', - 'parent', 'photo', 'socialnetworks', 'webservices_url', 'webservices_key'))) { - continue; - } - if (isset($val['enabled']) && !dol_eval($val['enabled'], 1, 1, '1')) { - continue; - } - if (isset($val['visible']) && !dol_eval($val['visible'], 1, 1, '1')) { - continue; - } - if (preg_match('/^fk_/', $key) && !preg_match('/^fk_statu/', $key)) { - continue; - } - if (preg_match('/^pass/', $key)) { - continue; - } - if (in_array($val['type'], array('html', 'text'))) { - continue; - } - if (in_array($val['type'], array('timestamp', 'date', 'datetime'))) { - $position = (empty($val['position']) ? 0 : intval($val['position'])); - $arrayofgroupby[$tablealias.'.'.$key.'-year'] = array( - 'label' => img_picto('', $object->picto, 'class="pictofixedwidth"').' '.$labelofobject.': '.$langs->trans($val['label']).' ('.$YYYY.')', - 'labelnohtml' => $labelofobject.': '.$langs->trans($val['label']), - 'position' => ($position + ($count * 100000)).'.1', - 'table' => $object->table_element, - 'tablefromt' => $tablepath - ); - $arrayofgroupby[$tablealias.'.'.$key.'-month'] = array( - 'label' => img_picto('', $object->picto, 'class="pictofixedwidth"').' '.$labelofobject.': '.$langs->trans($val['label']).' ('.$YYYY.'-'.$MM.')', - 'labelnohtml' => $labelofobject.': '.$langs->trans($val['label']), - 'position' => ($position + ($count * 100000)).'.2', - 'table' => $object->table_element, - 'tablefromt' => $tablepath - ); - $arrayofgroupby[$tablealias.'.'.$key.'-day'] = array( - 'label' => img_picto('', $object->picto, 'class="pictofixedwidth"').' '.$labelofobject.': '.$langs->trans($val['label']).' ('.$YYYY.'-'.$MM.'-'.$DD.')', - 'labelnohtml' => $labelofobject.': '.$langs->trans($val['label']), - 'position' => ($position + ($count * 100000)).'.3', - 'table' => $object->table_element, - 'tablefromt' => $tablepath - ); - } else { - $position = (empty($val['position']) ? 0 : intval($val['position'])); - $arrayofgroupby[$tablealias.'.'.$key] = array( - 'label' => img_picto('', $object->picto, 'class="pictofixedwidth"').' '.$labelofobject.': '.$langs->trans($val['label']), - 'labelnohtml' => $labelofobject.': '.$langs->trans($val['label']), - 'position' => ($position + ($count * 100000)), - 'table' => $object->table_element, - 'tablefromt' => $tablepath - ); - } - } - } - - // Add extrafields to Group by - if (!empty($object->isextrafieldmanaged) && isset($extrafields->attributes[$object->table_element]['label'])) { - foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) { - if ($extrafields->attributes[$object->table_element]['type'][$key] == 'separate') { - continue; - } - if (!empty($extrafields->attributes[$object->table_element]['totalizable'][$key])) { - continue; - } - - if (in_array($extrafields->attributes[$object->table_element]['type'][$key], array('timestamp', 'date', 'datetime'))) { - $position = (empty($extrafields->attributes[$object->table_element]['pos'][$key]) ? 0 : intval($extrafields->attributes[$object->table_element]['pos'][$key])); - $arrayofgroupby[preg_replace('/^t/', 'te', $tablealias).'.'.$key.'-year'] = array( - 'label' => img_picto('', $object->picto, 'class="pictofixedwidth"').' '.$labelofobject.': '.$langs->trans($val).' ('.$YYYY.')', - 'labelnohtml' => $labelofobject.': '.$langs->trans($val), - 'position' => ($position + ($count * 100000)).'.1', - 'table' => $object->table_element, - 'tablefromt' => $tablepath - ); - $arrayofgroupby[preg_replace('/^t/', 'te', $tablealias).'.'.$key.'-month'] = array( - 'label' => img_picto('', $object->picto, 'class="pictofixedwidth"').' '.$labelofobject.': '.$langs->trans($val).' ('.$YYYY.'-'.$MM.')', - 'labelnohtml' => $labelofobject.': '.$langs->trans($val), - 'position' => ($position + ($count * 100000)).'.2', - 'table' => $object->table_element, - 'tablefromt' => $tablepath - ); - $arrayofgroupby[preg_replace('/^t/', 'te', $tablealias).'.'.$key.'-day'] = array( - 'label' => img_picto('', $object->picto, 'class="pictofixedwidth"').' '.$labelofobject.': '.$langs->trans($val).' ('.$YYYY.'-'.$MM.'-'.$DD.')', - 'labelnohtml' => $labelofobject.': '.$langs->trans($val), - 'position' => ($position + ($count * 100000)).'.3', - 'table' => $object->table_element, - 'tablefromt' => $tablepath - ); - } else { - $arrayofgroupby[preg_replace('/^t/', 'te', $tablealias).'.'.$key] = array( - 'label' => img_picto('', $object->picto, 'class="pictofixedwidth"').' '.$labelofobject.': '.$langs->trans($val), - 'labelnohtml' => $labelofobject.': '.$langs->trans($val), - 'position' => 1000 + (int) $extrafields->attributes[$object->table_element]['pos'][$key] + ($count * 100000), - 'table' => $object->table_element, - 'tablefromt' => $tablepath - ); - } - } - } - - // Add fields for parent objects - foreach ($object->fields as $key => $val) { - if (preg_match('/^[^:]+:[^:]+:/', $val['type'])) { - $tmptype = explode(':', $val['type'], 4); - if ($tmptype[0] == 'integer' && $tmptype[1] && $tmptype[2]) { - $newobject = $tmptype[1]; - dol_include_once($tmptype[2]); - if (class_exists($newobject)) { - $tmpobject = new $newobject($db); - //var_dump($key); var_dump($tmpobject->element); var_dump($val['label']); var_dump($tmptype); var_dump('t-'.$key); - $count++; - $arrayofgroupby = fillArrayOfGroupBy($tmpobject, $tablealias.'__'.$key, $langs->trans($val['label']), $arrayofgroupby, $level + 1, $count, $tablepath); - } else { - print 'For property '.$object->element.'->'.$key.', type="'.$val['type'].'": Failed to find class '.$newobject." in file ".$tmptype[2]."
\n"; - } - } - } - } - - return $arrayofgroupby; + + llxFooter(); + // End of page + + $db->close(); } diff --git a/htdocs/core/datepicker.php b/htdocs/core/datepicker.php index ce0b017cb25..4c7c9a0ccc6 100644 --- a/htdocs/core/datepicker.php +++ b/htdocs/core/datepicker.php @@ -126,7 +126,7 @@ if (isset($_GET["m"]) && isset($_GET["y"])) { // If parameters provided, we show calendar if ($qualified) { //print $_GET["cm"].",".$_GET["sd"].",".$_GET["m"].",".$_GET["y"];exit; - displayBox(GETPOST("sd", 'alpha'), GETPOST("m", 'int'), GETPOST("y", 'int')); + displayBox(GETPOSTINT("sd"), GETPOSTINT("m"), GETPOSTINT("y")); } else { dol_print_error(null, 'ErrorBadParameters'); } diff --git a/htdocs/core/db/DoliDB.class.php b/htdocs/core/db/DoliDB.class.php index 3b1184c7f85..73470391fce 100644 --- a/htdocs/core/db/DoliDB.class.php +++ b/htdocs/core/db/DoliDB.class.php @@ -188,7 +188,7 @@ abstract class DoliDB implements Database dol_syslog("BEGIN Transaction".($textinlog ? ' '.$textinlog : ''), LOG_DEBUG); dol_syslog('', 0, 1); } - return $ret; + return (int) $ret; } else { $this->transaction_opened++; dol_syslog('', 0, 1); @@ -381,10 +381,11 @@ abstract class DoliDB implements Database { $sql .= ' LIMIT 1'; - $res = $this->query($sql); - if ($res) { - $obj = $this->fetch_object($res); + $resql = $this->query($sql); + if ($resql) { + $obj = $this->fetch_object($resql); if ($obj) { + $this->free($resql); return $obj; } else { return 0; @@ -395,24 +396,28 @@ abstract class DoliDB implements Database } /** - * Return all results from query as an array of objects - * Note : This method executes a given SQL query and retrieves all row of results as an array of objects. It should only be used with SELECT queries - * be careful with this method use it only with some limit of results to avoid performances loss. + * Return all results from query as an array of objects. Using this is a bad practice and is discouraged. + * Note : It should only be used with SELECT queries and with a limit. If you are not able to defined/know what can be the limit, it + * just means this function is not what you need. Do not use it. * - * @param string $sql The sql query string - * @return bool|array Result - * @deprecated + * @param string $sql The sql query string. Must end with "... LIMIT x" + * @return bool|array Result */ public function getRows($sql) { - $res = $this->query($sql); - if ($res) { + if (! preg_match('/LIMIT \d+$/', $sql)) { + return false; + } + + $resql = $this->query($sql); + if ($resql) { $results = array(); - if ($this->num_rows($res) > 0) { - while ($obj = $this->fetch_object($res)) { + if ($this->num_rows($resql) > 0) { + while ($obj = $this->fetch_object($resql)) { $results[] = $obj; } } + $this->free($resql); return $results; } diff --git a/htdocs/core/db/mysqli.class.php b/htdocs/core/db/mysqli.class.php index f5e791e35fd..ff63113e47b 100644 --- a/htdocs/core/db/mysqli.class.php +++ b/htdocs/core/db/mysqli.class.php @@ -5,6 +5,7 @@ * Copyright (C) 2006 Andre Cianfarani * Copyright (C) 2005-2012 Regis Houssin * Copyright (C) 2015 Raphaël Doursenaud + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -124,11 +125,15 @@ class DoliDBMysqli extends DoliDB dol_syslog(get_class($this)."::DoliDBMysqli You should set the \$dolibarr_main_db_character_set and \$dolibarr_main_db_collation for the PHP to the one of the database ".$this->db->character_set_name(), LOG_WARNING); $this->db->set_charset($clientmustbe); // This set charset, but with a bad collation } catch (Exception $e) { - print 'Failed to force character set to '.$clientmustbe." according to setup to match the one of the server database.
\n"; + print 'Failed to force character_set_client to '.$clientmustbe." (according to setup) to match the one of the server database.
\n"; print $e->getMessage(); print "
\n"; if ($clientmustbe != 'utf8') { - print 'Edit conf/conf.php file to set a charset "utf8" instead of "'.$clientmustbe.'".'."\n"; + print 'Edit conf/conf.php file to set a charset "utf8"'; + if ($clientmustbe != 'utf8mb4') { + print ' or "utf8mb4"'; + } + print ' instead of "'.$clientmustbe.'".'."\n"; } exit; } @@ -232,12 +237,12 @@ class DoliDBMysqli extends DoliDB /** * Connect to server * - * @param string $host Database server host - * @param string $login Login - * @param string $passwd Password - * @param string $name Name of database (not used for mysql, used for pgsql) - * @param integer $port Port of database server - * @return mysqli|null Database access object + * @param string $host Database server host + * @param string $login Login + * @param string $passwd Password + * @param string $name Name of database (not used for mysql, used for pgsql) + * @param integer $port Port of database server + * @return mysqli|mysqliDoli|false Database access object * @see close() */ public function connect($host, $login, $passwd, $name, $port = 0) @@ -337,12 +342,7 @@ class DoliDBMysqli extends DoliDB } try { - if (!$this->database_name) { - // SQL query not needing a database connection (example: CREATE DATABASE) - $ret = $this->db->query($query, $result_mode); - } else { - $ret = $this->db->query($query, $result_mode); - } + $ret = $this->db->query($query, $result_mode); } catch (Exception $e) { dol_syslog(get_class($this)."::query Exception in query instead of returning an error: ".$e->getMessage(), LOG_ERR); $ret = false; @@ -358,7 +358,7 @@ class DoliDBMysqli extends DoliDB if (getDolGlobalInt('SYSLOG_LEVEL') < LOG_DEBUG) { dol_syslog(get_class($this)."::query SQL Error query: ".$query, LOG_ERR); // Log of request was not yet done previously } - dol_syslog(get_class($this)."::query SQL Error message: ".$this->lasterrno." ".$this->lasterror, LOG_ERR); + dol_syslog(get_class($this)."::query SQL Error message: ".$this->lasterrno." ".$this->lasterror.self::getCallerInfoString(), LOG_ERR); //var_dump(debug_print_backtrace()); } $this->lastquery = $query; @@ -368,6 +368,24 @@ class DoliDBMysqli extends DoliDB return $ret; } + /** + * Get caller info + * + * @return string + */ + final protected static function getCallerInfoString() + { + $backtrace = debug_backtrace(); + $msg = ""; + if (count($backtrace) >= 1) { + $trace = $backtrace[1]; + if (isset($trace['file'], $trace['line'])) { + $msg = " From {$trace['file']}:{$trace['line']}."; + } + } + return $msg; + } + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** * Returns the current line (as an object) for the resultset cursor @@ -1273,11 +1291,13 @@ class mysqliDoli extends mysqli if (PHP_VERSION_ID >= 80100) { parent::__construct(); } else { + // @phan-suppress-next-line PhanDeprecatedFunctionInternal parent::init(); } if (strpos($host, 'ssl://') === 0) { $host = substr($host, 6); parent::options(MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, false); + // Suppress false positive @phan-suppress-next-line PhanTypeMismatchArgumentInternalProbablyReal parent::ssl_set(null, null, "", null, null); $flags = MYSQLI_CLIENT_SSL; } diff --git a/htdocs/core/db/pgsql.class.php b/htdocs/core/db/pgsql.class.php index 1e218d9cd1f..ecb9b0f0df9 100644 --- a/htdocs/core/db/pgsql.class.php +++ b/htdocs/core/db/pgsql.class.php @@ -724,7 +724,7 @@ class DoliDBPgsql extends DoliDB */ public function escape($stringtoencode) { - return pg_escape_string($stringtoencode); + return pg_escape_string($this->db, $stringtoencode); } /** @@ -794,7 +794,7 @@ class DoliDBPgsql extends DoliDB '42P07' => 'DB_ERROR_TABLE_OR_KEY_ALREADY_EXISTS', '42703' => 'DB_ERROR_NOSUCHFIELD', 1060 => 'DB_ERROR_COLUMN_ALREADY_EXISTS', - 42701=> 'DB_ERROR_COLUMN_ALREADY_EXISTS', + 42701 => 'DB_ERROR_COLUMN_ALREADY_EXISTS', '42710' => 'DB_ERROR_KEY_NAME_ALREADY_EXISTS', '23505' => 'DB_ERROR_RECORD_ALREADY_EXISTS', '42704' => 'DB_ERROR_NO_INDEX_TO_DROP', // May also be Type xxx does not exists @@ -1069,6 +1069,10 @@ class DoliDBPgsql extends DoliDB // phpcs:enable // FIXME: $fulltext_keys parameter is unused + $sqlfields = array(); + $sqlk = array(); + $sqluq = array(); + // cles recherchees dans le tableau des descriptions (fields) : type,value,attribute,null,default,extra // ex. : $fields['rowid'] = array('type'=>'int','value'=>'11','null'=>'not null','extra'=> 'auto_increment'); $sql = "create table ".$table."("; @@ -1332,7 +1336,7 @@ class DoliDBPgsql extends DoliDB /** * Return list of available charset that can be used to store data in database * - * @return array List of Charset + * @return array|null List of Charset */ public function getListOfCharacterSet() { @@ -1371,7 +1375,7 @@ class DoliDBPgsql extends DoliDB /** * Return list of available collation that can be used for database * - * @return array Liste of Collation + * @return array|null Liste of Collation */ public function getListOfCollation() { diff --git a/htdocs/core/db/sqlite3.class.php b/htdocs/core/db/sqlite3.class.php index 0faa455d23c..060e7318b65 100644 --- a/htdocs/core/db/sqlite3.class.php +++ b/htdocs/core/db/sqlite3.class.php @@ -5,6 +5,7 @@ * Copyright (C) 2006 Andre Cianfarani * Copyright (C) 2005-2009 Regis Houssin * Copyright (C) 2015 Raphaël Doursenaud + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -259,7 +260,7 @@ class DoliDBSqlite3 extends DoliDB } //if (preg_match('/rowid\s+.*\s+PRIMARY\s+KEY,/i', $line)) { - //preg_replace('/(rowid\s+.*\s+PRIMARY\s+KEY\s*,)/i', '/* \\1 */', $line); + //preg_replace('/(rowid\s+.*\s+PRIMARY\s+KEY\s*,)/i', '/* \\1 */', $line); //} } @@ -971,6 +972,10 @@ class DoliDBSqlite3 extends DoliDB // phpcs:enable // FIXME: $fulltext_keys parameter is unused + $sqlfields = array(); + $sqlk = array(); + $sqluq = array(); + // cles recherchees dans le tableau des descriptions (fields) : type,value,attribute,null,default,extra // ex. : $fields['rowid'] = array('type'=>'int','value'=>'11','null'=>'not null','extra'=> 'auto_increment'); $sql = "create table ".$table."("; @@ -1415,7 +1420,7 @@ class DoliDBSqlite3 extends DoliDB $num -= floor(($month * 4 + 23) / 10); } $temp = floor(($y / 100 + 1) * 3 / 4); - return $num + floor($y / 4) - $temp; + return (int) ($num + floor($y / 4) - $temp); } // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps @@ -1429,7 +1434,7 @@ class DoliDBSqlite3 extends DoliDB private static function calc_weekday($daynr, $sunday_first_day_of_week) { // phpcs:enable - $ret = floor(($daynr + 5 + ($sunday_first_day_of_week ? 1 : 0)) % 7); + $ret = (int) floor(($daynr + 5 + ($sunday_first_day_of_week ? 1 : 0)) % 7); return $ret; } @@ -1437,7 +1442,7 @@ class DoliDBSqlite3 extends DoliDB /** * calc_days_in_year * - * @param string $year Year + * @param int $year Year * @return int Nb of days in year */ private static function calc_days_in_year($year) @@ -1450,12 +1455,12 @@ class DoliDBSqlite3 extends DoliDB /** * calc_week * - * @param string $year Year - * @param string $month Month - * @param string $day Day - * @param string $week_behaviour Week behaviour - * @param string $calc_year ??? - * @return string ??? + * @param int $year Year + * @param int $month Month + * @param int $day Day + * @param int $week_behaviour Week behaviour, bit masks: WEEK_MONDAY_FIRST, WEEK_YEAR, WEEK_FIRST_WEEKDEAY + * @param int $calc_year ??? Year where the week started + * @return int ??? Week number in year */ private static function calc_week($year, $month, $day, $week_behaviour, &$calc_year) { @@ -1492,6 +1497,6 @@ class DoliDBSqlite3 extends DoliDB return 1; } } - return floor($days / 7 + 1); + return (int) floor($days / 7 + 1); } } diff --git a/htdocs/core/extrafieldsinexport.inc.php b/htdocs/core/extrafieldsinexport.inc.php index 7f79181f808..ddf6fa464ca 100644 --- a/htdocs/core/extrafieldsinexport.inc.php +++ b/htdocs/core/extrafieldsinexport.inc.php @@ -1,4 +1,5 @@ * * == BEGIN LICENSE == * @@ -265,7 +266,7 @@ function CreateFolder($resourceType, $currentFolder) switch ($sErrorMsg) { case '': - $sErrorNumber = '0'; + $sErrorNumber = '0'; // @phan-suppress-current-line PhanPluginRedundantAssignment break; case 'Invalid argument': case 'No such file or directory': @@ -550,8 +551,8 @@ function GetParentFolder($folderPath) /** * CreateServerFolder * - * @param string $folderPath Folder - * @param string $lastFolder Folder + * @param string $folderPath Folder - Folder to create (recursively) + * @param ?string $lastFolder Internal - Child Folder we are creating, prevents recursion * @return string ''=success, error message otherwise */ function CreateServerFolder($folderPath, $lastFolder = null) @@ -584,6 +585,7 @@ function CreateServerFolder($folderPath, $lastFolder = null) return "Can't create $folderPath directory"; } + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition $sErrorMsg = CreateServerFolder($sParent, $folderPath); if ($sErrorMsg != '') { return $sErrorMsg; diff --git a/htdocs/core/get_info.php b/htdocs/core/get_info.php index 5f468902d50..2b5fc8f69d4 100644 --- a/htdocs/core/get_info.php +++ b/htdocs/core/get_info.php @@ -88,6 +88,8 @@ if (getDolGlobalInt('MAIN_FEATURES_LEVEL')) { } $logouttext = ''; +$logouthtmltext = ''; +$toprightmenu = ''; if (!getDolGlobalString('MAIN_OPTIMIZEFORTEXTBROWSER')) { //$logouthtmltext=$appli.'
'; if ($_SESSION["dol_authmode"] != 'forceuser' && $_SESSION["dol_authmode"] != 'http') { @@ -142,11 +144,12 @@ if (isModEnabled('modulebuilder')) { //$text.= img_picto(":".$langs->trans("ModuleBuilder"), 'printer_top.png', 'class="printer"'); $text .= ''; $text .= ''; + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition $toprightmenu .= $form->textwithtooltip('', $langs->trans("ModuleBuilder"), 2, 1, $text, 'login_block_elem', 2); } // Logout link -if (GETPOST('withlogout', 'int')) { +if (GETPOSTINT('withlogout')) { $toprightmenu .= $form->textwithtooltip('', $logouthtmltext, 2, 1, $logouttext, 'login_block_elem', 2); } diff --git a/htdocs/core/get_menudiv.php b/htdocs/core/get_menudiv.php index f7ed538c274..3f2c921ba5f 100644 --- a/htdocs/core/get_menudiv.php +++ b/htdocs/core/get_menudiv.php @@ -82,10 +82,10 @@ $left = ($langs->trans("DIRECTION") == 'rtl' ? 'right' : 'left'); */ // Important: Following code is to avoid page request by browser and PHP CPU at each Dolibarr page access. -if (empty($dolibarr_nocache) && GETPOST('cache', 'int')) { - header('Cache-Control: max-age='.GETPOST('cache', 'int').', public, must-revalidate'); +if (empty($dolibarr_nocache) && GETPOSTINT('cache')) { + header('Cache-Control: max-age='.GETPOSTINT('cache').', public, must-revalidate'); // For a .php, we must set an Expires to avoid to have it forced to an expired value by the web server - header('Expires: '.gmdate('D, d M Y H:i:s', dol_now('gmt') + GETPOST('cache', 'int')).' GMT'); + header('Expires: '.gmdate('D, d M Y H:i:s', dol_now('gmt') + GETPOSTINT('cache')).' GMT'); // HTTP/1.0 header('Pragma: token=public'); } else { diff --git a/htdocs/core/js/lib_head.js.php b/htdocs/core/js/lib_head.js.php index a2f98a6ba4b..0bbe8499662 100644 --- a/htdocs/core/js/lib_head.js.php +++ b/htdocs/core/js/lib_head.js.php @@ -194,8 +194,7 @@ var select2arrayoflanguage = { noResults: function () { return "transnoentitiesnoconv("Select2NotFound")); ?>"; }, inputTooShort: function (input) { var n = input.minimum; - /*console.log(input); - console.log(input.minimum);*/ + /*console.log(input); console.log(input.minimum);*/ if (n > 1) return "transnoentitiesnoconv("Select2Enter")); ?> " + n + " transnoentitiesnoconv("Select2MoreCharacters")); ?>"; else return "transnoentitiesnoconv("Select2Enter")); ?> " + n + " transnoentitiesnoconv("Select2MoreCharacter")); ?>" }, @@ -274,7 +273,7 @@ function formatDate(date,format) var result=""; - var year=date.getYear()+""; if (year.length < 4) { year=""+(year-0+1900); } + var year=date.getYear()+""; if (year.length < 4) { year=""+(year-0+2000); } /* #28334 */ var month=date.getMonth()+1; var day=date.getDate(); var hour=date.getHours(); @@ -344,7 +343,7 @@ function getDateFromFormat(val,format) if (val == '') return 0; var now=new Date(); - var year=now.getYear(); if (year.length < 4) { year=""+(year-0+1900); } + var year=now.getYear(); if (year.length < 4) { year=""+(year-0+2000); } /* #28334 */ var month=now.getMonth()+1; var day=now.getDate(); var hour=now.getHours(); @@ -369,7 +368,7 @@ function getDateFromFormat(val,format) // alert('substr='+substr); if (substr == "yyyy") year=getIntegerInString(val,d,4,4); - if (substr == "yy") year=""+(getIntegerInString(val,d,2,2)-0+1900); + if (substr == "yy") year=""+(getIntegerInString(val,d,2,2)-0+2000); /* #28334 */ if (substr == "MM" ||substr == "M") { month=getIntegerInString(val,d,1,2); diff --git a/htdocs/core/lib/admin.lib.php b/htdocs/core/lib/admin.lib.php index efa664e26fc..fde50455f74 100644 --- a/htdocs/core/lib/admin.lib.php +++ b/htdocs/core/lib/admin.lib.php @@ -4,6 +4,7 @@ * Copyright (C) 2012 J. Fernando Lagrange * Copyright (C) 2015 Raphaël Doursenaud * Copyright (C) 2023 Eric Seigne + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -543,7 +544,7 @@ function run_sql($sqlfile, $silent = 1, $entity = 0, $usesavepoint = 1, $handler if ($error == 0) { $ok = 1; } else { - $ok = 0; + $ok = 0; // @phan-suppress-current-line PhanPluginRedundantAssignment } return $ok; @@ -1115,7 +1116,7 @@ function activateModule($value, $withdeps = 1, $noconfverification = 0) return $ret; } - $ret = array('nbmodules'=>0, 'errors'=>array(), 'nbperms'=>0); + $ret = array('nbmodules' => 0, 'errors' => array(), 'nbperms' => 0); $modName = $value; $modFile = $modName.".class.php"; @@ -1725,7 +1726,7 @@ function form_constantes($tableau, $strictw3c = 0, $helptext = '', $text = 'Valu $obj = $db->fetch_object($result); // Take first result of select if (empty($obj)) { // If not yet into table - $obj = (object) array('rowid'=>'', 'name'=>$const, 'value'=>'', 'type'=>$type, 'note'=>''); + $obj = (object) array('rowid' => '', 'name' => $const, 'value' => '', 'type' => $type, 'note' => ''); } if (empty($strictw3c)) { @@ -1769,7 +1770,7 @@ function form_constantes($tableau, $strictw3c = 0, $helptext = '', $text = 'Valu print 'mymailmanlist
'; print 'mymailmanlist1,mymailmanlist2
'; print 'TYPE:Type1:mymailmanlist1,TYPE:Type2:mymailmanlist2
'; - if (isModEnabled('categorie')) { + if (isModEnabled('category')) { print 'CATEG:Categ1:mymailmanlist1,CATEG:Categ2:mymailmanlist2
'; } print '
'; diff --git a/htdocs/core/lib/agenda.lib.php b/htdocs/core/lib/agenda.lib.php index 3c5df955ae3..6e2772e1e59 100644 --- a/htdocs/core/lib/agenda.lib.php +++ b/htdocs/core/lib/agenda.lib.php @@ -2,7 +2,7 @@ /* Copyright (C) 2008-2014 Laurent Destailleur * Copyright (C) 2005-2009 Regis Houssin * Copyright (C) 2011 Juanjo Menent - * Copyright (C) 2022-2024 Frédéric France + * Copyright (C) 2022-2024 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -46,7 +46,7 @@ * @param int $usergroupid Id of group to filter on users * @param string $excludetype A type to exclude ('systemauto', 'system', '') * @param int $resourceid Preselected value of resource for filter on resource - * @param array $search_categ_cus Tag id + * @param int $search_categ_cus Tag id * @return void */ function print_actions_filter( @@ -131,7 +131,7 @@ function print_actions_filter( print ''; } - if (isModEnabled('projet') && $user->hasRight('projet', 'lire')) { + if (isModEnabled('project') && $user->hasRight('projet', 'lire')) { require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php'; $formproject = new FormProjets($db); @@ -141,7 +141,7 @@ function print_actions_filter( print ''; } - if (isModEnabled('categorie') && $user->hasRight('categorie', 'lire')) { + if (isModEnabled('category') && $user->hasRight('categorie', 'lire')) { require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php'; $formother = new FormOther($db); diff --git a/htdocs/core/lib/ajax.lib.php b/htdocs/core/lib/ajax.lib.php index 136382d2d77..81fe78a073c 100644 --- a/htdocs/core/lib/ajax.lib.php +++ b/htdocs/core/lib/ajax.lib.php @@ -526,7 +526,9 @@ function ajax_combobox($htmlname, $events = array(), $minLengthToAutocomplete = if ($(data.element).attr("data-html") != undefined) { /* If property html set, we decode html entities and use this. */ /* Note that HTML content must have been sanitized from js with dol_escape_htmltag(xxx, 0, 0, \'\', 0, 1) when building the select option. */ - return htmlEntityDecodeJs($(data.element).attr("data-html")); + if (typeof htmlEntityDecodeJs === "function") { + return htmlEntityDecodeJs($(data.element).attr("data-html")); + } } return data.text; }, @@ -626,19 +628,19 @@ function ajax_event($htmlname, $events) /** * On/off button for constant * - * @param string $code Name of constant - * @param array $input Array of complementary actions to do if success ("disabled"|"enabled'|'set'|'del') => CSS element to switch, 'alert' => message to show, ... Example: array('disabled'=>array(0=>'cssid')) - * @param int $entity Entity. Current entity is used if null. - * @param int $revertonoff 1=Revert on/off - * @param int $strict Use only "disabled" with delConstant and "enabled" with setConstant - * @param int $forcereload Force to reload page if we click/change value (this is supported only when there is no 'alert' option in input) - * @param int $marginleftonlyshort 1 = Add a short left margin on picto, 2 = Add a larger left margin on picto, 0 = No left margin. - * @param int $forcenoajax 1 = Force to use a ahref link instead of ajax code. - * @param int $setzeroinsteadofdel 1 = Set constantto '0' instead of deleting it - * @param string $suffix Suffix to use on the name of the switch_on picto. Example: '', '_red' - * @param string $mode Add parameter &mode= to the href link (Used for href link) - * @param string $morecss More CSS - * @return string + * @param string $code Name of constant + * @param array $input Array of complementary actions to do if success ("disabled"|"enabled'|'set'|'del') => CSS element to switch, 'alert' => message to show, ... Example: array('disabled'=>array(0=>'cssid')) + * @param int|null $entity Entity. Current entity is used if null. + * @param int $revertonoff 1=Revert on/off + * @param int $strict Use only "disabled" with delConstant and "enabled" with setConstant + * @param int $forcereload Force to reload page if we click/change value (this is supported only when there is no 'alert' option in input) + * @param int $marginleftonlyshort 1 = Add a short left margin on picto, 2 = Add a larger left margin on picto, 0 = No left margin. + * @param int $forcenoajax 1 = Force to use a ahref link instead of ajax code. + * @param int $setzeroinsteadofdel 1 = Set constantto '0' instead of deleting it + * @param string $suffix Suffix to use on the name of the switch_on picto. Example: '', '_red' + * @param string $mode Add parameter &mode= to the href link (Used for href link) + * @param string $morecss More CSS + * @return string */ function ajax_constantonoff($code, $input = array(), $entity = null, $revertonoff = 0, $strict = 0, $forcereload = 0, $marginleftonlyshort = 2, $forcenoajax = 0, $setzeroinsteadofdel = 0, $suffix = '', $mode = '', $morecss = 'inline-block') { diff --git a/htdocs/core/lib/bank.lib.php b/htdocs/core/lib/bank.lib.php index 75788627cec..5c22a696d6d 100644 --- a/htdocs/core/lib/bank.lib.php +++ b/htdocs/core/lib/bank.lib.php @@ -5,6 +5,7 @@ * Copyright (C) 2016 Juanjo Menent * Copyright (C) 2019 Nicolas ZABOURI * Copyright (C) 2021 Ferran Marcet + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -188,7 +189,7 @@ function bank_admin_prepare_head($object) * Prepare array with list of tabs * * @param Object $object Object related to tabs - * @param Object $num val to account statement + * @param string $num val to account statement * @return array Array of tabs to shoc */ function account_statement_prepare_head($object, $num) @@ -228,8 +229,8 @@ function account_statement_prepare_head($object, $num) /** * Prepare array with list of tabs * - * @param Object $object Object related to tabs - * @return array Array of tabs to shoc + * @param CommonObject $object Object related to tabs + * @return array Array of tabs to shoc */ function various_payment_prepare_head($object) { @@ -275,8 +276,8 @@ function various_payment_prepare_head($object) /** * Check SWIFT information for a bank account * - * @param Account $account A bank account (used to get BIC/SWIFT) - * @param string $swift Swift value (used to get BIC/SWIFT, param $account non used if provided) + * @param ?Account $account A bank account (used to get BIC/SWIFT) + * @param ?string $swift Swift value (used to get BIC/SWIFT, param $account non used if provided) * @return boolean True if information are valid, false otherwise */ function checkSwiftForAccount(Account $account = null, $swift = null) @@ -296,8 +297,8 @@ function checkSwiftForAccount(Account $account = null, $swift = null) /** * Check IBAN number information for a bank account. * - * @param Account $account A bank account - * @param string $ibantocheck Bank account number (used to get BAN, $account not used if provided) + * @param ?Account $account A bank account + * @param ?string $ibantocheck Bank account number (used to get BAN, $account not used if provided) * @return boolean True if information are valid, false otherwise */ function checkIbanForAccount(Account $account = null, $ibantocheck = null) diff --git a/htdocs/core/lib/barcode.lib.php b/htdocs/core/lib/barcode.lib.php index 5b00a1eabd1..a236d108771 100644 --- a/htdocs/core/lib/barcode.lib.php +++ b/htdocs/core/lib/barcode.lib.php @@ -1,5 +1,6 @@ + * Copyright (C) 2024 Frédéric France * Copyright (C) 2004-2010 Folke Ashberg: Some lines of code were inspired from work * of Folke Ashberg into PHP-Barcode 0.3pl2, available as GPL * source code at http://www.ashberg.de/bar. @@ -405,17 +406,14 @@ function barcode_encode_genbarcode($code, $encoding) * @param string $mode png,gif,jpg (default='png') * @param int $total_y the total height of the image ( default: scale * 60 ) * @param array $space default: $space[top] = 2 * $scale; $space[bottom]= 2 * $scale; $space[left] = 2 * $scale; $space[right] = 2 * $scale; - * @return string|null + * @return string|void */ -function barcode_outimage($text, $bars, $scale = 1, $mode = "png", $total_y = 0, $space = '') +function barcode_outimage($text, $bars, $scale = 1, $mode = "png", $total_y = 0, $space = []) { global $bar_color, $bg_color, $text_color; global $font_loc, $filebarcode; //print "$text, $bars, $scale, $mode, $total_y, $space, $font_loc, $filebarcode
"; - //var_dump($text); - //var_dump($bars); - //var_dump($font_loc); /* set defaults */ if ($scale < 1) { @@ -504,7 +502,7 @@ function barcode_outimage($text, $bars, $scale = 1, $mode = "png", $total_y = 0, header("Content-Type: image/gif; name=\"barcode.gif\""); imagegif($im); } elseif (!empty($filebarcode)) { - // To write into a file onto disk + // To write into a file onto disk imagepng($im, $filebarcode); } else { header("Content-Type: image/png; name=\"barcode.png\""); diff --git a/htdocs/core/lib/company.lib.php b/htdocs/core/lib/company.lib.php index a15b0f17cdb..2a4a830d124 100644 --- a/htdocs/core/lib/company.lib.php +++ b/htdocs/core/lib/company.lib.php @@ -7,10 +7,11 @@ * Copyright (C) 2013-2014 Juanjo Menent * Copyright (C) 2013 Christophe Battarel * Copyright (C) 2013-2018 Alexandre Spangaro - * Copyright (C) 2015-2021 Frédéric France + * Copyright (C) 2015-2024 Frédéric France * Copyright (C) 2015 Raphaël Doursenaud * Copyright (C) 2017 Rui Strecht * Copyright (C) 2018 Ferran Marcet + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -73,7 +74,7 @@ function societe_prepare_head(Societe $object) $sql .= " WHERE p.fk_soc = ".((int) $object->id); $sql .= " AND p.entity IN (".getEntity($object->element).")"; // Add where from hooks - $parameters = array('contacttab' => true); + $parameters = array('contacttab' => true); // @phan-suppress-current-line PhanPluginRedundantAssignment $reshook = $hookmanager->executeHooks('printFieldListWhere', $parameters, $object); // Note that $action and $object may have been modified by hook $sql .= $hookmanager->resPrint; $resql = $db->query($sql); @@ -180,7 +181,7 @@ function societe_prepare_head(Societe $object) } // Related items - if ((isModEnabled('commande') || isModEnabled('propal') || isModEnabled('facture') || isModEnabled('ficheinter') || isModEnabled("supplier_proposal") || isModEnabled("supplier_order") || isModEnabled("supplier_invoice")) + if ((isModEnabled('order') || isModEnabled('propal') || isModEnabled('invoice') || isModEnabled('intervention') || isModEnabled("supplier_proposal") || isModEnabled("supplier_order") || isModEnabled("supplier_invoice")) && !getDolGlobalString('THIRDPARTIES_DISABLE_RELATED_OBJECT_TAB')) { $head[$h][0] = DOL_URL_ROOT.'/societe/consumption.php?socid='.$object->id; $head[$h][1] = $langs->trans("Referers"); @@ -197,9 +198,6 @@ function societe_prepare_head(Societe $object) $title = $langs->trans("PaymentModes"); if (isModEnabled('stripe')) { - //$langs->load("stripe"); - //$title = $langs->trans("BankAccountsAndGateways"); - $servicestatus = 0; if (getDolGlobalString('STRIPE_LIVE') && !GETPOST('forcesandbox', 'alpha')) { $servicestatus = 1; @@ -232,7 +230,7 @@ function societe_prepare_head(Societe $object) //if (isModEnabled('stripe') && $nbBankAccount > 0) $nbBankAccount = '...'; // No way to know exact number - $head[$h][0] = DOL_URL_ROOT.'/societe/paymentmodes.php?socid='.urlencode($object->id); + $head[$h][0] = DOL_URL_ROOT.'/societe/paymentmodes.php?socid='.urlencode((string) ($object->id)); $head[$h][1] = $title; if ($foundonexternalonlinesystem) { $head[$h][1] .= '...'; @@ -252,7 +250,7 @@ function societe_prepare_head(Societe $object) $site_filter_list[] = 'dolibarr_portal'; } - $head[$h][0] = DOL_URL_ROOT.'/societe/website.php?id='.urlencode($object->id); + $head[$h][0] = DOL_URL_ROOT.'/societe/website.php?id='.urlencode((string) ($object->id)); $head[$h][1] = $langs->trans("WebSiteAccounts"); $nbNote = 0; $sql = "SELECT COUNT(n.rowid) as nb"; @@ -314,6 +312,7 @@ function societe_prepare_head(Societe $object) if ($user->socid == 0) { // Notifications if (isModEnabled('notification')) { + $langs->load('mails'); $nbNotif = 0; // Enable caching of thirdparty count notifications require_once DOL_DOCUMENT_ROOT.'/core/lib/memory.lib.php'; @@ -335,7 +334,7 @@ function societe_prepare_head(Societe $object) dol_setcache($cachekey, $nbNotif, 120); // If setting cache fails, this is not a problem, so we do not test result. } - $head[$h][0] = DOL_URL_ROOT.'/societe/notify/card.php?socid='.urlencode($object->id); + $head[$h][0] = DOL_URL_ROOT.'/societe/notify/card.php?socid='.urlencode((string) ($object->id)); $head[$h][1] = $langs->trans("Notifications"); if ($nbNotif > 0) { $head[$h][1] .= ''.$nbNotif.''; @@ -352,7 +351,7 @@ function societe_prepare_head(Societe $object) if (!empty($object->note_public)) { $nbNote++; } - $head[$h][0] = DOL_URL_ROOT.'/societe/note.php?id='.urlencode($object->id); + $head[$h][0] = DOL_URL_ROOT.'/societe/note.php?id='.urlencode((string) ($object->id)); $head[$h][1] = $langs->trans("Notes"); if ($nbNote > 0) { $head[$h][1] .= ''.$nbNote.''; @@ -389,7 +388,7 @@ function societe_prepare_head(Societe $object) $head[$h][0] = DOL_URL_ROOT.'/societe/agenda.php?socid='.$object->id; $head[$h][1] = $langs->trans("Events"); - if (isModEnabled('agenda')&& ($user->hasRight('agenda', 'myactions', 'read') || $user->hasRight('agenda', 'allactions', 'read'))) { + if (isModEnabled('agenda') && ($user->hasRight('agenda', 'myactions', 'read') || $user->hasRight('agenda', 'allactions', 'read'))) { $nbEvent = 0; // Enable caching of thirdparty count actioncomm require_once DOL_DOCUMENT_ROOT.'/core/lib/memory.lib.php'; @@ -524,10 +523,10 @@ function societe_admin_prepare_head() * @param DoliDB $dbtouse Database handler (using in global way may fail because of conflicts with some autoload features) * @param Translate $outputlangs Langs object for output translation * @param int $entconv 0=Return value without entities and not converted to output charset, 1=Ready for html output - * @param int $searchlabel Label of country to search (warning: searching on label is not reliable) - * @return mixed Integer with country id or String with country code or translated country name or Array('id','code','label') or 'NotDefined' + * @param string $searchlabel Label of country to search (warning: searching on label is not reliable) + * @return int|string|array{id:int,code:string,label:string} Integer with country id or String with country code or translated country name or Array('id','code','label') or 'NotDefined' */ -function getCountry($searchkey, $withcode = '', $dbtouse = 0, $outputlangs = '', $entconv = 1, $searchlabel = '') +function getCountry($searchkey, $withcode = '', $dbtouse = null, $outputlangs = null, $entconv = 1, $searchlabel = '') { global $db, $langs; @@ -536,7 +535,7 @@ function getCountry($searchkey, $withcode = '', $dbtouse = 0, $outputlangs = '', // Check parameters if (empty($searchkey) && empty($searchlabel)) { if ($withcode === 'all') { - return array('id'=>'', 'code'=>'', 'label'=>''); + return array('id' => 0, 'code' => '', 'label' => ''); } else { return ''; } @@ -577,7 +576,7 @@ function getCountry($searchkey, $withcode = '', $dbtouse = 0, $outputlangs = '', } elseif ($withcode == 3) { $result = $obj->rowid; } elseif ($withcode === 'all') { - $result = array('id'=>$obj->rowid, 'code'=>$obj->code, 'label'=>$label); + $result = array('id' => $obj->rowid, 'code' => $obj->code, 'label' => $label); } else { $result = $label; } @@ -596,7 +595,7 @@ function getCountry($searchkey, $withcode = '', $dbtouse = 0, $outputlangs = '', * Return state translated from an id. Return value is always utf8 encoded and without entities. * * @param int $id id of state (province/departement) - * @param int $withcode '0'=Return label, + * @param string $withcode '0'=Return label, * '1'=Return string code + label, * '2'=Return code, * 'all'=return array('id'=>,'code'=>,'label'=>) @@ -607,7 +606,7 @@ function getCountry($searchkey, $withcode = '', $dbtouse = 0, $outputlangs = '', * @param int $entconv 0=Return value without entities and not converted to output charset, 1=Ready for html output * @return string|array String with state code or state name or Array('id','code','label')/Array('id','code','label','region_code','region') */ -function getState($id, $withcode = '', $dbtouse = 0, $withregion = 0, $outputlangs = '', $entconv = 1) +function getState($id, $withcode = '', $dbtouse = null, $withregion = 0, $outputlangs = null, $entconv = 1) { global $db, $langs; @@ -650,9 +649,9 @@ function getState($id, $withcode = '', $dbtouse = 0, $withregion = 0, $outputlan } } elseif ($withcode === 'all') { if ($withregion == 1) { - return array('id'=>$obj->id, 'code'=>$obj->code, 'label'=>$label, 'region_code'=>$obj->region_code, 'region'=>$obj->region_name); + return array('id' => $obj->id, 'code' => $obj->code, 'label' => $label, 'region_code' => $obj->region_code, 'region' => $obj->region_name); } else { - return array('id'=>$obj->id, 'code'=>$obj->code, 'label'=>$label); + return array('id' => $obj->id, 'code' => $obj->code, 'label' => $label); } } else { if ($withregion == 1) { @@ -679,7 +678,7 @@ function getState($id, $withcode = '', $dbtouse = 0, $withregion = 0, $outputlan * @param Translate $outputlangs Output language * @return string Label translated of currency */ -function currency_name($code_iso, $withcode = '', $outputlangs = null) +function currency_name($code_iso, $withcode = 0, $outputlangs = null) { global $langs, $db; @@ -961,7 +960,105 @@ function show_projects($conf, $langs, $db, $object, $backtopage = '', $nocreatel dol_print_error($db); } - $parameters = array('sql'=>$sql, 'function'=>'show_projects'); + //projects linked to that thirdpart because of a people of that company is linked to a project + if (getDolGlobalString('PROJECT_DISPLAY_LINKED_BY_CONTACT')) { + print "\n"; + print load_fiche_titre($langs->trans("ProjectsLinkedToThisThirdParty"), '', ''); + + + print '
'."\n"; + print '
'; @@ -3461,7 +3506,7 @@ if ($action == 'create') { // Deposit - Down payment if (!getDolGlobalString('INVOICE_DISABLE_DEPOSIT')) { print '
'; - $tmp = ' '; + $tmp = ' '; print ''; */ - $out.= ''; + $out .= ''; if (getDolGlobalInt('MAIN_ADD_ICONPICKER_JS')) { - $out.=''; + $options .= "footer: '
',"; + $options .= "search: 'trans("TypeToFilter")."\" />',"; + $options .= "popover: '
"; + $options .= "
"; + $options .= "
"; + $options .= "
"; + $options .= "
'}}"; + $out .= "$('#".$keyprefix.$key.$keysuffix."').iconpicker(".$options.");"; + $out .= ''; } } elseif ($type == 'text') { if (!preg_match('/search_/', $keyprefix)) { // If keyprefix is search_ or search_options_, we must just use a simple text field @@ -1121,7 +1122,6 @@ class ExtraFields } else { $checked = ' value="1" '; } - $out = ''; } else { $out = $form->selectyesno($keyprefix.$key.$keysuffix, $value, 1, false, 1); @@ -1148,7 +1148,7 @@ class ExtraFields } $out = ' '; } elseif ($type == 'select') { - $out = ''; + $out = ''; // @phan-suppress-current-line PhanPluginRedundantAssignment if ($mode) { $options = array(); foreach ($param['options'] as $okey => $val) { @@ -1203,7 +1203,7 @@ class ExtraFields $out .= ''; } } elseif ($type == 'sellist') { - $out = ''; + $out = ''; // @phan-suppress-current-line PhanPluginRedundantAssignment if (!empty($conf->use_javascript_ajax) && !getDolGlobalString('MAIN_EXTRAFIELDS_DISABLE_SELECT2')) { include_once DOL_DOCUMENT_ROOT.'/core/lib/ajax.lib.php'; $out .= ajax_combobox($keyprefix.$key.$keysuffix, array(), 0); @@ -1311,7 +1311,6 @@ class ExtraFields } else { $labeltoshow = $obj->{$InfoFieldList[1]}; } - $labeltoshow = $labeltoshow; if ($value == $obj->rowid) { if (!$notrans) { @@ -1367,7 +1366,7 @@ class ExtraFields } $out = $form->multiselectarray($keyprefix.$key.$keysuffix, (empty($param['options']) ? null : $param['options']), $value_arr, '', 0, '', 0, '100%'); } elseif ($type == 'radio') { - $out = ''; + $out = ''; // @phan-suppress-current-line PhanPluginRedundantAssignment foreach ($param['options'] as $keyopt => $val) { $out .= 'table_element but we need $object->element if ($element == 'socpeople') { $element = 'contact'; - } elseif ( $element == 'projet' ) { + } elseif ($element == 'projet') { $element = 'project'; } @@ -1649,9 +1648,9 @@ class ExtraFields $unique = $this->attributes[$extrafieldsobjectkey]['unique'][$key]; $required = $this->attributes[$extrafieldsobjectkey]['required'][$key]; $param = $this->attributes[$extrafieldsobjectkey]['param'][$key]; - $perms = dol_eval($this->attributes[$extrafieldsobjectkey]['perms'][$key], 1, 1, '2'); + $perms = (int) dol_eval($this->attributes[$extrafieldsobjectkey]['perms'][$key], 1, 1, '2'); $langfile = $this->attributes[$extrafieldsobjectkey]['langfile'][$key]; - $list = dol_eval($this->attributes[$extrafieldsobjectkey]['list'][$key], 1, 1, '2'); + $list = (string) dol_eval($this->attributes[$extrafieldsobjectkey]['list'][$key], 1, 1, '2'); $help = $this->attributes[$extrafieldsobjectkey]['help'][$key]; $hidden = (empty($list) ? 1 : 0); // If $list empty, we are sure it is hidden, otherwise we show. If it depends on mode (view/create/edit form or list, this must be filtered by caller) @@ -1691,7 +1690,11 @@ class ExtraFields if (!empty($value)) { $checked = ' checked '; } - $value = ''; + if (getDolGlobalInt('MAIN_OPTIMIZEFORTEXTBROWSER') < 2) { + $value = ''; + } else { + $value = yn($value ? 1 : 0); + } } elseif ($type == 'mail') { $value = dol_print_email($value, 0, 0, 0, 64, 1, 1); } elseif ($type == 'ip') { @@ -2029,13 +2032,13 @@ class ExtraFields { global $conf, $langs; - $tagtype='tr'; - $tagtype_dyn='td'; + $tagtype = 'tr'; + $tagtype_dyn = 'td'; - if ($display_type=='line') { - $tagtype='div'; - $tagtype_dyn='span'; - $colspan=0; + if ($display_type == 'line') { + $tagtype = 'div'; + $tagtype_dyn = 'span'; + $colspan = 0; } $extrafield_param = $this->attributes[$object->table_element]['param'][$key]; @@ -2049,7 +2052,7 @@ class ExtraFields $expand_display = false; if (is_array($extrafield_param_list) && count($extrafield_param_list) > 0) { $extrafield_collapse_display_value = intval($extrafield_param_list[0]); - $expand_display = ((isset($_COOKIE['DOLCOLLAPSE_'.$object->table_element.'_extrafields_'.$key]) || GETPOST('ignorecollapsesetup', 'int')) ? (empty($_COOKIE['DOLCOLLAPSE_'.$object->table_element.'_extrafields_'.$key]) ? false : true) : ($extrafield_collapse_display_value == 2 ? false : true)); + $expand_display = ((isset($_COOKIE['DOLCOLLAPSE_'.$object->table_element.'_extrafields_'.$key]) || GETPOSTINT('ignorecollapsesetup')) ? (empty($_COOKIE['DOLCOLLAPSE_'.$object->table_element.'_extrafields_'.$key]) ? false : true) : ($extrafield_collapse_display_value == 2 ? false : true)); } $disabledcookiewrite = 0; if ($mode == 'create') { @@ -2154,17 +2157,17 @@ class ExtraFields $enabled = 1; if (isset($this->attributes[$object->table_element]['enabled'][$key])) { // 'enabled' is often a condition on module enabled or not - $enabled = dol_eval($this->attributes[$object->table_element]['enabled'][$key], 1, 1, '2'); + $enabled = (int) dol_eval($this->attributes[$object->table_element]['enabled'][$key], 1, 1, '2'); } $visibility = 1; if (isset($this->attributes[$object->table_element]['list'][$key])) { // 'list' is option for visibility - $visibility = intval(dol_eval($this->attributes[$object->table_element]['list'][$key], 1, 1, '2')); + $visibility = (int) dol_eval($this->attributes[$object->table_element]['list'][$key], 1, 1, '2'); } $perms = 1; if (isset($this->attributes[$object->table_element]['perms'][$key])) { - $perms = dol_eval($this->attributes[$object->table_element]['perms'][$key], 1, 1, '2'); + $perms = (int) dol_eval($this->attributes[$object->table_element]['perms'][$key], 1, 1, '2'); } if (empty($enabled) || ( @@ -2207,13 +2210,13 @@ class ExtraFields if (in_array($key_type, array('date'))) { // Clean parameters - $value_key = dol_mktime(12, 0, 0, GETPOST("options_".$key."month", 'int'), GETPOST("options_".$key."day", 'int'), GETPOST("options_".$key."year", 'int')); + $value_key = dol_mktime(12, 0, 0, GETPOSTINT("options_".$key."month"), GETPOSTINT("options_".$key."day"), GETPOSTINT("options_".$key."year")); } elseif (in_array($key_type, array('datetime'))) { // Clean parameters - $value_key = dol_mktime(GETPOST("options_".$key."hour", 'int'), GETPOST("options_".$key."min", 'int'), GETPOST("options_".$key."sec", 'int'), GETPOST("options_".$key."month", 'int'), GETPOST("options_".$key."day", 'int'), GETPOST("options_".$key."year", 'int'), 'tzuserrel'); + $value_key = dol_mktime(GETPOSTINT("options_".$key."hour"), GETPOSTINT("options_".$key."min"), GETPOSTINT("options_".$key."sec"), GETPOSTINT("options_".$key."month"), GETPOSTINT("options_".$key."day"), GETPOSTINT("options_".$key."year"), 'tzuserrel'); } elseif (in_array($key_type, array('datetimegmt'))) { // Clean parameters - $value_key = dol_mktime(GETPOST("options_".$key."hour", 'int'), GETPOST("options_".$key."min", 'int'), GETPOST("options_".$key."sec", 'int'), GETPOST("options_".$key."month", 'int'), GETPOST("options_".$key."day", 'int'), GETPOST("options_".$key."year", 'int'), 'gmt'); + $value_key = dol_mktime(GETPOSTINT("options_".$key."hour"), GETPOSTINT("options_".$key."min"), GETPOSTINT("options_".$key."sec"), GETPOSTINT("options_".$key."month"), GETPOSTINT("options_".$key."day"), GETPOSTINT("options_".$key."year"), 'gmt'); } elseif (in_array($key_type, array('checkbox', 'chkbxlst'))) { $value_arr = GETPOST("options_".$key, 'array'); // check if an array if (!empty($value_arr)) { @@ -2304,14 +2307,14 @@ class ExtraFields $value_key = array(); // values provided as a component year, month, day, etc. if (GETPOST($dateparamname_start . 'year')) { - $value_key['start'] = dol_mktime(0, 0, 0, GETPOST($dateparamname_start . 'month', 'int'), GETPOST($dateparamname_start . 'day', 'int'), GETPOST($dateparamname_start . 'year', 'int')); + $value_key['start'] = dol_mktime(0, 0, 0, GETPOSTINT($dateparamname_start . 'month'), GETPOSTINT($dateparamname_start . 'day'), GETPOSTINT($dateparamname_start . 'year')); } if (GETPOST($dateparamname_start . 'year')) { - $value_key['end'] = dol_mktime(23, 59, 59, GETPOST($dateparamname_end . 'month', 'int'), GETPOST($dateparamname_end . 'day', 'int'), GETPOST($dateparamname_end . 'year', 'int')); + $value_key['end'] = dol_mktime(23, 59, 59, GETPOSTINT($dateparamname_end . 'month'), GETPOSTINT($dateparamname_end . 'day'), GETPOSTINT($dateparamname_end . 'year')); } } elseif (GETPOST($keysuffix."options_".$key.$keyprefix."year")) { // Clean parameters - $value_key = dol_mktime(12, 0, 0, GETPOST($keysuffix."options_".$key.$keyprefix."month", 'int'), GETPOST($keysuffix."options_".$key.$keyprefix."day", 'int'), GETPOST($keysuffix."options_".$key.$keyprefix."year", 'int')); + $value_key = dol_mktime(12, 0, 0, GETPOSTINT($keysuffix."options_".$key.$keyprefix."month"), GETPOSTINT($keysuffix."options_".$key.$keyprefix."day"), GETPOSTINT($keysuffix."options_".$key.$keyprefix."year")); } else { continue; // Value was not provided, we should not set it. } @@ -2320,26 +2323,26 @@ class ExtraFields $dateparamname_end = $keysuffix . 'options_' . $key . $keyprefix . '_end'; if (GETPOST($dateparamname_start . 'year') && GETPOST($dateparamname_end . 'year')) { // values provided as a date pair (start date + end date), each date being broken down as year, month, day, etc. - $dateparamname_end_hour = GETPOST($dateparamname_end . 'hour', 'int') != '-1' ? GETPOST($dateparamname_end . 'hour', 'int') : '23'; - $dateparamname_end_min = GETPOST($dateparamname_end . 'min', 'int') != '-1' ? GETPOST($dateparamname_end . 'min', 'int') : '59'; - $dateparamname_end_sec = GETPOST($dateparamname_end . 'sec', 'int') != '-1' ? GETPOST($dateparamname_end . 'sec', 'int') : '59'; + $dateparamname_end_hour = GETPOSTINT($dateparamname_end . 'hour') != '-1' ? GETPOSTINT($dateparamname_end . 'hour') : '23'; + $dateparamname_end_min = GETPOSTINT($dateparamname_end . 'min') != '-1' ? GETPOSTINT($dateparamname_end . 'min') : '59'; + $dateparamname_end_sec = GETPOSTINT($dateparamname_end . 'sec') != '-1' ? GETPOSTINT($dateparamname_end . 'sec') : '59'; if ($key_type == 'datetimegmt') { $value_key = array( - 'start' => dol_mktime(GETPOST($dateparamname_start . 'hour', 'int'), GETPOST($dateparamname_start . 'min', 'int'), GETPOST($dateparamname_start . 'sec', 'int'), GETPOST($dateparamname_start . 'month', 'int'), GETPOST($dateparamname_start . 'day', 'int'), GETPOST($dateparamname_start . 'year', 'int'), 'gmt'), - 'end' => dol_mktime($dateparamname_end_hour, $dateparamname_end_min, $dateparamname_end_sec, GETPOST($dateparamname_end . 'month', 'int'), GETPOST($dateparamname_end . 'day', 'int'), GETPOST($dateparamname_end . 'year', 'int'), 'gmt') + 'start' => dol_mktime(GETPOSTINT($dateparamname_start . 'hour'), GETPOSTINT($dateparamname_start . 'min'), GETPOSTINT($dateparamname_start . 'sec'), GETPOSTINT($dateparamname_start . 'month'), GETPOSTINT($dateparamname_start . 'day'), GETPOSTINT($dateparamname_start . 'year'), 'gmt'), + 'end' => dol_mktime($dateparamname_end_hour, $dateparamname_end_min, $dateparamname_end_sec, GETPOSTINT($dateparamname_end . 'month'), GETPOSTINT($dateparamname_end . 'day'), GETPOSTINT($dateparamname_end . 'year'), 'gmt') ); } else { $value_key = array( - 'start' => dol_mktime(GETPOST($dateparamname_start . 'hour', 'int'), GETPOST($dateparamname_start . 'min', 'int'), GETPOST($dateparamname_start . 'sec', 'int'), GETPOST($dateparamname_start . 'month', 'int'), GETPOST($dateparamname_start . 'day', 'int'), GETPOST($dateparamname_start . 'year', 'int'), 'tzuserrel'), - 'end' => dol_mktime($dateparamname_end_hour, $dateparamname_end_min, $dateparamname_end_sec, GETPOST($dateparamname_end . 'month', 'int'), GETPOST($dateparamname_end . 'day', 'int'), GETPOST($dateparamname_end . 'year', 'int'), 'tzuserrel') + 'start' => dol_mktime(GETPOSTINT($dateparamname_start . 'hour'), GETPOSTINT($dateparamname_start . 'min'), GETPOSTINT($dateparamname_start . 'sec'), GETPOSTINT($dateparamname_start . 'month'), GETPOSTINT($dateparamname_start . 'day'), GETPOSTINT($dateparamname_start . 'year'), 'tzuserrel'), + 'end' => dol_mktime($dateparamname_end_hour, $dateparamname_end_min, $dateparamname_end_sec, GETPOSTINT($dateparamname_end . 'month'), GETPOSTINT($dateparamname_end . 'day'), GETPOSTINT($dateparamname_end . 'year'), 'tzuserrel') ); } } elseif (GETPOST($keysuffix."options_".$key.$keyprefix."year")) { // Clean parameters if ($key_type == 'datetimegmt') { - $value_key = dol_mktime(GETPOST($keysuffix."options_".$key.$keyprefix."hour", 'int'), GETPOST($keysuffix."options_".$key.$keyprefix."min", 'int'), GETPOST($keysuffix."options_".$key.$keyprefix."sec", 'int'), GETPOST($keysuffix."options_".$key.$keyprefix."month", 'int'), GETPOST($keysuffix."options_".$key.$keyprefix."day", 'int'), GETPOST($keysuffix."options_".$key.$keyprefix."year", 'int'), 'gmt'); + $value_key = dol_mktime(GETPOSTINT($keysuffix."options_".$key.$keyprefix."hour"), GETPOSTINT($keysuffix."options_".$key.$keyprefix."min"), GETPOSTINT($keysuffix."options_".$key.$keyprefix."sec"), GETPOSTINT($keysuffix."options_".$key.$keyprefix."month"), GETPOSTINT($keysuffix."options_".$key.$keyprefix."day"), GETPOSTINT($keysuffix."options_".$key.$keyprefix."year"), 'gmt'); } else { - $value_key = dol_mktime(GETPOST($keysuffix."options_".$key.$keyprefix."hour", 'int'), GETPOST($keysuffix."options_".$key.$keyprefix."min", 'int'), GETPOST($keysuffix."options_".$key.$keyprefix."sec", 'int'), GETPOST($keysuffix."options_".$key.$keyprefix."month", 'int'), GETPOST($keysuffix."options_".$key.$keyprefix."day", 'int'), GETPOST($keysuffix."options_".$key.$keyprefix."year", 'int'), 'tzuserrel'); + $value_key = dol_mktime(GETPOSTINT($keysuffix."options_".$key.$keyprefix."hour"), GETPOSTINT($keysuffix."options_".$key.$keyprefix."min"), GETPOSTINT($keysuffix."options_".$key.$keyprefix."sec"), GETPOSTINT($keysuffix."options_".$key.$keyprefix."month"), GETPOSTINT($keysuffix."options_".$key.$keyprefix."day"), GETPOSTINT($keysuffix."options_".$key.$keyprefix."year"), 'tzuserrel'); } } else { continue; // Value was not provided, we should not set it. diff --git a/htdocs/core/class/fileupload.class.php b/htdocs/core/class/fileupload.class.php index 290a75738e0..686bc3566d0 100644 --- a/htdocs/core/class/fileupload.class.php +++ b/htdocs/core/class/fileupload.class.php @@ -197,7 +197,7 @@ class FileUpload */ protected function setFileDeleteUrl($file) { - $file->delete_url = $this->options['script_url'].'?file='.urlencode($file->name).'&fk_element='.urlencode($this->fk_element).'&element='.urlencode($this->element); + $file->delete_url = $this->options['script_url'].'?file='.urlencode((string) ($file->name)).'&fk_element='.urlencode((string) ($this->fk_element)).'&element='.urlencode((string) ($this->element)); $file->delete_type = $this->options['delete_type']; if ($file->delete_type !== 'DELETE') { $file->delete_url .= '&_method=DELETE'; diff --git a/htdocs/core/class/fiscalyear.class.php b/htdocs/core/class/fiscalyear.class.php index 0162ee7de95..4b6f6f60939 100644 --- a/htdocs/core/class/fiscalyear.class.php +++ b/htdocs/core/class/fiscalyear.class.php @@ -1,7 +1,8 @@ * Copyright (C) 2020 OScss-Shop - * Copyright (C) 2023 Frédéric France + * Copyright (C) 2023-2024 Frédéric France + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -254,16 +255,16 @@ class Fiscalyear extends CommonObject /** * Delete record * - * @param int $id Id of record to delete + * @param User $user User that delete * @return int Return integer <0 if KO, >0 if OK */ - public function delete($id) + public function delete($user) { $this->db->begin(); - $sql = "DELETE FROM ".$this->db->prefix()."accounting_fiscalyear WHERE rowid = ".((int) $id); + $sql = "DELETE FROM ".$this->db->prefix()."accounting_fiscalyear"; + $sql .= " WHERE rowid = ".((int) $this->id); - dol_syslog(get_class($this)."::delete", LOG_DEBUG); $result = $this->db->query($sql); if ($result) { $this->db->commit(); @@ -317,7 +318,7 @@ class Fiscalyear extends CommonObject global $conf, $langs, $user; if (empty($this->ref)) { - $this->ref = $this->id; + $this->ref = (string) $this->id; } if (!empty($conf->dol_no_mouse_hover)) { @@ -331,7 +332,7 @@ class Fiscalyear extends CommonObject $params = [ 'id' => $this->id, 'objecttype' => $this->element, - 'option', $option, + 'option' => $option, 'nofetch' => 1, ]; $classfortooltip = 'classfortooltip'; diff --git a/htdocs/core/class/hookmanager.class.php b/htdocs/core/class/hookmanager.class.php index b4c4f37e569..6c9cea6f6f7 100644 --- a/htdocs/core/class/hookmanager.class.php +++ b/htdocs/core/class/hookmanager.class.php @@ -239,7 +239,7 @@ class HookManager $modulealreadyexecuted[$module] = $module; // Clean class (an error may have been set from a previous call of another method for same module/hook) - $actionclassinstance->error = 0; + $actionclassinstance->error = ''; $actionclassinstance->errors = array(); if (getDolGlobalInt('MAIN_HOOK_DEBUG')) { diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index d39c907fb73..11b660adc40 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -17,12 +17,13 @@ * Copyright (C) 2012-2015 Raphaël Doursenaud * Copyright (C) 2014-2023 Alexandre Spangaro * Copyright (C) 2018-2022 Ferran Marcet - * Copyright (C) 2018-2021 Frédéric France + * Copyright (C) 2018-2024 Frédéric France * Copyright (C) 2018 Nicolas ZABOURI * Copyright (C) 2018 Christophe Battarel * Copyright (C) 2018 Josep Lluis Amador * Copyright (C) 2023 Joachim Kueter * Copyright (C) 2023 Nick Fragoulis + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -111,7 +112,7 @@ class Form */ public function editfieldkey($text, $htmlname, $preselected, $object, $perm, $typeofdata = 'string', $moreparam = '', $fieldrequired = 0, $notabletag = 0, $paramid = 'id', $help = '') { - global $conf, $langs; + global $langs; $ret = ''; @@ -199,13 +200,13 @@ class Form * @param string $text Text of label (not used in this function) * @param string $htmlname Name of select field * @param string $value Value to show/edit - * @param object $object Object (that we want to show) + * @param CommonObject $object Object (that we want to show) * @param boolean $perm Permission to allow button to edit parameter * @param string $typeofdata Type of data ('string' by default, 'checkbox', 'email', 'phone', 'amount:99', 'numeric:99', * 'text' or 'textarea:rows:cols%', 'safehtmlstring', 'restricthtml', * 'datepicker' ('day' do not work, don't know why), 'dayhour' or 'datehourpicker', 'ckeditor:dolibarr_zzz:width:height:savemethod:toolbarstartexpanded:rows:cols', 'select;xkey:xval,ykey:yval,...') * @param string $editvalue When in edit mode, use this value as $value instead of value (for example, you can provide here a formatted price instead of numeric value, or a select combo). Use '' to use same than $value - * @param object $extObject External object ??? + * @param ?CommonObject $extObject External object ??? * @param mixed $custommsg String or Array of custom messages : eg array('success' => 'MyMessage', 'error' => 'MyMessage') * @param string $moreparam More param to add on the form on action href URL parameter * @param int $notabletag Do no output table tags @@ -349,7 +350,7 @@ class Form } elseif (preg_match('/^url/', $typeofdata)) { $ret .= dol_print_url($value, '_blank', 32, 1); } elseif (preg_match('/^(amount|numeric)/', $typeofdata)) { - $ret .= ($value != '' ? price($value, '', $langs, 0, -1, -1, $conf->currency) : ''); + $ret .= ($value != '' ? price($value, 0, $langs, 0, -1, -1, $conf->currency) : ''); } elseif (preg_match('/^checkbox/', $typeofdata)) { $tmp = explode(':', $typeofdata); $ret .= ''; @@ -478,20 +479,18 @@ class Form /** * Output edit in place form * - * @param object $object Object + * @param CommonObject $object Object * @param string $value Value to show/edit * @param string $htmlname DIV ID (field name) * @param int $condition Condition to edit * @param string $inputType Type of input ('string', 'numeric', 'datepicker' ('day' do not work, don't know why), 'textarea:rows:cols', 'ckeditor:dolibarr_zzz:width:height:?:1:rows:cols', 'select:loadmethod:savemethod:buttononly') * @param string $editvalue When in edit mode, use this value as $value instead of value - * @param object $extObject External object + * @param ?CommonObject $extObject External object * @param mixed $custommsg String or Array of custom messages : eg array('success' => 'MyMessage', 'error' => 'MyMessage') * @return string HTML edit in place */ protected function editInPlace($object, $value, $htmlname, $condition, $inputType = 'textarea', $editvalue = null, $extObject = null, $custommsg = null) { - global $conf; - $out = ''; // Check parameters @@ -796,12 +795,15 @@ class Form } elseif ($type == 'helpclickable') { $img = img_help(($tooltiptrigger != '' ? 2 : 1), $alt); } elseif ($type == 'superadmin') { + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition $img = img_picto($alt, 'redstar'); } elseif ($type == 'admin') { + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition $img = img_picto($alt, 'star'); } elseif ($type == 'warning') { $img = img_warning($alt); } elseif ($type != 'none') { + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition $img = img_picto($alt, $type); // $type can be an image path } @@ -1341,7 +1343,7 @@ class Form } // mode 1 - $urloption = 'htmlname=' . urlencode(str_replace('.', '_', $htmlname)) . '&outjson=1&filter=' . urlencode($filter) . (empty($excludeids) ? '' : '&excludeids=' . implode(',', $excludeids)) . ($showtype ? '&showtype=' . urlencode($showtype) : '') . ($showcode ? '&showcode=' . urlencode($showcode) : ''); + $urloption = 'htmlname=' . urlencode((string) (str_replace('.', '_', $htmlname))) . '&outjson=1&filter=' . urlencode((string) ($filter)) . (empty($excludeids) ? '' : '&excludeids=' . implode(',', $excludeids)) . ($showtype ? '&showtype=' . urlencode((string) ($showtype)) : '') . ($showcode ? '&showcode=' . urlencode((string) ($showcode)) : ''); $out .= ''; if (empty($hidelabel)) { @@ -1989,7 +1991,7 @@ class Form /** * Return select list of users * - * @param string $selected User id or user object of user preselected. If 0 or < -2, we use id of current user. If -1, keep unselected (if empty is allowed) + * @param string|int $selected User id or user object of user preselected. If 0 or < -2, we use id of current user. If -1 or '', keep unselected (if empty is allowed) * @param string $htmlname Field name in form * @param int|string $show_empty 0=list with no empty value, 1=add also an empty value into list * @param array|null $exclude Array list of users id to exclude @@ -2222,11 +2224,11 @@ class Form $outarray[$userstatic->id] = $userstatic->getFullName($langs, $fullNameMode, -1, $maxlength) . $moreinfo; $outarray2[$userstatic->id] = array( - 'id'=>$userstatic->id, - 'label'=>$labeltoshow, - 'labelhtml'=>$labeltoshowhtml, - 'color'=>'', - 'picto'=>'' + 'id' => $userstatic->id, + 'label' => $labeltoshow, + 'labelhtml' => $labeltoshowhtml, + 'color' => '', + 'picto' => '' ); $i++; @@ -2465,7 +2467,7 @@ class Form * 'warehouseclosed' = count products from closed warehouses, * 'warehouseinternal' = count products from warehouses for internal correct/transfer only * @param array $selected_combinations Selected combinations. Format: array([attrid] => attrval, [...]) - * @param string $nooutput No print, return the output into a string + * @param int $nooutput No print if 1, return the output into a string * @param int $status_purchase Purchase status: -1=No filter on purchase status, 0=Products not on purchase, 1=Products on purchase * @return void|string */ @@ -2811,7 +2813,7 @@ class Form $sql .= " FROM ".$this->db->prefix()."product as p"; // Add from (left join) from hooks - $parameters = array(); + $parameters = array(); // @phan-suppress-current-line PhanPluginRedundantAssignment $reshook = $hookmanager->executeHooks('selectProductsListFrom', $parameters); // Note that $action and $object may have been modified by hook $sql .= $hookmanager->resPrint; @@ -2881,7 +2883,7 @@ class Form $sql .= " AND p.fk_product_type = 0"; } // Add where from hooks - $parameters = array(); + $parameters = array(); // @phan-suppress-current-line PhanPluginRedundantAssignment $reshook = $hookmanager->executeHooks('selectProductsListWhere', $parameters); // Note that $action and $object may have been modified by hook $sql .= $hookmanager->resPrint; // Add criteria on ref/label @@ -3370,7 +3372,7 @@ class Form } } - $parameters = array('objp'=>$objp); + $parameters = array('objp' => $objp); $reshook = $hookmanager->executeHooks('constructProductListOption', $parameters); // Note that $action and $object may have been modified by hook if (empty($reshook)) { $opt .= $hookmanager->resPrint; @@ -3752,13 +3754,8 @@ class Form $outvallabel .= " - " . $reputations[$objp->supplier_reputation]; } } else { - if (empty($alsoproductwithnosupplierprice)) { // No supplier price defined for couple product/supplier - $optlabel .= " - " . $langs->trans("NoPriceDefinedForThisSupplier") . ''; - $outvallabel .= ' - ' . $langs->transnoentities("NoPriceDefinedForThisSupplier"); - } else { // No supplier price defined for product, even on other suppliers - $optlabel .= " - " . $langs->trans("NoPriceDefinedForThisSupplier") . ''; - $outvallabel .= ' - ' . $langs->transnoentities("NoPriceDefinedForThisSupplier"); - } + $optlabel .= " - " . $langs->trans("NoPriceDefinedForThisSupplier") . ''; + $outvallabel .= ' - ' . $langs->transnoentities("NoPriceDefinedForThisSupplier"); } if (isModEnabled('stock') && $showstockinlist && isset($objp->stock) && ($objp->fk_product_type == Product::TYPE_PRODUCT || getDolGlobalString('STOCK_SUPPORTS_SERVICES'))) { @@ -4323,8 +4320,8 @@ class Form * 0 : use default deposit percentage from entry * > 0 : force deposit percentage (for example, from company object) * @param int $noprint if set to one we return the html to print, if 0 (default) we print it - * @return void - * @deprecated + * @return void|string + * @deprecated Use getSelectConditionsPaiements() instead and handle noprint locally. */ public function select_conditions_paiements($selected = 0, $htmlname = 'condid', $filtertype = -1, $addempty = 0, $noinfoadmin = 0, $morecss = '', $deposit_percent = -1, $noprint = 0) { @@ -4904,7 +4901,7 @@ class Form * @param int $showcurrency Show currency in label * @param string $morecss More CSS * @param int $nooutput 1=Return string, do not send to output - * @return int Return integer <0 if error, Num of bank account found if OK (0, 1, 2, ...) + * @return int|string If noouput=0: Return integer <0 if error, Num of bank account found if OK (0, 1, 2, ...), If nooutput=1: Return a HTML select string. */ public function select_comptes($selected = '', $htmlname = 'accountid', $status = 0, $filtre = '', $useempty = 0, $moreattrib = '', $showcurrency = 0, $morecss = '', $nooutput = 0) { @@ -5373,13 +5370,13 @@ class Form $h = isset($input['hours']) ? $input['hours'] : 1; $m = isset($input['minutes']) ? $input['minutes'] : 1; } - $more .= $this->selectDate($input['value'], $input['name'], $h, $m, 0, '', 1, $addnowlink); + $more .= $this->selectDate(isset($input['value']) ? $input['value'] : -1, $input['name'], $h, $m, 0, '', 1, $addnowlink); $more .= '
'."\n"; - $formquestion[] = array('name'=>$input['name'].'day'); - $formquestion[] = array('name'=>$input['name'].'month'); - $formquestion[] = array('name'=>$input['name'].'year'); - $formquestion[] = array('name'=>$input['name'].'hour'); - $formquestion[] = array('name'=>$input['name'].'min'); + $formquestion[] = array('name' => $input['name'].'day'); + $formquestion[] = array('name' => $input['name'].'month'); + $formquestion[] = array('name' => $input['name'].'year'); + $formquestion[] = array('name' => $input['name'].'hour'); + $formquestion[] = array('name' => $input['name'].'min'); } elseif ($input['type'] == 'other') { // can be 1 column or 2 depending if label is set or not $more .= '
'; if (!empty($input['label'])) { @@ -6012,7 +6009,7 @@ class Form print ''; print ''; } else { - dol_include_once('/core/lib/company.lib.php'); + require_once DOL_DOCUMENT_ROOT . '/core/lib/company.lib.php'; print !empty($selected) ? currency_name($selected, 1) : ' '; } } @@ -6882,6 +6879,10 @@ class Form if (!empty($conf->use_javascript_ajax) && (!getDolGlobalString('MAIN_POPUP_CALENDAR') || getDolGlobalString('MAIN_POPUP_CALENDAR') != "none")) { $usecalendar = ((!getDolGlobalString('MAIN_POPUP_CALENDAR') || getDolGlobalString('MAIN_POPUP_CALENDAR') == 'eldy') ? 'jquery' : $conf->global->MAIN_POPUP_CALENDAR); } + if (getDolGlobalString('MAIN_OPTIMIZEFORTEXTBROWSER')) { + // If we use a text browser or screen reader, we use the 'combo' date selector + $usecalendar = 'html'; + } if ($d) { // Show date with popup @@ -6899,7 +6900,7 @@ class Form $retstring .= 'trans("FormatDateShortJavaInput") . '\'); "'; // FormatDateShortInput for dol_print_date / FormatDateShortJavaInput that is same for javascript - $retstring .= '>'; + $retstring .= ' autocomplete="off">'; // Icon calendar $retstringbuttom = ''; @@ -6916,8 +6917,8 @@ class Form $retstring .= '' . "\n"; $retstring .= '' . "\n"; $retstring .= '' . "\n"; - } elseif ($usecalendar == 'jquery') { - if (!$disabled) { + } elseif ($usecalendar == 'jquery' || $usecalendar == 'html') { + if (!$disabled && $usecalendar != 'html') { // Output javascript for datepicker $minYear = getDolGlobalInt('MIN_YEAR_SELECT_DATE', (date('Y') - 100)); $maxYear = getDolGlobalInt('MAX_YEAR_SELECT_DATE', (date('Y') + 100)); @@ -6956,22 +6957,12 @@ class Form $retstring .= ($disabled ? ' disabled' : ''); $retstring .= ($placeholder ? ' placeholder="' . dol_escape_htmltag($placeholder) . '"' : ''); $retstring .= ' onChange="dpChangeDay(\'' . dol_escape_js($prefix) . '\',\'' . dol_escape_js($langs->trans("FormatDateShortJavaInput")) . '\'); "'; // FormatDateShortInput for dol_print_date / FormatDateShortJavaInput that is same for javascript - $retstring .= '>'; + $retstring .= ' autocomplete="off">'; // Icone calendrier - if (!$disabled) { - /* Not required. Managed by option buttonImage of jquery - $retstring.=img_object($langs->trans("SelectDate"),'calendarday','id="'.$prefix.'id" class="datecallink"'); - $retstring.='";*/ - } else { + if ($disabled) { $retstringbutton = ''; - $retsring = $retstringbutton . $retstring; + $retstring = $retstringbutton . $retstring; } $retstring .= '
'; @@ -7069,7 +7060,7 @@ class Form if (strlen($min) < 2) { $min = "0" . $min; } - $retstring .= ''; + $retstring .= ''; } $retstring .= ''; @@ -7208,13 +7199,13 @@ class Form // Add a link to set data if ($conf->use_javascript_ajax && !empty($adddateof)) { if (!is_array($adddateof)) { - $arrayofdateof = array(array('adddateof'=>$adddateof, 'labeladddateof'=>$labeladddateof)); + $arrayofdateof = array(array('adddateof' => $adddateof, 'labeladddateof' => $labeladddateof)); } else { $arrayofdateof = $adddateof; } foreach ($arrayofdateof as $valuedateof) { - $tmpadddateof = $valuedateof['adddateof'] != '' ? $valuedateof['adddateof'] : 0; - $tmplabeladddateof = $valuedateof['labeladddateof']; + $tmpadddateof = empty($valuedateof['adddateof']) ? 0 : $valuedateof['adddateof']; + $tmplabeladddateof = empty($valuedateof['labeladddateof']) ? '' : $valuedateof['labeladddateof']; $tmparray = dol_getdate($tmpadddateof); if (empty($tmplabeladddateof)) { $tmplabeladddateof = $langs->trans("DateInvoice"); @@ -7852,7 +7843,6 @@ class Form if (!empty($conf->use_javascript_ajax) && getDolGlobalString('TICKET_USE_SEARCH_TO_SELECT')) { $placeholder = ''; - $urloption = ''; if ($selected && empty($selected_input_value)) { require_once DOL_DOCUMENT_ROOT . '/adherents/class/adherent.class.php'; @@ -8056,22 +8046,22 @@ class Form * Can use autocomplete with ajax after x key pressed or a full combo, depending on setup. * This is the generic method that will replace all specific existing methods. * - * @param string $objectdesc 'ObjectClass:PathToClass[:AddCreateButtonOrNot[:Filter[:Sortfield]]]'. For hard coded custom needs. Try to prefer method using $objectfield instead of $objectdesc. - * @param string $htmlname Name of HTML select component - * @param int $preselectedvalue Preselected value (ID of element) - * @param string $showempty ''=empty values not allowed, 'string'=value show if we allow empty values (for example 'All', ...) - * @param string $searchkey Search criteria - * @param string $placeholder Place holder - * @param string $morecss More CSS - * @param string $moreparams More params provided to ajax call - * @param int $forcecombo Force to load all values and output a standard combobox (with no beautification) - * @param int $disabled 1=Html component is disabled - * @param string $selected_input_value Value of preselected input text (for use with ajax) - * @param string $objectfield Object:Field that contains the definition (in table $fields or $extrafields). Example: 'Object:xxx' or 'Module_Object:xxx' or 'Object:options_xxx' or 'Module_Object:options_xxx' + * @param string $objectdesc 'ObjectClass:PathToClass[:AddCreateButtonOrNot[:Filter[:Sortfield]]]'. For hard coded custom needs. Try to prefer method using $objectfield instead of $objectdesc. + * @param string $htmlname Name of HTML select component + * @param int $preSelectedValue Preselected value (ID of element) + * @param string $showempty ''=empty values not allowed, 'string'=value show if we allow empty values (for example 'All', ...) + * @param string $searchkey Search criteria + * @param string $placeholder Place holder + * @param string $morecss More CSS + * @param string $moreparams More params provided to ajax call + * @param int $forcecombo Force to load all values and output a standard combobox (with no beautification) + * @param int $disabled 1=Html component is disabled + * @param string $selected_input_value Value of preselected input text (for use with ajax) + * @param string $objectfield Object:Field that contains the definition (in table $fields or $extrafields). Example: 'Object:xxx' or 'Module_Object:xxx' or 'Object:options_xxx' or 'Module_Object:options_xxx' * @return string Return HTML string * @see selectForFormsList(), select_thirdparty_list() */ - public function selectForForms($objectdesc, $htmlname, $preselectedvalue, $showempty = '', $searchkey = '', $placeholder = '', $morecss = '', $moreparams = '', $forcecombo = 0, $disabled = 0, $selected_input_value = '', $objectfield = '') + public function selectForForms($objectdesc, $htmlname, $preSelectedValue, $showempty = '', $searchkey = '', $placeholder = '', $morecss = '', $moreparams = '', $forcecombo = 0, $disabled = 0, $selected_input_value = '', $objectfield = '') { global $conf, $extrafields, $user; @@ -8170,10 +8160,25 @@ class Form if (!empty($conf->use_javascript_ajax) && getDolGlobalString($confkeyforautocompletemode) && !$forcecombo) { // No immediate load of all database $placeholder = ''; - if ($preselectedvalue && empty($selected_input_value)) { - $objecttmp->fetch($preselectedvalue); + + if ($preSelectedValue && empty($selected_input_value)) { + $objecttmp->fetch($preSelectedValue); $selected_input_value = ($prefixforautocompletemode == 'company' ? $objecttmp->name : $objecttmp->ref); - //unset($objecttmp); + + $oldValueForShowOnCombobox = 0; + foreach ($objecttmp->fields as $fieldK => $fielV) { + if (!$fielV['showoncombobox'] || empty($objecttmp->$fieldK)) { + continue; + } + + if (!$oldValueForShowOnCombobox) { + $selected_input_value = ''; + } + + $selected_input_value .= $oldValueForShowOnCombobox ? ' - ' : ''; + $selected_input_value .= $objecttmp->$fieldK; + $oldValueForShowOnCombobox = empty($fielV['showoncombobox']) ? 0 : $fielV['showoncombobox']; + } } // Set url and param to call to get json of the search results @@ -8181,12 +8186,12 @@ class Form $urloption = 'htmlname=' . urlencode($htmlname) . '&outjson=1&objectdesc=' . urlencode($objectdescorig) . '&objectfield='.urlencode($objectfield) . ($sortfield ? '&sortfield=' . urlencode($sortfield) : ''); // Activate the auto complete using ajax call. - $out .= ajax_autocompleter($preselectedvalue, $htmlname, $urlforajaxcall, $urloption, getDolGlobalString($confkeyforautocompletemode), 0, array()); + $out .= ajax_autocompleter($preSelectedValue, $htmlname, $urlforajaxcall, $urloption, getDolGlobalString($confkeyforautocompletemode), 0); $out .= ''; $out .= ''; } else { // Immediate load of table record. - $out .= $this->selectForFormsList($objecttmp, $htmlname, $preselectedvalue, $showempty, $searchkey, $placeholder, $morecss, $moreparams, $forcecombo, 0, $disabled, $sortfield, $filter); + $out .= $this->selectForFormsList($objecttmp, $htmlname, $preSelectedValue, $showempty, $searchkey, $placeholder, $morecss, $moreparams, $forcecombo, 0, $disabled, $sortfield, $filter); } return $out; @@ -8228,7 +8233,7 @@ class Form if (!empty($objecttmp->fields)) { // For object that declare it, it is better to use declared fields (like societe, contact, ...) $tmpfieldstoshow = ''; foreach ($objecttmp->fields as $key => $val) { - if (!dol_eval($val['enabled'], 1, 1, '1')) { + if (! (int) dol_eval($val['enabled'], 1, 1, '1')) { continue; } if (!empty($val['showoncombobox'])) { @@ -8404,7 +8409,7 @@ class Form * Return a HTML select string, built from an array of key+value. * Note: Do not apply langs->trans function on returned content, content may be entity encoded twice. * - * @param string $htmlname Name of html select area. Must start with "multi" if this is a multiselect + * @param string $htmlname Name of html select area. Try to start name with "multi" or "search_multi" if this is a multiselect * @param array $array Array like array(key => value) or array(key=>array('label'=>..., 'data-...'=>..., 'disabled'=>..., 'css'=>...)) * @param string|string[] $id Preselected key or preselected keys for multiselect. Use 'ifone' to autoselect record if there is only one record. * @param int|string $show_empty 0 no empty value allowed, 1 or string to add an empty value into list (If 1: key is -1 and value is '' or ' ', If placeholder string: key is -1 and value is the string), <0 to add an empty value with key that is this value. @@ -8419,7 +8424,7 @@ class Form * @param int $addjscombo Add js combo * @param string $moreparamonempty Add more param on the empty option line. Not used if show_empty not set * @param int $disablebademail 1=Check if a not valid email, 2=Check string '---', and if found into value, disable and colorize entry - * @param int $nohtmlescape No html escaping. + * @param int $nohtmlescape No html escaping (not recommended, use 'data-html' if you need to use label with HTML content). * @return string HTML select string. * @see multiselectarray(), selectArrayAjax(), selectArrayFilter() */ @@ -8522,12 +8527,12 @@ class Form $out .= ' selected'; // To preselect a value } } - if ($nohtmlescape) { + if (!empty($nohtmlescape)) { $out .= ' data-html="' . dol_escape_htmltag($selectOptionValue) . '"'; } if (is_array($tmpvalue)) { foreach ($tmpvalue as $keyforvalue => $valueforvalue) { - if (preg_match('/^data-/', $keyforvalue)) { + if (preg_match('/^data-/', $keyforvalue)) { // The best solution if you want to use HTML values into the list is to use data-html. $out .= ' '.$keyforvalue.'="'.dol_escape_htmltag($valueforvalue).'"'; } } @@ -8807,7 +8812,7 @@ class Form } $useenhancedmultiselect = 0; - if (!empty($conf->use_javascript_ajax) && (getDolGlobalString('MAIN_USE_JQUERY_MULTISELECT') || defined('REQUIRE_JQUERY_MULTISELECT'))) { + if (!empty($conf->use_javascript_ajax) && !defined('MAIN_DO_NOT_USE_JQUERY_MULTISELECT') && (getDolGlobalString('MAIN_USE_JQUERY_MULTISELECT') || defined('REQUIRE_JQUERY_MULTISELECT'))) { if ($addjscombo) { $useenhancedmultiselect = 1; // Use the js multiselect in one line. Possible only if $addjscombo not 0. } @@ -8866,9 +8871,12 @@ class Form if ($addjscombo == 1) { $tmpplugin = !getDolGlobalString('MAIN_USE_JQUERY_MULTISELECT') ? constant('REQUIRE_JQUERY_MULTISELECT') : $conf->global->MAIN_USE_JQUERY_MULTISELECT; $out .= 'function formatResult(record, container) {' . "\n"; - // If property html set, we decode html entities and use this. + // If property data-html set, we decode html entities and use this. // Note that HTML content must have been sanitized from js with dol_escape_htmltag(xxx, 0, 0, '', 0, 1) when building the select option. - $out .= ' if ($(record.element).attr("data-html") != undefined) { return htmlEntityDecodeJs($(record.element).attr("data-html")); }'."\n"; + $out .= ' if ($(record.element).attr("data-html") != undefined && typeof htmlEntityDecodeJs === "function") {'; + //$out .= ' console.log("aaa");'; + $out .= ' return htmlEntityDecodeJs($(record.element).attr("data-html"));'; + $out .= ' }'."\n"; $out .= ' return record.text;'; $out .= '}' . "\n"; $out .= 'function formatSelection(record) {' . "\n"; @@ -8889,7 +8897,7 @@ class Form } $out .= ' dir: \'ltr\', containerCssClass: \':all:\', /* Line to add class of origin SELECT propagated to the new tag (ok with multiselect) */ + dropdownCssClass: \'' . $morecss . '\', /* Line to add class on the new 'LinkToProposal', 'sql' => "SELECT s.rowid as socid, s.nom as name, s.client, t.rowid, t.ref, t.ref_client, t.total_ht FROM " . $this->db->prefix() . "societe as s, " . $this->db->prefix() . "propal as t WHERE t.fk_soc = s.rowid AND t.fk_soc IN (" . $this->db->sanitize($listofidcompanytoscan) . ') AND t.entity IN (' . getEntity('propal') . ')'), 'shipping' => array( - 'enabled' => isModEnabled('expedition'), + 'enabled' => isModEnabled('shipping'), 'perms' => 1, 'label' => 'LinkToExpedition', 'sql' => "SELECT s.rowid as socid, s.nom as name, s.client, t.rowid, t.ref FROM " . $this->db->prefix() . "societe as s, " . $this->db->prefix() . "expedition as t WHERE t.fk_soc = s.rowid AND t.fk_soc IN (" . $this->db->sanitize($listofidcompanytoscan) . ') AND t.entity IN (' . getEntity('shipping') . ')'), 'order' => array( - 'enabled' => isModEnabled('commande'), + 'enabled' => isModEnabled('order'), 'perms' => 1, 'label' => 'LinkToOrder', 'sql' => "SELECT s.rowid as socid, s.nom as name, s.client, t.rowid, t.ref, t.ref_client, t.total_ht FROM " . $this->db->prefix() . "societe as s, " . $this->db->prefix() . "commande as t WHERE t.fk_soc = s.rowid AND t.fk_soc IN (" . $this->db->sanitize($listofidcompanytoscan) . ') AND t.entity IN (' . getEntity('commande') . ')'), 'invoice' => array( - 'enabled' => isModEnabled('facture'), + 'enabled' => isModEnabled('invoice'), 'perms' => 1, 'label' => 'LinkToInvoice', 'sql' => "SELECT s.rowid as socid, s.nom as name, s.client, t.rowid, t.ref, t.ref_client, t.total_ht FROM " . $this->db->prefix() . "societe as s, " . $this->db->prefix() . "facture as t WHERE t.fk_soc = s.rowid AND t.fk_soc IN (" . $this->db->sanitize($listofidcompanytoscan) . ') AND t.entity IN (' . getEntity('invoice') . ')'), 'invoice_template' => array( - 'enabled' => isModEnabled('facture'), + 'enabled' => isModEnabled('invoice'), 'perms' => 1, 'label' => 'LinkToTemplateInvoice', 'sql' => "SELECT s.rowid as socid, s.nom as name, s.client, t.rowid, t.titre as ref, t.total_ht FROM " . $this->db->prefix() . "societe as s, " . $this->db->prefix() . "facture_rec as t WHERE t.fk_soc = s.rowid AND t.fk_soc IN (" . $this->db->sanitize($listofidcompanytoscan) . ') AND t.entity IN (' . getEntity('invoice') . ')'), 'contrat' => array( - 'enabled' => isModEnabled('contrat'), + 'enabled' => isModEnabled('contract'), 'perms' => 1, 'label' => 'LinkToContract', 'sql' => "SELECT s.rowid as socid, s.nom as name, s.client, t.rowid, t.ref, t.ref_customer as ref_client, t.ref_supplier, SUM(td.total_ht) as total_ht FROM " . $this->db->prefix() . "societe as s, " . $this->db->prefix() . "contrat as t, " . $this->db->prefix() . "contratdet as td WHERE t.fk_soc = s.rowid AND td.fk_contrat = t.rowid AND t.fk_soc IN (" . $this->db->sanitize($listofidcompanytoscan) . ') AND t.entity IN (' . getEntity('contract') . ') GROUP BY s.rowid, s.nom, s.client, t.rowid, t.ref, t.ref_customer, t.ref_supplier' ), 'fichinter' => array( - 'enabled' => isModEnabled('ficheinter'), + 'enabled' => isModEnabled('intervention'), 'perms' => 1, 'label' => 'LinkToIntervention', 'sql' => "SELECT s.rowid as socid, s.nom as name, s.client, t.rowid, t.ref FROM " . $this->db->prefix() . "societe as s, " . $this->db->prefix() . "fichinter as t WHERE t.fk_soc = s.rowid AND t.fk_soc IN (" . $this->db->sanitize($listofidcompanytoscan) . ') AND t.entity IN (' . getEntity('intervention') . ')'), @@ -9483,7 +9491,7 @@ class Form '; } else { - $linktoelem = ''; + $linktoelem = ''; // @phan-suppress-current-line PhanPluginRedundantAssignment } if (!empty($conf->use_javascript_ajax)) { @@ -9672,8 +9680,8 @@ class Form $stringforfirstkey .= ' CTL +'; } - $previous_ref = $object->ref_previous ? '' : ''; - $next_ref = $object->ref_next ? '' : ''; + $previous_ref = $object->ref_previous ? '' : ''; + $next_ref = $object->ref_next ? '' : ''; } //print "xx".$previous_ref."x".$next_ref; @@ -9687,8 +9695,8 @@ class Form if ($previous_ref || $next_ref || $morehtml) { $ret .= '
'; @@ -816,7 +817,7 @@ class FormFile $out .= '
'; $out .= ''; $out .= ''; + $out .= '
'; + $out .= ''.$langs->trans("AIProcessingPleaseWait"); + $out .= '
'; $out .= "
'; + + $sql = "SELECT p.rowid as id, p.entity, p.title, p.ref, p.public, p.dateo as do, p.datee as de, p.fk_statut as status, p.fk_opp_status, p.opp_amount, p.opp_percent, p.tms as date_update, p.budget_amount"; + $sql .= ", cls.code as opp_status_code"; + $sql .= " FROM ".MAIN_DB_PREFIX."projet as p"; + $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_lead_status as cls on p.fk_opp_status = cls.rowid"; + $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."element_contact as ec on p.rowid = ec.element_id"; + $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."socpeople as sc on ec.fk_socpeople = sc.rowid"; + $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_type_contact as tc on ec.fk_c_type_contact = tc.rowid"; + $sql .= " WHERE sc.fk_soc = ".((int) $object->id); + $sql .= " AND p.entity IN (".getEntity('project').")"; + $sql .= " AND tc.element = 'project'"; + $sql .= " ORDER BY p.dateo DESC"; + + $result = $db->query($sql); + if ($result) { + $num = $db->num_rows($result); + + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + + if ($num > 0) { + require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; + + $projecttmp = new Project($db); + + $i = 0; + + while ($i < $num) { + $obj = $db->fetch_object($result); + $projecttmp->fetch($obj->id); + + // To verify role of users + $userAccess = $projecttmp->restrictedProjectArea($user); + + if ($user->rights->projet->lire && $userAccess > 0) { + print ''; + + // Ref + print ''; + + // Label + print ''; + // Date start + print ''; + // Date end + print ''; + // Opp amount + print ''; + // Opp status + print ''; + // Opp percent + print ''; + // Status + print ''; + + print ''; + } + $i++; + } + } else { + print ''; + } + $db->free($result); + } else { + dol_print_error($db); + } + } + + $parameters = array('sql' => $sql, 'function' => 'show_projects'); $reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; @@ -998,14 +1095,14 @@ function show_contacts($conf, $langs, $db, $object, $backtopage = '', $showuserl $optioncss = GETPOST('optioncss', 'alpha'); $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); - $page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); + $page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); - $search_status = GETPOST("search_status", 'int'); + $search_status = GETPOST("search_status", "intcomma"); if ($search_status == '') { $search_status = 1; // always display active customer first } - $search_rowid = GETPOST("search_rowid", 'int'); + $search_rowid = GETPOSTINT("search_rowid"); $search_name = GETPOST("search_name", 'alpha'); $search_address = GETPOST("search_address", 'alpha'); $search_poste = GETPOST("search_poste", 'alpha'); @@ -1015,8 +1112,8 @@ function show_contacts($conf, $langs, $db, $object, $backtopage = '', $showuserl $search_birthday_dtend = GETPOST("search_birthday_dtend", 'alpha'); if ($search_birthday_dtstart != '' || $search_birthday_dtend != '') { - $search_birthday_dtstart = dol_mktime(0, 0, 0, GETPOST('search_birthday_dtstartmonth', 'int'), GETPOST('search_birthday_dtstartday', 'int'), GETPOST('search_birthday_dtstartyear', 'int')); - $search_birthday_dtend = dol_mktime(23, 59, 59, GETPOST('search_birthday_dtendmonth', 'int'), GETPOST('search_birthday_dtendday', 'int'), GETPOST('search_birthday_dtendyear', 'int')); + $search_birthday_dtstart = dol_mktime(0, 0, 0, GETPOSTINT('search_birthday_dtstartmonth'), GETPOSTINT('search_birthday_dtstartday'), GETPOSTINT('search_birthday_dtstartyear')); + $search_birthday_dtend = dol_mktime(23, 59, 59, GETPOSTINT('search_birthday_dtendmonth'), GETPOSTINT('search_birthday_dtendday'), GETPOSTINT('search_birthday_dtendyear')); } $socialnetworks = getArrayOfSocialNetworks(); @@ -1061,36 +1158,36 @@ function show_contacts($conf, $langs, $db, $object, $backtopage = '', $showuserl $extrafields->fetch_name_optionals_label($contactstatic->table_element); $contactstatic->fields = array( - 'rowid' =>array('type'=>'integer', 'label'=>"TechnicalID", 'enabled'=>(getDolGlobalString('MAIN_SHOW_TECHNICAL_ID') ? 1 : 0), 'visible'=>(getDolGlobalString('MAIN_SHOW_TECHNICAL_ID') ? 1 : 0), 'position'=>1), - 'name' =>array('type'=>'varchar(128)', 'label'=>'Name', 'enabled'=>1, 'visible'=>1, 'notnull'=>1, 'showoncombobox'=>1, 'index'=>1, 'position'=>10, 'searchall'=>1), - 'poste' =>array('type'=>'varchar(128)', 'label'=>'PostOrFunction', 'enabled'=>1, 'visible'=>1, 'notnull'=>1, 'showoncombobox'=>2, 'index'=>1, 'position'=>20), - 'address' =>array('type'=>'varchar(128)', 'label'=>'Address', 'enabled'=>1, 'visible'=>1, 'notnull'=>1, 'showoncombobox'=>3, 'index'=>1, 'position'=>30), - 'note_private' =>array('type'=>'html', 'label'=>'NotePrivate', 'enabled'=>(!getDolGlobalInt('MAIN_LIST_HIDE_PRIVATE_NOTES')), 'visible'=>3, 'position'=>35), - 'role' =>array('type'=>'checkbox', 'label'=>'Role', 'enabled'=>1, 'visible'=>1, 'notnull'=>1, 'showoncombobox'=>4, 'index'=>1, 'position'=>40), - 'birthday' =>array('type'=>'date', 'label'=>'Birthday', 'enabled'=>1, 'visible'=>-1, 'notnull'=> 0, 'position'=>45), - 'statut' =>array('type'=>'integer', 'label'=>'Status', 'enabled'=>1, 'visible'=>1, 'notnull'=>1, 'default'=>0, 'index'=>1, 'position'=>50, 'arrayofkeyval'=>array(0=>$contactstatic->LibStatut(0, 1), 1=>$contactstatic->LibStatut(1, 1))), + 'rowid' => array('type' => 'integer', 'label' => "TechnicalID", 'enabled' => (getDolGlobalString('MAIN_SHOW_TECHNICAL_ID') ? 1 : 0), 'visible' => (getDolGlobalString('MAIN_SHOW_TECHNICAL_ID') ? 1 : 0), 'position' => 1), + 'name' => array('type' => 'varchar(128)', 'label' => 'Name', 'enabled' => 1, 'visible' => 1, 'notnull' => 1, 'showoncombobox' => 1, 'index' => 1, 'position' => 10, 'searchall' => 1), + 'poste' => array('type' => 'varchar(128)', 'label' => 'PostOrFunction', 'enabled' => 1, 'visible' => 1, 'notnull' => 1, 'showoncombobox' => 2, 'index' => 1, 'position' => 20), + 'address' => array('type' => 'varchar(128)', 'label' => 'Address', 'enabled' => 1, 'visible' => 1, 'notnull' => 1, 'showoncombobox' => 3, 'index' => 1, 'position' => 30), + 'note_private' => array('type' => 'html', 'label' => 'NotePrivate', 'enabled' => (!getDolGlobalInt('MAIN_LIST_HIDE_PRIVATE_NOTES')), 'visible' => 3, 'position' => 35), + 'role' => array('type' => 'checkbox', 'label' => 'Role', 'enabled' => 1, 'visible' => 1, 'notnull' => 1, 'showoncombobox' => 4, 'index' => 1, 'position' => 40), + 'birthday' => array('type' => 'date', 'label' => 'Birthday', 'enabled' => 1, 'visible' => -1, 'notnull' => 0, 'position' => 45), + 'statut' => array('type' => 'integer', 'label' => 'Status', 'enabled' => 1, 'visible' => 1, 'notnull' => 1, 'default' => '0', 'index' => 1, 'position' => 50, 'arrayofkeyval' => array(0 => $contactstatic->LibStatut(0, 1), 1 => $contactstatic->LibStatut(1, 1))), ); // Definition of fields for list $arrayfields = array( - 't.rowid'=>array('label'=>"TechnicalID", 'checked'=>(getDolGlobalString('MAIN_SHOW_TECHNICAL_ID') ? 1 : 0), 'enabled'=>(getDolGlobalString('MAIN_SHOW_TECHNICAL_ID') ? 1 : 0), 'position'=>1), - 't.name'=>array('label'=>"Name", 'checked'=>1, 'position'=>10), - 't.poste'=>array('label'=>"PostOrFunction", 'checked'=>1, 'position'=>20), - 't.address'=>array('label'=>(empty($conf->dol_optimize_smallscreen) ? $langs->trans("Address").' / '.$langs->trans("Phone").' / '.$langs->trans("Email") : $langs->trans("Address")), 'checked'=>1, 'position'=>30), - 't.note_private' => array('label' => 'NotePrivate', 'checked' => 0, 'position'=>35), - 'sc.role'=>array('label'=>"ContactByDefaultFor", 'checked'=>1, 'position'=>40), - 't.birthday'=>array('label'=>"Birthday", 'checked'=>0, 'position'=>45), - 't.statut'=>array('label'=>"Status", 'checked'=>1, 'position'=>50, 'class'=>'center'), + 't.rowid' => array('label' => "TechnicalID", 'checked' => (getDolGlobalString('MAIN_SHOW_TECHNICAL_ID') ? 1 : 0), 'enabled' => (getDolGlobalString('MAIN_SHOW_TECHNICAL_ID') ? 1 : 0), 'position' => 1), + 't.name' => array('label' => "Name", 'checked' => 1, 'position' => 10), + 't.poste' => array('label' => "PostOrFunction", 'checked' => 1, 'position' => 20), + 't.address' => array('label' => (empty($conf->dol_optimize_smallscreen) ? $langs->trans("Address").' / '.$langs->trans("Phone").' / '.$langs->trans("Email") : $langs->trans("Address")), 'checked' => 1, 'position' => 30), + 't.note_private' => array('label' => 'NotePrivate', 'checked' => 0, 'position' => 35), + 'sc.role' => array('label' => "ContactByDefaultFor", 'checked' => 1, 'position' => 40), + 't.birthday' => array('label' => "Birthday", 'checked' => 0, 'position' => 45), + 't.statut' => array('label' => "Status", 'checked' => 1, 'position' => 50, 'class' => 'center'), ); // Extra fields if (!empty($extrafields->attributes[$contactstatic->table_element]['label']) && is_array($extrafields->attributes[$contactstatic->table_element]['label']) && count($extrafields->attributes[$contactstatic->table_element]['label'])) { foreach ($extrafields->attributes[$contactstatic->table_element]['label'] as $key => $val) { if (!empty($extrafields->attributes[$contactstatic->table_element]['list'][$key])) { $arrayfields["ef.".$key] = array( - 'label'=>$extrafields->attributes[$contactstatic->table_element]['label'][$key], - 'checked'=>((dol_eval($extrafields->attributes[$contactstatic->table_element]['list'][$key], 1, 1, '1') < 0) ? 0 : 1), - 'position'=>1000 + $extrafields->attributes[$contactstatic->table_element]['pos'][$key], - 'enabled' => (abs((int) dol_eval($extrafields->attributes[$contactstatic->table_element]['list'][$key], 1)) != 3 && dol_eval($extrafields->attributes[$contactstatic->table_element]['perms'][$key], 1, 1, '1')) + 'label' => $extrafields->attributes[$contactstatic->table_element]['label'][$key], + 'checked' => (((int) dol_eval($extrafields->attributes[$contactstatic->table_element]['list'][$key], 1, 1, '1') < 0) ? 0 : 1), + 'position' => 1000 + $extrafields->attributes[$contactstatic->table_element]['pos'][$key], + 'enabled' => (abs((int) dol_eval($extrafields->attributes[$contactstatic->table_element]['list'][$key], 1)) != 3 && (int) dol_eval($extrafields->attributes[$contactstatic->table_element]['perms'][$key], 1, 1, '1')) ); } } @@ -1151,18 +1248,18 @@ function show_contacts($conf, $langs, $db, $object, $backtopage = '', $showuserl $mode = 'view'; $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; - $selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')) : ''); // This also change content of $arrayfields + $selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) : ''); // This also change content of $arrayfields $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); print '
'; // You can use div-table-responsive-no-min if you don't need reserved height for your table print "\n".'
'.$langs->trans("Ref").''.$langs->trans("Name").''.$langs->trans("DateStart").''.$langs->trans("DateEnd").''.$langs->trans("OpportunityAmountShort").''.$langs->trans("OpportunityStatusShort").''.$langs->trans("OpportunityProbabilityShort").''.$langs->trans("Status").'
'; + print $projecttmp->getNomUrl(1, '', 0, '', '-', 0, 1, '', 'project:'.$_SERVER["PHP_SELF"].'?socid=__SOCID__'); + print ''.dol_escape_htmltag($obj->title).''.dol_print_date($db->jdate($obj->do), "day").''.dol_print_date($db->jdate($obj->de), "day").''; + if ($obj->opp_status_code) { + print ''.price($obj->opp_amount, 1, '', 1, -1, -1, '').''; + } + print ''; + if ($obj->opp_status_code) { + print $langs->trans("OppStatus".$obj->opp_status_code); + } + print ''; + if ($obj->opp_percent) { + print price($obj->opp_percent, 1, '', 1, 0).'%'; + } + print ''.$projecttmp->getLibStatut(5).'
'.$langs->trans("None").'
'."\n"; - $param = "socid=".urlencode($object->id); + $param = "socid=".urlencode((string) ($object->id)); if ($search_rowid != '') { - $param .= '&search_rowid='.urlencode($search_rowid); + $param .= '&search_rowid='.urlencode((string) ($search_rowid)); } if ($search_status != '') { - $param .= '&search_status='.urlencode($search_status); + $param .= '&search_status='.urlencode((string) ($search_status)); } if (count($search_roles) > 0) { $param .= implode('&search_roles[]=', $search_roles); @@ -1273,7 +1370,7 @@ function show_contacts($conf, $langs, $db, $object, $backtopage = '', $showuserl if (!empty($arrayfields['t.'.$key]['checked']) || !empty($arrayfields['sc.'.$key]['checked'])) { print ''; } @@ -1483,7 +1587,8 @@ function show_contacts($conf, $langs, $db, $object, $backtopage = '', $showuserl if ($showuserlogin) { print ''; } @@ -1550,16 +1662,16 @@ function show_contacts($conf, $langs, $db, $object, $backtopage = '', $showuserl /** * Show html area with actions to do * - * @param Conf $conf Object conf - * @param Translate $langs Object langs - * @param DoliDB $db Object db - * @param Adherent|Societe $filterobj Object thirdparty or member - * @param Contact $objcon Object contact - * @param int $noprint Return string but does not output it - * @param int $actioncode Filter on actioncode - * @return string|void Return html part or void if noprint is 1 + * @param Conf $conf Object conf + * @param Translate $langs Object langs + * @param DoliDB $db Object db + * @param Adherent|Societe $filterobj Object thirdparty or member + * @param Contact $objcon Object contact + * @param int $noprint Return string but does not output it + * @param string|string[] $actioncode Filter on actioncode + * @return string|void Return html part or void if noprint is 1 */ -function show_actions_todo($conf, $langs, $db, $filterobj, $objcon = '', $noprint = 0, $actioncode = '') +function show_actions_todo($conf, $langs, $db, $filterobj, $objcon = null, $noprint = 0, $actioncode = '') { global $user, $conf; @@ -1590,18 +1702,18 @@ function show_actions_todo($conf, $langs, $db, $filterobj, $objcon = '', $noprin * @param string $module You can add module name here if elementtype in table llx_actioncomm is objectkey@module * @return string|void Return html part or void if noprint is 1 */ -function show_actions_done($conf, $langs, $db, $filterobj, $objcon = '', $noprint = 0, $actioncode = '', $donetodo = 'done', $filters = array(), $sortfield = 'a.datep,a.id', $sortorder = 'DESC', $module = '') +function show_actions_done($conf, $langs, $db, $filterobj, $objcon = null, $noprint = 0, $actioncode = '', $donetodo = 'done', $filters = array(), $sortfield = 'a.datep,a.id', $sortorder = 'DESC', $module = '') { global $user, $conf, $hookmanager; global $form; global $param, $massactionbutton; - $start_year = GETPOST('dateevent_startyear', 'int'); - $start_month = GETPOST('dateevent_startmonth', 'int'); - $start_day = GETPOST('dateevent_startday', 'int'); - $end_year = GETPOST('dateevent_endyear', 'int'); - $end_month = GETPOST('dateevent_endmonth', 'int'); - $end_day = GETPOST('dateevent_endday', 'int'); + $start_year = GETPOSTINT('dateevent_startyear'); + $start_month = GETPOSTINT('dateevent_startmonth'); + $start_day = GETPOSTINT('dateevent_startday'); + $end_year = GETPOSTINT('dateevent_endyear'); + $end_month = GETPOSTINT('dateevent_endmonth'); + $end_day = GETPOSTINT('dateevent_endday'); $tms_start = ''; $tms_end = ''; @@ -1615,7 +1727,7 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon = '', $noprin $tms_start = ''; $tms_end = ''; } - dol_include_once('/comm/action/class/actioncomm.class.php'); + require_once DOL_DOCUMENT_ROOT . '/comm/action/class/actioncomm.class.php'; // Check parameters if (!is_object($filterobj) && !is_object($objcon)) { @@ -1685,7 +1797,7 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon = '', $noprin $parameters = array('sql' => &$sql, 'filterobj' => $filterobj, 'objcon' => $objcon); $reshook = $hookmanager->executeHooks('showActionsDoneListSelect', $parameters); // Note that $action and $object may have been modified by hook if (!empty($hookmanager->resPrint)) { - $sql.= $hookmanager->resPrint; + $sql .= $hookmanager->resPrint; } $sql .= " FROM ".MAIN_DB_PREFIX."actioncomm as a"; @@ -1707,7 +1819,7 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon = '', $noprin $parameters = array('sql' => &$sql, 'filterobj' => $filterobj, 'objcon' => $objcon); $reshook = $hookmanager->executeHooks('showActionsDoneListFrom', $parameters); // Note that $action and $object may have been modified by hook if (!empty($hookmanager->resPrint)) { - $sql.= $hookmanager->resPrint; + $sql .= $hookmanager->resPrint; } if (is_object($filterobj) && in_array(get_class($filterobj), array('Societe', 'Client', 'Fournisseur'))) { $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."socpeople as sp ON a.fk_contact = sp.rowid"; @@ -1828,7 +1940,7 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon = '', $noprin $parameters = array('sql' => &$sql, 'filterobj' => $filterobj, 'objcon' => $objcon, 'module' => $module); $reshook = $hookmanager->executeHooks('showActionsDoneListWhere', $parameters); // Note that $action and $object may have been modified by hook if (!empty($hookmanager->resPrint)) { - $sql.= $hookmanager->resPrint; + $sql .= $hookmanager->resPrint; } if (is_array($actioncode)) { @@ -1892,48 +2004,48 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon = '', $noprin } $histo[$numaction] = array( - 'type'=>$obj->type, - 'tododone'=>$tododone, - 'id'=>$obj->id, - 'datestart'=>$db->jdate($obj->dp), - 'dateend'=>$db->jdate($obj->dp2), - 'note'=>$obj->label, - 'percent'=>$obj->percent, + 'type' => $obj->type, + 'tododone' => $tododone, + 'id' => $obj->id, + 'datestart' => $db->jdate($obj->dp), + 'dateend' => $db->jdate($obj->dp2), + 'note' => $obj->label, + 'percent' => $obj->percent, - 'userid'=>$obj->user_id, - 'login'=>$obj->user_login, - 'userfirstname'=>$obj->user_firstname, - 'userlastname'=>$obj->user_lastname, - 'userphoto'=>$obj->user_photo, + 'userid' => $obj->user_id, + 'login' => $obj->user_login, + 'userfirstname' => $obj->user_firstname, + 'userlastname' => $obj->user_lastname, + 'userphoto' => $obj->user_photo, - 'contact_id'=>$obj->fk_contact, + 'contact_id' => $obj->fk_contact, 'socpeopleassigned' => $contactaction->socpeopleassigned, 'lastname' => empty($obj->lastname) ? '' : $obj->lastname, 'firstname' => empty($obj->firstname) ? '' : $obj->firstname, - 'fk_element'=>$obj->fk_element, - 'elementtype'=>$obj->elementtype, + 'fk_element' => $obj->fk_element, + 'elementtype' => $obj->elementtype, // Type of event - 'acode'=>$obj->acode, - 'alabel'=>$obj->alabel, - 'libelle'=>$obj->alabel, // deprecated - 'apicto'=>$obj->apicto + 'acode' => $obj->acode, + 'alabel' => $obj->alabel, + 'libelle' => $obj->alabel, // deprecated + 'apicto' => $obj->apicto ); } else { $histo[$numaction] = array( - 'type'=>$obj->type, - 'tododone'=>'done', - 'id'=>$obj->id, - 'datestart'=>$db->jdate($obj->dp), - 'dateend'=>$db->jdate($obj->dp2), - 'note'=>$obj->label, - 'percent'=>$obj->percent, - 'acode'=>$obj->acode, + 'type' => $obj->type, + 'tododone' => 'done', + 'id' => $obj->id, + 'datestart' => $db->jdate($obj->dp), + 'dateend' => $db->jdate($obj->dp2), + 'note' => $obj->label, + 'percent' => $obj->percent, + 'acode' => $obj->acode, - 'userid'=>$obj->user_id, - 'login'=>$obj->user_login, - 'userfirstname'=>$obj->user_firstname, - 'userlastname'=>$obj->user_lastname, - 'userphoto'=>$obj->user_photo + 'userid' => $obj->user_id, + 'login' => $obj->user_login, + 'userfirstname' => $obj->user_firstname, + 'userlastname' => $obj->user_lastname, + 'userphoto' => $obj->user_photo ); } @@ -1945,7 +2057,9 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon = '', $noprin } } - if (isModEnabled('agenda')|| (isModEnabled('mailing') && !empty($objcon->email))) { + '@phan-var-force array,datestart:int,dateend:int,fk_element:string,elementtype:string,contact_id:string,lastname:string,firstname:string,contact_photo:string,socpeaopleassigned:int[],login:string,userfirstname:string,userlastname:string,userphoto:string}> $histo'; + + if (isModEnabled('agenda') || (isModEnabled('mailing') && !empty($objcon->email))) { $delay_warning = $conf->global->MAIN_DELAY_ACTIONS_TODO * 24 * 60 * 60; require_once DOL_DOCUMENT_ROOT.'/comm/action/class/actioncomm.class.php'; @@ -2230,7 +2344,6 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon = '', $noprin } $out .= "\n"; - $i++; } if (empty($histo)) { $colspan = 9; diff --git a/htdocs/core/lib/contact.lib.php b/htdocs/core/lib/contact.lib.php index 6a6bcd45213..747540dbfde 100644 --- a/htdocs/core/lib/contact.lib.php +++ b/htdocs/core/lib/contact.lib.php @@ -93,7 +93,7 @@ function contact_prepare_head(Contact $object) } // Related items - if (isModEnabled('commande') || isModEnabled("propal") || isModEnabled('facture') || isModEnabled('ficheinter') || isModEnabled("supplier_proposal") || isModEnabled("supplier_order") || isModEnabled("supplier_invoice")) { + if (isModEnabled('order') || isModEnabled("propal") || isModEnabled('invoice') || isModEnabled('intervention') || isModEnabled("supplier_proposal") || isModEnabled("supplier_order") || isModEnabled("supplier_invoice")) { $head[$tab][0] = DOL_URL_ROOT.'/contact/consumption.php?id='.$object->id; $head[$tab][1] = $langs->trans("Referers"); $head[$tab][2] = 'consumption'; diff --git a/htdocs/core/lib/customreports.lib.php b/htdocs/core/lib/customreports.lib.php new file mode 100644 index 00000000000..b4011bf0c0e --- /dev/null +++ b/htdocs/core/lib/customreports.lib.php @@ -0,0 +1,491 @@ + +* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * or see https://www.gnu.org/ + */ + +/** + * \file htdocs/core/lib/customreports.lib.php + * \brief Set of function to manipulate custom reports + */ + +/** + * Fill arrayofmesures for an object + * + * @param mixed $object Any object + * @param string $tablealias Alias of table + * @param string $labelofobject Label of object + * @param array $arrayofmesures Array of measures already filled + * @param int $level Level + * @param int $count Count + * @param string $tablepath Path of all tables ('t' or 't,contract' or 't,contract,societe'...) + * @return array Array of measures + */ +function fillArrayOfMeasures($object, $tablealias, $labelofobject, &$arrayofmesures, $level = 0, &$count = 0, &$tablepath = '') +{ + global $langs, $extrafields, $db; + + if (empty($object)) { // Protection against bad use of method + return array(); + } + if ($level > 10) { // Protection against infinite loop + return $arrayofmesures; + } + + if (empty($tablepath)) { + $tablepath = $object->table_element.'='.$tablealias; + } else { + $tablepath .= ','.$object->table_element.'='.$tablealias; + } + + if ($level == 0) { + // Add the count of record only for the main/first level object. Parents are necessarily unique for each record. + $arrayofmesures[$tablealias.'.count'] = array( + 'label' => img_picto('', (empty($object->picto) ? 'generic' : $object->picto), 'class="pictofixedwidth"').$labelofobject.': '.$langs->trans("Number"), + 'labelnohtml' => $labelofobject.': '.$langs->trans("Number"), + 'position' => 0, + 'table' => $object->table_element, + 'tablefromt' => $tablepath + ); + } + + // Note: here $tablealias can be 't' or 't__fk_contract' or 't_fk_contract_fk_soc' + + // Add main fields of object + foreach ($object->fields as $key => $val) { + if (!empty($val['isameasure']) && (!isset($val['enabled']) || (int) dol_eval($val['enabled'], 1, 1, '1'))) { + $position = (empty($val['position']) ? 0 : intval($val['position'])); + $arrayofmesures[$tablealias.'.'.$key.'-sum'] = array( + 'label' => img_picto('', (empty($object->picto) ? 'generic' : $object->picto), 'class="pictofixedwidth"').$labelofobject.': '.$langs->trans($val['label']).' ('.$langs->trans("Sum").')', + 'labelnohtml' => $labelofobject.': '.$langs->trans($val['label']), + 'position' => ($position + ($count * 100000)).'.1', + 'table' => $object->table_element, + 'tablefromt' => $tablepath + ); + $arrayofmesures[$tablealias.'.'.$key.'-average'] = array( + 'label' => img_picto('', (empty($object->picto) ? 'generic' : $object->picto), 'class="pictofixedwidth"').$labelofobject.': '.$langs->trans($val['label']).' ('.$langs->trans("Average").')', + 'labelnohtml' => $labelofobject.': '.$langs->trans($val['label']), + 'position' => ($position + ($count * 100000)).'.2', + 'table' => $object->table_element, + 'tablefromt' => $tablepath + ); + $arrayofmesures[$tablealias.'.'.$key.'-min'] = array( + 'label' => img_picto('', (empty($object->picto) ? 'generic' : $object->picto), 'class="pictofixedwidth"').$labelofobject.': '.$langs->trans($val['label']).' ('.$langs->trans("Minimum").')', + 'labelnohtml' => $labelofobject.': '.$langs->trans($val['label']), + 'position' => ($position + ($count * 100000)).'.3', + 'table' => $object->table_element, + 'tablefromt' => $tablepath + ); + $arrayofmesures[$tablealias.'.'.$key.'-max'] = array( + 'label' => img_picto('', (empty($object->picto) ? 'generic' : $object->picto), 'class="pictofixedwidth"').$labelofobject.': '.$langs->trans($val['label']).' ('.$langs->trans("Maximum").')', + 'labelnohtml' => $labelofobject.': '.$langs->trans($val['label']), + 'position' => ($position + ($count * 100000)).'.4', + 'table' => $object->table_element, + 'tablefromt' => $tablepath + ); + } + } + // Add extrafields to Measures + if (!empty($object->isextrafieldmanaged) && isset($extrafields->attributes[$object->table_element]['label'])) { + foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) { + if (!empty($extrafields->attributes[$object->table_element]['totalizable'][$key]) && (!isset($extrafields->attributes[$object->table_element]['enabled'][$key]) || (int) dol_eval($extrafields->attributes[$object->table_element]['enabled'][$key], 1, 1, '1'))) { + // @phan-suppress-next-line PhanTypeMismatchDimAssignment + $position = (!empty($val['position']) ? $val['position'] : 0); + $arrayofmesures[preg_replace('/^t/', 'te', $tablealias).'.'.$key.'-sum'] = array( + 'label' => img_picto('', (empty($object->picto) ? 'generic' : $object->picto), 'class="pictofixedwidth"').$labelofobject.': '.$langs->trans($extrafields->attributes[$object->table_element]['label'][$key]).' ('.$langs->trans("Sum").')', + 'labelnohtml' => $labelofobject.': '.$langs->trans($val), + 'position' => ($position + ($count * 100000)).'.1', + 'table' => $object->table_element, + 'tablefromt' => $tablepath + ); + $arrayofmesures[preg_replace('/^t/', 'te', $tablealias).'.'.$key.'-average'] = array( + 'label' => img_picto('', (empty($object->picto) ? 'generic' : $object->picto), 'class="pictofixedwidth"').$labelofobject.': '.$langs->trans($extrafields->attributes[$object->table_element]['label'][$key]).' ('.$langs->trans("Average").')', + 'labelnohtml' => $labelofobject.': '.$langs->trans($val), + 'position' => ($position + ($count * 100000)).'.2', + 'table' => $object->table_element, + 'tablefromt' => $tablepath + ); + $arrayofmesures[preg_replace('/^t/', 'te', $tablealias).'.'.$key.'-min'] = array( + 'label' => img_picto('', (empty($object->picto) ? 'generic' : $object->picto), 'class="pictofixedwidth"').$labelofobject.': '.$langs->trans($extrafields->attributes[$object->table_element]['label'][$key]).' ('.$langs->trans("Minimum").')', + 'labelnohtml' => $labelofobject.': '.$langs->trans($val), + 'position' => ($position + ($count * 100000)).'.3', + 'table' => $object->table_element, + 'tablefromt' => $tablepath + ); + $arrayofmesures[preg_replace('/^t/', 'te', $tablealias).'.'.$key.'-max'] = array( + 'label' => img_picto('', (empty($object->picto) ? 'generic' : $object->picto), 'class="pictofixedwidth"').$labelofobject.': '.$langs->trans($extrafields->attributes[$object->table_element]['label'][$key]).' ('.$langs->trans("Maximum").')', + 'labelnohtml' => $labelofobject.': '.$langs->trans($val), + 'position' => ($position + ($count * 100000)).'.4', + 'table' => $object->table_element, + 'tablefromt' => $tablepath + ); + } + } + } + // Add fields for parent objects + foreach ($object->fields as $key => $val) { + if (preg_match('/^[^:]+:[^:]+:/', $val['type'])) { + $tmptype = explode(':', $val['type'], 4); + if ($tmptype[0] == 'integer' && !empty($tmptype[1]) && !empty($tmptype[2])) { + $newobject = $tmptype[1]; + dol_include_once($tmptype[2]); + if (class_exists($newobject)) { + $tmpobject = new $newobject($db); + //var_dump($key); var_dump($tmpobject->element); var_dump($val['label']); var_dump($tmptype); var_dump('t-'.$key); + $count++; + $arrayofmesures = fillArrayOfMeasures($tmpobject, $tablealias.'__'.$key, $langs->trans($val['label']), $arrayofmesures, $level + 1, $count, $tablepath); + } else { + print 'For property '.$object->element.'->'.$key.', type="'.$val['type'].'": Failed to find class '.$newobject." in file ".$tmptype[2]."
\n"; + } + } + } + } + + return $arrayofmesures; +} + + +/** + * Fill arrayofmesures for an object + * + * @param mixed $object Any object + * @param string $tablealias Alias of table ('t' for example) + * @param string $labelofobject Label of object + * @param array $arrayofxaxis Array of xaxis already filled + * @param int $level Level + * @param int $count Count + * @param string $tablepath Path of all tables ('t' or 't,contract' or 't,contract,societe'...) + * @return array Array of xaxis + */ +function fillArrayOfXAxis($object, $tablealias, $labelofobject, &$arrayofxaxis, $level = 0, &$count = 0, &$tablepath = '') +{ + global $langs, $extrafields, $db; + + if (empty($object)) { // Protection against bad use of method + return array(); + } + if ($level >= 3) { // Limit scan on 2 levels max + return $arrayofxaxis; + } + + if (empty($tablepath)) { + $tablepath = $object->table_element.'='.$tablealias; + } else { + $tablepath .= ','.$object->table_element.'='.$tablealias; + } + + $YYYY = substr($langs->trans("Year"), 0, 1).substr($langs->trans("Year"), 0, 1).substr($langs->trans("Year"), 0, 1).substr($langs->trans("Year"), 0, 1); + $MM = substr($langs->trans("Month"), 0, 1).substr($langs->trans("Month"), 0, 1); + $DD = substr($langs->trans("Day"), 0, 1).substr($langs->trans("Day"), 0, 1); + $HH = substr($langs->trans("Hour"), 0, 1).substr($langs->trans("Hour"), 0, 1); + $MI = substr($langs->trans("Minute"), 0, 1).substr($langs->trans("Minute"), 0, 1); + $SS = substr($langs->trans("Second"), 0, 1).substr($langs->trans("Second"), 0, 1); + + /*if ($level > 0) { + var_dump($object->element.' '.$object->isextrafieldmanaged); + }*/ + + // Note: here $tablealias can be 't' or 't__fk_contract' or 't_fk_contract_fk_soc' + + // Add main fields of object + foreach ($object->fields as $key => $val) { + if (empty($val['measure'])) { + if (in_array($key, array( + 'id', 'ref_ext', 'rowid', 'entity', 'last_main_doc', 'logo', 'logo_squarred', 'extraparams', + 'parent', 'photo', 'socialnetworks', 'webservices_url', 'webservices_key'))) { + continue; + } + if (isset($val['enabled']) && ! (int) dol_eval($val['enabled'], 1, 1, '1')) { + continue; + } + if (isset($val['visible']) && ! (int) dol_eval($val['visible'], 1, 1, '1')) { + continue; + } + if (preg_match('/^fk_/', $key) && !preg_match('/^fk_statu/', $key)) { + continue; + } + if (preg_match('/^pass/', $key)) { + continue; + } + if (in_array($val['type'], array('html', 'text'))) { + continue; + } + if (in_array($val['type'], array('timestamp', 'date', 'datetime'))) { + $position = (empty($val['position']) ? 0 : intval($val['position'])); + $arrayofxaxis[$tablealias.'.'.$key.'-year'] = array( + 'label' => img_picto('', (empty($object->picto) ? 'generic' : $object->picto), 'class="pictofixedwidth"').' '.$labelofobject.': '.$langs->trans($val['label']).' ('.$YYYY.')', + 'labelnohtml' => $labelofobject.': '.$langs->trans($val['label']), + 'position' => ($position + ($count * 100000)).'.1', + 'table' => $object->table_element, + 'tablefromt' => $tablepath + ); + $arrayofxaxis[$tablealias.'.'.$key.'-month'] = array( + 'label' => img_picto('', (empty($object->picto) ? 'generic' : $object->picto), 'class="pictofixedwidth"').' '.$labelofobject.': '.$langs->trans($val['label']).' ('.$YYYY.'-'.$MM.')', + 'labelnohtml' => $labelofobject.': '.$langs->trans($val['label']), + 'position' => ($position + ($count * 100000)).'.2', + 'table' => $object->table_element, + 'tablefromt' => $tablepath + ); + $arrayofxaxis[$tablealias.'.'.$key.'-day'] = array( + 'label' => img_picto('', (empty($object->picto) ? 'generic' : $object->picto), 'class="pictofixedwidth"').' '.$labelofobject.': '.$langs->trans($val['label']).' ('.$YYYY.'-'.$MM.'-'.$DD.')', + 'labelnohtml' => $labelofobject.': '.$langs->trans($val['label']), + 'position' => ($position + ($count * 100000)).'.3', + 'table' => $object->table_element, + 'tablefromt' => $tablepath + ); + } else { + $position = (empty($val['position']) ? 0 : intval($val['position'])); + $arrayofxaxis[$tablealias.'.'.$key] = array( + 'label' => img_picto('', (empty($object->picto) ? 'generic' : $object->picto), 'class="pictofixedwidth"').' '.$labelofobject.': '.$langs->trans($val['label']), + 'labelnohtml' => $labelofobject.': '.$langs->trans($val['label']), + 'position' => ($position + ($count * 100000)), + 'table' => $object->table_element, + 'tablefromt' => $tablepath + ); + } + } + } + + // Add extrafields to X-Axis + if (!empty($object->isextrafieldmanaged) && isset($extrafields->attributes[$object->table_element]['label'])) { + foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) { + if ($extrafields->attributes[$object->table_element]['type'][$key] == 'separate') { + continue; + } + if (!empty($extrafields->attributes[$object->table_element]['totalizable'][$key])) { + continue; + } + + if (in_array($extrafields->attributes[$object->table_element]['type'][$key], array('timestamp', 'date', 'datetime'))) { + $position = (empty($extrafields->attributes[$object->table_element]['pos'][$key]) ? 0 : intval($extrafields->attributes[$object->table_element]['pos'][$key])); + $arrayofxaxis[preg_replace('/^t/', 'te', $tablealias).'.'.$key.'-year'] = array( + 'label' => img_picto('', (empty($object->picto) ? 'generic' : $object->picto), 'class="pictofixedwidth"').' '.$labelofobject.': '.$langs->trans($val).' ('.$YYYY.')', + 'labelnohtml' => $labelofobject.': '.$langs->trans($val), + 'position' => ($position + ($count * 100000)).'.1', + 'table' => $object->table_element, + 'tablefromt' => $tablepath + ); + $arrayofxaxis[preg_replace('/^t/', 'te', $tablealias).'.'.$key.'-month'] = array( + 'label' => img_picto('', (empty($object->picto) ? 'generic' : $object->picto), 'class="pictofixedwidth"').' '.$labelofobject.': '.$langs->trans($val).' ('.$YYYY.'-'.$MM.')', + 'labelnohtml' => $labelofobject.': '.$langs->trans($val), + 'position' => ($position + ($count * 100000)).'.2', + 'table' => $object->table_element, + 'tablefromt' => $tablepath + ); + $arrayofxaxis[preg_replace('/^t/', 'te', $tablealias).'.'.$key.'-day'] = array( + 'label' => img_picto('', (empty($object->picto) ? 'generic' : $object->picto), 'class="pictofixedwidth"').' '.$labelofobject.': '.$langs->trans($val).' ('.$YYYY.'-'.$MM.'-'.$DD.')', + 'labelnohtml' => $labelofobject.': '.$langs->trans($val), + 'position' => ($position + ($count * 100000)).'.3', + 'table' => $object->table_element, + 'tablefromt' => $tablepath + ); + } else { + $arrayofxaxis[preg_replace('/^t/', 'te', $tablealias).'.'.$key] = array( + 'label' => img_picto('', (empty($object->picto) ? 'generic' : $object->picto), 'class="pictofixedwidth"').' '.$labelofobject.': '.$langs->trans($val), + 'labelnohtml' => $labelofobject.': '.$langs->trans($val), + 'position' => 1000 + (int) $extrafields->attributes[$object->table_element]['pos'][$key] + ($count * 100000), + 'table' => $object->table_element, + 'tablefromt' => $tablepath + ); + } + } + } + + // Add fields for parent objects + foreach ($object->fields as $key => $val) { + if (preg_match('/^[^:]+:[^:]+:/', $val['type'])) { + $tmptype = explode(':', $val['type'], 4); + if ($tmptype[0] == 'integer' && $tmptype[1] && $tmptype[2]) { + $newobject = $tmptype[1]; + dol_include_once($tmptype[2]); + if (class_exists($newobject)) { + $tmpobject = new $newobject($db); + //var_dump($key); var_dump($tmpobject->element); var_dump($val['label']); var_dump($tmptype); var_dump('t-'.$key); + $count++; + $arrayofxaxis = fillArrayOfXAxis($tmpobject, $tablealias.'__'.$key, $langs->trans($val['label']), $arrayofxaxis, $level + 1, $count, $tablepath); + } else { + print 'For property '.$object->element.'->'.$key.', type="'.$val['type'].'": Failed to find class '.$newobject." in file ".$tmptype[2]."
\n"; + } + } + } + } + + return $arrayofxaxis; +} + + +/** + * Fill arrayofgrupby for an object + * + * @param mixed $object Any object + * @param string $tablealias Alias of table + * @param string $labelofobject Label of object + * @param array $arrayofgroupby Array of groupby already filled + * @param int $level Level + * @param int $count Count + * @param string $tablepath Path of all tables ('t' or 't,contract' or 't,contract,societe'...) + * @return array Array of groupby + */ +function fillArrayOfGroupBy($object, $tablealias, $labelofobject, &$arrayofgroupby, $level = 0, &$count = 0, &$tablepath = '') +{ + global $langs, $extrafields, $db; + + if (empty($object)) { // Protection against bad use of method + return array(); + } + if ($level >= 3) { + return $arrayofgroupby; + } + + if (empty($tablepath)) { + $tablepath = $object->table_element.'='.$tablealias; + } else { + $tablepath .= ','.$object->table_element.'='.$tablealias; + } + + $YYYY = substr($langs->trans("Year"), 0, 1).substr($langs->trans("Year"), 0, 1).substr($langs->trans("Year"), 0, 1).substr($langs->trans("Year"), 0, 1); + $MM = substr($langs->trans("Month"), 0, 1).substr($langs->trans("Month"), 0, 1); + $DD = substr($langs->trans("Day"), 0, 1).substr($langs->trans("Day"), 0, 1); + $HH = substr($langs->trans("Hour"), 0, 1).substr($langs->trans("Hour"), 0, 1); + $MI = substr($langs->trans("Minute"), 0, 1).substr($langs->trans("Minute"), 0, 1); + $SS = substr($langs->trans("Second"), 0, 1).substr($langs->trans("Second"), 0, 1); + + // Note: here $tablealias can be 't' or 't__fk_contract' or 't_fk_contract_fk_soc' + + // Add main fields of object + foreach ($object->fields as $key => $val) { + if (empty($val['isameasure'])) { + if (in_array($key, array( + 'id', 'ref_ext', 'rowid', 'entity', 'last_main_doc', 'logo', 'logo_squarred', 'extraparams', + 'parent', 'photo', 'socialnetworks', 'webservices_url', 'webservices_key'))) { + continue; + } + if (isset($val['enabled']) && ! (int) dol_eval($val['enabled'], 1, 1, '1')) { + continue; + } + if (isset($val['visible']) && ! (int) dol_eval($val['visible'], 1, 1, '1')) { + continue; + } + if (preg_match('/^fk_/', $key) && !preg_match('/^fk_statu/', $key)) { + continue; + } + if (preg_match('/^pass/', $key)) { + continue; + } + if (in_array($val['type'], array('html', 'text'))) { + continue; + } + if (in_array($val['type'], array('timestamp', 'date', 'datetime'))) { + $position = (empty($val['position']) ? 0 : intval($val['position'])); + $arrayofgroupby[$tablealias.'.'.$key.'-year'] = array( + 'label' => img_picto('', (empty($object->picto) ? 'generic' : $object->picto), 'class="pictofixedwidth"').' '.$labelofobject.': '.$langs->trans($val['label']).' ('.$YYYY.')', + 'labelnohtml' => $labelofobject.': '.$langs->trans($val['label']), + 'position' => ($position + ($count * 100000)).'.1', + 'table' => $object->table_element, + 'tablefromt' => $tablepath + ); + $arrayofgroupby[$tablealias.'.'.$key.'-month'] = array( + 'label' => img_picto('', (empty($object->picto) ? 'generic' : $object->picto), 'class="pictofixedwidth"').' '.$labelofobject.': '.$langs->trans($val['label']).' ('.$YYYY.'-'.$MM.')', + 'labelnohtml' => $labelofobject.': '.$langs->trans($val['label']), + 'position' => ($position + ($count * 100000)).'.2', + 'table' => $object->table_element, + 'tablefromt' => $tablepath + ); + $arrayofgroupby[$tablealias.'.'.$key.'-day'] = array( + 'label' => img_picto('', (empty($object->picto) ? 'generic' : $object->picto), 'class="pictofixedwidth"').' '.$labelofobject.': '.$langs->trans($val['label']).' ('.$YYYY.'-'.$MM.'-'.$DD.')', + 'labelnohtml' => $labelofobject.': '.$langs->trans($val['label']), + 'position' => ($position + ($count * 100000)).'.3', + 'table' => $object->table_element, + 'tablefromt' => $tablepath + ); + } else { + $position = (empty($val['position']) ? 0 : intval($val['position'])); + $arrayofgroupby[$tablealias.'.'.$key] = array( + 'label' => img_picto('', (empty($object->picto) ? 'generic' : $object->picto), 'class="pictofixedwidth"').' '.$labelofobject.': '.$langs->trans($val['label']), + 'labelnohtml' => $labelofobject.': '.$langs->trans($val['label']), + 'position' => ($position + ($count * 100000)), + 'table' => $object->table_element, + 'tablefromt' => $tablepath + ); + } + } + } + + // Add extrafields to Group by + if (!empty($object->isextrafieldmanaged) && isset($extrafields->attributes[$object->table_element]['label'])) { + foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) { + if ($extrafields->attributes[$object->table_element]['type'][$key] == 'separate') { + continue; + } + if (!empty($extrafields->attributes[$object->table_element]['totalizable'][$key])) { + continue; + } + + if (in_array($extrafields->attributes[$object->table_element]['type'][$key], array('timestamp', 'date', 'datetime'))) { + $position = (empty($extrafields->attributes[$object->table_element]['pos'][$key]) ? 0 : intval($extrafields->attributes[$object->table_element]['pos'][$key])); + $arrayofgroupby[preg_replace('/^t/', 'te', $tablealias).'.'.$key.'-year'] = array( + 'label' => img_picto('', (empty($object->picto) ? 'generic' : $object->picto), 'class="pictofixedwidth"').' '.$labelofobject.': '.$langs->trans($val).' ('.$YYYY.')', + 'labelnohtml' => $labelofobject.': '.$langs->trans($val), + 'position' => ($position + ($count * 100000)).'.1', + 'table' => $object->table_element, + 'tablefromt' => $tablepath + ); + $arrayofgroupby[preg_replace('/^t/', 'te', $tablealias).'.'.$key.'-month'] = array( + 'label' => img_picto('', (empty($object->picto) ? 'generic' : $object->picto), 'class="pictofixedwidth"').' '.$labelofobject.': '.$langs->trans($val).' ('.$YYYY.'-'.$MM.')', + 'labelnohtml' => $labelofobject.': '.$langs->trans($val), + 'position' => ($position + ($count * 100000)).'.2', + 'table' => $object->table_element, + 'tablefromt' => $tablepath + ); + $arrayofgroupby[preg_replace('/^t/', 'te', $tablealias).'.'.$key.'-day'] = array( + 'label' => img_picto('', (empty($object->picto) ? 'generic' : $object->picto), 'class="pictofixedwidth"').' '.$labelofobject.': '.$langs->trans($val).' ('.$YYYY.'-'.$MM.'-'.$DD.')', + 'labelnohtml' => $labelofobject.': '.$langs->trans($val), + 'position' => ($position + ($count * 100000)).'.3', + 'table' => $object->table_element, + 'tablefromt' => $tablepath + ); + } else { + $arrayofgroupby[preg_replace('/^t/', 'te', $tablealias).'.'.$key] = array( + 'label' => img_picto('', (empty($object->picto) ? 'generic' : $object->picto), 'class="pictofixedwidth"').' '.$labelofobject.': '.$langs->trans($val), + 'labelnohtml' => $labelofobject.': '.$langs->trans($val), + 'position' => 1000 + (int) $extrafields->attributes[$object->table_element]['pos'][$key] + ($count * 100000), + 'table' => $object->table_element, + 'tablefromt' => $tablepath + ); + } + } + } + + // Add fields for parent objects + foreach ($object->fields as $key => $val) { + if (preg_match('/^[^:]+:[^:]+:/', $val['type'])) { + $tmptype = explode(':', $val['type'], 4); + if ($tmptype[0] == 'integer' && $tmptype[1] && $tmptype[2]) { + $newobject = $tmptype[1]; + dol_include_once($tmptype[2]); + if (class_exists($newobject)) { + $tmpobject = new $newobject($db); + //var_dump($key); var_dump($tmpobject->element); var_dump($val['label']); var_dump($tmptype); var_dump('t-'.$key); + $count++; + $arrayofgroupby = fillArrayOfGroupBy($tmpobject, $tablealias.'__'.$key, $langs->trans($val['label']), $arrayofgroupby, $level + 1, $count, $tablepath); + } else { + print 'For property '.$object->element.'->'.$key.', type="'.$val['type'].'": Failed to find class '.$newobject." in file ".$tmptype[2]."
\n"; + } + } + } + } + + return $arrayofgroupby; +} diff --git a/htdocs/core/lib/date.lib.php b/htdocs/core/lib/date.lib.php index 9239d78cee3..8a08ef4141e 100644 --- a/htdocs/core/lib/date.lib.php +++ b/htdocs/core/lib/date.lib.php @@ -35,31 +35,31 @@ function get_tz_array() { $tzarray = array( - -11=>"Pacific/Midway", - -10=>"Pacific/Fakaofo", - -9=>"America/Anchorage", - -8=>"America/Los_Angeles", - -7=>"America/Dawson_Creek", - -6=>"America/Chicago", - -5=>"America/Bogota", - -4=>"America/Anguilla", - -3=>"America/Araguaina", - -2=>"America/Noronha", - -1=>"Atlantic/Azores", - 0=>"Africa/Abidjan", - 1=>"Europe/Paris", - 2=>"Europe/Helsinki", - 3=>"Europe/Moscow", - 4=>"Asia/Dubai", - 5=>"Asia/Karachi", - 6=>"Indian/Chagos", - 7=>"Asia/Jakarta", - 8=>"Asia/Hong_Kong", - 9=>"Asia/Tokyo", - 10=>"Australia/Sydney", - 11=>"Pacific/Noumea", - 12=>"Pacific/Auckland", - 13=>"Pacific/Enderbury" + -11 => "Pacific/Midway", + -10 => "Pacific/Fakaofo", + -9 => "America/Anchorage", + -8 => "America/Los_Angeles", + -7 => "America/Dawson_Creek", + -6 => "America/Chicago", + -5 => "America/Bogota", + -4 => "America/Anguilla", + -3 => "America/Araguaina", + -2 => "America/Noronha", + -1 => "Atlantic/Azores", + 0 => "Africa/Abidjan", + 1 => "Europe/Paris", + 2 => "Europe/Helsinki", + 3 => "Europe/Moscow", + 4 => "Asia/Dubai", + 5 => "Asia/Karachi", + 6 => "Indian/Chagos", + 7 => "Asia/Jakarta", + 8 => "Asia/Hong_Kong", + 9 => "Asia/Tokyo", + 10 => "Australia/Sydney", + 11 => "Pacific/Noumea", + 12 => "Pacific/Auckland", + 13 => "Pacific/Enderbury" ); return $tzarray; } @@ -296,11 +296,11 @@ function convertSecondToTime($iSecond, $format = 'all', $lengthOfDay = 86400, $l $sTime .= dol_print_date($iSecond, 'hourduration', true); } } elseif ($format == 'allhourminsec') { - return sprintf("%02d", ($sWeek * $lengthOfWeek * $nbHbyDay + $sDay * $nbHbyDay + (int) floor($iSecond/3600))).':'.sprintf("%02d", ((int) floor(($iSecond % 3600) / 60))).':'.sprintf("%02d", ((int) ($iSecond % 60))); + return sprintf("%02d", ($sWeek * $lengthOfWeek * $nbHbyDay + $sDay * $nbHbyDay + (int) floor($iSecond / 3600))).':'.sprintf("%02d", ((int) floor(($iSecond % 3600) / 60))).':'.sprintf("%02d", ((int) ($iSecond % 60))); } elseif ($format == 'allhourmin') { - return sprintf("%02d", ($sWeek * $lengthOfWeek * $nbHbyDay + $sDay * $nbHbyDay + (int) floor($iSecond/3600))).':'.sprintf("%02d", ((int) floor(($iSecond % 3600)/60))); + return sprintf("%02d", ($sWeek * $lengthOfWeek * $nbHbyDay + $sDay * $nbHbyDay + (int) floor($iSecond / 3600))).':'.sprintf("%02d", ((int) floor(($iSecond % 3600) / 60))); } elseif ($format == 'allhour') { - return sprintf("%02d", ($sWeek * $lengthOfWeek * $nbHbyDay + $sDay * $nbHbyDay + (int) floor($iSecond/3600))); + return sprintf("%02d", ($sWeek * $lengthOfWeek * $nbHbyDay + $sDay * $nbHbyDay + (int) floor($iSecond / 3600))); } } elseif ($format == 'hour') { // only hour part $sTime = dol_print_date($iSecond, '%H', true); @@ -431,12 +431,12 @@ function dol_stringtotime($string, $gm = 1) dol_syslog("dol_stringtotime call to function with deprecated parameter format", LOG_WARNING); // Date est au format 'DD/MM/YY' ou 'DD/MM/YY HH:MM:SS' // Date est au format 'DD/MM/YYYY' ou 'DD/MM/YYYY HH:MM:SS' - $sday = $reg[1]; - $smonth = $reg[2]; - $syear = $reg[3]; - $shour = $reg[4]; - $smin = $reg[5]; - $ssec = $reg[6]; + $sday = (int) $reg[1]; + $smonth = (int) $reg[2]; + $syear = (int) $reg[3]; + $shour = (int) $reg[4]; + $smin = (int) $reg[5]; + $ssec = (int) $reg[6]; if ($syear < 50) { $syear += 1900; } @@ -448,12 +448,12 @@ function dol_stringtotime($string, $gm = 1) || preg_match('/^([0-9]{4})-([0-9]{2})-([0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2})$/i', $string, $reg) // Convert date with format YYYY-MM-DD HH:MM:SS || preg_match('/^([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2})([0-9]{2})([0-9]{2})Z$/i', $string, $reg) // Convert date with format YYYYMMDDTHHMMSSZ ) { - $syear = $reg[1]; - $smonth = $reg[2]; - $sday = $reg[3]; - $shour = $reg[4]; - $smin = $reg[5]; - $ssec = $reg[6]; + $syear = (int) $reg[1]; + $smonth = (int) $reg[2]; + $sday = (int) $reg[3]; + $shour = (int) $reg[4]; + $smin = (int) $reg[5]; + $ssec = (int) $reg[6]; $string = sprintf("%04d%02d%02d%02d%02d%02d", $syear, $smonth, $sday, $shour, $smin, $ssec); } @@ -950,7 +950,7 @@ function num_public_holiday($timestampStart, $timestampEnd, $country_code = '', $jour_1sunsept = date("d", $date_1sunsept); $mois_1sunsept = date("m", $date_1sunsept); if ($jour_1sunsept == $jour && $mois_1sunsept == $mois) { - $ferie=true; + $ferie = true; } // Geneva fast in Switzerland } diff --git a/htdocs/core/lib/emaillayout.lib.php b/htdocs/core/lib/emaillayout.lib.php index 1240c2fa664..75b7b589c44 100644 --- a/htdocs/core/lib/emaillayout.lib.php +++ b/htdocs/core/lib/emaillayout.lib.php @@ -30,28 +30,28 @@ */ function getHtmlOfLayout($name) { + global $conf, $mysoc, $user, $langs; + if ($name == 'basic') { $out = '
-
- Gray rectangle -
-

Lorem, ipsum dolor sit amet consectetur adipisicing elit.

-

Lorem, ipsum dolor sit amet consectetur

- +
'; + if (!empty($mysoc->logo)) { + if (file_exists($conf->mycompany->dir_output.'/logos/'.$mysoc->logo)) { + $out .= ''; + } + } else { + $out .= 'Gray rectangle'; + } + $out .= '
+

'.$langs->trans('TitleOfMailHolder').'

- - - - Gray rectangle - -
'; +

'.$langs->trans('ContentOfMailHolder').'

+ '; + if (!(empty($user->signature))) { + $out .= '

'.dol_htmlentities($user->signature).'

'; + } + $out .= ''; } elseif ($name == 'news') { $out = '

Lorem, ipsum dolor sit amet consectetur adipisicing elit sit amet consectetur

diff --git a/htdocs/core/lib/expedition.lib.php b/htdocs/core/lib/expedition.lib.php index f431a292704..e765a0f030d 100644 --- a/htdocs/core/lib/expedition.lib.php +++ b/htdocs/core/lib/expedition.lib.php @@ -4,6 +4,7 @@ * Copyright (C) 2010-2012 Regis Houssin * Copyright (C) 2010 Juanjo Menent * Copyright (C) 2015 Claudio Aschieri + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -35,14 +36,13 @@ function expedition_prepare_head(Expedition $object) { global $langs, $conf, $user; - if (isModEnabled("expedition")) { + if (isModEnabled("shipping")) { $langs->load("sendings"); } $langs->load("orders"); $h = 0; $head = array(); - $h = 0; $head[$h][0] = DOL_URL_ROOT."/admin/confexped.php"; $head[$h][1] = $langs->trans("Setup"); diff --git a/htdocs/core/lib/expensereport.lib.php b/htdocs/core/lib/expensereport.lib.php index be79e4ecb03..592cfb4a638 100644 --- a/htdocs/core/lib/expensereport.lib.php +++ b/htdocs/core/lib/expensereport.lib.php @@ -1,6 +1,7 @@ * Copyright (C) 2022 Frédéric France + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -81,7 +82,7 @@ function expensereport_prepare_head($object) $head[$h][2] = 'info'; $h++; - complete_head_from_modules($conf, $langs, $object, $head, $h, 'donation', 'add', 'external'); + complete_head_from_modules($conf, $langs, $object, $head, $h, 'expensereport', 'add', 'external'); complete_head_from_modules($conf, $langs, $object, $head, $h, 'expensereport', 'remove'); @@ -132,13 +133,11 @@ function expensereport_admin_prepare_head() { global $langs, $conf, $user, $db; - $h = 0; - $head = array(); - $extrafields = new ExtraFields($db); $extrafields->fetch_name_optionals_label('expensereport'); $h = 0; + $head = array(); $head[$h][0] = DOL_URL_ROOT."/admin/expensereport.php"; $head[$h][1] = $langs->trans("ExpenseReports"); diff --git a/htdocs/core/lib/fichinter.lib.php b/htdocs/core/lib/fichinter.lib.php index 2045003d1c0..90fe590aff4 100644 --- a/htdocs/core/lib/fichinter.lib.php +++ b/htdocs/core/lib/fichinter.lib.php @@ -4,6 +4,7 @@ * Copyright (C) 2012 Regis Houssin * Copyright (C) 2016 Gilles Poirier * Copyright (C) 2018 charlene Benke + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify @@ -122,7 +123,7 @@ function fichinter_prepare_head($object) $head[$h][0] = DOL_URL_ROOT.'/fichinter/agenda.php?id='.$object->id; $head[$h][1] = $langs->trans('Events'); - if (isModEnabled('agenda')&& ($user->hasRight('agenda', 'myactions', 'read') || $user->hasRight('agenda', 'allactions', 'read'))) { + if (isModEnabled('agenda') && ($user->hasRight('agenda', 'myactions', 'read') || $user->hasRight('agenda', 'allactions', 'read'))) { $nbEvent = 0; // Enable caching of thirdparty count actioncomm require_once DOL_DOCUMENT_ROOT.'/core/lib/memory.lib.php'; @@ -177,8 +178,6 @@ function fichinter_admin_prepare_head() $h = 0; $head = array(); - $h = 0; - $head[$h][0] = DOL_URL_ROOT."/admin/fichinter.php"; $head[$h][1] = $langs->trans("Interventions"); $head[$h][2] = 'ficheinter'; diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index d40af1aadd5..3d9117894a2 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -4,7 +4,7 @@ * Copyright (C) 2012-2016 Juanjo Menent * Copyright (C) 2015 Marcos García * Copyright (C) 2016 Raphaël Doursenaud - * Copyright (C) 2019-2024 Frédéric France + * Copyright (C) 2019-2024 Frédéric France * Copyright (C) 2023 Lenin Rivas * Copyright (C) 2024 MDW * @@ -44,20 +44,20 @@ function dol_basename($pathfile) * Scan a directory and return a list of files/directories. * Content for string is UTF8 and dir separator is "/". * - * @param string $utf8_path Starting path from which to search. This is a full path. - * @param string $types Can be "directories", "files", or "all" - * @param int $recursive Determines whether subdirectories are searched - * @param string $filter Regex filter to restrict list. This regex value must be escaped for '/' by doing preg_quote($var,'/'), since this char is used for preg_match function, - * but must not contains the start and end '/'. Filter is checked into basename only. - * @param string[] $excludefilter Array of Regex for exclude filter (example: array('(\.meta|_preview.*\.png)$','^\.')). Exclude is checked both into fullpath and into basename (So '^xxx' may exclude 'xxx/dirscanned/...' and dirscanned/xxx'). - * @param string $sortcriteria Sort criteria ('','fullname','relativename','name','date','size') - * @param int $sortorder Sort order (SORT_ASC, SORT_DESC) - * @param int $mode 0=Return array minimum keys loaded (faster), 1=Force all keys like date and size to be loaded (slower), 2=Force load of date only, 3=Force load of size only, 4=Force load of perm - * @param int $nohook Disable all hooks - * @param string $relativename For recursive purpose only. Must be "" at first call. - * @param int $donotfollowsymlinks Do not follow symbolic links - * @param int $nbsecondsold Only files older than $nbsecondsold - * @return array Array of array('name'=>'xxx','fullname'=>'/abc/xxx','date'=>'yyy','size'=>99,'type'=>'dir|file',...) + * @param string $utf8_path Starting path from which to search. This is a full path. + * @param string $types Can be "directories", "files", or "all" + * @param int $recursive Determines whether subdirectories are searched + * @param string $filter Regex filter to restrict list. This regex value must be escaped for '/' by doing preg_quote($var,'/'), since this char is used for preg_match function, + * but must not contains the start and end '/'. Filter is checked into basename only. + * @param string|string[] $excludefilter Array of Regex for exclude filter (example: array('(\.meta|_preview.*\.png)$','^\.')). Exclude is checked both into fullpath and into basename (So '^xxx' may exclude 'xxx/dirscanned/...' and dirscanned/xxx'). + * @param string $sortcriteria Sort criteria ('','fullname','relativename','name','date','size') + * @param int $sortorder Sort order (SORT_ASC, SORT_DESC) + * @param int $mode 0=Return array minimum keys loaded (faster), 1=Force all keys like date and size to be loaded (slower), 2=Force load of date only, 3=Force load of size only, 4=Force load of perm + * @param int $nohook Disable all hooks + * @param string $relativename For recursive purpose only. Must be "" at first call. + * @param int $donotfollowsymlinks Do not follow symbolic links + * @param int $nbsecondsold Only files older than $nbsecondsold + * @return array Array of array('name'=>'xxx','fullname'=>'/abc/xxx','date'=>'yyy','size'=>99,'type'=>'dir|file',...)> * @see dol_dir_list_in_database() */ function dol_dir_list($utf8_path, $types = "all", $recursive = 0, $filter = "", $excludefilter = null, $sortcriteria = "name", $sortorder = SORT_ASC, $mode = 0, $nohook = 0, $relativename = "", $donotfollowsymlinks = 0, $nbsecondsold = 0) @@ -70,7 +70,7 @@ function dol_dir_list($utf8_path, $types = "all", $recursive = 0, $filter = "", $filters_ok = true; $error_info = ""; // Ensure we have an array for the exclusions - $exclude_array = $excludefilter === null ? array() : (is_array($excludefilter) ? $excludefilter : array($excludefilter)); + $exclude_array = ($excludefilter === null || $excludefilter === '') ? array() : (is_array($excludefilter) ? $excludefilter : array($excludefilter)); foreach ((array($filter) + $exclude_array) as $f) { // Check that all '/' are escaped. if ((int) preg_match('/(?:^|[^\\\\])\//', $f) > 0) { @@ -80,16 +80,22 @@ function dol_dir_list($utf8_path, $types = "all", $recursive = 0, $filter = "", } } dol_syslog("files.lib.php::dol_dir_list path=".$utf8_path." types=".$types." recursive=".$recursive." filter=".$filter." excludefilter=".json_encode($excludefilter).$error_info); - //print 'xxx'."files.lib.php::dol_dir_list path=".$utf8_path." types=".$types." recursive=".$recursive." filter=".$filter." excludefilter=".json_encode($excludefilter); + // print 'xxx'."files.lib.php::dol_dir_list path=".$utf8_path." types=".$types." recursive=".$recursive." filter=".$filter." excludefilter=".json_encode($exclude_array); if (!$filters_ok) { // Return empty array when filters are invalid return array(); } + } else { + // Already computed before + $exclude_array = ($excludefilter === null || $excludefilter === '') ? array() : (is_array($excludefilter) ? $excludefilter : array($excludefilter)); } - $loaddate = ($mode == 1 || $mode == 2 || $nbsecondsold != 0); - $loadsize = ($mode == 1 || $mode == 3); - $loadperm = ($mode == 1 || $mode == 4); + // Define excludefilterarray (before while, for speed) + $excludefilterarray = array_merge(array('^\.'), $exclude_array); + + $loaddate = ($mode == 1 || $mode == 2 || $nbsecondsold != 0 || $sortcriteria == 'date'); + $loadsize = ($mode == 1 || $mode == 3 || $sortcriteria == 'size'); + $loadperm = ($mode == 1 || $mode == 4 || $sortcriteria == 'perm'); // Clean parameters $utf8_path = preg_replace('/([\\/]+)$/', '', $utf8_path); @@ -109,7 +115,7 @@ function dol_dir_list($utf8_path, $types = "all", $recursive = 0, $filter = "", 'types' => $types, 'recursive' => $recursive, 'filter' => $filter, - 'excludefilter' => $excludefilter, + 'excludefilter' => $exclude_array, // Already converted to array. 'sortcriteria' => $sortcriteria, 'sortorder' => $sortorder, 'loaddate' => $loaddate, @@ -131,6 +137,7 @@ function dol_dir_list($utf8_path, $types = "all", $recursive = 0, $filter = "", $filedate = ''; $filesize = ''; $fileperm = ''; + while (false !== ($os_file = readdir($dir))) { // $utf8_file is always a basename (in directory $os_path) $os_fullpathfile = ($os_path ? $os_path.'/' : '').$os_file; @@ -143,13 +150,7 @@ function dol_dir_list($utf8_path, $types = "all", $recursive = 0, $filter = "", $qualified = 1; $utf8_fullpathfile = "$utf8_path/$utf8_file"; // Temp variable for speed - // Define excludefilterarray - $excludefilterarray = array('^\.'); - if (is_array($excludefilter)) { - $excludefilterarray = array_merge($excludefilterarray, $excludefilter); - } elseif ($excludefilter) { - $excludefilterarray[] = $excludefilter; - } + // Check if file is qualified foreach ($excludefilterarray as $filt) { if (preg_match('/'.$filt.'/i', $utf8_file) || preg_match('/'.$filt.'/i', $utf8_fullpathfile)) { @@ -162,7 +163,7 @@ function dol_dir_list($utf8_path, $types = "all", $recursive = 0, $filter = "", if ($qualified) { $isdir = is_dir($os_fullpathfile); // Check whether this is a file or directory and whether we're interested in that type - if ($isdir && (($types == "directories") || ($types == "all") || $recursive > 0)) { + if ($isdir) { // Add entry into file_list array if (($types == "directories") || ($types == "all")) { if ($loaddate || $sortcriteria == 'date') { @@ -195,12 +196,12 @@ function dol_dir_list($utf8_path, $types = "all", $recursive = 0, $filter = "", // if we're in a directory and we want recursive behavior, call this function again if ($recursive > 0) { - if (empty($donotfollowsymlinks) || !is_link($utf8_fullpathfile)) { + if (empty($donotfollowsymlinks) || !is_link($os_fullpathfile)) { //var_dump('eee '. $utf8_fullpathfile. ' '.is_dir($utf8_fullpathfile).' '.is_link($utf8_fullpathfile)); - $file_list = array_merge($file_list, dol_dir_list($utf8_fullpathfile, $types, $recursive + 1, $filter, $excludefilter, $sortcriteria, $sortorder, $mode, $nohook, ($relativename != '' ? $relativename.'/' : '').$utf8_file, $donotfollowsymlinks, $nbsecondsold)); + $file_list = array_merge($file_list, dol_dir_list($utf8_fullpathfile, $types, $recursive + 1, $filter, $exclude_array, $sortcriteria, $sortorder, $mode, $nohook, ($relativename != '' ? $relativename.'/' : '').$utf8_file, $donotfollowsymlinks, $nbsecondsold)); } } - } elseif (!$isdir && (($types == "files") || ($types == "all"))) { + } elseif (in_array($types, array("files", "all"))) { // Add file into file_list array if ($loaddate || $sortcriteria == 'date') { $filedate = dol_filemtime($utf8_fullpathfile); @@ -255,7 +256,7 @@ function dol_dir_list($utf8_path, $types = "all", $recursive = 0, $filter = "", * @param string $sortcriteria Sort criteria ("","fullname","name","date","size") * @param int $sortorder Sort order (SORT_ASC, SORT_DESC) * @param int $mode 0=Return array minimum keys loaded (faster), 1=Force all keys like description - * @return array Array of array('name'=>'xxx','fullname'=>'/abc/xxx','date'=>'yyy','size'=>99,'type'=>'dir|file',...) + * @return array Array of array('name'=>'xxx','fullname'=>'/abc/xxx','date'=>'yyy','size'=>99,'type'=>'dir|file',...) * @see dol_dir_list() */ function dol_dir_list_in_database($path, $filter = "", $excludefilter = null, $sortcriteria = "name", $sortorder = SORT_ASC, $mode = 0) @@ -643,19 +644,17 @@ function dol_fileperm($pathoffile) /** * Make replacement of strings into a file. * - * @param string $srcfile Source file (can't be a directory) + * @param string $srcfile Source file (can't be a directory) * @param array $arrayreplacement Array with strings to replace. Example: array('valuebefore'=>'valueafter', ...) - * @param string $destfile Destination file (can't be a directory). If empty, will be same than source file. - * @param string $newmask Mask for new file (0 by default means $conf->global->MAIN_UMASK). Example: '0666' - * @param int $indexdatabase 1=index new file into database. - * @param int $arrayreplacementisregex 1=Array of replacement is already an array with key that is a regex. Warning: the key must be escaped with preg_quote for '/' - * @return int Return integer <0 if error, 0 if nothing done (dest file already exists), >0 if OK + * @param string $destfile Destination file (can't be a directory). If empty, will be same than source file. + * @param string $newmask Mask for new file (0 by default means $conf->global->MAIN_UMASK). Example: '0666' + * @param int $indexdatabase 1=index new file into database. + * @param int $arrayreplacementisregex 1=Array of replacement is already an array with key that is a regex. Warning: the key must be escaped with preg_quote for '/' + * @return int Return integer <0 if error, 0 if nothing done (dest file already exists), >0 if OK * @see dol_copy() */ function dolReplaceInFile($srcfile, $arrayreplacement, $destfile = '', $newmask = '0', $indexdatabase = 0, $arrayreplacementisregex = 0) { - global $conf; - dol_syslog("files.lib.php::dolReplaceInFile srcfile=".$srcfile." destfile=".$destfile." newmask=".$newmask." indexdatabase=".$indexdatabase." arrayreplacementisregex=".$arrayreplacementisregex); if (empty($srcfile)) { @@ -858,14 +857,14 @@ function dol_copy($srcfile, $destfile, $newmask = '0', $overwriteifexists = 1, $ /** * Copy a dir to another dir. This include recursive subdirectories. * - * @param string $srcfile Source file (a directory) - * @param string $destfile Destination file (a directory) - * @param string $newmask Mask for new file ('0' by default means getDolGlobalString('MAIN_UMASK')). Example: '0666' - * @param int $overwriteifexists Overwrite file if exists (1 by default) + * @param string $srcfile Source file (a directory) + * @param string $destfile Destination file (a directory) + * @param string $newmask Mask for new file ('0' by default means getDolGlobalString('MAIN_UMASK')). Example: '0666' + * @param int $overwriteifexists Overwrite file if exists (1 by default) * @param array $arrayreplacement Array to use to replace filenames with another one during the copy (works only on file names, not on directory names). - * @param int $excludesubdir 0=Do not exclude subdirectories, 1=Exclude subdirectories, 2=Exclude subdirectories if name is not a 2 chars (used for country codes subdirectories). - * @param string[] $excludefileext Exclude some file extensions - * @return int Return integer <0 if error, 0 if nothing done (all files already exists and overwriteifexists=0), >0 if OK + * @param int $excludesubdir 0=Do not exclude subdirectories, 1=Exclude subdirectories, 2=Exclude subdirectories if name is not a 2 chars (used for country codes subdirectories). + * @param string[] $excludefileext Exclude some file extensions + * @return int Return integer <0 if error, 0 if nothing done (all files already exists and overwriteifexists=0), >0 if OK * @see dol_copy() */ function dolCopyDir($srcfile, $destfile, $newmask, $overwriteifexists, $arrayreplacement = null, $excludesubdir = 0, $excludefileext = null) @@ -879,6 +878,7 @@ function dolCopyDir($srcfile, $destfile, $newmask, $overwriteifexists, $arrayrep } $destexists = dol_is_dir($destfile); + //if (! $overwriteifexists && $destexists) return 0; // The overwriteifexists is for files only, so propagated to dol_copy only. if (!$destexists) { @@ -889,7 +889,13 @@ function dolCopyDir($srcfile, $destfile, $newmask, $overwriteifexists, $arrayrep $dirmaskdec = octdec(getDolGlobalString('MAIN_UMASK')); } $dirmaskdec |= octdec('0200'); // Set w bit required to be able to create content for recursive subdirs files - dol_mkdir($destfile, '', decoct($dirmaskdec)); + + $result = dol_mkdir($destfile, '', decoct($dirmaskdec)); + + if (!dol_is_dir($destfile)) { + // The output directory does not exists and we failed to create it. So we stop here. + return -1; + } } $ossrcfile = dol_osencode($srcfile); @@ -1103,7 +1109,7 @@ function dol_move($srcfile, $destfile, $newmask = '0', $overwriteifexists = 1, $ } if ($resultecm > 0) { - $result = true; + $result = true; // @phan-suppress-current-line PhanPluginRedundantAssignment } else { $result = false; } @@ -1179,7 +1185,7 @@ function dol_move_dir($srcdir, $destdir, $overwriteifexists = 1, $indexdatabase } } } - $result = true; + $result = true; // @phan-suppress-current-line PhanPluginRedundantAssignment } } } @@ -1839,6 +1845,7 @@ function dol_add_file_process($upload_dir, $allowoverwrite = 0, $donotupdatesess // var_dump($result);exit; if ($result >= 0) { $TFile = $_FILES[$varfiles]; + // Convert value of $TFile if (!is_array($TFile['name'])) { foreach ($TFile as $key => &$val) { $val = array($val); @@ -1853,13 +1860,13 @@ function dol_add_file_process($upload_dir, $allowoverwrite = 0, $donotupdatesess } // Define $destfull (path to file including filename) and $destfile (only filename) - $destfull = $upload_dir."/".$TFile['name'][$i]; - $destfile = $TFile['name'][$i]; + $destfile = trim($TFile['name'][$i]); + $destfull = $upload_dir."/".$destfile; $destfilewithoutext = preg_replace('/\.[^\.]+$/', '', $destfile); if ($savingdocmask && strpos($savingdocmask, $destfilewithoutext) !== 0) { - $destfull = $upload_dir."/".preg_replace('/__file__/', $TFile['name'][$i], $savingdocmask); - $destfile = preg_replace('/__file__/', $TFile['name'][$i], $savingdocmask); + $destfile = trim(preg_replace('/__file__/', $TFile['name'][$i], $savingdocmask)); + $destfull = $upload_dir."/".$destfile; } $filenameto = basename($destfile); @@ -1868,7 +1875,6 @@ function dol_add_file_process($upload_dir, $allowoverwrite = 0, $donotupdatesess setEventMessages($langs->trans("ErrorFilenameCantStartWithDot", $filenameto), null, 'errors'); break; } - // dol_sanitizeFileName the file name and lowercase extension $info = pathinfo($destfull); $destfull = $info['dirname'].'/'.dol_sanitizeFileName($info['filename'].($info['extension'] != '' ? ('.'.strtolower($info['extension'])) : '')); @@ -1973,7 +1979,7 @@ function dol_add_file_process($upload_dir, $allowoverwrite = 0, $donotupdatesess $linkObject->entity = $conf->entity; $linkObject->url = $link; $linkObject->objecttype = GETPOST('objecttype', 'alpha'); - $linkObject->objectid = GETPOST('objectid', 'int'); + $linkObject->objectid = GETPOSTINT('objectid'); $linkObject->label = GETPOST('label', 'alpha'); $res = $linkObject->create($user); @@ -2306,7 +2312,7 @@ function dol_compress_file($inputfile, $outputfile, $mode = "gz", &$errorstring // Zip archive will be created only after closing object $zip->close(); - dol_syslog("dol_compress_file success - ".count($zip->numFiles)." files"); + dol_syslog("dol_compress_file success - ".$zip->numFiles." files"); return 1; } @@ -2517,9 +2523,9 @@ function dol_compress_dir($inputdir, $outputfile, $mode = "zip", $excludefiles = try { if ($mode == 'gz') { - $foundhandler = 0; + $foundhandler = 0; // @phan-suppress-current-line PhanPluginRedundantAssignment } elseif ($mode == 'bz') { - $foundhandler = 0; + $foundhandler = 0; // @phan-suppress-current-line PhanPluginRedundantAssignment } elseif ($mode == 'zip') { /*if (defined('ODTPHP_PATHTOPCLZIP')) { @@ -2615,12 +2621,12 @@ function dol_compress_dir($inputdir, $outputfile, $mode = "zip", $excludefiles = * * @param string $dir Directory to scan * @param string $regexfilter Regex filter to restrict list. This regex value must be escaped for '/', since this char is used for preg_match function - * @param array $excludefilter Array of Regex for exclude filter (example: array('(\.meta|_preview.*\.png)$','^\.')). This regex value must be escaped for '/', since this char is used for preg_match function - * @param int $nohook Disable all hooks - * @param int $mode 0=Return array minimum keys loaded (faster), 1=Force all keys like date and size to be loaded (slower), 2=Force load of date only, 3=Force load of size only - * @return array Array with properties (full path, date, ...) of to most recent file + * @param string[] $excludefilter Array of Regex for exclude filter (example: array('(\.meta|_preview.*\.png)$','^\.')). This regex value must be escaped for '/', since this char is used for preg_match function + * @param int<0,1> $nohook Disable all hooks + * @param int<0,3> $mode 0=Return array minimum keys loaded (faster), 1=Force all keys like date and size to be loaded (slower), 2=Force load of date only, 3=Force load of size only + * @return null|array{name:string,path:string,level1name:string,relativename:string,fullname:string,date:string,size:int,perm:int,type:string} null if none or Array with properties (full path, date, ...) of the most recent file */ -function dol_most_recent_file($dir, $regexfilter = '', $excludefilter = array('(\.meta|_preview.*\.png)$', '^\.'), $nohook = false, $mode = '') +function dol_most_recent_file($dir, $regexfilter = '', $excludefilter = array('(\.meta|_preview.*\.png)$', '^\.'), $nohook = 0, $mode = 0) { $tmparray = dol_dir_list($dir, 'files', 0, $regexfilter, $excludefilter, 'date', SORT_DESC, $mode, $nohook); return isset($tmparray[0]) ? $tmparray[0] : null; @@ -2634,7 +2640,7 @@ function dol_most_recent_file($dir, $regexfilter = '', $excludefilter = array('( * @param string $original_file Relative path with filename, relative to modulepart. * @param string $entity Restrict onto entity (0=no restriction) * @param User|null $fuser User object (forced) - * @param string $refname Ref of object to check permission for external users (autodetect if not provided) or for hierarchy + * @param string $refname Ref of object to check permission for external users (autodetect if not provided by taking the dirname of $original_file) or for hierarchy * @param string $mode Check permission for 'read' or 'write' * @return mixed Array with access information : 'accessallowed' & 'sqlprotectagainstexternals' & 'original_file' (as a full path name) * @see restrictedArea() @@ -2660,14 +2666,14 @@ function dol_check_secure_access_document($modulepart, $original_file, $entity, } } // Fix modulepart for backward compatibility - if ($modulepart == 'users') { + if ($modulepart == 'facture') { + $modulepart = 'invoice'; + } elseif ($modulepart == 'users') { $modulepart = 'user'; - } - if ($modulepart == 'tva') { + } elseif ($modulepart == 'tva') { $modulepart = 'tax-vat'; - } - // Fix modulepart delivery - if ($modulepart == 'expedition' && strpos($original_file, 'receipt/') === 0) { + } elseif ($modulepart == 'expedition' && strpos($original_file, 'receipt/') === 0) { + // Fix modulepart delivery $modulepart = 'delivery'; } @@ -2682,7 +2688,7 @@ function dol_check_secure_access_document($modulepart, $original_file, $entity, // Find the subdirectory name as the reference. For example original_file='10/myfile.pdf' -> refname='10' if (empty($refname)) { $refname = basename(dirname($original_file)."/"); - if ($refname == 'thumbs') { + if ($refname == 'thumbs' || $refname == 'temp') { // If we get the thumbs directory, we must go one step higher. For example original_file='10/thumbs/myfile_small.jpg' -> refname='10' $refname = basename(dirname(dirname($original_file))."/"); } @@ -2735,7 +2741,7 @@ function dol_check_secure_access_document($modulepart, $original_file, $entity, $original_file = $conf->mycompany->dir_output.'/'.$original_file; } elseif ($modulepart == 'userphoto' && !empty($conf->user->dir_output)) { // Wrapping for users photos (user photos are allowed to any connected users) - $accessallowed = 0; + $accessallowed = 0; // @phan-suppress-current-line PhanPluginRedundantAssignment if (preg_match('/^\d+\/photos\//', $original_file)) { $accessallowed = 1; } @@ -2771,7 +2777,7 @@ function dol_check_secure_access_document($modulepart, $original_file, $entity, $original_file = $conf->mycompany->dir_output.'/logos/'.$original_file; } elseif ($modulepart == 'memberphoto' && !empty($conf->adherent->dir_output)) { // Wrapping for members photos - $accessallowed = 0; + $accessallowed = 0; // @phan-suppress-current-line PhanPluginRedundantAssignment if (preg_match('/^\d+\/photos\//', $original_file)) { $accessallowed = 1; } @@ -3166,12 +3172,6 @@ function dol_check_secure_access_document($modulepart, $original_file, $entity, $accessallowed = 1; } $original_file = $conf->expedition->dir_output."/".(strpos($original_file, 'receipt/') === 0 ? '' : 'receipt/').$original_file; - } elseif ($modulepart == 'actions' && !empty($conf->agenda->dir_output)) { - // Wrapping pour les actions - if ($fuser->hasRight('agenda', 'myactions', $read) || preg_match('/^specimen/i', $original_file)) { - $accessallowed = 1; - } - $original_file = $conf->agenda->dir_output.'/'.$original_file; } elseif ($modulepart == 'actionsreport' && !empty($conf->agenda->dir_temp)) { // Wrapping pour les actions if ($fuser->hasRight('agenda', 'allactions', $read) || preg_match('/^specimen/i', $original_file)) { @@ -3288,10 +3288,6 @@ function dol_check_secure_access_document($modulepart, $original_file, $entity, $accessallowed = 1; } $original_file = $conf->adherent->dir_output.'/'.$original_file; - } elseif ($modulepart == 'scanner_user_temp' && !empty($conf->scanner->dir_temp)) { - // Wrapping for Scanner - $accessallowed = 1; - $original_file = $conf->scanner->dir_temp.'/'.$fuser->id.'/'.$original_file; // If modulepart=module_user_temp Allows any module to open a file if file is in directory called DOL_DATA_ROOT/modulepart/temp/iduser // If modulepart=module_temp Allows any module to open a file if file is in directory called DOL_DATA_ROOT/modulepart/temp // If modulepart=module_user Allows any module to open a file if file is in directory called DOL_DATA_ROOT/modulepart/iduser diff --git a/htdocs/core/lib/ftp.lib.php b/htdocs/core/lib/ftp.lib.php index 89a36297e39..d72d98d7f94 100644 --- a/htdocs/core/lib/ftp.lib.php +++ b/htdocs/core/lib/ftp.lib.php @@ -1,6 +1,7 @@ * Copyright (C) 2022 Anthony Berton + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -43,7 +44,7 @@ function dol_ftp_connect($ftp_server, $ftp_port, $ftp_user, $ftp_password, $sect $error = 0; $connect_id = null; $newsectioniso = ''; - $mesg=""; + $mesg = ""; if (!is_numeric($ftp_port)) { $mesg = $langs->transnoentitiesnoconv("FailedToConnectToFTPServer", $ftp_server, $ftp_port); @@ -88,18 +89,20 @@ function dol_ftp_connect($ftp_server, $ftp_port, $ftp_user, $ftp_password, $sect } } else { if (ftp_login($connect_id, $ftp_user, $ftp_password)) { - // Turn on passive mode transfers (must be after a successful login + // Turn on passive mode transfers (must be after a successful login) if ($ftp_passive) { ftp_pasv($connect_id, true); } // Change the dir $newsectioniso = mb_convert_encoding($section, 'ISO-8859-1'); - ftp_chdir($connect_id, $newsectioniso); + if (!ftp_chdir($connect_id, $newsectioniso)) { + $ok = 0; + $mesg = $langs->transnoentitiesnoconv("FailedToChdirOnFTPServer"); + } } else { - $mesg = $langs->transnoentitiesnoconv("FailedToConnectToFTPServerWithCredentials"); $ok = 0; - $error++; + $mesg = $langs->transnoentitiesnoconv("FailedToConnectToFTPServerWithCredentials"); } } } @@ -110,7 +113,7 @@ function dol_ftp_connect($ftp_server, $ftp_port, $ftp_user, $ftp_password, $sect } } - $arrayresult = array('conn_id'=>$connect_id, 'ok'=>$ok, 'mesg'=>$mesg, 'curdir'=>$section, 'curdiriso'=>$newsectioniso); + $arrayresult = array('conn_id' => $connect_id, 'ok' => $ok, 'mesg' => $mesg, 'curdir' => $section, 'curdiriso' => $newsectioniso); return $arrayresult; } @@ -144,10 +147,7 @@ function dol_ftp_close($connect_id) // Close FTP connection if ($connect_id) { - if (getDolGlobalString('FTP_CONNECT_WITH_SFTP')) { - } elseif (getDolGlobalString('FTP_CONNECT_WITH_SSL')) { - return ftp_close($connect_id); - } else { + if (!getDolGlobalString('FTP_CONNECT_WITH_SFTP')) { return ftp_close($connect_id); } } diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index c1fbff4a59e..f9ce010b82f 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -13,7 +13,7 @@ * Copyright (C) 2014 Cédric GROSS * Copyright (C) 2014-2015 Marcos García * Copyright (C) 2015 Jean-François Ferry - * Copyright (C) 2018-2024 Frédéric France + * Copyright (C) 2018-2024 Frédéric France * Copyright (C) 2019-2023 Thibault Foucart * Copyright (C) 2020 Open-Dsi * Copyright (C) 2021 Gauthier VERDOL @@ -22,7 +22,7 @@ * Copyright (C) 2022 Charlene Benke * Copyright (C) 2023 Joachim Kueter * Copyright (C) 2024 MDW - * Copyright (C) 2024 Lenin Rivas + * Copyright (C) 2024 Lenin Rivas * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -206,6 +206,42 @@ function getDolUserInt($key, $default = 0, $tmpuser = null) return (int) (empty($tmpuser->conf->$key) ? $default : $tmpuser->conf->$key); } + +/** + * This mapping defines the conversion to the current internal + * names from the alternative allowed names (including effectively deprecated + * and future new names (not yet used as internal names). + * + * This allows to map any temporary or future name to the effective internal name. + * + * The value is typically the name of module's root directory. + */ +define( + 'MODULE_MAPPING', + array( + // Map deprecated names to new names + 'adherent' => 'member', // Has new directory + 'member_type' => 'adherent_type', // No directory, but file called adherent_type + 'banque' => 'bank', // Has new directory + 'contrat' => 'contract', // Has new directory + 'entrepot' => 'stock', // Has new directory + 'projet' => 'project', // Has new directory + 'categorie' => 'category', // Has old directory + 'commande' => 'order', // Has old directory + 'expedition' => 'shipping', // Has old directory + 'facture' => 'invoice', // Has old directory + 'fichinter' => 'intervention', // Has old directory + 'ficheinter' => 'intervention', // Backup for 'fichinter' + 'propale' => 'propal', // Has old directory + 'socpeople' => 'contact', // Has old directory + 'fournisseur' => 'supplier', // Has old directory + + 'actioncomm' => 'agenda', // NO module directory (public dir agenda) + 'product_price' => 'productprice', // NO directory + 'product_fournisseur_price' => 'productsupplierprice', // NO directory + ) +); + /** * Is Dolibarr module enabled * @@ -216,23 +252,36 @@ function isModEnabled($module) { global $conf; - // Fix special cases - $arrayconv = array( - 'bank' => 'banque', - 'category' => 'categorie', - 'contract' => 'contrat', - 'project' => 'projet', - 'delivery_note' => 'expedition' - ); + // Fix old names (map to new names) + $arrayconv = MODULE_MAPPING; + $arrayconvbis = array_flip(MODULE_MAPPING); + if (!getDolGlobalString('MAIN_USE_NEW_SUPPLIERMOD')) { + // Special cases: both use the same module. $arrayconv['supplier_order'] = 'fournisseur'; $arrayconv['supplier_invoice'] = 'fournisseur'; } - if (!empty($arrayconv[$module])) { - $module = $arrayconv[$module]; + // Special case. + // @TODO Replace isModEnabled('delivery_note') with + // isModEnabled('shipping') && getDolGlobalString('MAIN_SUBMODULE_EXPEDITION') + if ($module == 'delivery_note') { + if (!getDolGlobalString('MAIN_SUBMODULE_EXPEDITION')) { + return false; + } else { + $module = 'shipping'; + } } - return !empty($conf->modules[$module]); + $module_alt = $module; + if (!empty($arrayconv[$module])) { + $module_alt = $arrayconv[$module]; + } + $module_bis = $module; + if (!empty($arrayconvbis[$module])) { + $module_bis = $arrayconvbis[$module]; + } + + return !empty($conf->modules[$module]) || !empty($conf->modules[$module_alt]) || !empty($conf->modules[$module_bis]); //return !empty($conf->$module->enabled); } @@ -636,14 +685,14 @@ function GETPOSTISARRAY($paramname, $method = 0) * @param int $method Type of method (0 = get then post, 1 = only get, 2 = only post, 3 = post then get) * @param int $filter Filter to apply when $check is set to 'custom'. (See http://php.net/manual/en/filter.filters.php for détails) * @param mixed $options Options to pass to filter_var when $check is set to 'custom' - * @param string $noreplace Force disable of replacement of __xxx__ strings. + * @param int $noreplace Force disable of replacement of __xxx__ strings. * @return string|array Value found (string or array), or '' if check fails */ function GETPOST($paramname, $check = 'alphanohtml', $method = 0, $filter = null, $options = null, $noreplace = 0) { global $mysoc, $user, $conf; - if (empty($paramname)) { + if (empty($paramname)) { // Explicit test for null for phan. return 'BadFirstParameterForGETPOST'; } if (empty($check)) { @@ -835,6 +884,7 @@ function GETPOST($paramname, $check = 'alphanohtml', $method = 0, $filter = null // Substitution variables for GETPOST (used to get final url with variable parameters or final default value, when using variable parameters __XXX__ in the GET URL) // Example of variables: __DAY__, __MONTH__, __YEAR__, __MYCOMPANY_COUNTRY_ID__, __USER_ID__, ... // We do this only if var is a GET. If it is a POST, may be we want to post the text with vars as the setup text. + '@phan-var-force string $paramname'; if (!is_array($out) && empty($_POST[$paramname]) && empty($noreplace)) { $reg = array(); $maxloop = 20; @@ -912,6 +962,7 @@ function GETPOST($paramname, $check = 'alphanohtml', $method = 0, $filter = null $out = preg_replace('/([<>])([-+]?\d)/', '\1 \2', $out); } + // @phan-suppress-next-line UnknownSanitizeType $out = sanitizeVal($out, $check, $filter, $options); } @@ -1567,6 +1618,7 @@ function dol_string_nospecial($str, $newstr = '_', $badcharstoreplace = '', $bad $forbidden_chars_to_remove = $badcharstoremove; } + // @phan-suppress-next-line PhanPluginSuspiciousParamOrderInternal return str_replace($forbidden_chars_to_replace, $newstr, str_replace($forbidden_chars_to_remove, "", $str)); } @@ -1643,7 +1695,7 @@ function dol_escape_json($stringtoescape) * Returns text escaped for inclusion into a php string, build with double quotes " or ' * * @param string $stringtoescape String to escape - * @param string $stringforquotes 2=String for doublequotes, 1=String for simple quotes + * @param int<1,2> $stringforquotes 2=String for doublequotes, 1=String for simple quotes * @return string Escaped string for json content. */ function dol_escape_php($stringtoescape, $stringforquotes = 2) @@ -1654,8 +1706,7 @@ function dol_escape_php($stringtoescape, $stringforquotes = 2) if ($stringforquotes == 2) { return str_replace('"', "'", $stringtoescape); - } - if ($stringforquotes == 1) { + } elseif ($stringforquotes == 1) { // We remove the \ char. // If we allow the \ char, we can have $stringtoescape = // abc\';phpcodedanger; so the escapement will become @@ -1669,7 +1720,19 @@ function dol_escape_php($stringtoescape, $stringforquotes = 2) } /** - * Return a string ready to be output on a HTML page. + * Return a string label (so on 1 line only and that should not contains any HTML) ready to be output on HTML page + * To use text that is not HTML content inside an attribute, use can simply only dol_escape_htmltag(). In doubt, use dolPrintHTMLForAttribute(). + * + * @param string $s String to print + * @return string String ready for HTML output + */ +function dolPrintLabel($s) +{ + return dol_escape_htmltag(dol_string_nohtmltag($s, 1, 'UTF-8', 0, 0), 0, 0, '', 0, 1); +} + +/** + * Return a string (that can be on several lines) ready to be output on a HTML page. * To output a text inside an attribute, you can use dolPrintHTMLForAttribute() or dolPrintHTMLForTextArea() inside a textarea * * @param string $s String to print @@ -1933,6 +1996,7 @@ function dol_syslog($message, $level = LOG_INFO, $ident = 0, $suffixinfilename = if (!empty($message)) { // Test log level + // @phan-suppress-next-line PhanPluginDuplicateArrayKey $logLevels = array(LOG_EMERG => 'EMERG', LOG_ALERT => 'ALERT', LOG_CRIT => 'CRITICAL', LOG_ERR => 'ERR', LOG_WARNING => 'WARN', LOG_NOTICE => 'NOTICE', LOG_INFO => 'INFO', LOG_DEBUG => 'DEBUG'); if (!array_key_exists($level, $logLevels)) { throw new Exception('Incorrect log level'); @@ -2062,9 +2126,10 @@ function dolButtonToOpenUrlInDialogPopup($name, $label, $buttonstring, $url, $di if (!empty($conf->use_javascript_ajax)) { // Add code to open url using the popup. Add also hidden field to retrieve the returned variables $out .= ''; - $out .= ''; - $out .= ''; - $out .= ''; + $out .= ''; + $out .= ''; + $out .= ''; + $out .= ''; $out .= ' @@ -189,7 +191,7 @@ print $formadmin->selectTypeOfFields('type', GETPOST('type', 'alpha')); -
+ @@ -211,10 +213,10 @@ print $formadmin->selectTypeOfFields('type', GETPOST('type', 'alpha')); + + diff --git a/htdocs/core/tpl/admin_extrafields_edit.tpl.php b/htdocs/core/tpl/admin_extrafields_edit.tpl.php index bb8c4fb9c3a..0853edc8955 100644 --- a/htdocs/core/tpl/admin_extrafields_edit.tpl.php +++ b/htdocs/core/tpl/admin_extrafields_edit.tpl.php @@ -29,7 +29,7 @@ // Protection to avoid direct call of template if (empty($conf) || !is_object($conf)) { print "Error, template page can't be called as URL"; - exit; + exit(1); } diff --git a/htdocs/core/tpl/admin_extrafields_view.tpl.php b/htdocs/core/tpl/admin_extrafields_view.tpl.php index 7c1f4a94a15..75f92eda0cf 100644 --- a/htdocs/core/tpl/admin_extrafields_view.tpl.php +++ b/htdocs/core/tpl/admin_extrafields_view.tpl.php @@ -2,6 +2,7 @@ /* Copyright (C) 2010-2018 Laurent Destailleur * Copyright (C) 2012-2021 Regis Houssin * Copyright (C) 2018-2023 Frédéric France + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -27,7 +28,7 @@ // Protection to avoid direct call of template if (empty($langs) || !is_object($langs)) { print "Error, template page can't be called as URL"; - exit; + exit(1); } global $action, $form, $langs; @@ -46,7 +47,7 @@ if ($action == 'delete') { $title = ''.$langs->trans("DefineHereComplementaryAttributes", empty($textobject) ? '' : $textobject).'
'."\n"; //if ($action != 'create' && $action != 'edit') { $newcardbutton = ''; -$newcardbutton .= dolGetButtonTitle($langs->trans('NewAttribute'), '', 'fa fa-plus-circle', $_SERVER["PHP_SELF"].'?action=create', '', (($action != 'create' && $action != 'edit') ? 1 : 1)); +$newcardbutton .= dolGetButtonTitle($langs->trans('NewAttribute'), '', 'fa fa-plus-circle', $_SERVER["PHP_SELF"].'?action=create', '', 1); /*} else { $newcardbutton = ''; }*/ @@ -99,7 +100,7 @@ print "\n"; if (isset($extrafields->attributes[$elementtype]['type']) && is_array($extrafields->attributes[$elementtype]['type']) && count($extrafields->attributes[$elementtype]['type'])) { foreach ($extrafields->attributes[$elementtype]['type'] as $key => $value) { - /*if (! dol_eval($extrafields->attributes[$elementtype]['enabled'][$key], 1, 1, '1')) { + /*if (! (int) dol_eval($extrafields->attributes[$elementtype]['enabled'][$key], 1, 1, '1')) { // TODO Uncomment this to exclude extrafields of modules not enabled. Add a link to "Show extrafields disabled" // continue; }*/ diff --git a/htdocs/core/tpl/advtarget.tpl.php b/htdocs/core/tpl/advtarget.tpl.php index 8d9b566794e..42aba1b10ba 100644 --- a/htdocs/core/tpl/advtarget.tpl.php +++ b/htdocs/core/tpl/advtarget.tpl.php @@ -1,5 +1,6 @@ + * Copyright (C) 2024 Frédéric France */ /* * @@ -17,7 +18,7 @@ * along with this program. If not, see . */ -if (isModEnabled('categorie') && $user->hasRight('categorie', 'lire')) { +if (isModEnabled('category') && $user->hasRight('categorie', 'lire')) { require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; } @@ -107,8 +108,11 @@ print ''."\n"; print '
'."\n"; @@ -256,7 +260,7 @@ if (getDolGlobalInt('MAIN_MULTILANGS')) { print ''."\n"; } -if (isModEnabled('categorie') && $user->hasRight('categorie', 'lire')) { +if (isModEnabled('category') && $user->hasRight('categorie', 'lire')) { // Customer Categories print '
'; if (in_array($key, array('statut'))) { - print $form->selectarray('search_status', array('-1'=>'', '0'=>$contactstatic->LibStatut(0, 1), '1'=>$contactstatic->LibStatut(1, 1)), $search_status, 0, 0, 0, '', 0, 0, 0, '', 'onrightofpage'); + print $form->selectarray('search_status', array('-1' => '', '0' => $contactstatic->LibStatut(0, 1), '1' => $contactstatic->LibStatut(1, 1)), $search_status, 0, 0, 0, '', 0, 0, 0, '', 'onrightofpage'); } elseif (in_array($key, array('role'))) { print $formcompany->showRoles("search_roles", $contactstatic, 'edit', $search_roles, 'minwidth200 maxwidth300'); } elseif (in_array($key, array('birthday'))) { @@ -1297,7 +1394,7 @@ function show_contacts($conf, $langs, $db, $object, $backtopage = '', $showuserl include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php'; // Fields from hook - $parameters = array('arrayfields'=>$arrayfields); + $parameters = array('arrayfields' => $arrayfields); $reshook = $hookmanager->executeHooks('printFieldListOption', $parameters, $contactstatic); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; // Action column @@ -1344,7 +1441,7 @@ function show_contacts($conf, $langs, $db, $object, $backtopage = '', $showuserl $extrafieldsobjectkey = $contactstatic->table_element; include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; // Hook fields - $parameters = array('arrayfields'=>$arrayfields, 'param'=>$param, 'sortfield'=>$sortfield, 'sortorder'=>$sortorder); + $parameters = array('arrayfields' => $arrayfields, 'param' => $param, 'sortfield' => $sortfield, 'sortorder' => $sortorder); $reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters, $object); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; // Action column @@ -1405,7 +1502,7 @@ function show_contacts($conf, $langs, $db, $object, $backtopage = '', $showuserl print ''; // Add to agenda - if (isModEnabled('agenda')&& $user->hasRight('agenda', 'myactions', 'create')) { + if (isModEnabled('agenda') && $user->hasRight('agenda', 'myactions', 'create')) { print ''; print img_object($langs->trans("Event"), "action"); print '   '; @@ -1418,6 +1515,13 @@ function show_contacts($conf, $langs, $db, $object, $backtopage = '', $showuserl print ''; } + // Delete + if ($user->hasRight('societe', 'contact', 'delete')) { + print ''; + print img_delete(); + print ''; + } + print ''; - $tmpuser= new User($db); + $tmpuser = new User($db); + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition $resfetch = $tmpuser->fetch(0, '', '', 0, -1, '', $contactstatic->id); if ($resfetch > 0) { print $tmpuser->getNomUrl(1, '', 0, 0, 24, 1); @@ -1500,7 +1605,7 @@ function show_contacts($conf, $langs, $db, $object, $backtopage = '', $showuserl print ''; // Add to agenda - if (isModEnabled('agenda')&& $user->hasRight('agenda', 'myactions', 'create')) { + if (isModEnabled('agenda') && $user->hasRight('agenda', 'myactions', 'create')) { print ''; print img_object($langs->trans("Event"), "action"); print '   '; @@ -1513,6 +1618,13 @@ function show_contacts($conf, $langs, $db, $object, $backtopage = '', $showuserl print ''; } + // Delete + if ($user->hasRight('societe', 'contact', 'delete')) { + print ''; + print img_delete(); + print ''; + } + print '
trans("Position"); ?>
trans("Position"); ?>
trans("LanguageFile"); ?>
textwithpicto($langs->trans("AlwaysEditable"), $langs->trans("EditableWhenDraftOnly")); ?>>
textwithpicto($langs->trans("Visibility"), $langs->trans("VisibleDesc").'

'.$langs->trans("ItCanBeAnExpression")); ?> -
textwithpicto($langs->trans("DisplayOnPdf"), $langs->trans("DisplayOnPdfDesc")); ?> -
trans("Totalizable"); ?>>
'.$langs->trans('CustomerCode'); if (!empty($array_query['cust_code'])) { print img_picto($langs->trans('AdvTgtUse'), 'ok.png@advtargetemailing'); + $cust_code_str = (string) $array_query['cust_code']; +} else { + $cust_code_str = "null"; } -print ''."\n"; +print ''."\n"; print $form->textwithpicto('', $langs->trans("AdvTgtSearchTextHelp"), 1, 'help'); print '
'.$langs->trans("CustomersCategoryShort"); if (!empty($array_query['cust_categ'])) { @@ -274,7 +278,7 @@ if (!getDolGlobalString('MAIN_EXTRAFIELDS_DISABLED')) { $socstatic = new Societe($db); $elementtype = $socstatic->table_element; // fetch optionals attributes and labels - dol_include_once('/core/class/extrafields.class.php'); + require_once DOL_DOCUMENT_ROOT . '/core/class/extrafields.class.php'; $extrafields = new ExtraFields($db); $extrafields->fetch_name_optionals_label($elementtype); foreach ($extrafields->attributes[$elementtype]['label'] as $key => $val) { @@ -338,7 +342,7 @@ if (!getDolGlobalString('MAIN_EXTRAFIELDS_DISABLED')) { $std_soc = new Societe($db); $action_search = 'query'; - $parameters = array('advtarget'=>1); + $parameters = array('advtarget' => 1); if (!empty($advTarget->id)) { $parameters = array('array_query' => $advTarget->filtervalue); } @@ -448,7 +452,7 @@ print '
'; print '
'."\n"; print '
'.$langs->trans("ContactCategoriesShort"); if (!empty($array_query['contact_categ'])) { diff --git a/htdocs/core/tpl/bloc_comment.tpl.php b/htdocs/core/tpl/bloc_comment.tpl.php index a868bb61879..8506d42dd7b 100644 --- a/htdocs/core/tpl/bloc_comment.tpl.php +++ b/htdocs/core/tpl/bloc_comment.tpl.php @@ -3,7 +3,7 @@ // Protection to avoid direct call of template if (empty($conf) || !is_object($conf)) { print "Error, template page can't be called as URL"; - exit; + exit(1); } // Require diff --git a/htdocs/core/tpl/bloc_showhide.tpl.php b/htdocs/core/tpl/bloc_showhide.tpl.php index 267c56e42a7..8af7c7665db 100644 --- a/htdocs/core/tpl/bloc_showhide.tpl.php +++ b/htdocs/core/tpl/bloc_showhide.tpl.php @@ -20,7 +20,7 @@ // Protection to avoid direct call of template if (empty($blocname)) { print "Error, template page can't be called as URL"; - exit; + exit(1); } $hide = true; // Hide by default diff --git a/htdocs/core/tpl/card_presend.tpl.php b/htdocs/core/tpl/card_presend.tpl.php index e358e2c0f76..42c7cd957fc 100644 --- a/htdocs/core/tpl/card_presend.tpl.php +++ b/htdocs/core/tpl/card_presend.tpl.php @@ -32,9 +32,10 @@ // Protection to avoid direct call of template if (empty($conf) || !is_object($conf)) { print "Error, template page can't be called as URL"; - exit; + exit(1); } +$fileparams = array(); if ($action == 'presend') { $langs->load("mails"); @@ -78,7 +79,7 @@ if ($action == 'presend') { $outputlangs = new Translate('', $conf); $outputlangs->setDefaultLang($newlang); // Load traductions files required by page - $outputlangs->loadLangs(array('commercial', 'bills', 'orders', 'contracts', 'members', 'propal', 'products', 'supplier_proposal', 'interventions', 'receptions', 'sendings')); + $outputlangs->loadLangs(array('commercial', 'bills', 'orders', 'contracts', 'main', 'members', 'propal', 'products', 'supplier_proposal', 'interventions', 'receptions', 'sendings')); if (!empty($defaulttopiclang)) { $outputlangs->loadLangs(array($defaulttopiclang)); } @@ -220,11 +221,11 @@ if ($action == 'presend') { } } } + if (getDolGlobalString('MAIN_MAIL_ENABLED_USER_DEST_SELECT')) { $listeuser = array(); $fuserdest = new User($db); - - $result = $fuserdest->fetchAll('ASC', 't.lastname', 0, 0, array('customsql'=>"t.statut=1 AND t.employee=1 AND t.email IS NOT NULL AND t.email <> ''"), 'AND', true); + $result = $fuserdest->fetchAll('ASC', 't.lastname', 0, 0, "(t.statut:=:1) AND (t.employee:=:1) AND (t.email:isnot:NULL) AND (t.email:!=:'')", 'AND', true); if ($result > 0 && is_array($fuserdest->users) && count($fuserdest->users) > 0) { foreach ($fuserdest->users as $uuserdest) { $listeuser[$uuserdest->id] = $uuserdest->user_get_property($uuserdest->id, 'email'); @@ -273,10 +274,10 @@ if ($action == 'presend') { $substitutionarray['__CHECK_READ__'] = ""; if (is_object($object) && is_object($object->thirdparty)) { - $checkRead= 'thirdparty->tag) ? urlencode($object->thirdparty->tag) : ""); + $checkRead .= '&securitykey='.(getDolGlobalString('MAILING_EMAIL_UNSUBSCRIBE_KEY') ? urlencode(getDolGlobalString('MAILING_EMAIL_UNSUBSCRIBE_KEY')) : ""); + $checkRead .= '" width="1" height="1" style="width:1px;height:1px" border="0"/>'; $substitutionarray['__CHECK_READ__'] = $checkRead; } $substitutionarray['__CONTACTCIVNAME__'] = ''; @@ -383,7 +384,7 @@ if ($action == 'presend') { // Array of other parameters $formmail->param['action'] = 'send'; $formmail->param['models'] = $modelmail; - $formmail->param['models_id'] = GETPOST('modelmailselected', 'int'); + $formmail->param['models_id'] = GETPOSTINT('modelmailselected'); $formmail->param['id'] = $object->id; $formmail->param['returnurl'] = $_SERVER["PHP_SELF"].'?id='.$object->id; $formmail->param['fileinit'] = array($file); diff --git a/htdocs/core/tpl/commonfields_add.tpl.php b/htdocs/core/tpl/commonfields_add.tpl.php index abdb45eff4e..92f48272aee 100644 --- a/htdocs/core/tpl/commonfields_add.tpl.php +++ b/htdocs/core/tpl/commonfields_add.tpl.php @@ -25,7 +25,7 @@ // Protection to avoid direct call of template if (empty($conf) || !is_object($conf)) { print "Error, template page can't be called as URL"; - exit; + exit(1); } ?> @@ -66,7 +66,7 @@ foreach ($object->fields as $key => $val) { print img_picto('', $val['picto'], '', false, 0, 0, '', 'pictofixedwidth'); } if (in_array($val['type'], array('int', 'integer'))) { - $value = GETPOST($key, 'int'); + $value = GETPOSTINT($key); } elseif ($val['type'] == 'double') { $value = price2num(GETPOST($key, 'alphanohtml')); } elseif (preg_match('/^text/', $val['type'])) { @@ -86,9 +86,9 @@ foreach ($object->fields as $key => $val) { } $value = GETPOST($key, $check); } elseif ($val['type'] == 'date') { - $value = dol_mktime(12, 0, 0, GETPOST($key.'month', 'int'), GETPOST($key.'day', 'int'), GETPOST($key.'year', 'int')); + $value = dol_mktime(12, 0, 0, GETPOSTINT($key.'month'), GETPOSTINT($key.'day'), GETPOSTINT($key.'year')); } elseif ($val['type'] == 'datetime') { - $value = dol_mktime(GETPOST($key.'hour', 'int'), GETPOST($key.'min', 'int'), 0, GETPOST($key.'month', 'int'), GETPOST($key.'day', 'int'), GETPOST($key.'year', 'int')); + $value = dol_mktime(GETPOSTINT($key.'hour'), GETPOSTINT($key.'min'), 0, GETPOSTINT($key.'month'), GETPOSTINT($key.'day'), GETPOSTINT($key.'year')); } elseif ($val['type'] == 'boolean') { $value = (GETPOST($key) == 'on' ? 1 : 0); } elseif ($val['type'] == 'price') { diff --git a/htdocs/core/tpl/commonfields_edit.tpl.php b/htdocs/core/tpl/commonfields_edit.tpl.php index 65459e121f6..fea9afd80dc 100644 --- a/htdocs/core/tpl/commonfields_edit.tpl.php +++ b/htdocs/core/tpl/commonfields_edit.tpl.php @@ -25,7 +25,7 @@ // Protection to avoid direct call of template if (empty($conf) || !is_object($conf)) { print "Error, template page can't be called as URL"; - exit; + exit(1); } if (!is_object($form)) { $form = new Form($db); @@ -69,7 +69,7 @@ foreach ($object->fields as $key => $val) { } if (in_array($val['type'], array('int', 'integer'))) { - $value = GETPOSTISSET($key) ? GETPOST($key, 'int') : $object->$key; + $value = GETPOSTISSET($key) ? GETPOSTINT($key) : $object->$key; } elseif ($val['type'] == 'double') { $value = GETPOSTISSET($key) ? price2num(GETPOST($key, 'alphanohtml')) : $object->$key; } elseif (preg_match('/^text/', $val['type'])) { @@ -89,7 +89,7 @@ foreach ($object->fields as $key => $val) { } $value = GETPOSTISSET($key) ? GETPOST($key, $check) : $object->$key; } elseif (in_array($val['type'], array('date', 'datetime'))) { - $value = GETPOSTISSET($key) ? dol_mktime(GETPOST($key.'hour', 'int'), GETPOST($key.'min', 'int'), GETPOST($key.'sec', 'int'), GETPOST($key.'month', 'int'), GETPOST($key.'day', 'int'), GETPOST($key.'year', 'int')) : $object->$key; + $value = GETPOSTISSET($key) ? dol_mktime(GETPOSTINT($key.'hour'), GETPOSTINT($key.'min'), GETPOSTINT($key.'sec'), GETPOSTINT($key.'month'), GETPOSTINT($key.'day'), GETPOSTINT($key.'year')) : $object->$key; } elseif ($val['type'] == 'price') { $value = GETPOSTISSET($key) ? price2num(GETPOST($key)) : price2num($object->$key); } elseif ($key == 'lang') { diff --git a/htdocs/core/tpl/commonfields_view.tpl.php b/htdocs/core/tpl/commonfields_view.tpl.php index 9f8c49198ec..6065f64e189 100644 --- a/htdocs/core/tpl/commonfields_view.tpl.php +++ b/htdocs/core/tpl/commonfields_view.tpl.php @@ -26,7 +26,7 @@ // Protection to avoid direct call of template if (empty($conf) || !is_object($conf)) { print "Error, template page can't be called as URL"; - exit; + exit(1); } if (!is_object($form)) { $form = new Form($db); diff --git a/htdocs/core/tpl/contacts.tpl.php b/htdocs/core/tpl/contacts.tpl.php index 1ba771c4750..d05831af439 100644 --- a/htdocs/core/tpl/contacts.tpl.php +++ b/htdocs/core/tpl/contacts.tpl.php @@ -27,7 +27,7 @@ // Protection to avoid direct call of template if (empty($object) || !is_object($object)) { print "Error, template page can't be called as URL"; - exit; + exit(1); } if (empty($preselectedtypeofcontact)) { @@ -163,7 +163,7 @@ if ($permission) {
socid) ? 0 : $object->socid); + $selectedCompany = GETPOSTISSET("newcompany") ? GETPOSTINT("newcompany") : (empty($object->socid) ? 0 : $object->socid); $selectedCompany = $formcompany->selectCompaniesForNewContact($object, 'id', $selectedCompany, 'newcompany', '', 0, '', 'minwidth300imp'); // This also print the select component?>
diff --git a/htdocs/core/tpl/document_actions_post_headers.tpl.php b/htdocs/core/tpl/document_actions_post_headers.tpl.php index f01f286e1a6..373fcab1813 100644 --- a/htdocs/core/tpl/document_actions_post_headers.tpl.php +++ b/htdocs/core/tpl/document_actions_post_headers.tpl.php @@ -32,7 +32,7 @@ // Protection to avoid direct call of template if (empty($langs) || !is_object($langs)) { print "Error, template page can't be called as URL"; - exit; + exit(1); } @@ -70,7 +70,7 @@ if (in_array($modulepart, array('product', 'produit', 'societe', 'user', 'ticket if ($action == 'deletefile' || $action == 'deletelink') { $langs->load("companies"); // Need for string DeleteFile+ConfirmDeleteFiles print $form->formconfirm( - $_SERVER["PHP_SELF"].'?id='.$object->id.'&urlfile='.urlencode(GETPOST("urlfile")).'&linkid='.GETPOST('linkid', 'int').(empty($param) ? '' : $param), + $_SERVER["PHP_SELF"].'?id='.$object->id.'&urlfile='.urlencode(GETPOST("urlfile")).'&linkid='.GETPOSTINT('linkid').(empty($param) ? '' : $param), $langs->trans('DeleteFile'), $langs->trans('ConfirmDeleteFile'), 'confirm_deletefile', @@ -159,5 +159,5 @@ $formfile->list_of_documents( print "
"; //List of links -$formfile->listOfLinks($object, $permission, $action, GETPOST('linkid', 'int'), $param); +$formfile->listOfLinks($object, $permission, $action, GETPOSTINT('linkid'), $param); print "
"; diff --git a/htdocs/core/tpl/extrafields_add.tpl.php b/htdocs/core/tpl/extrafields_add.tpl.php index dc7a748d2a6..e9a5d283807 100644 --- a/htdocs/core/tpl/extrafields_add.tpl.php +++ b/htdocs/core/tpl/extrafields_add.tpl.php @@ -28,7 +28,7 @@ // Protection to avoid direct call of template if (empty($conf) || !is_object($conf)) { print "Error, template page can't be called as URL"; - exit; + exit(1); } ?> @@ -39,6 +39,13 @@ if (empty($conf) || !is_object($conf)) { if (!isset($parameters)) { $parameters = array(); } +' +@phan-var-force CommonObject $object +@phan-var-force string $action +@phan-var-force Conf $conf +@phan-var-force Translate $conf +@phan-var-force array $parameters +'; $reshook = $hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook diff --git a/htdocs/core/tpl/extrafields_edit.tpl.php b/htdocs/core/tpl/extrafields_edit.tpl.php index 7c72025a457..e778f59919e 100644 --- a/htdocs/core/tpl/extrafields_edit.tpl.php +++ b/htdocs/core/tpl/extrafields_edit.tpl.php @@ -28,7 +28,7 @@ // Protection to avoid direct call of template if (empty($conf) || !is_object($conf)) { print "Error, template page can't be called as URL"; - exit; + exit(1); } ?> @@ -39,6 +39,14 @@ if (empty($conf) || !is_object($conf)) { if (!isset($parameters)) { $parameters = array(); } +' +@phan-var-force CommonObject $object +@phan-var-force string $action +@phan-var-force Conf $conf +@phan-var-force Translate $conf +@phan-var-force array $parameters +'; + $reshook = $hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; if (empty($reshook)) { diff --git a/htdocs/core/tpl/extrafields_list_array_fields.tpl.php b/htdocs/core/tpl/extrafields_list_array_fields.tpl.php index 46ad5391035..46eb1a8b55f 100644 --- a/htdocs/core/tpl/extrafields_list_array_fields.tpl.php +++ b/htdocs/core/tpl/extrafields_list_array_fields.tpl.php @@ -3,10 +3,15 @@ // This tpl file is included into the init part of pages, so before action. // So no output must be done. +// TODO: Note, supposing $arrayfields is already set +' + @phan-var-force array $arrayfields; +'; + // Protection to avoid direct call of template if (empty($conf) || !is_object($conf)) { print "Error, template page can't be called as URL"; - exit; + exit(1); } if (empty($extrafieldsobjectkey) && is_object($object)) { @@ -24,9 +29,9 @@ if (!empty($extrafieldsobjectkey)) { // $extrafieldsobject is the $object->table $arrayfields[$extrafieldsobjectprefix.$key] = array( 'label' => $extrafields->attributes[$extrafieldsobjectkey]['label'][$key], 'type' => $extrafields->attributes[$extrafieldsobjectkey]['type'][$key], - 'checked' => ((dol_eval($extrafields->attributes[$extrafieldsobjectkey]['list'][$key], 1, 1, '1') <= 0) ? 0 : 1), + 'checked' => (((int) dol_eval($extrafields->attributes[$extrafieldsobjectkey]['list'][$key], 1, 1, '1') <= 0) ? 0 : 1), 'position' => $extrafields->attributes[$extrafieldsobjectkey]['pos'][$key], - 'enabled' => (abs((int) dol_eval($extrafields->attributes[$extrafieldsobjectkey]['list'][$key], 1)) != 3 && dol_eval($extrafields->attributes[$extrafieldsobjectkey]['perms'][$key], 1, 1, '1')), + 'enabled' => (abs((int) dol_eval($extrafields->attributes[$extrafieldsobjectkey]['list'][$key], 1)) != 3 && (int) dol_eval($extrafields->attributes[$extrafieldsobjectkey]['perms'][$key], 1, 1, '1')), 'langfile' => $extrafields->attributes[$extrafieldsobjectkey]['langfile'][$key], 'help' => $extrafields->attributes[$extrafieldsobjectkey]['help'][$key], ); diff --git a/htdocs/core/tpl/extrafields_list_print_fields.tpl.php b/htdocs/core/tpl/extrafields_list_print_fields.tpl.php index 679a420df8c..2ea9aaa1b80 100644 --- a/htdocs/core/tpl/extrafields_list_print_fields.tpl.php +++ b/htdocs/core/tpl/extrafields_list_print_fields.tpl.php @@ -3,7 +3,7 @@ // Protection to avoid direct call of template if (empty($conf) || !is_object($conf)) { print "Error, template page can't be called as URL"; - exit; + exit(1); } if (empty($extrafieldsobjectkey) && is_object($object)) { @@ -35,7 +35,7 @@ if (!empty($extrafieldsobjectkey) && !empty($extrafields->attributes[$extrafield // If field is a computed field, we make computation to get value if ($extrafields->attributes[$extrafieldsobjectkey]['computed'][$key]) { $objectoffield = $object; //For compatibility with the computed formula - $value = dol_eval($extrafields->attributes[$extrafieldsobjectkey]['computed'][$key], 1, 1, '2'); + $value = dol_eval((int) $extrafields->attributes[$extrafieldsobjectkey]['computed'][$key], 1, 1, '2'); if (is_numeric(price2num($value)) && $extrafields->attributes[$extrafieldsobjectkey]['totalizable'][$key]) { $obj->$tmpkey = price2num($value); } @@ -71,7 +71,8 @@ if (!empty($extrafieldsobjectkey) && !empty($extrafields->attributes[$extrafield $totalarray['totalizable'][$key]['total'] += $obj->$tmpkey; } } - if (!empty($val['isameasure']) && $val['isameasure'] == 1) { + // key 'totalizable' if in extrafields same as 'isameasure' into ->$fields + if (!empty($extrafields->attributes[$extrafieldsobjectkey]['totalizable'][$key]) && $extrafields->attributes[$extrafieldsobjectkey]['totalizable'][$key] == 1) { if (!$i) { $totalarray['pos'][$totalarray['nbfield']] = $extrafieldsobjectprefix.$tmpkey; } diff --git a/htdocs/core/tpl/extrafields_list_search_input.tpl.php b/htdocs/core/tpl/extrafields_list_search_input.tpl.php index f209c9fd49d..886a0cbc092 100644 --- a/htdocs/core/tpl/extrafields_list_search_input.tpl.php +++ b/htdocs/core/tpl/extrafields_list_search_input.tpl.php @@ -5,7 +5,7 @@ print ''."\n"; // Protection to avoid direct call of template if (empty($conf) || !is_object($conf)) { print "Error, template page can't be called as URL"; - exit; + exit(1); } if (empty($extrafieldsobjectkey) && is_object($object)) { diff --git a/htdocs/core/tpl/extrafields_list_search_param.tpl.php b/htdocs/core/tpl/extrafields_list_search_param.tpl.php index 2ab5749b4e0..bdfaafbce59 100644 --- a/htdocs/core/tpl/extrafields_list_search_param.tpl.php +++ b/htdocs/core/tpl/extrafields_list_search_param.tpl.php @@ -3,7 +3,7 @@ // Protection to avoid direct call of template if (empty($conf) || !is_object($conf)) { print "Error, template page can't be called as URL"; - exit; + exit(1); } // Loop to complete $param for extrafields diff --git a/htdocs/core/tpl/extrafields_list_search_sql.tpl.php b/htdocs/core/tpl/extrafields_list_search_sql.tpl.php index ff858ef0d29..31e6acf3c89 100644 --- a/htdocs/core/tpl/extrafields_list_search_sql.tpl.php +++ b/htdocs/core/tpl/extrafields_list_search_sql.tpl.php @@ -3,7 +3,7 @@ // Protection to avoid direct call of template if (empty($conf) || !is_object($conf)) { print "Error, template page can't be called as URL"; - exit; + exit(1); } if (empty($extrafieldsobjectkey) && is_object($object)) { diff --git a/htdocs/core/tpl/extrafields_list_search_title.tpl.php b/htdocs/core/tpl/extrafields_list_search_title.tpl.php index 8d24c81c2e4..df6386f7557 100644 --- a/htdocs/core/tpl/extrafields_list_search_title.tpl.php +++ b/htdocs/core/tpl/extrafields_list_search_title.tpl.php @@ -3,7 +3,7 @@ // Protection to avoid direct call of template if (empty($conf) || !is_object($conf)) { print "Error, template page can't be called as URL"; - exit; + exit(1); } if (empty($extrafieldsobjectkey) && is_object($object)) { diff --git a/htdocs/core/tpl/extrafields_view.tpl.php b/htdocs/core/tpl/extrafields_view.tpl.php index 447b939940d..db152a3141f 100644 --- a/htdocs/core/tpl/extrafields_view.tpl.php +++ b/htdocs/core/tpl/extrafields_view.tpl.php @@ -29,7 +29,7 @@ // Protection to avoid direct call of template if (empty($object) || !is_object($object)) { print "Error, template page can't be called as URL"; - exit; + exit(1); } if (!is_object($form)) { @@ -74,15 +74,15 @@ if (empty($reshook) && !empty($object->table_element) && isset($extrafields->att $enabled = 1; if ($enabled && isset($extrafields->attributes[$object->table_element]['enabled'][$tmpkeyextra])) { - $enabled = dol_eval($extrafields->attributes[$object->table_element]['enabled'][$tmpkeyextra], 1, 1, '2'); + $enabled = (int) dol_eval($extrafields->attributes[$object->table_element]['enabled'][$tmpkeyextra], 1, 1, '2'); } if ($enabled && isset($extrafields->attributes[$object->table_element]['list'][$tmpkeyextra])) { - $enabled = dol_eval($extrafields->attributes[$object->table_element]['list'][$tmpkeyextra], 1, 1, '2'); + $enabled = (int) dol_eval($extrafields->attributes[$object->table_element]['list'][$tmpkeyextra], 1, 1, '2'); } $perms = 1; if ($perms && isset($extrafields->attributes[$object->table_element]['perms'][$tmpkeyextra])) { - $perms = dol_eval($extrafields->attributes[$object->table_element]['perms'][$tmpkeyextra], 1, 1, '2'); + $perms = (int) dol_eval($extrafields->attributes[$object->table_element]['perms'][$tmpkeyextra], 1, 1, '2'); } //print $tmpkeyextra.'-'.$enabled.'-'.$perms.'
'."\n"; @@ -225,7 +225,7 @@ if (empty($reshook) && !empty($object->table_element) && isset($extrafields->att $datenotinstring = $db->jdate($datenotinstring); } //print 'x'.$object->array_options['options_' . $tmpkeyextra].'-'.$datenotinstring.' - '.dol_print_date($datenotinstring, 'dayhour'); - $value = GETPOSTISSET("options_".$tmpkeyextra) ? dol_mktime(12, 0, 0, GETPOST("options_".$tmpkeyextra."month", 'int'), GETPOST("options_".$tmpkeyextra."day", 'int'), GETPOST("options_".$tmpkeyextra."year", 'int')) : $datenotinstring; + $value = GETPOSTISSET("options_".$tmpkeyextra) ? dol_mktime(12, 0, 0, GETPOSTINT("options_".$tmpkeyextra."month"), GETPOSTINT("options_".$tmpkeyextra."day"), GETPOSTINT("options_".$tmpkeyextra."year")) : $datenotinstring; } if (in_array($extrafields->attributes[$object->table_element]['type'][$tmpkeyextra], array('datetime'))) { $datenotinstring = empty($object->array_options['options_'.$tmpkeyextra]) ? '' : $object->array_options['options_'.$tmpkeyextra]; @@ -234,7 +234,7 @@ if (empty($reshook) && !empty($object->table_element) && isset($extrafields->att $datenotinstring = $db->jdate($datenotinstring); } //print 'x'.$object->array_options['options_' . $tmpkeyextra].'-'.$datenotinstring.' - '.dol_print_date($datenotinstring, 'dayhour'); - $value = GETPOSTISSET("options_".$tmpkeyextra) ? dol_mktime(GETPOST("options_".$tmpkeyextra."hour", 'int'), GETPOST("options_".$tmpkeyextra."min", 'int'), GETPOST("options_".$tmpkeyextra."sec", 'int'), GETPOST("options_".$tmpkeyextra."month", 'int'), GETPOST("options_".$tmpkeyextra."day", 'int'), GETPOST("options_".$tmpkeyextra."year", 'int'), 'tzuserrel') : $datenotinstring; + $value = GETPOSTISSET("options_".$tmpkeyextra) ? dol_mktime(GETPOSTINT("options_".$tmpkeyextra."hour"), GETPOSTINT("options_".$tmpkeyextra."min"), GETPOSTINT("options_".$tmpkeyextra."sec"), GETPOSTINT("options_".$tmpkeyextra."month"), GETPOSTINT("options_".$tmpkeyextra."day"), GETPOSTINT("options_".$tmpkeyextra."year"), 'tzuserrel') : $datenotinstring; } //TODO Improve element and rights detection diff --git a/htdocs/core/tpl/filemanager.tpl.php b/htdocs/core/tpl/filemanager.tpl.php index d4ca2e6ac21..ab549cbbb9a 100644 --- a/htdocs/core/tpl/filemanager.tpl.php +++ b/htdocs/core/tpl/filemanager.tpl.php @@ -195,15 +195,16 @@ if ($action == 'delete_section') { if ($action == 'confirmconvertimgwebp') { $langs->load("ecm"); - $section_dir=GETPOST('section_dir', 'alpha'); - $section=GETPOST('section', 'alpha'); - $file=GETPOST('filetoregenerate', 'alpha'); + $section_dir = GETPOST('section_dir', 'alpha'); + $section = GETPOST('section', 'alpha'); + $file = GETPOST('filetoregenerate', 'alpha'); $form = new Form($db); - $formquestion['section_dir']=array('type'=>'hidden', 'value'=>$section_dir, 'name'=>'section_dir'); - $formquestion['section']=array('type'=>'hidden', 'value'=>$section, 'name'=>'section'); - $formquestion['filetoregenerate']=array('type'=>'hidden', 'value'=>$file, 'name'=>'filetoregenerate'); + $formquestion = array(); + $formquestion['section_dir'] = array('type' => 'hidden', 'value' => $section_dir, 'name' => 'section_dir'); + $formquestion['section'] = array('type' => 'hidden', 'value' => $section, 'name' => 'section'); + $formquestion['filetoregenerate'] = array('type' => 'hidden', 'value' => $file, 'name' => 'filetoregenerate'); if ($module == 'medias') { - $formquestion['website']=array('type'=>'hidden', 'value'=>$website->ref, 'name'=>'website'); + $formquestion['website'] = array('type' => 'hidden', 'value' => $website->ref, 'name' => 'website'); } $param = ''; if (!empty($sortfield)) { diff --git a/htdocs/core/tpl/list_print_subtotal.tpl.php b/htdocs/core/tpl/list_print_subtotal.tpl.php index 1d2d606dc8c..5f04d570ce4 100644 --- a/htdocs/core/tpl/list_print_subtotal.tpl.php +++ b/htdocs/core/tpl/list_print_subtotal.tpl.php @@ -1,5 +1,7 @@ ,val?:array} $totalarray'; + // Move fields of totalizable into the common array pos and val if (!empty($subtotalarray['totalizable']) && is_array($subtotalarray['totalizable'])) { foreach ($subtotalarray['totalizable'] as $keytotalizable => $valtotalizable) { diff --git a/htdocs/core/tpl/list_print_total.tpl.php b/htdocs/core/tpl/list_print_total.tpl.php index e8fb9978be6..2d57d1397d8 100644 --- a/htdocs/core/tpl/list_print_total.tpl.php +++ b/htdocs/core/tpl/list_print_total.tpl.php @@ -1,5 +1,7 @@ ,pos?:array,val?:array} $totalarray'; + // Move fields of totalizable into the common array pos and val if (!empty($totalarray['totalizable']) && is_array($totalarray['totalizable'])) { foreach ($totalarray['totalizable'] as $keytotalizable => $valtotalizable) { @@ -56,7 +58,7 @@ if (isset($totalarray['pos'])) { } else { //dol_print_error($db); // as we're not sure it's ok for ALL lists, we don't print sq errors, they'll be in logs } - if (is_array($sumsarray) && count($sumsarray) >0) { + if (is_array($sumsarray) && count($sumsarray) > 0) { print '
'; - print (!empty($val) ? convertSecondToTime($val, 'allhourmin') : 0); + print(!empty($val) ? convertSecondToTime($val, 'allhourmin') : 0); print ''; - print (!empty($val) ? $val : ''); + print(!empty($val) ? $val : ''); print ' "> "> - + - + "> %%
'; - $date_start = dol_mktime(GETPOST('date_starthour'), GETPOST('date_startmin'), 0, GETPOST('date_startmonth'), GETPOST('date_startday'), GETPOST('date_startyear')); - $date_end = dol_mktime(GETPOST('date_starthour'), GETPOST('date_startmin'), 0, GETPOST('date_endmonth'), GETPOST('date_endday'), GETPOST('date_endyear')); + print ''; + $date_start = dol_mktime(GETPOST('date_starthour'), GETPOST('date_startmin'), 0, GETPOST('date_startmonth'), GETPOST('date_startday'), GETPOST('date_startyear')); + $date_end = dol_mktime(GETPOST('date_starthour'), GETPOST('date_startmin'), 0, GETPOST('date_endmonth'), GETPOST('date_endday'), GETPOST('date_endyear')); - $prefillDates = false; + $prefillDates = false; if (getDolGlobalString('MAIN_FILL_SERVICE_DATES_FROM_LAST_SERVICE_LINE') && !empty($object->lines)) { for ($i = count($object->lines) - 1; $i >= 0; $i--) { @@ -573,7 +578,7 @@ if ((isModEnabled("service") || ($object->element == 'contrat')) && $dateSelecto echo ' '.$langs->trans('FillWithLastServiceDates').''; } - print ''; - print '
trans('ServiceLimitedDuration').' '.$langs->trans('From').' '; ?> lines) && $i > 0) { + for ($j = $i - 1; $j >= 0; $j--) { + $lastline = $object->lines[$j]; + if ($lastline->product_type == Product::TYPE_SERVICE && (!empty($lastline->date_start) || !empty($lastline->date_end))) { + $date_start_prefill = $lastline->date_start; + $date_end_prefill = $lastline->date_end; + $prefillDates = true; + break; + } + } + } $hourmin = (isset($conf->global->MAIN_USE_HOURMIN_IN_DATE_RANGE) ? $conf->global->MAIN_USE_HOURMIN_IN_DATE_RANGE : ''); print $form->selectDate($line->date_start, 'date_start', $hourmin, $hourmin, $line->date_start ? 0 : 1, "updateline", 1, 0); print ' '.$langs->trans('to').' '; print $form->selectDate($line->date_end, 'date_end', $hourmin, $hourmin, $line->date_end ? 0 : 1, "updateline", 1, 0); + if ($prefillDates) { + echo ' '.$langs->trans('FillWithLastServiceDates').''; + } print ''; $tmp = $tmp.''; + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder $desc = $form->textwithpicto($tmp, $langs->transnoentities("InvoiceDepositDesc"), 1, 'help', '', 0, 3); print ''; print ''; print ''; } print '
'; @@ -2449,7 +2452,7 @@ if ($action == 'create') { print $form->selectarray('typedeposit', $arraylist, GETPOST('typedeposit', 'aZ09'), 0, 0, 0, '', 1); print ''; - print ''.$langs->trans("AmountOrPercent").''; + print ''.$langs->trans("AmountOrPercent").''; print '
'; @@ -2543,7 +2546,7 @@ if ($action == 'create') { $newinvoice_static->paye = $valarray ['paye']; $optionsav .= '
'.$langs->trans('DateInvoice').''; print img_picto('', 'action', 'class="pictofixedwidth"'); - print $form->selectDate($dateinvoice, '', '', '', '', "add", 1, 1); + print $form->selectDate($dateinvoice, '', 0, 0, 0, "add", 1, 1); print '
'.$langs->trans('DateMaxPayment').''; print img_picto('', 'action', 'class="pictofixedwidth"'); - print $form->selectDate($datedue, 'ech', '', '', '', "add", 1, 1); + print $form->selectDate($datedue, 'ech', 0, 0, 0, "add", 1, 1); print '
'.$langs->trans('BankAccount').''; // when bank account is empty (means not override by payment mode form a other object, like third-party), try to use default value print img_picto('', 'bank_account', 'class="pictofixedwidth"').$form->select_comptes($fk_account, 'fk_account', 0, '', 1, '', 0, 'maxwidth200 widthcentpercentminusx', 1); @@ -2716,7 +2719,11 @@ if ($action == 'create') { print ''.$form->editfieldkey('Currency', 'multicurrency_code', '', $object, 0).''; print img_picto('', 'currency', 'class="pictofixedwidth"'); - print $form->selectMultiCurrency((GETPOSTISSET('multicurrency_code') ? GETPOST('multicurrency_code', 'alpha') : $currency_code), 'multicurrency_code'); + $used_currency_code = $currency_code; + if (!GETPOST('changecompany')) { + $used_currency_code = GETPOSTISSET('multicurrency_code') ? GETPOST('multicurrency_code', 'alpha') : $currency_code; + } + print $form->selectMultiCurrency($used_currency_code, 'multicurrency_code'); print '
'; print ''; print ''; - print ''; + print ''; if (isModEnabled("multicurrency") && ($object->multicurrency_code && $object->multicurrency_code != $conf->currency)) { - print ''; + print ''; } print ''; @@ -3567,7 +3575,7 @@ if ($action == 'create') { print price($object->total_tva, 1, $langs, 0, -1, -1, $conf->currency); print ''; if (isModEnabled("multicurrency") && ($object->multicurrency_code && $object->multicurrency_code != $conf->currency)) { - print ''; + print ''; } print ''; @@ -3586,9 +3594,9 @@ if ($action == 'create') { print ''; print ''; - print ''; + print ''; if (isModEnabled("multicurrency") && ($object->multicurrency_code && $object->multicurrency_code != $conf->currency)) { - print ''; + print ''; } print ''; @@ -3609,7 +3617,7 @@ if ($action == 'create') { if (isModEnabled('project')) { $nbrows++; } - if (isModEnabled("banque")) { + if (isModEnabled("bank")) { $nbrows++; $nbcols++; } @@ -3651,7 +3659,7 @@ if ($action == 'create') { print ''; print ''; print ''; - if (isModEnabled("banque")) { + if (isModEnabled("bank")) { print ''; } print ''; @@ -3680,7 +3688,7 @@ if ($action == 'create') { print ''; - if (isModEnabled("banque")) { + if (isModEnabled("bank")) { $bankaccountstatic->id = $objp->baid; $bankaccountstatic->ref = $objp->baref; $bankaccountstatic->label = $objp->baref; @@ -3832,6 +3840,7 @@ if ($action == 'create') { $text .= '

'.$langs->trans("Reason").':'.$object->close_note; } print ''; + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition print $form->textwithpicto($langs->trans("Abandoned"), $text, - 1); print ''; print ''; @@ -3858,7 +3867,7 @@ if ($action == 'create') { print ''; // Remainder to pay Multicurrency - if (isModEnabled('multicurreny') && $object->multicurrency_code != $conf->currency || $object->multicurrency_tx != 1) { + if (isModEnabled('multicurrency') && $object->multicurrency_code != $conf->currency || $object->multicurrency_tx != 1) { print ''; // Remainder to pay back Multicurrency - if (isModEnabled('multicurreny') && $object->multicurrency_code != $conf->currency || $object->multicurrency_tx != 1) { + if (isModEnabled('multicurrency') && $object->multicurrency_code != $conf->currency || $object->multicurrency_tx != 1) { print ''; } @@ -942,9 +943,9 @@ while ($i < $imaxinloop) { if (!empty($arrayfields['f.unit_frequency']['checked'])) { print ''; @@ -1030,7 +1031,7 @@ while ($i < $imaxinloop) { // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php'; // Fields from hook - $parameters = array('arrayfields'=>$arrayfields, 'obj'=>$obj, 'i'=>$i, 'totalarray'=>&$totalarray); + $parameters = array('arrayfields' => $arrayfields, 'obj' => $obj, 'i' => $i, 'totalarray' => &$totalarray); $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters, $object); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; // Status @@ -1085,7 +1086,7 @@ if ($num == 0) { $db->free($resql); -$parameters = array('arrayfields'=>$arrayfields, 'sql'=>$sql); +$parameters = array('arrayfields' => $arrayfields, 'sql' => $sql); $reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; diff --git a/htdocs/fourn/facture/list.php b/htdocs/fourn/facture/list.php index 457bd35b0d4..4772ddea4e8 100644 --- a/htdocs/fourn/facture/list.php +++ b/htdocs/fourn/facture/list.php @@ -11,10 +11,11 @@ * Copyright (C) 2015-2016 Ferran Marcet * Copyright (C) 2017 Josep Lluís Amador * Copyright (C) 2018-2022 Charlene Benke - * Copyright (C) 2018-2020 Frédéric France + * Copyright (C) 2018-2024 Frédéric France * Copyright (C) 2019-2023 Alexandre Spangaro * Copyright (C) 2023 Nick Fragoulis * Copyright (C) 2023 Joachim Kueter + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -54,7 +55,7 @@ $langs->loadLangs(array('products', 'bills', 'companies', 'projects')); $action = GETPOST('action', 'aZ09'); $massaction = GETPOST('massaction', 'alpha'); -$show_files = GETPOST('show_files', 'int'); +$show_files = GETPOSTINT('show_files'); $confirm = GETPOST('confirm', 'alpha'); $toselect = GETPOST('toselect', 'array'); $optioncss = GETPOST('optioncss', 'alpha'); @@ -67,8 +68,8 @@ $search_amount_no_tax = GETPOST("search_amount_no_tax", "alpha"); $search_amount_all_tax = GETPOST("search_amount_all_tax", "alpha"); $search_ref = GETPOST('sf_ref') ? GETPOST('sf_ref', 'alpha') : GETPOST('search_ref', 'alpha'); $search_refsupplier = GETPOST('search_refsupplier', 'alpha'); -$search_type = GETPOST('search_type', 'int'); -$search_subtype = GETPOST('search_subtype', 'int'); +$search_type = GETPOSTINT('search_type'); +$search_subtype = GETPOSTINT('search_subtype'); $search_project = GETPOST('search_project', 'alpha'); $search_company = GETPOST('search_company', 'alpha'); $search_company_alias = GETPOST('search_company_alias', 'alpha'); @@ -83,30 +84,28 @@ $search_multicurrency_tx = GETPOST('search_multicurrency_tx', 'alpha'); $search_multicurrency_montant_ht = GETPOST('search_multicurrency_montant_ht', 'alpha'); $search_multicurrency_montant_vat = GETPOST('search_multicurrency_montant_vat', 'alpha'); $search_multicurrency_montant_ttc = GETPOST('search_multicurrency_montant_ttc', 'alpha'); -$search_status = GETPOST('search_status', 'int'); -$search_paymentmode = GETPOST('search_paymentmode', 'int'); -$search_paymentcond = GETPOST('search_paymentcond', 'int'); +$search_status = GETPOST('search_status', 'intcomma'); // Can be '' or a numeric +$search_paymentmode = GETPOSTINT('search_paymentmode'); +$search_paymentcond = GETPOSTINT('search_paymentcond'); $search_town = GETPOST('search_town', 'alpha'); $search_zip = GETPOST('search_zip', 'alpha'); $search_state = GETPOST("search_state"); $search_country = GETPOST("search_country", 'alpha'); -$search_type_thirdparty = GETPOST("search_type_thirdparty", 'int'); -$search_user = GETPOST('search_user', 'int'); -$search_sale = GETPOST('search_sale', 'int'); +$search_type_thirdparty = GETPOSTINT("search_type_thirdparty"); +$search_user = GETPOSTINT('search_user'); +$search_sale = GETPOSTINT('search_sale'); $search_date_start = GETPOSTDATE('search_date_start', '', 'tzserver'); $search_date_end = GETPOSTDATE('search_date_end', '23:59:59', 'tzserver'); -$search_datelimit_startday = GETPOST('search_datelimit_startday', 'int'); -$search_datelimit_startmonth = GETPOST('search_datelimit_startmonth', 'int'); -$search_datelimit_startyear = GETPOST('search_datelimit_startyear', 'int'); -$search_datelimit_endday = GETPOST('search_datelimit_endday', 'int'); -$search_datelimit_endmonth = GETPOST('search_datelimit_endmonth', 'int'); -$search_datelimit_endyear = GETPOST('search_datelimit_endyear', 'int'); +$search_datelimit_startday = GETPOSTINT('search_datelimit_startday'); +$search_datelimit_startmonth = GETPOSTINT('search_datelimit_startmonth'); +$search_datelimit_startyear = GETPOSTINT('search_datelimit_startyear'); +$search_datelimit_endday = GETPOSTINT('search_datelimit_endday'); +$search_datelimit_endmonth = GETPOSTINT('search_datelimit_endmonth'); +$search_datelimit_endyear = GETPOSTINT('search_datelimit_endyear'); $search_datelimit_start = dol_mktime(0, 0, 0, $search_datelimit_startmonth, $search_datelimit_startday, $search_datelimit_startyear); $search_datelimit_end = dol_mktime(23, 59, 59, $search_datelimit_endmonth, $search_datelimit_endday, $search_datelimit_endyear); -$search_btn = GETPOST('button_search', 'alpha'); -$search_remove_btn = GETPOST('button_removefilter', 'alpha'); -$search_categ_sup = trim(GETPOST("search_categ_sup", 'int')); -$search_product_category = GETPOST('search_product_category', 'int'); +$search_categ_sup = GETPOSTINT("search_categ_sup"); +$search_product_category = GETPOSTINT('search_product_category'); $option = GETPOST('search_option'); if ($option == 'late') { @@ -115,10 +114,10 @@ if ($option == 'late') { $filter = GETPOST('filtre', 'alpha'); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // If $page is not defined, or '' or -1 or if we click on clear filters $page = 0; @@ -133,7 +132,7 @@ if (!$sortfield) { $pageprev = $page - 1; $pagenext = $page + 1; -$socid = GETPOST('socid', 'int'); +$socid = GETPOSTINT('socid'); // Security check if ($user->socid > 0) { @@ -158,12 +157,12 @@ $search_array_options = $extrafields->getOptionalsFromPost($object->table_elemen // List of fields to search into when doing a "search in all" $fieldstosearchall = array( - 'f.ref'=>'Ref', - 'f.ref_supplier'=>'RefSupplier', - 'f.note_public'=>'NotePublic', - 's.nom'=>"ThirdParty", - 's.code_fournisseur'=>"SupplierCodeShort", - 'pd.description'=>'Description', + 'f.ref' => 'Ref', + 'f.ref_supplier' => 'RefSupplier', + 'f.note_public' => 'NotePublic', + 's.nom' => "ThirdParty", + 's.code_fournisseur' => "SupplierCodeShort", + 'pd.description' => 'Description', ); if (empty($user->socid)) { $fieldstosearchall["f.note_private"] = "NotePrivate"; @@ -171,42 +170,42 @@ if (empty($user->socid)) { $checkedtypetiers = 0; $arrayfields = array( - 'f.ref'=>array('label'=>"Ref", 'checked'=>1), - 'f.ref_supplier'=>array('label'=>"RefSupplier", 'checked'=>1), - 'f.type'=>array('label'=>"Type", 'checked'=>0), - 'f.subtype'=>array('label'=>"InvoiceSubtype", 'checked'=>0,), - 'f.label'=>array('label'=>"Label", 'checked'=>0), - 'f.datef'=>array('label'=>"DateInvoice", 'checked'=>1), - 'f.date_lim_reglement'=>array('label'=>"DateDue", 'checked'=>1), - 'p.ref'=>array('label'=>"ProjectRef", 'checked'=>0), - 's.nom'=>array('label'=>"ThirdParty", 'checked'=>1, 'position'=>41), - 's.name_alias'=>array('label'=>"AliasNameShort", 'checked'=>0, 'position'=>42), - 's.town'=>array('label'=>"Town", 'checked'=>-1, 'position'=>43), - 's.zip'=>array('label'=>"Zip", 'checked'=>1, 'position'=>44), - 'state.nom'=>array('label'=>"StateShort", 'checked'=>0, 'position'=>45), - 'country.code_iso'=>array('label'=>"Country", 'checked'=>0, 'position'=>46), - 'typent.code'=>array('label'=>"ThirdPartyType", 'checked'=>$checkedtypetiers, 'position'=>49), - 'f.fk_mode_reglement'=>array('label'=>"PaymentMode", 'checked'=>1, 'position'=>52), - 'f.fk_cond_reglement'=>array('label'=>"PaymentConditionsShort", 'checked'=>1, 'position'=>50), - 'f.total_ht'=>array('label'=>"AmountHT", 'checked'=>1, 'position'=>105), - 'f.total_vat'=>array('label'=>"AmountVAT", 'checked'=>0, 'position'=>110), - 'f.total_localtax1'=>array('label'=>$langs->transcountry("AmountLT1", $mysoc->country_code), 'checked'=>0, 'enabled'=>$mysoc->localtax1_assuj == "1", 'position'=>95), - 'f.total_localtax2'=>array('label'=>$langs->transcountry("AmountLT2", $mysoc->country_code), 'checked'=>0, 'enabled'=>$mysoc->localtax2_assuj == "1", 'position'=>100), - 'f.total_ttc'=>array('label'=>"AmountTTC", 'checked'=>0, 'position'=>115), - 'dynamount_payed'=>array('label'=>"Paid", 'checked'=>0, 'position'=>116), - 'rtp'=>array('label'=>"Rest", 'checked'=>0, 'position'=>117), - 'f.multicurrency_code'=>array('label'=>'Currency', 'checked'=>0, 'position'=>205, 'enabled'=>(!isModEnabled("multicurrency") ? 0 : 1)), - 'f.multicurrency_tx'=>array('label'=>'CurrencyRate', 'checked'=>0, 'position'=>206, 'enabled'=>(!isModEnabled("multicurrency") ? 0 : 1)), - 'f.multicurrency_total_ht'=>array('label'=>'MulticurrencyAmountHT', 'position'=>207, 'checked'=>0, 'enabled'=>(!isModEnabled("multicurrency") ? 0 : 1)), - 'f.multicurrency_total_vat'=>array('label'=>'MulticurrencyAmountVAT', 'position'=>208, 'checked'=>0, 'enabled'=>(!isModEnabled("multicurrency") ? 0 : 1)), - 'f.multicurrency_total_ttc'=>array('label'=>'MulticurrencyAmountTTC', 'position'=>209, 'checked'=>0, 'enabled'=>(!isModEnabled("multicurrency") ? 0 : 1)), - 'multicurrency_dynamount_payed'=>array('label'=>'MulticurrencyAlreadyPaid', 'position'=>210, 'checked'=>0, 'enabled'=>(!isModEnabled("multicurrency") ? 0 : 1)), - 'multicurrency_rtp'=>array('label'=>'MulticurrencyRemainderToPay', 'checked'=>0, 'position'=>211, 'enabled'=>(!isModEnabled("multicurrency") ? 0 : 1)), // Not enabled by default because slow - 'u.login'=>array('label'=>"Author", 'checked'=>1, 'position'=>500), - 'f.datec'=>array('label'=>"DateCreation", 'checked'=>0, 'position'=>501), - 'f.tms'=>array('label'=>"DateModificationShort", 'checked'=>0, 'position'=>502), - 'f.fk_statut'=>array('label'=>"Status", 'checked'=>1, 'position'=>1000), - 'f.nb_docs'=>array('label'=>"Documents", 'checked'=>1, 'position'=>510), + 'f.ref' => array('label' => "Ref", 'checked' => 1), + 'f.ref_supplier' => array('label' => "RefSupplier", 'checked' => 1), + 'f.type' => array('label' => "Type", 'checked' => 0), + 'f.subtype' => array('label' => "InvoiceSubtype", 'checked' => 0,), + 'f.label' => array('label' => "Label", 'checked' => 0), + 'f.datef' => array('label' => "DateInvoice", 'checked' => 1), + 'f.date_lim_reglement' => array('label' => "DateDue", 'checked' => 1), + 'p.ref' => array('label' => "ProjectRef", 'checked' => 0), + 's.nom' => array('label' => "ThirdParty", 'checked' => 1, 'position' => 41), + 's.name_alias' => array('label' => "AliasNameShort", 'checked' => 0, 'position' => 42), + 's.town' => array('label' => "Town", 'checked' => -1, 'position' => 43), + 's.zip' => array('label' => "Zip", 'checked' => 1, 'position' => 44), + 'state.nom' => array('label' => "StateShort", 'checked' => 0, 'position' => 45), + 'country.code_iso' => array('label' => "Country", 'checked' => 0, 'position' => 46), + 'typent.code' => array('label' => "ThirdPartyType", 'checked' => $checkedtypetiers, 'position' => 49), + 'f.fk_mode_reglement' => array('label' => "PaymentMode", 'checked' => 1, 'position' => 52), + 'f.fk_cond_reglement' => array('label' => "PaymentConditionsShort", 'checked' => 1, 'position' => 50), + 'f.total_ht' => array('label' => "AmountHT", 'checked' => 1, 'position' => 105), + 'f.total_vat' => array('label' => "AmountVAT", 'checked' => 0, 'position' => 110), + 'f.total_localtax1' => array('label' => $langs->transcountry("AmountLT1", $mysoc->country_code), 'checked' => 0, 'enabled' => $mysoc->localtax1_assuj == "1", 'position' => 95), + 'f.total_localtax2' => array('label' => $langs->transcountry("AmountLT2", $mysoc->country_code), 'checked' => 0, 'enabled' => $mysoc->localtax2_assuj == "1", 'position' => 100), + 'f.total_ttc' => array('label' => "AmountTTC", 'checked' => 0, 'position' => 115), + 'dynamount_payed' => array('label' => "Paid", 'checked' => 0, 'position' => 116), + 'rtp' => array('label' => "Rest", 'checked' => 0, 'position' => 117), + 'f.multicurrency_code' => array('label' => 'Currency', 'checked' => 0, 'position' => 205, 'enabled' => (!isModEnabled("multicurrency") ? 0 : 1)), + 'f.multicurrency_tx' => array('label' => 'CurrencyRate', 'checked' => 0, 'position' => 206, 'enabled' => (!isModEnabled("multicurrency") ? 0 : 1)), + 'f.multicurrency_total_ht' => array('label' => 'MulticurrencyAmountHT', 'position' => 207, 'checked' => 0, 'enabled' => (!isModEnabled("multicurrency") ? 0 : 1)), + 'f.multicurrency_total_vat' => array('label' => 'MulticurrencyAmountVAT', 'position' => 208, 'checked' => 0, 'enabled' => (!isModEnabled("multicurrency") ? 0 : 1)), + 'f.multicurrency_total_ttc' => array('label' => 'MulticurrencyAmountTTC', 'position' => 209, 'checked' => 0, 'enabled' => (!isModEnabled("multicurrency") ? 0 : 1)), + 'multicurrency_dynamount_payed' => array('label' => 'MulticurrencyAlreadyPaid', 'position' => 210, 'checked' => 0, 'enabled' => (!isModEnabled("multicurrency") ? 0 : 1)), + 'multicurrency_rtp' => array('label' => 'MulticurrencyRemainderToPay', 'checked' => 0, 'position' => 211, 'enabled' => (!isModEnabled("multicurrency") ? 0 : 1)), // Not enabled by default because slow + 'u.login' => array('label' => "Author", 'checked' => 1, 'position' => 500), + 'f.datec' => array('label' => "DateCreation", 'checked' => 0, 'position' => 501), + 'f.tms' => array('label' => "DateModificationShort", 'checked' => 0, 'position' => 502), + 'f.fk_statut' => array('label' => "Status", 'checked' => 1, 'position' => 1000), + 'f.nb_docs' => array('label' => "Documents", 'checked' => 1, 'position' => 510), ); // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_array_fields.tpl.php'; @@ -243,7 +242,7 @@ if (!GETPOST('confirmmassaction', 'alpha') && $massaction != 'presend' && $massa $massaction = ''; } -$parameters = array('socid'=>$socid, 'arrayfields'=>&$arrayfields); +$parameters = array('socid' => $socid, 'arrayfields' => &$arrayfields); $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); @@ -334,7 +333,7 @@ if (empty($reshook)) { $objecttmp->resteapayer = price2num($objecttmp->total_ttc - $totalpaid - $totalcreditnotes - $totaldeposits, 'MT'); // hook to finalize the remaining amount, considering e.g. cash discount agreements - $parameters = array('remaintopay'=>$objecttmp->resteapayer); + $parameters = array('remaintopay' => $objecttmp->resteapayer); $reshook = $hookmanager->executeHooks('finalizeAmountOfInvoice', $parameters, $objecttmp, $action); // Note that $action and $object may have been modified by some hooks if ($reshook > 0) { // print $hookmanager->resPrint; @@ -841,22 +840,22 @@ if ($search_date_end) { $param .= buildParamDate('search_date_end', null, '', 'tzserver'); } if ($search_datelimit_startday) { - $param .= '&search_datelimit_startday='.urlencode($search_datelimit_startday); + $param .= '&search_datelimit_startday='.urlencode((string) ($search_datelimit_startday)); } if ($search_datelimit_startmonth) { - $param .= '&search_datelimit_startmonth='.urlencode($search_datelimit_startmonth); + $param .= '&search_datelimit_startmonth='.urlencode((string) ($search_datelimit_startmonth)); } if ($search_datelimit_startyear) { - $param .= '&search_datelimit_startyear='.urlencode($search_datelimit_startyear); + $param .= '&search_datelimit_startyear='.urlencode((string) ($search_datelimit_startyear)); } if ($search_datelimit_endday) { - $param .= '&search_datelimit_endday='.urlencode($search_datelimit_endday); + $param .= '&search_datelimit_endday='.urlencode((string) ($search_datelimit_endday)); } if ($search_datelimit_endmonth) { - $param .= '&search_datelimit_endmonth='.urlencode($search_datelimit_endmonth); + $param .= '&search_datelimit_endmonth='.urlencode((string) ($search_datelimit_endmonth)); } if ($search_datelimit_endyear) { - $param .= '&search_datelimit_endyear='.urlencode($search_datelimit_endyear); + $param .= '&search_datelimit_endyear='.urlencode((string) ($search_datelimit_endyear)); } if ($search_ref) { $param .= '&search_ref='.urlencode($search_ref); @@ -922,22 +921,22 @@ if ($search_status >= 0) { $param .= "&search_status=".urlencode($search_status); } if ($search_paymentmode) { - $param .= '&search_paymentmode='.urlencode($search_paymentmode); + $param .= '&search_paymentmode='.urlencode((string) ($search_paymentmode)); } if ($search_paymentcond) { - $param .= '&search_paymentcond='.urlencode($search_paymentcond); + $param .= '&search_paymentcond='.urlencode((string) ($search_paymentcond)); } if ($show_files) { - $param .= '&show_files='.urlencode($show_files); + $param .= '&show_files='.urlencode((string) ($show_files)); } if ($option) { $param .= "&search_option=".urlencode($option); } if ($search_categ_sup > 0) { - $param .= '&search_categ_sup='.urlencode($search_categ_sup); + $param .= '&search_categ_sup='.$search_categ_sup; } if ($search_type_thirdparty != '' && $search_type_thirdparty > 0) { - $param .= '&search_type_thirdparty='.urlencode($search_type_thirdparty); + $param .= '&search_type_thirdparty='.$search_type_thirdparty; } // Add $param from extra fields @@ -949,8 +948,8 @@ $param .= $hookmanager->resPrint; // List of mass actions available $arrayofmassactions = array( - 'validate'=>img_picto('', 'check', 'class="pictofixedwidth"').$langs->trans("Validate"), - 'generate_doc'=>img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("ReGeneratePDF"), + 'validate' => img_picto('', 'check', 'class="pictofixedwidth"').$langs->trans("Validate"), + 'generate_doc' => img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("ReGeneratePDF"), //'builddoc'=>img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("PDFMerge"), //'presend'=>img_picto('', 'email', 'class="pictofixedwidth"').$langs->trans("SendByMail"), ); @@ -962,14 +961,14 @@ if (isModEnabled('paymentbybanktransfer') && $user->hasRight("paymentbybanktrans if (!empty($permissiontodelete)) { $arrayofmassactions['predelete'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete"); } -if (GETPOST('nomassaction', 'int') || in_array($massaction, array('presend', 'predelete'))) { +if (GETPOSTINT('nomassaction') || in_array($massaction, array('presend', 'predelete'))) { $arrayofmassactions = array(); } $massactionbutton = $form->selectMassAction('', $arrayofmassactions); $url = DOL_URL_ROOT.'/fourn/facture/card.php?action=create'; if (!empty($socid)) { - $url .= '&socid='.urlencode($socid); + $url .= '&socid='.urlencode((string) ($socid)); } $i = 0; @@ -989,8 +988,8 @@ print ''; print ''; $newcardbutton = ''; -$newcardbutton .= dolGetButtonTitle($langs->trans('ViewList'), '', 'fa fa-bars imgforviewmode', $_SERVER["PHP_SELF"].'?mode=common'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ((empty($mode) || $mode == 'common') ? 2 : 1), array('morecss'=>'reposition')); -$newcardbutton .= dolGetButtonTitle($langs->trans('ViewKanban'), '', 'fa fa-th-list imgforviewmode', $_SERVER["PHP_SELF"].'?mode=kanban'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ($mode == 'kanban' ? 2 : 1), array('morecss'=>'reposition')); +$newcardbutton .= dolGetButtonTitle($langs->trans('ViewList'), '', 'fa fa-bars imgforviewmode', $_SERVER["PHP_SELF"].'?mode=common'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ((empty($mode) || $mode == 'common') ? 2 : 1), array('morecss' => 'reposition')); +$newcardbutton .= dolGetButtonTitle($langs->trans('ViewKanban'), '', 'fa fa-th-list imgforviewmode', $_SERVER["PHP_SELF"].'?mode=kanban'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ($mode == 'kanban' ? 2 : 1), array('morecss' => 'reposition')); $newcardbutton .= dolGetButtonTitleSeparator(); $newcardbutton .= dolGetButtonTitle($langs->trans('NewBill'), '', 'fa fa-plus-circle', $url, '', ($user->hasRight("fournisseur", "facture", "creer") || $user->hasRight("supplier_invoice", "creer"))); @@ -1030,7 +1029,7 @@ if ($user->hasRight("user", "user", "lire")) { $moreforfilter .= ''; } // If the user can view prospects other than his' -if (isModEnabled('categorie') && $user->hasRight('categorie', 'lire') && ($user->hasRight('produit', 'lire') || $user->hasRight('service', 'lire'))) { +if (isModEnabled('category') && $user->hasRight('categorie', 'lire') && ($user->hasRight('produit', 'lire') || $user->hasRight('service', 'lire'))) { include_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; $moreforfilter .= '
'; $tmptitle = $langs->trans('IncludingProductWithTag'); @@ -1039,7 +1038,7 @@ if (isModEnabled('categorie') && $user->hasRight('categorie', 'lire') && ($user- $moreforfilter .= '
'; } -if (isModEnabled('categorie')) { +if (isModEnabled('category')) { require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; $moreforfilter .= '
'; $tmptitle = $langs->trans('SuppliersCategoriesShort'); @@ -1064,7 +1063,7 @@ if (!empty($moreforfilter)) { } $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; -$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')) : ''); // This also change content of $arrayfields +$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) : ''); // This also change content of $arrayfields $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); print '
'; @@ -1096,10 +1095,10 @@ if (!empty($arrayfields['f.ref_supplier']['checked'])) { if (!empty($arrayfields['f.type']['checked'])) { print '
'; } - // Invoice Subtype +// Invoice Subtype if (!empty($arrayfields['f.subtype']['checked'])) { print ''; } @@ -1470,7 +1470,7 @@ if (!empty($arrayfields['multicurrency_rtp']['checked'])) { // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; // Hook fields -$parameters = array('arrayfields'=>$arrayfields, 'param'=>$param, 'sortfield'=>$sortfield, 'sortorder'=>$sortorder, 'totalarray'=>&$totalarray); +$parameters = array('arrayfields' => $arrayfields, 'param' => $param, 'sortfield' => $sortfield, 'sortorder' => $sortorder, 'totalarray' => &$totalarray); $reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; if (!empty($arrayfields['f.datec']['checked'])) { @@ -1505,11 +1505,11 @@ $savnbfield = $totalarray['nbfield']; $totalarray = array(); $totalarray['nbfield'] = 0; $totalarray['val'] = array(); -$totalarray['val']['f.total_ht']=0; -$totalarray['val']['f.total_vat']=0; -$totalarray['val']['f.total_localtax1']=0; -$totalarray['val']['f.total_localtax1']=0; -$totalarray['val']['f.total_ttc']=0; +$totalarray['val']['f.total_ht'] = 0; +$totalarray['val']['f.total_vat'] = 0; +$totalarray['val']['f.total_localtax1'] = 0; +$totalarray['val']['f.total_localtax1'] = 0; +$totalarray['val']['f.total_ttc'] = 0; $imaxinloop = ($limit ? min($num, $limit) : $num); while ($i < $imaxinloop) { $obj = $db->fetch_object($resql); @@ -1525,6 +1525,7 @@ while ($i < $imaxinloop) { $userstatic->firstname = $obj->firstname; $userstatic->email = $obj->user_email; $userstatic->statut = $obj->user_statut; + $userstatic->status = $obj->user_statut; $userstatic->entity = $obj->entity; $userstatic->photo = $obj->photo; $userstatic->office_phone = $obj->office_phone; @@ -1595,7 +1596,6 @@ while ($i < $imaxinloop) { $facturestatic->alreadypaid = ($paiement ? $paiement : 0); $facturestatic->paye = $obj->paye; - $facturestatic->socid = $thirdparty->getNomUrl(1, 'supplier', 3); $facturestatic->date = $db->jdate($obj->datef); @@ -1988,7 +1988,7 @@ while ($i < $imaxinloop) { // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php'; // Fields from hook - $parameters = array('arrayfields'=>$arrayfields, 'object'=>$object, 'obj'=>$obj, 'i'=>$i, 'totalarray'=>&$totalarray); + $parameters = array('arrayfields' => $arrayfields, 'object' => $object, 'obj' => $obj, 'i' => $i, 'totalarray' => &$totalarray); $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; diff --git a/htdocs/fourn/facture/note.php b/htdocs/fourn/facture/note.php index e66f1efb45b..40e58ef7937 100644 --- a/htdocs/fourn/facture/note.php +++ b/htdocs/fourn/facture/note.php @@ -37,7 +37,7 @@ if (isModEnabled('project')) { $langs->loadLangs(array("bills", "companies")); -$id = (GETPOST('id', 'int') ? GETPOST('id', 'int') : GETPOST('facid', 'int')); +$id = (GETPOSTINT('id') ? GETPOSTINT('id') : GETPOSTINT('facid')); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); diff --git a/htdocs/fourn/facture/paiement.php b/htdocs/fourn/facture/paiement.php index 56b24d73985..7c9b3b8b3b7 100644 --- a/htdocs/fourn/facture/paiement.php +++ b/htdocs/fourn/facture/paiement.php @@ -61,7 +61,7 @@ $month = GETPOSTINT('month'); $year = GETPOSTINT('year'); $search_ref = GETPOST('search_ref', 'alpha'); -$search_account = GETPOST('search_account', 'int'); +$search_account = GETPOSTINT('search_account'); $search_paymenttype = GETPOST('search_paymenttype'); $search_amount = GETPOST('search_amount', 'alpha'); // alpha because we must be able to search on "< x" $search_company = GETPOST('search_company', 'alpha'); @@ -140,7 +140,7 @@ if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x' $search_array_options = array(); } -$parameters = array('socid'=>$socid); +$parameters = array('socid' => $socid); $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); @@ -155,6 +155,7 @@ if (empty($reshook)) { $totalpayment = 0; $atleastonepaymentnotnull = 0; $multicurrency_totalpayment = 0; + $formquestion = array(); // Generate payment array and check if there is payment higher than invoice and payment date before invoice date $tmpinvoice = new FactureFournisseur($db); @@ -216,7 +217,7 @@ if (empty($reshook)) { } } - $formquestion[$i++] = array('type' => 'hidden', 'name' => $key, 'value' => GETPOST($key, 'int')); + $formquestion[$i++] = array('type' => 'hidden', 'name' => $key, 'value' => GETPOSTINT($key)); } } @@ -226,7 +227,7 @@ if (empty($reshook)) { $error++; } - if (isModEnabled("banque")) { + if (isModEnabled("bank")) { // If bank module is on, account is required to enter a payment if (GETPOST('accountid') <= 0) { setEventMessages($langs->transnoentities('ErrorFieldRequired', $langs->transnoentities('AccountToCredit')), null, 'errors'); @@ -268,7 +269,7 @@ if (empty($reshook)) { if ($action == 'confirm_paiement' && $confirm == 'yes') { $error = 0; - $datepaye = dol_mktime(12, 0, 0, GETPOST('remonth', 'int'), GETPOST('reday', 'int'), GETPOST('reyear', 'int')); + $datepaye = dol_mktime(12, 0, 0, GETPOSTINT('remonth'), GETPOSTINT('reday'), GETPOSTINT('reyear')); $multicurrency_code = array(); $multicurrency_tx = array(); @@ -311,7 +312,13 @@ if (empty($reshook)) { // Creation of payment line $paiement = new PaiementFourn($db); $paiement->datepaye = $datepaye; - $paiement->amounts = $amounts; // Array of amounts + + $correctedAmounts = []; + foreach ($amounts as $key => $value) { + $correctedAmounts[$key] = (float) $value; + } + + $paiement->amounts = $correctedAmounts; // Array of amounts $paiement->multicurrency_amounts = $multicurrency_amounts; $paiement->multicurrency_code = $multicurrency_code; // Array with all currency of payments dispatching $paiement->multicurrency_tx = $multicurrency_tx; // Array with all currency tx of payments dispatching @@ -385,7 +392,7 @@ if ($action == 'create' || $action == 'confirm_paiement' || $action == 'add_paie $object = new FactureFournisseur($db); $result = $object->fetch($facid); - $datefacture = dol_mktime(12, 0, 0, GETPOST('remonth', 'int'), GETPOST('reday', 'int'), GETPOST('reyear', 'int')); + $datefacture = dol_mktime(12, 0, 0, GETPOSTINT('remonth'), GETPOSTINT('reday'), GETPOSTINT('reyear')); $dateinvoice = ($datefacture == '' ? (!getDolGlobalString('MAIN_AUTOFILL_DATE') ? -1 : '') : $datefacture); $sql = 'SELECT s.nom as name, s.rowid as socid,'; @@ -507,14 +514,14 @@ if ($action == 'create' || $action == 'confirm_paiement' || $action == 'add_paie print ''; print ''; - if (isModEnabled("banque")) { + if (isModEnabled("bank")) { print ' - + loadLangs(array("suppliers", "orders", "companies")); // Security check -$socid = GETPOST("socid", 'int'); +$socid = GETPOSTINT("socid"); if ($user->socid) { $socid = $user->socid; } diff --git a/htdocs/fourn/paiement/card.php b/htdocs/fourn/paiement/card.php index 93de58280d7..966cde2511b 100644 --- a/htdocs/fourn/paiement/card.php +++ b/htdocs/fourn/paiement/card.php @@ -40,7 +40,7 @@ $langs->loadLangs(array('banks', 'bills', 'companies', 'suppliers')); // Get Parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $action = GETPOST('action', 'alpha'); $confirm = GETPOST('confirm', 'alpha'); @@ -90,7 +90,7 @@ if ($action == 'confirm_delete' && $confirm == 'yes' && $user->hasRight("fournis $db->begin(); $object->fetch($id); - $result = $object->delete(); + $result = $object->delete($user); if ($result > 0) { $db->commit(); header('Location: '.DOL_URL_ROOT.'/fourn/paiement/list.php'); @@ -130,7 +130,7 @@ if ($action == 'setnum_paiement' && GETPOST('num_paiement')) { if ($action == 'setdatep' && GETPOST('datepday')) { $object->fetch($id); - $datepaye = dol_mktime(GETPOST('datephour', 'int'), GETPOST('datepmin', 'int'), GETPOST('datepsec', 'int'), GETPOST('datepmonth', 'int'), GETPOST('datepday', 'int'), GETPOST('datepyear', 'int')); + $datepaye = dol_mktime(GETPOSTINT('datephour'), GETPOSTINT('datepmin'), GETPOSTINT('datepsec'), GETPOSTINT('datepmonth'), GETPOSTINT('datepday'), GETPOSTINT('datepyear')); $res = $object->update_date($datepaye); if ($res === 0) { setEventMessages($langs->trans('PaymentDateUpdateSucceeded'), null, 'mesgs'); @@ -221,7 +221,7 @@ if ($result > 0) { // Amount print ''; - print ''; + print ''; // Status of validation of payment if (getDolGlobalString('BILL_ADD_PAYMENT_VALIDATION')) { @@ -231,7 +231,7 @@ if ($result > 0) { $allow_delete = 1; // Bank account - if (isModEnabled("banque")) { + if (isModEnabled("bank")) { if ($object->fk_account) { $bankline = new AccountLine($db); $bankline->fetch($object->bank_line); diff --git a/htdocs/fourn/paiement/document.php b/htdocs/fourn/paiement/document.php index 2bd45de41d3..db152d3eb47 100644 --- a/htdocs/fourn/paiement/document.php +++ b/htdocs/fourn/paiement/document.php @@ -47,7 +47,7 @@ $langs->loadLangs(array('banks', 'bills', 'companies', 'suppliers', 'other')); // Get Parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm', 'alpha'); @@ -60,10 +60,10 @@ if ($user->socid) { $result = restrictedArea($user, $object->element, $object->id, 'paiementfourn', ''); // Get parameters -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -126,11 +126,11 @@ if ($object->id > 0) { $morehtmlref .= '
'.$object->thirdparty->getNomUrl(1); // Amount - $morehtmlref .= '
'.$langs->trans('Amount').' : '. price($object->amount, '', $langs, 0, 0, -1, $conf->currency); + $morehtmlref .= '
'.$langs->trans('Amount').' : '. price($object->amount, 0, $langs, 0, 0, -1, $conf->currency); $allow_delete = 1; // Bank account - if (isModEnabled("banque")) { + if (isModEnabled("bank")) { if ($object->fk_account) { $bankline = new AccountLine($db); $bankline->fetch($object->bank_line); diff --git a/htdocs/fourn/paiement/info.php b/htdocs/fourn/paiement/info.php index 5979c2ff1ee..4ec07225f49 100644 --- a/htdocs/fourn/paiement/info.php +++ b/htdocs/fourn/paiement/info.php @@ -35,7 +35,7 @@ require_once DOL_DOCUMENT_ROOT.'/fourn/class/paiementfourn.class.php'; $langs->loadLangs(array("bills", "suppliers", "companies")); // Get Parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); // Initialize Objects $object = new PaiementFourn($db); diff --git a/htdocs/fourn/paiement/list.php b/htdocs/fourn/paiement/list.php index 2b47b0b9fd6..aa328d13024 100644 --- a/htdocs/fourn/paiement/list.php +++ b/htdocs/fourn/paiement/list.php @@ -48,29 +48,30 @@ $action = GETPOST('action', 'alpha'); $massaction = GETPOST('massaction', 'alpha'); $optioncss = GETPOST('optioncss', 'alpha'); $contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'vendorpaymentlist'; +$mode = GETPOST('mode', 'aZ'); -$socid = GETPOST('socid', 'int'); +$socid = GETPOSTINT('socid'); $search_ref = GETPOST('search_ref', 'alpha'); -$search_date_startday = GETPOST('search_date_startday', 'int'); -$search_date_startmonth = GETPOST('search_date_startmonth', 'int'); -$search_date_startyear = GETPOST('search_date_startyear', 'int'); -$search_date_endday = GETPOST('search_date_endday', 'int'); -$search_date_endmonth = GETPOST('search_date_endmonth', 'int'); -$search_date_endyear = GETPOST('search_date_endyear', 'int'); +$search_date_startday = GETPOSTINT('search_date_startday'); +$search_date_startmonth = GETPOSTINT('search_date_startmonth'); +$search_date_startyear = GETPOSTINT('search_date_startyear'); +$search_date_endday = GETPOSTINT('search_date_endday'); +$search_date_endmonth = GETPOSTINT('search_date_endmonth'); +$search_date_endyear = GETPOSTINT('search_date_endyear'); $search_date_start = dol_mktime(0, 0, 0, $search_date_startmonth, $search_date_startday, $search_date_startyear); // Use tzserver $search_date_end = dol_mktime(23, 59, 59, $search_date_endmonth, $search_date_endday, $search_date_endyear); $search_company = GETPOST('search_company', 'alpha'); $search_payment_type = GETPOST('search_payment_type'); $search_cheque_num = GETPOST('search_cheque_num', 'alpha'); -$search_bank_account = GETPOST('search_bank_account', 'int'); +$search_bank_account = GETPOSTINT('search_bank_account'); $search_amount = GETPOST('search_amount', 'alpha'); // alpha because we must be able to search on '< x' -$search_sale = GETPOST('search_sale', 'int'); +$search_sale = GETPOSTINT('search_sale'); -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST('page', 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOSTINT('page'); if (empty($page) || $page == -1) { $page = 0; // If $page is not defined, or '' or -1 @@ -90,20 +91,20 @@ $search_all = trim(GETPOSTISSET("search_all") ? GETPOST("search_all", 'alpha') : // List of fields to search into when doing a "search in all" $fieldstosearchall = array( - 'p.ref'=>"RefPayment", - 's.nom'=>"ThirdParty", - 'p.num_paiement'=>"Numero", - 'p.amount'=>"Amount", + 'p.ref' => "RefPayment", + 's.nom' => "ThirdParty", + 'p.num_paiement' => "Numero", + 'p.amount' => "Amount", ); $arrayfields = array( - 'p.ref' =>array('label'=>"RefPayment", 'checked'=>1, 'position'=>10), - 'p.datep' =>array('label'=>"Date", 'checked'=>1, 'position'=>20), - 's.nom' =>array('label'=>"ThirdParty", 'checked'=>1, 'position'=>30), - 'c.libelle' =>array('label'=>"Type", 'checked'=>1, 'position'=>40), - 'p.num_paiement' =>array('label'=>"Numero", 'checked'=>1, 'position'=>50, 'tooltip'=>"ChequeOrTransferNumber"), - 'ba.label' =>array('label'=>"BankAccount", 'checked'=>1, 'position'=>60, 'enable'=>(isModEnabled("banque"))), - 'p.amount' =>array('label'=>"Amount", 'checked'=>1, 'position'=>70), + 'p.ref' => array('label' => "RefPayment", 'checked' => 1, 'position' => 10), + 'p.datep' => array('label' => "Date", 'checked' => 1, 'position' => 20), + 's.nom' => array('label' => "ThirdParty", 'checked' => 1, 'position' => 30), + 'c.libelle' => array('label' => "Type", 'checked' => 1, 'position' => 40), + 'p.num_paiement' => array('label' => "Numero", 'checked' => 1, 'position' => 50, 'tooltip' => "ChequeOrTransferNumber"), + 'ba.label' => array('label' => "BankAccount", 'checked' => 1, 'position' => 60, 'enable' => (isModEnabled("bank"))), + 'p.amount' => array('label' => "Amount", 'checked' => 1, 'position' => 70), ); $arrayfields = dol_sort_array($arrayfields, 'position'); @@ -139,7 +140,7 @@ if ((!$user->hasRight("fournisseur", "facture", "lire") && !getDolGlobalString(' * Actions */ -$parameters = array('socid'=>$socid); +$parameters = array('socid' => $socid); $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); @@ -181,26 +182,32 @@ $accountstatic = new Account($db); $companystatic = new Societe($db); $paymentfournstatic = new PaiementFourn($db); -$sql = 'SELECT p.rowid, p.ref, p.datep, p.amount as pamount, p.num_paiement as num_payment,'; -$sql .= ' s.rowid as socid, s.nom as name, s.email,'; -$sql .= ' c.code as paiement_type, c.libelle as paiement_libelle,'; -$sql .= ' ba.rowid as bid, ba.ref as bref, ba.label as blabel, ba.number, ba.account_number as account_number, ba.iban_prefix, ba.bic, ba.currency_code, ba.fk_accountancy_journal as accountancy_journal,'; -$sql .= ' SUM(pf.amount)'; +$sql = 'SELECT p.rowid, p.ref, p.datep, p.fk_bank, p.statut, p.num_paiement as num_payment, p.amount'; +$sql .= ', c.code as paiement_type, c.libelle as paiement_libelle'; +$sql .= ', ba.rowid as bid, ba.ref as bref, ba.label as blabel, ba.number, ba.account_number as account_number, ba.iban_prefix, ba.bic, ba.currency_code, ba.fk_accountancy_journal as accountancy_journal'; +$sql .= ', s.rowid as socid, s.nom as name, s.email'; +// We need an aggregate because we added a left join to get the thirdparty. In real world, it should be the same thirdparty if payment is same (but not in database structure) +// so SUM(pf.amount) should be equal to p.amount but if we filter on $socid, it may differ +$sql .= ", SUM(pf.amount) as totalamount, COUNT(f.rowid) as nbinvoices"; + +$sqlfields = $sql; // $sql fields to remove for count total + $sql .= ' FROM '.MAIN_DB_PREFIX.'paiementfourn AS p'; -$sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'paiementfourn_facturefourn AS pf ON p.rowid = pf.fk_paiementfourn'; -$sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'facture_fourn AS f ON f.rowid = pf.fk_facturefourn'; $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_paiement AS c ON p.fk_paiement = c.id'; -$sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'societe AS s ON s.rowid = f.fk_soc'; $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'bank as b ON p.fk_bank = b.rowid'; $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'bank_account as ba ON b.fk_account = ba.rowid'; -if (!$user->hasRight("societe", "client", "voir")) { - $sql .= ', '.MAIN_DB_PREFIX.'societe_commerciaux as sc'; + +$sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'paiementfourn_facturefourn AS pf ON p.rowid = pf.fk_paiementfourn'; +$sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'facture_fourn AS f ON f.rowid = pf.fk_facturefourn'; +$sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'societe AS s ON s.rowid = f.fk_soc'; + +$sql .= ' WHERE f.entity IN ('.getEntity('supplier_invoice').')'; // TODO We should use p.entity that does not exists yet in this table +if ($socid > 0) { + $sql .= " AND EXISTS (SELECT f.fk_soc FROM ".MAIN_DB_PREFIX."facture_fourn as f, ".MAIN_DB_PREFIX."paiementfourn_facturefourn as pf"; + $sql .= " WHERE p.rowid = pf.fk_paiementfourn AND pf.fk_facturefourn = f.rowid AND f.fk_soc = ".((int) $socid).")"; } -$sql .= ' WHERE f.entity = '.((int) $conf->entity); -if ($socid > 0) { - $sql .= ' AND f.fk_soc = '.((int) $socid); -} +// Search criteria if ($search_ref) { $sql .= natural_search('p.ref', $search_ref); } @@ -208,20 +215,23 @@ if ($search_date_start) { $sql .= " AND p.datep >= '" . $db->idate($search_date_start) . "'"; } if ($search_date_end) { - $sql .=" AND p.datep <= '" . $db->idate($search_date_end) . "'"; + $sql .= " AND p.datep <= '" . $db->idate($search_date_end) . "'"; } if ($search_company) { $sql .= natural_search('s.nom', $search_company); } if ($search_payment_type != '') { - $sql .= " AND c.code='".$db->escape($search_payment_type)."'"; + $sql .= " AND c.code = '".$db->escape($search_payment_type)."'"; } if ($search_cheque_num != '') { $sql .= natural_search('p.num_paiement', $search_cheque_num); } if ($search_amount) { - $sql .= natural_search('p.amount', $search_amount, 1); + $sql .= " AND (".natural_search('p.amount', $search_amount, 1, 1); + $sql .= " OR "; + $sql .= natural_search('pf.amount', $search_amount, 1, 1); + $sql .= ")"; } if ($search_bank_account > 0) { $sql .= ' AND b.fk_account = '.((int) $search_bank_account); @@ -241,22 +251,36 @@ if ($search_sale && $search_sale != '-1') { // Add where from extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php'; -$sql .= ' GROUP BY p.rowid, p.ref, p.datep, p.amount, p.num_paiement, s.rowid, s.nom, s.email, c.code, c.libelle,'; +$sql .= ' GROUP BY p.rowid, p.ref, p.datep, p.fk_bank, p.statut, p.num_paiement, p.amount, s.rowid, s.nom, s.email, c.code, c.libelle,'; $sql .= ' ba.rowid, ba.ref, ba.label, ba.number, ba.account_number, ba.iban_prefix, ba.bic, ba.currency_code, ba.fk_accountancy_journal'; -$sql .= $db->order($sortfield, $sortorder); - +// Count total nb of records $nbtotalofrecords = ''; if (!getDolGlobalInt('MAIN_DISABLE_FULL_SCANLIST')) { - $result = $db->query($sql); - $nbtotalofrecords = $db->num_rows($result); - if (($page * $limit) > $nbtotalofrecords) { // if total resultset is smaller then paging size (filtering), goto and load page 0 + /* The fast and low memory method to get and count full list converts the sql into a sql count */ + $sqlforcount = preg_replace('/^'.preg_quote($sqlfields, '/').'/', 'SELECT COUNT(DISTINCT p.rowid) as nbtotalofrecords', $sql); + $sqlforcount = preg_replace('/GROUP BY .*$/', '', $sqlforcount); + $resql = $db->query($sqlforcount); + if ($resql) { + $objforcount = $db->fetch_object($resql); + $nbtotalofrecords = $objforcount->nbtotalofrecords; + } else { + dol_print_error($db); + } + + if (($page * $limit) > $nbtotalofrecords) { // if total resultset is smaller then paging size (filtering), goto and load page 0 $page = 0; $offset = 0; } + $db->free($resql); } -$sql .= $db->plimit($limit + 1, $offset); +// Complete request and execute it with limit +$sql .= $db->order($sortfield, $sortorder); +if ($limit) { + $sql .= $db->plimit($limit + 1, $offset); +} +//print $sql; $resql = $db->query($sql); if (!$resql) { @@ -284,22 +308,22 @@ if ($search_ref) { $param .= '&search_ref='.urlencode($search_ref); } if ($search_date_startday) { - $param .= '&search_date_startday='.urlencode($search_date_startday); + $param .= '&search_date_startday='.urlencode((string) ($search_date_startday)); } if ($search_date_startmonth) { - $param .= '&search_date_startmonth='.urlencode($search_date_startmonth); + $param .= '&search_date_startmonth='.urlencode((string) ($search_date_startmonth)); } if ($search_date_startyear) { - $param .= '&search_date_startyear='.urlencode($search_date_startyear); + $param .= '&search_date_startyear='.urlencode((string) ($search_date_startyear)); } if ($search_date_endday) { - $param .= '&search_date_endday='.urlencode($search_date_endday); + $param .= '&search_date_endday='.urlencode((string) ($search_date_endday)); } if ($search_date_endmonth) { - $param .= '&search_date_endmonth='.urlencode($search_date_endmonth); + $param .= '&search_date_endmonth='.urlencode((string) ($search_date_endmonth)); } if ($search_date_endyear) { - $param .= '&search_date_endyear='.urlencode($search_date_endyear); + $param .= '&search_date_endyear='.urlencode((string) ($search_date_endyear)); } if ($search_company) { $param .= '&search_company='.urlencode($search_company); @@ -328,6 +352,7 @@ print ''; print ''; print ''; +// @phan-suppress-next-line PhanPluginSuspiciousParamOrder print_barre_liste($langs->trans('SupplierPayments'), $page, $_SERVER['PHP_SELF'], $param, $sortfield, $sortorder, '', $num, $nbtotalofrecords, 'supplier_invoice', 0, '', '', $limit, 0, 0, 1); if ($search_all) { @@ -354,7 +379,7 @@ if ($moreforfilter) { } $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; -$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')); // This also change content of $arrayfields +$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')); // This also change content of $arrayfields if (!empty($massactionbutton)) { $selectedfields .= $form->showCheckAddButtons('checkforselect', 1); } @@ -435,7 +460,7 @@ if (!empty($arrayfields['p.amount']['checked'])) { } // Fields from hook -$parameters = array('arrayfields'=>$arrayfields); +$parameters = array('arrayfields' => $arrayfields); $reshook = $hookmanager->executeHooks('printFieldListOption', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; @@ -494,7 +519,7 @@ if (!empty($arrayfields['p.amount']['checked'])) { } // Hook fields -$parameters = array('arrayfields'=>$arrayfields, 'param'=>$param, 'sortfield'=>$sortfield, 'sortorder'=>$sortorder); +$parameters = array('arrayfields' => $arrayfields, 'param' => $param, 'sortfield' => $sortfield, 'sortorder' => $sortorder); $reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; @@ -534,6 +559,7 @@ while ($i < $imaxinloop) { $paymentfournstatic->id = $objp->rowid; $paymentfournstatic->ref = $objp->ref; $paymentfournstatic->datepaye = $db->jdate($objp->datep); + $paymentfournstatic->amount = $objp->amount; $companystatic->id = $objp->socid; $companystatic->name = $objp->name; @@ -660,15 +686,20 @@ while ($i < $imaxinloop) { // Amount if (!empty($arrayfields['p.amount']['checked'])) { - print ''; + print ''; if (!$i) { $totalarray['nbfield']++; $totalarray['pos'][$totalarray['nbfield']] = 'amount'; } if (empty($totalarray['val']['amount'])) { - $totalarray['val']['amount'] = $objp->pamount; + $totalarray['val']['amount'] = $objp->amount; } else { - $totalarray['val']['amount'] += $objp->pamount; + $totalarray['val']['amount'] += $objp->amount; } } diff --git a/htdocs/fourn/product/list.php b/htdocs/fourn/product/list.php index 8b3b873a26a..5549f799ddd 100644 --- a/htdocs/fourn/product/list.php +++ b/htdocs/fourn/product/list.php @@ -46,10 +46,10 @@ $type = GETPOST('type', 'alphanohtml'); $optioncss = GETPOST('optioncss', 'alpha'); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -175,7 +175,7 @@ if ($sRefSupplier) { $sql .= natural_search('ppf.ref_fourn', $sRefSupplier); } if (GETPOST('type')) { - $sql .= " AND p.fk_product_type = ".GETPOST('type', 'int'); + $sql .= " AND p.fk_product_type = ".GETPOSTINT('type'); } if ($sref) { $sql .= natural_search('p.ref', $sref); diff --git a/htdocs/fourn/recap-fourn.php b/htdocs/fourn/recap-fourn.php index d74756cf754..02419cea24c 100644 --- a/htdocs/fourn/recap-fourn.php +++ b/htdocs/fourn/recap-fourn.php @@ -32,7 +32,7 @@ require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php'; $langs->loadLangs(array('bills', 'companies')); // Security check -$socid = GETPOST("socid", 'int'); +$socid = GETPOSTINT("socid"); if ($user->socid > 0) { $action = ''; $socid = $user->socid; diff --git a/htdocs/ftp/index.php b/htdocs/ftp/index.php index b3b8a166cc5..0d3bf9a9496 100644 --- a/htdocs/ftp/index.php +++ b/htdocs/ftp/index.php @@ -54,10 +54,10 @@ $confirm = GETPOST('confirm'); $upload_dir = $conf->ftp->dir_temp; $download_dir = $conf->ftp->dir_temp; -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 diff --git a/htdocs/holiday/card.php b/htdocs/holiday/card.php index 83828e91488..bf2ff8f4fe4 100644 --- a/htdocs/holiday/card.php +++ b/htdocs/holiday/card.php @@ -5,7 +5,7 @@ * Copyright (C) 2013 Juanjo Menent * Copyright (C) 2017 Alexandre Spangaro * Copyright (C) 2014-2017 Ferran Marcet - * Copyright (C) 2018-2023 Frédéric France + * Copyright (C) 2018-2024 Frédéric France * Copyright (C) 2020-2021 Udo Tamm * Copyright (C) 2022 Anthony Berton * @@ -49,10 +49,10 @@ $confirm = GETPOST('confirm', 'alpha'); $backtopage = GETPOST('backtopage', 'alpha'); $backtopageforcancel = GETPOST('backtopageforcancel', 'alpha'); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); -$fuserid = (GETPOST('fuserid', 'int') ? GETPOST('fuserid', 'int') : $user->id); -$socid = GETPOST('socid', 'int'); +$fuserid = (GETPOSTINT('fuserid') ? GETPOSTINT('fuserid') : $user->id); +$socid = GETPOSTINT('socid'); // Load translation files required by the page $langs->loadLangs(array("other", "holiday", "mails", "trips")); @@ -108,7 +108,7 @@ $candelete = 0; if ($user->hasRight('holiday', 'delete')) { $candelete = 1; } -if ($object->statut == Holiday::STATUS_DRAFT && $user->hasRight('holiday', 'write') && in_array($object->fk_user, $childids)) { +if ($object->status == Holiday::STATUS_DRAFT && $user->hasRight('holiday', 'write') && in_array($object->fk_user, $childids)) { $candelete = 1; } @@ -116,7 +116,7 @@ if ($object->statut == Holiday::STATUS_DRAFT && $user->hasRight('holiday', 'writ if ($user->socid) { $socid = $user->socid; } -$result = restrictedArea($user, 'holiday', $object->id, 'holiday', '', '', 'rowid', $object->statut); +$result = restrictedArea($user, 'holiday', $object->id, 'holiday', '', '', 'rowid', $object->status); /* @@ -183,7 +183,7 @@ if (empty($reshook)) { $halfday = 1; } - $approverid = GETPOST('valideur', 'int'); + $approverid = GETPOSTINT('valideur'); $description = trim(GETPOST('description', 'restricthtml')); // Check that leave is for a user inside the hierarchy or advanced permission for all is set @@ -306,7 +306,7 @@ if (empty($reshook)) { $object->oldcopy = dol_clone($object, 2); - $object->fk_validator = GETPOST('valideur', 'int'); + $object->fk_validator = GETPOSTINT('valideur'); if ($object->fk_validator != $object->oldcopy->fk_validator) { $verif = $object->update($user); @@ -357,10 +357,10 @@ if (empty($reshook)) { $object->fetch($id); // If under validation - if ($object->statut == Holiday::STATUS_DRAFT) { + if ($object->status == Holiday::STATUS_DRAFT) { // If this is the requester or has read/write rights if ($cancreate) { - $approverid = GETPOST('valideur', 'int'); + $approverid = GETPOSTINT('valideur'); // TODO Check this approver user id has the permission for approval $description = trim(GETPOST('description', 'restricthtml')); @@ -440,7 +440,7 @@ if (empty($reshook)) { $object->fetch($id); // If this is a rough draft, approved, canceled or refused - if ($object->statut == Holiday::STATUS_DRAFT || $object->statut == Holiday::STATUS_CANCELED || $object->statut == Holiday::STATUS_REFUSED) { + if ($object->status == Holiday::STATUS_DRAFT || $object->status == Holiday::STATUS_CANCELED || $object->status == Holiday::STATUS_REFUSED) { $result = $object->delete($user); } else { $error++; @@ -462,10 +462,10 @@ if (empty($reshook)) { $object->fetch($id); // If draft and owner of leave - if ($object->statut == Holiday::STATUS_DRAFT && $cancreate) { + if ($object->status == Holiday::STATUS_DRAFT && $cancreate) { $object->oldcopy = dol_clone($object, 2); - $object->statut = Holiday::STATUS_VALIDATED; + $object->status = Holiday::STATUS_VALIDATED; $verif = $object->validate($user); @@ -524,8 +524,11 @@ if (empty($reshook)) { } $typeleaves = $object->getTypes(1, -1); - $labeltoshow = (($typeleaves[$object->fk_type]['code'] && $langs->trans($typeleaves[$object->fk_type]['code']) != $typeleaves[$object->fk_type]['code']) ? $langs->trans($typeleaves[$object->fk_type]['code']) : $typeleaves[$object->fk_type]['label']); - + if (empty($typeleaves[$object->fk_type])) { + $labeltoshow = $langs->trans("TypeWasDisabledOrRemoved", $object->fk_type); + } else { + $labeltoshow = (($typeleaves[$object->fk_type]['code'] && $langs->trans($typeleaves[$object->fk_type]['code']) != $typeleaves[$object->fk_type]['code']) ? $langs->trans($typeleaves[$object->fk_type]['code']) : $typeleaves[$object->fk_type]['label']); + } if ($object->halfday == 2) { $starthalfdaykey = "Afternoon"; $endhalfdaykey = "Morning"; @@ -598,7 +601,7 @@ if (empty($reshook)) { $object->fetch($id); // If status is waiting approval and approver is also user - if ($object->statut == Holiday::STATUS_VALIDATED && $user->id == $object->fk_validator) { + if ($object->status == Holiday::STATUS_VALIDATED && $user->id == $object->fk_validator) { $object->oldcopy = dol_clone($object, 2); $object->date_approval = dol_now(); @@ -703,7 +706,7 @@ if (empty($reshook)) { $object->fetch($id); // If status pending validation and validator = user - if ($object->statut == Holiday::STATUS_VALIDATED && $user->id == $object->fk_validator) { + if ($object->status == Holiday::STATUS_VALIDATED && $user->id == $object->fk_validator) { $object->date_refuse = dol_now(); $object->fk_user_refuse = $user->id; $object->statut = Holiday::STATUS_REFUSED; @@ -794,7 +797,7 @@ if (empty($reshook)) { $object->fetch($id); - $oldstatus = $object->statut; + $oldstatus = $object->status; $object->statut = Holiday::STATUS_DRAFT; $object->status = Holiday::STATUS_DRAFT; @@ -821,11 +824,11 @@ if (empty($reshook)) { $object->fetch($id); // If status pending validation and validator = validator or user, or rights to do for others - if (($object->statut == Holiday::STATUS_VALIDATED || $object->statut == Holiday::STATUS_APPROVED) && + if (($object->status == Holiday::STATUS_VALIDATED || $object->status == Holiday::STATUS_APPROVED) && (!empty($user->admin) || $user->id == $object->fk_validator || $cancreate || $cancreateall)) { $db->begin(); - $oldstatus = $object->statut; + $oldstatus = $object->status; $object->date_cancel = dol_now(); $object->fk_user_cancel = $user->id; $object->statut = Holiday::STATUS_CANCELED; @@ -1123,7 +1126,7 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') { if (!GETPOST('date_debut_')) { // If visitor does not come from agenda print $form->selectDate(-1, 'date_debut_', 0, 0, 0, '', 1, 1); } else { - $tmpdate = dol_mktime(0, 0, 0, GETPOST('date_debut_month', 'int'), GETPOST('date_debut_day', 'int'), GETPOST('date_debut_year', 'int')); + $tmpdate = dol_mktime(0, 0, 0, GETPOSTINT('date_debut_month'), GETPOSTINT('date_debut_day'), GETPOSTINT('date_debut_year')); print $form->selectDate($tmpdate, 'date_debut_', 0, 0, 0, '', 1, 1); } print '     '; @@ -1140,7 +1143,7 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') { if (!GETPOST('date_fin_')) { print $form->selectDate(-1, 'date_fin_', 0, 0, 0, '', 1, 1); } else { - $tmpdate = dol_mktime(0, 0, 0, GETPOST('date_fin_month', 'int'), GETPOST('date_fin_day', 'int'), GETPOST('date_fin_year', 'int')); + $tmpdate = dol_mktime(0, 0, 0, GETPOSTINT('date_fin_month'), GETPOSTINT('date_fin_day'), GETPOSTINT('date_fin_year')); print $form->selectDate($tmpdate, 'date_fin_', 0, 0, 0, '', 1, 1); } print '     '; @@ -1164,8 +1167,8 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') { if (getDolGlobalString('HOLIDAY_DEFAULT_VALIDATOR')) { $defaultselectuser = getDolGlobalString('HOLIDAY_DEFAULT_VALIDATOR'); // Can force default approver } - if (GETPOST('valideur', 'int') > 0) { - $defaultselectuser = GETPOST('valideur', 'int'); + if (GETPOSTINT('valideur') > 0) { + $defaultselectuser = GETPOSTINT('valideur'); } $s = $form->select_dolusers($defaultselectuser, "valideur", 1, '', 0, $include_users, '', '0,'.$conf->entity, 0, 0, '', 0, '', 'minwidth200 maxwidth500'); print img_picto('', 'user', 'class="pictofixedwidth"').$form->textwithpicto($s, $langs->trans("AnyOtherInThisListCanValidate")); @@ -1253,8 +1256,8 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') { if ($canread) { $head = holiday_prepare_head($object); - if (($action == 'edit' && $object->statut == Holiday::STATUS_DRAFT) || ($action == 'editvalidator')) { - if ($action == 'edit' && $object->statut == Holiday::STATUS_DRAFT) { + if (($action == 'edit' && $object->status == Holiday::STATUS_DRAFT) || ($action == 'editvalidator')) { + if ($action == 'edit' && $object->status == Holiday::STATUS_DRAFT) { $edit = true; } @@ -1290,8 +1293,12 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') { print ''; print ''; print ''; @@ -1314,7 +1321,7 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') { print $form->textwithpicto($langs->trans('DateDebCP'), $langs->trans("FirstDayOfHoliday")); print ''; print ''; print ''; - if ($object->statut == Holiday::STATUS_REFUSED) { + if ($object->status == Holiday::STATUS_REFUSED) { print ''; print ''; print ''; @@ -1414,14 +1421,14 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') { if (!$edit && $action != 'editvalidator') { print ''; print ''; print ''; @@ -1463,19 +1470,19 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') { print ''; print ''; print ''; - if ($object->statut == Holiday::STATUS_APPROVED || $object->statut == Holiday::STATUS_CANCELED) { + if ($object->status == Holiday::STATUS_APPROVED || $object->status == Holiday::STATUS_CANCELED) { print ''; print ''; print ''; // warning: date_valid is approval date on holiday module print ''; } - if ($object->statut == Holiday::STATUS_CANCELED) { + if ($object->status == Holiday::STATUS_CANCELED) { print ''; print ''; print ''; print ''; } - if ($object->statut == Holiday::STATUS_REFUSED) { + if ($object->status == Holiday::STATUS_REFUSED) { print ''; print ''; print ''; @@ -1500,7 +1507,7 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') { } // Si envoi en validation - if ($action == 'sendToValidate' && $object->statut == Holiday::STATUS_DRAFT) { + if ($action == 'sendToValidate' && $object->status == Holiday::STATUS_DRAFT) { print $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id, $langs->trans("TitleToValidCP"), $langs->trans("ConfirmToValidCP"), "confirm_send", '', 1, 1); } @@ -1525,9 +1532,9 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') { print $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id, $langs->trans("TitleSetToDraft"), $langs->trans("ConfirmSetToDraft"), "confirm_draft", '', 1, 1); } - if (($action == 'edit' && $object->statut == Holiday::STATUS_DRAFT) || ($action == 'editvalidator')) { - if ($action == 'edit' && $object->statut == Holiday::STATUS_DRAFT) { - if ($cancreate && $object->statut == Holiday::STATUS_DRAFT) { + if (($action == 'edit' && $object->status == Holiday::STATUS_DRAFT) || ($action == 'editvalidator')) { + if ($action == 'edit' && $object->status == Holiday::STATUS_DRAFT) { + if ($cancreate && $object->status == Holiday::STATUS_DRAFT) { print $form->buttonsSaveCancel(); } } @@ -1540,15 +1547,15 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') { print '
'; - if ($cancreate && $object->statut == Holiday::STATUS_DRAFT) { + if ($cancreate && $object->status == Holiday::STATUS_DRAFT) { print ''.$langs->trans("EditCP").''; } - if ($cancreate && $object->statut == Holiday::STATUS_DRAFT) { // If draft + if ($cancreate && $object->status == Holiday::STATUS_DRAFT) { // If draft print ''.$langs->trans("Validate").''; } - if ($object->statut == Holiday::STATUS_VALIDATED) { // If validated + if ($object->status == Holiday::STATUS_VALIDATED) { // If validated // Button Approve / Refuse if ($user->id == $object->fk_validator) { print ''.$langs->trans("Approve").''; @@ -1567,7 +1574,7 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') { } } } - if ($object->statut == Holiday::STATUS_APPROVED) { // If validated and approved + if ($object->status == Holiday::STATUS_APPROVED) { // If validated and approved if ($user->id == $object->fk_validator || $user->id == $object->fk_user_approve || $cancreate || $cancreateall) { if (($object->date_fin > dol_now()) || !empty($user->admin) || $user->id == $object->fk_user_approve) { print ''.$langs->trans("ActionCancelCP").''; @@ -1583,10 +1590,10 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') { } } - if (($cancreate || $cancreateall) && $object->statut == Holiday::STATUS_CANCELED) { + if (($cancreate || $cancreateall) && $object->status == Holiday::STATUS_CANCELED) { print ''.$langs->trans("SetToDraft").''; } - if ($candelete && ($object->statut == Holiday::STATUS_DRAFT || $object->statut == Holiday::STATUS_CANCELED || $object->statut == Holiday::STATUS_REFUSED)) { // If draft or canceled or refused + if ($candelete && ($object->status == Holiday::STATUS_DRAFT || $object->status == Holiday::STATUS_CANCELED || $object->status == Holiday::STATUS_REFUSED)) { // If draft or canceled or refused print ''.$langs->trans("DeleteCP").''; } diff --git a/htdocs/holiday/card_group.php b/htdocs/holiday/card_group.php index 3291aa7f380..3d01863ed95 100644 --- a/htdocs/holiday/card_group.php +++ b/htdocs/holiday/card_group.php @@ -5,7 +5,7 @@ * Copyright (C) 2013 Juanjo Menent * Copyright (C) 2017 Alexandre Spangaro * Copyright (C) 2014-2017 Ferran Marcet - * Copyright (C) 2018 Frédéric France + * Copyright (C) 2018-2024 Frédéric France * Copyright (C) 2020-2021 Udo Tamm * Copyright (C) 2022 Anthony Berton * Copyright (C) 2024 MDW @@ -47,14 +47,14 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php'; $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'alpha'); $confirm = GETPOST('confirm', 'alpha'); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); -$fuserid = (GETPOST('fuserid', 'int') ? GETPOST('fuserid', 'int') : $user->id); -$users = (GETPOST('users', 'array') ? GETPOST('users', 'array') : array($user->id)); +$fuserid = (GETPOSTINT('fuserid') ? GETPOSTINT('fuserid') : $user->id); +$users = (GETPOST('users', 'array') ? GETPOST('users', 'array') : array($user->id)); $groups = GETPOST('groups', 'array'); -$socid = GETPOST('socid', 'int'); -$autoValidation = GETPOST('autoValidation', 'int'); -$AutoSendMail = GETPOST('AutoSendMail', 'int'); +$socid = GETPOSTINT('socid'); +$autoValidation = GETPOSTINT('autoValidation'); +$AutoSendMail = GETPOSTINT('AutoSendMail'); // Load translation files required by the page $langs->loadLangs(array("other", "holiday", "mails", "trips")); @@ -109,7 +109,7 @@ $candelete = 0; if ($user->hasRight('holiday', 'delete')) { $candelete = 1; } -if ($object->statut == Holiday::STATUS_DRAFT && $user->hasRight('holiday', 'write') && in_array($object->fk_user, $childids)) { +if ($object->status == Holiday::STATUS_DRAFT && $user->hasRight('holiday', 'write') && in_array($object->fk_user, $childids)) { $candelete = 1; } @@ -117,7 +117,7 @@ if ($object->statut == Holiday::STATUS_DRAFT && $user->hasRight('holiday', 'writ if ($user->socid) { $socid = $user->socid; } -$result = restrictedArea($user, 'holiday', $object->id, 'holiday', '', '', 'rowid', $object->statut); +$result = restrictedArea($user, 'holiday', $object->id, 'holiday', '', '', 'rowid', $object->status); /* @@ -325,7 +325,7 @@ if (empty($reshook)) { $htemp = new Holiday($db); $htemp->fetch($result); - $htemp->statut = Holiday::STATUS_VALIDATED; + $htemp->status = Holiday::STATUS_VALIDATED; $resultValidated = $htemp->update($approverid); if ($resultValidated < 0) { @@ -367,7 +367,7 @@ if (empty($reshook)) { $form = new Form($db); $object = new Holiday($db); -$listhalfday = array('morning'=>$langs->trans("Morning"), "afternoon"=>$langs->trans("Afternoon")); +$listhalfday = array('morning' => $langs->trans("Morning"), "afternoon" => $langs->trans("Afternoon")); $title = $langs->trans('Leave'); $help_url = 'EN:Module_Holiday'; @@ -498,7 +498,7 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') { print '
'; print ''; print ''; @@ -212,7 +216,7 @@ if ($object->id) { print ''; print ''; - if ($object->statut == 5) { + if ($object->status == Holiday::STATUS_REFUSED) { print ''; print ''; print ''; @@ -258,19 +262,19 @@ if ($object->id) { print ''; print ''; print ''; - if ($object->statut == 3) { + if ($object->status == 3) { print ''; print ''; print ''; print ''; } - if ($object->statut == 4) { + if ($object->status == 4) { print ''; print ''; print ''; print ''; } - if ($object->statut == 5) { + if ($object->status == 5) { print ''; print ''; print ''; diff --git a/htdocs/holiday/info.php b/htdocs/holiday/info.php index c667633e590..0e948a1b0a2 100644 --- a/htdocs/holiday/info.php +++ b/htdocs/holiday/info.php @@ -32,7 +32,7 @@ require_once DOL_DOCUMENT_ROOT.'/holiday/class/holiday.class.php'; // Load translation files required by the page $langs->load("holiday"); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); diff --git a/htdocs/holiday/list.php b/htdocs/holiday/list.php index e09687f6939..a4eaae03a85 100644 --- a/htdocs/holiday/list.php +++ b/htdocs/holiday/list.php @@ -3,7 +3,7 @@ * Copyright (C) 2013-2020 Laurent Destailleur * Copyright (C) 2012-2016 Regis Houssin * Copyright (C) 2018 Charlene Benke - * Copyright (C) 2019-2023 Frédéric France + * Copyright (C) 2019-2024 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -47,7 +47,7 @@ if ($user->socid > 0) { $action = GETPOST('action', 'aZ09'); // The action 'add', 'create', 'edit', 'update', 'view', ... $massaction = GETPOST('massaction', 'alpha'); // The bulk action (combo box choice into lists) -$show_files = GETPOST('show_files', 'int'); // Show files area generated by bulk actions ? +$show_files = GETPOSTINT('show_files'); // Show files area generated by bulk actions ? $confirm = GETPOST('confirm', 'alpha'); // Result of a confirmation $cancel = GETPOST('cancel', 'alpha'); // We click on a Cancel button $toselect = GETPOST('toselect', 'array'); // Array of ids of elements selected into a list @@ -57,7 +57,7 @@ $mode = GETPOST('mode', 'alpha'); // for switch mode view result $backtopage = GETPOST('backtopage', 'alpha'); // Go back to a dedicated page $optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print') -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $childids = $user->getAllChildIds(1); @@ -66,10 +66,10 @@ $diroutputmassaction = $conf->holiday->dir_output.'/temp/massgeneration/'.$user- // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -94,10 +94,10 @@ $search_year_start = GETPOST('search_year_start', 'int'); $search_day_end = GETPOST('search_day_end', 'int'); $search_month_end = GETPOST('search_month_end', 'int'); $search_year_end = GETPOST('search_year_end', 'int'); -$search_employee = GETPOST('search_employee', 'int'); -$search_valideur = GETPOST('search_valideur', 'int'); -$search_status = GETPOSTISSET('search_status') ? GETPOST('search_status', 'int') : GETPOST('search_statut', 'int'); -$search_type = GETPOST('search_type', 'int'); +$search_employee = GETPOSTINT('search_employee'); +$search_valideur = GETPOSTINT('search_valideur'); +$search_status = GETPOST('search_status', 'intcomma'); +$search_type = GETPOSTINT('search_type'); // Initialize technical objects $object = new Holiday($db); @@ -111,26 +111,26 @@ $search_array_options = $extrafields->getOptionalsFromPost($object->table_elemen // List of fields to search into when doing a "search in all" $fieldstosearchall = array( - 'cp.ref'=>'Ref', - 'cp.description'=>'Description', - 'uu.lastname'=>'EmployeeLastname', - 'uu.firstname'=>'EmployeeFirstname', - 'uu.login'=>'Login' + 'cp.ref' => 'Ref', + 'cp.description' => 'Description', + 'uu.lastname' => 'EmployeeLastname', + 'uu.firstname' => 'EmployeeFirstname', + 'uu.login' => 'Login' ); $arrayfields = array( - 'cp.ref'=>array('label'=>$langs->trans("Ref"), 'checked'=>1), - 'cp.fk_user'=>array('label'=>$langs->trans("Employee"), 'checked'=>1, 'position'=>20), - 'cp.fk_validator'=>array('label'=>$langs->trans("ValidatorCP"), 'checked'=>1, 'position'=>30), - 'cp.fk_type'=>array('label'=>$langs->trans("Type"), 'checked'=>1, 'position'=>35), - 'duration'=>array('label'=>$langs->trans("NbUseDaysCPShort"), 'checked'=>1, 'position'=>38), - 'cp.date_debut'=>array('label'=>$langs->trans("DateStart"), 'checked'=>1, 'position'=>40), - 'cp.date_fin'=>array('label'=>$langs->trans("DateEnd"), 'checked'=>1, 'position'=>42), - 'cp.date_valid'=>array('label'=>$langs->trans("DateValidation"), 'checked'=>1, 'position'=>60), - 'cp.date_approval'=>array('label'=>$langs->trans("DateApprove"), 'checked'=>1, 'position'=>70), - 'cp.date_create'=>array('label'=>$langs->trans("DateCreation"), 'checked'=>0, 'position'=>500), - 'cp.tms'=>array('label'=>$langs->trans("DateModificationShort"), 'checked'=>0, 'position'=>501), - 'cp.statut'=>array('label'=>$langs->trans("Status"), 'checked'=>1, 'position'=>1000), + 'cp.ref' => array('label' => $langs->trans("Ref"), 'checked' => 1), + 'cp.fk_user' => array('label' => $langs->trans("Employee"), 'checked' => 1, 'position' => 20), + 'cp.fk_validator' => array('label' => $langs->trans("ValidatorCP"), 'checked' => 1, 'position' => 30), + 'cp.fk_type' => array('label' => $langs->trans("Type"), 'checked' => 1, 'position' => 35), + 'duration' => array('label' => $langs->trans("NbUseDaysCPShort"), 'checked' => 1, 'position' => 38), + 'cp.date_debut' => array('label' => $langs->trans("DateStart"), 'checked' => 1, 'position' => 40), + 'cp.date_fin' => array('label' => $langs->trans("DateEnd"), 'checked' => 1, 'position' => 42), + 'cp.date_valid' => array('label' => $langs->trans("DateValidation"), 'checked' => 1, 'position' => 60), + 'cp.date_approval' => array('label' => $langs->trans("DateApprove"), 'checked' => 1, 'position' => 70), + 'cp.date_create' => array('label' => $langs->trans("DateCreation"), 'checked' => 0, 'position' => 500), + 'cp.tms' => array('label' => $langs->trans("DateModificationShort"), 'checked' => 0, 'position' => 501), + 'cp.statut' => array('label' => $langs->trans("Status"), 'checked' => 1, 'position' => 1000), ); // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_array_fields.tpl.php'; @@ -183,7 +183,7 @@ if (!GETPOST('confirmmassaction', 'alpha') && $massaction != 'presend' && $massa $massaction = ''; } -$parameters = array('socid'=>$socid); +$parameters = array('socid' => $socid); $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); @@ -451,10 +451,10 @@ if ($search_employee > 0) { $param .= '&search_employee='.urlencode($search_employee); } if ($search_valideur > 0) { - $param .= '&search_valideur='.urlencode($search_valideur); + $param .= '&search_valideur='.urlencode((string) ($search_valideur)); } if ($search_type > 0) { - $param .= '&search_type='.urlencode($search_type); + $param .= '&search_type='.urlencode((string) ($search_type)); } if ($search_status > 0) { $param .= '&search_status='.urlencode($search_status); @@ -474,7 +474,7 @@ if (!empty($permissiontodelete)) { if (!empty($permissiontoapprove)) { $arrayofmassactions['preapproveleave'] = img_picto('', 'check', 'class="pictofixedwidth"').$langs->trans("Approve"); } -if (GETPOST('nomassaction', 'int') || in_array($massaction, array('presend', 'predelete'))) { +if (GETPOSTINT('nomassaction') || in_array($massaction, array('presend', 'predelete'))) { $arrayofmassactions = array(); } $massactionbutton = $form->selectMassAction('', $arrayofmassactions); @@ -538,8 +538,8 @@ if ($id > 0) { // For user tab $newcardbutton = ''; - $newcardbutton .= dolGetButtonTitle($langs->trans('ViewList'), '', 'fa fa-bars imgforviewmode', $_SERVER["PHP_SELF"].'?mode=common'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ((empty($mode) || $mode == 'common') ? 2 : 1), array('morecss'=>'reposition')); - $newcardbutton .= dolGetButtonTitle($langs->trans('ViewKanban'), '', 'fa fa-th-list imgforviewmode', $_SERVER["PHP_SELF"].'?mode=kanban'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ($mode == 'kanban' ? 2 : 1), array('morecss'=>'reposition')); + $newcardbutton .= dolGetButtonTitle($langs->trans('ViewList'), '', 'fa fa-bars imgforviewmode', $_SERVER["PHP_SELF"].'?mode=common'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ((empty($mode) || $mode == 'common') ? 2 : 1), array('morecss' => 'reposition')); + $newcardbutton .= dolGetButtonTitle($langs->trans('ViewKanban'), '', 'fa fa-th-list imgforviewmode', $_SERVER["PHP_SELF"].'?mode=kanban'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ($mode == 'kanban' ? 2 : 1), array('morecss' => 'reposition')); $newcardbutton .= dolGetButtonTitleSeparator(); $newcardbutton .= dolGetButtonTitle($langs->trans('MenuAddCP'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/holiday/card.php?action=create', '', $user->hasRight('holiday', 'write')); @@ -575,14 +575,14 @@ if (empty($reshook)) { if (!empty($moreforfilter)) { print '
'; print $moreforfilter; - $parameters = array('type'=>$type); + $parameters = array('type' => $type); $reshook = $hookmanager->executeHooks('printFieldPreListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; print '
'; } $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; -$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')) : ''); // This also change content of $arrayfields +$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) : ''); // This also change content of $arrayfields $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); $include = ''; @@ -701,7 +701,7 @@ if (!empty($arrayfields['cp.date_approval']['checked'])) { include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php'; // Fields from hook -$parameters = array('arrayfields'=>$arrayfields); +$parameters = array('arrayfields' => $arrayfields); $reshook = $hookmanager->executeHooks('printFieldListOption', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; @@ -787,7 +787,7 @@ if (!empty($arrayfields['cp.date_approval']['checked'])) { // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; // Hook fields -$parameters = array('arrayfields'=>$arrayfields, 'param'=>$param, 'sortfield'=>$sortfield, 'sortorder'=>$sortorder, 'totalarray'=>&$totalarray); +$parameters = array('arrayfields' => $arrayfields, 'param' => $param, 'sortfield' => $sortfield, 'sortorder' => $sortorder, 'totalarray' => &$totalarray); $reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; if (!empty($arrayfields['cp.date_create']['checked'])) { @@ -809,7 +809,7 @@ if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) { } print '
'."\n"; -$listhalfday = array('morning'=>$langs->trans("Morning"), "afternoon"=>$langs->trans("Afternoon")); +$listhalfday = array('morning' => $langs->trans("Morning"), "afternoon" => $langs->trans("Afternoon")); // Loop on record @@ -842,7 +842,7 @@ if ($id && !$user->hasRight('holiday', 'readall') && !in_array($id, $childids)) // Leave request $holidaystatic->id = $obj->rowid; $holidaystatic->ref = ($obj->ref ? $obj->ref : $obj->rowid); - $holidaystatic->statut = $obj->status; + $holidaystatic->status = $obj->status; $holidaystatic->date_debut = $db->jdate($obj->date_debut); $holidaystatic->date_fin = $db->jdate($obj->date_fin); @@ -853,7 +853,7 @@ if ($id && !$user->hasRight('holiday', 'readall') && !in_array($id, $childids)) $userstatic->admin = $obj->user_admin; $userstatic->email = $obj->user_email; $userstatic->login = $obj->user_login; - $userstatic->statut = $obj->user_status; + $userstatic->status = $obj->user_status; $userstatic->photo = $obj->user_photo; // Validator @@ -863,7 +863,7 @@ if ($id && !$user->hasRight('holiday', 'readall') && !in_array($id, $childids)) $approbatorstatic->admin = $obj->validator_admin; $approbatorstatic->email = $obj->validator_email; $approbatorstatic->login = $obj->validator_login; - $approbatorstatic->statut = $obj->validator_status; + $approbatorstatic->status = $obj->validator_status; $approbatorstatic->photo = $obj->validator_photo; $date = $obj->date_create; @@ -895,7 +895,7 @@ if ($id && !$user->hasRight('holiday', 'readall') && !in_array($id, $childids)) $labeltypeleavetoshow = ($langs->trans($typeleaves[$obj->fk_type]['code']) != $typeleaves[$obj->fk_type]['code'] ? $langs->trans($typeleaves[$obj->fk_type]['code']) : $typeleaves[$obj->fk_type]['label']); } - $arraydata = array('user'=>$userstatic, 'labeltype'=>$labeltypeleavetoshow, 'selected'=>$selected, 'nbopenedday'=>$nbopenedday); + $arraydata = array('user' => $userstatic, 'labeltype' => $labeltypeleavetoshow, 'selected' => $selected, 'nbopenedday' => $nbopenedday); } print $holidaystatic->getKanbanView('', $arraydata); if ($i == ($imaxinloop - 1)) { @@ -1004,7 +1004,7 @@ if ($id && !$user->hasRight('holiday', 'readall') && !in_array($id, $childids)) // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php'; // Fields from hook - $parameters = array('arrayfields'=>$arrayfields, 'object'=>$object, 'obj'=>$obj, 'i'=>$i, 'totalarray'=>&$totalarray); + $parameters = array('arrayfields' => $arrayfields, 'object' => $object, 'obj' => $obj, 'i' => $i, 'totalarray' => &$totalarray); $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; @@ -1086,7 +1086,7 @@ if ($num == 0) { $db->free($resql); -$parameters = array('arrayfields'=>$arrayfields, 'sql'=>$sql); +$parameters = array('arrayfields' => $arrayfields, 'sql' => $sql); $reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; diff --git a/htdocs/holiday/month_report.php b/htdocs/holiday/month_report.php index c074eaccc6a..75831e91497 100644 --- a/htdocs/holiday/month_report.php +++ b/htdocs/holiday/month_report.php @@ -1,7 +1,7 @@ * Copyright (C) 2011 François Legastelois - * Copyright (C) 2018-2019 Frédéric France + * Copyright (C) 2018-2024 Frédéric France * Copyright (C) 2020 Tobias Sekan * * This program is free software; you can redistribute it and/or modify @@ -40,14 +40,14 @@ $massaction = GETPOST('massaction', 'alpha'); $contextpage = GETPOST('contextpage', 'aZ'); $optioncss = GETPOST('optioncss', 'aZ'); $socid = 0; -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $search_ref = GETPOST('search_ref', 'alphanohtml'); -$search_employee = GETPOST('search_employee', 'int'); -$search_type = GETPOST('search_type', 'int'); +$search_employee = GETPOSTINT('search_employee'); +$search_type = GETPOSTINT('search_type'); $search_description = GETPOST('search_description', 'alphanohtml'); -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); @@ -58,7 +58,7 @@ if (!$sortorder) { $sortorder = "ASC"; } -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } @@ -119,16 +119,16 @@ if (empty($reshook)) { } $arrayfields = array( - 'cp.ref'=>array('label' => 'Ref', 'checked'=>1, 'position'=>5), - 'cp.fk_type'=>array('label' => 'Type', 'checked'=>1, 'position'=>10), - 'cp.fk_user'=>array('label' => 'Employee', 'checked'=>1, 'position'=>20), - 'cp.date_debut'=>array('label' => 'DateDebCP', 'checked'=>-1, 'position'=>30), - 'cp.date_fin'=>array('label' => 'DateFinCP', 'checked'=>-1, 'position'=>32), - 'used_days'=>array('label' => 'NbUseDaysCPShort', 'checked'=>-1, 'position'=>34), - 'date_start_month'=>array('label' => 'DateStartInMonth', 'checked'=>1, 'position'=>50), - 'date_end_month'=>array('label' => 'DateEndInMonth', 'checked'=>1, 'position'=>52), - 'used_days_month'=>array('label' => 'NbUseDaysCPShortInMonth', 'checked'=>1, 'position'=>54), - 'cp.description'=>array('label' => 'DescCP', 'checked'=>-1, 'position'=>800), + 'cp.ref' => array('label' => 'Ref', 'checked' => 1, 'position' => 5), + 'cp.fk_type' => array('label' => 'Type', 'checked' => 1, 'position' => 10), + 'cp.fk_user' => array('label' => 'Employee', 'checked' => 1, 'position' => 20), + 'cp.date_debut' => array('label' => 'DateDebCP', 'checked' => -1, 'position' => 30), + 'cp.date_fin' => array('label' => 'DateFinCP', 'checked' => -1, 'position' => 32), + 'used_days' => array('label' => 'NbUseDaysCPShort', 'checked' => -1, 'position' => 34), + 'date_start_month' => array('label' => 'DateStartInMonth', 'checked' => 1, 'position' => 50), + 'date_end_month' => array('label' => 'DateEndInMonth', 'checked' => 1, 'position' => 52), + 'used_days_month' => array('label' => 'NbUseDaysCPShortInMonth', 'checked' => 1, 'position' => 54), + 'cp.description' => array('label' => 'DescCP', 'checked' => -1, 'position' => 800), ); @@ -140,14 +140,14 @@ $form = new Form($db); $formother = new FormOther($db); $holidaystatic = new Holiday($db); -$listhalfday = array('morning'=>$langs->trans("Morning"), "afternoon"=>$langs->trans("Afternoon")); +$listhalfday = array('morning' => $langs->trans("Morning"), "afternoon" => $langs->trans("Afternoon")); $title = $langs->trans('CPTitreMenu'); llxHeader('', $title); -$search_month = GETPOST("remonth", 'int') ? GETPOST("remonth", 'int') : date("m", time()); -$search_year = GETPOST("reyear", 'int') ? GETPOST("reyear", 'int') : date("Y", time()); +$search_month = GETPOSTINT("remonth") ? GETPOSTINT("remonth") : date("m", time()); +$search_year = GETPOSTINT("reyear") ? GETPOSTINT("reyear") : date("Y", time()); $year_month = sprintf("%04d", $search_year).'-'.sprintf("%02d", $search_month); $sql = "SELECT cp.rowid, cp.ref, cp.fk_user, cp.date_debut, cp.date_fin, cp.fk_type, cp.description, cp.halfday, cp.statut as status"; @@ -194,7 +194,7 @@ if (!empty($search_ref)) { $param .= '&search_ref='.urlencode($search_ref); } if (!empty($search_employee)) { - $param .= '&search_employee='.urlencode($search_employee); + $param .= '&search_employee='.urlencode((string) ($search_employee)); } if (!empty($search_type)) { $param .= '&search_type='.urlencode($search_type); @@ -399,7 +399,7 @@ if ($num == 0) { // Leave request $holidaystatic->id = $obj->rowid; $holidaystatic->ref = $obj->ref; - $holidaystatic->statut = $obj->status; + $holidaystatic->status = $obj->status; $holidaystatic->status = $obj->status; $holidaystatic->fk_user = $obj->fk_user; $holidaystatic->fk_type = $obj->fk_type; diff --git a/htdocs/holiday/view_log.php b/htdocs/holiday/view_log.php index 358e03ec203..ac042253777 100644 --- a/htdocs/holiday/view_log.php +++ b/htdocs/holiday/view_log.php @@ -2,6 +2,7 @@ /* Copyright (C) 2007-2016 Laurent Destailleur * Copyright (C) 2011 Dimitri Mouillard * Copyright (C) 2020 Tobias Sekan + * Copyright (C) 2024 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -40,7 +41,7 @@ require_once DOL_DOCUMENT_ROOT.'/holiday/class/holiday.class.php'; $action = GETPOST('action', 'aZ09') ? GETPOST('action', 'aZ09') : 'view'; // The action 'add', 'create', 'edit', 'update', 'view', ... $massaction = GETPOST('massaction', 'alpha'); // The bulk action (combo box choice into lists) $mode = GETPOST('mode', 'alpha'); -$show_files = GETPOST('show_files', 'int'); // Show files area generated by bulk actions ? +$show_files = GETPOSTINT('show_files'); // Show files area generated by bulk actions ? $confirm = GETPOST('confirm', 'alpha'); // Result of a confirmation $cancel = GETPOST('cancel', 'alpha'); // We click on a Cancel button $toselect = GETPOST('toselect', 'array'); // Array of ids of elements selected into a list @@ -49,20 +50,20 @@ $backtopage = GETPOST('backtopage', 'alpha'); // Go back to a dedicated $optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print') $search_id = GETPOST('search_id', 'alphanohtml'); -$search_month = GETPOST('search_month', 'int'); -$search_year = GETPOST('search_year', 'int'); -$search_employee = GETPOST('search_employee', 'int'); -$search_validator = GETPOST('search_validator', 'int'); +$search_month = GETPOSTINT('search_month'); +$search_year = GETPOSTINT('search_year'); +$search_employee = GETPOSTINT('search_employee'); +$search_validator = GETPOSTINT('search_validator'); $search_description = GETPOST('search_description', 'alphanohtml'); -$search_type = GETPOST('search_type', 'int'); +$search_type = GETPOSTINT('search_type'); $search_prev_solde = GETPOST('search_prev_solde', 'alphanohtml'); $search_new_solde = GETPOST('search_new_solde', 'alphanohtml'); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha') || (empty($toselect) && $massaction === '0')) { $page = 0; } // If $page is not defined, or '' or -1 or if we click on clear filters or if we select empty mass action @@ -157,15 +158,15 @@ if (empty($reshook)) { // Definition of fields for lists $arrayfields = array( - 'cpl.rowid'=>array('label'=>"ID", 'checked'=>1), - 'cpl.date_action'=>array('label'=>"Date", 'checked'=>1), - 'cpl.fk_user_action'=>array('label'=>"ActionByCP", 'checked'=>1), - 'cpl.fk_user_update'=>array('label'=>"UserUpdateCP", 'checked'=>1), - 'cpl.type_action'=>array('label'=>"Description", 'checked'=>1), - 'cpl.fk_type'=>array('label'=>"Type", 'checked'=>1), - 'cpl.prev_solde'=>array('label'=>"PrevSoldeCP", 'checked'=>1), - 'variation'=>array('label'=>"Variation", 'checked'=>1), - 'cpl.new_solde'=>array('label'=>"NewSoldeCP", 'checked'=>1), + 'cpl.rowid' => array('label' => "ID", 'checked' => 1), + 'cpl.date_action' => array('label' => "Date", 'checked' => 1), + 'cpl.fk_user_action' => array('label' => "ActionByCP", 'checked' => 1), + 'cpl.fk_user_update' => array('label' => "UserUpdateCP", 'checked' => 1), + 'cpl.type_action' => array('label' => "Description", 'checked' => 1), + 'cpl.fk_type' => array('label' => "Type", 'checked' => 1), + 'cpl.prev_solde' => array('label' => "PrevSoldeCP", 'checked' => 1), + 'variation' => array('label' => "Variation", 'checked' => 1), + 'cpl.new_solde' => array('label' => "NewSoldeCP", 'checked' => 1), ); @@ -246,25 +247,25 @@ if ($limit > 0 && $limit != $conf->liste_limit) { $param .= '&limit='.((int) $limit); } if (!empty($search_id)) { - $param .= '&search_statut='.urlencode($search_statut); + $param .= '&search_status='.urlencode($search_status); } if (!empty($search_month) && $search_month > 0) { - $param .= '&search_month='.urlencode($search_month); + $param .= '&search_month='.urlencode((string) ($search_month)); } if (!empty($search_year) && $search_year > 0) { - $param .= '&search_year='.urlencode($search_year); + $param .= '&search_year='.urlencode((string) ($search_year)); } if (!empty($search_validator) && $search_validator > 0) { - $param .= '&search_validator='.urlencode($search_validator); + $param .= '&search_validator='.urlencode((string) ($search_validator)); } if (!empty($search_employee) && $search_employee > 0) { - $param .= '&search_employee='.urlencode($search_employee); + $param .= '&search_employee='.urlencode((string) ($search_employee)); } if (!empty($search_description)) { $param .= '&search_description='.urlencode($search_description); } if (!empty($search_type) && $search_type > 0) { - $param .= '&search_type='.urlencode($search_type); + $param .= '&search_type='.urlencode((string) ($search_type)); } if (!empty($search_prev_solde)) { $param .= '&search_prev_solde='.urlencode($search_prev_solde); @@ -286,6 +287,7 @@ print ''; print ''; $newcardbutton = dolGetButtonTitle($langs->trans('MenuAddCP'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/holiday/card.php?action=create', '', $user->rights->holiday->write); +// @phan-suppress-next-line PhanPluginSuspiciousParamOrder print_barre_liste($langs->trans('LogCP'), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $num, $nbtotalofrecords, 'title_hrm', 0, $newcardbutton, '', $limit, 0, 0, 1); print '
'.$langs->trans('LastUpdateCP').': '; @@ -309,7 +311,7 @@ $disabled = 0; $include = ''; $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; -$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')) : ''); // This also change content of $arrayfields +$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) : ''); // This also change content of $arrayfields $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); print '
'; @@ -369,6 +371,7 @@ if (!empty($arrayfields['cpl.type_action']['checked'])) { // Filter: Type if (!empty($arrayfields['cpl.fk_type']['checked'])) { + $arraytypeleaves = array(); foreach ($alltypeleaves as $key => $val) { $labeltoshow = ($langs->trans($val['code']) != $val['code'] ? $langs->trans($val['code']) : $val['label']); $arraytypeleaves[$val['rowid']] = $labeltoshow; @@ -462,12 +465,12 @@ while ($i < min($num, $limit)) { $holidaylogstatic->id = $obj['rowid']; $holidaylogstatic->date = $obj['date_action']; - $holidaylogstatic->validator = $obj['fk_user_action']; - $holidaylogstatic->employee = $obj['fk_user_update']; - $holidaylogstatic->description = $obj['type_action']; + $holidaylogstatic->validator = $obj['fk_user_action']; + $holidaylogstatic->employee = $obj['fk_user_update']; + $holidaylogstatic->description = $obj['type_action']; $holidaylogstatic->type = $obj['fk_type']; $holidaylogstatic->balance_previous = $obj['prev_solde']; - $holidaylogstatic->balance_new = $obj['new_solde']; + $holidaylogstatic->balance_new = $obj['new_solde']; print '
'; diff --git a/htdocs/hrm/admin/admin_establishment.php b/htdocs/hrm/admin/admin_establishment.php index 9c0a8dad19a..5dacecd2c3c 100644 --- a/htdocs/hrm/admin/admin_establishment.php +++ b/htdocs/hrm/admin/admin_establishment.php @@ -60,7 +60,7 @@ if (empty($page) || $page == -1) { $page = 0; } -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $offset = $limit * $page; $pageprev = $page - 1; $pagenext = $page + 1; diff --git a/htdocs/hrm/class/establishment.class.php b/htdocs/hrm/class/establishment.class.php index 291546f253b..d2faf176a86 100644 --- a/htdocs/hrm/class/establishment.class.php +++ b/htdocs/hrm/class/establishment.class.php @@ -1,6 +1,7 @@ - * Copyright (C) 2018-2020 Frédéric France + * Copyright (C) 2018-2024 Frédéric France + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -130,24 +131,24 @@ class Establishment extends CommonObject public $fields = array( - 'rowid' =>array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>1, 'visible'=>-1, 'notnull'=>1, 'position'=>10), - 'entity' =>array('type'=>'integer', 'label'=>'Entity', 'default'=>1, 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>15, 'index'=>1), - 'ref' =>array('type'=>'varchar(30)', 'label'=>'Ref', 'enabled'=>1, 'visible'=>-1, 'notnull'=>1, 'showoncombobox'=>1, 'position'=>20), - 'label' =>array('type'=>'varchar(128)', 'label'=>'Label', 'enabled'=>1, 'visible'=>-1, 'showoncombobox'=>2, 'position'=>22), - 'address' =>array('type'=>'varchar(255)', 'label'=>'Address', 'enabled'=>1, 'visible'=>-1, 'position'=>25), - 'zip' =>array('type'=>'varchar(25)', 'label'=>'Zip', 'enabled'=>1, 'visible'=>-1, 'position'=>30), - 'town' =>array('type'=>'varchar(50)', 'label'=>'Town', 'enabled'=>1, 'visible'=>-1, 'position'=>35), - 'fk_state' =>array('type'=>'integer', 'label'=>'Fkstate', 'enabled'=>1, 'visible'=>-1, 'position'=>40), - 'fk_country' =>array('type'=>'integer', 'label'=>'Fkcountry', 'enabled'=>1, 'visible'=>-1, 'position'=>45), - 'profid1' =>array('type'=>'varchar(20)', 'label'=>'Profid1', 'enabled'=>1, 'visible'=>-1, 'position'=>50), - 'profid2' =>array('type'=>'varchar(20)', 'label'=>'Profid2', 'enabled'=>1, 'visible'=>-1, 'position'=>55), - 'profid3' =>array('type'=>'varchar(20)', 'label'=>'Profid3', 'enabled'=>1, 'visible'=>-1, 'position'=>60), - 'phone' =>array('type'=>'varchar(20)', 'label'=>'Phone', 'enabled'=>1, 'visible'=>-1, 'position'=>65), - 'fk_user_author' =>array('type'=>'integer:User:user/class/user.class.php', 'label'=>'Fkuserauthor', 'enabled'=>1, 'visible'=>-1, 'notnull'=>1, 'position'=>70), - 'fk_user_mod' =>array('type'=>'integer:User:user/class/user.class.php', 'label'=>'Fkusermod', 'enabled'=>1, 'visible'=>-1, 'position'=>75), - 'datec' =>array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>1, 'visible'=>-1, 'notnull'=>1, 'position'=>80), - 'tms' =>array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>1, 'visible'=>-1, 'notnull'=>1, 'position'=>85), - 'status' =>array('type'=>'integer', 'label'=>'Status', 'enabled'=>1, 'visible'=>-1, 'position'=>500), + 'rowid' => array('type' => 'integer', 'label' => 'TechnicalID', 'enabled' => 1, 'visible' => -1, 'notnull' => 1, 'position' => 10), + 'entity' => array('type' => 'integer', 'label' => 'Entity', 'default' => '1', 'enabled' => 1, 'visible' => -2, 'notnull' => 1, 'position' => 15, 'index' => 1), + 'ref' => array('type' => 'varchar(30)', 'label' => 'Ref', 'enabled' => 1, 'visible' => -1, 'notnull' => 1, 'showoncombobox' => 1, 'position' => 20), + 'label' => array('type' => 'varchar(128)', 'label' => 'Label', 'enabled' => 1, 'visible' => -1, 'showoncombobox' => 2, 'position' => 22), + 'address' => array('type' => 'varchar(255)', 'label' => 'Address', 'enabled' => 1, 'visible' => -1, 'position' => 25), + 'zip' => array('type' => 'varchar(25)', 'label' => 'Zip', 'enabled' => 1, 'visible' => -1, 'position' => 30), + 'town' => array('type' => 'varchar(50)', 'label' => 'Town', 'enabled' => 1, 'visible' => -1, 'position' => 35), + 'fk_state' => array('type' => 'integer', 'label' => 'Fkstate', 'enabled' => 1, 'visible' => -1, 'position' => 40), + 'fk_country' => array('type' => 'integer', 'label' => 'Fkcountry', 'enabled' => 1, 'visible' => -1, 'position' => 45), + 'profid1' => array('type' => 'varchar(20)', 'label' => 'Profid1', 'enabled' => 1, 'visible' => -1, 'position' => 50), + 'profid2' => array('type' => 'varchar(20)', 'label' => 'Profid2', 'enabled' => 1, 'visible' => -1, 'position' => 55), + 'profid3' => array('type' => 'varchar(20)', 'label' => 'Profid3', 'enabled' => 1, 'visible' => -1, 'position' => 60), + 'phone' => array('type' => 'varchar(20)', 'label' => 'Phone', 'enabled' => 1, 'visible' => -1, 'position' => 65), + 'fk_user_author' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'Fkuserauthor', 'enabled' => 1, 'visible' => -1, 'notnull' => 1, 'position' => 70), + 'fk_user_mod' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'Fkusermod', 'enabled' => 1, 'visible' => -1, 'position' => 75), + 'datec' => array('type' => 'datetime', 'label' => 'DateCreation', 'enabled' => 1, 'visible' => -1, 'notnull' => 1, 'position' => 80), + 'tms' => array('type' => 'timestamp', 'label' => 'DateModification', 'enabled' => 1, 'visible' => -1, 'notnull' => 1, 'position' => 85), + 'status' => array('type' => 'integer', 'label' => 'Status', 'enabled' => 1, 'visible' => -1, 'position' => 500), ); @@ -326,16 +327,17 @@ class Establishment extends CommonObject /** * Delete record * - * @param int $id Id of record to delete + * @param User $user User making the change * @return int Return integer <0 if KO, >0 if OK */ - public function delete($id) + public function delete($user) { $this->db->begin(); - $sql = "DELETE FROM ".MAIN_DB_PREFIX."establishment WHERE rowid = ".((int) $id); + $sql = "DELETE FROM ".MAIN_DB_PREFIX."establishment WHERE rowid = ".((int) $user->id); dol_syslog(get_class($this)."::delete", LOG_DEBUG); + $result = $this->db->query($sql); if ($result) { $this->db->commit(); @@ -504,7 +506,7 @@ class Establishment extends CommonObject global $action, $hookmanager; $hookmanager->initHooks(array('establishmentdao')); - $parameters = array('id'=>$this->id, 'getnomurl' => &$result); + $parameters = array('id' => $this->id, 'getnomurl' => &$result); $reshook = $hookmanager->executeHooks('getNomUrl', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks if ($reshook > 0) { $result = $hookmanager->resPrint; @@ -541,12 +543,14 @@ class Establishment extends CommonObject * Initialise object with example values * Id must be 0 if object instance is a specimen * - * @return void + * @return int */ public function initAsSpecimen() { $this->id = 0; $this->ref = '0'; $this->label = 'Department AAA'; + + return 1; } } diff --git a/htdocs/hrm/class/evaluation.class.php b/htdocs/hrm/class/evaluation.class.php index 94ffa06856c..7b551e80d99 100644 --- a/htdocs/hrm/class/evaluation.class.php +++ b/htdocs/hrm/class/evaluation.class.php @@ -4,6 +4,8 @@ * Copyright (C) 2021 Greg Rastklan * Copyright (C) 2021 Jean-Pascal BOUDET * Copyright (C) 2021 Grégory BLEMAND + * Copyright (C) 2024 Frédéric France + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -28,8 +30,7 @@ // Put here all includes required by your class file require_once DOL_DOCUMENT_ROOT . '/core/class/commonobject.class.php'; require_once DOL_DOCUMENT_ROOT . '/hrm/class/evaluationdet.class.php'; -//require_once DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php'; -//require_once DOL_DOCUMENT_ROOT . '/product/class/product.class.php'; + /** * Class for Evaluation @@ -102,24 +103,24 @@ class Evaluation extends CommonObject // BEGIN MODULEBUILDER PROPERTIES /** - * @var array Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. + * @var array|string,position:int,notnull?:int,visible:int,noteditable?:int,default?:string,index?:int,foreignkey?:string,searchall?:int,isameasure?:int,css?:string,csslist?:string,help?:string,showoncombobox?:int,disabled?:int,arrayofkeyval?:array,comment?:string}> Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. */ - public $fields=array( - 'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>'1', 'position'=>1, 'notnull'=>1, 'visible'=>0, 'noteditable'=>'1', 'index'=>1, 'css'=>'left', 'comment'=>"Id"), - 'ref' => array('type'=>'varchar(128)', 'label'=>'Ref', 'enabled'=>'1', 'position'=>20, 'notnull'=>1, 'visible'=>4, 'noteditable'=>'1', 'default'=>'(PROV)', 'index'=>1, 'searchall'=>1, 'showoncombobox'=>'1', 'comment'=>"Reference of object"), - 'label' => array('type'=>'varchar(255)', 'label'=>'Label', 'enabled'=>'1', 'position'=>30, 'notnull'=>0, 'visible'=>1, 'searchall'=>1, 'css'=>'minwidth300', 'cssview'=>'wordbreak', 'showoncombobox'=>'2',), - 'description' => array('type'=>'text', 'label'=>'Description', 'enabled'=>'1', 'position'=>60, 'notnull'=>0, 'visible'=>3,), - 'note_public' => array('type'=>'html', 'label'=>'NotePublic', 'enabled'=>'1', 'position'=>61, 'notnull'=>0, 'visible'=>0,), - 'note_private' => array('type'=>'html', 'label'=>'NotePrivate', 'enabled'=>'1', 'position'=>62, 'notnull'=>0, 'visible'=>0,), - 'date_creation' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>'1', 'position'=>500, 'notnull'=>1, 'visible'=>-2,), - 'tms' => array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>'1', 'position'=>501, 'notnull'=>0, 'visible'=>-2,), - 'fk_user_creat' => array('type'=>'integer:User:user/class/user.class.php:0', 'label'=>'UserAuthor', 'enabled'=>'1', 'position'=>510, 'notnull'=>1, 'visible'=>-2, 'foreignkey'=>'user.rowid',), - 'fk_user_modif' => array('type'=>'integer:User:user/class/user.class.php:0', 'label'=>'UserModif', 'enabled'=>'1', 'position'=>511, 'notnull'=>-1, 'visible'=>-2,), - 'import_key' => array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>'1', 'position'=>1000, 'notnull'=>-1, 'visible'=>-2,), - 'status' => array('type'=>'smallint', 'label'=>'Status', 'enabled'=>'1', 'position'=>1000, 'notnull'=>1, 'default'=>0, 'visible'=>5, 'index'=>1, 'arrayofkeyval'=>array('0'=>'Draft', '1'=>'Validated', '6' => 'Closed'),), - 'date_eval' => array('type'=>'date', 'label'=>'DateEval', 'enabled'=>'1', 'position'=>502, 'notnull'=>1, 'visible'=>1,), - 'fk_user' => array('type'=>'integer:User:user/class/user.class.php:0', 'label'=>'Employee', 'enabled'=>'1', 'position'=>504, 'notnull'=>1, 'visible'=>1, 'picto'=>'user', 'css'=>'maxwidth300 widthcentpercentminusxx', 'csslist'=>'tdoverflowmax150'), - 'fk_job' => array('type'=>'integer:Job:/hrm/class/job.class.php', 'label'=>'JobProfile', 'enabled'=>'1', 'position'=>505, 'notnull'=>1, 'visible'=>1, 'picto'=>'jobprofile', 'css'=>'maxwidth300 widthcentpercentminusxx', 'csslist'=>'tdoverflowmax150'), + public $fields = array( + 'rowid' => array('type' => 'integer', 'label' => 'TechnicalID', 'enabled' => 1, 'position' => 1, 'notnull' => 1, 'visible' => 0, 'noteditable' => 1, 'index' => 1, 'css' => 'left', 'comment' => "Id"), + 'ref' => array('type' => 'varchar(128)', 'label' => 'Ref', 'enabled' => 1, 'position' => 20, 'notnull' => 1, 'visible' => 4, 'noteditable' => 1, 'default' => '(PROV)', 'index' => 1, 'searchall' => 1, 'showoncombobox' => 1, 'comment' => "Reference of object"), + 'label' => array('type' => 'varchar(255)', 'label' => 'Label', 'enabled' => 1, 'position' => 30, 'notnull' => 0, 'visible' => 1, 'searchall' => 1, 'css' => 'minwidth300', 'cssview' => 'wordbreak', 'showoncombobox' => '2',), + 'description' => array('type' => 'text', 'label' => 'Description', 'enabled' => 1, 'position' => 60, 'notnull' => 0, 'visible' => 3,), + 'note_public' => array('type' => 'html', 'label' => 'NotePublic', 'enabled' => 1, 'position' => 61, 'notnull' => 0, 'visible' => 0,), + 'note_private' => array('type' => 'html', 'label' => 'NotePrivate', 'enabled' => 1, 'position' => 62, 'notnull' => 0, 'visible' => 0,), + 'date_creation' => array('type' => 'datetime', 'label' => 'DateCreation', 'enabled' => 1, 'position' => 500, 'notnull' => 1, 'visible' => -2,), + 'tms' => array('type' => 'timestamp', 'label' => 'DateModification', 'enabled' => 1, 'position' => 501, 'notnull' => 0, 'visible' => -2,), + 'fk_user_creat' => array('type' => 'integer:User:user/class/user.class.php:0', 'label' => 'UserAuthor', 'enabled' => 1, 'position' => 510, 'notnull' => 1, 'visible' => -2, 'foreignkey' => 'user.rowid',), + 'fk_user_modif' => array('type' => 'integer:User:user/class/user.class.php:0', 'label' => 'UserModif', 'enabled' => 1, 'position' => 511, 'notnull' => -1, 'visible' => -2,), + 'import_key' => array('type' => 'varchar(14)', 'label' => 'ImportId', 'enabled' => 1, 'position' => 1000, 'notnull' => -1, 'visible' => -2,), + 'status' => array('type' => 'smallint', 'label' => 'Status', 'enabled' => 1, 'position' => 1000, 'notnull' => 1, 'default' => '0', 'visible' => 5, 'index' => 1, 'arrayofkeyval' => array('0' => 'Draft', '1' => 'Validated', '6' => 'Closed'),), + 'date_eval' => array('type' => 'date', 'label' => 'DateEval', 'enabled' => 1, 'position' => 502, 'notnull' => 1, 'visible' => 1,), + 'fk_user' => array('type' => 'integer:User:user/class/user.class.php:0', 'label' => 'Employee', 'enabled' => 1, 'position' => 504, 'notnull' => 1, 'visible' => 1, 'picto' => 'user', 'css' => 'maxwidth300 widthcentpercentminusxx', 'csslist' => 'tdoverflowmax150'), + 'fk_job' => array('type' => 'integer:Job:/hrm/class/job.class.php', 'label' => 'JobProfile', 'enabled' => 1, 'position' => 505, 'notnull' => 1, 'visible' => 1, 'picto' => 'jobprofile', 'css' => 'maxwidth300 widthcentpercentminusxx', 'csslist' => 'tdoverflowmax150'), ); public $rowid; public $ref; @@ -160,11 +161,11 @@ class Evaluation extends CommonObject // */ // protected $childtables = array(); - // /** - // * @var array List of child tables. To know object to delete on cascade. - // * If name matches '@ClassNAme:FilePathClass;ParentFkFieldName' it will - // * call method deleteByParentField(parentId, ParentFkFieldName) to fetch and delete child object - // */ + /** + * @var string[] List of child tables. To know object to delete on cascade. + * If name matches '@ClassNAme:FilePathClass;ParentFkFieldName' it will + * call method deleteByParentField(parentId, ParentFkFieldName) to fetch and delete child object + */ protected $childtablesoncascade = array('@EvaluationLine:hrm/class/evaluationdet.class.php:fk_evaluation'); /** @@ -193,7 +194,7 @@ class Evaluation extends CommonObject } if (!$user->hasRight('hrm', 'evaluation', 'readall')) { - $this->fields['fk_user']['type'].= ':rowid IN('.$this->db->sanitize(implode(", ", $user->getAllChildIds(1))).')'; + $this->fields['fk_user']['type'] .= ':rowid IN('.$this->db->sanitize(implode(", ", $user->getAllChildIds(1))).')'; } $this->date_eval = dol_now(); @@ -231,7 +232,7 @@ class Evaluation extends CommonObject if ($resultcreate > 0) { require_once DOL_DOCUMENT_ROOT . '/hrm/class/skillrank.class.php'; $skillRank = new SkillRank($this->db); - $TRequiredRanks = $skillRank->fetchAll('ASC', 't.rowid', 0, 0, array('customsql' => 'fk_object='.$this->fk_job." AND objecttype='job'")); + $TRequiredRanks = $skillRank->fetchAll('ASC', 't.rowid', 0, 0, '(fk_object:=:'.((int) $this->fk_job).") AND (objecttype:=:'job')"); if (is_array($TRequiredRanks) && !empty($TRequiredRanks)) { $this->lines = array(); @@ -320,8 +321,7 @@ class Evaluation extends CommonObject $result = $object->createCommon($user); if ($result < 0) { $error++; - $this->error = $object->error; - $this->errors = $object->errors; + $this->setErrorsFromObject($object); } if (!$error) { @@ -385,18 +385,17 @@ class Evaluation extends CommonObject /** * Load list of objects in memory from the database. * - * @param string $sortorder Sort Order - * @param string $sortfield Sort field - * @param int $limit limit - * @param int $offset Offset - * @param array $filter Filter array. Example array('field'=>'valueforlike', 'customurl'=>...) - * @param string $filtermode Filter mode (AND or OR) - * @return array|int int <0 if KO, array of pages if OK + * @param string $sortorder Sort Order + * @param string $sortfield Sort field + * @param int $limit limit + * @param int $offset Offset + * @param string $filter Filter as an Universal Search string. + * Example: '((client:=:1) OR ((client:>=:2) AND (client:<=:3))) AND (client:!=:8) AND (nom:like:'a%')' + * @param string $filtermode No more used + * @return array|int int <0 if KO, array of pages if OK */ - public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND') + public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, $filter = '', $filtermode = 'AND') { - global $conf; - dol_syslog(__METHOD__, LOG_DEBUG); $records = array(); @@ -409,25 +408,14 @@ class Evaluation extends CommonObject } else { $sql .= ' WHERE 1 = 1'; } + // Manage filter - $sqlwhere = array(); - if (count($filter) > 0) { - foreach ($filter as $key => $value) { - if ($key == 't.rowid') { - $sqlwhere[] = $key.'='.$value; - } elseif (in_array($this->fields[$key]['type'], array('date', 'datetime', 'timestamp'))) { - $sqlwhere[] = $key.' = \''.$this->db->idate($value).'\''; - } elseif ($key == 'customsql') { - $sqlwhere[] = $value; - } elseif (strpos($value, '%') === false) { - $sqlwhere[] = $key.' IN ('.$this->db->sanitize($this->db->escape($value)).')'; - } else { - $sqlwhere[] = $key.' LIKE \'%'.$this->db->escape($value).'%\''; - } - } - } - if (count($sqlwhere) > 0) { - $sql .= " AND (".implode(" ".$filtermode." ", $sqlwhere).")"; + $errormessage = ''; + $sql .= forgeSQLFromUniversalSearchCriteria($filter, $errormessage); + if ($errormessage) { + $this->errors[] = $errormessage; + dol_syslog(__METHOD__.' '.implode(',', $this->errors), LOG_ERR); + return -1; } if (!empty($sortfield)) { @@ -641,9 +629,9 @@ class Evaluation extends CommonObject public function getLastEvaluationForUser($fk_user) { $sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."hrm_evaluation "; - $sql.= "WHERE fk_user=".((int) $fk_user)." "; - $sql.= "ORDER BY date_eval DESC "; - $sql.= "LIMIT 1 "; + $sql .= "WHERE fk_user=".((int) $fk_user)." "; + $sql .= "ORDER BY date_eval DESC "; + $sql .= "LIMIT 1 "; $res = $this->db->query($sql); if (!$res) { @@ -818,7 +806,7 @@ class Evaluation extends CommonObject global $action, $hookmanager; $hookmanager->initHooks(array('evaluationdao')); - $parameters = array('id'=>$this->id, 'getnomurl' => &$result); + $parameters = array('id' => $this->id, 'getnomurl' => &$result); $reshook = $hookmanager->executeHooks('getNomUrl', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks if ($reshook > 0) { $result = $hookmanager->resPrint; @@ -906,7 +894,7 @@ class Evaluation extends CommonObject * Initialise object with example values * Id must be 0 if object instance is a specimen * - * @return void + * @return int */ public function initAsSpecimen() { @@ -914,7 +902,7 @@ class Evaluation extends CommonObject // $this->property1 = ... // $this->property2 = ... - $this->initAsSpecimenCommon(); + return $this->initAsSpecimenCommon(); } /** @@ -927,11 +915,10 @@ class Evaluation extends CommonObject $this->lines = array(); $objectline = new EvaluationLine($this->db); - $result = $objectline->fetchAll('ASC', '', 0, 0, array('customsql'=>'fk_evaluation = '.$this->id)); + $result = $objectline->fetchAll('ASC', '', 0, 0, '(fk_evaluation:=:'.((int) $this->id).')'); if (is_numeric($result)) { - $this->error = $objectline->error; - $this->errors = $objectline->errors; + $this->setErrorsFromObject($objectline); return $result; } else { $this->lines = $result; @@ -1032,36 +1019,6 @@ class Evaluation extends CommonObject return $result; } - /** - * Action executed by scheduler - * CAN BE A CRON TASK. In such a case, parameters come from the schedule job setup field 'Parameters' - * Use public function doScheduledJob($param1, $param2, ...) to get parameters - * - * @return int 0 if OK, <>0 if KO (this function is used also by cron so only 0 is OK) - */ - public function doScheduledJob() - { - global $conf, $langs; - - //$conf->global->SYSLOG_FILE = 'DOL_DATA_ROOT/dolibarr_mydedicatedlofile.log'; - - $error = 0; - $this->output = ''; - $this->error = ''; - - dol_syslog(__METHOD__, LOG_DEBUG); - - $now = dol_now(); - - $this->db->begin(); - - // ... - - $this->db->commit(); - - return $error; - } - /** * Return clicable link of object (with eventually picto) * diff --git a/htdocs/hrm/class/evaluationdet.class.php b/htdocs/hrm/class/evaluationdet.class.php index 8afe628d9b3..992e7fa4ce0 100644 --- a/htdocs/hrm/class/evaluationdet.class.php +++ b/htdocs/hrm/class/evaluationdet.class.php @@ -4,6 +4,8 @@ * Copyright (C) 2021 Greg Rastklan * Copyright (C) 2021 Jean-Pascal BOUDET * Copyright (C) 2021 Grégory BLEMAND + * Copyright (C) 2024 Frédéric France + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -26,10 +28,9 @@ */ // Put here all includes required by your class file -require_once DOL_DOCUMENT_ROOT.'/core/class/commonobjectline.class.php'; +require_once DOL_DOCUMENT_ROOT . '/core/class/commonobjectline.class.php'; require_once DOL_DOCUMENT_ROOT . '/hrm/class/skillrank.class.php'; -//require_once DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php'; -//require_once DOL_DOCUMENT_ROOT . '/product/class/product.class.php'; + /** * Class for EvaluationLine @@ -101,19 +102,19 @@ class EvaluationLine extends CommonObjectLine // BEGIN MODULEBUILDER PROPERTIES /** - * @var array Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. + * @var array|string,position:int,notnull?:int,visible:int,noteditable?:int,default?:string,index?:int,foreignkey?:string,searchall?:int,isameasure?:int,css?:string,csslist?:string,help?:string,showoncombobox?:int,disabled?:int,arrayofkeyval?:array,comment?:string}> Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. */ - public $fields=array( - 'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>'1', 'position'=>1, 'notnull'=>1, 'visible'=>0, 'noteditable'=>'1', 'index'=>1, 'css'=>'left', 'comment'=>"Id"), - 'date_creation' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>'1', 'position'=>500, 'notnull'=>1, 'visible'=>-2,), - 'tms' => array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>'1', 'position'=>501, 'notnull'=>0, 'visible'=>-2,), - 'fk_user_creat' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserAuthor', 'enabled'=>'1', 'position'=>510, 'notnull'=>1, 'visible'=>-2, 'foreignkey'=>'user.rowid',), - 'fk_user_modif' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserModif', 'enabled'=>'1', 'position'=>511, 'notnull'=>-1, 'visible'=>-2,), - 'fk_skill' => array('type'=>'integer:Skill:hrm/class/skill.class.php:1', 'label'=>'Skill', 'enabled'=>'1', 'position'=>3, 'notnull'=>1, 'visible'=>1, 'index'=>1,), - 'fk_evaluation' => array('type'=>'integer:Evaluation:hrm/class/evaluation.class.php:1', 'label'=>'Evaluation', 'enabled'=>'1', 'position'=>3, 'notnull'=>1, 'visible'=>1, 'index'=>1,), - 'rankorder' => array('type'=>'integer', 'label'=>'Rank', 'enabled'=>'1', 'position'=>4, 'notnull'=>1, 'visible'=>1,), - 'required_rank' => array('type'=>'integer', 'label'=>'requiredRank', 'enabled'=>'1', 'position'=>5, 'notnull'=>1, 'visible'=>1,), - 'import_key' => array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>'1', 'position'=>1000, 'notnull'=>-1, 'visible'=>-2,), + public $fields = array( + 'rowid' => array('type' => 'integer', 'label' => 'TechnicalID', 'enabled' => 1, 'position' => 1, 'notnull' => 1, 'visible' => 0, 'noteditable' => 1, 'index' => 1, 'css' => 'left', 'comment' => "Id"), + 'date_creation' => array('type' => 'datetime', 'label' => 'DateCreation', 'enabled' => 1, 'position' => 500, 'notnull' => 1, 'visible' => -2,), + 'tms' => array('type' => 'timestamp', 'label' => 'DateModification', 'enabled' => 1, 'position' => 501, 'notnull' => 0, 'visible' => -2,), + 'fk_user_creat' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'UserAuthor', 'enabled' => 1, 'position' => 510, 'notnull' => 1, 'visible' => -2, 'foreignkey' => 'user.rowid',), + 'fk_user_modif' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'UserModif', 'enabled' => 1, 'position' => 511, 'notnull' => -1, 'visible' => -2,), + 'fk_skill' => array('type' => 'integer:Skill:hrm/class/skill.class.php:1', 'label' => 'Skill', 'enabled' => 1, 'position' => 3, 'notnull' => 1, 'visible' => 1, 'index' => 1,), + 'fk_evaluation' => array('type' => 'integer:Evaluation:hrm/class/evaluation.class.php:1', 'label' => 'Evaluation', 'enabled' => 1, 'position' => 3, 'notnull' => 1, 'visible' => 1, 'index' => 1,), + 'rankorder' => array('type' => 'integer', 'label' => 'Rank', 'enabled' => 1, 'position' => 4, 'notnull' => 1, 'visible' => 1,), + 'required_rank' => array('type' => 'integer', 'label' => 'requiredRank', 'enabled' => 1, 'position' => 5, 'notnull' => 1, 'visible' => 1,), + 'import_key' => array('type' => 'varchar(14)', 'label' => 'ImportId', 'enabled' => 1, 'position' => 1000, 'notnull' => -1, 'visible' => -2,), ); public $rowid; public $date_creation; @@ -286,8 +287,7 @@ class EvaluationLine extends CommonObjectLine $result = $object->createCommon($user); if ($result < 0) { $error++; - $this->error = $object->error; - $this->errors = $object->errors; + $this->setErrorsFromObject($object); } if (!$error) { @@ -351,15 +351,16 @@ class EvaluationLine extends CommonObjectLine /** * Load list of objects in memory from the database. * - * @param string $sortorder Sort Order - * @param string $sortfield Sort field - * @param int $limit limit - * @param int $offset Offset - * @param array $filter Filter array. Example array('field'=>'valueforlike', 'customurl'=>...) - * @param string $filtermode Filter mode (AND or OR) - * @return array|int int <0 if KO, array of pages if OK + * @param string $sortorder Sort Order + * @param string $sortfield Sort field + * @param int $limit limit + * @param int $offset Offset + * @param string $filter Filter as an Universal Search string. + * Example: '((client:=:1) OR ((client:>=:2) AND (client:<=:3))) AND (client:!=:8) AND (nom:like:'a%')' + * @param string $filtermode No more used + * @return array|int int <0 if KO, array of pages if OK */ - public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND') + public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, $filter = '', $filtermode = 'AND') { global $conf; @@ -375,25 +376,14 @@ class EvaluationLine extends CommonObjectLine } else { $sql .= ' WHERE 1 = 1'; } + // Manage filter - $sqlwhere = array(); - if (count($filter) > 0) { - foreach ($filter as $key => $value) { - if ($key == 't.rowid') { - $sqlwhere[] = $key.'='.$value; - } elseif ($key == 'customsql') { - $sqlwhere[] = $value; - } elseif (in_array($this->fields[$key]['type'], array('date', 'datetime', 'timestamp'))) { - $sqlwhere[] = $key.' = \''.$this->db->idate($value).'\''; - } elseif (strpos($value, '%') === false) { - $sqlwhere[] = $key.' IN ('.$this->db->sanitize($this->db->escape($value)).')'; - } else { - $sqlwhere[] = $key.' LIKE \'%'.$this->db->escape($value).'%\''; - } - } - } - if (count($sqlwhere) > 0) { - $sql .= " AND (".implode(" ".$filtermode." ", $sqlwhere).")"; + $errormessage = ''; + $sql .= forgeSQLFromUniversalSearchCriteria($filter, $errormessage); + if ($errormessage) { + $this->errors[] = $errormessage; + dol_syslog(__METHOD__.' '.implode(',', $this->errors), LOG_ERR); + return -1; } if (!empty($sortfield)) { @@ -786,7 +776,7 @@ class EvaluationLine extends CommonObjectLine global $action, $hookmanager; $hookmanager->initHooks(array('evaluationlinedao')); - $parameters = array('id'=>$this->id, 'getnomurl' => &$result); + $parameters = array('id' => $this->id, 'getnomurl' => &$result); $reshook = $hookmanager->executeHooks('getNomUrl', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks if ($reshook > 0) { $result = $hookmanager->resPrint; @@ -874,7 +864,7 @@ class EvaluationLine extends CommonObjectLine * Initialise object with example values * Id must be 0 if object instance is a specimen * - * @return void + * @return int */ public function initAsSpecimen() { @@ -882,7 +872,7 @@ class EvaluationLine extends CommonObjectLine // $this->property1 = ... // $this->property2 = ... - $this->initAsSpecimenCommon(); + return $this->initAsSpecimenCommon(); } /** @@ -895,11 +885,10 @@ class EvaluationLine extends CommonObjectLine $this->lines = array(); $objectline = new EvaluationLine($this->db); - $result = $objectline->fetchAll('ASC', 'position', 0, 0, array('customsql'=>'fk_evaluationdet = '.$this->id)); + $result = $objectline->fetchAll('ASC', 'position', 0, 0, '(fk_evaluationdet:=:'.((int) $this->id).')'); if (is_numeric($result)) { - $this->error = $objectline->error; - $this->errors = $objectline->errors; + $this->setErrorsFromObject($objectline); return $result; } else { $this->lines = $result; @@ -1000,37 +989,4 @@ class EvaluationLine extends CommonObjectLine return $result; } - - /** - * Action executed by scheduler - * CAN BE A CRON TASK. In such a case, parameters come from the schedule job setup field 'Parameters' - * Use public function doScheduledJob($param1, $param2, ...) to get parameters - * - * @return int 0 if OK, <>0 if KO (this function is used also by cron so only 0 is OK) - */ - public function doScheduledJob() - { - global $conf, $langs; - - //$conf->global->SYSLOG_FILE = 'DOL_DATA_ROOT/dolibarr_mydedicatedlofile.log'; - - $error = 0; - $this->output = ''; - $this->error = ''; - - dol_syslog(__METHOD__, LOG_DEBUG); - - $now = dol_now(); - - $this->db->begin(); - - // ... - - $this->db->commit(); - - return $error; - } } - - -require_once DOL_DOCUMENT_ROOT.'/core/class/commonobjectline.class.php'; diff --git a/htdocs/hrm/class/job.class.php b/htdocs/hrm/class/job.class.php index 610b7896eaf..5c2f34a5588 100644 --- a/htdocs/hrm/class/job.class.php +++ b/htdocs/hrm/class/job.class.php @@ -1,9 +1,11 @@ - * Copyright (C) 2021 Gauthier VERDOL - * Copyright (C) 2021 Greg Rastklan - * Copyright (C) 2021 Jean-Pascal BOUDET - * Copyright (C) 2021 Grégory BLEMAND +/* Copyright (C) 2017 Laurent Destailleur + * Copyright (C) 2021 Gauthier VERDOL + * Copyright (C) 2021 Greg Rastklan + * Copyright (C) 2021 Jean-Pascal BOUDET + * Copyright (C) 2021 Grégory BLEMAND + * Copyright (C) 2024 Frédéric France + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -27,8 +29,7 @@ // Put here all includes required by your class file require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php'; -//require_once DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php'; -//require_once DOL_DOCUMENT_ROOT . '/product/class/product.class.php'; + /** * Class for Job @@ -100,19 +101,19 @@ class Job extends CommonObject // BEGIN MODULEBUILDER PROPERTIES /** - * @var array Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. + * @var array|string,position:int,notnull?:int,visible:int,noteditable?:int,default?:string,index?:int,foreignkey?:string,searchall?:int,isameasure?:int,css?:string,csslist?:string,help?:string,showoncombobox?:int,disabled?:int,arrayofkeyval?:array,comment?:string}> Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. */ - public $fields=array( - 'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>'1', 'position'=>1, 'notnull'=>1, 'visible'=>0, 'noteditable'=>'1', 'index'=>1, 'css'=>'left', 'comment'=>"Id"), - 'label' => array('type'=>'varchar(128)', 'label'=>'Label', 'enabled'=>'1', 'position'=>20, 'notnull'=>1, 'visible'=>1, 'index'=>1, 'searchall'=>1, 'showoncombobox'=>'1', 'comment'=>"Label of object"), - 'description' => array('type'=>'text', 'label'=>'Description', 'enabled'=>'1', 'position'=>21, 'notnull'=>0, 'visible'=>1,), - 'date_creation' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>'1', 'position'=>500, 'notnull'=>1, 'visible'=>2,), - 'tms' => array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>'1', 'position'=>501, 'notnull'=>0, 'visible'=>2,), - 'deplacement' => array('type'=>'select', 'required'=> 1,'label'=> 'NeedBusinessTravels', 'enabled'=> 1, 'position'=> 90, 'notnull'=> 1, 'visible'=> 1, 'arrayofkeyval'=> array(0 =>"No", 1=>"Yes"), 'default'=>0), - 'note_public' => array('type'=>'html', 'label'=>'NotePublic', 'enabled'=>'1', 'position'=>70, 'notnull'=>0, 'visible'=>0,), - 'note_private' => array('type'=>'html', 'label'=>'NotePrivate', 'enabled'=>'1', 'position'=>71, 'notnull'=>0, 'visible'=>0,), - 'fk_user_creat' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserAuthor', 'enabled'=>'1', 'position'=>510, 'notnull'=>1, 'visible'=>-2, 'foreignkey'=>'user.rowid',), - 'fk_user_modif' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserModif', 'enabled'=>'1', 'position'=>511, 'notnull'=>-1, 'visible'=>-2,), + public $fields = array( + 'rowid' => array('type' => 'integer', 'label' => 'TechnicalID', 'enabled' => 1, 'position' => 1, 'notnull' => 1, 'visible' => 0, 'noteditable' => 1, 'index' => 1, 'css' => 'left', 'comment' => "Id"), + 'label' => array('type' => 'varchar(128)', 'label' => 'Label', 'enabled' => 1, 'position' => 20, 'notnull' => 1, 'visible' => 1, 'index' => 1, 'searchall' => 1, 'showoncombobox' => 1, 'comment' => "Label of object"), + 'description' => array('type' => 'text', 'label' => 'Description', 'enabled' => 1, 'position' => 21, 'notnull' => 0, 'visible' => 1,), + 'date_creation' => array('type' => 'datetime', 'label' => 'DateCreation', 'enabled' => 1, 'position' => 500, 'notnull' => 1, 'visible' => 2,), + 'tms' => array('type' => 'timestamp', 'label' => 'DateModification', 'enabled' => 1, 'position' => 501, 'notnull' => 0, 'visible' => 2,), + 'deplacement' => array('type' => 'select', 'required' => 1,'label' => 'NeedBusinessTravels', 'enabled' => 1, 'position' => 90, 'notnull' => 1, 'visible' => 1, 'arrayofkeyval' => array(0 => "No", 1 => "Yes"), 'default' => '0'), + 'note_public' => array('type' => 'html', 'label' => 'NotePublic', 'enabled' => 1, 'position' => 70, 'notnull' => 0, 'visible' => 0,), + 'note_private' => array('type' => 'html', 'label' => 'NotePrivate', 'enabled' => 1, 'position' => 71, 'notnull' => 0, 'visible' => 0,), + 'fk_user_creat' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'UserAuthor', 'enabled' => 1, 'position' => 510, 'notnull' => 1, 'visible' => -2, 'foreignkey' => 'user.rowid',), + 'fk_user_modif' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'UserModif', 'enabled' => 1, 'position' => 511, 'notnull' => -1, 'visible' => -2,), ); public $rowid; public $ref; @@ -121,8 +122,6 @@ class Job extends CommonObject public $date_creation; public $deplacement; - public $note_public; - public $note_private; public $fk_user_creat; public $fk_user_modif; // END MODULEBUILDER PROPERTIES @@ -135,9 +134,9 @@ class Job extends CommonObject // */ // public $table_element_line = 'hrm_jobline'; - // /** - // * @var string Field with ID of parent key if this object has a parent - // */ + /** + * @var string Field with ID of parent key if this object has a parent + */ public $fk_element = 'fk_job'; // /** @@ -145,17 +144,20 @@ class Job extends CommonObject // */ // public $class_element_line = 'Jobline'; - // /** - // * @var array List of child tables. To test if we can delete object. - // */ - protected $childtables = array('hrm_evaluation', 'hrm_job_user'); + /** + * @var array List of child tables. To test if we can delete object. + */ + protected $childtables = array( + 'hrm_evaluation' => ['name' => 'Evaluation'], + 'hrm_job_user' => ['name' => 'Job'], + ); - // /** - // * @var array List of child tables. To know object to delete on cascade. - // * If name matches '@ClassNAme:FilePathClass;ParentFkFieldName' it will - // * call method deleteByParentField(parentId, ParentFkFieldName) to fetch and delete child object - // */ - protected $childtablesoncascade = array("@SkillRank:hrm/class/skillrank.class.php:fk_object:objecttype='job'"); + /** + * @var string[] List of child tables. To know object to delete on cascade. + * If name matches '@ClassNAme:FilePathClass:ParentFkFieldName' it will + * call method deleteByParentField(parentId, ParentFkFieldName) to fetch and delete child object + */ + protected $childtablesoncascade = array("@SkillRank:hrm/class/skillrank.class.php:fk_object:(objecttype:=:'job')"); // /** // * @var JobLine[] Array of subtable lines @@ -290,8 +292,7 @@ class Job extends CommonObject $result = $object->createCommon($user); if ($result < 0) { $error++; - $this->error = $object->error; - $this->errors = $object->errors; + $this->setErrorsFromObject($object); } if (!$error) { @@ -355,18 +356,17 @@ class Job extends CommonObject /** * Load list of objects in memory from the database. * - * @param string $sortorder Sort Order - * @param string $sortfield Sort field - * @param int $limit limit - * @param int $offset Offset - * @param array $filter Filter array. Example array('field'=>'valueforlike', 'customurl'=>...) - * @param string $filtermode Filter mode (AND or OR) - * @return array|int int <0 if KO, array of pages if OK + * @param string $sortorder Sort Order + * @param string $sortfield Sort field + * @param int $limit limit + * @param int $offset Offset + * @param string $filter Filter as an Universal Search string. + * Example: '((client:=:1) OR ((client:>=:2) AND (client:<=:3))) AND (client:!=:8) AND (nom:like:'a%')' + * @param string $filtermode No more used + * @return array|int int <0 if KO, array of pages if OK */ - public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND') + public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, $filter = '', $filtermode = 'AND') { - global $conf; - dol_syslog(__METHOD__, LOG_DEBUG); $records = array(); @@ -379,25 +379,14 @@ class Job extends CommonObject } else { $sql .= ' WHERE 1 = 1'; } + // Manage filter - $sqlwhere = array(); - if (count($filter) > 0) { - foreach ($filter as $key => $value) { - if ($key == 't.rowid') { - $sqlwhere[] = $key.'='.$value; - } elseif (in_array($this->fields[$key]['type'], array('date', 'datetime', 'timestamp'))) { - $sqlwhere[] = $key.' = \''.$this->db->idate($value).'\''; - } elseif ($key == 'customsql') { - $sqlwhere[] = $value; - } elseif (strpos($value, '%') === false) { - $sqlwhere[] = $key.' IN ('.$this->db->sanitize($this->db->escape($value)).')'; - } else { - $sqlwhere[] = $key.' LIKE \'%'.$this->db->escape($value).'%\''; - } - } - } - if (count($sqlwhere) > 0) { - $sql .= " AND (".implode(" ".$filtermode." ", $sqlwhere).")"; + $errormessage = ''; + $sql .= forgeSQLFromUniversalSearchCriteria($filter, $errormessage); + if ($errormessage) { + $this->errors[] = $errormessage; + dol_syslog(__METHOD__.' '.implode(',', $this->errors), LOG_ERR); + return -1; } if (!empty($sortfield)) { @@ -822,7 +811,7 @@ class Job extends CommonObject global $action, $hookmanager; $hookmanager->initHooks(array('jobdao')); - $parameters = array('id'=>$this->id, 'getnomurl' => &$result); + $parameters = array('id' => $this->id, 'getnomurl' => &$result); $reshook = $hookmanager->executeHooks('getNomUrl', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks if ($reshook > 0) { $result = $hookmanager->resPrint; @@ -914,7 +903,7 @@ class Job extends CommonObject * Initialise object with example values * Id must be 0 if object instance is a specimen * - * @return void + * @return int */ public function initAsSpecimen() { @@ -922,7 +911,7 @@ class Job extends CommonObject // $this->property1 = ... // $this->property2 = ... - $this->initAsSpecimenCommon(); + return $this->initAsSpecimenCommon(); } /** @@ -935,11 +924,10 @@ class Job extends CommonObject $this->lines = array(); $objectline = new JobLine($this->db); - $result = $objectline->fetchAll('ASC', 'position', 0, 0, array('customsql'=>'fk_job = '.$this->id)); + $result = $objectline->fetchAll('ASC', 'position', 0, 0, '(fk_job:=:'.((int) $this->id).')'); if (is_numeric($result)) { - $this->error = $objectline->error; - $this->errors = $objectline->errors; + $this->setErrorsFromObject($objectline); return $result; } else { $this->lines = $result; @@ -1041,36 +1029,6 @@ class Job extends CommonObject return $result; } - /** - * Action executed by scheduler - * CAN BE A CRON TASK. In such a case, parameters come from the schedule job setup field 'Parameters' - * Use public function doScheduledJob($param1, $param2, ...) to get parameters - * - * @return int 0 if OK, <>0 if KO (this function is used also by cron so only 0 is OK) - */ - public function doScheduledJob() - { - global $conf, $langs; - - //$conf->global->SYSLOG_FILE = 'DOL_DATA_ROOT/dolibarr_mydedicatedlofile.log'; - - $error = 0; - $this->output = ''; - $this->error = ''; - - dol_syslog(__METHOD__, LOG_DEBUG); - - $now = dol_now(); - - $this->db->begin(); - - // ... - - $this->db->commit(); - - return $error; - } - /** * Return clicable link of object (with eventually picto) * @@ -1107,6 +1065,7 @@ class Job extends CommonObject $return .= ''; return $return; } + /** * function for get required skills associate to job object * @param int $id Id of object diff --git a/htdocs/hrm/class/position.class.php b/htdocs/hrm/class/position.class.php index 3a878d30d09..bcd91410fda 100644 --- a/htdocs/hrm/class/position.class.php +++ b/htdocs/hrm/class/position.class.php @@ -4,6 +4,8 @@ * Copyright (C) 2021 Greg Rastklan * Copyright (C) 2021 Jean-Pascal BOUDET * Copyright (C) 2021 Grégory BLEMAND + * Copyright (C) 2024 Frédéric France + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -27,8 +29,6 @@ // Put here all includes required by your class file require_once DOL_DOCUMENT_ROOT . '/core/class/commonobject.class.php'; -//require_once DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php'; -//require_once DOL_DOCUMENT_ROOT . '/product/class/product.class.php'; /** * Class for Position @@ -100,24 +100,24 @@ class Position extends CommonObject // BEGIN MODULEBUILDER PROPERTIES /** - * @var array Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. + * @var array|string,position:int,notnull?:int,visible:int,noteditable?:int,default?:string,index?:int,foreignkey?:string,searchall?:int,isameasure?:int,css?:string,csslist?:string,help?:string,showoncombobox?:int,disabled?:int,arrayofkeyval?:array,comment?:string}> Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. */ - public $fields=array( - 'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>'1', 'position'=>1, 'notnull'=>1, 'visible'=>2, 'index'=>1, 'css'=>'left', 'comment'=>"Id"), + public $fields = array( + 'rowid' => array('type' => 'integer', 'label' => 'TechnicalID', 'enabled' => 1, 'position' => 1, 'notnull' => 1, 'visible' => 2, 'index' => 1, 'css' => 'left', 'comment' => "Id"), //'ref' => array('type'=>'varchar(128)', 'label'=>'Ref', 'enabled'=>'1', 'position'=>20, 'notnull'=>1, 'visible'=>1, 'index'=>1, 'searchall'=>1, 'showoncombobox'=>'1', 'comment'=>"Reference of object"), - 'date_creation' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>'1', 'position'=>500, 'notnull'=>1, 'visible'=>-2,), - 'tms' => array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>'1', 'position'=>501, 'notnull'=>0, 'visible'=>-2,), - 'fk_contrat' => array('type'=>'integer:Contrat:contrat/class/contrat.class.php', 'label'=>'fk_contrat', 'enabled'=>'isModEnabled("contract")', 'position'=>50, 'notnull'=>0, 'visible'=>0,), - 'fk_user' => array('type'=>'integer:User:user/class/user.class.php:0:(t.statut:=:1)', 'label'=>'Employee', 'enabled'=>'1', 'position'=>55, 'notnull'=>1, 'visible'=>1, 'default'=>0, 'picto'=>'user', 'css'=>'maxwidth300 widthcentpercentminusxx', 'csslist'=>'tdoverflowmax150'), - 'fk_job' => array('type'=>'integer:Job:/hrm/class/job.class.php', 'label'=>'JobProfile', 'enabled'=>'1', 'position'=>56, 'notnull'=>1, 'visible'=>1, 'picto'=>'jobprofile', 'css'=>'maxwidth300 widthcentpercentminusxx', 'csslist'=>'tdoverflowmax150'), - 'date_start' => array('type'=>'date', 'label'=>'DateStart', 'enabled'=>'1', 'position'=>101, 'notnull'=>1, 'visible'=>1,), - 'date_end' => array('type'=>'date', 'label'=>'DateEnd', 'enabled'=>'1', 'position'=>102, 'notnull'=>0, 'visible'=>1,), - 'description' => array('type'=>'text', 'label'=>'Description', 'enabled'=>'1', 'position'=>120, 'notnull'=>0, 'visible'=>3,), - 'abort_comment' => array('type'=>'varchar(255)', 'label'=>'AbandonmentComment', 'enabled'=>'getDolGlobalInt("HRM_JOB_POSITON_ENDING_COMMENT")', 'position'=>502, 'notnull'=>0, 'visible'=>1,), - 'note_public' => array('type'=>'html', 'label'=>'NotePublic', 'enabled'=>'1', 'position'=>151, 'notnull'=>0, 'visible'=>0,), - 'note_private' => array('type'=>'html', 'label'=>'NotePrivate', 'enabled'=>'1', 'position'=>152, 'notnull'=>0, 'visible'=>0,), - 'fk_user_creat' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserAuthor', 'enabled'=>'1', 'position'=>510, 'notnull'=>1, 'visible'=>-2, 'foreignkey'=>'user.rowid',), - 'fk_user_modif' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserModif', 'enabled'=>'1', 'position'=>511, 'notnull'=>-1, 'visible'=>-2,), + 'date_creation' => array('type' => 'datetime', 'label' => 'DateCreation', 'enabled' => 1, 'position' => 500, 'notnull' => 1, 'visible' => -2,), + 'tms' => array('type' => 'timestamp', 'label' => 'DateModification', 'enabled' => 1, 'position' => 501, 'notnull' => 0, 'visible' => -2,), + 'fk_contrat' => array('type' => 'integer:Contrat:contrat/class/contrat.class.php', 'label' => 'fk_contrat', 'enabled' => 'isModEnabled("contract")', 'position' => 50, 'notnull' => 0, 'visible' => 0,), + 'fk_user' => array('type' => 'integer:User:user/class/user.class.php:0:(t.statut:=:1)', 'label' => 'Employee', 'enabled' => 1, 'position' => 55, 'notnull' => 1, 'visible' => 1, 'default' => '0', 'picto' => 'user', 'css' => 'maxwidth300 widthcentpercentminusxx', 'csslist' => 'tdoverflowmax150'), + 'fk_job' => array('type' => 'integer:Job:/hrm/class/job.class.php', 'label' => 'JobProfile', 'enabled' => 1, 'position' => 56, 'notnull' => 1, 'visible' => 1, 'picto' => 'jobprofile', 'css' => 'maxwidth300 widthcentpercentminusxx', 'csslist' => 'tdoverflowmax150'), + 'date_start' => array('type' => 'date', 'label' => 'DateStart', 'enabled' => 1, 'position' => 101, 'notnull' => 1, 'visible' => 1,), + 'date_end' => array('type' => 'date', 'label' => 'DateEnd', 'enabled' => 1, 'position' => 102, 'notnull' => 0, 'visible' => 1,), + 'description' => array('type' => 'text', 'label' => 'Description', 'enabled' => 1, 'position' => 120, 'notnull' => 0, 'visible' => 3,), + 'abort_comment' => array('type' => 'varchar(255)', 'label' => 'AbandonmentComment', 'enabled' => 'getDolGlobalInt("HRM_JOB_POSITON_ENDING_COMMENT")', 'position' => 502, 'notnull' => 0, 'visible' => 1,), + 'note_public' => array('type' => 'html', 'label' => 'NotePublic', 'enabled' => 1, 'position' => 151, 'notnull' => 0, 'visible' => 0,), + 'note_private' => array('type' => 'html', 'label' => 'NotePrivate', 'enabled' => 1, 'position' => 152, 'notnull' => 0, 'visible' => 0,), + 'fk_user_creat' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'UserAuthor', 'enabled' => 1, 'position' => 510, 'notnull' => 1, 'visible' => -2, 'foreignkey' => 'user.rowid',), + 'fk_user_modif' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'UserModif', 'enabled' => 1, 'position' => 511, 'notnull' => -1, 'visible' => -2,), ); public $rowid; public $ref; @@ -299,8 +299,7 @@ class Position extends CommonObject $result = $object->createCommon($user); if ($result < 0) { $error++; - $this->error = $object->error; - $this->errors = $object->errors; + $this->setErrorsFromObject($object); } if (!$error) { @@ -364,18 +363,17 @@ class Position extends CommonObject /** * Load list of objects in memory from the database. * - * @param string $sortorder Sort Order - * @param string $sortfield Sort field - * @param int $limit limit - * @param int $offset Offset - * @param array $filter Filter array. Example array('field'=>'valueforlike', 'customurl'=>...) - * @param string $filtermode Filter mode (AND or OR) - * @return array|int int <0 if KO, array of pages if OK + * @param string $sortorder Sort Order + * @param string $sortfield Sort field + * @param int $limit limit + * @param int $offset Offset + * @param string $filter Filter as an Universal Search string. + * Example: '((client:=:1) OR ((client:>=:2) AND (client:<=:3))) AND (client:!=:8) AND (nom:like:'a%')' + * @param string $filtermode No more used + * @return array|int int <0 if KO, array of pages if OK */ - public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND') + public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, $filter = '', $filtermode = 'AND') { - global $conf; - dol_syslog(__METHOD__, LOG_DEBUG); $records = array(); @@ -388,25 +386,14 @@ class Position extends CommonObject } else { $sql .= ' WHERE 1 = 1'; } + // Manage filter - $sqlwhere = array(); - if (count($filter) > 0) { - foreach ($filter as $key => $value) { - if ($key == 't.rowid') { - $sqlwhere[] = $key . '=' . $value; - } elseif ($key == 'customsql') { - $sqlwhere[] = $value; - } elseif (in_array($this->fields[$key]['type'], array('date', 'datetime', 'timestamp'))) { - $sqlwhere[] = $key . ' = \'' . $this->db->idate($value) . '\''; - } elseif (strpos($value, '%') === false) { - $sqlwhere[] = $key . ' IN (' . $this->db->sanitize($this->db->escape($value)) . ')'; - } else { - $sqlwhere[] = $key . ' LIKE \'%' . $this->db->escape($value) . '%\''; - } - } - } - if (count($sqlwhere) > 0) { - $sql .= " AND (".implode(" ".$filtermode." ", $sqlwhere).")"; + $errormessage = ''; + $sql .= forgeSQLFromUniversalSearchCriteria($filter, $errormessage); + if ($errormessage) { + $this->errors[] = $errormessage; + dol_syslog(__METHOD__.' '.implode(',', $this->errors), LOG_ERR); + return -1; } if (!empty($sortfield)) { @@ -956,7 +943,7 @@ class Position extends CommonObject * Initialise object with example values * Id must be 0 if object instance is a specimen * - * @return void + * @return int */ public function initAsSpecimen() { @@ -964,7 +951,7 @@ class Position extends CommonObject // $this->property1 = ... // $this->property2 = ... - $this->initAsSpecimenCommon(); + return $this->initAsSpecimenCommon(); } /** @@ -977,11 +964,10 @@ class Position extends CommonObject $this->lines = array(); $objectline = new PositionLine($this->db); - $result = $objectline->fetchAll('ASC', 'position', 0, 0, array('customsql' => 'fk_position = ' . $this->id)); + $result = $objectline->fetchAll('ASC', 'position', 0, 0, '(fk_position:=:'.((int) $this->id).')'); if (is_numeric($result)) { - $this->error = $objectline->error; - $this->errors = $objectline->errors; + $this->setErrorsFromObject($objectline); return $result; } else { $this->lines = $result; @@ -1054,7 +1040,7 @@ class Position extends CommonObject { $TPosition = array(); - $TPosition = $this->fetchAll('ASC', 't.rowid', 0, 0, array('customsql' => 'fk_user=' . $userid)); + $TPosition = $this->fetchAll('ASC', 't.rowid', 0, 0, '(fk_user:=:'.((int) $userid).')'); return $TPosition; } @@ -1098,36 +1084,6 @@ class Position extends CommonObject return $result; } - /** - * Action executed by scheduler - * CAN BE A CRON TASK. In such a case, parameters come from the schedule job setup field 'Parameters' - * Use public function doScheduledJob($param1, $param2, ...) to get parameters - * - * @return int 0 if OK, <>0 if KO (this function is used also by cron so only 0 is OK) - */ - public function doScheduledJob() - { - global $conf, $langs; - - //$conf->global->SYSLOG_FILE = 'DOL_DATA_ROOT/dolibarr_mydedicatedlofile.log'; - - $error = 0; - $this->output = ''; - $this->error = ''; - - dol_syslog(__METHOD__, LOG_DEBUG); - - $now = dol_now(); - - $this->db->begin(); - - // ... - - $this->db->commit(); - - return $error; - } - /** * Return clicable link of object (with eventually picto) * diff --git a/htdocs/hrm/class/skill.class.php b/htdocs/hrm/class/skill.class.php index e098fb9661d..b6759336016 100644 --- a/htdocs/hrm/class/skill.class.php +++ b/htdocs/hrm/class/skill.class.php @@ -4,6 +4,8 @@ * Copyright (C) 2021 Greg Rastklan * Copyright (C) 2021 Jean-Pascal BOUDET * Copyright (C) 2021 Grégory BLEMAND + * Copyright (C) 2024 Frédéric France + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -27,8 +29,6 @@ // Put here all includes required by your class file require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php'; -//require_once DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php'; -//require_once DOL_DOCUMENT_ROOT . '/product/class/product.class.php'; /** * Class for Skill @@ -106,22 +106,22 @@ class Skill extends CommonObject // BEGIN MODULEBUILDER PROPERTIES /** - * @var array Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. + * @var array|string,position:int,notnull?:int,visible:int,noteditable?:int,default?:string,index?:int,foreignkey?:string,searchall?:int,isameasure?:int,css?:string,csslist?:string,help?:string,showoncombobox?:int,disabled?:int,arrayofkeyval?:array,comment?:string}> Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. */ - public $fields=array( - 'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>'1', 'position'=>1, 'notnull'=>1, 'visible'=>0, 'noteditable'=>'1', 'index'=>1, 'css'=>'left', 'comment'=>"Id"), - 'label' => array('type'=>'varchar(255)', 'label'=>'Label', 'enabled'=>'1', 'position'=>30, 'notnull'=>1, 'visible'=>1, 'searchall'=>1, 'css'=>'minwidth300', 'cssview'=>'wordbreak', 'showoncombobox'=>'2',), - 'description' => array('type'=>'text', 'label'=>'Description', 'enabled'=>'1', 'position'=>60, 'notnull'=>0, 'visible'=>3,), - 'date_creation' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>'1', 'position'=>500, 'notnull'=>1, 'visible'=>-2,), - 'tms' => array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>'1', 'position'=>501, 'notnull'=>0, 'visible'=>-2,), - 'fk_user_creat' => array('type'=>'integer:User:user/class/user.class.php:0', 'label'=>'UserAuthor', 'enabled'=>'1', 'position'=>510, 'notnull'=>1, 'visible'=>-2, 'foreignkey'=>'user.rowid',), - 'fk_user_modif' => array('type'=>'integer:User:user/class/user.class.php:0', 'label'=>'UserModif', 'enabled'=>'1', 'position'=>511, 'notnull'=>-1, 'visible'=>-2,), - 'required_level' => array('type'=>'integer', 'label'=>'requiredLevel', 'enabled'=>'1', 'position'=>50, 'notnull'=>1, 'visible'=>0,), - 'date_validite' => array('type'=>'integer', 'label'=>'date_validite', 'enabled'=>'1', 'position'=>52, 'notnull'=>1, 'visible'=>0,), - 'temps_theorique' => array('type'=>'double(24,8)', 'label'=>'temps_theorique', 'enabled'=>'1', 'position'=>54, 'notnull'=>1, 'visible'=>0,), - 'skill_type' => array('type'=>'integer', 'label'=>'SkillType', 'enabled'=>'1', 'position'=>55, 'notnull'=>1, 'visible'=>1, 'index'=>1, 'css'=>'minwidth200', 'arrayofkeyval'=>array('0'=>'TypeKnowHow', '1'=>'TypeHowToBe', '9'=>'TypeKnowledge'), 'default'=>0), - 'note_public' => array('type'=>'html', 'label'=>'NotePublic', 'enabled'=>'1', 'position'=>70, 'notnull'=>0, 'visible'=>0,), - 'note_private' => array('type'=>'html', 'label'=>'NotePrivate', 'enabled'=>'1', 'position'=>71, 'notnull'=>0, 'visible'=>0,), + public $fields = array( + 'rowid' => array('type' => 'integer', 'label' => 'TechnicalID', 'enabled' => 1, 'position' => 1, 'notnull' => 1, 'visible' => 0, 'noteditable' => 1, 'index' => 1, 'css' => 'left', 'comment' => "Id"), + 'label' => array('type' => 'varchar(255)', 'label' => 'Label', 'enabled' => 1, 'position' => 30, 'notnull' => 1, 'visible' => 1, 'searchall' => 1, 'css' => 'minwidth300', 'cssview' => 'wordbreak', 'showoncombobox' => 2,), + 'description' => array('type' => 'text', 'label' => 'Description', 'enabled' => 1, 'position' => 60, 'notnull' => 0, 'visible' => 3,), + 'date_creation' => array('type' => 'datetime', 'label' => 'DateCreation', 'enabled' => 1, 'position' => 500, 'notnull' => 1, 'visible' => -2,), + 'tms' => array('type' => 'timestamp', 'label' => 'DateModification', 'enabled' => 1, 'position' => 501, 'notnull' => 0, 'visible' => -2,), + 'fk_user_creat' => array('type' => 'integer:User:user/class/user.class.php:0', 'label' => 'UserAuthor', 'enabled' => 1, 'position' => 510, 'notnull' => 1, 'visible' => -2, 'foreignkey' => 'user.rowid',), + 'fk_user_modif' => array('type' => 'integer:User:user/class/user.class.php:0', 'label' => 'UserModif', 'enabled' => 1, 'position' => 511, 'notnull' => -1, 'visible' => -2,), + 'required_level' => array('type' => 'integer', 'label' => 'requiredLevel', 'enabled' => 1, 'position' => 50, 'notnull' => 1, 'visible' => 0,), + 'date_validite' => array('type' => 'integer', 'label' => 'date_validite', 'enabled' => 1, 'position' => 52, 'notnull' => 1, 'visible' => 0,), + 'temps_theorique' => array('type' => 'double(24,8)', 'label' => 'temps_theorique', 'enabled' => 1, 'position' => 54, 'notnull' => 1, 'visible' => 0,), + 'skill_type' => array('type' => 'integer', 'label' => 'SkillType', 'enabled' => 1, 'position' => 55, 'notnull' => 1, 'visible' => 1, 'index' => 1, 'css' => 'minwidth200', 'arrayofkeyval' => array('0' => 'TypeKnowHow', '1' => 'TypeHowToBe', '9' => 'TypeKnowledge'), 'default' => '0'), + 'note_public' => array('type' => 'html', 'label' => 'NotePublic', 'enabled' => 1, 'position' => 70, 'notnull' => 0, 'visible' => 0,), + 'note_private' => array('type' => 'html', 'label' => 'NotePrivate', 'enabled' => 1, 'position' => 71, 'notnull' => 0, 'visible' => 0,), ); public $rowid; public $label; @@ -133,8 +133,6 @@ class Skill extends CommonObject public $date_validite; public $temps_theorique; public $skill_type; - public $note_public; - public $note_private; // END MODULEBUILDER PROPERTIES @@ -145,9 +143,9 @@ class Skill extends CommonObject // */ // public $table_element_line = 'hrm_skillline'; - // /** - // * @var string Field with ID of parent key if this object has a parent - // */ + /** + * @var string Field with ID of parent key if this object has a parent + */ public $fk_element = 'fk_skill'; // /** @@ -155,16 +153,19 @@ class Skill extends CommonObject // */ // public $class_element_line = 'Skillline'; - // /** - // * @var array List of child tables. To test if we can delete object. - // */ - protected $childtables = array('hrm_skillrank', 'hrm_evaluationdet'); + /** + * @var array List of child tables. To test if we can delete object. + */ + protected $childtables = array( + 'hrm_skillrank' => ['name' => 'SkillRank'], + 'hrm_evaluationdet' => ['name' => 'EvaluationDet'], + ); - // /** - // * @var array List of child tables. To know object to delete on cascade. - // * If name matches '@ClassNAme:FilePathClass;ParentFkFieldName' it will - // * call method deleteByParentField(parentId, ParentFkFieldName) to fetch and delete child object - // */ + /** + * @var string[] List of child tables. To know object to delete on cascade. + * If name matches '@ClassNAme:FilePathClass;ParentFkFieldName' it will + * call method deleteByParentField(parentId, ParentFkFieldName) to fetch and delete child object + */ protected $childtablesoncascade = array('hrm_skilldet'); // /** @@ -259,7 +260,7 @@ class Skill extends CommonObject $this->db->begin(); // Create level of skills - for ($i; $i <= $MaxNumberSkill ; $i++) { + while ($i <= $MaxNumberSkill) { $skilldet = new Skilldet($this->db); $skilldet->description = $defaultSkillDesc . " " . $i; $skilldet->rankorder = $i; @@ -269,9 +270,10 @@ class Skill extends CommonObject if ($result <= 0) { $error++; } + $i++; } - if (! $error) { + if (!$error) { $this->db->commit(); setEventMessage($langs->trans('SkillCreated'), $i); @@ -349,8 +351,7 @@ class Skill extends CommonObject $result = $object->createCommon($user); if ($result < 0) { $error++; - $this->error = $object->error; - $this->errors = $object->errors; + $this->setErrorsFromObject($object); } if (!$error) { @@ -412,8 +413,7 @@ class Skill extends CommonObject if (is_array($this->lines)) { return (count($this->lines) > 0) ? $this->lines : array(); } elseif ($this->lines < 0) { - $this->errors = array_merge($this->errors, $skilldet->errors); - $this->error = $skilldet->error; + $this->setErrorsFromObject($skilldet); return $this->lines; } return []; @@ -423,18 +423,17 @@ class Skill extends CommonObject /** * Load list of objects in memory from the database. * - * @param string $sortorder Sort Order - * @param string $sortfield Sort field - * @param int $limit limit - * @param int $offset Offset - * @param array $filter Filter array. Example array('field'=>'valueforlike', 'customurl'=>...) - * @param string $filtermode Filter mode (AND or OR) - * @return array|int int <0 if KO, array of pages if OK + * @param string $sortorder Sort Order + * @param string $sortfield Sort field + * @param int $limit limit + * @param int $offset Offset + * @param string $filter Filter as an Universal Search string. + * Example: '((client:=:1) OR ((client:>=:2) AND (client:<=:3))) AND (client:!=:8) AND (nom:like:'a%')' + * @param string $filtermode No more used + * @return array|int int <0 if KO, array of pages if OK */ - public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND') + public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, $filter = '', $filtermode = 'AND') { - global $conf; - dol_syslog(__METHOD__, LOG_DEBUG); $records = array(); @@ -447,25 +446,14 @@ class Skill extends CommonObject } else { $sql .= ' WHERE 1 = 1'; } + // Manage filter - $sqlwhere = array(); - if (count($filter) > 0) { - foreach ($filter as $key => $value) { - if ($key == 't.rowid') { - $sqlwhere[] = $key.'='.$value; - } elseif (in_array($this->fields[$key]['type'], array('date', 'datetime', 'timestamp'))) { - $sqlwhere[] = $key.' = \''.$this->db->idate($value).'\''; - } elseif ($key == 'customsql') { - $sqlwhere[] = $value; - } elseif (strpos($value, '%') === false) { - $sqlwhere[] = $key.' IN ('.$this->db->sanitize($this->db->escape($value)).')'; - } else { - $sqlwhere[] = $key.' LIKE \'%'.$this->db->escape($value).'%\''; - } - } - } - if (count($sqlwhere) > 0) { - $sql .= " AND (".implode(" ".$filtermode." ", $sqlwhere).")"; + $errormessage = ''; + $sql .= forgeSQLFromUniversalSearchCriteria($filter, $errormessage); + if ($errormessage) { + $this->errors[] = $errormessage; + dol_syslog(__METHOD__.' '.implode(',', $this->errors), LOG_ERR); + return -1; } if (!empty($sortfield)) { @@ -863,7 +851,7 @@ class Skill extends CommonObject global $action, $hookmanager; $hookmanager->initHooks(array('skilldao')); - $parameters = array('id'=>$this->id, 'getnomurl' => &$result); + $parameters = array('id' => $this->id, 'getnomurl' => &$result); $reshook = $hookmanager->executeHooks('getNomUrl', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks if ($reshook > 0) { $result = $hookmanager->resPrint; @@ -955,7 +943,7 @@ class Skill extends CommonObject * Initialise object with example values * Id must be 0 if object instance is a specimen * - * @return void + * @return int */ public function initAsSpecimen() { @@ -963,7 +951,7 @@ class Skill extends CommonObject // $this->property1 = ... // $this->property2 = ... - $this->initAsSpecimenCommon(); + return $this->initAsSpecimenCommon(); } /** @@ -976,11 +964,10 @@ class Skill extends CommonObject $this->lines = array(); $objectline = new Skilldet($this->db); - $result = $objectline->fetchAll('ASC', 'rankorder', 0, 0, array('customsql'=>'fk_skill = '.$this->id)); + $result = $objectline->fetchAll('ASC', 'rankorder', 0, 0, '(fk_skill:=:'.((int) $this->id).')'); if (is_numeric($result)) { - $this->error = $objectline->error; - $this->errors = $objectline->errors; + $this->setErrorsFromObject($objectline); return $result; } else { $this->lines = $result; @@ -1082,36 +1069,6 @@ class Skill extends CommonObject return $result; } - /** - * Action executed by scheduler - * CAN BE A CRON TASK. In such a case, parameters come from the schedule job setup field 'Parameters' - * Use public function doScheduledJob($param1, $param2, ...) to get parameters - * - * @return int 0 if OK, <>0 if KO (this function is used also by cron so only 0 is OK) - */ - public function doScheduledJob() - { - global $conf, $langs; - - //$conf->global->SYSLOG_FILE = 'DOL_DATA_ROOT/dolibarr_mydedicatedlofile.log'; - - $error = 0; - $this->output = ''; - $this->error = ''; - - dol_syslog(__METHOD__, LOG_DEBUG); - - $now = dol_now(); - - $this->db->begin(); - - // ... - - $this->db->commit(); - - return $error; - } - /** * @param int $code number of code label * @return int|string @@ -1121,9 +1078,12 @@ class Skill extends CommonObject global $langs; $result = ''; switch ($code) { - case 0: $result = $langs->trans("TypeKnowHow"); break; //"Savoir Faire" - case 1: $result = $langs->trans("TypeHowToBe"); break; // "Savoir être" - case 9: $result = $langs->trans("TypeKnowledge"); break; //"Savoir" + case 0: $result = $langs->trans("TypeKnowHow"); + break; //"Savoir Faire" + case 1: $result = $langs->trans("TypeHowToBe"); + break; // "Savoir être" + case 9: $result = $langs->trans("TypeKnowledge"); + break; //"Savoir" } return $result; } diff --git a/htdocs/hrm/class/skilldet.class.php b/htdocs/hrm/class/skilldet.class.php index d25f7dd5706..6c02ca26c50 100644 --- a/htdocs/hrm/class/skilldet.class.php +++ b/htdocs/hrm/class/skilldet.class.php @@ -4,6 +4,8 @@ * Copyright (C) 2021 Greg Rastklan * Copyright (C) 2021 Jean-Pascal BOUDET * Copyright (C) 2021 Grégory BLEMAND + * Copyright (C) 2024 Frédéric France + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -27,8 +29,6 @@ // Put here all includes required by your class file require_once DOL_DOCUMENT_ROOT.'/core/class/commonobjectline.class.php'; -//require_once DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php'; -//require_once DOL_DOCUMENT_ROOT . '/product/class/product.class.php'; /** * Class for Skilldet @@ -100,15 +100,15 @@ class Skilldet extends CommonObjectLine // BEGIN MODULEBUILDER PROPERTIES /** - * @var array Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. + * @var array|string,position:int,notnull?:int,visible:int,noteditable?:int,default?:string,index?:int,foreignkey?:string,searchall?:int,isameasure?:int,css?:string,csslist?:string,help?:string,showoncombobox?:int,disabled?:int,arrayofkeyval?:array,comment?:string}> Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. */ - public $fields=array( - 'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>'1', 'position'=>1, 'notnull'=>1, 'visible'=>0, 'noteditable'=>'1', 'index'=>1, 'css'=>'left', 'comment'=>"Id"), - 'fk_skill' => array('type'=>'integer:Skill:/hrm/class/skill.class.php', 'label'=>'fk_skill', 'enabled'=>'1', 'position'=>5, 'notnull'=>1, 'visible'=>0,), - 'rankorder' => array('type'=>'integer', 'label'=>'rank', 'enabled'=>'1', 'position'=>10, 'notnull'=>0, 'visible'=>2,), - 'description' => array('type'=>'text', 'label'=>'Description', 'enabled'=>'1', 'position'=>60, 'notnull'=>0, 'visible'=>1,), - 'fk_user_creat' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserAuthor', 'enabled'=>'1', 'position'=>510, 'notnull'=>1, 'visible'=>-2, 'foreignkey'=>'user.rowid',), - 'fk_user_modif' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserModif', 'enabled'=>'1', 'position'=>511, 'notnull'=>-1, 'visible'=>0,), + public $fields = array( + 'rowid' => array('type' => 'integer', 'label' => 'TechnicalID', 'enabled' => 1, 'position' => 1, 'notnull' => 1, 'visible' => 0, 'noteditable' => 1, 'index' => 1, 'css' => 'left', 'comment' => "Id"), + 'fk_skill' => array('type' => 'integer:Skill:/hrm/class/skill.class.php', 'label' => 'fk_skill', 'enabled' => 1, 'position' => 5, 'notnull' => 1, 'visible' => 0,), + 'rankorder' => array('type' => 'integer', 'label' => 'rank', 'enabled' => 1, 'position' => 10, 'notnull' => 0, 'visible' => 2,), + 'description' => array('type' => 'text', 'label' => 'Description', 'enabled' => 1, 'position' => 60, 'notnull' => 0, 'visible' => 1,), + 'fk_user_creat' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'UserAuthor', 'enabled' => 1, 'position' => 510, 'notnull' => 1, 'visible' => -2, 'foreignkey' => 'user.rowid',), + 'fk_user_modif' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'UserModif', 'enabled' => 1, 'position' => 511, 'notnull' => -1, 'visible' => 0,), ); public $rowid; public $fk_skill; @@ -281,8 +281,7 @@ class Skilldet extends CommonObjectLine $result = $object->createCommon($user); if ($result < 0) { $error++; - $this->error = $object->error; - $this->errors = $object->errors; + $this->setErrorsFromObject($object); } if (!$error) { @@ -346,18 +345,17 @@ class Skilldet extends CommonObjectLine /** * Load list of objects in memory from the database. * - * @param string $sortorder Sort Order - * @param string $sortfield Sort field - * @param int $limit limit - * @param int $offset Offset - * @param array $filter Filter array. Example array('field'=>'valueforlike', 'customurl'=>...) - * @param string $filtermode Filter mode (AND or OR) - * @return array|int int <0 if KO, array of pages if OK + * @param string $sortorder Sort Order + * @param string $sortfield Sort field + * @param int $limit limit + * @param int $offset Offset + * @param string $filter Filter as an Universal Search string. + * Example: '((client:=:1) OR ((client:>=:2) AND (client:<=:3))) AND (client:!=:8) AND (nom:like:'a%')' + * @param string $filtermode No more used + * @return array|int int <0 if KO, array of pages if OK */ - public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND') + public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, $filter = '', $filtermode = 'AND') { - global $conf; - dol_syslog(__METHOD__, LOG_DEBUG); $records = array(); @@ -370,25 +368,14 @@ class Skilldet extends CommonObjectLine } else { $sql .= ' WHERE 1 = 1'; } + // Manage filter - $sqlwhere = array(); - if (count($filter) > 0) { - foreach ($filter as $key => $value) { - if ($key == 't.rowid') { - $sqlwhere[] = $key.'='.$value; - } elseif ($key == 'customsql') { - $sqlwhere[] = $value; - } elseif (in_array($this->fields[$key]['type'], array('date', 'datetime', 'timestamp'))) { - $sqlwhere[] = $key." = '".$this->db->idate($value)."'"; - } elseif (strpos($value, '%') === false) { - $sqlwhere[] = $key." IN (".$this->db->sanitize($this->db->escape($value)).")"; - } else { - $sqlwhere[] = $key." LIKE '%".$this->db->escape($value)."%'"; - } - } - } - if (count($sqlwhere) > 0) { - $sql .= " AND (".implode(" ".$filtermode." ", $sqlwhere).")"; + $errormessage = ''; + $sql .= forgeSQLFromUniversalSearchCriteria($filter, $errormessage); + if ($errormessage) { + $this->errors[] = $errormessage; + dol_syslog(__METHOD__.' '.implode(',', $this->errors), LOG_ERR); + return -1; } if (!empty($sortfield)) { @@ -776,7 +763,7 @@ class Skilldet extends CommonObjectLine global $action, $hookmanager; $hookmanager->initHooks(array('skilldetdao')); - $parameters = array('id'=>$this->id, 'getnomurl' => &$result); + $parameters = array('id' => $this->id, 'getnomurl' => &$result); $reshook = $hookmanager->executeHooks('getNomUrl', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks if ($reshook > 0) { $result = $hookmanager->resPrint; @@ -864,7 +851,7 @@ class Skilldet extends CommonObjectLine * Initialise object with example values * Id must be 0 if object instance is a specimen * - * @return void + * @return int */ public function initAsSpecimen() { @@ -872,7 +859,7 @@ class Skilldet extends CommonObjectLine // $this->property1 = ... // $this->property2 = ... - $this->initAsSpecimenCommon(); + return $this->initAsSpecimenCommon(); } @@ -969,34 +956,4 @@ class Skilldet extends CommonObjectLine return $result; } - - /** - * Action executed by scheduler - * CAN BE A CRON TASK. In such a case, parameters come from the schedule job setup field 'Parameters' - * Use public function doScheduledJob($param1, $param2, ...) to get parameters - * - * @return int 0 if OK, <>0 if KO (this function is used also by cron so only 0 is OK) - */ - public function doScheduledJob() - { - global $conf, $langs; - - //$conf->global->SYSLOG_FILE = 'DOL_DATA_ROOT/dolibarr_mydedicatedlofile.log'; - - $error = 0; - $this->output = ''; - $this->error = ''; - - dol_syslog(__METHOD__, LOG_DEBUG); - - $now = dol_now(); - - $this->db->begin(); - - // ... - - $this->db->commit(); - - return $error; - } } diff --git a/htdocs/hrm/class/skillrank.class.php b/htdocs/hrm/class/skillrank.class.php index cd39b17b30e..3cde6ae6476 100644 --- a/htdocs/hrm/class/skillrank.class.php +++ b/htdocs/hrm/class/skillrank.class.php @@ -4,6 +4,8 @@ * Copyright (C) 2021 Greg Rastklan * Copyright (C) 2021 Jean-Pascal BOUDET * Copyright (C) 2021 Grégory BLEMAND + * Copyright (C) 2024 Frédéric France + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -102,18 +104,18 @@ class SkillRank extends CommonObject // BEGIN MODULEBUILDER PROPERTIES /** - * @var array Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. + * @var array|string,position:int,notnull?:int,visible:int,noteditable?:int,default?:string,index?:int,foreignkey?:string,searchall?:int,isameasure?:int,css?:string,csslist?:string,help?:string,showoncombobox?:int,disabled?:int,arrayofkeyval?:array,comment?:string}> Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. */ - public $fields=array( - 'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>'1', 'position'=>1, 'notnull'=>1, 'visible'=>0, 'noteditable'=>'1', 'index'=>1, 'css'=>'left', 'comment'=>"Id"), - 'fk_skill' => array('type'=>'integer:Skill:hrm/class/skill.class.php:1', 'label'=>'Skill', 'enabled'=>'1', 'position'=>3, 'notnull'=>1, 'visible'=>1, 'index'=>1,), - 'rankorder' => array('type'=>'integer', 'label'=>'Rank', 'enabled'=>'1', 'position'=>4, 'notnull'=>1, 'visible'=>1, 'default' => 0), - 'fk_object' => array('type'=>'integer', 'label'=>'object', 'enabled'=>'1', 'position'=>5, 'notnull'=>1, 'visible'=>0,), - 'date_creation' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>'1', 'position'=>500, 'notnull'=>1, 'visible'=>-2,), - 'tms' => array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>'1', 'position'=>501, 'notnull'=>0, 'visible'=>-2,), - 'fk_user_creat' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserAuthor', 'enabled'=>'1', 'position'=>510, 'notnull'=>1, 'visible'=>-2, 'foreignkey'=>'user.rowid',), - 'fk_user_modif' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserModif', 'enabled'=>'1', 'position'=>511, 'notnull'=>-1, 'visible'=>-2,), - 'objecttype' => array('type'=>'varchar(128)', 'label'=>'objecttype', 'enabled'=>'1', 'position'=>6, 'notnull'=>1, 'visible'=>0,), + public $fields = array( + 'rowid' => array('type' => 'integer', 'label' => 'TechnicalID', 'enabled' => 1, 'position' => 1, 'notnull' => 1, 'visible' => 0, 'noteditable' => 1, 'index' => 1, 'css' => 'left', 'comment' => "Id"), + 'fk_skill' => array('type' => 'integer:Skill:hrm/class/skill.class.php:1', 'label' => 'Skill', 'enabled' => 1, 'position' => 3, 'notnull' => 1, 'visible' => 1, 'index' => 1,), + 'rankorder' => array('type' => 'integer', 'label' => 'Rank', 'enabled' => 1, 'position' => 4, 'notnull' => 1, 'visible' => 1, 'default' => '0'), + 'fk_object' => array('type' => 'integer', 'label' => 'object', 'enabled' => 1, 'position' => 5, 'notnull' => 1, 'visible' => 0,), + 'date_creation' => array('type' => 'datetime', 'label' => 'DateCreation', 'enabled' => 1, 'position' => 500, 'notnull' => 1, 'visible' => -2,), + 'tms' => array('type' => 'timestamp', 'label' => 'DateModification', 'enabled' => 1, 'position' => 501, 'notnull' => 0, 'visible' => -2,), + 'fk_user_creat' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'UserAuthor', 'enabled' => 1, 'position' => 510, 'notnull' => 1, 'visible' => -2, 'foreignkey' => 'user.rowid',), + 'fk_user_modif' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'UserModif', 'enabled' => 1, 'position' => 511, 'notnull' => -1, 'visible' => -2,), + 'objecttype' => array('type' => 'varchar(128)', 'label' => 'objecttype', 'enabled' => 1, 'position' => 6, 'notnull' => 1, 'visible' => 0,), ); public $rowid; public $fk_skill; @@ -217,8 +219,9 @@ class SkillRank extends CommonObject { global $langs; - $sqlfilter = 'fk_object='.((int) $this->fk_object)." AND objecttype='".$this->db->escape($this->objecttype)."' AND fk_skill = ".((int) $this->fk_skill); - $alreadyLinked = $this->fetchAll('ASC', 'rowid', 0, 0, array('customsql' => $sqlfilter)); + $filter = '(fk_object:=:'.((int) $this->fk_object).") AND (objecttype:=:'".$this->db->escape($this->objecttype)."') AND (fk_skill:=:".((int) $this->fk_skill).")"; + + $alreadyLinked = $this->fetchAll('ASC', 'rowid', 0, 0, $filter); if (!empty($alreadyLinked)) { $this->error = $langs->trans('ErrSkillAlreadyAdded'); return -1; @@ -306,8 +309,7 @@ class SkillRank extends CommonObject $result = $object->createCommon($user); if ($result < 0) { $error++; - $this->error = $object->error; - $this->errors = $object->errors; + $this->setErrorsFromObject($object); } if (!$error) { @@ -394,18 +396,17 @@ class SkillRank extends CommonObject /** * Load list of objects in memory from the database. * - * @param string $sortorder Sort Order - * @param string $sortfield Sort field - * @param int $limit limit - * @param int $offset Offset - * @param array $filter Filter array. Example array('field'=>'valueforlike', 'customurl'=>...) - * @param string $filtermode Filter mode (AND or OR) - * @return array|int int <0 if KO, array of pages if OK + * @param string $sortorder Sort Order + * @param string $sortfield Sort field + * @param int $limit limit + * @param int $offset Offset + * @param string $filter Filter as an Universal Search string. + * Example: '((client:=:1) OR ((client:>=:2) AND (client:<=:3))) AND (client:!=:8) AND (nom:like:'a%')' + * @param string $filtermode No more used + * @return array|int int <0 if KO, array of pages if OK */ - public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND') + public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, $filter = '', $filtermode = 'AND') { - global $conf; - dol_syslog(__METHOD__, LOG_DEBUG); $records = array(); @@ -418,25 +419,14 @@ class SkillRank extends CommonObject } else { $sql .= ' WHERE 1 = 1'; } + // Manage filter - $sqlwhere = array(); - if (count($filter) > 0) { - foreach ($filter as $key => $value) { - if ($key == 't.rowid') { - $sqlwhere[] = $key." = ".((int) $value); - } elseif ($key != 'customsql' && in_array($this->fields[$key]['type'], array('date', 'datetime', 'timestamp'))) { - $sqlwhere[] = $key." = '".$this->db->idate($value)."'"; - } elseif ($key == 'customsql') { - $sqlwhere[] = $value; - } elseif (strpos($value, '%') === false) { - $sqlwhere[] = $key." IN (".$this->db->sanitize($this->db->escape($value)).")"; - } else { - $sqlwhere[] = $key." LIKE '%".$this->db->escape($value)."%'"; - } - } - } - if (count($sqlwhere) > 0) { - $sql .= " AND (".implode(" ".$filtermode." ", $sqlwhere).")"; + $errormessage = ''; + $sql .= forgeSQLFromUniversalSearchCriteria($filter, $errormessage); + if ($errormessage) { + $this->errors[] = $errormessage; + dol_syslog(__METHOD__.' '.implode(',', $this->errors), LOG_ERR); + return -1; } if (!empty($sortfield)) { @@ -824,7 +814,7 @@ class SkillRank extends CommonObject global $action, $hookmanager; $hookmanager->initHooks(array('skillrankdao')); - $parameters = array('id'=>$this->id, 'getnomurl' => &$result); + $parameters = array('id' => $this->id, 'getnomurl' => &$result); $reshook = $hookmanager->executeHooks('getNomUrl', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks if ($reshook > 0) { $result = $hookmanager->resPrint; @@ -912,7 +902,7 @@ class SkillRank extends CommonObject * Initialise object with example values * Id must be 0 if object instance is a specimen * - * @return void + * @return int */ public function initAsSpecimen() { @@ -920,7 +910,7 @@ class SkillRank extends CommonObject // $this->property1 = ... // $this->property2 = ... - $this->initAsSpecimenCommon(); + return $this->initAsSpecimenCommon(); } /** @@ -934,7 +924,7 @@ class SkillRank extends CommonObject /* $objectline = new SkillRankLine($this->db); - $result = $objectline->fetchAll('ASC', 'position', 0, 0, array('customsql'=>'fk_skillrank = '.((int) $this->id))); + $result = $objectline->fetchAll('ASC', 'position', 0, 0, '(fk_skillrank:=:'.((int) $this->id).')'); if (is_numeric($result)) { $this->error = $objectline->error; @@ -1042,51 +1032,4 @@ class SkillRank extends CommonObject return $result; } - - /** - * Action executed by scheduler - * CAN BE A CRON TASK. In such a case, parameters come from the schedule job setup field 'Parameters' - * Use public function doScheduledJob($param1, $param2, ...) to get parameters - * - * @return int 0 if OK, <>0 if KO (this function is used also by cron so only 0 is OK) - */ - public function doScheduledJob() - { - global $conf, $langs; - - //$conf->global->SYSLOG_FILE = 'DOL_DATA_ROOT/dolibarr_mydedicatedlofile.log'; - - $error = 0; - $this->output = ''; - $this->error = ''; - - dol_syslog(__METHOD__, LOG_DEBUG); - - $now = dol_now(); - - $this->db->begin(); - - // ... - - $this->db->commit(); - - return $error; - } - - /** - * @param array $val - * @param string $key - * @param string $value - * @param string $moreparam - * @param string $keysuffix - * @param string $keyprefix - * @param string $morecss - * @return string - */ - // public function showOutputField($val, $key, $value, $moreparam = '', $keysuffix = '', $keyprefix = '', $morecss = '') - // { - // if ($key == "rank") { - // return displayRankInfos($this); - // } else return parent::showOutputField($val, $key, $value, $moreparam, $keysuffix, $keyprefix, $morecss); - // } } diff --git a/htdocs/hrm/compare.php b/htdocs/hrm/compare.php index a75965f797e..8286c7f0cf4 100644 --- a/htdocs/hrm/compare.php +++ b/htdocs/hrm/compare.php @@ -4,6 +4,7 @@ * Copyright (C) 2021 Greg Rastklan * Copyright (C) 2021 Jean-Pascal BOUDET * Copyright (C) 2021 Grégory BLEMAND + * Copyright (C) 2024 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -278,6 +279,7 @@ $fk_usergroup1 = GETPOST('fk_usergroup1'); print dol_get_fiche_end(); llxFooter(); +$db->close(); @@ -357,10 +359,10 @@ function rate(&$TMergedSkills, $field) } /** - * return a html ul list of skills + * return a html ul list of skills * - * @param array $TMergedSkills skill list for display - * @return string (ul list in html ) + * @param array $TMergedSkills skill list for display + * @return string (ul list in html ) */ function skillList(&$TMergedSkills) { diff --git a/htdocs/hrm/core/tpl/objectline_title.tpl.php b/htdocs/hrm/core/tpl/objectline_title.tpl.php index e7e5091eb95..f96fd3a72f8 100644 --- a/htdocs/hrm/core/tpl/objectline_title.tpl.php +++ b/htdocs/hrm/core/tpl/objectline_title.tpl.php @@ -40,7 +40,7 @@ // Protection to avoid direct call of template if (empty($object) || !is_object($object)) { print "Error, template page can't be called as URL"; - exit; + exit(1); } print "\n"; diff --git a/htdocs/hrm/core/tpl/objectline_view.tpl.php b/htdocs/hrm/core/tpl/objectline_view.tpl.php index 2c9939e234d..a325e303a10 100644 --- a/htdocs/hrm/core/tpl/objectline_view.tpl.php +++ b/htdocs/hrm/core/tpl/objectline_view.tpl.php @@ -45,7 +45,7 @@ // Protection to avoid direct call of template if (empty($object) || !is_object($object)) { print "Error, template page can't be called as URL"; - exit; + exit(1); } global $mysoc; diff --git a/htdocs/hrm/core/tpl/skilldet.fiche.tpl.php b/htdocs/hrm/core/tpl/skilldet.fiche.tpl.php index 56a3bcb58b1..124d17f50fe 100644 --- a/htdocs/hrm/core/tpl/skilldet.fiche.tpl.php +++ b/htdocs/hrm/core/tpl/skilldet.fiche.tpl.php @@ -3,7 +3,7 @@ // Protection to avoid direct call of template if (empty($object) || !is_object($object)) { print "Error, template page can't be called as URL"; - exit; + exit(1); } if (!empty($object->table_element_line)) { diff --git a/htdocs/hrm/establishment/card.php b/htdocs/hrm/establishment/card.php index 904627e7cfb..c2168814a8d 100644 --- a/htdocs/hrm/establishment/card.php +++ b/htdocs/hrm/establishment/card.php @@ -35,7 +35,7 @@ $error = 0; $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'alpha'); $confirm = GETPOST('confirm', 'alpha'); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); // List of status static $tmpstatus2label = array( @@ -75,7 +75,7 @@ if (empty($permissiontoread)) { */ if ($action == 'confirm_delete' && $confirm == "yes") { - $result = $object->delete($id); + $result = $object->delete($user); if ($result >= 0) { header("Location: ../admin/admin_establishment.php"); exit; @@ -100,7 +100,7 @@ if ($action == 'confirm_delete' && $confirm == "yes") { $object->status = GETPOSTINT('status'); $object->fk_user_author = $user->id; $object->datec = dol_now(); - $object->entity = GETPOST('entity', 'int') > 0 ? GETPOST('entity', 'int') : $conf->entity; + $object->entity = GETPOSTINT('entity') > 0 ? GETPOSTINT('entity') : $conf->entity; $id = $object->create($user); @@ -136,19 +136,19 @@ if ($action == 'confirm_delete' && $confirm == "yes") { $object->country_id = GETPOSTINT('country_id'); $object->fk_user_mod = $user->id; $object->status = GETPOSTINT('status'); - $object->entity = GETPOST('entity', 'int') > 0 ? GETPOST('entity', 'int') : $conf->entity; + $object->entity = GETPOSTINT('entity') > 0 ? GETPOSTINT('entity') : $conf->entity; $result = $object->update($user); if ($result > 0) { - header("Location: ".$_SERVER["PHP_SELF"]."?id=".GETPOST('id', 'int')); + header("Location: ".$_SERVER["PHP_SELF"]."?id=".GETPOSTINT('id')); exit; } else { setEventMessages($object->error, $object->errors, 'errors'); } } } else { - header("Location: ".$_SERVER["PHP_SELF"]."?id=".GETPOST('id', 'int')); + header("Location: ".$_SERVER["PHP_SELF"]."?id=".GETPOSTINT('id')); exit; } } @@ -232,7 +232,7 @@ if ($action == 'create') { print ''; print ''; print ''; diff --git a/htdocs/hrm/evaluation_contact.php b/htdocs/hrm/evaluation_contact.php index d99f76d4588..c3a53411b34 100644 --- a/htdocs/hrm/evaluation_contact.php +++ b/htdocs/hrm/evaluation_contact.php @@ -39,10 +39,10 @@ require_once DOL_DOCUMENT_ROOT.'/hrm/class/job.class.php'; $langs->loadLangs(array('hrm', 'companies', 'other', 'mails')); // Get Parameters -$id = (GETPOST('id') ? GETPOST('id', 'int') : GETPOST('facid', 'int')); // For backward compatibility +$id = (GETPOST('id') ? GETPOSTINT('id') : GETPOSTINT('facid')); // For backward compatibility $ref = GETPOST('ref', 'alpha'); -$lineid = GETPOST('lineid', 'int'); -$socid = GETPOST('socid', 'int'); +$lineid = GETPOSTINT('lineid'); +$socid = GETPOSTINT('socid'); $action = GETPOST('action', 'aZ09'); // Initialize technical objects @@ -76,7 +76,7 @@ $permission = $user->hasRight('hrm', 'evaluation', 'write'); // Add a new contact if ($action == 'addcontact' && $permission) { - $contactid = (GETPOST('userid') ? GETPOST('userid', 'int') : GETPOST('contactid', 'int')); + $contactid = (GETPOST('userid') ? GETPOSTINT('userid') : GETPOSTINT('contactid')); $typeid = (GETPOST('typecontact') ? GETPOST('typecontact') : GETPOST('type')); $result = $object->add_contact($contactid, $typeid, GETPOST("source", 'aZ09')); @@ -93,7 +93,7 @@ if ($action == 'addcontact' && $permission) { } } elseif ($action == 'swapstatut' && $permission) { // Toggle the status of a contact - $result = $object->swapContactStatus(GETPOST('ligne', 'int')); + $result = $object->swapContactStatus(GETPOSTINT('ligne')); } elseif ($action == 'deletecontact' && $permission) { // Deletes a contact $result = $object->delete_contact($lineid); diff --git a/htdocs/hrm/evaluation_document.php b/htdocs/hrm/evaluation_document.php index 4ec3fc93b2e..a83905abff9 100644 --- a/htdocs/hrm/evaluation_document.php +++ b/htdocs/hrm/evaluation_document.php @@ -43,14 +43,14 @@ $langs->loadLangs(array('hrm', 'companies', 'other', 'mails')); // Get parameters $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm'); -$id = (GETPOST('socid', 'int') ? GETPOST('socid', 'int') : GETPOST('id', 'int')); +$id = (GETPOSTINT('socid') ? GETPOSTINT('socid') : GETPOSTINT('id')); $ref = GETPOST('ref', 'alpha'); -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 diff --git a/htdocs/hrm/evaluation_list.php b/htdocs/hrm/evaluation_list.php index 790326a2089..20b8ee4359c 100644 --- a/htdocs/hrm/evaluation_list.php +++ b/htdocs/hrm/evaluation_list.php @@ -45,7 +45,7 @@ $langs->loadLangs(array('hrm', 'other')); // Get Parameters $action = GETPOST('action', 'aZ09') ? GETPOST('action', 'aZ09') : 'view'; // The action 'add', 'create', 'edit', 'update', 'view', ... $massaction = GETPOST('massaction', 'alpha'); // The bulk action (combo box choice into lists) -$show_files = GETPOST('show_files', 'int'); // Show files area generated by bulk actions ? +$show_files = GETPOSTINT('show_files'); // Show files area generated by bulk actions ? $confirm = GETPOST('confirm', 'alpha'); // Result of a confirmation $cancel = GETPOST('cancel', 'alpha'); // We click on a Cancel button $toselect = GETPOST('toselect', 'array'); // Array of ids of elements selected into a list @@ -54,14 +54,14 @@ $backtopage = GETPOST('backtopage', 'alpha'); // Go back to a dedicated page $optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print') $mode = GETPOST('mode', 'alpha'); // for mode view result -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // If $page is not defined, or '' or -1 or if we click on clear filters $page = 0; @@ -99,8 +99,8 @@ foreach ($object->fields as $key => $val) { $search[$key] = GETPOST('search_'.$key, 'alpha'); } if (preg_match('/^(date|timestamp|datetime)/', $val['type'])) { - $search[$key.'_dtstart'] = dol_mktime(0, 0, 0, GETPOST('search_'.$key.'_dtstartmonth', 'int'), GETPOST('search_'.$key.'_dtstartday', 'int'), GETPOST('search_'.$key.'_dtstartyear', 'int')); - $search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOST('search_'.$key.'_dtendmonth', 'int'), GETPOST('search_'.$key.'_dtendday', 'int'), GETPOST('search_'.$key.'_dtendyear', 'int')); + $search[$key.'_dtstart'] = dol_mktime(0, 0, 0, GETPOSTINT('search_'.$key.'_dtstartmonth'), GETPOSTINT('search_'.$key.'_dtstartday'), GETPOSTINT('search_'.$key.'_dtstartyear')); + $search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOSTINT('search_'.$key.'_dtendmonth'), GETPOSTINT('search_'.$key.'_dtendday'), GETPOSTINT('search_'.$key.'_dtendyear')); } } @@ -121,7 +121,7 @@ foreach ($object->fields as $key => $val) { $arrayfields['t.'.$key] = array( 'label'=>$val['label'], 'checked'=>(($visible < 0) ? 0 : 1), - 'enabled'=>(abs($visible) != 3 && dol_eval($val['enabled'], 1)), + 'enabled'=>(abs($visible) != 3 && (int) dol_eval($val['enabled'], 1)), 'position'=>$val['position'], 'help'=> isset($val['help']) ? $val['help'] : '' ); @@ -402,9 +402,9 @@ foreach ($search as $key => $val) { } } } elseif (preg_match('/(_dtstart|_dtend)$/', $key) && !empty($val)) { - $param .= '&search_'.$key.'month='.((int) GETPOST('search_'.$key.'month', 'int')); - $param .= '&search_'.$key.'day='.((int) GETPOST('search_'.$key.'day', 'int')); - $param .= '&search_'.$key.'year='.((int) GETPOST('search_'.$key.'year', 'int')); + $param .= '&search_'.$key.'month='.(GETPOSTINT('search_'.$key.'month')); + $param .= '&search_'.$key.'day='.(GETPOSTINT('search_'.$key.'day')); + $param .= '&search_'.$key.'year='.(GETPOSTINT('search_'.$key.'year')); } elseif ($search[$key] != '') { $param .= '&search_'.$key.'='.urlencode($search[$key]); } @@ -429,7 +429,7 @@ $arrayofmassactions = array( if (!empty($permissiontodelete)) { $arrayofmassactions['predelete'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete"); } -if (GETPOST('nomassaction', 'int') || in_array($massaction, array('presend', 'predelete'))) { +if (GETPOSTINT('nomassaction') || in_array($massaction, array('presend', 'predelete'))) { $arrayofmassactions = array(); } $massactionbutton = $form->selectMassAction('', $arrayofmassactions); @@ -495,7 +495,7 @@ if (!empty($moreforfilter)) { } $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; -$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')) : ''); // This also change content of $arrayfields +$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) : ''); // This also change content of $arrayfields $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); print '
'; // You can use div-table-responsive-no-min if you don't need reserved height for your table diff --git a/htdocs/hrm/evaluation_note.php b/htdocs/hrm/evaluation_note.php index 37a8a479af7..1e078be00d9 100644 --- a/htdocs/hrm/evaluation_note.php +++ b/htdocs/hrm/evaluation_note.php @@ -37,7 +37,7 @@ require_once DOL_DOCUMENT_ROOT . '/hrm/lib/hrm_evaluation.lib.php'; $langs->loadLangs(array('hrm', 'companies')); // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); diff --git a/htdocs/hrm/index.php b/htdocs/hrm/index.php index 5b465992fea..0bf7d5c5ff6 100644 --- a/htdocs/hrm/index.php +++ b/htdocs/hrm/index.php @@ -61,7 +61,7 @@ $hookmanager->initHooks('hrmindex'); $langs->loadLangs(array('users', 'holiday', 'trips', 'boxes')); // Get Parameters -$socid = GETPOST("socid", "int"); +$socid = GETPOSTINT("socid"); // Protection if external user if ($user->socid > 0) { diff --git a/htdocs/hrm/job_agenda.php b/htdocs/hrm/job_agenda.php index f13d0e88d8b..6fffa6934e4 100644 --- a/htdocs/hrm/job_agenda.php +++ b/htdocs/hrm/job_agenda.php @@ -39,7 +39,7 @@ require_once DOL_DOCUMENT_ROOT . '/hrm/lib/hrm_job.lib.php'; $langs->loadLangs(array('hrm', 'other')); // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'aZ09'); @@ -56,10 +56,10 @@ if (GETPOST('actioncode', 'array')) { $search_rowid = GETPOST('search_rowid'); $search_agenda_label = GETPOST('search_agenda_label'); -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -108,7 +108,7 @@ if (!$permissiontoread) { * Actions */ -$parameters = array('id'=>$id); +$parameters = array('id' => $id); $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); @@ -155,7 +155,7 @@ if ($object->id > 0) { $linkback = ''.$langs->trans("BackToList").''; $morehtmlref = '
'; - $morehtmlref.= $object->label; + $morehtmlref .= $object->label; $morehtmlref .= '
'; @@ -178,14 +178,14 @@ if ($object->id > 0) { $objthirdparty = $object; $objcon = new stdClass(); - $out = '&origin='.urlencode($object->element.'@'.$object->module).'&originid='.urlencode($object->id); + $out = '&origin='.urlencode((string) ($object->element.'@'.$object->module)).'&originid='.urlencode((string) ($object->id)); $urlbacktopage = $_SERVER['PHP_SELF'].'?id='.$object->id; $out .= '&backtopage='.urlencode($urlbacktopage); $permok = $user->hasRight('agenda', 'myactions', 'create'); if ((!empty($objthirdparty->id) || !empty($objcon->id)) && $permok) { //$out.='loadLangs(array('hrm', 'other', 'products')); // why products? // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm', 'alpha'); @@ -48,7 +48,7 @@ $cancel = GETPOST('cancel', 'aZ09'); $contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'jobcard'; // To manage different context of search $backtopage = GETPOST('backtopage', 'alpha'); $backtopageforcancel = GETPOST('backtopageforcancel', 'alpha'); -$lineid = GETPOST('lineid', 'int'); +$lineid = GETPOSTINT('lineid'); // Initialize technical objects $object = new Job($db); @@ -142,10 +142,10 @@ if (empty($reshook)) { include DOL_DOCUMENT_ROOT . '/core/actions_builddoc.inc.php'; if ($action == 'set_thirdparty' && $permissiontoadd) { - $object->setValueFrom('fk_soc', GETPOST('fk_soc', 'int'), '', '', 'date', '', $user, $triggermodname); + $object->setValueFrom('fk_soc', GETPOSTINT('fk_soc'), '', '', 'date', '', $user, $triggermodname); } if ($action == 'classin' && $permissiontoadd) { - $object->setProject(GETPOST('projectid', 'int')); + $object->setProject(GETPOSTINT('projectid')); } // Actions to send emails @@ -414,7 +414,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea // Show object lines $result = $object->getLinesArray(); - print ' + print ' @@ -432,7 +432,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } if (!empty($object->lines)) { - $object->printObjectLines($action, $mysoc, null, GETPOST('lineid', 'int'), 1); + $object->printObjectLines($action, $mysoc, null, GETPOSTINT('lineid'), 1); } // Form to add new line diff --git a/htdocs/hrm/job_document.php b/htdocs/hrm/job_document.php index 3f9ff9a74dc..2155f033088 100644 --- a/htdocs/hrm/job_document.php +++ b/htdocs/hrm/job_document.php @@ -41,14 +41,14 @@ $langs->loadLangs(array('hrm', 'companies', 'other', 'mails')); // Get parameters $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm'); -$id = (GETPOST('socid', 'int') ? GETPOST('socid', 'int') : GETPOST('id', 'int')); +$id = (GETPOSTINT('socid') ? GETPOSTINT('socid') : GETPOSTINT('id')); $ref = GETPOST('ref', 'alpha'); -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 diff --git a/htdocs/hrm/job_list.php b/htdocs/hrm/job_list.php index 4bdd686561f..9191162e979 100644 --- a/htdocs/hrm/job_list.php +++ b/htdocs/hrm/job_list.php @@ -45,7 +45,7 @@ $langs->loadLangs(array('hrm', 'other')); // Get Parameters $action = GETPOST('action', 'aZ09') ? GETPOST('action', 'aZ09') : 'view'; // The action 'add', 'create', 'edit', 'update', 'view', ... $massaction = GETPOST('massaction', 'alpha'); // The bulk action (combo box choice into lists) -$show_files = GETPOST('show_files', 'int'); // Show files area generated by bulk actions ? +$show_files = GETPOSTINT('show_files'); // Show files area generated by bulk actions ? $confirm = GETPOST('confirm', 'alpha'); // Result of a confirmation $cancel = GETPOST('cancel', 'alpha'); // We click on a Cancel button $toselect = GETPOST('toselect', 'array'); // Array of ids of elements selected into a list @@ -54,13 +54,13 @@ $backtopage = GETPOST('backtopage', 'alpha'); // Go back to a dedicated page $optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print') $mode = GETPOST('mode', 'alpha'); // for view result with other mode -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // If $page is not defined, or '' or -1 or if we click on clear filters $page = 0; @@ -98,8 +98,8 @@ foreach ($object->fields as $key => $val) { $search[$key] = GETPOST('search_'.$key, 'alpha'); } if (preg_match('/^(date|timestamp|datetime)/', $val['type'])) { - $search[$key.'_dtstart'] = dol_mktime(0, 0, 0, GETPOST('search_'.$key.'_dtstartmonth', 'int'), GETPOST('search_'.$key.'_dtstartday', 'int'), GETPOST('search_'.$key.'_dtstartyear', 'int')); - $search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOST('search_'.$key.'_dtendmonth', 'int'), GETPOST('search_'.$key.'_dtendday', 'int'), GETPOST('search_'.$key.'_dtendyear', 'int')); + $search[$key.'_dtstart'] = dol_mktime(0, 0, 0, GETPOSTINT('search_'.$key.'_dtstartmonth'), GETPOSTINT('search_'.$key.'_dtstartday'), GETPOSTINT('search_'.$key.'_dtstartyear')); + $search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOSTINT('search_'.$key.'_dtendmonth'), GETPOSTINT('search_'.$key.'_dtendday'), GETPOSTINT('search_'.$key.'_dtendyear')); } } @@ -120,7 +120,7 @@ foreach ($object->fields as $key => $val) { $arrayfields['t.'.$key] = array( 'label'=>$val['label'], 'checked'=>(($visible < 0) ? 0 : 1), - 'enabled'=>(abs($visible) != 3 && dol_eval($val['enabled'], 1)), + 'enabled'=>(abs($visible) != 3 && (int) dol_eval($val['enabled'], 1)), 'position'=>$val['position'], 'help'=> isset($val['help']) ? $val['help'] : '' ); @@ -379,9 +379,9 @@ foreach ($search as $key => $val) { } } } elseif (preg_match('/(_dtstart|_dtend)$/', $key) && !empty($val)) { - $param .= '&search_'.$key.'month='.((int) GETPOST('search_'.$key.'month', 'int')); - $param .= '&search_'.$key.'day='.((int) GETPOST('search_'.$key.'day', 'int')); - $param .= '&search_'.$key.'year='.((int) GETPOST('search_'.$key.'year', 'int')); + $param .= '&search_'.$key.'month='.(GETPOSTINT('search_'.$key.'month')); + $param .= '&search_'.$key.'day='.(GETPOSTINT('search_'.$key.'day')); + $param .= '&search_'.$key.'year='.(GETPOSTINT('search_'.$key.'year')); } elseif ($search[$key] != '') { $param .= '&search_'.$key.'='.urlencode($search[$key]); } @@ -406,7 +406,7 @@ $arrayofmassactions = array( if (!empty($permissiontodelete)) { $arrayofmassactions['predelete'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete"); } -if (GETPOST('nomassaction', 'int') || in_array($massaction, array('presend', 'predelete'))) { +if (GETPOSTINT('nomassaction') || in_array($massaction, array('presend', 'predelete'))) { $arrayofmassactions = array(); } $massactionbutton = $form->selectMassAction('', $arrayofmassactions); @@ -470,7 +470,7 @@ if (!empty($moreforfilter)) { } $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; -$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')); // This also change content of $arrayfields +$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')); // This also change content of $arrayfields $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); print '
'; // You can use div-table-responsive-no-min if you don't need reserved height for your table diff --git a/htdocs/hrm/job_note.php b/htdocs/hrm/job_note.php index 61d82ec2781..ff377cdbbe9 100644 --- a/htdocs/hrm/job_note.php +++ b/htdocs/hrm/job_note.php @@ -36,7 +36,7 @@ require_once DOL_DOCUMENT_ROOT . '/hrm/lib/hrm_job.lib.php'; $langs->loadLangs(array('hrm', 'companies')); // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); diff --git a/htdocs/hrm/lib/hrm_evaluation.lib.php b/htdocs/hrm/lib/hrm_evaluation.lib.php index d4b99471087..a84aa3b0a3b 100644 --- a/htdocs/hrm/lib/hrm_evaluation.lib.php +++ b/htdocs/hrm/lib/hrm_evaluation.lib.php @@ -3,6 +3,7 @@ * Copyright (C) 2021 Greg Rastklan * Copyright (C) 2021 Jean-Pascal BOUDET * Copyright (C) 2021 Grégory BLEMAND + * Copyright (C) 2024 MDW * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -28,7 +29,7 @@ * Prepare array of tabs for Evaluation * * @param Evaluation $object Evaluation - * @return array Array of tabs + * @return array> Array of tabs */ function evaluationPrepareHead($object) { @@ -129,7 +130,7 @@ function GetLegendSkills() } /** - * @param $obj object object need to handle + * @param object $obj Object needed to be represented * @return string */ function getRankOrderResults($obj) @@ -163,8 +164,9 @@ function getRankOrderResults($obj) /** * Grouped rows with same ref in array - * @param array $objects all rows getted by sql - * @return array |int + * + * @param object[] $objects all rows retrieve from sql query + * @return array|int Object by groiup, -1 if error (empty or bad argument) */ function getGroupedEval($objects) { diff --git a/htdocs/hrm/lib/hrm_skillrank.lib.php b/htdocs/hrm/lib/hrm_skillrank.lib.php index 03415c55259..1d0083ea37f 100644 --- a/htdocs/hrm/lib/hrm_skillrank.lib.php +++ b/htdocs/hrm/lib/hrm_skillrank.lib.php @@ -113,7 +113,7 @@ function displayRankInfos($selected_rank, $fk_skill, $inputname = 'TNote', $mode // On charge les différentes notes possibles pour la compétence $fk_skill $skilldet = new Skilldet($db); - $Lines = $skilldet->fetchAll('ASC', 'rankorder', 0, 0, array('customsql'=>'fk_skill = '.$fk_skill)); + $Lines = $skilldet->fetchAll('ASC', 'rankorder', 0, 0, '(fk_skill:=:'.((int) $fk_skill).')'); if (!is_array($Lines) && $Lines<0) { setEventMessages($skilldet->error, $skilldet->errors, 'errors'); diff --git a/htdocs/hrm/position.php b/htdocs/hrm/position.php index da268f7a6b7..6c227add829 100644 --- a/htdocs/hrm/position.php +++ b/htdocs/hrm/position.php @@ -43,7 +43,7 @@ $langs->loadLangs(array("hrm", "other", 'products')); $action = GETPOST('action', 'aZ09') ? GETPOST('action', 'aZ09') : 'view'; // The action 'add', 'create', 'edit', 'update', 'view', ... $massaction = GETPOST('massaction', 'alpha'); // The bulk action (combo box choice into lists) -$show_files = GETPOST('show_files', 'int'); // Show files area generated by bulk actions ? +$show_files = GETPOSTINT('show_files'); // Show files area generated by bulk actions ? $confirm = GETPOST('confirm', 'alpha'); // Result of a confirmation $cancel = GETPOST('cancel', 'alpha'); // We click on a Cancel button $toselect = GETPOST('toselect', 'array'); // Array of ids of elements selected into a list @@ -52,19 +52,19 @@ $optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always $backtopage = GETPOST('backtopage', 'alpha'); $backtopageforcancel = GETPOST('backtopageforcancel', 'alpha'); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); -$fk_job = (GETPOSTISSET('fk_job') ? GETPOST('fk_job', 'int') : $id); -$fk_user = GETPOST('fk_user', 'int'); +$fk_job = (GETPOSTISSET('fk_job') ? GETPOSTINT('fk_job') : $id); +$fk_user = GETPOSTINT('fk_user'); //$start_date = date('Y-m-d', GETPOST('date_startyear', 'int').'-'.GETPOST('date_startmonth', 'int').'-'.GETPOST('date_startday', 'int')); -$start_date = dol_mktime(0, 0, 0, GETPOST('date_startmonth', 'int'), GETPOST('date_startday', 'int'), GETPOST('date_startyear', 'int')); +$start_date = dol_mktime(0, 0, 0, GETPOSTINT('date_startmonth'), GETPOSTINT('date_startday'), GETPOSTINT('date_startyear')); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // If $page is not defined, or '' or -1 or if we click on clear filters $page = 0; @@ -105,8 +105,8 @@ foreach ($objectposition->fields as $key => $val) { $search[$key] = GETPOST('search_' . $key, 'alpha'); } if (preg_match('/^(date|timestamp|datetime)/', $val['type'])) { - $search[$key . '_dtstart'] = dol_mktime(0, 0, 0, GETPOST('search_' . $key . '_dtstartmonth', 'int'), GETPOST('search_' . $key . '_dtstartday', 'int'), GETPOST('search_' . $key . '_dtstartyear', 'int')); - $search[$key . '_dtend'] = dol_mktime(23, 59, 59, GETPOST('search_' . $key . '_dtendmonth', 'int'), GETPOST('search_' . $key . '_dtendday', 'int'), GETPOST('search_' . $key . '_dtendyear', 'int')); + $search[$key . '_dtstart'] = dol_mktime(0, 0, 0, GETPOSTINT('search_' . $key . '_dtstartmonth'), GETPOSTINT('search_' . $key . '_dtstartday'), GETPOSTINT('search_' . $key . '_dtstartyear')); + $search[$key . '_dtend'] = dol_mktime(23, 59, 59, GETPOSTINT('search_' . $key . '_dtendmonth'), GETPOSTINT('search_' . $key . '_dtendday'), GETPOSTINT('search_' . $key . '_dtendyear')); } } @@ -127,7 +127,7 @@ foreach ($objectposition->fields as $key => $val) { $arrayfields['t.' . $key] = array( 'label' => $val['label'], 'checked' => (($visible < 0) ? 0 : 1), - 'enabled' => ($visible != 3 && dol_eval($val['enabled'], 1, 1, '1')), + 'enabled' => (abs($visible) != 3 && (int) dol_eval($val['enabled'], 1, 1, '1')), 'position' => $val['position'], 'help' => isset($val['help']) ? $val['help'] : '' ); @@ -482,7 +482,7 @@ if ($job->id > 0 && (empty($action) || ($action != 'edit' && $action != 'create' if ($permissiontodelete) { $arrayofmassactions['predelete'] = img_picto('', 'delete', 'class="pictofixedwidth"') . $langs->trans("Delete"); } - if (GETPOST('nomassaction', 'int') || in_array($massaction, array('presend', 'predelete'))) { + if (GETPOSTINT('nomassaction') || in_array($massaction, array('presend', 'predelete'))) { $arrayofmassactions = array(); } $massactionbutton = $form->selectMassAction('', $arrayofmassactions); diff --git a/htdocs/hrm/position_agenda.php b/htdocs/hrm/position_agenda.php index 232acae98c3..49f269d8efa 100644 --- a/htdocs/hrm/position_agenda.php +++ b/htdocs/hrm/position_agenda.php @@ -41,7 +41,7 @@ require_once DOL_DOCUMENT_ROOT . '/hrm/class/job.class.php'; $langs->loadLangs(array('hrm', 'other')); // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'aZ09'); @@ -58,10 +58,10 @@ if (GETPOST('actioncode', 'array')) { $search_rowid = GETPOST('search_rowid'); $search_agenda_label = GETPOST('search_agenda_label'); -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -111,7 +111,7 @@ if (!$permissiontoread) { * Actions */ -$parameters = array('id'=>$id); +$parameters = array('id' => $id); $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); @@ -186,14 +186,14 @@ if ($object->id > 0) { $objthirdparty = $object; $objcon = new stdClass(); - $out = '&origin='.urlencode($object->element.'@'.$object->module).'&originid='.urlencode($object->id); + $out = '&origin='.urlencode((string) ($object->element.'@'.$object->module)).'&originid='.urlencode((string) ($object->id)); $urlbacktopage = $_SERVER['PHP_SELF'].'?id='.$object->id; $out .= '&backtopage='.urlencode($urlbacktopage); $permok = $user->hasRight('agenda', 'myactions', 'create'); if ((!empty($objthirdparty->id) || !empty($objcon->id)) && $permok) { //$out.='id > 0) { $filters['search_agenda_label'] = $search_agenda_label; $filters['search_rowid'] = $search_rowid; - $object->fields['label']=array(); // Useful to get only agenda events linked to position (this object doesn't need label of ref field, but show_actions_done() needs it to work correctly) + $object->fields['label'] = array(); // Useful to get only agenda events linked to position (this object doesn't need label of ref field, but show_actions_done() needs it to work correctly) // TODO Replace this with same code than into list.php show_actions_done($conf, $langs, $db, $object, null, 0, $actioncode, '', $filters, $sortfield, $sortorder, $object->module); diff --git a/htdocs/hrm/position_card.php b/htdocs/hrm/position_card.php index dc83d41e0d5..ad28f36351a 100644 --- a/htdocs/hrm/position_card.php +++ b/htdocs/hrm/position_card.php @@ -41,7 +41,7 @@ require_once DOL_DOCUMENT_ROOT . '/hrm/lib/hrm_position.lib.php'; $action = GETPOST('action', 'aZ09') ? GETPOST('action', 'aZ09') : 'view'; // The action 'add', 'create', 'edit', 'update', 'view', ... $backtopage = GETPOST('backtopage', 'alpha'); $backtopageforcancel = GETPOST('backtopageforcancel', 'alpha'); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); // Initialize technical objects $form = new Form($db); @@ -75,8 +75,8 @@ $langs->loadLangs(array("hrm", "other")); // Get parameters -$id = GETPOST('id', 'int'); -$fk_job = GETPOST('fk_job', 'int'); +$id = GETPOSTINT('id'); +$fk_job = GETPOSTINT('fk_job'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); @@ -164,10 +164,10 @@ if (empty($reshook)) { include DOL_DOCUMENT_ROOT . '/core/actions_builddoc.inc.php'; if ($action == 'set_thirdparty' && $permissiontoadd) { - $object->setValueFrom('fk_soc', GETPOST('fk_soc', 'int'), '', '', 'date', '', $user, $triggermodname); + $object->setValueFrom('fk_soc', GETPOSTINT('fk_soc'), '', '', 'date', '', $user, $triggermodname); } if ($action == 'classin' && $permissiontoadd) { - $object->setProject(GETPOST('projectid', 'int')); + $object->setProject(GETPOSTINT('projectid')); } // Actions to send emails diff --git a/htdocs/hrm/position_document.php b/htdocs/hrm/position_document.php index d32e56ee93b..539a8405f4a 100644 --- a/htdocs/hrm/position_document.php +++ b/htdocs/hrm/position_document.php @@ -42,14 +42,14 @@ $langs->loadLangs(array("hrm", "companies", "other", "mails")); // Get parameters $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm'); -$id = (GETPOST('socid', 'int') ? GETPOST('socid', 'int') : GETPOST('id', 'int')); +$id = (GETPOSTINT('socid') ? GETPOSTINT('socid') : GETPOSTINT('id')); $ref = GETPOST('ref', 'alpha'); // Get parameters for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 diff --git a/htdocs/hrm/position_list.php b/htdocs/hrm/position_list.php index 00d2b65feef..4b9666e4c79 100644 --- a/htdocs/hrm/position_list.php +++ b/htdocs/hrm/position_list.php @@ -44,7 +44,7 @@ $langs->loadLangs(array('hrm', 'other')); // Get Parameters $action = GETPOST('action', 'aZ09') ? GETPOST('action', 'aZ09') : 'view'; // The action 'add', 'create', 'edit', 'update', 'view', ... $massaction = GETPOST('massaction', 'alpha'); // The bulk action (combo box choice into lists) -$show_files = GETPOST('show_files', 'int'); // Show files area generated by bulk actions ? +$show_files = GETPOSTINT('show_files'); // Show files area generated by bulk actions ? $confirm = GETPOST('confirm', 'alpha'); // Result of a confirmation $cancel = GETPOST('cancel', 'alpha'); // We click on a Cancel button $toselect = GETPOST('toselect', 'array'); // Array of ids of elements selected into a list @@ -53,14 +53,14 @@ $backtopage = GETPOST('backtopage', 'alpha'); // Go back to a dedicated page $optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print') $mode = GETPOST('mode', 'aZ'); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // If $page is not defined, or '' or -1 or if we click on clear filters $page = 0; @@ -99,8 +99,8 @@ foreach ($object->fields as $key => $val) { $search[$key] = GETPOST('search_'.$key, 'alpha'); } if (preg_match('/^(date|timestamp|datetime)/', $val['type'])) { - $search[$key.'_dtstart'] = dol_mktime(0, 0, 0, GETPOST('search_'.$key.'_dtstartmonth', 'int'), GETPOST('search_'.$key.'_dtstartday', 'int'), GETPOST('search_'.$key.'_dtstartyear', 'int')); - $search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOST('search_'.$key.'_dtendmonth', 'int'), GETPOST('search_'.$key.'_dtendday', 'int'), GETPOST('search_'.$key.'_dtendyear', 'int')); + $search[$key.'_dtstart'] = dol_mktime(0, 0, 0, GETPOSTINT('search_'.$key.'_dtstartmonth'), GETPOSTINT('search_'.$key.'_dtstartday'), GETPOSTINT('search_'.$key.'_dtstartyear')); + $search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOSTINT('search_'.$key.'_dtendmonth'), GETPOSTINT('search_'.$key.'_dtendday'), GETPOSTINT('search_'.$key.'_dtendyear')); } } @@ -121,7 +121,7 @@ foreach ($object->fields as $key => $val) { $arrayfields['t.'.$key] = array( 'label'=>$val['label'], 'checked'=>(($visible < 0) ? 0 : 1), - 'enabled'=>(abs($visible) != 3 && dol_eval($val['enabled'], 1)), + 'enabled'=>(abs($visible) != 3 && (int) dol_eval($val['enabled'], 1)), 'position'=>$val['position'], 'help'=> isset($val['help']) ? $val['help'] : '' ); @@ -391,9 +391,9 @@ foreach ($search as $key => $val) { } } } elseif (preg_match('/(_dtstart|_dtend)$/', $key) && !empty($val)) { - $param .= '&search_'.$key.'month='.((int) GETPOST('search_'.$key.'month', 'int')); - $param .= '&search_'.$key.'day='.((int) GETPOST('search_'.$key.'day', 'int')); - $param .= '&search_'.$key.'year='.((int) GETPOST('search_'.$key.'year', 'int')); + $param .= '&search_'.$key.'month='.(GETPOSTINT('search_'.$key.'month')); + $param .= '&search_'.$key.'day='.(GETPOSTINT('search_'.$key.'day')); + $param .= '&search_'.$key.'year='.(GETPOSTINT('search_'.$key.'year')); } elseif ($search[$key] != '') { $param .= '&search_'.$key.'='.urlencode($search[$key]); } @@ -418,7 +418,7 @@ $arrayofmassactions = array( if (!empty($permissiontodelete)) { $arrayofmassactions['predelete'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete"); } -if (GETPOST('nomassaction', 'int') || in_array($massaction, array('presend', 'predelete'))) { +if (GETPOSTINT('nomassaction') || in_array($massaction, array('presend', 'predelete'))) { $arrayofmassactions = array(); } $massactionbutton = $form->selectMassAction('', $arrayofmassactions); @@ -481,7 +481,7 @@ if (!empty($moreforfilter)) { } $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; -$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')); // This also change content of $arrayfields +$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')); // This also change content of $arrayfields $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); print '
'; // You can use div-table-responsive-no-min if you don't need reserved height for your table diff --git a/htdocs/hrm/position_note.php b/htdocs/hrm/position_note.php index d7a9efa6cba..d3e8121b893 100644 --- a/htdocs/hrm/position_note.php +++ b/htdocs/hrm/position_note.php @@ -36,7 +36,7 @@ require_once DOL_DOCUMENT_ROOT . '/hrm/lib/hrm_position.lib.php'; $langs->loadLangs(array('hrm', 'companies')); // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'aZ09'); diff --git a/htdocs/hrm/skill_agenda.php b/htdocs/hrm/skill_agenda.php index e6b5368a782..a469ded4cf9 100644 --- a/htdocs/hrm/skill_agenda.php +++ b/htdocs/hrm/skill_agenda.php @@ -40,7 +40,7 @@ require_once DOL_DOCUMENT_ROOT . '/hrm/lib/hrm_skill.lib.php'; $langs->loadLangs(array('hrm', 'other')); // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'aZ09'); @@ -58,10 +58,10 @@ $search_rowid = GETPOST('search_rowid'); $search_agenda_label = GETPOST('search_agenda_label'); // Get Parameters for Pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -110,7 +110,7 @@ if (!$permissiontoread) { * Actions */ -$parameters = array('id'=>$id); +$parameters = array('id' => $id); $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); @@ -157,7 +157,7 @@ if ($object->id > 0) { $linkback = ''.$langs->trans("BackToList").''; $morehtmlref = '
'; - $morehtmlref.= $object->label; + $morehtmlref .= $object->label; $morehtmlref .= '
'; @@ -180,14 +180,14 @@ if ($object->id > 0) { $objthirdparty = $object; $objcon = new stdClass(); - $out = '&origin='.urlencode($object->element.'@'.$object->module).'&originid='.urlencode($object->id); + $out = '&origin='.urlencode((string) ($object->element.'@'.$object->module)).'&originid='.urlencode((string) ($object->id)); $urlbacktopage = $_SERVER['PHP_SELF'].'?id='.$object->id; $out .= '&backtopage='.urlencode($urlbacktopage); $permok = $user->hasRight('agenda', 'myactions', 'create'); if ((!empty($objthirdparty->id) || !empty($objcon->id)) && $permok) { //$out.='loadLangs(array('hrm', 'other', 'products')); // why products? // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm', 'alpha'); @@ -48,7 +48,7 @@ $cancel = GETPOST('cancel', 'aZ09'); $contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'skillcard'; // To manage different context of search $backtopage = GETPOST('backtopage', 'alpha'); $backtopageforcancel = GETPOST('backtopageforcancel', 'alpha'); -$lineid = GETPOST('lineid', 'int'); +$lineid = GETPOSTINT('lineid'); // Initialize technical objects $object = new Skill($db); @@ -164,10 +164,10 @@ if (empty($reshook)) { include DOL_DOCUMENT_ROOT . '/core/actions_builddoc.inc.php'; if ($action == 'set_thirdparty' && $permissiontoadd) { - $object->setValueFrom('fk_soc', GETPOST('fk_soc', 'int'), '', '', 'date', '', $user, $triggermodname); + $object->setValueFrom('fk_soc', GETPOSTINT('fk_soc'), '', '', 'date', '', $user, $triggermodname); } if ($action == 'classin' && $permissiontoadd) { - $object->setProject(GETPOST('projectid', 'int')); + $object->setProject(GETPOSTINT('projectid')); } // Actions to send emails @@ -503,7 +503,7 @@ if ($action != "create" && $action != "edit") { $action = GETPOST('action', 'aZ09') ? GETPOST('action', 'aZ09') : 'view'; // The action 'add', 'create', 'edit', 'update', 'view', ... $massaction = GETPOST('massaction', 'alpha'); // The bulk action (combo box choice into lists) - $show_files = GETPOST('show_files', 'int'); // Show files area generated by bulk actions ? + $show_files = GETPOSTINT('show_files'); // Show files area generated by bulk actions ? $confirm = GETPOST('confirm', 'alpha'); // Result of a confirmation $cancel = GETPOST('cancel', 'alpha'); // We click on a Cancel button $toselect = GETPOST('toselect', 'array'); // Array of ids of elements selected into a list @@ -511,13 +511,13 @@ if ($action != "create" && $action != "edit") { $backtopage = GETPOST('backtopage', 'alpha'); // Go back to a dedicated page $optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print') - $id = GETPOST('id', 'int'); + $id = GETPOSTINT('id'); // Load variable for pagination $limit = 0; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); - $page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); + $page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // If $page is not defined, or '' or -1 or if we click on clear filters $page = 0; @@ -548,8 +548,8 @@ if ($action != "create" && $action != "edit") { $search[$key] = GETPOST('search_' . $key, 'alpha'); } if (preg_match('/^(date|timestamp|datetime)/', $val['type'])) { - $search[$key . '_dtstart'] = dol_mktime(0, 0, 0, GETPOST('search_' . $key . '_dtstartmonth', 'int'), GETPOST('search_' . $key . '_dtstartday', 'int'), GETPOST('search_' . $key . '_dtstartyear', 'int')); - $search[$key . '_dtend'] = dol_mktime(23, 59, 59, GETPOST('search_' . $key . '_dtendmonth', 'int'), GETPOST('search_' . $key . '_dtendday', 'int'), GETPOST('search_' . $key . '_dtendyear', 'int')); + $search[$key . '_dtstart'] = dol_mktime(0, 0, 0, GETPOSTINT('search_' . $key . '_dtstartmonth'), GETPOSTINT('search_' . $key . '_dtstartday'), GETPOSTINT('search_' . $key . '_dtstartyear')); + $search[$key . '_dtend'] = dol_mktime(23, 59, 59, GETPOSTINT('search_' . $key . '_dtendmonth'), GETPOSTINT('search_' . $key . '_dtendday'), GETPOSTINT('search_' . $key . '_dtendyear')); } } @@ -570,7 +570,7 @@ if ($action != "create" && $action != "edit") { $arrayfields['t.' . $key] = array( 'label' => $val['label'], 'checked' => (($visible < 0) ? 0 : 1), - 'enabled' => ($visible != 3 && dol_eval($val['enabled'], 1, 1, '1')), + 'enabled' => (abs($visible) != 3 && (int) dol_eval($val['enabled'], 1, 1, '1')), 'position' => $val['position'], 'help' => isset($val['help']) ? $val['help'] : '' ); diff --git a/htdocs/hrm/skill_document.php b/htdocs/hrm/skill_document.php index 6c898faced2..418208e0465 100644 --- a/htdocs/hrm/skill_document.php +++ b/htdocs/hrm/skill_document.php @@ -42,14 +42,14 @@ $langs->loadLangs(array('hrm', 'companies', 'other', 'mails')); // Get Parameters $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm'); -$id = (GETPOST('socid', 'int') ? GETPOST('socid', 'int') : GETPOST('id', 'int')); +$id = (GETPOSTINT('socid') ? GETPOSTINT('socid') : GETPOSTINT('id')); $ref = GETPOST('ref', 'alpha'); // Get Parameters for Pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 diff --git a/htdocs/hrm/skill_list.php b/htdocs/hrm/skill_list.php index 780e57d3a74..ea155ac684f 100644 --- a/htdocs/hrm/skill_list.php +++ b/htdocs/hrm/skill_list.php @@ -46,7 +46,7 @@ $langs->loadLangs(array('hrm', 'other')); // Get Parameters $action = GETPOST('action', 'aZ09') ? GETPOST('action', 'aZ09') : 'view'; // The action 'add', 'create', 'edit', 'update', 'view', ... $massaction = GETPOST('massaction', 'alpha'); // The bulk action (combo box choice into lists) -$show_files = GETPOST('show_files', 'int'); // Show files area generated by bulk actions ? +$show_files = GETPOSTINT('show_files'); // Show files area generated by bulk actions ? $confirm = GETPOST('confirm', 'alpha'); // Result of a confirmation $cancel = GETPOST('cancel', 'alpha'); // We click on a Cancel button $toselect = GETPOST('toselect', 'array'); // Array of ids of elements selected into a list @@ -55,13 +55,13 @@ $backtopage = GETPOST('backtopage', 'alpha'); // Go back to a dedicated page $optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print') $mode = GETPOST('mode', 'alpha'); // for mode view result -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // If $page is not defined, or '' or -1 or if we click on clear filters $page = 0; @@ -99,8 +99,8 @@ foreach ($object->fields as $key => $val) { $search[$key] = GETPOST('search_'.$key, 'alpha'); } if (preg_match('/^(date|timestamp|datetime)/', $val['type'])) { - $search[$key.'_dtstart'] = dol_mktime(0, 0, 0, GETPOST('search_'.$key.'_dtstartmonth', 'int'), GETPOST('search_'.$key.'_dtstartday', 'int'), GETPOST('search_'.$key.'_dtstartyear', 'int')); - $search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOST('search_'.$key.'_dtendmonth', 'int'), GETPOST('search_'.$key.'_dtendday', 'int'), GETPOST('search_'.$key.'_dtendyear', 'int')); + $search[$key.'_dtstart'] = dol_mktime(0, 0, 0, GETPOSTINT('search_'.$key.'_dtstartmonth'), GETPOSTINT('search_'.$key.'_dtstartday'), GETPOSTINT('search_'.$key.'_dtstartyear')); + $search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOSTINT('search_'.$key.'_dtendmonth'), GETPOSTINT('search_'.$key.'_dtendday'), GETPOSTINT('search_'.$key.'_dtendyear')); } } @@ -128,7 +128,7 @@ foreach ($object->fields as $key => $val) { $arrayfields['t.'.$key] = array( 'label'=>$val['label'], 'checked'=>(($visible < 0) ? 0 : 1), - 'enabled'=>(abs($visible) != 3 && dol_eval($val['enabled'], 1)), + 'enabled'=>(abs($visible) != 3 && (int) dol_eval($val['enabled'], 1)), 'position'=>$val['position'], 'help'=> isset($val['help']) ? $val['help'] : '' ); @@ -389,9 +389,9 @@ foreach ($search as $key => $val) { } } } elseif (preg_match('/(_dtstart|_dtend)$/', $key) && !empty($val)) { - $param .= '&search_'.$key.'month='.((int) GETPOST('search_'.$key.'month', 'int')); - $param .= '&search_'.$key.'day='.((int) GETPOST('search_'.$key.'day', 'int')); - $param .= '&search_'.$key.'year='.((int) GETPOST('search_'.$key.'year', 'int')); + $param .= '&search_'.$key.'month='.(GETPOSTINT('search_'.$key.'month')); + $param .= '&search_'.$key.'day='.(GETPOSTINT('search_'.$key.'day')); + $param .= '&search_'.$key.'year='.(GETPOSTINT('search_'.$key.'year')); } elseif ($search[$key] != '') { $param .= '&search_'.$key.'='.urlencode($search[$key]); } @@ -416,7 +416,7 @@ $arrayofmassactions = array( if (!empty($permissiontodelete)) { $arrayofmassactions['predelete'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete"); } -if (GETPOST('nomassaction', 'int') || in_array($massaction, array('presend', 'predelete'))) { +if (GETPOSTINT('nomassaction') || in_array($massaction, array('presend', 'predelete'))) { $arrayofmassactions = array(); } $massactionbutton = $form->selectMassAction('', $arrayofmassactions); @@ -483,7 +483,7 @@ if (!empty($moreforfilter)) { } $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; -$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')) : ''); // This also change content of $arrayfields +$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) : ''); // This also change content of $arrayfields $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); print '
'; // You can use div-table-responsive-no-min if you don't need reserved height for your table diff --git a/htdocs/hrm/skill_note.php b/htdocs/hrm/skill_note.php index 645180ec4ec..4b2b4bfe427 100644 --- a/htdocs/hrm/skill_note.php +++ b/htdocs/hrm/skill_note.php @@ -36,7 +36,7 @@ require_once DOL_DOCUMENT_ROOT . '/hrm/lib/hrm_skill.lib.php'; $langs->loadLangs(array('hrm', 'companies')); // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'aZ09'); diff --git a/htdocs/hrm/skill_tab.php b/htdocs/hrm/skill_tab.php index 4a1026a475d..a1e71528361 100644 --- a/htdocs/hrm/skill_tab.php +++ b/htdocs/hrm/skill_tab.php @@ -4,6 +4,7 @@ * Copyright (C) 2021 Greg Rastklan * Copyright (C) 2021 Jean-Pascal BOUDET * Copyright (C) 2021 Grégory BLEMAND + * Copyright (C) 2024 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -51,11 +52,11 @@ $contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'sk $backtopage = GETPOST('backtopage', 'alpha'); $backtopageforcancel = GETPOST('backtopageforcancel', 'alpha'); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $TSkillsToAdd = GETPOST('fk_skill', 'array'); $objecttype = GETPOST('objecttype', 'alpha'); $TNote = GETPOST('TNote', 'array'); -$lineid = GETPOST('lineid', 'int'); +$lineid = GETPOSTINT('lineid'); if (empty($objecttype)) { $objecttype = 'job'; @@ -141,7 +142,7 @@ if (empty($reshook)) { $error++; } if (!$error) { - foreach ($TSkillsToAdd as $k=>$v) { + foreach ($TSkillsToAdd as $k => $v) { $skillAdded = new SkillRank($db); $skillAdded->fk_skill = $v; $skillAdded->fk_object = $id; @@ -159,7 +160,7 @@ if (empty($reshook)) { } elseif ($action == 'saveSkill') { if (!empty($TNote)) { foreach ($TNote as $skillId => $rank) { - $TSkills = $skill->fetchAll('ASC', 't.rowid', 0, 0, array('customsql' => 'fk_object=' . ((int) $id) . " AND objecttype='" . $db->escape($objecttype) . "' AND fk_skill = " . ((int) $skillId))); + $TSkills = $skill->fetchAll('ASC', 't.rowid', 0, 0, '(fk_object:=:'.((int) $id).") AND (objecttype:=:'".$db->escape($objecttype)."') AND (fk_skill:=:".((int) $skillId).')'); if (is_array($TSkills) && !empty($TSkills)) { foreach ($TSkills as $tmpObj) { $tmpObj->rankorder = $rank; @@ -247,7 +248,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea $linkback = '' . $langs->trans("BackToList") . ''; $morehtmlref = '
'; - $morehtmlref.= $object->label; + $morehtmlref .= $object->label; $morehtmlref .= '
'; dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'rowid', $morehtmlref); @@ -269,9 +270,9 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea $TAllSkills = $static_skill->fetchAll(); // Array format for multiselectarray function - $TAllSkillsFormatted=array(); + $TAllSkillsFormatted = array(); if (!empty($TAllSkills)) { - foreach ($TAllSkills as $k=>$v) { + foreach ($TAllSkills as $k => $v) { $TAllSkillsFormatted[$k] = $v->label; } } @@ -279,12 +280,13 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea // table of skillRank linked to current object //$TSkillsJob = $skill->fetchAll('ASC', 't.rowid', 0, 0); $sql_skill = "SELECT sr.fk_object, sr.rowid, s.label,s.skill_type, sr.rankorder, sr.fk_skill"; - $sql_skill .=" FROM ".MAIN_DB_PREFIX."hrm_skillrank AS sr"; - $sql_skill .=" JOIN ".MAIN_DB_PREFIX."hrm_skill AS s ON sr.fk_skill = s.rowid"; + $sql_skill .= " FROM ".MAIN_DB_PREFIX."hrm_skillrank AS sr"; + $sql_skill .= " JOIN ".MAIN_DB_PREFIX."hrm_skill AS s ON sr.fk_skill = s.rowid"; $sql_skill .= " AND sr.fk_object = ".((int) $id); $result = $db->query($sql_skill); $numSkills = $db->num_rows($result); - for ($i=0; $i < $numSkills; $i++) { + $TSkillsJob = array(); + for ($i = 0; $i < $numSkills; $i++) { $objSkillRank = $db->fetch_object($result); $TSkillsJob[] = $objSkillRank; } @@ -307,7 +309,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea //$keyforbreak='fieldkeytoswitchonsecondcolumn'; // We change column just before this field //unset($object->fields['fk_project']); // Hide field already shown in banner //unset($object->fields['fk_soc']); // Hide field already shown in banner - $object->fields['label']['visible']=0; // Already in banner + $object->fields['label']['visible'] = 0; // Already in banner include DOL_DOCUMENT_ROOT . '/core/tpl/commonfields_view.tpl.php'; // Other attributes. Fields from hook formObjectOptions and Extrafields. @@ -334,9 +336,9 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } print ''."\n"; - $object->fields['label']['visible']=0; // Already in banner - $object->fields['firstname']['visible']=0; // Already in banner - $object->fields['lastname']['visible']=0; // Already in banner + $object->fields['label']['visible'] = 0; // Already in banner + $object->fields['firstname']['visible'] = 0; // Already in banner + $object->fields['lastname']['visible'] = 0; // Already in banner //include DOL_DOCUMENT_ROOT . '/core/tpl/commonfields_view.tpl.php'; // Ref employee @@ -480,6 +482,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea $rslt = $db->query($sqlEval); $numEval = $db->num_rows($sqlEval); + $page = 0; print_barre_liste($langs->trans("Evaluations"), $page, $_SERVER["PHP_SELF"], '', '', '', '', $numEval, $numEval, $evaltmp->picto, 0); print '
'; @@ -546,6 +549,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } print dol_get_fiche_end(); - - llxFooter(); } + +llxFooter(); +$db->close(); diff --git a/htdocs/imports/class/import.class.php b/htdocs/imports/class/import.class.php index 05d8b4bb54b..eac1d838cf8 100644 --- a/htdocs/imports/class/import.class.php +++ b/htdocs/imports/class/import.class.php @@ -2,7 +2,7 @@ /* Copyright (C) 2011 Laurent Destailleur * Copyright (C) 2016 Raphaël Doursenaud * Copyright (C) 2020 Ahmad Jamaly Rabib - * Copyright (C) 2021 Frédéric France + * Copyright (C) 2021-2024 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -49,28 +49,99 @@ class Import */ public $errno; + /** + * @var array + */ public $array_import_module; + + /** + * @var array + */ public $array_import_perms; + + /** + * @var array + */ public $array_import_icon; + + /** + * @var array + */ public $array_import_code; + + /** + * @var array + */ public $array_import_label; + + /** + * @var array + */ public $array_import_tables; + + /** + * @var array + */ public $array_import_tables_creator; + + /** + * @var array + */ public $array_import_fields; + + /** + * @var array + */ public $array_import_fieldshidden; + + /** + * @var array + */ public $array_import_entities; + + /** + * @var array + */ public $array_import_regex; + + /** + * @var array + */ public $array_import_updatekeys; + + /** + * @var array + */ public $array_import_preselected_updatekeys; + + /** + * @var array + */ public $array_import_examplevalues; + + /** + * @var array + */ public $array_import_convertvalue; + + /** + * @var array + */ public $array_import_run_sql_after; // To store import templates public $id; public $hexa; // List of fields in the export profile public $datatoimport; - public $model_name; // Name of export profile + + /** + * @var string Name of export profile + */ + public $model_name; + + /** + * @var int ID + */ public $fk_user; diff --git a/htdocs/imports/import.php b/htdocs/imports/import.php index a13f7178e77..ba8128b7316 100644 --- a/htdocs/imports/import.php +++ b/htdocs/imports/import.php @@ -3,6 +3,7 @@ * Copyright (C) 2005-2009 Regis Houssin * Copyright (C) 2012 Christophe Battarel * Copyright (C) 2022 Charlene Benke + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -58,7 +59,7 @@ $entitytoicon = array( 'other' => 'generic', 'account' => 'account', 'product' => 'product', - 'virtualproduct'=>'product', + 'virtualproduct' => 'product', 'subproduct' => 'product', 'product_supplier_ref' => 'product', 'stock' => 'stock', @@ -67,11 +68,11 @@ $entitytoicon = array( 'stockbatch' => 'stock', 'category' => 'category', 'shipment' => 'sending', - 'shipment_line'=> 'sending', - 'reception'=> 'sending', - 'reception_line'=> 'sending', - 'expensereport'=> 'trip', - 'expensereport_line'=> 'trip', + 'shipment_line' => 'sending', + 'reception' => 'sending', + 'reception_line' => 'sending', + 'expensereport' => 'trip', + 'expensereport_line' => 'trip', 'holiday' => 'holiday', 'contract_line' => 'contract', 'translation' => 'generic', @@ -113,16 +114,16 @@ $entitytolang = array( 'other' => 'Other', 'trip' => 'TripsAndExpenses', 'shipment' => 'Shipments', - 'shipment_line'=> 'ShipmentLine', + 'shipment_line' => 'ShipmentLine', 'project' => 'Projects', 'projecttask' => 'Tasks', 'task_time' => 'TaskTimeSpent', 'action' => 'Event', - 'expensereport'=> 'ExpenseReport', - 'expensereport_line'=> 'ExpenseReportLine', + 'expensereport' => 'ExpenseReport', + 'expensereport_line' => 'ExpenseReportLine', 'holiday' => 'TitreRequestCP', 'contract' => 'Contract', - 'contract_line'=> 'ContractLine', + 'contract_line' => 'ContractLine', 'translation' => 'Translation', 'bom' => 'BOM', 'bomline' => 'BOMLine' @@ -136,7 +137,7 @@ $confirm = GETPOST('confirm', 'alpha'); $step = (GETPOST('step') ? GETPOST('step') : 1); $import_name = GETPOST('import_name'); $hexa = GETPOST('hexa'); -$importmodelid = GETPOST('importmodelid', 'int'); +$importmodelid = GETPOSTINT('importmodelid'); $excludefirstline = (GETPOST('excludefirstline') ? GETPOST('excludefirstline') : 2); $endatlinenb = (GETPOST('endatlinenb') ? GETPOST('endatlinenb') : ''); $updatekeys = (GETPOST('updatekeys', 'array') ? GETPOST('updatekeys', 'array') : array()); @@ -219,8 +220,8 @@ if ($action=='downfield' || $action=='upfield') // } if ($action == 'deleteprof') { - if (GETPOST("id", 'int')) { - $objimport->fetch(GETPOST("id", 'int')); + if (GETPOSTINT("id")) { + $objimport->fetch(GETPOSTINT("id")); $result = $objimport->delete($user); } } @@ -500,6 +501,7 @@ if ($step == 2 && $datatoimport) { print '
'; print ''; $text = $objmodelimport->getDriverDescForKey($key); + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition print ''; print ''; print ''; print ''; @@ -1086,6 +1090,7 @@ if ($step == 4 && $datatoimport) { $lefti = 1; foreach ($fieldssource as $key => $val) { + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition show_elem($fieldssource, $key, $val); // key is field number in source file $listofkeys[$key] = 1; $fieldsplaced[$key] = 1; @@ -1115,7 +1120,7 @@ if ($step == 4 && $datatoimport) { foreach ($tmparray as $tmpkey => $tmpval) { $labeltoshow .= ($labeltoshow ? ' '.$langs->trans('or').' ' : '').$langs->transnoentities($tmpval); } - $optionsall[$code] = array('labelkey'=>$line['label'], 'labelkeyarray'=>$tmparray, 'label'=>$labeltoshow, 'required'=>(empty($line["required"]) ? 0 : 1), 'position'=>!empty($line['position']) ? $line['position'] : 0); + $optionsall[$code] = array('labelkey' => $line['label'], 'labelkeyarray' => $tmparray, 'label' => $labeltoshow, 'required' => (empty($line["required"]) ? 0 : 1), 'position' => !empty($line['position']) ? $line['position'] : 0); // TODO Get type from a new array into module descriptor. //$picto = 'email'; $picto = ''; @@ -1164,7 +1169,7 @@ if ($step == 4 && $datatoimport) { //var_dump($_SESSION['dol_array_match_file_to_database']); $selectforline = ''; - $selectforline .= ''; if (!empty($line["imported"])) { $selectforline .= ''; } else { @@ -1268,10 +1273,10 @@ if ($step == 4 && $datatoimport) { } elseif ($modetoautofillmapping == 'session' && !empty($_SESSION['dol_array_match_file_to_database_select'])) { $tmpselectioninsession = dolExplodeIntoArray($_SESSION['dol_array_match_file_to_database_select'], ',', '='); //var_dump($code); - if (!empty($tmpselectioninsession[($i+1)]) && $tmpselectioninsession[($i+1)] == $tmpcode) { + if (!empty($tmpselectioninsession[($i + 1)]) && $tmpselectioninsession[($i + 1)] == $tmpcode) { $selectforline .= ' selected'; } - $selectforline .= ' data-debug="'.$tmpcode.'-'.$code.'-'.$j.'-'.(!empty($tmpselectioninsession[($i+1)]) ? $tmpselectioninsession[($i+1)] : "").'"'; + $selectforline .= ' data-debug="'.$tmpcode.'-'.$code.'-'.$j.'-'.(!empty($tmpselectioninsession[($i + 1)]) ? $tmpselectioninsession[($i + 1)] : "").'"'; } $selectforline .= ' data-html="'.dol_escape_htmltag($labelhtml).'"'; $selectforline .= '>'; @@ -1280,7 +1285,7 @@ if ($step == 4 && $datatoimport) { $j++; } $selectforline .= ''; - $selectforline .= ajax_combobox('selectorderimport_'.($i+1)); + $selectforline .= ajax_combobox('selectorderimport_'.($i + 1)); print $selectforline; @@ -1496,7 +1501,7 @@ if ($step == 4 && $datatoimport) { print ''; print ''; print ''; print ''; print ''; @@ -1876,7 +1882,7 @@ if ($step == 5 && $datatoimport) { //dol_syslog("line ".$sourcelinenb.' - '.$nboflines.' - '.$excludefirstline.' - '.$endatlinenb); $arrayrecord = $obj->import_read_record(); if ($arrayrecord === false) { - $arrayofwarnings[$sourcelinenb][0] = array('lib'=>'File has '.$nboflines.' lines. However we reach the end of file or an empty line at record '.$sourcelinenb.'. This may occurs when some records are split onto several lines and not correctly delimited by the "Char delimiter", or if there is line with no data on all fields.', 'type'=>'EOF_RECORD_ON_SEVERAL_LINES'); + $arrayofwarnings[$sourcelinenb][0] = array('lib' => 'File has '.$nboflines.' lines. However we reach the end of file or an empty line at record '.$sourcelinenb.'. This may occurs when some records are split onto several lines and not correctly delimited by the "Char delimiter", or if there is line with no data on all fields.', 'type' => 'EOF_RECORD_ON_SEVERAL_LINES'); $endoffile++; continue; } @@ -1940,7 +1946,7 @@ if ($step == 5 && $datatoimport) { $i++; $resqlafterimport = $db->query($sqlafterimport); if (!$resqlafterimport) { - $arrayoferrors['none'][] = array('lib'=>$langs->trans("Error running final request: ".$sqlafterimport)); + $arrayoferrors['none'][] = array('lib' => $langs->trans("Error running final request: ".$sqlafterimport)); $error++; } } @@ -2139,6 +2145,7 @@ if ($step == 6 && $datatoimport) { print ''; print ''; @@ -2286,7 +2293,7 @@ if ($step == 6 && $datatoimport) { $sourcelinenb++; $arrayrecord = $obj->import_read_record(); if ($arrayrecord === false) { - $arrayofwarnings[$sourcelinenb][0] = array('lib'=>'File has '.$nboflines.' lines. However we reach the end of file or an empty line at record '.$sourcelinenb.'. This may occurs when some records are split onto several lines and not correctly delimited by the "Char delimiter", or if there is line with no data on all fields.', 'type'=>'EOF_RECORD_ON_SEVERAL_LINES'); + $arrayofwarnings[$sourcelinenb][0] = array('lib' => 'File has '.$nboflines.' lines. However we reach the end of file or an empty line at record '.$sourcelinenb.'. This may occurs when some records are split onto several lines and not correctly delimited by the "Char delimiter", or if there is line with no data on all fields.', 'type' => 'EOF_RECORD_ON_SEVERAL_LINES'); $endoffile++; continue; } @@ -2361,7 +2368,7 @@ if ($step == 6 && $datatoimport) { $i++; $resqlafterimport = $db->query($sqlafterimport); if (!$resqlafterimport) { - $arrayoferrors['none'][] = array('lib'=>$langs->trans("Error running final request: ".$sqlafterimport)); + $arrayoferrors['none'][] = array('lib' => $langs->trans("Error running final request: ".$sqlafterimport)); $error++; } } @@ -2467,12 +2474,8 @@ function show_elem($fieldssource, $pos, $key) if (!utf8_check($example)) { $example = mb_convert_encoding($example, 'UTF-8', 'ISO-8859-1'); } - if (!empty($conf->dol_optimize_smallscreen)) { - //print '
'; - print ' - '; - } else { - print ' - '; - } + // if (!empty($conf->dol_optimize_smallscreen)) { //print '
'; } + print ' - '; print ''.dol_escape_htmltag($example).''; } print ''; diff --git a/htdocs/imports/index.php b/htdocs/imports/index.php index e90f58aa8e1..0914233d233 100644 --- a/htdocs/imports/index.php +++ b/htdocs/imports/index.php @@ -74,6 +74,7 @@ foreach ($list as $key) { print ''; print ''; $text = $model->getDriverDescForKey($key); + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition print ''; print ''; print ''; diff --git a/htdocs/includes/OAuth/OAuth2/Service/Microsoft.php b/htdocs/includes/OAuth/OAuth2/Service/Microsoft.php index 6c3b18b3c0f..2bac0430101 100644 --- a/htdocs/includes/OAuth/OAuth2/Service/Microsoft.php +++ b/htdocs/includes/OAuth/OAuth2/Service/Microsoft.php @@ -38,11 +38,11 @@ class Microsoft extends AbstractService const SCOPE_APPLICATIONS = 'applications'; const SCOPE_APPLICATIONS_CREATE = 'applications_create'; const SCOPE_IMAP = 'imap'; - const SOCPE_IMAP_ACCESSASUSERALL = 'https://outlook.office365.com/IMAP.AccessAsUser.All'; - const SOCPE_SMTPSEND = 'https://outlook.office365.com/SMTP.Send'; - const SOCPE_USERREAD = 'User.Read'; - const SOCPE_MAILREAD = 'Mail.Read'; - const SOCPE_MAILSEND = 'Mail.Send'; + const SCOPE_IMAP_ACCESSASUSERALL = 'https://outlook.office365.com/IMAP.AccessAsUser.All'; + const SCOPE_SMTPSEND = 'https://outlook.office365.com/SMTP.Send'; + const SCOPE_USERREAD = 'User.Read'; + const SCOPE_MAILREAD = 'Mail.Read'; + const SCOPE_MAILSEND = 'Mail.Send'; protected $storage; diff --git a/htdocs/index.php b/htdocs/index.php index 7ed50b0761f..6ab07c74f12 100644 --- a/htdocs/index.php +++ b/htdocs/index.php @@ -58,8 +58,8 @@ if ($nbmodulesnotautoenabled <= getDolGlobalString('MAIN_MIN_NB_ENABLED_MODULE_F } if (GETPOST('addbox')) { // Add box (when submit is done from a form when ajax disabled) require_once DOL_DOCUMENT_ROOT.'/core/class/infobox.class.php'; - $zone = GETPOST('areacode', 'int'); - $userid = GETPOST('userid', 'int'); + $zone = GETPOSTINT('areacode'); + $userid = GETPOSTINT('userid'); $boxorder = GETPOST('boxorder', 'aZ09'); $boxorder .= GETPOST('boxcombo', 'aZ09'); @@ -93,14 +93,14 @@ $resultboxes = FormOther::getBoxesArea($user, "0"); // Load $resultboxes (select print load_fiche_titre(' ', $resultboxes['selectboxlist'], '', 0, '', 'titleforhome'); if (getDolGlobalString('MAIN_MOTD')) { - $conf->global->MAIN_MOTD = preg_replace('//i', '
', $conf->global->MAIN_MOTD); + $conf->global->MAIN_MOTD = preg_replace('//i', '
', getDolGlobalString('MAIN_MOTD')); if (getDolGlobalString('MAIN_MOTD')) { $substitutionarray = getCommonSubstitutionArray($langs); complete_substitutions_array($substitutionarray, $langs); $texttoshow = make_substitutions(getDolGlobalString('MAIN_MOTD'), $substitutionarray, $langs); print "\n\n"; - print '
'; print $langs->trans('BankAccount'); @@ -3534,9 +3542,9 @@ if ($action == 'create') { print '
' . $langs->trans('AmountHT') . '' . price($object->total_ht, '', $langs, 0, -1, -1, $conf->currency) . '' . price($object->total_ht, 0, $langs, 0, -1, -1, $conf->currency) . '' . price($object->multicurrency_total_ht, '', $langs, 0, -1, -1, $object->multicurrency_code) . '' . price($object->multicurrency_total_ht, 0, $langs, 0, -1, -1, $object->multicurrency_code) . '
' . price($object->multicurrency_total_tva, '', $langs, 0, -1, -1, $object->multicurrency_code) . '' . price($object->multicurrency_total_tva, 0, $langs, 0, -1, -1, $object->multicurrency_code) . '
' . $langs->trans('AmountTTC') . '' . price($object->total_ttc, '', $langs, 0, -1, -1, $conf->currency) . '' . price($object->total_ttc, 0, $langs, 0, -1, -1, $conf->currency) . '' . price($object->multicurrency_total_ttc, '', $langs, 0, -1, -1, $object->multicurrency_code) . '' . price($object->multicurrency_total_ttc, 0, $langs, 0, -1, -1, $object->multicurrency_code) . '
'.($object->type == FactureFournisseur::TYPE_CREDIT_NOTE ? $langs->trans("PaymentsBack") : $langs->trans('Payments')).''.$langs->trans('Date').''.$langs->trans('Type').''.$langs->trans('BankAccount').''.$langs->trans('Amount').''; print $s; print ''.price($object->total_ttc - $creditnoteamount - $depositamount - $totalpaid).' 
'.price($resteapayeraffiche).' 
'; print ''; print $langs->trans('RemainderToPayMulticurrency'); @@ -3892,11 +3901,11 @@ if ($action == 'create') { print ''.price($sign * $resteapayeraffiche).' 
'; print ''; print $langs->trans('RemainderToPayBackMulticurrency'); - if ($resteapayeraffiche> 0) { + if ($resteapayeraffiche > 0) { print ' ('.$langs->trans('NegativeIfExcessRefunded').')'; } print ''; @@ -4081,7 +4090,7 @@ if ($action == 'create') { // For credit note if ($object->type == FactureFournisseur::TYPE_CREDIT_NOTE && $object->statut == 1 && $object->paye == 0 && $usercancreate && (getDolGlobalString('SUPPLIER_INVOICE_ALLOW_REUSE_OF_CREDIT_WHEN_PARTIALLY_REFUNDED') || $object->getSommePaiement() == 0) - ) { + ) { print ''.$langs->trans('ConvertToReduc').''; } // For deposit invoice diff --git a/htdocs/fourn/facture/contact.php b/htdocs/fourn/facture/contact.php index ece8d3ed69f..551d04d31c8 100644 --- a/htdocs/fourn/facture/contact.php +++ b/htdocs/fourn/facture/contact.php @@ -39,7 +39,7 @@ if (isModEnabled('project')) { $langs->loadLangs(array("bills", "other", "companies")); -$id = (GETPOST('id', 'int') ? GETPOST('id', 'int') : GETPOST('facid', 'int')); +$id = (GETPOSTINT('id') ? GETPOSTINT('id') : GETPOSTINT('facid')); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); @@ -93,14 +93,14 @@ if (empty($reshook)) { } elseif ($action == 'swapstatut' && ($user->hasRight("fournisseur", "facture", "creer") || $user->hasRight("supplier_invoice", "creer"))) { // bascule du statut d'un contact if ($object->fetch($id)) { - $result = $object->swapContactStatus(GETPOST('ligne', 'int')); + $result = $object->swapContactStatus(GETPOSTINT('ligne')); } else { dol_print_error($db); } } elseif ($action == 'deletecontact' && ($user->hasRight("fournisseur", "facture", "creer") || $user->hasRight("supplier_invoice", "creer"))) { // Efface un contact $object->fetch($id); - $result = $object->delete_contact(GETPOST("lineid", 'int')); + $result = $object->delete_contact(GETPOSTINT("lineid")); if ($result >= 0) { header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id); diff --git a/htdocs/fourn/facture/document.php b/htdocs/fourn/facture/document.php index aa3ebb90761..ea6fe3335d0 100644 --- a/htdocs/fourn/facture/document.php +++ b/htdocs/fourn/facture/document.php @@ -42,7 +42,7 @@ if (isModEnabled('project')) { $langs->loadLangs(array('bills', 'other', 'companies')); -$id = GETPOST('facid', 'int') ? GETPOST('facid', 'int') : GETPOST('id', 'int'); +$id = GETPOSTINT('facid') ? GETPOSTINT('facid') : GETPOSTINT('id'); $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm', 'alpha'); $ref = GETPOST('ref', 'alpha'); @@ -55,10 +55,10 @@ $result = restrictedArea($user, 'fournisseur', $id, 'facture_fourn', 'facture'); $hookmanager->initHooks(array('invoicesuppliercarddocument')); // Get parameters -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 diff --git a/htdocs/fourn/facture/index.php b/htdocs/fourn/facture/index.php index 4f7cc31e9f2..16629f0febd 100644 --- a/htdocs/fourn/facture/index.php +++ b/htdocs/fourn/facture/index.php @@ -32,7 +32,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/invoice.lib.php'; $langs->loadLangs(['bills', 'boxes']); // Filter to show only result of one supplier -$socid = GETPOST('socid', 'int'); +$socid = GETPOSTINT('socid'); if (isset($user->socid) && $user->socid > 0) { $action = ''; $socid = $user->socid; diff --git a/htdocs/fourn/facture/info.php b/htdocs/fourn/facture/info.php index cdb15850ebe..1d7d168a6a6 100644 --- a/htdocs/fourn/facture/info.php +++ b/htdocs/fourn/facture/info.php @@ -37,7 +37,7 @@ if (isModEnabled('project')) { $langs->loadLangs(array("companies", "bills")); -$id = GETPOST("facid", 'int') ? GETPOST("facid", 'int') : GETPOST("id", 'int'); +$id = GETPOSTINT("facid") ? GETPOSTINT("facid") : GETPOSTINT("id"); $ref = GETPOST("ref", 'alpha'); // Security check diff --git a/htdocs/fourn/facture/list-rec.php b/htdocs/fourn/facture/list-rec.php index 156bdded630..62531e8a569 100644 --- a/htdocs/fourn/facture/list-rec.php +++ b/htdocs/fourn/facture/list-rec.php @@ -46,7 +46,7 @@ $langs->loadLangs(array('bills', 'compta', 'admin', 'other', 'suppliers')); $action = GETPOST('action', 'alpha'); $massaction = GETPOST('massaction', 'alpha'); -$show_files = GETPOST('show_files', 'int'); +$show_files = GETPOSTINT('show_files'); $confirm = GETPOST('confirm', 'alpha'); $cancel = GETPOST('cancel', 'alpha'); $toselect = GETPOST('toselect', 'array'); @@ -54,10 +54,10 @@ $contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'su $optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print') $mode = GETPOST('mode', 'aZ'); // The output mode ('list', 'kanban', 'hierarchy', 'calendar', ...) -$socid = GETPOST('socid', 'int'); +$socid = GETPOSTINT('socid'); -$id = (GETPOST('facid', 'int') ? GETPOST('facid', 'int') : GETPOST('id', 'int')); -$lineid = GETPOST('lineid', 'int'); +$id = (GETPOSTINT('facid') ? GETPOSTINT('facid') : GETPOSTINT('id')); +$lineid = GETPOSTINT('lineid'); $ref = GETPOST('ref', 'alpha'); if ($user->socid) { $socid = $user->socid; @@ -74,32 +74,32 @@ $search_montant_vat = GETPOST('search_montant_vat'); $search_montant_ttc = GETPOST('search_montant_ttc'); $search_payment_mode = GETPOST('search_payment_mode'); $search_payment_term = GETPOST('search_payment_term'); -$search_date_startday = GETPOST('search_date_startday', 'int'); -$search_date_startmonth = GETPOST('search_date_startmonth', 'int'); -$search_date_startyear = GETPOST('search_date_startyear', 'int'); -$search_date_endday = GETPOST('search_date_endday', 'int'); -$search_date_endmonth = GETPOST('search_date_endmonth', 'int'); -$search_date_endyear = GETPOST('search_date_endyear', 'int'); +$search_date_startday = GETPOSTINT('search_date_startday'); +$search_date_startmonth = GETPOSTINT('search_date_startmonth'); +$search_date_startyear = GETPOSTINT('search_date_startyear'); +$search_date_endday = GETPOSTINT('search_date_endday'); +$search_date_endmonth = GETPOSTINT('search_date_endmonth'); +$search_date_endyear = GETPOSTINT('search_date_endyear'); $search_date_start = dol_mktime(0, 0, 0, $search_date_startmonth, $search_date_startday, $search_date_startyear); // Use tzserver $search_date_end = dol_mktime(23, 59, 59, $search_date_endmonth, $search_date_endday, $search_date_endyear); -$search_date_when_startday = GETPOST('search_date_when_startday', 'int'); -$search_date_when_startmonth = GETPOST('search_date_when_startmonth', 'int'); -$search_date_when_startyear = GETPOST('search_date_when_startyear', 'int'); -$search_date_when_endday = GETPOST('search_date_when_endday', 'int'); -$search_date_when_endmonth = GETPOST('search_date_when_endmonth', 'int'); -$search_date_when_endyear = GETPOST('search_date_when_endyear', 'int'); +$search_date_when_startday = GETPOSTINT('search_date_when_startday'); +$search_date_when_startmonth = GETPOSTINT('search_date_when_startmonth'); +$search_date_when_startyear = GETPOSTINT('search_date_when_startyear'); +$search_date_when_endday = GETPOSTINT('search_date_when_endday'); +$search_date_when_endmonth = GETPOSTINT('search_date_when_endmonth'); +$search_date_when_endyear = GETPOSTINT('search_date_when_endyear'); $search_date_when_start = dol_mktime(0, 0, 0, $search_date_when_startmonth, $search_date_when_startday, $search_date_when_startyear); // Use tzserver $search_date_when_end = dol_mktime(23, 59, 59, $search_date_when_endmonth, $search_date_when_endday, $search_date_when_endyear); -$search_recurring = GETPOST('search_recurring', 'int'); +$search_recurring = GETPOSTINT('search_recurring'); $search_frequency = GETPOST('search_frequency', 'alpha'); $search_unit_frequency = GETPOST('search_unit_frequency', 'alpha'); $search_nb_gen_done = GETPOST('search_nb_gen_done', 'alpha'); -$search_status = GETPOST('search_status', 'int'); +$search_status = GETPOST('search_status', 'intcomma'); -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // If $page is not defined, or '' or -1 or if we click on clear filters $page = 0; @@ -135,24 +135,24 @@ if (!$sortfield) { $sortfield = 'f.titre'; } $arrayfields = array( - 'f.titre'=>array('label'=>'Ref', 'checked'=>1), - 's.nom'=>array('label'=>'ThirdParty', 'checked'=>1), - 'f.total_ht'=>array('label'=>'AmountHT', 'checked'=>1), - 'f.total_tva'=>array('label'=>'AmountVAT', 'checked'=>1), - 'f.total_ttc'=>array('label'=>'AmountTTC', 'checked'=>1), - 'f.fk_mode_reglement'=>array('label'=>'PaymentMode', 'checked'=>0), - 'f.fk_cond_reglement'=>array('label'=>'PaymentTerm', 'checked'=>0), - 'recurring'=>array('label'=>'RecurringInvoice', 'checked'=>1), - 'f.frequency'=>array('label'=>'Frequency', 'checked'=>1), - 'f.unit_frequency'=>array('label'=>'FrequencyUnit', 'checked'=>1), - 'f.nb_gen_done'=>array('label'=>'NbOfGenerationDoneShort', 'checked'=>1), - 'f.date_last_gen'=>array('label'=>'DateLastGenerationShort', 'checked'=>1), - 'f.date_when'=>array('label'=>'NextDateToExecutionShort', 'checked'=>1), - 'f.fk_user_author'=>array('label'=>'UserCreation', 'checked'=>0, 'position'=>500), - 'f.fk_user_modif'=>array('label'=>'UserModification', 'checked'=>0, 'position'=>505), - 'f.datec'=>array('label'=>'DateCreation', 'checked'=>0, 'position'=>520), - 'f.tms'=>array('label'=>'DateModificationShort', 'checked'=>0, 'position'=>525), - 'status'=>array('label'=>'Status', 'checked'=>1, 'position'=>1000), + 'f.titre' => array('label' => 'Ref', 'checked' => 1), + 's.nom' => array('label' => 'ThirdParty', 'checked' => 1), + 'f.total_ht' => array('label' => 'AmountHT', 'checked' => 1), + 'f.total_tva' => array('label' => 'AmountVAT', 'checked' => 1), + 'f.total_ttc' => array('label' => 'AmountTTC', 'checked' => 1), + 'f.fk_mode_reglement' => array('label' => 'PaymentMode', 'checked' => 0), + 'f.fk_cond_reglement' => array('label' => 'PaymentTerm', 'checked' => 0), + 'recurring' => array('label' => 'RecurringInvoice', 'checked' => 1), + 'f.frequency' => array('label' => 'Frequency', 'checked' => 1), + 'f.unit_frequency' => array('label' => 'FrequencyUnit', 'checked' => 1), + 'f.nb_gen_done' => array('label' => 'NbOfGenerationDoneShort', 'checked' => 1), + 'f.date_last_gen' => array('label' => 'DateLastGenerationShort', 'checked' => 1), + 'f.date_when' => array('label' => 'NextDateToExecutionShort', 'checked' => 1), + 'f.fk_user_author' => array('label' => 'UserCreation', 'checked' => 0, 'position' => 500), + 'f.fk_user_modif' => array('label' => 'UserModification', 'checked' => 0, 'position' => 505), + 'f.datec' => array('label' => 'DateCreation', 'checked' => 0, 'position' => 520), + 'f.tms' => array('label' => 'DateModificationShort', 'checked' => 0, 'position' => 525), + 'status' => array('label' => 'Status', 'checked' => 1, 'position' => 1000), ); // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_array_fields.tpl.php'; @@ -432,43 +432,43 @@ if ($limit > 0 && $limit != $conf->liste_limit) { $param .= '&limit='.((int) $limit); } if ($socid > 0) { - $param .= '&socid='.urlencode($socid); + $param .= '&socid='.urlencode((string) ($socid)); } if ($search_date_startday) { - $param .= '&search_date_startday='.urlencode($search_date_startday); + $param .= '&search_date_startday='.urlencode((string) ($search_date_startday)); } if ($search_date_startmonth) { - $param .= '&search_date_startmonth='.urlencode($search_date_startmonth); + $param .= '&search_date_startmonth='.urlencode((string) ($search_date_startmonth)); } if ($search_date_startyear) { - $param .= '&search_date_startyear='.urlencode($search_date_startyear); + $param .= '&search_date_startyear='.urlencode((string) ($search_date_startyear)); } if ($search_date_endday) { - $param .= '&search_date_endday='.urlencode($search_date_endday); + $param .= '&search_date_endday='.urlencode((string) ($search_date_endday)); } if ($search_date_endmonth) { - $param .= '&search_date_endmonth='.urlencode($search_date_endmonth); + $param .= '&search_date_endmonth='.urlencode((string) ($search_date_endmonth)); } if ($search_date_endyear) { - $param .= '&search_date_endyear='.urlencode($search_date_endyear); + $param .= '&search_date_endyear='.urlencode((string) ($search_date_endyear)); } if ($search_date_when_startday) { - $param .= '&search_date_when_startday='.urlencode($search_date_when_startday); + $param .= '&search_date_when_startday='.urlencode((string) ($search_date_when_startday)); } if ($search_date_when_startmonth) { - $param .= '&search_date_when_startmonth='.urlencode($search_date_when_startmonth); + $param .= '&search_date_when_startmonth='.urlencode((string) ($search_date_when_startmonth)); } if ($search_date_when_startyear) { - $param .= '&search_date_when_startyear='.urlencode($search_date_when_startyear); + $param .= '&search_date_when_startyear='.urlencode((string) ($search_date_when_startyear)); } if ($search_date_when_endday) { - $param .= '&search_date_when_endday='.urlencode($search_date_when_endday); + $param .= '&search_date_when_endday='.urlencode((string) ($search_date_when_endday)); } if ($search_date_when_endmonth) { - $param .= '&search_date_when_endmonth='.urlencode($search_date_when_endmonth); + $param .= '&search_date_when_endmonth='.urlencode((string) ($search_date_when_endmonth)); } if ($search_date_when_endyear) { - $param .= '&search_date_when_endyear='.urlencode($search_date_when_endyear); + $param .= '&search_date_when_endyear='.urlencode((string) ($search_date_when_endyear)); } if ($search_ref) { $param .= '&search_ref='.urlencode($search_ref); @@ -524,10 +524,10 @@ $arrayofmassactions = array( //'presend'=>img_picto('', 'email', 'class="pictofixedwidth"').$langs->trans("SendByMail"), ); -$massactionbutton = $form->selectMassAction('', $massaction == 'presend' ? array() : array('presend'=>$langs->trans("SendByMail"), 'builddoc'=>$langs->trans("PDFMerge"))); +$massactionbutton = $form->selectMassAction('', $massaction == 'presend' ? array() : array('presend' => $langs->trans("SendByMail"), 'builddoc' => $langs->trans("PDFMerge"))); $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; -$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')) : ''); // This also change content of $arrayfields +$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) : ''); // This also change content of $arrayfields //$selectedfields.=$form->showCheckAddButtons('checkforselect', 1); print '
'."\n"; @@ -569,7 +569,7 @@ if (!empty($moreforfilter)) { } $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; -$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')); // This also change content of $arrayfields +$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')); // This also change content of $arrayfields $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); print '
'; // You can use div-table-responsive-no-min if you don't need reserved height for your table @@ -675,7 +675,7 @@ if (!empty($arrayfields['f.date_when']['checked'])) { include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php'; // Fields from hook -$parameters = array('arrayfields'=>$arrayfields); +$parameters = array('arrayfields' => $arrayfields); $reshook = $hookmanager->executeHooks('printFieldListOption', $parameters, $object); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; // User creation @@ -702,10 +702,11 @@ if (!empty($arrayfields['f.tms']['checked'])) { if (!empty($arrayfields['status']['checked'])) { print '
'; $liststatus = array( - 0=>$langs->trans("Draft"), - 1=>$langs->trans("Active"), - -1=>$langs->trans("Disabled"), + 0 => $langs->trans("Draft"), + 1 => $langs->trans("Active"), + -1 => $langs->trans("Disabled"), ); + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder print $form->selectarray('search_status', $liststatus, $search_status, -2, 0, 0, '', 0, 0, 0, '', 'width100 onrightofpage'); print ''; if ($objp->frequency > 1) { - $dur = array("i"=>$langs->trans("Minutes"), "h"=>$langs->trans("Hours"), "d"=>$langs->trans("Days"), "w"=>$langs->trans("Weeks"), "m"=>$langs->trans("Months"), "y"=>$langs->trans("Years")); + $dur = array("i" => $langs->trans("Minutes"), "h" => $langs->trans("Hours"), "d" => $langs->trans("Days"), "w" => $langs->trans("Weeks"), "m" => $langs->trans("Months"), "y" => $langs->trans("Years")); } else { - $dur = array("i"=>$langs->trans("Minute"), "h"=>$langs->trans("Hour"), "d"=>$langs->trans("Day"), "w"=>$langs->trans("Week"), "m"=>$langs->trans("Month"), "y"=>$langs->trans("Year")); + $dur = array("i" => $langs->trans("Minute"), "h" => $langs->trans("Hour"), "d" => $langs->trans("Day"), "w" => $langs->trans("Week"), "m" => $langs->trans("Month"), "y" => $langs->trans("Year")); } print($objp->frequency > 0 ? $dur[$objp->unit_frequency] : ''); print ''; $listtype = array( - FactureFournisseur::TYPE_STANDARD=>$langs->trans("InvoiceStandard"), - FactureFournisseur::TYPE_REPLACEMENT=>$langs->trans("InvoiceReplacement"), - FactureFournisseur::TYPE_CREDIT_NOTE=>$langs->trans("InvoiceAvoir"), - FactureFournisseur::TYPE_DEPOSIT=>$langs->trans("InvoiceDeposit"), + FactureFournisseur::TYPE_STANDARD => $langs->trans("InvoiceStandard"), + FactureFournisseur::TYPE_REPLACEMENT => $langs->trans("InvoiceReplacement"), + FactureFournisseur::TYPE_CREDIT_NOTE => $langs->trans("InvoiceAvoir"), + FactureFournisseur::TYPE_DEPOSIT => $langs->trans("InvoiceDeposit"), ); /* if (!empty($conf->global->INVOICE_USE_SITUATION)) @@ -1111,7 +1110,7 @@ if (!empty($arrayfields['f.type']['checked'])) { print $form->selectarray('search_type', $listtype, $search_type, 1, 0, 0, '', 0, 0, 0, 'ASC', 'maxwidth100'); print ''; print $form->selectarray('search_subtype', $subtypearray, $search_subtype, 1, 0, 0, '', 0, 0, 0, '', 'maxwidth100'); @@ -1291,7 +1290,7 @@ if (!empty($arrayfields['multicurrency_rtp']['checked'])) { include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php'; // Fields from hook -$parameters = array('arrayfields'=>$arrayfields); +$parameters = array('arrayfields' => $arrayfields); $reshook = $hookmanager->executeHooks('printFieldListOption', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; // Date creation @@ -1306,8 +1305,9 @@ if (!empty($arrayfields['f.tms']['checked'])) { } // Status if (!empty($arrayfields['f.fk_statut']['checked'])) { - print ''; - $liststatus = array('0'=>$langs->trans("Draft"), '1'=>$langs->trans("Unpaid"), '2'=>$langs->trans("Paid")); + print ''; + $liststatus = array('0' => $langs->trans("Draft"), '1' => $langs->trans("Unpaid"), '2' => $langs->trans("Paid")); + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder print $form->selectarray('search_status', $liststatus, $search_status, 1, 0, 0, '', 0, 0, 0, '', 'center search_status width100 onrightofpage', 1); print '
'.$langs->trans('Date').''; // $object is default vendor invoice - $adddateof = array(array('adddateof'=>$object->date)); - $adddateof[] = array('adddateof'=>$object->date_echeance, 'labeladddateof'=>$langs->transnoentities('DateDue')); - print $form->selectDate($dateinvoice, '', '', '', 0, "addpaiement", 1, 1, 0, '', '', $adddateof); + $adddateof = array(array('adddateof' => $object->date)); + $adddateof[] = array('adddateof' => $object->date_echeance, 'labeladddateof' => $langs->transnoentities('DateDue')); + print $form->selectDate($dateinvoice, '', 0, 0, 0, "addpaiement", 1, 1, 0, '', '', $adddateof); print '
'.$langs->trans('PaymentMode').''; $form->select_types_paiements(!GETPOST('paiementid') ? $obj->fk_mode_reglement : GETPOST('paiementid'), 'paiementid'); print '
'.$langs->trans('Account').''; print img_picto('', 'bank_account', 'class="pictofixedwidth"'); print $form->select_comptes(empty($accountid) ? $obj->fk_account : $accountid, 'accountid', 0, '', 2, '', 0, 'widthcentpercentminusx maxwidth500', 1); @@ -530,7 +537,7 @@ if ($action == 'create' || $action == 'confirm_paiement' || $action == 'add_paie print dol_get_fiche_end(); - $parameters = array('facid'=>$facid, 'ref'=>$ref, 'objcanvas'=>$objcanvas); + $parameters = array('facid' => $facid, 'ref' => $ref, 'objcanvas' => $objcanvas); $reshook = $hookmanager->executeHooks('paymentsupplierinvoices', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks $error = $hookmanager->error; $errors = $hookmanager->errors; @@ -602,6 +609,8 @@ if ($action == 'create' || $action == 'confirm_paiement' || $action == 'add_paie $total = 0; $total_ttc = 0; $totalrecu = 0; + $totalrecucreditnote = 0; // PHP Warning: Undefined variable $totalrecucreditnote + $totalrecudeposits = 0; // PHP Warning: Undefined variable $totalrecudeposits while ($i < $num) { $objp = $db->fetch_object($resql); @@ -832,7 +841,7 @@ if ($action == 'create' || $action == 'confirm_paiement' || $action == 'add_paie $text .= '
'.$langs->trans("AllCompletelyPayedInvoiceWillBeClosed"); print ''; } - print $form->formconfirm($_SERVER['PHP_SELF'].'?facid='.$facture->id.'&socid='.$facture->socid.'&type='.$facture->type, $langs->trans('PayedSuppliersPayments'), $text, 'confirm_paiement', $formquestion, $preselectedchoice); + print $form->formconfirm($_SERVER['PHP_SELF'].'?facid='.$object->id.'&socid='.$object->socid.'&type='.$object->type, $langs->trans('PayedSuppliersPayments'), $text, 'confirm_paiement', $formquestion, $preselectedchoice); } print ''; diff --git a/htdocs/fourn/facture/rapport.php b/htdocs/fourn/facture/rapport.php index d2ff9442df6..8ccc16990ee 100644 --- a/htdocs/fourn/facture/rapport.php +++ b/htdocs/fourn/facture/rapport.php @@ -51,7 +51,7 @@ if (!$user->hasRight("societe", "client", "voir") || $socid) { $dir .= '/private/'.$user->id; // If user has no permission to see all, output dir is specific to user } -$year = GETPOST("year", 'int'); +$year = GETPOSTINT("year"); if (!$year) { $year = date("Y"); } @@ -73,14 +73,14 @@ if ($action == 'builddoc') { // We save charset_output to restore it because write_file can change it if needed for // output format that does not support UTF8. $sav_charset_output = $outputlangs->charset_output; - if ($rap->write_file($dir, GETPOST("remonth", 'int'), GETPOST("reyear", 'int'), $outputlangs) > 0) { + if ($rap->write_file($dir, GETPOSTINT("remonth"), GETPOSTINT("reyear"), $outputlangs) > 0) { $outputlangs->charset_output = $sav_charset_output; } else { $outputlangs->charset_output = $sav_charset_output; dol_print_error($db, $obj->error); } - $year = GETPOST("reyear", 'int'); + $year = GETPOSTINT("reyear"); } diff --git a/htdocs/fourn/facture/tpl/linkedobjectblock.tpl.php b/htdocs/fourn/facture/tpl/linkedobjectblock.tpl.php index f1bccfcad6d..02fa09d5ba9 100644 --- a/htdocs/fourn/facture/tpl/linkedobjectblock.tpl.php +++ b/htdocs/fourn/facture/tpl/linkedobjectblock.tpl.php @@ -21,7 +21,7 @@ // Protection to avoid direct call of template if (empty($conf) || !is_object($conf)) { print "Error, template page can't be called as URL"; - exit; + exit(1); } @@ -36,7 +36,8 @@ $linkedObjectBlock = $GLOBALS['linkedObjectBlock']; $langs->load("bills"); -$total = 0; $ilink = 0; +$total = 0; +$ilink = 0; foreach ($linkedObjectBlock as $key => $objectlink) { $ilink++; @@ -69,7 +70,7 @@ foreach ($linkedObjectBlock as $key => $objectlink) { } else { echo $objectlink->getLibStatut(3); } ?>
">transnoentitiesnoconv("RemoveLink"), 'unlink'); ?>">transnoentitiesnoconv("RemoveLink"), 'unlink'); ?>
'.$langs->trans('Amount').''.price($object->amount, '', $langs, 0, 0, -1, $conf->currency).'
'.price($object->amount, 0, $langs, 0, 0, -1, $conf->currency).'
'.price($objp->pamount).''; + if ($objp->nbinvoices > 1 || ($objp->totalamount && $objp->amount != $objp->totalamount)) { + print $form->textwithpicto('', $langs->trans("PaymentMadeForSeveralInvoices")); + } + print ''.price($objp->amount).''; + print ''.$langs->trans("Type").''; $typeleaves = $object->getTypes(1, -1); - $labeltoshow = (($typeleaves[$object->fk_type]['code'] && $langs->trans($typeleaves[$object->fk_type]['code']) != $typeleaves[$object->fk_type]['code']) ? $langs->trans($typeleaves[$object->fk_type]['code']) : $typeleaves[$object->fk_type]['label']); - print empty($labeltoshow) ? $langs->trans("TypeWasDisabledOrRemoved", $object->fk_type) : $labeltoshow; + if (empty($typeleaves[$object->fk_type])) { + $labeltoshow = $langs->trans("TypeWasDisabledOrRemoved", $object->fk_type); + } else { + $labeltoshow = (($typeleaves[$object->fk_type]['code'] && $langs->trans($typeleaves[$object->fk_type]['code']) != $typeleaves[$object->fk_type]['code']) ? $langs->trans($typeleaves[$object->fk_type]['code']) : $typeleaves[$object->fk_type]['label']); + } + print $labeltoshow; print '
'; - $tmpdate = dol_mktime(0, 0, 0, GETPOST('date_debut_month', 'int'), GETPOST('date_debut_day', 'int'), GETPOST('date_debut_year', 'int')); + $tmpdate = dol_mktime(0, 0, 0, GETPOSTINT('date_debut_month'), GETPOSTINT('date_debut_day'), GETPOSTINT('date_debut_year')); print $form->selectDate($tmpdate ? $tmpdate : $object->date_debut, 'date_debut_'); print '     '; print $form->selectarray('starthalfday', $listhalfday, (GETPOST('starthalfday') ? GETPOST('starthalfday') : $starthalfday)); @@ -1364,7 +1371,7 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') { print '
'.$langs->trans('DetailRefusCP').''.$object->detail_refuse.'
'; - if ($object->statut == Holiday::STATUS_APPROVED || $object->statut == Holiday::STATUS_CANCELED) { + if ($object->status == Holiday::STATUS_APPROVED || $object->status == Holiday::STATUS_CANCELED) { print $langs->trans('ApprovedBy'); } else { print $langs->trans('ReviewedByCP'); } print ''; - if ($object->statut == Holiday::STATUS_APPROVED || $object->statut == Holiday::STATUS_CANCELED) { + if ($object->status == Holiday::STATUS_APPROVED || $object->status == Holiday::STATUS_CANCELED) { if ($object->fk_user_approve > 0) { $approverdone = new User($db); $approverdone->fetch($object->fk_user_approve); @@ -1431,7 +1438,7 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') { print $approverexpected->getNomUrl(-1); } $include_users = $object->fetch_users_approver_holiday(); - if (is_array($include_users) && in_array($user->id, $include_users) && $object->statut == Holiday::STATUS_VALIDATED) { + if (is_array($include_users) && in_array($user->id, $include_users) && $object->status == Holiday::STATUS_VALIDATED) { print ''.img_edit($langs->trans("Edit")).''; } print ''.$langs->trans('DateCreation').''.dol_print_date($object->date_create, 'dayhour', 'tzuser').'
'.$langs->trans('DateValidCP').''.dol_print_date($object->date_approval, 'dayhour', 'tzuser').'
'.$langs->trans('DateCancelCP').''.dol_print_date($object->date_cancel, 'dayhour', 'tzuser').'
'.$langs->trans('DateRefusCP').''.dol_print_date($object->date_refuse, 'dayhour', 'tzuser').''; print img_picto($langs->trans("groups"), 'group', 'class="pictofixedwidth"'); - $sql =' SELECT rowid, nom from '.MAIN_DB_PREFIX.'usergroup WHERE entity IN ('.getEntity('usergroup').')'; + $sql = ' SELECT rowid, nom from '.MAIN_DB_PREFIX.'usergroup WHERE entity IN ('.getEntity('usergroup').')'; $resql = $db->query($sql); $Tgroup = array(); while ($obj = $db->fetch_object($resql)) { @@ -520,6 +520,8 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') { $sql .= ' WHERE 1=1'; $sql .= !empty($morefilter) ? $morefilter : ''; + $userlist = array(); + $resql = $db->query($sql); if ($resql) { while ($obj = $db->fetch_object($resql)) { @@ -558,7 +560,7 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') { if (!GETPOST('date_debut_')) { print $form->selectDate(-1, 'date_debut_', 0, 0, 0, '', 1, 1); } else { - $tmpdate = dol_mktime(0, 0, 0, GETPOST('date_debut_month', 'int'), GETPOST('date_debut_day', 'int'), GETPOST('date_debut_year', 'int')); + $tmpdate = dol_mktime(0, 0, 0, GETPOSTINT('date_debut_month'), GETPOSTINT('date_debut_day'), GETPOSTINT('date_debut_year')); print $form->selectDate($tmpdate, 'date_debut_', 0, 0, 0, '', 1, 1); } print '     '; @@ -575,7 +577,7 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') { if (!GETPOST('date_fin_')) { print $form->selectDate(-1, 'date_fin_', 0, 0, 0, '', 1, 1); } else { - $tmpdate = dol_mktime(0, 0, 0, GETPOST('date_fin_month', 'int'), GETPOST('date_fin_day', 'int'), GETPOST('date_fin_year', 'int')); + $tmpdate = dol_mktime(0, 0, 0, GETPOSTINT('date_fin_month'), GETPOSTINT('date_fin_day'), GETPOSTINT('date_fin_year')); print $form->selectDate($tmpdate, 'date_fin_', 0, 0, 0, '', 1, 1); } print '     '; @@ -599,8 +601,8 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') { if (getDolGlobalString('HOLIDAY_DEFAULT_VALIDATOR')) { $defaultselectuser = getDolGlobalString('HOLIDAY_DEFAULT_VALIDATOR'); // Can force default approver } - if (GETPOST('valideur', 'int') > 0) { - $defaultselectuser = GETPOST('valideur', 'int'); + if (GETPOSTINT('valideur') > 0) { + $defaultselectuser = GETPOSTINT('valideur'); } $s = $form->select_dolusers($defaultselectuser, "valideur", 1, '', 0, $include_users, '', '0,'.$conf->entity, 0, 0, '', 0, '', 'minwidth200 maxwidth500'); print img_picto('', 'user').$form->textwithpicto($s, $langs->trans("AnyOtherInThisListCanValidate")); @@ -683,10 +685,10 @@ function sendMail($id, $cancreate, $now, $autoValidation) if ($result) { // If draft and owner of leave - if ($object->statut == Holiday::STATUS_VALIDATED && $cancreate) { + if ($object->status == Holiday::STATUS_VALIDATED && $cancreate) { $object->oldcopy = dol_clone($object, 2); - //if ($autoValidation) $object->statut = Holiday::STATUS_VALIDATED; + //if ($autoValidation) $object->status = Holiday::STATUS_VALIDATED; $verif = $object->validate($user); @@ -703,7 +705,7 @@ function sendMail($id, $cancreate, $now, $autoValidation) $objStd->error++; $objStd->msg = $langs->trans('ErrorMailRecipientIsEmpty'); $objStd->status = 'error'; - $objStd->style="warnings"; + $objStd->style = "warnings"; return $objStd; } @@ -784,7 +786,7 @@ function sendMail($id, $cancreate, $now, $autoValidation) if (!$result) { $objStd->error++; $objStd->msg = $langs->trans('ErrorMailNotSend'); - $objStd->style="warnings"; + $objStd->style = "warnings"; $objStd->status = 'error'; } else { $objStd->msg = $langs->trans('MailSent'); @@ -795,7 +797,7 @@ function sendMail($id, $cancreate, $now, $autoValidation) $objStd->error++; $objStd->msg = $langs->trans('ErrorVerif'); $objStd->status = 'error'; - $objStd->style="errors"; + $objStd->style = "errors"; return $objStd; } } @@ -803,7 +805,7 @@ function sendMail($id, $cancreate, $now, $autoValidation) $objStd->error++; $objStd->msg = $langs->trans('ErrorloadUserOnSendingMail'); $objStd->status = 'error'; - $objStd->style="warnings"; + $objStd->style = "warnings"; return $objStd; } diff --git a/htdocs/holiday/class/holiday.class.php b/htdocs/holiday/class/holiday.class.php index 6d22e0a915d..e5afa1e524a 100644 --- a/htdocs/holiday/class/holiday.class.php +++ b/htdocs/holiday/class/holiday.class.php @@ -4,7 +4,8 @@ * Copyright (C) 2012-2016 Regis Houssin * Copyright (C) 2013 Florian Henry * Copyright (C) 2016 Juanjo Menent - * Copyright (C) 2018-2023 Frédéric France + * Copyright (C) 2018-2024 Frédéric France + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -71,17 +72,36 @@ class Holiday extends CommonObject */ public $description; - public $date_debut = ''; // Date start in PHP server TZ - public $date_fin = ''; // Date end in PHP server TZ - public $date_debut_gmt = ''; // Date start in GMT - public $date_fin_gmt = ''; // Date end in GMT - public $halfday = ''; // 0:Full days, 2:Start afternoon end morning, -1:Start afternoon end afternoon, 1:Start morning end morning + /** + * @var int|string Date start in PHP server TZ + */ + public $date_debut = ''; /** - * @var int + * @var int|string Date end in PHP server TZ + */ + public $date_fin = ''; + + /** + * @var int|string Date start in GMT + */ + public $date_debut_gmt = ''; + + /** + * @var int|string Date end in GMT + */ + public $date_fin_gmt = ''; + + /** + * @var int|string 0:Full days, 2:Start afternoon end morning, -1:Start afternoon end afternoon, 1:Start morning end morning + */ + public $halfday = ''; + + /** + * @var int Status 1=draft, 2=validated, 3=approved, 4 canceled, 5 refused * @deprecated */ - public $statut = 0; // 1=draft, 2=validated, 3=approved + public $statut = 0; /** * @var int ID of user that must approve. Real user for approval is fk_user_valid (old version) or fk_user_approve (new versions) @@ -133,7 +153,9 @@ class Holiday extends CommonObject */ public $fk_user_create; - + /** + * @var string Detail of refuse + */ public $detail_refuse = ''; /** @@ -760,8 +782,8 @@ class Holiday extends CommonObject $sql = "UPDATE ".MAIN_DB_PREFIX."holiday SET"; $sql .= " fk_user_valid = ".((int) $user->id).","; $sql .= " date_valid = '".$this->db->idate(dol_now())."',"; - if (!empty($this->statut) && is_numeric($this->statut)) { - $sql .= " statut = ".((int) $this->statut).","; + if (!empty($this->status) && is_numeric($this->status)) { + $sql .= " statut = ".((int) $this->status).","; } else { $this->error = 'Property status must be a numeric value'; $error++; @@ -888,8 +910,8 @@ class Holiday extends CommonObject $error++; } $sql .= " halfday = ".((int) $this->halfday).","; - if (!empty($this->statut) && is_numeric($this->statut)) { - $sql .= " statut = ".((int) $this->statut).","; + if (!empty($this->status) && is_numeric($this->status)) { + $sql .= " statut = ".((int) $this->status).","; } else { $error++; } @@ -993,7 +1015,7 @@ class Holiday extends CommonObject $checkBalance = getDictionaryValue('c_holiday_types', 'block_if_negative', $this->fk_type); - if ($checkBalance > 0 && $this->statut != self::STATUS_DRAFT) { + if ($checkBalance > 0 && $this->status != self::STATUS_DRAFT) { $balance = $this->getCPforUser($this->fk_user, $this->fk_type); if ($balance < 0) { @@ -1018,8 +1040,8 @@ class Holiday extends CommonObject $error++; } $sql .= " halfday = ".$this->halfday.","; - if (!empty($this->statut) && is_numeric($this->statut)) { - $sql .= " statut = ".$this->statut.","; + if (!empty($this->status) && is_numeric($this->status)) { + $sql .= " statut = ".$this->status.","; } else { $error++; } @@ -1280,12 +1302,12 @@ class Holiday extends CommonObject $obj = $this->db->fetch_object($resql); // Note: $obj->halfday is 0:Full days, 2:Start afternoon end morning, -1:Start afternoon, 1:End morning - $arrayofrecord[$obj->rowid] = array('date_start'=>$this->db->jdate($obj->date_start), 'date_end'=>$this->db->jdate($obj->date_end), 'halfday'=>$obj->halfday, 'status'=>$obj->status); + $arrayofrecord[$obj->rowid] = array('date_start' => $this->db->jdate($obj->date_start), 'date_end' => $this->db->jdate($obj->date_end), 'halfday' => $obj->halfday, 'status' => $obj->status); $i++; } // We found a record, user is on holiday by default, so is not available is true. - $isavailablemorning = true; + $isavailablemorning = true; // @phan-suppress-current-line PhanPluginRedundantAssignment foreach ($arrayofrecord as $record) { if ($timestamp == $record['date_start'] && $record['halfday'] == 2) { continue; @@ -1296,7 +1318,7 @@ class Holiday extends CommonObject $isavailablemorning = false; break; } - $isavailableafternoon = true; + $isavailableafternoon = true; // @phan-suppress-current-line PhanPluginRedundantAssignment foreach ($arrayofrecord as $record) { if ($timestamp == $record['date_end'] && $record['halfday'] == 2) { continue; @@ -1312,7 +1334,7 @@ class Holiday extends CommonObject dol_print_error($this->db); } - $result = array('morning'=>$isavailablemorning, 'afternoon'=>$isavailableafternoon); + $result = array('morning' => $isavailablemorning, 'afternoon' => $isavailableafternoon); if (!$isavailablemorning) { $result['morning_reason'] = 'leave_request'; } @@ -1338,15 +1360,19 @@ class Holiday extends CommonObject $datas = array(); $datas['picto'] = img_picto('', $this->picto).' '.$langs->trans("Holiday").''; - if (isset($this->statut)) { + if (isset($this->status)) { $datas['picto'] .= ' '.$this->getLibStatut(5); } $datas['ref'] = '
'.$langs->trans('Ref').': '.$this->ref; // show type for this record only in ajax to not overload lists if (!$nofetch && !empty($this->fk_type)) { $typeleaves = $this->getTypes(1, -1); - $labeltoshow = (($typeleaves[$this->fk_type]['code'] && $langs->trans($typeleaves[$this->fk_type]['code']) != $typeleaves[$this->fk_type]['code']) ? $langs->trans($typeleaves[$this->fk_type]['code']) : $typeleaves[$this->fk_type]['label']); - $datas['type'] = '
'.$langs->trans("Type") . ': ' . (empty($labeltoshow) ? $langs->trans("TypeWasDisabledOrRemoved", $this->fk_type) : $labeltoshow); + if (empty($typeleaves[$this->fk_type])) { + $labeltoshow = $langs->trans("TypeWasDisabledOrRemoved", $this->fk_type); + } else { + $labeltoshow = (($typeleaves[$this->fk_type]['code'] && $langs->trans($typeleaves[$this->fk_type]['code']) != $typeleaves[$this->fk_type]['code']) ? $langs->trans($typeleaves[$this->fk_type]['code']) : $typeleaves[$this->fk_type]['label']); + } + $datas['type'] = '
'.$langs->trans("Type") . ': ' . $labeltoshow; } if (isset($this->halfday) && !empty($this->date_debut) && !empty($this->date_fin)) { $listhalfday = array( @@ -1438,7 +1464,7 @@ class Holiday extends CommonObject global $action; $hookmanager->initHooks(array($this->element . 'dao')); - $parameters = array('id'=>$this->id, 'getnomurl' => &$result); + $parameters = array('id' => $this->id, 'getnomurl' => &$result); $reshook = $hookmanager->executeHooks('getNomUrl', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks if ($reshook > 0) { $result = $hookmanager->resPrint; @@ -1457,17 +1483,17 @@ class Holiday extends CommonObject */ public function getLibStatut($mode = 0) { - return $this->LibStatut($this->statut, $mode, $this->date_debut); + return $this->LibStatut($this->status, $mode, $this->date_debut); } // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** * Returns the label of a status * - * @param int $status Id status - * @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto - * @param integer $startdate Date holiday should start - * @return string Label + * @param int $status Id status + * @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto + * @param int|string $startdate Date holiday should start + * @return string Label */ public function LibStatut($status, $mode = 0, $startdate = '') { @@ -1493,7 +1519,7 @@ class Holiday extends CommonObject $statusType = 'status6'; if (!empty($startdate) && $startdate >= dol_now()) { // If not yet passed, we use a green "in live" color $statusType = 'status4'; - $params = array('tooltip'=>$this->labelStatus[$status].' - '.$langs->trans("Forthcoming")); + $params = array('tooltip' => $this->labelStatus[$status].' - '.$langs->trans("Forthcoming")); } if ($status == self::STATUS_DRAFT) { $statusType = 'status0'; @@ -1520,7 +1546,7 @@ class Holiday extends CommonObject * @param string $morecss More CSS on select component * @return string Show select of status */ - public function selectStatutCP($selected = '', $htmlname = 'select_statut', $morecss = 'minwidth125') + public function selectStatutCP($selected = 0, $htmlname = 'select_statut', $morecss = 'minwidth125') { global $langs; @@ -1541,9 +1567,9 @@ class Holiday extends CommonObject } } - $out .= ''."\n"; + $out .= "\n"; - $showempty= 0; + $showempty = 0; $out .= ajax_combobox($htmlname, array(), 0, 0, 'resolve', ($showempty < 0 ? (string) $showempty : '-1'), $morecss); return $out; @@ -1623,7 +1649,7 @@ class Holiday extends CommonObject * @param int $fk_type Type of vacation * @return int 0=Nothing done, 1=OK, -1=KO */ - public function updateSoldeCP($userID = '', $nbHoliday = '', $fk_type = '') + public function updateSoldeCP($userID = 0, $nbHoliday = 0, $fk_type = 0) { global $user, $langs; @@ -1741,7 +1767,7 @@ class Holiday extends CommonObject * @param int $userid Id user * @return void */ - public function createCPusers($single = false, $userid = '') + public function createCPusers($single = false, $userid = 0) { // do we have to add balance for all users ? if (!$single) { @@ -2270,8 +2296,9 @@ class Holiday extends CommonObject if ($result) { $num = $this->db->num_rows($result); if ($num) { + $types = array(); while ($obj = $this->db->fetch_object($result)) { - $types[$obj->rowid] = array('id'=> $obj->rowid, 'rowid'=> $obj->rowid, 'code'=> $obj->code, 'label'=>$obj->label, 'affect'=>$obj->affect, 'delay'=>$obj->delay, 'newbymonth'=>$obj->newbymonth); + $types[$obj->rowid] = array('id' => $obj->rowid, 'rowid' => $obj->rowid, 'code' => $obj->code, 'label' => $obj->label, 'affect' => $obj->affect, 'delay' => $obj->delay, 'newbymonth' => $obj->newbymonth); } return $types; @@ -2323,7 +2350,7 @@ class Holiday extends CommonObject $this->date_approval = $this->db->jdate($obj->datea); $this->user_creation_id = $obj->fk_user_creation; - $this->user_validation_id = $obj->fk_user_valid; + $this->user_validation_id = $obj->fk_user_validation; $this->user_modification_id = $obj->fk_user_modification; if ($obj->status == Holiday::STATUS_APPROVED || $obj->status == Holiday::STATUS_CANCELED) { @@ -2344,7 +2371,7 @@ class Holiday extends CommonObject * Used to build previews or test instances. * id must be 0 if object instance is a specimen. * - * @return void + * @return int */ public function initAsSpecimen() { @@ -2362,8 +2389,9 @@ class Holiday extends CommonObject $this->fk_validator = $user->id; $this->halfday = 0; $this->fk_type = 1; - $this->statut = Holiday::STATUS_VALIDATED; $this->status = Holiday::STATUS_VALIDATED; + + return 1; } /** diff --git a/htdocs/holiday/define_holiday.php b/htdocs/holiday/define_holiday.php index 7ec7edac09c..4b8c0974eef 100644 --- a/htdocs/holiday/define_holiday.php +++ b/htdocs/holiday/define_holiday.php @@ -3,6 +3,7 @@ * Copyright (C) 2011 Dimitri Mouillard * Copyright (C) 2013 Marcos García * Copyright (C) 2016 Regis Houssin + * Copyright (C) 2024 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -41,16 +42,16 @@ $optioncss = GETPOST('optioncss', 'alpha'); $mode = GETPOST('optioncss', 'aZ'); $search_name = GETPOST('search_name', 'alpha'); -$search_supervisor = GETPOST('search_supervisor', 'int'); +$search_supervisor = GETPOSTINT('search_supervisor'); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); $toselect = GETPOST('toselect', 'array'); // Array of ids of elements selected into a list $confirm = GETPOST('confirm', 'alpha'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -87,10 +88,10 @@ if (!$user->hasRight('holiday', 'read')) { } $arrayfields = array( - 'cp.rowid'=>array('label'=>$langs->trans("Employee"), 'checked'=>1, 'position'=>20), - 'cp.fk_user'=>array('label'=>$langs->trans("Supervisor"), 'checked'=>1, 'position'=>30), - 'cp.nbHoliday'=>array('label'=>$langs->trans("MenuConfCP"), 'checked'=>1, 'position'=>40), - 'cp.note_public'=>array('label'=>$langs->trans("Note"), 'checked'=>1, 'position'=>50), + 'cp.rowid' => array('label' => $langs->trans("Employee"), 'checked' => 1, 'position' => 20), + 'cp.fk_user' => array('label' => $langs->trans("Supervisor"), 'checked' => 1, 'position' => 30), + 'cp.nbHoliday' => array('label' => $langs->trans("MenuConfCP"), 'checked' => 1, 'position' => 40), + 'cp.note_public' => array('label' => $langs->trans("Note"), 'checked' => 1, 'position' => 50), ); @@ -260,7 +261,7 @@ if ($massaction == 'preincreaseholiday') { require_once DOL_DOCUMENT_ROOT.'/holiday/class/holiday.class.php'; $staticholiday = new Holiday($db); $arraytypeholidays = $staticholiday->getTypes(1, 1); - $formquestion[] = array(); + $formquestion = array(); $labeltypes = array(); foreach ($typeleaves as $key => $val) { $labeltypes[$val['id']] = ($langs->trans($val['code']) != $val['code']) ? $langs->trans($val['code']) : $langs->trans($val['label']); @@ -273,7 +274,7 @@ if ($massaction == 'preincreaseholiday') { $formquestion [] = array( 'type' => 'other', 'name' => 'nbdaysholydays', 'label' => $langs->trans("NumberDayAddMass"), - 'value' => '' + 'value' => '' ); print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassIncreaseHoliday"), $langs->trans("ConfirmMassIncreaseHolidayQuestion", count($toselect)), "increaseholiday", $formquestion, 1, 0, 200, 500, 1); } @@ -330,7 +331,7 @@ if (count($typeleaves) == 0) { $selectedfields = ''; if ($massactionbutton) { $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; - $selectedfields .= ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')) : ''); // This also change content of $arrayfields + $selectedfields .= ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) : ''); // This also change content of $arrayfields $selectedfields .= $form->showCheckAddButtons('checkforselect', 1); } @@ -431,7 +432,7 @@ if (count($typeleaves) == 0) { $userstatic->firstname = $users['firstname']; $userstatic->gender = $users['gender']; $userstatic->photo = $users['photo']; - $userstatic->statut = $users['status']; + $userstatic->status = $users['status']; $userstatic->employee = $users['employee']; $userstatic->fk_user = $users['fk_user']; diff --git a/htdocs/holiday/document.php b/htdocs/holiday/document.php index c72a42e5631..43fe279c57d 100644 --- a/htdocs/holiday/document.php +++ b/htdocs/holiday/document.php @@ -6,7 +6,7 @@ * Copyright (C) 2005 Simon TOSSER * Copyright (C) 2011-2012 Juanjo Menent * Copyright (C) 2013 Cédric Salvador - * Copyright (C) 2018-2022 Frédéric France + * Copyright (C) 2018-2024 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -40,16 +40,16 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php'; // Load translation files required by the page $langs->loadLangs(array('other', 'holiday', 'companies')); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm', 'alpha'); // Get parameters -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -167,8 +167,12 @@ if ($object->id) { print '
'.$langs->trans("Type").''; $typeleaves = $object->getTypes(1, -1); - $labeltoshow = (($typeleaves[$object->fk_type]['code'] && $langs->trans($typeleaves[$object->fk_type]['code']) != $typeleaves[$object->fk_type]['code']) ? $langs->trans($typeleaves[$object->fk_type]['code']) : $typeleaves[$object->fk_type]['label']); - print empty($labeltoshow) ? $langs->trans("TypeWasDisabledOrRemoved", $object->fk_type) : $labeltoshow; + if (empty($typeleaves[$object->fk_type])) { + $labeltoshow = $langs->trans("TypeWasDisabledOrRemoved", $object->fk_type); + } else { + $labeltoshow = (($typeleaves[$object->fk_type]['code'] && $langs->trans($typeleaves[$object->fk_type]['code']) != $typeleaves[$object->fk_type]['code']) ? $langs->trans($typeleaves[$object->fk_type]['code']) : $typeleaves[$object->fk_type]['label']); + } + print $labeltoshow; print '
'.num_open_day($object->date_debut_gmt, $object->date_fin_gmt, 0, 1, $object->halfday).'
'.$langs->trans('DetailRefusCP').''.$object->detail_refuse.''.$langs->trans('DateCreation').''.dol_print_date($object->date_create,'dayhour').'
'.$langs->trans('DateValidCP').''.dol_print_date($object->date_valid,'dayhour').'
'.$langs->trans('DateCancelCP').''.dol_print_date($object->date_cancel,'dayhour').'
'.$langs->trans('DateRefusCP').''.dol_print_date($object->date_refuse,'dayhour').'
'.$form->editfieldkey('Country', 'selectcountry_id', '', $object, 0).''; - print $form->select_country(GETPOSTISSET('country_id') ? GETPOST('country_id', 'int') : ($object->country_id ? $object->country_id : $mysoc->country_id), 'country_id'); + print $form->select_country(GETPOSTISSET('country_id') ? GETPOSTINT('country_id') : ($object->country_id ? $object->country_id : $mysoc->country_id), 'country_id'); if ($user->admin) { print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1); } diff --git a/htdocs/hrm/establishment/info.php b/htdocs/hrm/establishment/info.php index d879cf0dea9..2d9ebbd1968 100644 --- a/htdocs/hrm/establishment/info.php +++ b/htdocs/hrm/establishment/info.php @@ -30,7 +30,7 @@ require_once DOL_DOCUMENT_ROOT.'/hrm/class/establishment.class.php'; $langs->loadLangs(array('admin', 'hrm')); // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'aZ09'); @@ -46,10 +46,10 @@ if (GETPOST('actioncode', 'array')) { } $search_agenda_label = GETPOST('search_agenda_label'); -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 diff --git a/htdocs/hrm/evaluation_agenda.php b/htdocs/hrm/evaluation_agenda.php index 6a51a67396a..4507ba5764f 100644 --- a/htdocs/hrm/evaluation_agenda.php +++ b/htdocs/hrm/evaluation_agenda.php @@ -41,7 +41,7 @@ require_once DOL_DOCUMENT_ROOT.'/hrm/class/job.class.php'; $langs->loadLangs(array('hrm', 'other')); // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'aZ09'); @@ -58,10 +58,10 @@ if (GETPOST('actioncode', 'array')) { $search_rowid = GETPOST('search_rowid'); $search_agenda_label = GETPOST('search_agenda_label'); -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -110,7 +110,7 @@ if (!$permissiontoread) { * Actions */ -$parameters = array('id'=>$id); +$parameters = array('id' => $id); $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); @@ -186,14 +186,14 @@ if ($object->id > 0) { $objthirdparty = $object; $objcon = new stdClass(); - $out = '&origin='.urlencode($object->element.'@'.$object->module).'&originid='.urlencode($object->id); + $out = '&origin='.urlencode((string) ($object->element.'@'.$object->module)).'&originid='.urlencode((string) ($object->id)); $urlbacktopage = $_SERVER['PHP_SELF'].'?id='.$object->id; $out .= '&backtopage='.urlencode($urlbacktopage); $permok = $user->hasRight('agenda', 'myactions', 'create'); if ((!empty($objthirdparty->id) || !empty($objcon->id)) && $permok) { //$out.='loadLangs(array('hrm', 'other', 'products')); // why products? // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm', 'alpha'); @@ -51,7 +51,7 @@ $cancel = GETPOST('cancel', 'aZ09'); $contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'evaluationcard'; // To manage different context of search $backtopage = GETPOST('backtopage', 'alpha'); $backtopageforcancel = GETPOST('backtopageforcancel', 'alpha'); -$lineid = GETPOST('lineid', 'int'); +$lineid = GETPOSTINT('lineid'); // Initialize technical objects $object = new Evaluation($db); @@ -143,10 +143,10 @@ if (empty($reshook)) { if ($action == 'set_thirdparty' && $permissiontoadd) { - $object->setValueFrom('fk_soc', GETPOST('fk_soc', 'int'), '', '', 'date', '', $user, $triggermodname); + $object->setValueFrom('fk_soc', GETPOSTINT('fk_soc'), '', '', 'date', '', $user, $triggermodname); } if ($action == 'classin' && $permissiontoadd) { - $object->setProject(GETPOST('projectid', 'int')); + $object->setProject(GETPOSTINT('projectid')); } // Actions to send emails @@ -169,7 +169,7 @@ if (empty($reshook)) { if ($action == 'close') { // save evaldet lines to user; $sk = new SkillRank($db); - $SkillrecordsForActiveUser = $sk->fetchAll('ASC', 'fk_skill', 0, 0, array("customsql"=>"fk_object = ".$object->fk_user ." AND objecttype ='".SkillRank::SKILLRANK_TYPE_USER."'"), 'AND'); + $SkillrecordsForActiveUser = $sk->fetchAll('ASC', 'fk_skill', 0, 0, "(fk_object:=:".((int) $object->fk_user).") AND (objecttype:=:'".$db->escape(SkillRank::SKILLRANK_TYPE_USER)."')", 'AND'); $errors = 0; // we go through the evaldets of the eval @@ -469,7 +469,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea print '
'; - print '
+ print ' @@ -490,7 +490,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea // Lines of evaluated skills // $object is Evaluation - $object->printObjectLines($action, $mysoc, null, GETPOST('lineid', 'int'), 1); + $object->printObjectLines($action, $mysoc, null, GETPOSTINT('lineid'), 1); if (empty($object->lines)) { print '
'.img_warning().' '.$langs->trans("TheJobProfileHasNoSkillsDefinedFixBefore").'
'.img_picto_common($key, $objmodelimport->getPictoForKey($key)).''.$form->textwithpicto($objmodelimport->getDriverLabelForKey($key), $text).''; $filename = $langs->trans("ExampleOfImportFile").'_'.$datatoimport.'.'.$key; @@ -592,6 +594,7 @@ if ($step == 3 && $datatoimport) { print '
'.$langs->trans("SourceFileFormat").''; $text = $objmodelimport->getDriverDescForKey($format); + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition print $form->textwithpicto($objmodelimport->getDriverLabelForKey($format), $text); print ''; $filename = $langs->trans("ExampleOfImportFile").'_'.$datatoimport.'.'.$format; @@ -895,21 +898,21 @@ if ($step == 4 && $datatoimport) { $isrequired = preg_match('/\*$/', $label); if (!empty($isrequired)) { $newlabel = substr($label, 0, -1); - $fieldstarget_tmp[$key] = array("label"=>$newlabel, "required"=>true); + $fieldstarget_tmp[$key] = array("label" => $newlabel, "required" => true); } else { - $fieldstarget_tmp[$key] = array("label"=>$label, "required"=>false); + $fieldstarget_tmp[$key] = array("label" => $label, "required" => false); } if (!empty($array_match_database_to_file[$key])) { $fieldstarget_tmp[$key]["imported"] = true; - $fieldstarget_tmp[$key]["position"] = $array_match_database_to_file[$key]-1; + $fieldstarget_tmp[$key]["position"] = $array_match_database_to_file[$key] - 1; $keytoswap = $key; while (!empty($array_match_database_to_file[$keytoswap])) { - if ($position+1 > $array_match_database_to_file[$keytoswap]) { - $keytoswapwith = $array_match_database_to_file[$keytoswap]-1; - $tmp = [$keytoswap=>$fieldstarget_tmp[$keytoswap]]; + if ($position + 1 > $array_match_database_to_file[$keytoswap]) { + $keytoswapwith = $array_match_database_to_file[$keytoswap] - 1; + $tmp = [$keytoswap => $fieldstarget_tmp[$keytoswap]]; unset($fieldstarget_tmp[$keytoswap]); $fieldstarget_tmp = arrayInsert($fieldstarget_tmp, $keytoswapwith, $tmp); - $keytoswapwith = $arraykeysfieldtarget[$array_match_database_to_file[$keytoswap]-1]; + $keytoswapwith = $arraykeysfieldtarget[$array_match_database_to_file[$keytoswap] - 1]; $tmp = $fieldstarget_tmp[$keytoswapwith]; unset($fieldstarget_tmp[$keytoswapwith]); $fieldstarget_tmp[$keytoswapwith] = $tmp; @@ -990,6 +993,7 @@ if ($step == 4 && $datatoimport) { print '
'.$langs->trans("SourceFileFormat").''; $text = $objmodelimport->getDriverDescForKey($format); + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition print $form->textwithpicto($objmodelimport->getDriverLabelForKey($format), $text); print '
'; - $arrayvisibility = array('private'=>$langs->trans("Private"), 'all'=>$langs->trans("Everybody")); + $arrayvisibility = array('private' => $langs->trans("Private"), 'all' => $langs->trans("Everybody")); print $form->selectarray('visibility', $arrayvisibility, 'private'); print ''; @@ -1654,6 +1659,7 @@ if ($step == 5 && $datatoimport) { print '
'.$langs->trans("SourceFileFormat").''; $text = $objmodelimport->getDriverDescForKey($format); + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition print $form->textwithpicto($objmodelimport->getDriverLabelForKey($format), $text); print '
'.$langs->trans("SourceFileFormat").''; $text = $objmodelimport->getDriverDescForKey($format); + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition print $form->textwithpicto($objmodelimport->getDriverLabelForKey($format), $text); print '
'.img_picto_common($model->getDriverLabelForKey($key), $model->getPictoForKey($key)).''.$form->textwithpicto($model->getDriverLabelForKey($key), $text).''.$model->getLibLabelForKey($key).''.$model->getLibVersionForKey($key).'
@@ -220,7 +221,7 @@ if (!empty($force_install_noedit)) { name="main_url" value=" " > @@ -493,6 +494,7 @@ if (!empty($force_install_noedit)) { name="db_pass" value="" > @@ -576,14 +578,15 @@ if (!empty($force_install_noedit)) { class="needroot text-security" value="" 0 && !empty($force_install_databaserootpass)) { - print ' disabled'; /* May be removed by javascript*/ + print ' disabled'; /* May be removed by javascript*/ } ?> > diff --git a/htdocs/install/inc.php b/htdocs/install/inc.php index 8abfb691119..871030cb774 100644 --- a/htdocs/install/inc.php +++ b/htdocs/install/inc.php @@ -7,6 +7,7 @@ * Copyright (C) 2016 Raphaël Doursenaud * Copyright (C) 2021 Charlene Benke * Copyright (C) 2023 Alexandre Janniaux + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -140,24 +141,39 @@ if (php_sapi_name() === "cli" && (float) PHP_VERSION > 7.0) { case 'config': $conffile = $arg; $conffiletoshow = $arg; - break; + break; case 'h': case 'help': usage($argv[0], "Usage:"); - exit(0); + exit(0); } } // Parse the arguments to find the options. - $args_options = array_filter(array_slice($argv, 0, $rest_index), function ($arg) { - return strlen($arg) >= 2 && $arg[0] == '-'; - }); - $parsed_options = array_map(function ($arg) { - if (strlen($arg) > 1) { - return "--" . $arg; + $args_options = array_filter( + array_slice($argv, 0, $rest_index), + /** + * @param string $arg + * @return bool + */ + static function ($arg) { + return strlen($arg) >= 2 && $arg[0] == '-'; } - return "-" . $arg; - }, array_keys($opts)); + ); + $parsed_options = array_map( + /** + * Previx option with '-' for single characters and -- for more than single characters + * @param string $arg + * @return string + */ + static function ($arg) { + if (strlen($arg) > 1) { + return "--" . $arg; + } + return "-" . $arg; + }, + array_keys($opts) + ); // Find options (dash-prefixed) that were not parsed. $unknown_options = array_diff($args_options, $parsed_options); @@ -301,7 +317,7 @@ if (constant('DOL_DATA_ROOT') === null) { $lockfile = '../../documents/install.lock'; $upgradeunlockfile = '../../documents/upgrade.unlock'; } -$islocked=false; +$islocked = false; if (@file_exists($lockfile) || @file_exists($lockfile2)) { if (!defined('ALLOWED_IF_UPGRADE_UNLOCK_FOUND') || (! @file_exists($upgradeunlockfile) && ! @file_exists($upgradeunlockfile2))) { // If this is a dangerous install page (ALLOWED_IF_UPGRADE_UNLOCK_FOUND not defined) or diff --git a/htdocs/install/mysql/data/llx_c_action_trigger.sql b/htdocs/install/mysql/data/llx_c_action_trigger.sql index 958a0c65797..5ed3730adc1 100644 --- a/htdocs/install/mysql/data/llx_c_action_trigger.sql +++ b/htdocs/install/mysql/data/llx_c_action_trigger.sql @@ -60,7 +60,7 @@ insert into llx_c_action_trigger (code,label,description,elementtype,rang) value insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_VALIDATE','Customer invoice validated','Executed when a customer invoice is approved','facture',6); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_MODIFY','Customer invoice modified','Executed when a customer invoice is modified','facture',7); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_PAYED','Customer invoice payed','Executed when a customer invoice is payed','facture',7); -insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_CANCEL','Customer invoice canceled','Executed when a customer invoice is conceled','facture',8); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_CANCEL','Customer invoice canceled','Executed when a customer invoice is canceled','facture',8); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_SENTBYMAIL','Customer invoice sent by mail','Executed when a customer invoice is sent by mail','facture',9); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_UNVALIDATE','Customer invoice unvalidated','Executed when a customer invoice status set back to draft','facture',9); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_DELETE','Customer invoice deleted','Executed when a customer invoice is deleted','facture',9); diff --git a/htdocs/install/mysql/data/llx_c_email_templates.sql b/htdocs/install/mysql/data/llx_c_email_templates.sql index 5ad37ffa8e0..ccca15dbd15 100644 --- a/htdocs/install/mysql/data/llx_c_email_templates.sql +++ b/htdocs/install/mysql/data/llx_c_email_templates.sql @@ -34,10 +34,10 @@ INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, -- Recruiting INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines, joinfiles) VALUES (0, 'recruitment','recruitmentcandidature_send','',0,null,null,'(AnswerCandidature)' ,100,'isModEnabled("recruitment")',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(YourCandidature)__', '__(Hello)__ __CANDIDATE_FULLNAME__,

\n\n__(YourCandidatureAnswerMessage)__
__ONLINE_INTERVIEW_SCHEDULER_TEXT_AND_URL__\n

\n__(Sincerely)__
__USER_SIGNATURE__',null, 0); --- Event organization --- Message for default setup of EVENTORGANIZATION_TEMPLATE_EMAIL_ASK_CONF +-- Event organization +-- Message for default setup of EVENTORGANIZATION_TEMPLATE_EMAIL_ASK_CONF INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, active, topic, content, content_lines, enabled, joinfiles) values (0, '', 'conferenceorbooth', '', 0, null, null, '(EventOrganizationEmailAskConf)', 10, 1, '[__[MAIN_INFO_SOCIETE_NOM]__] __(EventOrganizationEmailAskConf)__', '__(Hello)__,

__(OrganizationEventConfRequestWasReceived)__


__(Sincerely)__
__USER_SIGNATURE__', null, '1', null); --- Message for default setup of EVENTORGANIZATION_TEMPLATE_EMAIL_ASK_BOOTH +-- Message for default setup of EVENTORGANIZATION_TEMPLATE_EMAIL_ASK_BOOTH INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, active, topic, content, content_lines, enabled, joinfiles) values (0, '', 'conferenceorbooth', '', 0, null, null, '(EventOrganizationEmailAskBooth)', 20, 1, '[__[MAIN_INFO_SOCIETE_NOM]__] __(EventOrganizationEmailAskBooth)__', '__(Hello)__,

__(OrganizationEventBoothRequestWasReceived)__


__(Sincerely)__
__USER_SIGNATURE__', null, '1', null); -- TODO Add message for registration only to event __ONLINE_PAYMENT_TEXT_AND_URL__ INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, active, topic, content, content_lines, enabled, joinfiles) values (0, '', 'conferenceorbooth', '', 0, null, null, '(EventOrganizationEmailBoothPayment)', 30, 1, '[__[MAIN_INFO_SOCIETE_NOM]__] __(EventOrganizationEmailBoothPayment)__', '__(Hello)__,

__(OrganizationEventPaymentOfBoothWasReceived)__


__(Sincerely)__
__USER_SIGNATURE__', null, '1', null); @@ -51,3 +51,6 @@ INSERT INTO llx_c_email_templates (entity, module, type_template, label, lang, p INSERT INTO llx_c_email_templates (entity, module, type_template, label, lang, position, topic, joinfiles, content) VALUES (0, 'partnership', 'partnership_send', '(SendingEmailOnPartnershipCanceled)', '', 100, '[__[MAIN_INFO_SOCIETE_NOM]__] - __(YourPartnershipCanceledTopic)__', 0, '\n

__(Hello)__,

\n__(YourPartnershipCanceledContent)__

\n
\n\n
\n\n __(Sincerely)__
\n __[MAIN_INFO_SOCIETE_NOM]__
\n \n'); INSERT INTO llx_c_email_templates (entity, module, type_template, label, lang, position, topic, joinfiles, content) VALUES (0, 'partnership', 'partnership_send', '(SendingEmailOnPartnershipRefused)', '', 100, '[__[MAIN_INFO_SOCIETE_NOM]__] - __(YourPartnershipRefusedTopic)__', 0, '\n

__(Hello)__,

\n__(YourPartnershipRefusedContent)__

\n
\n\n
\n\n __(Sincerely)__
\n __[MAIN_INFO_SOCIETE_NOM]__
\n \n'); INSERT INTO llx_c_email_templates (entity, module, type_template, label, lang, position, topic, joinfiles, content) VALUES (0, 'partnership', 'partnership_send', '(SendingEmailOnPartnershipAccepted)', '', 100, '[__[MAIN_INFO_SOCIETE_NOM]__] - __(YourPartnershipAcceptedTopic)__', 0, '\n

__(Hello)__,

\n__(YourPartnershipAcceptedContent)__

\n
\n\n
\n\n __(Sincerely)__
\n __[MAIN_INFO_SOCIETE_NOM]__
\n \n'); + +-- Supplier +INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines, joinfiles) VALUES (0, 'supplier_invoice','invoice_supplier_send','',0,null,null,'(SendingReminderEmailOnUnpaidSupplierInvoice)',100, 'isModEnabled("supplier_invoice")',1,'[__[MAIN_INFO_SOCIETE_NOM]__] - __(SupplierInvoice)__','__(Hello)__,

__(SupplierInvoiceUnpaidContent)__
__URL_SUPPLIER_INVOICE__

__(Sincerely)__
__USER_SIGNATURE__',null, 0); diff --git a/htdocs/install/mysql/data/llx_c_socialnetworks.sql b/htdocs/install/mysql/data/llx_c_socialnetworks.sql index 2283832a98f..a5800230cab 100644 --- a/htdocs/install/mysql/data/llx_c_socialnetworks.sql +++ b/htdocs/install/mysql/data/llx_c_socialnetworks.sql @@ -57,7 +57,7 @@ INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES ( 1, 'viadeo', 'Viadeo', 'https://fr.viadeo.com/fr/{socialid}', 'fa-viadeo', 0); INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES ( 1, 'viber', 'Viber', '{socialid}', '', 0); INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES ( 1, 'vimeo', 'Vimeo', '{socialid}', 'fa-vimeo', 0); -INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES ( 1, 'whatsapp', 'Whatsapp', '{socialid}', 'fa-whatsapp', 1); +INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES ( 1, 'whatsapp', 'Whatsapp', 'https://web.whatsapp.com/send?phone={socialid}', 'fa-whatsapp', 1); INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES ( 1, 'wikipedia', 'Wikipedia', '{socialid}', 'fa-wikipedia-w', 0); INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES ( 1, 'xing', 'Xing', '{socialid}', 'fa-xing', 0); INSERT INTO llx_c_socialnetworks (entity, code, label, url, icon, active) VALUES ( 1, 'youtube', 'Youtube', 'https://www.youtube.com/{socialid}', 'fa-youtube', 1); diff --git a/htdocs/install/mysql/migration/17.0.0-18.0.0.sql b/htdocs/install/mysql/migration/17.0.0-18.0.0.sql index ce9b4481518..f7ee869690e 100644 --- a/htdocs/install/mysql/migration/17.0.0-18.0.0.sql +++ b/htdocs/install/mysql/migration/17.0.0-18.0.0.sql @@ -490,7 +490,7 @@ ALTER TABLE llx_partnership ADD COLUMN email_partnership varchar(64) after fk_me ALTER TABLE llx_contratdet ADD INDEX idx_contratdet_statut (statut); ALTER TABLE fk_product_price_product DROP FOREIGN KEY fk_product_price_product; - + ALTER TABLE llx_societe_rib ADD COLUMN ext_payment_site varchar(128); -- Drop the composite unique index that exists on llx_commande_fournisseur to rebuild a new one without the fk_soc. @@ -569,3 +569,5 @@ insert into llx_c_action_trigger (code,label,description,elementtype,rang) value insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('HRM_EVALUATION_DELETE', 'HR Evaluation deleted', 'Executed when an evaluation is dleted', 'hrm', 4005); UPDATE llx_menu SET url = '/fourn/paiement/list.php?mainmenu=billing&leftmenu=suppliers_bills_payment' WHERE leftmenu = 'suppliers_bills_payment'; + +UPDATE llx_paiement SET ref = rowid WHERE ref IS NULL OR ref = ''; diff --git a/htdocs/install/mysql/migration/18.0.0-19.0.0.sql b/htdocs/install/mysql/migration/18.0.0-19.0.0.sql index c0c984332b2..70bf4fe7628 100644 --- a/htdocs/install/mysql/migration/18.0.0-19.0.0.sql +++ b/htdocs/install/mysql/migration/18.0.0-19.0.0.sql @@ -40,6 +40,8 @@ ALTER TABLE llx_product_perentity ADD COLUMN pmp double(24,8); ALTER TABLE llx_projet_task ADD COLUMN fk_user_modif integer after fk_user_creat; +UPDATE llx_paiement SET ref = rowid WHERE ref IS NULL OR ref = ''; + -- v19 @@ -202,10 +204,15 @@ ALTER TABLE llx_salary ADD COLUMN note_public text; ALTER TABLE llx_commande_fournisseur_dispatch ADD COLUMN element_type varchar(50) DEFAULT 'supplier_order' NOT NULL; -ALTER TABLE llx_expensereport DROP INDEX idx_expensereport_fk_refuse, ADD INDEX idx_expensereport_fk_refuse(fk_user_refuse); +-- VMYSQL4.1 DROP INDEX idx_expensereport_fk_refuse ON llx_expensereport; +-- VPGSQL8.2 DROP INDEX idx_expensereport_fk_refuse; + +ALTER TABLE llx_expensereport ADD INDEX idx_expensereport_fk_user_refuse(fk_user_refuse); INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle) VALUES (1,'66','Société publique locale'); ALTER TABLE llx_prelevement_lignes ADD COLUMN tms timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP; ALTER TABLE llx_bom_bomline ADD COLUMN tms timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP; + +UPDATE llx_c_type_contact SET element = 'stocktransfer' WHERE element = 'StockTransfer'; diff --git a/htdocs/install/mysql/migration/19.0.0-20.0.0.sql b/htdocs/install/mysql/migration/19.0.0-20.0.0.sql index d3bdc300ad4..491b563a502 100644 --- a/htdocs/install/mysql/migration/19.0.0-20.0.0.sql +++ b/htdocs/install/mysql/migration/19.0.0-20.0.0.sql @@ -5,7 +5,7 @@ -- -- To restrict request to Mysql version x.y minimum use -- VMYSQLx.y -- To restrict request to Pgsql version x.y minimum use -- VPGSQLx.y --- To rename a table: ALTER TABLE llx_table RENAME TO llx_table_new; +-- To rename a table: ALTER TABLE llx_table RENAME TO llx_table_new; -- Note that "RENAME TO" is both compatible mysql/postgesql, not "RENAME" alone. -- To add a column: ALTER TABLE llx_table ADD COLUMN newcol varchar(60) NOT NULL DEFAULT '0' AFTER existingcol; -- To rename a column: ALTER TABLE llx_table CHANGE COLUMN oldname newname varchar(60); -- To drop a column: ALTER TABLE llx_table DROP COLUMN oldname; @@ -32,6 +32,11 @@ -- -- VPGSQL8.2 SELECT dol_util_rebuild_sequences(); +-- V18 forgotten + +UPDATE llx_paiement SET ref = rowid WHERE ref IS NULL OR ref = ''; + + -- V19 forgotten ALTER TABLE llx_resource ADD COLUMN phone varchar(255) DEFAULT NULL AFTER max_users; @@ -40,6 +45,8 @@ ALTER TABLE llx_resource ADD COLUMN url varchar(255) DEFAULT NULL AFTER email; ALTER TABLE llx_resource ADD COLUMN fk_state integer DEFAULT NULL AFTER fk_country; ALTER TABLE llx_resource ADD INDEX idx_resource_fk_state (fk_state); +UPDATE llx_c_type_contact SET element = 'stocktransfer' WHERE element = 'StockTransfer'; + -- Use unique keys for extrafields ALTER TABLE llx_actioncomm_extrafields DROP INDEX idx_actioncomm_extrafields; @@ -60,8 +67,6 @@ ALTER TABLE llx_categories_extrafields DROP INDEX idx_categories_extrafields; ALTER TABLE llx_categories_extrafields ADD UNIQUE INDEX uk_categories_extrafields (fk_object); ALTER TABLE llx_commande_extrafields DROP INDEX idx_commande_extrafields; ALTER TABLE llx_commande_extrafields ADD UNIQUE INDEX uk_commande_extrafields (fk_object); -ALTER TABLE llx_commande_fournisseur_dispatch_extrafields DROP INDEX idx_commande_fournisseur_dispatch_extrafields; -ALTER TABLE llx_commande_fournisseur_dispatch_extrafields ADD UNIQUE INDEX uk_commande_fournisseur_dispatch_extrafields (fk_object); ALTER TABLE llx_commande_fournisseur_extrafields DROP INDEX idx_commande_fournisseur_extrafields; ALTER TABLE llx_commande_fournisseur_extrafields ADD UNIQUE INDEX uk_commande_fournisseur_extrafields (fk_object); ALTER TABLE llx_commande_fournisseurdet_extrafields DROP INDEX idx_commande_fournisseurdet_extrafields; @@ -222,11 +227,14 @@ ALTER TABLE llx_product ADD COLUMN last_main_doc varchar(255); ALTER TABLE llx_knowledgemanagement_knowledgerecord MODIFY COLUMN answer longtext; +ALTER TABLE llx_commande_fournisseur_dispatch_extrafields RENAME TO llx_receptiondet_batch_extrafields; +ALTER TABLE llx_commande_fournisseur_dispatch RENAME TO llx_receptiondet_batch; + -- Rename const to add customer categories on not customer/prospect third-party if enabled UPDATE llx_const SET name = 'THIRDPARTY_CAN_HAVE_CUSTOMER_CATEGORY_EVEN_IF_NOT_CUSTOMER_PROSPECT' WHERE name = 'THIRDPARTY_CAN_HAVE_CATEGORY_EVEN_IF_NOT_CUSTOMER_PROSPECT_SUPPLIER'; -ALTER TABLE llx_fichinter ADD COLUMN signed_status integer DEFAULT NULL AFTER duree; -ALTER TABLE llx_contrat ADD COLUMN signed_status integer DEFAULT NULL AFTER date_contrat; +ALTER TABLE llx_fichinter ADD COLUMN signed_status smallint DEFAULT NULL AFTER duree; +ALTER TABLE llx_contrat ADD COLUMN signed_status smallint DEFAULT NULL AFTER date_contrat; ALTER TABLE llx_mailing ADD COLUMN messtype varchar(16) DEFAULT 'email' after rowid; @@ -234,6 +242,7 @@ ALTER TABLE llx_ticket ADD COLUMN model_pdf varchar(255); ALTER TABLE llx_ticket ADD COLUMN last_main_doc varchar(255); ALTER TABLE llx_ticket ADD COLUMN extraparams varchar(255); ALTER TABLE llx_ticket ADD COLUMN origin_replyto varchar(128); +ALTER TABLE llx_ticket ADD COLUMN origin_references text DEFAULT NULL; ALTER TABLE llx_expensereport MODIFY COLUMN model_pdf varchar(255) DEFAULT NULL; ALTER TABLE llx_fichinter_rec MODIFY COLUMN modelpdf varchar(255) DEFAULT NULL; @@ -248,3 +257,26 @@ ALTER TABLE llx_socpeople ADD COLUMN geopoint point DEFAULT NULL; ALTER TABLE llx_socpeople ADD COLUMN georesultcode varchar(16) NULL; ALTER TABLE llx_socpeople ADD COLUMN name_alias varchar(255) NULL; + +-- Supplier +INSERT INTO llx_c_email_templates (entity, module, type_template, lang, private, fk_user, datec, label, position, enabled, active, topic, content, content_lines, joinfiles) VALUES (0, 'supplier_invoice','invoice_supplier_send','',0,null,null,'(SendingReminderEmailOnUnpaidSupplierInvoice)',100, 'isModEnabled("supplier_invoice")',1,'[__[MAIN_INFO_SOCIETE_NOM]__] - __(SupplierInvoice)__','__(Hello)__,

__(SupplierInvoiceUnpaidContent)__
__URL_SUPPLIER_INVOICE__

__(Sincerely)__
__USER_SIGNATURE__',null, 0); + + +ALTER TABLE llx_societe ADD COLUMN phone_mobile varchar(20) after phone; + +ALTER TABLE llx_facture ADD INDEX idx_facture_tms (tms); +ALTER TABLE llx_facture_fourn ADD INDEX idx_facture_fourn_tms (tms); + +ALTER TABLE llx_element_element MODIFY COLUMN sourcetype VARCHAR(64) NOT NULL; +ALTER TABLE llx_element_element MODIFY COLUMN targettype VARCHAR(64) NOT NULL; +ALTER TABLE llx_c_type_contact MODIFY COLUMN element VARCHAR(64) NOT NULL; + +ALTER TABLE llx_product_association ADD COLUMN import_key varchar(14) DEFAULT NULL; + +ALTER TABLE llx_ticket ADD COLUMN barcode varchar(255) DEFAULT NULL after extraparams; +ALTER TABLE llx_ticket ADD COLUMN fk_barcode_type integer DEFAULT NULL after barcode; + +ALTER TABLE llx_ticket ADD UNIQUE INDEX uk_ticket_barcode_barcode_type (barcode, fk_barcode_type, entity); +ALTER TABLE llx_ticket ADD CONSTRAINT llx_ticket_fk_product_barcode_type FOREIGN KEY (fk_barcode_type) REFERENCES llx_c_barcode_type (rowid); + +ALTER TABLE llx_societe ADD COLUMN fk_parent integer NULL; diff --git a/htdocs/install/mysql/tables/llx_actioncomm.sql b/htdocs/install/mysql/tables/llx_actioncomm.sql index 54eac887362..eccb6f49fe8 100644 --- a/htdocs/install/mysql/tables/llx_actioncomm.sql +++ b/htdocs/install/mysql/tables/llx_actioncomm.sql @@ -17,7 +17,7 @@ -- along with this program. If not, see . -- -- --- Table of events and actions (past and to do). +-- Table of events and actions (past and to do). -- This is also the table to track events on other Dolibarr objects. -- ======================================================================== @@ -31,7 +31,7 @@ create table llx_actioncomm datep2 datetime, -- date end fk_action integer, -- type of action (optional link with id in llx_c_actioncomm or null) - code varchar(50) NULL, -- code of action for automatic action ('AC_OTH_AUTO' for automatic actions, 'AC_EMAILIN_AUTO' for email input, 'AC_xxx' for manual action...) + code varchar(50) NULL, -- code of action for automatic action ('AC_OTH_AUTO' for automatic actions, 'AC_EMAILIN_AUTO' for email input, 'AC_xxx' for manual action...) datec datetime, -- date creation tms timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- last modification date @@ -43,7 +43,6 @@ create table llx_actioncomm fk_contact integer, fk_parent integer NOT NULL default 0, fk_user_action integer, -- user id of owner of action (note that users assigned to event are stored into table 'actioncomm_resources') - fk_user_done integer, -- user id of user that has made action (deprecated) transparency integer, -- transparency (ical standard). used to say if user assigned to event are busy or not by event. This field may be deprecated if we want to store transparency for each assigned user, moved into table llx_actioncomm_resources. @@ -56,9 +55,9 @@ create table llx_actioncomm label varchar(255) NOT NULL, -- label/title of event or topic of email note mediumtext, -- private note of event or content of email - + calling_duration integer, -- when event is a phone call, duration of phone call - + email_subject varchar(255), -- when event was an email, we store here the subject. content is stored into note. email_msgid varchar(255), -- when event was an email, we store here the msgid email_from varchar(255), -- when event was an email, we store here the from @@ -68,7 +67,7 @@ create table llx_actioncomm email_tobcc varchar(255), -- when event was an email, we store here the email_tobcc errors_to varchar(255), -- when event was an email, we store here the erros_to reply_to varchar(255), -- when event was an email, we store here the reply_to - + recurid varchar(128), -- used to store event id to link each other all the repeating event record. It can be the 'iCalUID' as in RFC5545 (an id similar for all the same serie) recurrule varchar(128), -- contains string with ical format recurring rule like 'FREQ=MONTHLY;INTERVAL=2;BYMONTHDAY=19' or 'FREQ=WEEKLY;BYDAY=MO' recurdateend datetime, -- no more recurring event after this date diff --git a/htdocs/install/mysql/tables/llx_c_type_contact.sql b/htdocs/install/mysql/tables/llx_c_type_contact.sql index e2275e71e5f..65ddb592ce0 100644 --- a/htdocs/install/mysql/tables/llx_c_type_contact.sql +++ b/htdocs/install/mysql/tables/llx_c_type_contact.sql @@ -30,7 +30,7 @@ create table llx_c_type_contact ( rowid integer AUTO_INCREMENT PRIMARY KEY, - element varchar(30) NOT NULL, + element varchar(64) NOT NULL, source varchar(8) DEFAULT 'external' NOT NULL, code varchar(32) NOT NULL, libelle varchar(128) NOT NULL, diff --git a/htdocs/install/mysql/tables/llx_contrat.sql b/htdocs/install/mysql/tables/llx_contrat.sql index 2e01e909127..53c97061102 100644 --- a/htdocs/install/mysql/tables/llx_contrat.sql +++ b/htdocs/install/mysql/tables/llx_contrat.sql @@ -29,7 +29,7 @@ create table llx_contrat tms timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, datec datetime, -- creation date date_contrat datetime, - signed_status integer DEFAULT NULL, -- signed status + signed_status smallint DEFAULT NULL, -- signed status statut smallint DEFAULT 0, -- not used. deprecated fin_validite datetime, date_cloture datetime, diff --git a/htdocs/install/mysql/tables/llx_element_element.sql b/htdocs/install/mysql/tables/llx_element_element.sql index 4c4567d89b2..45798b6537c 100644 --- a/htdocs/install/mysql/tables/llx_element_element.sql +++ b/htdocs/install/mysql/tables/llx_element_element.sql @@ -22,10 +22,10 @@ create table llx_element_element ( - rowid integer AUTO_INCREMENT PRIMARY KEY, + rowid integer AUTO_INCREMENT PRIMARY KEY, fk_source integer NOT NULL, - sourcetype varchar(32) NOT NULL, + sourcetype varchar(64) NOT NULL, fk_target integer NOT NULL, - targettype varchar(32) NOT NULL + targettype varchar(64) NOT NULL ) ENGINE=innodb; diff --git a/htdocs/install/mysql/tables/llx_expeditiondet_batch.sql b/htdocs/install/mysql/tables/llx_expeditiondet_batch.sql index a8111e67cb9..3efd29dbc53 100644 --- a/htdocs/install/mysql/tables/llx_expeditiondet_batch.sql +++ b/htdocs/install/mysql/tables/llx_expeditiondet_batch.sql @@ -14,7 +14,7 @@ -- You should have received a copy of the GNU General Public License -- along with this program. If not, see . -- --- Similar for supplier with llx_commande_fournisseur_dispatch=llx_receptiondet_batch +-- Similar for supplier with llx_receptiondet_batch -- ============================================================================ CREATE TABLE llx_expeditiondet_batch ( diff --git a/htdocs/install/mysql/tables/llx_expensereport.key.sql b/htdocs/install/mysql/tables/llx_expensereport.key.sql index 329bb9089ff..8557fcee666 100644 --- a/htdocs/install/mysql/tables/llx_expensereport.key.sql +++ b/htdocs/install/mysql/tables/llx_expensereport.key.sql @@ -1,6 +1,6 @@ -- =================================================================== -- Copyright (C) 2005 Laurent Destailleur --- Copyright (C) 2008-2010 Regis Houssin +-- Copyright (C) 2008-2024 Regis Houssin -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by @@ -31,6 +31,5 @@ ALTER TABLE llx_expensereport ADD INDEX idx_expensereport_fk_refuse (fk_user_ref --ALTER TABLE llx_expensereport ADD CONSTRAINT fk_expensereport_fk_user_author FOREIGN KEY (fk_user_author) REFERENCES llx_user (rowid); --ALTER TABLE llx_expensereport ADD CONSTRAINT fk_expensereport_fk_user_valid FOREIGN KEY (fk_user_valid) REFERENCES llx_user (rowid); ---ALTER TABLE llx_expensereport ADD CONSTRAINT fk_expensereport_fk_user_approve FOREIGN KEY (fk_user_approve) REFERENCES llx_user (rowid); ---ALTER TABLE llx_expensereport ADD CONSTRAINT fk_expensereport_fk_refuse FOREIGN KEY (fk_user_refuse) REFERENCES llx_user (rowid); - +--ALTER TABLE llx_expensereport ADD CONSTRAINT fk_expensereport_fk_user_approve FOREIGN KEY (fk_user_approve) REFERENCES llx_user (rowid); +--ALTER TABLE llx_expensereport ADD CONSTRAINT fk_expensereport_fk_user_refuse FOREIGN KEY (fk_user_refuse) REFERENCES llx_user (rowid); diff --git a/htdocs/install/mysql/tables/llx_facture.key.sql b/htdocs/install/mysql/tables/llx_facture.key.sql index ee25f8c09d8..702392a459d 100644 --- a/htdocs/install/mysql/tables/llx_facture.key.sql +++ b/htdocs/install/mysql/tables/llx_facture.key.sql @@ -30,6 +30,7 @@ ALTER TABLE llx_facture ADD INDEX idx_facture_fk_account (fk_account); ALTER TABLE llx_facture ADD INDEX idx_facture_fk_currency (fk_currency); ALTER TABLE llx_facture ADD INDEX idx_facture_fk_statut (fk_statut); ALTER TABLE llx_facture ADD INDEX idx_facture_datef (datef); +ALTER TABLE llx_facture ADD INDEX idx_facture_tms (tms); ALTER TABLE llx_facture ADD CONSTRAINT fk_facture_fk_soc FOREIGN KEY (fk_soc) REFERENCES llx_societe (rowid); ALTER TABLE llx_facture ADD CONSTRAINT fk_facture_fk_user_author FOREIGN KEY (fk_user_author) REFERENCES llx_user (rowid); diff --git a/htdocs/install/mysql/tables/llx_facture_fourn.key.sql b/htdocs/install/mysql/tables/llx_facture_fourn.key.sql index 18036c19d92..0331f9e4ae2 100644 --- a/htdocs/install/mysql/tables/llx_facture_fourn.key.sql +++ b/htdocs/install/mysql/tables/llx_facture_fourn.key.sql @@ -26,6 +26,7 @@ ALTER TABLE llx_facture_fourn ADD INDEX idx_facture_fourn_fk_soc (fk_soc); ALTER TABLE llx_facture_fourn ADD INDEX idx_facture_fourn_fk_user_author (fk_user_author); ALTER TABLE llx_facture_fourn ADD INDEX idx_facture_fourn_fk_user_valid (fk_user_valid); ALTER TABLE llx_facture_fourn ADD INDEX idx_facture_fourn_fk_projet (fk_projet); +ALTER TABLE llx_facture_fourn ADD INDEX idx_facture_fourn_tms (tms); ALTER TABLE llx_facture_fourn ADD CONSTRAINT fk_facture_fourn_fk_soc FOREIGN KEY (fk_soc) REFERENCES llx_societe (rowid); ALTER TABLE llx_facture_fourn ADD CONSTRAINT fk_facture_fourn_fk_user_author FOREIGN KEY (fk_user_author) REFERENCES llx_user (rowid); diff --git a/htdocs/install/mysql/tables/llx_fichinter.sql b/htdocs/install/mysql/tables/llx_fichinter.sql index 4065f3c64b8..5832ce07e9f 100644 --- a/htdocs/install/mysql/tables/llx_fichinter.sql +++ b/htdocs/install/mysql/tables/llx_fichinter.sql @@ -39,7 +39,7 @@ create table llx_fichinter datee date, -- date de fin d'intervention datet date, -- date de terminaison de l'intervention duree real, -- duree totale de l'intervention - signed_status integer DEFAULT NULL, -- signed status + signed_status smallint DEFAULT NULL, -- signed status description text, note_private text, note_public text, diff --git a/htdocs/install/mysql/tables/llx_product_association.key.sql b/htdocs/install/mysql/tables/llx_product_association.key.sql index 9eb9fdd457b..c9dca6e611e 100644 --- a/htdocs/install/mysql/tables/llx_product_association.key.sql +++ b/htdocs/install/mysql/tables/llx_product_association.key.sql @@ -20,3 +20,4 @@ ALTER TABLE llx_product_association ADD UNIQUE INDEX uk_product_association (fk_product_pere, fk_product_fils); ALTER TABLE llx_product_association ADD INDEX idx_product_association_fils (fk_product_fils); + diff --git a/htdocs/install/mysql/tables/llx_product_association.sql b/htdocs/install/mysql/tables/llx_product_association.sql index f97e2aa6a0b..55ce8cc9d78 100644 --- a/htdocs/install/mysql/tables/llx_product_association.sql +++ b/htdocs/install/mysql/tables/llx_product_association.sql @@ -24,6 +24,7 @@ create table llx_product_association fk_product_fils integer NOT NULL DEFAULT 0, -- id du sous-produit qty double NULL, incdec integer DEFAULT 1, -- when set to 1 changing stock of product will change stock of linked product too - rang integer DEFAULT 0 + rang integer DEFAULT 0, + import_key varchar(14) DEFAULT NULL )ENGINE=innodb; diff --git a/htdocs/install/mysql/tables/llx_commande_fournisseur_dispatch.key.sql b/htdocs/install/mysql/tables/llx_receptiondet_batch.key.sql similarity index 57% rename from htdocs/install/mysql/tables/llx_commande_fournisseur_dispatch.key.sql rename to htdocs/install/mysql/tables/llx_receptiondet_batch.key.sql index 98cb3db837f..0c92a0d8302 100644 --- a/htdocs/install/mysql/tables/llx_commande_fournisseur_dispatch.key.sql +++ b/htdocs/install/mysql/tables/llx_receptiondet_batch.key.sql @@ -16,8 +16,8 @@ -- -- =================================================================== -ALTER TABLE llx_commande_fournisseur_dispatch ADD INDEX idx_commande_fournisseur_dispatch_fk_commande (fk_commande); -ALTER TABLE llx_commande_fournisseur_dispatch ADD INDEX idx_commande_fournisseur_dispatch_fk_reception (fk_reception); -ALTER TABLE llx_commande_fournisseur_dispatch ADD CONSTRAINT fk_commande_fournisseur_dispatch_fk_reception FOREIGN KEY (fk_reception) REFERENCES llx_reception (rowid); -ALTER TABLE llx_commande_fournisseur_dispatch ADD INDEX idx_commande_fournisseur_dispatch_fk_product (fk_product); -ALTER TABLE llx_commande_fournisseur_dispatch ADD INDEX idx_commande_fournisseur_dispatch_fk_commandefourndet (fk_commandefourndet); +ALTER TABLE llx_receptiondet_batch ADD INDEX idx_receptiondet_batch_fk_commande (fk_commande); +ALTER TABLE llx_receptiondet_batch ADD INDEX idx_receptiondet_batch_fk_reception (fk_reception); +ALTER TABLE llx_receptiondet_batch ADD CONSTRAINT fk_receptiondet_batch_fk_reception FOREIGN KEY (fk_reception) REFERENCES llx_reception (rowid); +ALTER TABLE llx_receptiondet_batch ADD INDEX idx_receptiondet_batch_fk_product (fk_product); +ALTER TABLE llx_receptiondet_batch ADD INDEX idx_receptiondet_batch_fk_commandefourndet (fk_commandefourndet); diff --git a/htdocs/install/mysql/tables/llx_commande_fournisseur_dispatch.sql b/htdocs/install/mysql/tables/llx_receptiondet_batch.sql similarity index 96% rename from htdocs/install/mysql/tables/llx_commande_fournisseur_dispatch.sql rename to htdocs/install/mysql/tables/llx_receptiondet_batch.sql index 6bbaea61c45..3f3db04b8cb 100644 --- a/htdocs/install/mysql/tables/llx_commande_fournisseur_dispatch.sql +++ b/htdocs/install/mysql/tables/llx_receptiondet_batch.sql @@ -14,17 +14,17 @@ -- You should have received a copy of the GNU General Public License -- along with this program. If not, see . -- --- This table is just an history table to track all receiption to do or done for a +-- This table is just an history table to track all receiption to do or done for a -- particular supplier order. A movement with same information is also done -- into stock_movement so this table may be useless. --- +-- -- Detail of each lines of a reception (qty, batch and into which warehouse must be -- received or has been receveived a purchase order line). -- -- This table should be renamed into llx_receptiondet_batch -- =================================================================== -create table llx_commande_fournisseur_dispatch +create table llx_receptiondet_batch ( rowid integer AUTO_INCREMENT PRIMARY KEY, fk_product integer, diff --git a/htdocs/install/mysql/tables/llx_commande_fournisseur_dispatch_extrafields.key.sql b/htdocs/install/mysql/tables/llx_receptiondet_batch_extrafields.key.sql similarity index 86% rename from htdocs/install/mysql/tables/llx_commande_fournisseur_dispatch_extrafields.key.sql rename to htdocs/install/mysql/tables/llx_receptiondet_batch_extrafields.key.sql index 09b50db8e3a..319720dd1a0 100644 --- a/htdocs/install/mysql/tables/llx_commande_fournisseur_dispatch_extrafields.key.sql +++ b/htdocs/install/mysql/tables/llx_receptiondet_batch_extrafields.key.sql @@ -17,4 +17,4 @@ -- =================================================================== -ALTER TABLE llx_commande_fournisseur_dispatch_extrafields ADD UNIQUE INDEX uk_commande_fournisseur_dispatch_extrafields (fk_object); +ALTER TABLE llx_receptiondet_batch_extrafields ADD UNIQUE INDEX uk_receptiondet_batch_extrafields (fk_object); diff --git a/htdocs/install/mysql/tables/llx_commande_fournisseur_dispatch_extrafields.sql b/htdocs/install/mysql/tables/llx_receptiondet_batch_extrafields.sql similarity index 95% rename from htdocs/install/mysql/tables/llx_commande_fournisseur_dispatch_extrafields.sql rename to htdocs/install/mysql/tables/llx_receptiondet_batch_extrafields.sql index d8720358cec..20ab19b4dc1 100644 --- a/htdocs/install/mysql/tables/llx_commande_fournisseur_dispatch_extrafields.sql +++ b/htdocs/install/mysql/tables/llx_receptiondet_batch_extrafields.sql @@ -17,7 +17,7 @@ -- This table should have been named llx_receptiondet_batch_extrafields -- =================================================================== -create table llx_commande_fournisseur_dispatch_extrafields +create table llx_receptiondet_batch_extrafields ( rowid integer AUTO_INCREMENT PRIMARY KEY, tms timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, diff --git a/htdocs/install/mysql/tables/llx_societe.sql b/htdocs/install/mysql/tables/llx_societe.sql index 0826442fe25..cf6275e48c4 100644 --- a/htdocs/install/mysql/tables/llx_societe.sql +++ b/htdocs/install/mysql/tables/llx_societe.sql @@ -52,6 +52,7 @@ create table llx_societe georesultcode varchar(16), phone varchar(20), -- phone number + phone_mobile varchar(20), -- mobile phone number fax varchar(20), -- fax number url varchar(255), -- web site email varchar(128), -- main email diff --git a/htdocs/install/mysql/tables/llx_socpeople.sql b/htdocs/install/mysql/tables/llx_socpeople.sql index 4e28d8df270..93b99e79d03 100644 --- a/htdocs/install/mysql/tables/llx_socpeople.sql +++ b/htdocs/install/mysql/tables/llx_socpeople.sql @@ -27,7 +27,9 @@ create table llx_socpeople fk_soc integer, -- lien vers la societe entity integer DEFAULT 1 NOT NULL, -- multi company id ref_ext varchar(255), -- reference into an external system (not used by dolibarr) - name_alias varchar(255), + name_alias varchar(255), + fk_parent integer NULL, + civility varchar(6), lastname varchar(50), firstname varchar(50), diff --git a/htdocs/install/mysql/tables/llx_ticket-ticket.key.sql b/htdocs/install/mysql/tables/llx_ticket-ticket.key.sql index 858f7c7eec5..e7bd5174263 100644 --- a/htdocs/install/mysql/tables/llx_ticket-ticket.key.sql +++ b/htdocs/install/mysql/tables/llx_ticket-ticket.key.sql @@ -22,7 +22,10 @@ ALTER TABLE llx_ticket ADD INDEX idx_ticket_fk_user_assign (fk_user_assign); ALTER TABLE llx_ticket ADD INDEX idx_ticket_fk_project (fk_project); ALTER TABLE llx_ticket ADD INDEX idx_ticket_fk_statut (fk_statut); +ALTER TABLE llx_ticket ADD UNIQUE INDEX uk_ticket_barcode_barcode_type (barcode, fk_barcode_type, entity); +ALTER TABLE llx_ticket ADD CONSTRAINT llx_ticket_fk_product_barcode_type FOREIGN KEY (fk_barcode_type) REFERENCES llx_c_barcode_type (rowid); + -- Idea for better perf to get last num of ticket on large databases ---ALTER TABLE llx_ticket ADD COLUMN calculated_numrefonly INTEGER AS (CASE SUBSTRING(ref FROM 1 FOR 2) WHEN 'TS' THEN CAST(SUBSTRING(ref FROM 8) AS SIGNED) ELSE 0 END) PERSISTENT; ---ALTER TABLE llx_ticket ADD INDEX idx_calculated_numrefonly (calculated_numrefonly); ---Then, the numering module can use the column calculated_numrefonly to get the max with SELECT MAX(calculated_numrefonly) FROM llx_ticket +-- ALTER TABLE llx_ticket ADD COLUMN calculated_numrefonly INTEGER AS (CASE SUBSTRING(ref FROM 1 FOR 2) WHEN 'TS' THEN CAST(SUBSTRING(ref FROM 8) AS SIGNED) ELSE 0 END) PERSISTENT; +-- ALTER TABLE llx_ticket ADD INDEX idx_calculated_numrefonly (calculated_numrefonly); +-- Then, the numering module can use the column calculated_numrefonly to get the max with SELECT MAX(calculated_numrefonly) FROM llx_ticket diff --git a/htdocs/install/mysql/tables/llx_ticket-ticket.sql b/htdocs/install/mysql/tables/llx_ticket-ticket.sql index 67e7ca419dd..7614bcc1ad7 100644 --- a/htdocs/install/mysql/tables/llx_ticket-ticket.sql +++ b/htdocs/install/mysql/tables/llx_ticket-ticket.sql @@ -26,6 +26,7 @@ CREATE TABLE llx_ticket fk_contract integer DEFAULT 0, origin_email varchar(128), origin_replyto varchar(128), + origin_references text, fk_user_create integer, fk_user_assign integer, subject varchar(255), @@ -49,5 +50,7 @@ CREATE TABLE llx_ticket model_pdf varchar(255), last_main_doc varchar(255), -- relative filepath+filename of last main generated document extraparams varchar(255), -- to save other parameters with json format + barcode varchar(255) DEFAULT NULL, -- barcode + fk_barcode_type integer DEFAULT NULL, -- barcode type import_key varchar(14) )ENGINE=innodb; diff --git a/htdocs/install/pgsql/functions/functions.sql b/htdocs/install/pgsql/functions/functions.sql index dacec28bd89..327fec5d17c 100644 --- a/htdocs/install/pgsql/functions/functions.sql +++ b/htdocs/install/pgsql/functions/functions.sql @@ -89,7 +89,7 @@ CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_chargesociales FOR E CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_commande FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_commande_extrafields FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_commande_fournisseur FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); -CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_commande_fournisseur_dispatch FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); +CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_receptiondet_batch FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_commande_fournisseur_extrafields FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_commande_fournisseur_log FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_commande_fournisseurdet_extrafields FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); @@ -159,6 +159,7 @@ CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_propal FOR EACH ROW CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_propal_extrafields FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_propal_merge_pdf_product FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_propaldet_extrafields FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); +CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_receptiondet_batch FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_resource FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_salary FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_societe FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); diff --git a/htdocs/install/repair.php b/htdocs/install/repair.php index e6dbe7cdc26..4f2b8adb94f 100644 --- a/htdocs/install/repair.php +++ b/htdocs/install/repair.php @@ -5,6 +5,7 @@ * Copyright (C) 2015 Raphaël Doursenaud * Copyright (C) 2021 Frédéric France * Copyright (C) 2023 Gauthier VERDOL + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -234,15 +235,15 @@ if ($ok && GETPOST('standard', 'alpha')) { $extrafields = new ExtraFields($db); // List of tables that has an extrafield table - $listofmodulesextra = array('societe'=>'societe', 'adherent'=>'adherent', 'product'=>'product', - 'socpeople'=>'socpeople', 'propal'=>'propal', 'commande'=>'commande', - 'facture'=>'facture', 'facturedet'=>'facturedet', 'facture_rec'=>'facture_rec', 'facturedet_rec'=>'facturedet_rec', - 'supplier_proposal'=>'supplier_proposal', 'commande_fournisseur'=>'commande_fournisseur', - 'facture_fourn'=>'facture_fourn', 'facture_fourn_rec'=>'facture_fourn_rec', 'facture_fourn_det'=>'facture_fourn_det', 'facture_fourn_det_rec'=>'facture_fourn_det_rec', - 'fichinter'=>'fichinter', 'fichinterdet'=>'fichinterdet', - 'inventory'=>'inventory', - 'actioncomm'=>'actioncomm', 'bom_bom'=>'bom_bom', 'mrp_mo'=>'mrp_mo', - 'adherent_type'=>'adherent_type', 'user'=>'user', 'partnership'=>'partnership', 'projet'=>'projet', 'projet_task'=>'projet_task', 'ticket'=>'ticket'); + $listofmodulesextra = array('societe' => 'societe', 'adherent' => 'adherent', 'product' => 'product', + 'socpeople' => 'socpeople', 'propal' => 'propal', 'commande' => 'commande', + 'facture' => 'facture', 'facturedet' => 'facturedet', 'facture_rec' => 'facture_rec', 'facturedet_rec' => 'facturedet_rec', + 'supplier_proposal' => 'supplier_proposal', 'commande_fournisseur' => 'commande_fournisseur', + 'facture_fourn' => 'facture_fourn', 'facture_fourn_rec' => 'facture_fourn_rec', 'facture_fourn_det' => 'facture_fourn_det', 'facture_fourn_det_rec' => 'facture_fourn_det_rec', + 'fichinter' => 'fichinter', 'fichinterdet' => 'fichinterdet', + 'inventory' => 'inventory', + 'actioncomm' => 'actioncomm', 'bom_bom' => 'bom_bom', 'mrp_mo' => 'mrp_mo', + 'adherent_type' => 'adherent_type', 'user' => 'user', 'partnership' => 'partnership', 'projet' => 'projet', 'projet_task' => 'projet_task', 'ticket' => 'ticket'); //$listofmodulesextra = array('fichinter'=>'fichinter'); print '
'; @@ -275,7 +276,7 @@ if ($ok && GETPOST('standard', 'alpha')) { if (in_array($fieldname, array('rowid', 'tms', 'fk_object', 'import_key'))) { continue; } - $arrayoffieldsfound[$fieldname] = array('type'=>$fieldtype); + $arrayoffieldsfound[$fieldname] = array('type' => $fieldtype); } print ' - Found '.count($arrayoffieldsfound).' fields into table'; if (count($arrayoffieldsfound) > 0) { @@ -318,12 +319,12 @@ if ($ok && GETPOST('standard', 'alpha')) { } $field_desc = array( - 'type'=>$typedb, - 'value'=>$lengthdb, - 'attribute'=>$attribute, - 'default'=>$default, - 'extra'=>$extra, - 'null'=>$null + 'type' => $typedb, + 'value' => $lengthdb, + 'attribute' => $attribute, + 'default' => $default, + 'extra' => $extra, + 'null' => $null ); //var_dump($field_desc);exit; @@ -510,7 +511,7 @@ if ($ok && GETPOST('restore_thirdparties_logos')) { if (!empty($name)) { $filetotest = $dolibarr_main_data_root.'/societe/logos/'.$name.$ext; $filetotestsmall = $dolibarr_main_data_root.'/societe/logos/thumbs/'.$name.'_small'.$ext; - $exists = dol_is_file($filetotest); + $exists = (int) dol_is_file($filetotest); print 'Check thirdparty '.$obj->rowid.' name='.$obj->name.' logo='.$obj->logo.' file '.$filetotest." exists=".$exists."
\n"; if ($exists) { $filetarget = $dolibarr_main_data_root.'/societe/'.$obj->rowid.'/logos/'.$name.$ext; @@ -585,7 +586,7 @@ if ($ok && GETPOST('restore_user_pictures', 'alpha')) { $filetotest = $dolibarr_main_data_root.'/users/'.substr(sprintf('%08d', $obj->rowid), -1, 1).'/'.substr(sprintf('%08d', $obj->rowid), -2, 1).'/'.$name.$ext; $filetotestsmall = $dolibarr_main_data_root.'/users/'.substr(sprintf('%08d', $obj->rowid), -1, 1).'/'.substr(sprintf('%08d', $obj->rowid), -2, 1).'/thumbs/'.$name.'_small'.$ext; $filetotestmini = $dolibarr_main_data_root.'/users/'.substr(sprintf('%08d', $obj->rowid), -1, 1).'/'.substr(sprintf('%08d', $obj->rowid), -2, 1).'/thumbs/'.$name.'_mini'.$ext; - $exists = dol_is_file($filetotest); + $exists = (int) dol_is_file($filetotest); print 'Check user '.$obj->rowid.' lastname='.$obj->lastname.' firstname='.$obj->firstname.' photo='.$obj->photo.' file '.$filetotest." exists=".$exists."
\n"; if ($exists) { $filetarget = $dolibarr_main_data_root.'/users/'.$obj->rowid.'/'.$name.$ext; @@ -1484,10 +1485,10 @@ if ($ok && GETPOST('repair_link_dispatch_lines_supplier_order_lines')) { $repair_link_dispatch_lines_supplier_order_lines = GETPOST('repair_link_dispatch_lines_supplier_order_lines', 'alpha'); - echo ''; + echo ''; echo ''; - $sql_dispatch = 'SELECT * FROM '.MAIN_DB_PREFIX.'commande_fournisseur_dispatch WHERE COALESCE(fk_commandefourndet, 0) = 0'; + $sql_dispatch = 'SELECT * FROM '.MAIN_DB_PREFIX.'receptiondet_batch WHERE COALESCE(fk_commandefourndet, 0) = 0'; $db->begin(); $resql_dispatch = $db->query($sql_dispatch); $n_processed_rows = 0; @@ -1527,7 +1528,7 @@ if ($ok && GETPOST('repair_link_dispatch_lines_supplier_order_lines')) { } $qty_for_line = min($remaining_qty, $obj_line->qty); if ($first_iteration) { - $sql_attach = 'UPDATE '.MAIN_DB_PREFIX.'commande_fournisseur_dispatch'; + $sql_attach = 'UPDATE '.MAIN_DB_PREFIX.'receptiondet_batch'; $sql_attach .= ' SET fk_commandefourndet = '.((int) $obj_line->rowid).', qty = '.((float) $qty_for_line); $sql_attach .= ' WHERE rowid = '.((int) $obj_dispatch->rowid); $first_iteration = false; @@ -1549,7 +1550,7 @@ if ($ok && GETPOST('repair_link_dispatch_lines_supplier_order_lines')) { ); $sql_attach_values = implode(', ', $sql_attach_values); - $sql_attach = 'INSERT INTO '.MAIN_DB_PREFIX.'commande_fournisseur_dispatch'; + $sql_attach = 'INSERT INTO '.MAIN_DB_PREFIX.'receptiondet_batch'; $sql_attach .= ' (fk_commande, fk_product, fk_commandefourndet, qty, fk_entrepot, fk_user, datec, comment, status, tms, batch, eatby, sellby)'; $sql_attach .= " VALUES (".$sql_attach_values.")"; } diff --git a/htdocs/install/step1.php b/htdocs/install/step1.php index 1df7e952ad8..cc16184788e 100644 --- a/htdocs/install/step1.php +++ b/htdocs/install/step1.php @@ -5,6 +5,7 @@ * Copyright (C) 2004 Sebastien Di Cintio * Copyright (C) 2005-2011 Regis Houssin * Copyright (C) 2015-2016 Raphaël Doursenaud + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -53,7 +54,7 @@ $db_host = GETPOST('db_host', 'alpha') ? GETPOST('db_host', 'alpha') : (empty($a $db_name = GETPOST('db_name', 'aZ09') ? GETPOST('db_name', 'aZ09') : (empty($argv[10]) ? '' : $argv[10]); $db_user = GETPOST('db_user', 'alpha') ? GETPOST('db_user', 'alpha') : (empty($argv[11]) ? '' : $argv[11]); $db_pass = GETPOST('db_pass', 'none') ? GETPOST('db_pass', 'none') : (empty($argv[12]) ? '' : $argv[12]); -$db_port = GETPOST('db_port', 'int') ? GETPOST('db_port', 'int') : (empty($argv[13]) ? '' : $argv[13]); +$db_port = GETPOSTINT('db_port') ? GETPOSTINT('db_port') : (empty($argv[13]) ? '' : $argv[13]); $db_prefix = GETPOST('db_prefix', 'aZ09') ? GETPOST('db_prefix', 'aZ09') : (empty($argv[14]) ? '' : $argv[14]); $db_create_database = GETPOST('db_create_database', 'alpha') ? GETPOST('db_create_database', 'alpha') : (empty($argv[15]) ? '' : $argv[15]); $db_create_user = GETPOST('db_create_user', 'alpha') ? GETPOST('db_create_user', 'alpha') : (empty($argv[16]) ? '' : $argv[16]); @@ -263,8 +264,7 @@ if (!$error) { $db = getDoliDBInstance($db_type, $db_host, $userroot, $passroot, $databasefortest, (int) $db_port); - dol_syslog("databasefortest=".$databasefortest." connected=".$db->connected." database_selected=".$db->database_selected, LOG_DEBUG); - //print "databasefortest=".$databasefortest." connected=".$db->connected." database_selected=".$db->database_selected; + dol_syslog("databasefortest=".$databasefortest." connected=".json_encode($db->connected)." database_selected=".json_encode($db->database_selected), LOG_DEBUG); if (empty($db_create_database) && $db->connected && !$db->database_selected) { print '
'.$langs->trans("ErrorConnectedButDatabaseNotFound", $db_name).'
'; @@ -951,67 +951,67 @@ function write_conf_file($conffile) fwrite($fp, "\n"); if (empty($force_dolibarr_lib_FPDF_PATH)) { fwrite($fp, '//'); - $force_dolibarr_lib_FPDF_PATH = ''; + $force_dolibarr_lib_FPDF_PATH = ''; // @phan-suppress-current-line PhanPluginRedundantAssignment } fwrite($fp, '$dolibarr_lib_FPDF_PATH="'.dol_escape_php(dol_sanitizePathName($force_dolibarr_lib_FPDF_PATH)).'";'); fwrite($fp, "\n"); if (empty($force_dolibarr_lib_TCPDF_PATH)) { fwrite($fp, '//'); - $force_dolibarr_lib_TCPDF_PATH = ''; + $force_dolibarr_lib_TCPDF_PATH = ''; // @phan-suppress-current-line PhanPluginRedundantAssignment } fwrite($fp, '$dolibarr_lib_TCPDF_PATH="'.dol_escape_php(dol_sanitizePathName($force_dolibarr_lib_TCPDF_PATH)).'";'); fwrite($fp, "\n"); if (empty($force_dolibarr_lib_FPDI_PATH)) { fwrite($fp, '//'); - $force_dolibarr_lib_FPDI_PATH = ''; + $force_dolibarr_lib_FPDI_PATH = ''; // @phan-suppress-current-line PhanPluginRedundantAssignment } fwrite($fp, '$dolibarr_lib_FPDI_PATH="'.dol_escape_php(dol_sanitizePathName($force_dolibarr_lib_FPDI_PATH)).'";'); fwrite($fp, "\n"); if (empty($force_dolibarr_lib_TCPDI_PATH)) { fwrite($fp, '//'); - $force_dolibarr_lib_TCPDI_PATH = ''; + $force_dolibarr_lib_TCPDI_PATH = ''; // @phan-suppress-current-line PhanPluginRedundantAssignment } fwrite($fp, '$dolibarr_lib_TCPDI_PATH="'.dol_escape_php(dol_sanitizePathName($force_dolibarr_lib_TCPDI_PATH)).'";'); fwrite($fp, "\n"); if (empty($force_dolibarr_lib_GEOIP_PATH)) { fwrite($fp, '//'); - $force_dolibarr_lib_GEOIP_PATH = ''; + $force_dolibarr_lib_GEOIP_PATH = ''; // @phan-suppress-current-line PhanPluginRedundantAssignment } fwrite($fp, '$dolibarr_lib_GEOIP_PATH="'.dol_escape_php(dol_sanitizePathName($force_dolibarr_lib_GEOIP_PATH)).'";'); fwrite($fp, "\n"); if (empty($force_dolibarr_lib_NUSOAP_PATH)) { fwrite($fp, '//'); - $force_dolibarr_lib_NUSOAP_PATH = ''; + $force_dolibarr_lib_NUSOAP_PATH = ''; // @phan-suppress-current-line PhanPluginRedundantAssignment } fwrite($fp, '$dolibarr_lib_NUSOAP_PATH="'.dol_escape_php(dol_sanitizePathName($force_dolibarr_lib_NUSOAP_PATH)).'";'); fwrite($fp, "\n"); if (empty($force_dolibarr_lib_ODTPHP_PATH)) { fwrite($fp, '//'); - $force_dolibarr_lib_ODTPHP_PATH = ''; + $force_dolibarr_lib_ODTPHP_PATH = ''; // @phan-suppress-current-line PhanPluginRedundantAssignment } fwrite($fp, '$dolibarr_lib_ODTPHP_PATH="'.dol_escape_php(dol_sanitizePathName($force_dolibarr_lib_ODTPHP_PATH)).'";'); fwrite($fp, "\n"); if (empty($force_dolibarr_lib_ODTPHP_PATHTOPCLZIP)) { fwrite($fp, '//'); - $force_dolibarr_lib_ODTPHP_PATHTOPCLZIP = ''; + $force_dolibarr_lib_ODTPHP_PATHTOPCLZIP = ''; // @phan-suppress-current-line PhanPluginRedundantAssignment } fwrite($fp, '$dolibarr_lib_ODTPHP_PATHTOPCLZIP="'.dol_escape_php(dol_sanitizePathName($force_dolibarr_lib_ODTPHP_PATHTOPCLZIP)).'";'); fwrite($fp, "\n"); if (empty($force_dolibarr_js_CKEDITOR)) { fwrite($fp, '//'); - $force_dolibarr_js_CKEDITOR = ''; + $force_dolibarr_js_CKEDITOR = ''; // @phan-suppress-current-line PhanPluginRedundantAssignment } fwrite($fp, '$dolibarr_js_CKEDITOR=\''.dol_escape_php($force_dolibarr_js_CKEDITOR, 1).'\';'); fwrite($fp, "\n"); if (empty($force_dolibarr_js_JQUERY)) { fwrite($fp, '//'); - $force_dolibarr_js_JQUERY = ''; + $force_dolibarr_js_JQUERY = ''; // @phan-suppress-current-line PhanPluginRedundantAssignment } fwrite($fp, '$dolibarr_js_JQUERY=\''.dol_escape_php($force_dolibarr_js_JQUERY, 1).'\';'); fwrite($fp, "\n"); if (empty($force_dolibarr_js_JQUERY_UI)) { fwrite($fp, '//'); - $force_dolibarr_js_JQUERY_UI = ''; + $force_dolibarr_js_JQUERY_UI = ''; // @phan-suppress-current-line PhanPluginRedundantAssignment } fwrite($fp, '$dolibarr_js_JQUERY_UI=\''.dol_escape_php($force_dolibarr_js_JQUERY_UI, 1).'\';'); fwrite($fp, "\n"); @@ -1020,13 +1020,13 @@ function write_conf_file($conffile) fwrite($fp, "\n"); if (empty($force_dolibarr_font_DOL_DEFAULT_TTF)) { fwrite($fp, '//'); - $force_dolibarr_font_DOL_DEFAULT_TTF = ''; + $force_dolibarr_font_DOL_DEFAULT_TTF = ''; // @phan-suppress-current-line PhanPluginRedundantAssignment } fwrite($fp, '$dolibarr_font_DOL_DEFAULT_TTF=\''.dol_escape_php($force_dolibarr_font_DOL_DEFAULT_TTF, 1).'\';'); fwrite($fp, "\n"); if (empty($force_dolibarr_font_DOL_DEFAULT_TTF_BOLD)) { fwrite($fp, '//'); - $force_dolibarr_font_DOL_DEFAULT_TTF_BOLD = ''; + $force_dolibarr_font_DOL_DEFAULT_TTF_BOLD = ''; // @phan-suppress-current-line PhanPluginRedundantAssignment } fwrite($fp, '$dolibarr_font_DOL_DEFAULT_TTF_BOLD=\''.dol_escape_php($force_dolibarr_font_DOL_DEFAULT_TTF_BOLD, 1).'\';'); fwrite($fp, "\n"); diff --git a/htdocs/install/step2.php b/htdocs/install/step2.php index 99170d4c9c6..f62e793beab 100644 --- a/htdocs/install/step2.php +++ b/htdocs/install/step2.php @@ -3,6 +3,7 @@ * Copyright (C) 2004-2010 Laurent Destailleur * Copyright (C) 2015 Cedric GROSS * Copyright (C) 2015-2016 Raphaël Doursenaud + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -171,7 +172,7 @@ if ($action == "set") { $ok = 0; $handle = opendir($dir); - dolibarr_install_syslog("step2: open tables directory ".$dir." handle=".$handle); + dolibarr_install_syslog("step2: open tables directory ".$dir." handle=".(is_bool($handle) ? json_encode($handle) : $handle)); $tablefound = 0; $tabledata = array(); if (is_resource($handle)) { @@ -269,7 +270,7 @@ if ($action == "set") { $okkeys = 0; $handle = opendir($dir); - dolibarr_install_syslog("step2: open keys directory ".$dir." handle=".$handle); + dolibarr_install_syslog("step2: open keys directory ".$dir." handle=".(is_bool($handle) ? json_encode($handle) : $handle)); $tablefound = 0; $tabledata = array(); if (is_resource($handle)) { @@ -400,7 +401,7 @@ if ($action == "set") { $file = "functions.sql"; if (file_exists($dir.$file)) { $fp = fopen($dir.$file, "r"); - dolibarr_install_syslog("step2: open function file ".$dir.$file." handle=".$fp); + dolibarr_install_syslog("step2: open function file ".$dir.$file." handle=".(is_bool($fp) ? json_encode($fp) : $fp)); if ($fp) { $buffer = ''; while (!feof($fp)) { @@ -467,7 +468,7 @@ if ($action == "set") { // Insert data $handle = opendir($dir); - dolibarr_install_syslog("step2: open directory data ".$dir." handle=".$handle); + dolibarr_install_syslog("step2: open directory data ".$dir." handle=".(is_bool($handle) ? json_encode($handle) : $handle)); $tablefound = 0; $tabledata = array(); if (is_resource($handle)) { @@ -492,7 +493,7 @@ if ($action == "set") { foreach ($tabledata as $file) { $name = substr($file, 0, dol_strlen($file) - 4); $fp = fopen($dir.$file, "r"); - dolibarr_install_syslog("step2: open data file ".$dir.$file." handle=".$fp); + dolibarr_install_syslog("step2: open data file ".$dir.$file." handle=".(is_bool($fp) ? json_encode($fp) : $fp)); if ($fp) { $arrayofrequests = array(); $linefound = 0; diff --git a/htdocs/install/step5.php b/htdocs/install/step5.php index a757ceb7c8d..e6da24464a6 100644 --- a/htdocs/install/step5.php +++ b/htdocs/install/step5.php @@ -136,6 +136,11 @@ if (empty($versionfrom) && empty($versionto) && !is_writable($conffile)) { exit; } +// Ensure $modulesdir is set and array +if (!isset($modulesdir) || !is_array($modulesdir)) { + $modulesdir = array(); +} + if ($action == "set" || empty($action) || preg_match('/upgrade/i', $action)) { $error = 0; diff --git a/htdocs/install/upgrade.php b/htdocs/install/upgrade.php index 7f2dfc0f0cd..d80205028c8 100644 --- a/htdocs/install/upgrade.php +++ b/htdocs/install/upgrade.php @@ -3,6 +3,7 @@ * Copyright (C) 2004-2018 Laurent Destailleur * Copyright (C) 2005-2010 Regis Houssin * Copyright (C) 2015-2016 Raphaël Doursenaud + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -417,7 +418,8 @@ if (!$ok && isset($argv[1])) { } dolibarr_install_syslog("Exit ".$ret); -dolibarr_install_syslog("--- upgrade: end ".((!$ok && empty($_GET["ignoreerrors"])) || $dirmodule)); +dolibarr_install_syslog("--- upgrade: end ".((int) (!$ok && empty($_GET["ignoreerrors"])))." dirmodule=".$dirmodule); + $nonext = (!$ok && empty($_GET["ignoreerrors"])) ? 2 : 0; if ($dirmodule) { $nonext = 1; diff --git a/htdocs/install/upgrade2.php b/htdocs/install/upgrade2.php index 9941d21ce26..931d2f5e44e 100644 --- a/htdocs/install/upgrade2.php +++ b/htdocs/install/upgrade2.php @@ -1575,7 +1575,7 @@ function migrate_price_facture($db, $langs, $conf) $facligne->total_ttc = $total_ttc; dolibarr_install_syslog("upgrade2: line ".$rowid.": facid=".$obj->facid." pu=".$pu." qty=".$qty." vatrate=".$vatrate." remise_percent=".$remise_percent." remise_global=".$remise_percent_global." -> ".$total_ht.", ".$total_tva.", ".$total_ttc); - print ". "; + print '. '; $facligne->update_total(); @@ -1676,29 +1676,9 @@ function migrate_price_propal($db, $langs, $conf) $propalligne->total_ttc = $total_ttc; dolibarr_install_syslog("upgrade2: Line ".$rowid.": propalid=".$obj->rowid." pu=".$pu." qty=".$qty." vatrate=".$vatrate." remise_percent=".$remise_percent." remise_global=".$remise_percent_global." -> ".$total_ht.", ".$total_tva.", ".$total_ttc); - print ". "; + print '. '; $propalligne->update_total(); - - /* On touche pas a propal mere - $propal = new Propal($db); - $propal->id=$obj->rowid; - if ( $propal->fetch($propal->id) >= 0 ) - { - if ( $propal->update_price() > 0 ) - { - print ". "; - } - else - { - print "Error id=".$propal->id; - } - } - else - { - print "Error #3"; - } - */ $i++; } } else { @@ -1780,7 +1760,7 @@ function migrate_price_contrat($db, $langs, $conf) $contratligne->total_ttc = $total_ttc; dolibarr_install_syslog("upgrade2: Line ".$rowid.": contratdetid=".$obj->rowid." pu=".$pu." qty=".$qty." vatrate=".$vatrate." remise_percent=".$remise_percent." -> ".$total_ht.", ".$total_tva." , ".$total_ttc); - print ". "; + print '. '; $contratligne->update_total(); $i++; @@ -1861,28 +1841,9 @@ function migrate_price_commande($db, $langs, $conf) $commandeligne->total_ttc = $total_ttc; dolibarr_install_syslog("upgrade2: Line ".$rowid." : commandeid=".$obj->rowid." pu=".$pu." qty=".$qty." vatrate=".$vatrate." remise_percent=".$remise_percent." remise_global=".$remise_percent_global." -> ".$total_ht.", ".$total_tva.", ".$total_ttc); - print ". "; + print '. '; $commandeligne->update_total(); - /* On touche pas a facture mere - $commande = new Commande($db); - $commande->id = $obj->rowid; - if ( $commande->fetch($commande->id) >= 0 ) - { - if ( $commande->update_price() > 0 ) - { - print ". "; - } - else - { - print "Error id=".$commande->id; - } - } - else - { - print "Error #3"; - } - */ $i++; } } else { @@ -1973,28 +1934,9 @@ function migrate_price_commande_fournisseur($db, $langs, $conf) $commandeligne->total_ttc = $total_ttc; dolibarr_install_syslog("upgrade2: Line ".$rowid.": commandeid=".$obj->rowid." pu=".$pu." qty=".$qty." vatrate=".$vatrate." remise_percent=".$remise_percent." remise_global=".$remise_percent_global." -> ".$total_ht.", ".$total_tva.", ".$total_ttc); - print ". "; + print '. '; $commandeligne->update_total(); - /* On touche pas a facture mere - $commande = new Commande($db); - $commande->id = $obj->rowid; - if ( $commande->fetch($commande->id) >= 0 ) - { - if ( $commande->update_price() > 0 ) - { - print ". "; - } - else - { - print "Error id=".$commande->id; - } - } - else - { - print "Error #3"; - } - */ $i++; } } else { @@ -2040,7 +1982,7 @@ function migrate_modeles($db, $langs, $conf) dolibarr_install_syslog("upgrade2::migrate_modeles"); - if (isModEnabled('facture')) { + if (isModEnabled('invoice')) { include_once DOL_DOCUMENT_ROOT.'/core/modules/facture/modules_facture.php'; $modellist = ModelePDFFactures::liste_modeles($db); if (count($modellist) == 0) { @@ -2053,7 +1995,7 @@ function migrate_modeles($db, $langs, $conf) } } - if (isModEnabled('commande')) { + if (isModEnabled('order')) { include_once DOL_DOCUMENT_ROOT.'/core/modules/commande/modules_commande.php'; $modellist = ModelePDFCommandes::liste_modeles($db); if (count($modellist) == 0) { @@ -2066,7 +2008,7 @@ function migrate_modeles($db, $langs, $conf) } } - if (isModEnabled("expedition")) { + if (isModEnabled("shipping")) { include_once DOL_DOCUMENT_ROOT.'/core/modules/expedition/modules_expedition.php'; $modellist = ModelePdfExpedition::liste_modeles($db); if (count($modellist) == 0) { @@ -2125,7 +2067,7 @@ function migrate_commande_expedition($db, $langs, $conf) $error++; dol_print_error($db); } - print ". "; + print '. '; $i++; } } @@ -2205,7 +2147,7 @@ function migrate_commande_livraison($db, $langs, $conf) $error++; dol_print_error($db); } - print ". "; + print '. '; $i++; } } @@ -2301,7 +2243,7 @@ function migrate_detail_livraison($db, $langs, $conf) $error++; dol_print_error($db); } - print ". "; + print '. '; $i++; } } @@ -2373,7 +2315,7 @@ function migrate_stocks($db, $langs, $conf) $error++; dol_print_error($db); } - print ". "; + print '. '; $i++; } } @@ -2437,7 +2379,7 @@ function migrate_menus($db, $langs, $conf) $error++; dol_print_error($db); } - print ". "; + print '. '; $i++; } } @@ -2505,7 +2447,7 @@ function migrate_commande_deliveryaddress($db, $langs, $conf) $error++; dol_print_error($db); } - print ". "; + print '. '; $i++; } } else { @@ -2589,7 +2531,7 @@ function migrate_restore_missing_links($db, $langs, $conf) $error++; dol_print_error($db); } - //print ". "; + //print '. '; $i++; } } else { @@ -2648,7 +2590,7 @@ function migrate_restore_missing_links($db, $langs, $conf) $error++; dol_print_error($db); } - //print ". "; + //print '. '; $i++; } } else { @@ -2725,7 +2667,7 @@ function migrate_project_user_resp($db, $langs, $conf) dol_print_error($db); } } - print ". "; + print '. '; $i++; } @@ -2803,7 +2745,7 @@ function migrate_project_task_actors($db, $langs, $conf) $error++; dol_print_error($db); } - print ". "; + print '. '; $i++; } } @@ -2884,7 +2826,7 @@ function migrate_relationship_tables($db, $langs, $conf, $table, $fk_source, $so $error++; dol_print_error($db); } - print ". "; + print '. '; $i++; } } else { @@ -2964,7 +2906,7 @@ function migrate_element_time($db, $langs, $conf) $error++; dol_print_error($db); } - print ". "; + print '. '; $oldtime++; if (!empty($totaltime[$obj->fk_element])) { $totaltime[$obj->fk_element] += $newtime; @@ -3073,7 +3015,7 @@ function migrate_customerorder_shipping($db, $langs, $conf) $error++; dol_print_error($db); } - print ". "; + print '. '; $i++; } } else { @@ -3160,7 +3102,7 @@ function migrate_shipping_delivery($db, $langs, $conf) $error++; dol_print_error($db); } - print ". "; + print '. '; } else { $error++; dol_print_error($db); @@ -3248,7 +3190,7 @@ function migrate_shipping_delivery2($db, $langs, $conf) $error++; dol_print_error($db); } - print ". "; + print '. '; $i++; } } else { @@ -3315,7 +3257,7 @@ function migrate_actioncomm_element($db, $langs, $conf) // We will drop at next version because a migrate should be runnable several times if it fails. //$sqlDrop = "ALTER TABLE ".MAIN_DB_PREFIX."actioncomm DROP COLUMN ".$field; //$db->query($sqlDrop); - //print ". "; + //print '. '; } else { dol_print_error($db); $db->rollback(); @@ -3392,7 +3334,7 @@ function migrate_mode_reglement($db, $langs, $conf) dol_print_error($db); $error++; } - print ". "; + print '. '; } if (!$error) { @@ -3536,7 +3478,7 @@ function migrate_categorie_association($db, $langs, $conf) $error++; dol_print_error($db); } - print ". "; + print '. '; $i++; } } else { @@ -3604,7 +3546,7 @@ function migrate_event_assignement($db, $langs, $conf) $error++; dol_print_error($db); } - print ". "; + print '. '; $i++; } } else { @@ -3670,7 +3612,7 @@ function migrate_event_assignement_contact($db, $langs, $conf) $error++; dol_print_error($db); } - print ". "; + print '. '; $i++; } } else { @@ -3837,7 +3779,7 @@ function migrate_remise_entity($db, $langs, $conf) dol_print_error($db); } - print ". "; + print '. '; $i++; } } else { @@ -3928,7 +3870,7 @@ function migrate_remise_except_entity($db, $langs, $conf) dol_print_error($db); } - print ". "; + print '. '; $i++; } } else { @@ -3993,7 +3935,7 @@ function migrate_user_rights_entity($db, $langs, $conf) dol_print_error($db); } - print ". "; + print '. '; $i++; } } else { @@ -4058,7 +4000,7 @@ function migrate_usergroup_rights_entity($db, $langs, $conf) dol_print_error($db); } - print ". "; + print '. '; $i++; } } else { diff --git a/htdocs/intracommreport/card.php b/htdocs/intracommreport/card.php index 358385af8f7..7adc9ea0eb7 100644 --- a/htdocs/intracommreport/card.php +++ b/htdocs/intracommreport/card.php @@ -43,7 +43,7 @@ require_once DOL_DOCUMENT_ROOT.'/intracommreport/class/intracommreport.class.php $langs->loadLangs(array("intracommreport")); // Get Parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $action = GETPOST('action'); $year = GETPOSTINT('year'); $month = GETPOSTINT('month'); @@ -108,7 +108,7 @@ if ($reshook < 0) { } if ($permissiontodelete && $action == 'confirm_delete' && $confirm == 'yes') { - $result = $object->delete($id, $user); + $result = $object->delete($user); if ($result > 0) { if (!empty($backtopage)) { header("Location: ".$backtopage); @@ -247,7 +247,7 @@ if ($id > 0 && $action != 'edit') { ); } print $form->formconfirm( - "card.php?rowid=".urlencode($id), + "card.php?rowid=".urlencode((string) ($id)), $langs->trans("DeleteReport"), $langs->trans("ConfirmDeleteReport"), "confirm_delete", diff --git a/htdocs/intracommreport/class/intracommreport.class.php b/htdocs/intracommreport/class/intracommreport.class.php index 9f689743e2a..3cbfd839537 100644 --- a/htdocs/intracommreport/class/intracommreport.class.php +++ b/htdocs/intracommreport/class/intracommreport.class.php @@ -1,7 +1,7 @@ * Copyright (C) 2019-2020 Open-DSI - * Copyright (C) 2020-2024 Frédéric France + * Copyright (C) 2020-2024 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -55,8 +55,10 @@ class IntracommReport extends CommonObject public $picto = 'intracommreport'; - - public $label; // ref ??? + /** + * @var string ref ??? + */ + public $label; public $period; @@ -67,7 +69,14 @@ class IntracommReport extends CommonObject */ public $declaration_number; + /** + * @var string + */ public $exporttype; // deb or des + + /** + * @var string + */ public $type_declaration; // 'introduction' or 'expedition' public $numero_declaration; @@ -125,12 +134,11 @@ class IntracommReport extends CommonObject /** * Function delete * - * @param int $id object ID * @param User $user User * @param int $notrigger notrigger * @return int */ - public function delete($id, $user, $notrigger = 0) + public function delete($user, $notrigger = 0) { return 1; } diff --git a/htdocs/intracommreport/list.php b/htdocs/intracommreport/list.php index bfe946431af..132163b1f89 100644 --- a/htdocs/intracommreport/list.php +++ b/htdocs/intracommreport/list.php @@ -34,22 +34,22 @@ $langs->loadLangs(array('intracommreport')); // Get Parameters $action = GETPOST('action', 'alpha'); $massaction = GETPOST('massaction', 'alpha'); -$show_files = GETPOST('show_files', 'int'); +$show_files = GETPOSTINT('show_files'); $confirm = GETPOST('confirm', 'alpha'); $toselect = GETPOST('toselect', 'array'); $search_all = trim((GETPOST('search_all', 'alphanohtml') != '') ? GETPOST('search_all', 'alphanohtml') : GETPOST('sall', 'alphanohtml')); $search_ref = GETPOST("search_ref", 'alpha'); -$search_type = GETPOST("search_type", 'int'); +$search_type = GETPOSTINT("search_type"); $optioncss = GETPOST('optioncss', 'alpha'); -$type = GETPOST("type", "int"); +$type = GETPOSTINT("type"); $diroutputmassaction = $conf->product->dir_output.'/temp/massgeneration/'.$user->id; -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // If $page is not defined, or '' or -1 or if we click on clear filters $page = 0; @@ -113,20 +113,20 @@ else $result=restrictedArea($user, 'produit|service', '', '', '', '', '', $objca // List of fields to search into when doing a "search in all" $fieldstosearchall = array( - 'i.ref'=>"Ref", - 'pfi.ref_fourn'=>"RefSupplier", - 'i.label'=>"ProductLabel", - 'i.description'=>"Description", - "i.note"=>"Note", + 'i.ref' => "Ref", + 'pfi.ref_fourn' => "RefSupplier", + 'i.label' => "ProductLabel", + 'i.description' => "Description", + "i.note" => "Note", ); $isInEEC = isInEEC($mysoc); // Definition of fields for lists $arrayfields = array( - 'i.ref' => array('label'=>$langs->trans("Ref"), 'checked'=>1), - 'i.label' => array('label'=>$langs->trans("Label"), 'checked'=>1), - 'i.fk_product_type'=>array('label'=>$langs->trans("Type"), 'checked'=>0, 'enabled'=>(isModEnabled("product") && isModEnabled("service"))), + 'i.ref' => array('label' => $langs->trans("Ref"), 'checked' => 1), + 'i.label' => array('label' => $langs->trans("Label"), 'checked' => 1), + 'i.fk_product_type' => array('label' => $langs->trans("Type"), 'checked' => 0, 'enabled' => (isModEnabled("product") && isModEnabled("service"))), ); /* @@ -360,7 +360,7 @@ $param .= $hookmanager->resPrint; // List of mass actions available $arrayofmassactions = array( - 'generate_doc'=>img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("ReGeneratePDF"), + 'generate_doc' => img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("ReGeneratePDF"), //'builddoc'=>$langs->trans("PDFMerge"), //'presend'=>$langs->trans("SendByMail"), ); @@ -415,6 +415,9 @@ if ($search_all) { $parameters = array(); $reshook = $hookmanager->executeHooks('printFieldPreListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook +if (!isset($moreforfilter)) { + $moreforfilter = ''; +} if (empty($reshook)) { $moreforfilter .= $hookmanager->resPrint; } else { @@ -431,7 +434,7 @@ if (!empty($moreforfilter)) { } $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; -$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')) : ''); // This also change content of $arrayfields +$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) : ''); // This also change content of $arrayfields $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); print '
'; @@ -470,7 +473,7 @@ if (!empty($arrayfields['customerorsupplier']['checked'])) { if (!empty($arrayfields['i.fk_product_type']['checked'])) { print '
'; } @@ -480,7 +483,7 @@ if (!empty($arrayfields['i.fk_product_type']['checked'])) { include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php'; */ // Fields from hook -$parameters = array('arrayfields'=>$arrayfields); +$parameters = array('arrayfields' => $arrayfields); $reshook = $hookmanager->executeHooks('printFieldListOption', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; // Date creation @@ -532,7 +535,7 @@ if (!empty($arrayfields['i.fk_product_type']['checked'])) { include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; */ // Hook fields -$parameters = array('arrayfields'=>$arrayfields, 'param'=>$param, 'sortfield'=>$sortfield, 'sortorder'=>$sortorder); +$parameters = array('arrayfields' => $arrayfields, 'param' => $param, 'sortfield' => $sortfield, 'sortorder' => $sortorder); $reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; if (!empty($arrayfields['i.datec']['checked'])) { diff --git a/htdocs/knowledgemanagement/class/api_knowledgemanagement.class.php b/htdocs/knowledgemanagement/class/api_knowledgemanagement.class.php index 90d222b0e59..8bb3e044889 100644 --- a/htdocs/knowledgemanagement/class/api_knowledgemanagement.class.php +++ b/htdocs/knowledgemanagement/class/api_knowledgemanagement.class.php @@ -257,9 +257,9 @@ class KnowledgeManagement extends DolibarrApi /** * Update knowledgerecord * - * @param int $id Id of knowledgerecord to update - * @param array $request_data Datas - * @return int + * @param int $id Id of knowledgerecord to update + * @param array $request_data Datas + * @return Object Updated object * * @throws RestException * diff --git a/htdocs/knowledgemanagement/class/knowledgerecord.class.php b/htdocs/knowledgemanagement/class/knowledgerecord.class.php index 41610f69de1..1bb1040553a 100644 --- a/htdocs/knowledgemanagement/class/knowledgerecord.class.php +++ b/htdocs/knowledgemanagement/class/knowledgerecord.class.php @@ -1,5 +1,7 @@ + * Copyright (C) 2024 Frédéric France + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -97,26 +99,26 @@ class KnowledgeRecord extends CommonObject // BEGIN MODULEBUILDER PROPERTIES /** - * @var array Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. + * @var array|string,position:int,notnull?:int,visible:int,noteditable?:int,default?:string,index?:int,foreignkey?:string,searchall?:int,isameasure?:int,css?:string,csslist?:string,help?:string,showoncombobox?:int,disabled?:int,arrayofkeyval?:array,comment?:string}> Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. */ - public $fields=array( - 'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>'1', 'position'=>1, 'notnull'=>1, 'visible'=>0, 'noteditable'=>'1', 'index'=>1, 'css'=>'left', 'comment'=>"Id"), - 'ref' => array('type'=>'varchar(128)', 'label'=>'Ref', 'enabled'=>'1', 'position'=>10, 'notnull'=>1, 'default'=>'(PROV)', 'visible'=>5, 'index'=>1, 'searchall'=>1, 'comment'=>"Reference of object", "csslist"=>"nowraponall", "showoncombobox"=>1), - 'entity' =>array('type'=>'integer', 'label'=>'Entity', 'default'=>1, 'enabled'=>1, 'visible'=>0, 'notnull'=>1, 'position'=>20, 'index'=>1), - 'question' => array('type'=>'text', 'label'=>'Question', 'enabled'=>'1', 'position'=>30, 'notnull'=>1, 'visible'=>1, 'searchall'=>1, 'csslist'=>'tdoverflowmax300', 'copytoclipboard'=>1, 'tdcss'=>'titlefieldcreate nowraponall'), - 'lang' => array('type'=>'varchar(6)', 'label'=>'Language', 'enabled'=>'1', 'position'=>40, 'notnull'=>0, 'visible'=>1, 'tdcss'=>'titlefieldcreate nowraponall', "csslist"=>"tdoverflowmax100"), - 'date_creation' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>'1', 'position'=>500, 'notnull'=>1, 'visible'=>-2,), - 'tms' => array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>'1', 'position'=>501, 'notnull'=>0, 'visible'=>2,), - 'last_main_doc' => array('type'=>'varchar(255)', 'label'=>'LastMainDoc', 'enabled'=>'1', 'position'=>600, 'notnull'=>0, 'visible'=>0,), - 'fk_user_creat' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserCreation', 'enabled'=>'1', 'position'=>510, 'notnull'=>1, 'visible'=>-2, 'foreignkey'=>'user.rowid',), - 'fk_user_modif' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserModif', 'enabled'=>'1', 'position'=>511, 'notnull'=>-1, 'visible'=>-2,), - 'fk_user_valid' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserValidation', 'enabled'=>'1', 'position'=>512, 'notnull'=>0, 'visible'=>-2,), - 'import_key' => array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>'1', 'position'=>1000, 'notnull'=>-1, 'visible'=>-2,), - 'model_pdf' => array('type'=>'varchar(255)', 'label'=>'Model pdf', 'enabled'=>'1', 'position'=>1010, 'notnull'=>-1, 'visible'=>0,), + public $fields = array( + 'rowid' => array('type' => 'integer', 'label' => 'TechnicalID', 'enabled' => 1, 'position' => 1, 'notnull' => 1, 'visible' => 0, 'noteditable' => 1, 'index' => 1, 'css' => 'left', 'comment' => "Id"), + 'ref' => array('type' => 'varchar(128)', 'label' => 'Ref', 'enabled' => 1, 'position' => 10, 'notnull' => 1, 'default' => '(PROV)', 'visible' => 5, 'index' => 1, 'searchall' => 1, 'comment' => "Reference of object", "csslist" => "nowraponall", "showoncombobox" => 1), + 'entity' => array('type' => 'integer', 'label' => 'Entity', 'default' => '1', 'enabled' => 1, 'visible' => 0, 'notnull' => 1, 'position' => 20, 'index' => 1), + 'question' => array('type' => 'text', 'label' => 'Question', 'enabled' => 1, 'position' => 30, 'notnull' => 1, 'visible' => 1, 'searchall' => 1, 'csslist' => 'tdoverflowmax300', 'copytoclipboard' => 1, 'tdcss' => 'titlefieldcreate nowraponall'), + 'lang' => array('type' => 'varchar(6)', 'label' => 'Language', 'enabled' => 1, 'position' => 40, 'notnull' => 0, 'visible' => 1, 'tdcss' => 'titlefieldcreate nowraponall', "csslist" => "tdoverflowmax100"), + 'date_creation' => array('type' => 'datetime', 'label' => 'DateCreation', 'enabled' => 1, 'position' => 500, 'notnull' => 1, 'visible' => -2,), + 'tms' => array('type' => 'timestamp', 'label' => 'DateModification', 'enabled' => 1, 'position' => 501, 'notnull' => 0, 'visible' => 2,), + 'last_main_doc' => array('type' => 'varchar(255)', 'label' => 'LastMainDoc', 'enabled' => 1, 'position' => 600, 'notnull' => 0, 'visible' => 0,), + 'fk_user_creat' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'UserCreation', 'enabled' => 1, 'position' => 510, 'notnull' => 1, 'visible' => -2, 'foreignkey' => 'user.rowid',), + 'fk_user_modif' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'UserModif', 'enabled' => 1, 'position' => 511, 'notnull' => -1, 'visible' => -2,), + 'fk_user_valid' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'UserValidation', 'enabled' => 1, 'position' => 512, 'notnull' => 0, 'visible' => -2,), + 'import_key' => array('type' => 'varchar(14)', 'label' => 'ImportId', 'enabled' => 1, 'position' => 1000, 'notnull' => -1, 'visible' => -2,), + 'model_pdf' => array('type' => 'varchar(255)', 'label' => 'Model pdf', 'enabled' => 1, 'position' => 1010, 'notnull' => -1, 'visible' => 0,), //'url' => array('type'=>'varchar(255)', 'label'=>'URL', 'enabled'=>'1', 'position'=>55, 'notnull'=>0, 'visible'=>-1, 'csslist'=>'tdoverflow200', 'help'=>'UrlForInfoPage'), - 'fk_c_ticket_category' => array('type'=>'integer:CTicketCategory:ticket/class/cticketcategory.class.php:0:(t.active:=:1):pos', 'label'=>'SuggestedForTicketsInGroup', 'enabled'=>'isModEnabled("ticket")', 'position'=>520, 'notnull'=>0, 'visible'=>-1, 'help'=>'YouCanLinkArticleToATicketCategory', 'csslist'=>'minwidth200 tdoverflowmax250'), - 'answer' => array('type'=>'html', 'label'=>'Solution', 'enabled'=>'1', 'position'=>600, 'notnull'=>0, 'visible'=>3, 'searchall'=>1, 'csslist'=>'tdoverflowmax300', 'copytoclipboard'=>1, 'tdcss'=>'titlefieldcreate nowraponall'), - 'status' => array('type'=>'integer', 'label'=>'Status', 'enabled'=>'1', 'position'=>1000, 'notnull'=>1, 'visible'=>5, 'default'=>0, 'index'=>1, 'arrayofkeyval'=>array('0'=>'Draft', '1'=>'Validated', '9'=>'Obsolete'),), + 'fk_c_ticket_category' => array('type' => 'integer:CTicketCategory:ticket/class/cticketcategory.class.php:0:(t.active:=:1):pos', 'label' => 'SuggestedForTicketsInGroup', 'enabled' => 'isModEnabled("ticket")', 'position' => 520, 'notnull' => 0, 'visible' => -1, 'help' => 'YouCanLinkArticleToATicketCategory', 'csslist' => 'minwidth200 tdoverflowmax250'), + 'answer' => array('type' => 'html', 'label' => 'Solution', 'enabled' => 1, 'position' => 600, 'notnull' => 0, 'visible' => 3, 'searchall' => 1, 'csslist' => 'tdoverflowmax300', 'copytoclipboard' => 1, 'tdcss' => 'titlefieldcreate nowraponall'), + 'status' => array('type' => 'integer', 'label' => 'Status', 'enabled' => 1, 'position' => 1000, 'notnull' => 1, 'visible' => 5, 'default' => '0', 'index' => 1, 'arrayofkeyval' => array('0' => 'Draft', '1' => 'Validated', '9' => 'Obsolete'),), ); public $rowid; public $ref; @@ -187,7 +189,7 @@ class KnowledgeRecord extends CommonObject */ public function __construct(DoliDB $db) { - global $conf, $langs; + global $langs; $this->db = $db; @@ -368,18 +370,16 @@ class KnowledgeRecord extends CommonObject /** * Load list of objects in memory from the database. * - * @param string $sortorder Sort Order - * @param string $sortfield Sort field - * @param int $limit limit - * @param int $offset Offset - * @param array $filter Filter array. Example array('field'=>'valueforlike', 'customurl'=>...) - * @param string $filtermode Filter mode (AND or OR) - * @return array|int int <0 if KO, array of pages if OK + * @param string $sortorder Sort Order + * @param string $sortfield Sort field + * @param int $limit Limit + * @param int $offset Offset + * @param string|array $filter Filter USF. + * @param string $filtermode Filter mode (AND or OR) + * @return array|int int <0 if KO, array of pages if OK */ - public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND') + public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, $filter = '', $filtermode = 'AND') { - global $conf; - dol_syslog(__METHOD__, LOG_DEBUG); $records = array(); @@ -392,25 +392,37 @@ class KnowledgeRecord extends CommonObject } else { $sql .= ' WHERE 1 = 1'; } + // Manage filter - $sqlwhere = array(); - if (count($filter) > 0) { - foreach ($filter as $key => $value) { - if ($key == 't.rowid') { - $sqlwhere[] = $key." = ".((int) $value); - } elseif (in_array($this->fields[$key]['type'], array('date', 'datetime', 'timestamp'))) { - $sqlwhere[] = $key." = '".$this->db->idate($value)."'"; - } elseif ($key == 'customsql') { - $sqlwhere[] = $value; - } elseif (strpos($value, '%') === false) { - $sqlwhere[] = $key.' IN ('.$this->db->sanitize($this->db->escape($value)).')'; - } else { - $sqlwhere[] = $key." LIKE '%".$this->db->escape($value)."%'"; + if (is_array($filter)) { + $sqlwhere = array(); + if (count($filter) > 0) { + foreach ($filter as $key => $value) { + if ($key == 't.rowid') { + $sqlwhere[] = $this->db->sanitize($key)." = ".((int) $value); + } elseif (array_key_exists($key, $this->fields) && in_array($this->fields[$key]['type'], array('date', 'datetime', 'timestamp'))) { + $sqlwhere[] = $this->db->sanitize($key)." = '".$this->db->idate($value)."'"; + } elseif (strpos($value, '%') === false) { + $sqlwhere[] = $this->db->sanitize($key).' IN ('.$this->db->sanitize($this->db->escape($value)).')'; + } else { + $sqlwhere[] = $this->db->sanitize($key)." LIKE '%".$this->db->escape($this->db->escapeforlike($value))."%'"; + } } } + if (count($sqlwhere) > 0) { + $sql .= ' AND ('.implode(' '.$this->db->escape($filtermode).' ', $sqlwhere).')'; + } + + $filter = ''; } - if (count($sqlwhere) > 0) { - $sql .= ' AND ('.implode(' '.$this->db->escape($filtermode).' ', $sqlwhere).')'; + + // Manage filter + $errormessage = ''; + $sql .= forgeSQLFromUniversalSearchCriteria($filter, $errormessage); + if ($errormessage) { + $this->errors[] = $errormessage; + dol_syslog(__METHOD__.' '.implode(',', $this->errors), LOG_ERR); + return -1; } if (!empty($sortfield)) { @@ -746,7 +758,7 @@ class KnowledgeRecord extends CommonObject $labellang = ($this->lang ? $langs->trans('Language_'.$this->lang) : ''); $datas['lang'] = '
'.$langs->trans('Language').': ' . picto_from_langcode($this->lang, 'class="paddingrightonly saturatemedium opacitylow"') . $labellang; // show categories for this record only in ajax to not overload lists - if (isModEnabled('categorie') && !$nofetch) { + if (isModEnabled('category') && !$nofetch) { require_once DOL_DOCUMENT_ROOT . '/categories/class/categorie.class.php'; $form = new Form($this->db); $datas['categories'] = '
' . $form->showCategories($this->id, Categorie::TYPE_KNOWLEDGEMANAGEMENT, 1); @@ -868,7 +880,7 @@ class KnowledgeRecord extends CommonObject global $action, $hookmanager; $hookmanager->initHooks(array('knowledgerecorddao')); - $parameters = array('id'=>$this->id, 'getnomurl' => &$result); + $parameters = array('id' => $this->id, 'getnomurl' => &$result); $reshook = $hookmanager->executeHooks('getNomUrl', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks if ($reshook > 0) { $result = $hookmanager->resPrint; @@ -958,12 +970,13 @@ class KnowledgeRecord extends CommonObject * Initialise object with example values * Id must be 0 if object instance is a specimen * - * @return void + * @return int */ public function initAsSpecimen() { $this->question = "ABCD"; - $this->initAsSpecimenCommon(); + + return $this->initAsSpecimenCommon(); } /** @@ -976,7 +989,7 @@ class KnowledgeRecord extends CommonObject $this->lines = array(); $objectline = new KnowledgeRecordLine($this->db); - $result = $objectline->fetchAll('ASC', 'position', 0, 0, array('customsql'=>'fk_knowledgerecord = '.((int) $this->id))); + $result = $objectline->fetchAll('ASC', 'position', 0, 0, '(fk_knowledgerecord:=:'.((int) $this->id).')'); if (is_numeric($result)) { $this->error = $objectline->error; diff --git a/htdocs/knowledgemanagement/core/modules/knowledgemanagement/mod_knowledgerecord_standard.php b/htdocs/knowledgemanagement/core/modules/knowledgemanagement/mod_knowledgerecord_standard.php index 3d509d7d25c..c4652df83b1 100644 --- a/htdocs/knowledgemanagement/core/modules/knowledgemanagement/mod_knowledgerecord_standard.php +++ b/htdocs/knowledgemanagement/core/modules/knowledgemanagement/mod_knowledgerecord_standard.php @@ -1,6 +1,7 @@ * Copyright (C) 2005-2009 Regis Houssin + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -154,7 +155,7 @@ class mod_knowledgerecord_standard extends ModeleNumRefKnowledgeRecord if ($max >= (pow(10, 4) - 1)) { $num = $max + 1; // If counter > 9999, we do not format on 4 chars, we take number as it is } else { - $num = sprintf("%04s", $max + 1); + $num = sprintf("%04d", $max + 1); } dol_syslog("mod_knowledgerecord_standard::getNextValue return ".$this->prefix.$yymm."-".$num); diff --git a/htdocs/knowledgemanagement/knowledgemanagementindex.php b/htdocs/knowledgemanagement/knowledgemanagementindex.php index 9fbfce3b76f..e9577a3bf6d 100644 --- a/htdocs/knowledgemanagement/knowledgemanagementindex.php +++ b/htdocs/knowledgemanagement/knowledgemanagementindex.php @@ -39,7 +39,7 @@ $action = GETPOST('action', 'aZ09'); // if (! $user->rights->knowledgemanagement->myobject->read) { // accessforbidden(); // } -$socid = GETPOST('socid', 'int'); +$socid = GETPOSTINT('socid'); if (isset($user->socid) && $user->socid > 0) { $action = ''; $socid = $user->socid; diff --git a/htdocs/knowledgemanagement/knowledgerecord_agenda.php b/htdocs/knowledgemanagement/knowledgerecord_agenda.php index 3d4445518ee..4ed3b95b63b 100644 --- a/htdocs/knowledgemanagement/knowledgerecord_agenda.php +++ b/htdocs/knowledgemanagement/knowledgerecord_agenda.php @@ -36,12 +36,12 @@ require_once DOL_DOCUMENT_ROOT.'/knowledgemanagement/lib/knowledgemanagement_kno $langs->loadLangs(array("knowledgemanagement", "other")); // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'aZ09'); $backtopage = GETPOST('backtopage', 'alpha'); -$socid = GETPOST('socid', 'int'); +$socid = GETPOSTINT('socid'); if (GETPOST('actioncode', 'array')) { $actioncode = GETPOST('actioncode', 'array', 3); @@ -54,10 +54,10 @@ if (GETPOST('actioncode', 'array')) { $search_rowid = GETPOST('search_rowid'); $search_agenda_label = GETPOST('search_agenda_label'); -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -98,7 +98,7 @@ $permissiontoadd = $user->hasRight('knowledgemanagement', 'knowledgerecord', 'wr * Actions */ -$parameters = array('id'=>$id); +$parameters = array('id' => $id); $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); @@ -203,14 +203,14 @@ if ($object->id > 0) { $objthirdparty = $object; $objcon = new stdClass(); - $out = '&origin='.urlencode($object->element.'@'.$object->module).'&originid='.urlencode($object->id); + $out = '&origin='.urlencode((string) ($object->element.'@'.$object->module)).'&originid='.urlencode((string) ($object->id)); $urlbacktopage = $_SERVER['PHP_SELF'].'?id='.$object->id; $out .= '&backtopage='.urlencode($urlbacktopage); $permok = $user->hasRight('agenda', 'myactions', 'create'); if ((!empty($objthirdparty->id) || !empty($objcon->id)) && $permok) { //$out.='loadLangs(array("knowledgemanagement", "ticket", "other")); // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm', 'alpha'); @@ -44,7 +44,7 @@ $cancel = GETPOST('cancel', 'aZ09'); $contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'knowledgerecordcard'; // To manage different context of search $backtopage = GETPOST('backtopage', 'alpha'); $backtopageforcancel = GETPOST('backtopageforcancel', 'alpha'); -$lineid = GETPOST('lineid', 'int'); +$lineid = GETPOSTINT('lineid'); // Initialize technical objects $object = new KnowledgeRecord($db); @@ -139,10 +139,10 @@ if (empty($reshook)) { include DOL_DOCUMENT_ROOT.'/core/actions_builddoc.inc.php'; if ($action == 'set_thirdparty' && $permissiontoadd) { - $object->setValueFrom('fk_soc', GETPOST('fk_soc', 'int'), '', '', 'date', '', $user, $triggermodname); + $object->setValueFrom('fk_soc', GETPOSTINT('fk_soc'), '', '', 'date', '', $user, $triggermodname); } if ($action == 'classin' && $permissiontoadd) { - $object->setProject(GETPOST('projectid', 'int')); + $object->setProject(GETPOSTINT('projectid')); } // Actions to send emails @@ -191,7 +191,7 @@ if ($action == 'create') { include DOL_DOCUMENT_ROOT.'/core/tpl/commonfields_add.tpl.php'; $object->fields['answer']['enabled'] = 1; - if (isModEnabled('categorie')) { + if (isModEnabled('category')) { $cate_arbo = $form->select_all_categories(Categorie::TYPE_KNOWLEDGEMANAGEMENT, '', 'parent', 64, 0, 1); if (count($cate_arbo)) { @@ -248,7 +248,7 @@ if (($id || $ref) && $action == 'edit') { include DOL_DOCUMENT_ROOT.'/core/tpl/commonfields_edit.tpl.php'; $object->fields['answer']['enabled'] = 1; - if (isModEnabled('categorie')) { + if (isModEnabled('category')) { $cate_arbo = $form->select_all_categories(Categorie::TYPE_KNOWLEDGEMANAGEMENT, '', 'parent', 64, 0, 1); if (count($cate_arbo)) { @@ -433,7 +433,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea $object->fields['answer']['enabled'] = 1; // Categories - if (isModEnabled('categorie')) { + if (isModEnabled('category')) { print '
"; diff --git a/htdocs/knowledgemanagement/knowledgerecord_contact.php b/htdocs/knowledgemanagement/knowledgerecord_contact.php index ced6e806c6f..e793d61dbe9 100644 --- a/htdocs/knowledgemanagement/knowledgerecord_contact.php +++ b/htdocs/knowledgemanagement/knowledgerecord_contact.php @@ -33,10 +33,10 @@ require_once DOL_DOCUMENT_ROOT.'/knowledgemanagement/lib/knowledgemanagement_kno // Load translation files required by the page $langs->loadLangs(array("knowledgemanagement", "companies", "other", "mails")); -$id = (GETPOST('id') ? GETPOST('id', 'int') : GETPOST('facid', 'int')); // For backward compatibility +$id = (GETPOST('id') ? GETPOSTINT('id') : GETPOSTINT('facid')); // For backward compatibility $ref = GETPOST('ref', 'alpha'); -$lineid = GETPOST('lineid', 'int'); -$socid = GETPOST('socid', 'int'); +$lineid = GETPOSTINT('lineid'); +$socid = GETPOSTINT('socid'); $action = GETPOST('action', 'aZ09'); // Initialize technical objects @@ -64,7 +64,7 @@ $permission = $user->hasRight('knowledgemanagement', 'knowledgerecord', 'write') */ if ($action == 'addcontact' && $permission) { - $contactid = (GETPOST('userid') ? GETPOST('userid', 'int') : GETPOST('contactid', 'int')); + $contactid = (GETPOST('userid') ? GETPOSTINT('userid') : GETPOSTINT('contactid')); $typeid = (GETPOST('typecontact') ? GETPOST('typecontact') : GETPOST('type')); $result = $object->add_contact($contactid, $typeid, GETPOST("source", 'aZ09')); @@ -81,7 +81,7 @@ if ($action == 'addcontact' && $permission) { } } elseif ($action == 'swapstatut' && $permission) { // Toggle the status of a contact - $result = $object->swapContactStatus(GETPOST('ligne', 'int')); + $result = $object->swapContactStatus(GETPOSTINT('ligne')); } elseif ($action == 'deletecontact' && $permission) { // Deletes a contact $result = $object->delete_contact($lineid); diff --git a/htdocs/knowledgemanagement/knowledgerecord_document.php b/htdocs/knowledgemanagement/knowledgerecord_document.php index 75780701b36..fa4d8f75ed7 100644 --- a/htdocs/knowledgemanagement/knowledgerecord_document.php +++ b/htdocs/knowledgemanagement/knowledgerecord_document.php @@ -38,14 +38,14 @@ $langs->loadLangs(array("knowledgemanagement", "companies", "other", "mails")); $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm'); -$id = (GETPOST('socid', 'int') ? GETPOST('socid', 'int') : GETPOST('id', 'int')); +$id = (GETPOSTINT('socid') ? GETPOSTINT('socid') : GETPOSTINT('id')); $ref = GETPOST('ref', 'alpha'); // Get parameters -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 diff --git a/htdocs/knowledgemanagement/knowledgerecord_list.php b/htdocs/knowledgemanagement/knowledgerecord_list.php index 84445dc5ffd..f2ee512c004 100644 --- a/htdocs/knowledgemanagement/knowledgerecord_list.php +++ b/htdocs/knowledgemanagement/knowledgerecord_list.php @@ -25,27 +25,20 @@ // Load Dolibarr environment require '../main.inc.php'; - -require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formadmin.class.php'; +require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcategory.class.php'; +require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; - -// load knowledgemanagement libraries require_once DOL_DOCUMENT_ROOT.'/knowledgemanagement/class/knowledgerecord.class.php'; - -// for other modules -if (isModEnabled('categorie')) { - require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; -} -//dol_include_once('/othermodule/class/otherobject.class.php'); +require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; // Load translation files required by the page $langs->loadLangs(array("knowledgemanagement", "other")); $action = GETPOST('action', 'aZ09') ? GETPOST('action', 'aZ09') : 'view'; // The action 'add', 'create', 'edit', 'update', 'view', ... $massaction = GETPOST('massaction', 'alpha'); // The bulk action (combo box choice into lists) -$show_files = GETPOST('show_files', 'int'); // Show files area generated by bulk actions ? +$show_files = GETPOSTINT('show_files'); // Show files area generated by bulk actions ? $confirm = GETPOST('confirm', 'alpha'); // Result of a confirmation $cancel = GETPOST('cancel', 'alpha'); // We click on a Cancel button $toselect = GETPOST('toselect', 'array'); // Array of ids of elements selected into a list @@ -54,20 +47,20 @@ $backtopage = GETPOST('backtopage', 'alpha'); // Go back to a dedicated page $optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print') $mode = GETPOST('mode', 'aZ09'); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $searchCategoryKnowledgemanagementList = GETPOST('search_category_knowledgemanagement_list', 'array'); $searchCategoryKnowledgemanagementOperator = 0; if (GETPOSTISSET('formfilteraction')) { - $searchCategoryKnowledgemanagementOperator = GETPOST('search_category_knowledgemanagement_operator', 'int'); + $searchCategoryKnowledgemanagementOperator = GETPOSTINT('search_category_knowledgemanagement_operator'); } elseif (getDolGlobalString('MAIN_SEARCH_CAT_OR_BY_DEFAULT')) { $searchCategoryKnowledgemanagementOperator = getDolGlobalString('MAIN_SEARCH_CAT_OR_BY_DEFAULT'); } // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // If $page is not defined, or '' or -1 or if we click on clear filters $page = 0; @@ -108,8 +101,8 @@ foreach ($object->fields as $key => $val) { } if (preg_match('/^(date|timestamp|datetime)/', $val['type'])) { - $search[$key.'_dtstart'] = dol_mktime(0, 0, 0, GETPOST('search_'.$key.'_dtstartmonth', 'int'), GETPOST('search_'.$key.'_dtstartday', 'int'), GETPOST('search_'.$key.'_dtstartyear', 'int')); - $search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOST('search_'.$key.'_dtendmonth', 'int'), GETPOST('search_'.$key.'_dtendday', 'int'), GETPOST('search_'.$key.'_dtendyear', 'int')); + $search[$key.'_dtstart'] = dol_mktime(0, 0, 0, GETPOSTINT('search_'.$key.'_dtstartmonth'), GETPOSTINT('search_'.$key.'_dtstartday'), GETPOSTINT('search_'.$key.'_dtstartyear')); + $search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOSTINT('search_'.$key.'_dtendmonth'), GETPOSTINT('search_'.$key.'_dtendday'), GETPOSTINT('search_'.$key.'_dtendyear')); } } @@ -130,7 +123,7 @@ foreach ($object->fields as $key => $val) { $arrayfields['t.'.$key] = array( 'label'=>$val['label'], 'checked'=>(($visible < 0) ? 0 : 1), - 'enabled'=>(abs($visible) != 3 && dol_eval($val['enabled'], 1)), + 'enabled'=>(abs($visible) != 3 && (int) dol_eval($val['enabled'], 1)), 'position'=>$val['position'], 'help'=> isset($val['help']) ? $val['help'] : '' ); @@ -417,9 +410,9 @@ foreach ($search as $key => $val) { } } } elseif (preg_match('/(_dtstart|_dtend)$/', $key) && !empty($val)) { - $param .= '&search_'.$key.'month='.((int) GETPOST('search_'.$key.'month', 'int')); - $param .= '&search_'.$key.'day='.((int) GETPOST('search_'.$key.'day', 'int')); - $param .= '&search_'.$key.'year='.((int) GETPOST('search_'.$key.'year', 'int')); + $param .= '&search_'.$key.'month='.(GETPOSTINT('search_'.$key.'month')); + $param .= '&search_'.$key.'day='.(GETPOSTINT('search_'.$key.'day')); + $param .= '&search_'.$key.'year='.(GETPOSTINT('search_'.$key.'year')); } elseif ($search[$key] != '') { $param .= '&search_'.$key.'='.urlencode($search[$key]); } @@ -447,7 +440,7 @@ if (isModEnabled('category') && $user->hasRight('knowledgemanagement', 'knowledg if (!empty($permissiontodelete)) { $arrayofmassactions['predelete'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete"); } -if (GETPOST('nomassaction', 'int') || in_array($massaction, array('presend', 'predelete'))) { +if (GETPOSTINT('nomassaction') || in_array($massaction, array('presend', 'predelete'))) { $arrayofmassactions = array(); } $massactionbutton = $form->selectMassAction('', $arrayofmassactions); @@ -498,7 +491,10 @@ $moreforfilter.= '';*/ // Filter on categories $moreforfilter = ''; -if (isModEnabled('categorie') && $user->hasRight('categorie', 'lire')) { +if (isModEnabled('category') && $user->hasRight('categorie', 'lire')) { + $formcategory = new FormCategory($db); + $moreforfilter .= $formcategory->getFilterBox(Categorie::TYPE_KNOWLEDGEMANAGEMENT, $searchCategoryKnowledgemanagementList, 'minwidth300', $searchCategoryKnowledgemanagementList ? $searchCategoryKnowledgemanagementList : 0); + /* $moreforfilter .= '
'; $moreforfilter .= img_picto($langs->trans('Categories'), 'category', 'class="pictofixedwidth"'); $categoriesKnowledgeArr = $form->select_all_categories(Categorie::TYPE_KNOWLEDGEMANAGEMENT, '', '', 64, 0, 1); @@ -506,6 +502,7 @@ if (isModEnabled('categorie') && $user->hasRight('categorie', 'lire')) { $moreforfilter .= Form::multiselectarray('search_category_knowledgemanagement_list', $categoriesKnowledgeArr, $searchCategoryKnowledgemanagementList, 0, 0, 'minwidth300'); $moreforfilter .= ' '; $moreforfilter .= '
'; + */ } $parameters = array(); @@ -526,7 +523,7 @@ if (!empty($moreforfilter)) { } $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; -$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')); // This also change content of $arrayfields +$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')); // This also change content of $arrayfields $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); print '
'; // You can use div-table-responsive-no-min if you don't need reserved height for your table diff --git a/htdocs/knowledgemanagement/knowledgerecord_note.php b/htdocs/knowledgemanagement/knowledgerecord_note.php index 053b0264a02..7d5401cb9d0 100644 --- a/htdocs/knowledgemanagement/knowledgerecord_note.php +++ b/htdocs/knowledgemanagement/knowledgerecord_note.php @@ -32,7 +32,7 @@ require_once DOL_DOCUMENT_ROOT.'/knowledgemanagement/lib/knowledgemanagement_kno $langs->loadLangs(array("knowledgemanagement", "companies")); // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'aZ09'); diff --git a/htdocs/langs/am_ET/accountancy.lang b/htdocs/langs/am_ET/accountancy.lang index e416c2c3c7c..14ee7f9d45b 100644 --- a/htdocs/langs/am_ET/accountancy.lang +++ b/htdocs/langs/am_ET/accountancy.lang @@ -287,7 +287,7 @@ TotalVente=ከታክስ በፊት ጠቅላላ ገቢ TotalMarge=ጠቅላላ የሽያጭ ህዳግ DescVentilCustomer=ከመለያው ገበታ ወደ ምርት መለያ የታሰሩ (ወይም ያልሆኑ) የደንበኛ የክፍያ መጠየቂያ መስመሮችን ዝርዝር እዚህ ይመልከቱ -DescVentilMore=በአብዛኛዎቹ ሁኔታዎች አስቀድሞ የተገለጹ ምርቶችን ወይም አገልግሎቶችን ከተጠቀሙ እና መለያውን (ከሂሳብ ሠንጠረዥ) በምርት/አገልግሎት ካርዱ ላይ ካስቀመጡት አፕሊኬሽኑ በሂሳብ መጠየቂያ መስመሮችዎ እና በገበታዎ የሂሳብ መዝገብ መካከል ያሉትን ሁሉንም ግንኙነቶች ማድረግ ይችላል። የመለያዎች፣ ልክ በአንድ ጠቅታ "%s"b0a65d071f6f6 >. መለያ በምርት/አገልግሎት ካርዶች ላይ ካልተዋቀረ ወይም አሁንም አንዳንድ ከመለያ ጋር ያልተያያዙ መስመሮች ካሉዎት ከ"%s"። +DescVentilMore=In most cases, if you use predefined products or services and you set the account (from chart of account) on the product/service card, the application will be able to make all the binding between your invoice lines and the accounting account of your chart of accounts, just in one click with the button "%s". If account was not set on product/service cards or if you still have some lines not bound to an account, you will have to make a manual binding from the menu "%s". DescVentilDoneCustomer=የክፍያ መጠየቂያ ደረሰኞች ደንበኞችን ዝርዝር እና የምርት መለያቸውን ከመለያ ገበታ ይመልከቱ DescVentilTodoCustomer=የክፍያ መጠየቂያ መስመሮች አስቀድመው ከምርት መለያ ጋር ከመለያ ገበታ ላይ ያልታሰሩ ChangeAccount=ለተመረጡት መስመሮች የምርት/አገልግሎት መለያውን (ከሂሳብ ገበታ) በሚከተለው መለያ ይቀይሩ፡ @@ -335,7 +335,6 @@ CategoryDeleted=የሒሳብ መለያው ምድብ ተወግዷል AccountingJournals=የሂሳብ መጽሔቶች AccountingJournal=የሂሳብ መጽሔት NewAccountingJournal=አዲስ የሂሳብ ጆርናል -ShowAccountingJournal=የሂሳብ መጽሔት አሳይ NatureOfJournal=የጆርናል ተፈጥሮ AccountingJournalType1=የተለያዩ ስራዎች AccountingJournalType2=ሽያጭ @@ -346,14 +345,14 @@ AccountingJournalType8=ቆጠራ AccountingJournalType9=የተያዙ ገቢዎች GenerationOfAccountingEntries=የሂሳብ ግቤቶች ማመንጨት ErrorAccountingJournalIsAlreadyUse=ይህ መጽሔት አስቀድሞ ጥቅም ላይ ውሏል -AccountingAccountForSalesTaxAreDefinedInto=ማስታወሻ፡ ለሽያጭ ታክስ የሂሳብ አያያዝ መለያ በምናሌ ውስጥ ይገለጻል %s9a4b739f17f8z0 - %s +AccountingAccountForSalesTaxAreDefinedInto=Note: Accounting account for Sales tax are defined into menu %s - %s NumberOfAccountancyEntries=የመግቢያ ብዛት NumberOfAccountancyMovements=የእንቅስቃሴዎች ብዛት ACCOUNTING_DISABLE_BINDING_ON_SALES=በሽያጭ ላይ የሂሳብ አያያዝ እና ማስተላለፍን ያሰናክሉ (የደንበኛ ደረሰኞች በሂሳብ አያያዝ ውስጥ አይገቡም) ACCOUNTING_DISABLE_BINDING_ON_PURCHASES=በግዢዎች ላይ በሂሳብ አያያዝ ውስጥ ማሰር እና ማስተላለፍን ያሰናክሉ (የሻጭ ደረሰኞች በሂሳብ አያያዝ ውስጥ አይወሰዱም) ACCOUNTING_DISABLE_BINDING_ON_EXPENSEREPORTS=በወጪ ሪፖርቶች ላይ የሂሳብ አያያዝ እና ማስተላለፍን ያሰናክሉ (የወጪ ሪፖርቶች በሂሳብ አያያዙም) ACCOUNTING_ENABLE_LETTERING=በሂሳብ አያያዝ ውስጥ የፊደል አጻጻፍ ተግባርን ያንቁ -ACCOUNTING_ENABLE_LETTERING_DESC=እነዚህ አማራጮች ሲነቁ በእያንዳንዱ የሂሳብ መዝገብ ላይ የተለያዩ የሂሳብ እንቅስቃሴዎችን በአንድ ላይ ማቧደን እንዲችሉ ኮድ መግለፅ ይችላሉ። ቀደም ባሉት ጊዜያት, የተለያዩ መጽሔቶች በተናጥል ሲተዳደሩ, ይህ ባህሪ የተለያዩ መጽሔቶችን የመንቀሳቀስ መስመሮችን በአንድ ላይ ማቧደን አስፈላጊ ነበር. ነገር ግን፣ በዶሊባርር አካውንቲንግ፣ እንደዚህ ያለ የመከታተያ ኮድ፣ "%sb09a4b78z09f17 span>" አስቀድሞ በራስ ሰር ተቀምጧል፣ ስለዚህ አውቶማቲክ ፊደላት አስቀድሞ ተከናውኗል፣ የስህተት ስጋት የለውም፣ ስለዚህ ይህ ባህሪ ለጋራ አጠቃቀም የማይጠቅም ሆኗል። በእጅ የፊደል አጻጻፍ ባህሪ በሂሳብ መዝገብ ውስጥ መረጃን ለማስተላለፍ የሚያደርገውን የኮምፒተር ሞተር ለማያምኑ ለዋና ተጠቃሚዎች ይሰጣል። +ACCOUNTING_ENABLE_LETTERING_DESC=When this options is enabled, you can define, on each accounting entry, a code so you can group different accounting movements together. In the past, when different journals was managed independently, this feature was necessary to group movement lines of different journals together. However, with Dolibarr accountancy, such a tracking code, called "%s" is already saved automatically, so an automatic lettering is already done, with no risk of error so this feature has become useless for a common usage. Manual lettering feature is provided for end users that really don't trust the computer engine making the transfer of data in accountancy. EnablingThisFeatureIsNotNecessary=ይህንን ባህሪ ማንቃት ለጠንካራ የሂሳብ አያያዝ አስተዳደር አስፈላጊ አይሆንም። ACCOUNTING_ENABLE_AUTOLETTERING=ወደ አካውንቲንግ ሲተላለፉ አውቶማቲክ ፊደላትን አንቃ ACCOUNTING_ENABLE_AUTOLETTERING_DESC=የደብዳቤው ኮድ በራስ-ሰር ይፈልቃል እና ይጨምራል እናም በዋና ተጠቃሚ አልተመረጠም። @@ -361,7 +360,7 @@ ACCOUNTING_LETTERING_NBLETTERS=የፊደል አጻጻፍ ኮድ በሚፈጥሩ ACCOUNTING_LETTERING_NBLETTERS_DESC=አንዳንድ የሂሳብ ሶፍትዌሮች ባለ ሁለት ፊደል ኮድ ብቻ ነው የሚቀበሉት። ይህ ግቤት ይህንን ገጽታ እንዲያዘጋጁ ያስችልዎታል. የነባሪ ፊደሎች ቁጥር ሦስት ነው። OptionsAdvanced=የላቁ አማራጮች ACCOUNTING_FORCE_ENABLE_VAT_REVERSE_CHARGE=በአቅራቢዎች ግዢ ላይ የተጨማሪ እሴት ታክስ አስተዳደርን ያግብሩ -ACCOUNTING_FORCE_ENABLE_VAT_REVERSE_CHARGE_DESC=ይህ አማራጭ ሲነቃ፣ አቅራቢው ወይም የተሰጠው የአቅራቢ ደረሰኝ ወደ ሂሳብ ሒሳብ በተለየ መንገድ መተላለፍ እንዳለበት መግለፅ ይችላሉ፡ ተጨማሪ ዴቢት እና ክሬዲት መስመር በሂሳብ መዝገብ ውስጥ በ2 የተሰጡ ሂሳቦች በ‹‹< ውስጥ ከተገለፀው የመለያ ገበታው ላይ ይወጣሉ። span class='notranslate'>%s" ማዋቀር ገጽ። +ACCOUNTING_FORCE_ENABLE_VAT_REVERSE_CHARGE_DESC=ይህ አማራጭ ሲነቃ፣ አቅራቢው ወይም የተሰጠው የአቅራቢ ደረሰኝ ወደ ሂሳብ ሒሳብ በተለየ መንገድ መተላለፍ እንዳለበት መግለፅ ይችላሉ፡ ተጨማሪ ዴቢት እና ክሬዲት መስመር በሂሳብ መዝገብ ውስጥ በ2 የተሰጡ ሂሳቦች በ‹‹< ውስጥ ከተገለፀው የመለያ ገበታው ላይ ይወጣሉ። %s ማዋቀር ገጽ። ## Export NotExportLettering=ፋይሉን በሚፈጥሩበት ጊዜ ፊደሉን ወደ ውጭ አይላኩ @@ -468,15 +467,15 @@ AccountancyClosureConfirmAccountingReversal=እርግጠኛ ነዎት ለ"የተ ## Error SomeMandatoryStepsOfSetupWereNotDone=አንዳንድ አስገዳጅ የማዋቀር ደረጃዎች አልተደረጉም፣ እባክዎ ያጠናቅቁዋቸው -ErrorNoAccountingCategoryForThisCountry=ለአገር ምንም የሂሳብ አያያዝ ቡድን የለም %s (%s ይመልከቱ - b0ecb2ec87f49fez0s %s) -ErrorInvoiceContainsLinesNotYetBounded=አንዳንድ የክፍያ መጠየቂያ መጠየቂያ ደረሰኞችን %sb0a65d071f6fc9 ግን ለመመዝገብ ይሞክራሉ። አንዳንድ ሌሎች መስመሮች በሂሳብ አያያዝ መለያ ላይ ገና አልተገደቡም። ለዚህ ደረሰኝ የሁሉም የክፍያ መጠየቂያ መስመሮች ጋዜጠኝነት ውድቅ ተደርጓል። +ErrorNoAccountingCategoryForThisCountry=No accounting account group available for country %s (See %s - %s - %s) +ErrorInvoiceContainsLinesNotYetBounded=You try to journalize some lines of the invoice %s, but some other lines are not yet bounded to accounting account. Journalization of all invoice lines for this invoice are refused. ErrorInvoiceContainsLinesNotYetBoundedShort=በክፍያ መጠየቂያ ላይ ያሉ አንዳንድ መስመሮች ከሂሳብ መዝገብ ጋር የተገናኙ አይደሉም። ExportNotSupported=የተቀናበረው ወደ ውጭ መላኪያ ቅርጸት በዚህ ገጽ ላይ አይደገፍም። BookeppingLineAlreayExists=በሂሳብ አያያዝ ውስጥ ቀድሞውኑ ያሉ መስመሮች NoJournalDefined=ምንም ጆርናል አልተገለጸም። Binded=መስመሮች ተያይዘዋል። ToBind=ለማሰር መስመሮች -UseMenuToSetBindindManualy=መስመሮች ገና አልተጣመሩም ፣ ምናሌን ይጠቀሙ %s binding> ለማድረግ በእጅ +UseMenuToSetBindindManualy=Lines not yet bound, use menu %s to make the binding manually SorryThisModuleIsNotCompatibleWithTheExperimentalFeatureOfSituationInvoices=ማስታወሻ፡ ይህ ሞጁል ወይም ገጽ ከሁኔታ ደረሰኞች የሙከራ ባህሪ ጋር ሙሉ ለሙሉ ተኳሃኝ አይደለም። አንዳንድ መረጃዎች የተሳሳቱ ሊሆኑ ይችላሉ። AccountancyErrorMismatchLetterCode=በማስታረቅ ኮድ ውስጥ አለመዛመድ AccountancyErrorMismatchBalanceAmount=ቀሪው (%s) ከ 0 ጋር እኩል አይደለም diff --git a/htdocs/langs/am_ET/admin.lang b/htdocs/langs/am_ET/admin.lang index 4876ce5fddc..537dbd7cb32 100644 --- a/htdocs/langs/am_ET/admin.lang +++ b/htdocs/langs/am_ET/admin.lang @@ -71,7 +71,7 @@ OSSetup=የስርዓተ ክወና ማዋቀር SecurityFilesDesc=ፋይሎችን ስለመስቀል ከደህንነት ጋር የተያያዙ አማራጮችን እዚህ ይግለጹ። ErrorModuleRequirePHPVersion=ስህተት፣ ይህ ሞጁል የPHP ስሪት %s ወይም ከዚያ በላይ ያስፈልገዋል ErrorModuleRequireDolibarrVersion=ስህተት፣ ይህ ሞጁል የዶሊባርር ስሪት %s ወይም ከዚያ በላይ ይፈልጋል። -ErrorDecimalLargerThanAreForbidden=ስህተት፣ ትክክለኛነት ከ%s አይደገፍም%s is not supported. DictionarySetup=መዝገበ ቃላት ማዋቀር Dictionary=መዝገበ ቃላት ErrorReservedTypeSystemSystemAuto=ለዓይነት 'ስርዓት' እና 'systemauto' እሴት የተጠበቁ ናቸው። የራስዎን መዝገብ ለመጨመር 'ተጠቃሚ'ን እንደ እሴት መጠቀም ይችላሉ። @@ -106,7 +106,7 @@ NextValueForInvoices=ቀጣይ ዋጋ (ደረሰኞች) NextValueForCreditNotes=ቀጣይ እሴት (የክሬዲት ማስታወሻዎች) NextValueForDeposit=ቀጣይ ዋጋ (ቅድመ ክፍያ) NextValueForReplacements=ቀጣይ እሴት (ምትክ) -MustBeLowerThanPHPLimit=ማሳሰቢያ፡ የእርስዎ ፒኤችፒ ውቅር በአሁኑ ጊዜ ወደ %sb09a4b739f17f17f17f ለመስቀል ከፍተኛውን የፋይል መጠን ይገድባል። span> %s፣ የዚህ ግቤት ዋጋ ምንም ይሁን ምን +MustBeLowerThanPHPLimit=Note: your PHP configuration currently limits the maximum filesize for upload to %s %s, irrespective of the value of this parameter NoMaxSizeByPHPLimit=ማስታወሻ፡ በእርስዎ ፒኤችፒ ውቅር ውስጥ ምንም ገደብ አልተዘጋጀም። MaxSizeForUploadedFiles=ለተሰቀሉ ፋይሎች ከፍተኛው መጠን (ማንኛውንም ሰቀላ ላለመፍቀድ 0) UseCaptchaCode=በግራፊክ ኮድ (CAPTCHA) በመግቢያ ገፅ እና አንዳንድ የህዝብ ገፆች ላይ ተጠቀም @@ -150,7 +150,7 @@ AllWidgetsWereEnabled=ሁሉም የሚገኙ መግብሮች ነቅተዋል። WidgetAvailable=መግብር ይገኛል። PositionByDefault=ነባሪ ትእዛዝ MenusDesc=የምናሌ አስተዳዳሪዎች የሁለቱን ምናሌ አሞሌዎች (አግድም እና አቀባዊ) ይዘት ያዘጋጃሉ። -MenusEditorDesc=የምናሌ አርታዒው ብጁ የምናሌ ግቤቶችን እንዲገልጹ ይፈቅድልዎታል. አለመረጋጋትን እና በቋሚነት የማይደረስ የሜኑ ግቤቶችን ለማስወገድ በጥንቃቄ ይጠቀሙ።
አንዳንድ ሞጁሎች የምናሌ ግቤቶችን ይጨምራሉ (በምናሌው ሁሉም
በብዛት)። ከእነዚህ ግቤቶች አንዳንዶቹን በስህተት ካስወገዱ፣ ሞጁሉን ማሰናከል እና እንደገና ማንቃትን ወደነበሩበት መመለስ ይችላሉ። +MenusEditorDesc=The menu editor allows you to define custom menu entries. Use it carefully to avoid instability and permanently unreachable menu entries.
Some modules add menu entries (in menu All mostly). If you remove some of these entries by mistake, you can restore them disabling and reenabling the module. MenuForUsers=ለተጠቃሚዎች ምናሌ LangFile=.lang ፋይል Language_en_US_es_MX_etc=ቋንቋ (en_US፣ es_MX፣ ...) @@ -159,11 +159,11 @@ SystemInfo=የስርዓት መረጃ SystemToolsArea=የስርዓት መሳሪያዎች አካባቢ SystemToolsAreaDesc=ይህ አካባቢ የአስተዳደር ተግባራትን ያቀርባል. አስፈላጊውን ባህሪ ለመምረጥ ምናሌውን ይጠቀሙ. Purge=ማጽዳት -PurgeAreaDesc=ይህ ገጽ በዶሊባርር የተፈጠሩትን ወይም የተከማቹ ፋይሎችን በሙሉ (ጊዜያዊ ፋይሎች ወይም በ%s ማውጫ)። ይህንን ባህሪ መጠቀም በተለምዶ አስፈላጊ አይደለም. ዶሊባርር በድር አገልጋይ የተፈጠሩ ፋይሎችን ለመሰረዝ ፍቃድ በማይሰጥ አገልግሎት አቅራቢ ለተስተናገደላቸው ተጠቃሚዎች እንደ መፍትሄ ሆኖ ቀርቧል። +PurgeAreaDesc=This page allows you to delete all files generated or stored by Dolibarr (temporary files or all files in %s directory). Using this feature is not normally necessary. It is provided as a workaround for users whose Dolibarr is hosted by a provider that does not offer permissions to delete files generated by the web server. PurgeDeleteLogFile=የምዝግብ ማስታወሻ ፋይሎችን ይሰርዙ፣ %s ሞጁል ለSpanys የተገለጸ ውሂብ የማጣት አደጋ) PurgeDeleteTemporaryFiles=ሁሉንም የምዝግብ ማስታወሻዎች እና ጊዜያዊ ፋይሎችን ሰርዝ (ውሂብ የማጣት አደጋ የለም)። መለኪያ 'tempfilesold'፣ 'logfiles' ወይም ሁለቱም 'tempfilesold+logfiles' ሊሆን ይችላል። ማሳሰቢያ፡- ጊዜያዊ ፋይሎችን መሰረዝ የሚደረገው የቴምፕ ዳይሬክተሩ ከ24 ሰአት በፊት ከተፈጠረ ብቻ ነው። PurgeDeleteTemporaryFilesShort=ሎግ እና ጊዜያዊ ፋይሎችን ሰርዝ (ውሂብ የማጣት አደጋ የለም) -PurgeDeleteAllFilesInDocumentsDir=በማውጫው ውስጥ ያሉትን ሁሉንም ፋይሎች ይሰርዙ፡ %s። 'notranslate'>
ይህ ከኤለመንቶች (ሶስተኛ ወገኖች፣ ደረሰኞች ወዘተ...)፣ ወደ ኢሲኤም ሞጁል የተሰቀሉ ፋይሎችን፣ የውሂብ ጎታ መጠባበቂያ ክምችቶችን እና ጊዜያዊ ፋይሎች ጋር የተያያዙ ሁሉንም የመነጩ ሰነዶችን ይሰርዛል። +PurgeDeleteAllFilesInDocumentsDir=Delete all files in directory: %s.
This will delete all generated documents related to elements (third parties, invoices etc...), files uploaded into the ECM module, database backup dumps and temporary files. PurgeRunNow=አሁን ያጽዱ PurgeNothingToDelete=ምንም ማውጫ ወይም የሚሰረዙ ፋይሎች የሉም። PurgeNDirectoriesDeleted=%s ፋይሎች ወይም ማውጫዎች ተሰርዘዋል። @@ -214,7 +214,7 @@ OnlyActiveElementsAreShown=የየነቁ ሞጁሎች አባሎ ModulesDesc=ሞጁሎቹ/መተግበሪያዎቹ የትኞቹ ባህሪያት በሶፍትዌሩ ውስጥ እንደሚገኙ ይወስናሉ። አንዳንድ ሞጁሎች ሞጁሉን ካነቃቁ በኋላ ለተጠቃሚዎች ፈቃድ እንዲሰጡ ይፈልጋሉ። የእያንዳንዱን ሞጁል ለማንቃት %s የሚለውን ቁልፍ ጠቅ ያድርጉ። ወይም ሞጁል/መተግበሪያን አሰናክል። ModulesDesc2=ሞጁሉን ለማዋቀር የዊል አዝራሩን %sን ጠቅ ያድርጉ። ModulesMarketPlaceDesc=በበይነመረቡ ላይ በውጫዊ ድረ-ገጾች ላይ የሚወርዱ ተጨማሪ ሞጁሎችን ማግኘት ይችላሉ... -ModulesDeployDesc=በፋይል ስርዓትዎ ላይ ያሉ ፈቃዶች የሚፈቅዱ ከሆነ ውጫዊ ሞጁሉን ለማሰማራት ይህንን መሳሪያ መጠቀም ይችላሉ። ከዚያ ሞጁሉ በትር ላይ ይታያል %s%s
. ModulesMarketPlaces=ውጫዊ መተግበሪያ/ሞጁሎችን ያግኙ ModulesDevelopYourModule=የራስዎን መተግበሪያ/ሞዱሎች ይገንቡ ModulesDevelopDesc=እንዲሁም የራስዎን ሞጁል ማዳበር ወይም አንዱን ለእርስዎ የሚያዘጋጅ አጋር ማግኘት ይችላሉ። @@ -222,7 +222,7 @@ DOLISTOREdescriptionLong=ውጫዊ ሞጁል ለማግኘት %sb0e40dc658d +GoModuleSetupArea=አዲስ ሞጁል ለማሰማራት/ለመጫን ወደ ሞጁል ማቀናበሪያ ቦታ ይሂዱ፡%sb0e40dc658d DoliStoreDesc=DoliStore፣ ለ Dolibarr ERP/CRM ውጫዊ ሞጁሎች ይፋዊ የገበያ ቦታ DoliPartnersDesc=ብጁ-የተገነቡ ሞጁሎችን ወይም ባህሪያትን የሚያቀርቡ ኩባንያዎች ዝርዝር።
ማስታወሻ፡ ዶሊባርር ክፍት ምንጭ መተግበሪያ ስለሆነ፣ ማንኛውም ሰውበ PHP ፕሮግራሚንግ ልምድ ያለው ሞጁል ማዘጋጀት መቻል አለበት። WebSiteDesc=ለተጨማሪ ተጨማሪ (ኮር-ያልሆኑ) ሞጁሎች ውጫዊ ድር ጣቢያዎች... @@ -250,8 +250,8 @@ Security=ደህንነት Passwords=የይለፍ ቃሎች DoNotStoreClearPassword=በመረጃ ቋት ውስጥ የተከማቹ የይለፍ ቃላትን ኢንክሪፕት ያድርጉ (እንደ ግልጽ ጽሑፍ አይደለም)። ይህንን አማራጭ ለማንቃት በጥብቅ ይመከራል. MainDbPasswordFileConfEncrypted=በ conf.php ውስጥ የተከማቸ የውሂብ ጎታ ይለፍ ቃል ያመስጥር። ይህንን አማራጭ ለማንቃት በጥብቅ ይመከራል. -InstrucToEncodePass=በconf.php ፋይል ውስጥ የይለፍ ቃል እንዲቀመጥ ለማድረግ የb0342fccfda /span>$dolibarr_main_db_pass...";b0342fcc0 > በ
$dolibarr_main_db_pass="crypted:b0ecb9>fz0"b0ecb2ec8fe span class='notranslate'>
-InstrucToClearPass=በconf.php ፋይል ውስጥ የይለፍ ቃል ዲኮድ ለማድረግ (ግልጽ)፣ የ
$dolibarr_main_db_pass="crypted:...";b09a4b739f17f8zlate'=notranslate'>b09a4b739f17f8zlate' >

$dolibarr_main_db_pass=" +InstrucToEncodePass=To have password encoded into the conf.php file, replace the line
$dolibarr_main_db_pass="...";
by
$dolibarr_main_db_pass="crypted:%s"; +InstrucToClearPass=To have password decoded (clear) into the conf.php file, replace the line
$dolibarr_main_db_pass="crypted:...";
by
$dolibarr_main_db_pass="%s"; ProtectAndEncryptPdfFiles=የተፈጠሩ ፒዲኤፍ ፋይሎችን ይጠብቁ። የጅምላ ፒዲኤፍ መፈጠርን ስለሚሰብር ይህ አይመከርም። ProtectAndEncryptPdfFilesDesc=የፒዲኤፍ ሰነድ ጥበቃ በማንኛውም ፒዲኤፍ አሳሽ ለማንበብ እና ለማተም ያስችላል። ሆኖም፣ ማረም እና መቅዳት ከአሁን በኋላ አይቻልም። ይህን ባህሪ መጠቀም አለምአቀፍ የተዋሃዱ ፒዲኤፎችን መገንባት አይሰራም። Feature=ባህሪ @@ -268,8 +268,8 @@ OtherResources=ሌሎች ሀብቶች ExternalResources=የውጭ ሀብቶች SocialNetworks=ማህበራዊ አውታረ መረቦች SocialNetworkId=የማህበራዊ አውታረ መረብ መታወቂያ -ForDocumentationSeeWiki=ለተጠቃሚ ወይም ለገንቢ ሰነድ (ሰነድ፣ ተደጋጋሚ ጥያቄዎች...)፣
Dolibarr Wikiን ይመልከቱ፡
%sc6570ec6570e -ForAnswersSeeForum=ለማንኛውም ሌላ ጥያቄ/እገዛ የዶሊባርር መድረክን መጠቀም ትችላለህ፡
b00fab50ead932z /span>%s
+ForDocumentationSeeWiki=For user or developer documentation (Doc, FAQs...),
take a look at the Dolibarr Wiki:
%s +ForAnswersSeeForum=For any other questions/help, you can use the Dolibarr forum:
%s HelpCenterDesc1=በ Dolibarr እርዳታ እና ድጋፍ ለማግኘት አንዳንድ ግብዓቶች እዚህ አሉ። HelpCenterDesc2=ከእነዚህ ሃብቶች ውስጥ አንዳንዶቹ የሚገኙት በamharic ውስጥ ብቻ ነው። CurrentMenuHandler=የአሁኑ ምናሌ ተቆጣጣሪ @@ -290,8 +290,8 @@ EMailsSetup=ኢሜይሎች ማዋቀር EMailsDesc=ይህ ገጽ ኢሜል ለመላክ መለኪያዎችን ወይም አማራጮችን እንዲያዘጋጁ ይፈቅድልዎታል። EmailSenderProfiles=ኢሜይሎች ላኪ መገለጫዎች EMailsSenderProfileDesc=ይህንን ክፍል ባዶ ማድረግ ይችላሉ. አንዳንድ ኢሜይሎችን እዚህ ካስገቡ፣ አዲስ ኢሜል ሲጽፉ ወደ ጥምር ሳጥን ውስጥ ሊሆኑ ከሚችሉ ላኪዎች ዝርዝር ውስጥ ይታከላሉ። -MAIN_MAIL_SMTP_PORT=SMTP/SMTPS ወደብ (ነባሪው ዋጋ በphp.ini ውስጥ፡ %sb09a4b739f >> -MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS አስተናጋጅ (ነባሪ እሴት በphp.ini ውስጥ፡ %sb09a4f738f >> +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: %s) +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: %s) MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS ወደብ MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS አስተናጋጅ MAIN_MAIL_EMAIL_FROM=ለራስ ሰር ኢሜይሎች ላኪ @@ -345,12 +345,12 @@ ThisIsAlternativeProcessToFollow=ይህ በእጅ ለማስኬድ አማራጭ StepNb=ደረጃ %s FindPackageFromWebSite=የሚፈልጉትን ባህሪያት የሚያቀርብ ጥቅል ያግኙ (ለምሳሌ በኦፊሴላዊው ድረ-ገጽ %s ላይ)። DownloadPackageFromWebSite=ጥቅል አውርድ (ለምሳሌ ከኦፊሴላዊው ድረ-ገጽ %s)። -UnpackPackageInDolibarrRoot=የታሸጉትን ፋይሎች ወደ Dolibarr አገልጋይ ማውጫዎ ይንቀሉ/ይንቀሏቸው፡ %sb09a4b738 > +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into your Dolibarr server directory: %s UnpackPackageInModulesRoot=ውጫዊ ሞጁሉን ለማሰማራት/ለመጫን የማህደር ፋይሉን ለውጫዊ ሞጁሎች ወደተዘጋጀው የአገልጋይ ማውጫ ውስጥ መንቀል/መፍታት አለብህ፡
%s SetupIsReadyForUse=የሞዱል ዝርጋታ አልቋል። ነገር ግን ወደ ገጹ ማቀናበሪያ ሞጁሎች በመሄድ ሞጁሉን በመተግበሪያዎ ውስጥ ማንቃት እና ማዋቀር አለብዎት፡ %s። NotExistsDirect=ተለዋጭ ስርወ ማውጫው አሁን ላለው ማውጫ አልተገለጸም።
InfDirAlt=ከስሪት 3 ጀምሮ፣ አማራጭ ስርወ ማውጫን መግለፅ ይቻላል። ይህ ወደ ተለየ ማውጫ፣ ተሰኪዎች እና ብጁ አብነቶች እንዲያከማቹ ያስችልዎታል።
በ Dolibarr ስር ማውጫ ላይ (ለምሳሌ፡ ብጁ) ብቻ ፍጠር።
-InfDirExample=
ከዚያ በፋይሉ ውስጥ አውጁት conf.phpb0a65d071f6fc9z class='notranslate'>
$dolibarr_main_url_root_alt='/custom'
$dolibarr_main_document_root_alt/h. 'notranslate'>
እነዚህ መስመሮች በ"#" አስተያየት ከተሰጡ እነሱን ለማስቻል የ"#" ቁምፊን በማስወገድ አስተያየት አይስጡ። +InfDirExample=
Then declare it in the file conf.php
$dolibarr_main_url_root_alt='/custom'
$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'
If these lines are commented with "#", to enable them, just uncomment by removing the "#" character. YouCanSubmitFile=የሞጁሉን ጥቅል የዚፕ ፋይል ከዚህ መስቀል ይችላሉ፡- CurrentVersion=Dolibarr የአሁኑ ስሪት CallUpdatePage=የውሂብ ጎታውን አወቃቀር እና ውሂብ ወደሚያዘምነው ገጽ አስስ፡ %s። @@ -361,22 +361,22 @@ LastActivationIP=የቅርብ ጊዜ ማግበር አይፒ LastActivationVersion=የቅርብ ጊዜ ማግበር ስሪት UpdateServerOffline=አገልጋዩን ከመስመር ውጭ ያዘምኑ WithCounter=ቆጣሪ ያስተዳድሩ -GenericMaskCodes=ማንኛውንም የቁጥር ጭንብል ማስገባት ይችላሉ። በዚህ ጭንብል ውስጥ፣ የሚከተሉትን መለያዎች መጠቀም ይቻላል፡
{000000}b09a17389 /span> በእያንዳንዱ %s ላይ ከሚጨመር ቁጥር ጋር ይዛመዳል። የሚፈለገውን ያህል የቆጣሪው ርዝመት ያህል ዜሮዎችን አስገባ። እንደ ጭምብሉ ብዙ ዜሮዎች እንዲኖረው ቆጣሪው ከግራ በኩል በዜሮዎች ይጠናቀቃል።
{000000+000}b09a4b739f17f80 ጋር ተመሳሳይ ነው ከ+ ምልክቱ በስተቀኝ ካለው ቁጥር ጋር የሚዛመድ ማካካሻ ከመጀመሪያው %s ጀምሮ ይተገበራል።
{000000@x} ከቀዳሚው ጋር ግን ተመሳሳይ ነው ወር x ሲደርስ ቆጣሪው ወደ ዜሮ ይጀመራል (x በ 1 እና 12 መካከል፣ ወይም 0 በእርስዎ ውቅር ውስጥ የተገለጹትን የበጀት ዓመት የመጀመሪያ ወራት ለመጠቀም ፣ ወይም 99 በየወሩ ወደ ዜሮ ለማስጀመር)። ይህ አማራጭ ጥቅም ላይ የሚውል ከሆነ እና x 2 ወይም ከዚያ በላይ ከሆነ፣ ቅደም ተከተል {yy}{mm} ወይም {yyyy}{mm}ም ያስፈልጋል።
{dd} ቀን (ከ 01 እስከ 01)። span class='notranslate'>
{mm} ወር (01 እስከ 1)። class='notranslate'>
{yy}, {yyyy}
ወይም {y}b09a4b78zpan ከ 2 ፣ 4 ወይም 1 ቁጥሮች በላይ ዓመት።
-GenericMaskCodes2={cccc}የደንበኛ ኮድ በ ns ላይ
{cccc000}b030f17f ደንበኛ በ n ቁምፊዎች ላይ ለደንበኛው የተሰጠ ቆጣሪ ይከተላል. ይህ ለደንበኛ የተወሰነ ቆጣሪ ከዓለም አቀፉ ቆጣሪ ጋር በተመሳሳይ ጊዜ ዳግም ይጀመራል።
b06a5f4510419e በ n ቁምፊዎች ላይ የሶስተኛ ወገን አይነት ኮድ (ሜኑ ይመልከቱ - ማዋቀር - መዝገበ ቃላት - የሶስተኛ ወገኖች አይነቶች)። ይህን መለያ ካከሉ፣ ቆጣሪው ለእያንዳንዱ የሶስተኛ ወገን አይነት የተለየ ይሆናል።
+GenericMaskCodes=You may enter any numbering mask. In this mask, the following tags can be used:
{000000} corresponds to a number which will be incremented on each %s. Enter as many zeros as the desired length of the counter. The counter will be completed by zeros from the left in order to have as many zeros as the mask.
{000000+000} same as the previous one but an offset corresponding to the number to the right of the + sign is applied starting on the first %s.
{000000@x} same as the previous one but the counter is reset to zero when month x is reached (x between 1 and 12, or 0 to use the early months of fiscal year defined in your configuration, or 99 to reset to zero every month). If this option is used and x is 2 or higher, then the sequence {yy}{mm} or {yyyy}{mm} is also required.
{dd} day (01 to 31).
{mm} month (01 to 12).
{yy}, {yyyy} or {y} year over 2, 4 or 1 numbers.
+GenericMaskCodes2={cccc} the client code on n characters
{cccc000} the client code on n characters is followed by a counter dedicated to the customer. This counter dedicated to customer is reset at same time as the global counter.
{tttt} The code of third party type on n characters (see menu Home - Setup - Dictionary - Types of third parties). If you add this tag, the counter will be different for each type of third party.
GenericMaskCodes3=በጭምብሉ ውስጥ ያሉት ሁሉም ሌሎች ቁምፊዎች ሳይበላሹ ይቆያሉ።
Spaces አይፈቀዱም።
-GenericMaskCodes3EAN=በጭምብሉ ውስጥ ያሉት ሁሉም ሌሎች ቁምፊዎች ሳይበላሹ ይቆያሉ (ከ* ወይም ? በ EAN13 13ኛ ቦታ ላይ)።
Spaces አይፈቀዱም።
በEAN13 ውስጥ፣ ከመጨረሻው በኋላ ያለው የመጨረሻው ቁምፊ በ13ኛ ደረጃ * ወይም ? . በተሰላው ቁልፍ ይተካል።
-GenericMaskCodes4a=ምሳሌ በሶስተኛ ወገን TheCompany 99ኛው %s ላይ ከ2023-01-31:

-GenericMaskCodes4b=ምሳሌ በሶስተኛ ወገን ላይ የተፈጠረው በ2023-01-31፡b0342fccfda19 > -GenericMaskCodes4c=በ2023-01-31 የተፈጠረ ምርት ላይ ምሳሌ፡b0342fccfda19b> -GenericMaskCodes5=ABC{yy}{mm}-{000000} ለb05837fz. span>ABC2301-000099

b0aee8336583f>b0aee8336583 }-ZZZ/{dd}/XXX
0199-ZZZ/31/XXX

IN{yy}{mm}-{0000}-{t} class='notranslate'>
IN2301-0099-Ab09a4b739f17f>የኩባንያው አይነት ከሆነይሰጠዋል። 'ተጠያቂ ኢንስክሪፕቶ' ከአይነት ኮድ ጋር 'A_RI' +GenericMaskCodes3EAN=All other characters in the mask will remain intact (except * or ? in 13th position in EAN13).
Spaces are not allowed.
In EAN13, the last character after the last } in 13th position should be * or ? . It will be replaced by the calculated key.
+GenericMaskCodes4a=Example on the 99th %s of the third party TheCompany, with date 2023-01-31:
+GenericMaskCodes4b=Example on third party created on 2023-01-31:
+GenericMaskCodes4c=Example on product created on 2023-01-31:
+GenericMaskCodes5=ABC{yy}{mm}-{000000} will give ABC2301-000099
{0000+100@1}-ZZZ/{dd}/XXX will give 0199-ZZZ/31/XXX
IN{yy}{mm}-{0000}-{t} will give IN2301-0099-A if the type of company is 'Responsable Inscripto' with code for type that is 'A_RI' GenericNumRefModelDesc=በተወሰነ ጭምብል መሰረት ሊበጅ የሚችል ቁጥር ይመልሳል። -ServerAvailableOnIPOrPort=አገልጋይ በ%s=span> ወደቦች ላይ ይገኛል። 'notranslate'>%s -ServerNotAvailableOnIPOrPort=አገልጋይ በ%s ወደብ ላይ አይገኝም። ='notranslate'>
%s +ServerAvailableOnIPOrPort=Server is available at address %s on port %s +ServerNotAvailableOnIPOrPort=Server is not available at address %s on port %s DoTestServerAvailability=የአገልጋይ ግንኙነትን ይሞክሩ DoTestSend=የመላክ ሙከራ DoTestSendHTML=HTML መላክን ይሞክሩ ErrorCantUseRazIfNoYearInMask=ስህተት፣ ተከታታይ {yy} ወይም {yyyy} ጭንብል ውስጥ ካልሆነ በየዓመቱ ቆጣሪን እንደገና ለማስጀመር አማራጭ @ መጠቀም አይቻልም። -ErrorCantUseRazInStartedYearIfNoYearMonthInMask=ስህተት፣ ቅደም ተከተል ከሆነ አማራጭ @ መጠቀም አይቻልም {yy}{mm} ወይም {yyyy} {mm} ጭንብል ውስጥ የለም። +ErrorCantUseRazInStartedYearIfNoYearMonthInMask=Error, can't use option @ if sequence {yy}{mm} or {yyyy}{mm} is not in mask. UMask=በዩኒክስ/ሊኑክስ/ቢኤስዲ/ማክ ፋይል ስርዓት ላይ ለአዳዲስ ፋይሎች የUMask መለኪያ። UMaskExplanation=ይህ መመዘኛ በአገልጋዩ ላይ በዶሊባርር በተፈጠሩ ፋይሎች ላይ በነባሪ የተቀመጡ ፈቃዶችን እንዲገልጹ ያስችልዎታል (ለምሳሌ በሚሰቀልበት ጊዜ)
የስምንትዮሽ እሴት መሆን አለበት (ለምሳሌ 0666 ማንበብ ማለት ነው) እና ለሁሉም ሰው ይፃፉ.) የሚመከር እሴት 0600 ወይም 0660
ይህ ግቤት በዊንዶውስ አገልጋይ ላይ ምንም ፋይዳ የለውም። SeeWikiForAllTeam=አስተዋጽዖ አበርካቾችን እና ድርጅታቸውን ዝርዝር ለማግኘት የዊኪን ገጽ ይመልከቱ @@ -390,9 +390,9 @@ LanguageFilesCachedIntoShmopSharedMemory=ፋይሎች .lang በጋራ ማህደ LanguageFile=የቋንቋ ፋይል ExamplesWithCurrentSetup=ምሳሌዎች ከአሁኑ ውቅር ጋር ListOfDirectories=የOpenDocument አብነት ማውጫዎች ዝርዝር -ListOfDirectoriesForModelGenODT=OpenDocument ቅርጸት ያላቸው የአብነት ፋይሎችን የያዙ የማውጫ ማውጫዎች ዝርዝር።

ሙሉ የማውጫ መንገዶችን እዚህ አስቀምጥ።
በeah ማውጫ መካከል የመጓጓዣ ተመላሽ ጨምር።
የGED ሞጁሉን ማውጫ ለመጨመር እዚህ b0aee8336583 > DOL_DATA_ROOT/ecm/የእርስዎ ማዘዣ ስም

b03192fccfda በ.odt ወይም b0aee833365837fz0 ክፍል ማለቅ አለበት ='notranslate'>። +ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.

Put here full path of directories.
Add a carriage return between eah directory.
To add a directory of the GED module, add here DOL_DATA_ROOT/ecm/yourdirectoryname.

Files in those directories must end with .odt or .ods. NumberOfModelFilesFound=በእነዚህ ማውጫዎች ውስጥ የሚገኙት የኦዲቲ/ኦዲኤስ አብነት ፋይሎች ብዛት -ExampleOfDirectoriesForModelGen=የአገባብ ምሳሌዎች፡
c:\\myapp\\mydocumentdir\\mysubdir
/home/myapp/mydocumentdir/mydocumentdir/mysubdir 'notranslate'>
DOL_DATA_ROOT/ecm/ecmdir +ExampleOfDirectoriesForModelGen=Examples of syntax:
c:\\myapp\\mydocumentdir\\mysubdir
/home/myapp/mydocumentdir/mysubdir
DOL_DATA_ROOT/ecm/ecmdir FollowingSubstitutionKeysCanBeUsed=
የእርስዎን የ odt ሰነድ አብነቶች እንዴት መፍጠር እንደሚችሉ ለማወቅ በእነዚያ ማውጫዎች ውስጥ ከማስቀመጥዎ በፊት የዊኪ ሰነዶችን ያንብቡ፡- FullListOnOnlineDocumentation=https://wiki.dolibarr.org/index.php/Create_an_ODT_document_template FirstnameNamePosition=የስም / የአያት ስም አቀማመጥ @@ -461,10 +461,10 @@ ComputedFormulaDesc=ተለዋዋጭ የተሰላ እሴት ለማግኘት ሌ Computedpersistent=የተሰላ መስክ ያከማቹ ComputedpersistentDesc=የተሰሉ ተጨማሪ መስኮች በመረጃ ቋቱ ውስጥ ይቀመጣሉ፣ ነገር ግን እሴቱ የሚሰላው የዚህ መስክ ነገር ሲቀየር ብቻ ነው። የተሰላው መስክ በሌሎች ነገሮች ወይም በአለምአቀፍ መረጃ ላይ የሚመረኮዝ ከሆነ ይህ ዋጋ የተሳሳተ ሊሆን ይችላል!! ExtrafieldParamHelpPassword=ይህንን መስክ ባዶ መተው ማለት ይህ ዋጋ ያለ ማመስጠር ይከማቻል ማለት ነው (መስክ በስክሪኑ ላይ በኮከቦች ተደብቋል)።

አስገባ እሴት 'ዶልክሪፕት' እሴትን በሚቀለበስ ምስጠራ ስልተቀመር ለመመስረት። አጽዳ ውሂብ አሁንም ሊታወቅ እና ሊስተካከል ይችላል ነገር ግን ወደ የውሂብ ጎታ የተመሰጠረ ነው።

'auto' (ወይም 'md5') አስገባ፣ 'sha256'፣ 'password_hash'፣ ...) የማይቀለበስ የሃሽ ይለፍ ቃል ወደ ዳታቤዝ ለማስቀመጥ ነባሪውን የይለፍ ቃል ምስጠራ አልጎሪዝም ለመጠቀም (ወይም md5፣ sha256፣ password_hash...) ለመጠቀም (የመጀመሪያውን እሴት ለማውጣት ምንም መንገድ የለም) -ExtrafieldParamHelpselect=የእሴቶቹ ዝርዝር የቅርጸት ቁልፍ፣ እሴት (ቁልፉ '0' ሊሆን የማይችልበት) መስመሮች መሆን አለባቸው

ለምሳሌ :
1,value1
2,value2b0342fccfda19bz30,value2b0342fccfda19bz30
...

ዝርዝሩን በሌላ ላይ በመመስረት እንዲኖረን የተጨማሪ ባህሪ ዝርዝር፡
1,value1|አማራጮች_parent_list_code350a parent_key
2,value2|አማራጮች_parent_list_codeb0ae63750 class='notranslate'>

ዝርዝሩን በሌላ ዝርዝር ለማግኘት፡
1, value1|የወላጅ_ዝርዝር_code:parent_keyb0342fccvalue'>b0342fccfvaluepan12| class='notranslate'>parent_list_code:parent_key -ExtrafieldParamHelpcheckbox=የእሴቶቹ ዝርዝር የቅርጸት ቁልፍ፣ እሴት (ቁልፉ '0' ሊሆን የማይችልበት) መስመሮች መሆን አለባቸው

ለምሳሌ :
1,value1
2,value2b0342fccfda19bzvaluepan<30s span class='notranslate'>
... -ExtrafieldParamHelpradio=የእሴቶቹ ዝርዝር የቅርጸት ቁልፍ፣ እሴት (ቁልፉ '0' ሊሆን የማይችልበት) መስመሮች መሆን አለባቸው

ለምሳሌ :
1,value1
2,value2b0342fccfda19bzvaluepan<30s span class='notranslate'>
... -ExtrafieldParamHelpsellist=የእሴቶቹ ዝርዝር ከሠንጠረዥ ነው የሚመጣው
አገባብ፡ table_name:label_field:id_field::filtersql
ምሳሌ፡ c_typent:lib ::filtersql

- id_field የግድ ዋና የ int ቁልፍ ነውb0342fccfda19 - filtersql የ SQL ሁኔታ ነው። ገባሪ እሴትን ብቻ ለማሳየት ቀላል ሙከራ (ለምሳሌ active=1) ሊሆን ይችላል። ='notranslate'>
በማጣሪያው ውስጥ SELECTን ለመጠቀም የፀረ-መርፌ ጥበቃን ለማለፍ $SEL$ የሚለውን ቁልፍ ይጠቀሙ።
በተጨማሪ ሜዳዎች ላይ ማጣራት ከፈለጉ use syntax extra.fieldcode=... (የመስክ ኮድ የኤክስትራፊልድ ኮድ በሆነበት)

ለመሆኑ ዝርዝር እንደ ሌላ ማሟያ አይነታ ዝርዝር፡
c_typent:libelle:id:options_parent_list_code
|parent_column:filter

ዝርዝሩን በሌላ ዝርዝር ለማግኘት
c_typent:libelle:id:parent_list_code0 +ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key +ExtrafieldParamHelpcheckbox=የእሴቶቹ ዝርዝር የቅርጸት ቁልፍ፣ እሴት (ቁልፉ '0' ሊሆን የማይችልበት) መስመሮች መሆን አለባቸው

ለምሳሌ :
1,value1
2,value2,
3,value3n
... +ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... +ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filtersql
Example: c_typent:libelle:id::filtersql

- id_field is necessarily a primary int key
- filtersql is a SQL condition. It can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter which is the current id of current object
To use a SELECT into the filter use the keyword $SEL$ to bypass anti-injection protection.
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=የእሴቶቹ ዝርዝር ከሠንጠረዥ ነው የሚመጣው
አገባብ፡ table_name:label_field:id_field::filtersql
ምሳሌ: c_typent:lib ::filtersql

ማጣሪያ ገባሪ እሴትን ብቻ ለማሳየት ቀላል ሙከራ (ለምሳሌ active=1) ሊሆን ይችላል
እንዲሁም $ID$ን በማጣሪያ ጠንቋይ መጠቀም ትችላለህ የአሁኑ ነገር መታወቂያ
በማጣሪያ ውስጥ ምረጥን ለማድረግ $SEL$
extrafields ላይ ማጣራት ከፈለግክ syntax extra.fieldcode=... (የመስክ ኮድ የኤክስትራፊልድ ኮድ የሆነበት)

ዝርዝሩን በሌላ ተጨማሪ የባህሪ ዝርዝር ላይ በመመስረት እንዲኖርዎት፡
c_typent:libelle:id:options_parent_list_code|parent_column:filter b0342fccfda19z0>b0342fccfda19z0' z0 ዝርዝሩ እንደሌላው ዝርዝር እንዲኖር፡
c_typent:libelle:id:parent_list_code|የወላጅ_ዓምድ: ማጣሪያ ExtrafieldParamHelplink=መለኪያዎች ObjectName:Classpath
አገባብ መሆን አለባቸው የነገር ስም: ክፍል ExtrafieldParamHelpSeparator=ለቀላል መለያየት ባዶ ያቆዩ
ለሚሰበሰብ መለያየት ይህንን ወደ 1 ያዋቅሩት (ለአዲስ ክፍለ ጊዜ በነባሪነት ክፈት፣ ከዚያ ለእያንዳንዱ ክፍለ ጊዜ ሁኔታ ይቀመጣል)
ይህን ወደ 2 አዘጋጅ ለሚፈርስ መለያየት (ለአዲስ ክፍለ ጊዜ በነባሪነት ወድቋል፣ ከዚያ ሁኔታ ለእያንዳንዱ ተጠቃሚ ክፍለ ጊዜ ይጠበቃል) @@ -483,7 +483,7 @@ ExternalModule=ውጫዊ ሞጁል InstalledInto=ወደ ማውጫ %s ተጭኗል BarcodeInitForThirdparties=ለሶስተኛ ወገኖች የጅምላ ባርኮድ መግቢያ BarcodeInitForProductsOrServices=ለምርቶች ወይም አገልግሎቶች የጅምላ ባር ኮድ መግቢያ ወይም ዳግም ያስጀምሩ -CurrentlyNWithoutBarCode=በአሁኑ ጊዜ %s=' ሪከርድ አለህ። notranslate'>%s bardet2'>
bard . +CurrentlyNWithoutBarCode=Currently, you have %s record on %s %s without barcode defined. InitEmptyBarCode=Init ዋጋ ለ%s ባዶ ባርኮዶች EraseAllCurrentBarCode=ሁሉንም የባርኮድ ዋጋዎች ደምስስ ConfirmEraseAllCurrentBarCode=እርግጠኛ ነዎት ሁሉንም የባርኮድ እሴቶች መሰረዝ ይፈልጋሉ? @@ -509,7 +509,7 @@ WarningPHPMailA=- የኢሜል አገልግሎት አቅራቢውን አገል WarningPHPMailB=- አንዳንድ የኢሜል አገልግሎት አቅራቢዎች (እንደ ያሁ ያሉ) ከሌላ አገልጋይ ከራሳቸው አገልጋይ ኢሜይል እንዲልኩ አይፈቅዱም። አሁን ያላችሁት ዝግጅት የኢሜል አቅራቢዎን አገልጋይ ሳይሆን ኢሜል ለመላክ የመተግበሪያውን አገልጋይ ይጠቀማል ስለዚህ አንዳንድ ተቀባዮች (ከዲኤምአርሲ ገዳቢ ፕሮቶኮል ጋር የሚስማማው) ኢሜልዎን እና አንዳንድ የኢሜል አቅራቢዎችን መቀበል ይችሉ እንደሆነ የኢሜል አቅራቢዎን ይጠይቃሉ ። (እንደ ያሁ አይነት) አገልጋዩ የእነሱ ስላልሆነ "አይ" የሚል ምላሽ ሊሰጥ ይችላል፣ ስለዚህ ከተላኩ ኢሜይሎችዎ ውስጥ ጥቂቶቹ ለማድረስ ተቀባይነት ላይኖራቸው ይችላል (የኢሜል አቅራቢዎን የመላኪያ ኮታም ይጠንቀቁ)። WarningPHPMailC=- የእራስዎን የኢሜል አገልግሎት አቅራቢ SMTP አገልጋይ ኢሜይሎችን ለመላክ እንዲሁ አስደሳች ነው ስለዚህ ከመተግበሪያው የተላኩ ኢሜይሎች በሙሉ ወደ የመልእክት ሳጥንዎ "የተላኩ" ማውጫ ውስጥ ይቀመጣሉ። WarningPHPMailD=ስለዚህ የኢሜል መላኪያ ዘዴን ወደ "SMTP" እሴት ለመቀየር ይመከራል. -WarningPHPMailDbis=ኢሜይሎችን ለመላክ ነባሪውን የ"PHP" ዘዴ ማቆየት ከፈለግክ ይህን ማስጠንቀቂያ ችላ በል ወይም በ%sእዚህ ጠቅ በማድረግ ያስወግዱት%s%s +WarningPHPMailDbis=If you really want to keep the default "PHP" method to send emails, just ignore this warning, or remove it by %sclicking here%s. WarningPHPMail2=የኢሜል SMTP አቅራቢዎ የኢሜል ደንበኛን ለአንዳንድ የአይፒ አድራሻዎች መገደብ ካለበት (በጣም አልፎ አልፎ) ይህ የመልእክት ተጠቃሚ ወኪሉ (MUA) ለኢአርፒ CRM መተግበሪያዎ የአይፒ አድራሻ ነው፡ %s። WarningPHPMailSPF=በላኪ ኢሜል አድራሻዎ ውስጥ ያለው የጎራ ስም በSPF መዝገብ ከተጠበቀ (የእርስዎን የጎራ ስም ሬጅስትር ይጠይቁ) በጎራዎ ዲ ኤን ኤስ የ SPF መዝገብ ውስጥ የሚከተሉትን አይፒዎች ማከል አለብዎት: %s። ActualMailSPFRecordFound=ትክክለኛው የSPF መዝገብ ተገኝቷል (ለኢሜል %s): %s @@ -518,8 +518,8 @@ DependsOn=ይህ ሞጁል ሞጁሉን ያስፈልገዋል RequiredBy=ይህ ሞጁል በሞጁል(ዎች) ያስፈልጋል TheKeyIsTheNameOfHtmlField=ይህ የኤችቲኤምኤል መስክ ስም ነው። የመስክ ቁልፍ ስም ለማግኘት የኤችቲኤምኤል ገጹን ይዘት ለማንበብ የቴክኒክ እውቀት ያስፈልጋል። PageUrlForDefaultValues=የገጹን URL አንጻራዊ መንገድ ማስገባት አለብህ። በዩአርኤል ውስጥ ግቤቶችን ካካተቱ፣ በአሰሳ URL ውስጥ ያሉ ሁሉም መመዘኛዎች እዚህ ላይ የተገለጸው ዋጋ ካላቸው ውጤታማ ይሆናል። -PageUrlForDefaultValuesCreate=
ምሳሌ፡
ቅጹ አዲስ ሶስተኛ ወገን ለመፍጠር b0e7843947c06 ነው። /span>%s
.
ወደ ውጫዊ ሞጁሎች URL ተጭኗል። ብጁ ማውጫ፣ "ብጁ/"ን አያካትቱ፣ስለዚህ እንደ mymodule/mypage.php ያለውን መንገድ ተጠቀም እንጂ ብጁ አትሁን። /mymodule/mypage.php.
ነባሪ እሴት ከፈለጉ url የተወሰነ መለኪያ ካለው ብቻ %s -PageUrlForDefaultValuesList=
ምሳሌ፡
የሦስተኛ ወገኖችን ዝርዝር ለሚያካሂደው ገጽ b0e7843947c06 >%s.
ወደ ብጁ ዳይሬክተሮች ውጫዊ ሞጁሎች ተጭኗል። "ብጁ/"ን አያካትቱ ስለዚህ እንደ mymodule/mypagelist.php ሳይሆን ብጁ/mymodule ይጠቀሙ። /mypagelist.php.
ነባሪ እሴት ከፈለጉ url የተወሰነ መለኪያ ካለው ብቻ %s +PageUrlForDefaultValuesCreate=
Example:
For the form to create a new third party, it is %s.
For URL of external modules installed into custom directory, do not include the "custom/", so use path like mymodule/mypage.php and not custom/mymodule/mypage.php.
If you want default value only if url has some parameter, you can use %s +PageUrlForDefaultValuesList=
Example:
For the page that lists third parties, it is %s.
For URL of external modules installed into custom directory, do not include the "custom/" so use a path like mymodule/mypagelist.php and not custom/mymodule/mypagelist.php.
If you want default value only if url has some parameter, you can use %s AlsoDefaultValuesAreEffectiveForActionCreate=እንዲሁም ለቅጽ አፈጣጠር ነባሪ ዋጋዎችን እንደገና መፃፍ በትክክል ለተዘጋጁ ገፆች ብቻ እንደሚሰራ (ስለዚህ በመለኪያ ድርጊት = መፍጠር ወይም ማቅረብ...) EnableDefaultValues=ነባሪ እሴቶችን ማበጀትን ያንቁ EnableOverwriteTranslation=ትርጉሞችን ማበጀት ፍቀድ @@ -1197,6 +1197,7 @@ Skin=የቆዳ ጭብጥ DefaultSkin=ነባሪ የቆዳ ገጽታ MaxSizeList=ለዝርዝር ከፍተኛው ርዝመት DefaultMaxSizeList=ለዝርዝሮች ነባሪ ከፍተኛ ርዝመት +DisplayGrandTotalInList=Display grand total (for all pages) in lists footer DefaultMaxSizeShortList=ለአጭር ዝርዝሮች ነባሪ ከፍተኛ ርዝመት (ማለትም በደንበኛ ካርድ ውስጥ) MessageOfDay=የእለቱ መልእክት MessageLogin=የመግቢያ ገጽ መልእክት @@ -1246,10 +1247,10 @@ Delays_MAIN_DELAY_EXPENSEREPORTS=ለማጽደቅ የወጪ ሪፖርት Delays_MAIN_DELAY_HOLIDAYS=ለማጽደቅ ጥያቄዎችን ይተዉ SetupDescription1=ዶሊባርርን መጠቀም ከመጀመርዎ በፊት አንዳንድ የመጀመሪያ መለኪያዎች መገለጽ እና ሞጁሎች መንቃት/መዋቀር አለባቸው። SetupDescription2=የሚከተሉት ሁለት ክፍሎች የግዴታ ናቸው (በማዋቀር ምናሌ ውስጥ ያሉት ሁለቱ የመጀመሪያ ግቤቶች) -SetupDescription3=%s -> %scz0040

የመተግበሪያዎን ነባሪ ባህሪ ለማበጀት የሚያገለግሉ መሰረታዊ መለኪያዎች (ለምሳሌ ከአገር ጋር የተገናኙ ባህሪያት)። -SetupDescription4=
%s -> %scz0040

ይህ ሶፍትዌር የበርካታ ሞጁሎች/መተግበሪያዎች ስብስብ ነው። ከእርስዎ ፍላጎቶች ጋር የተያያዙ ሞጁሎች መንቃት እና መዋቀር አለባቸው። እነዚህ ሞጁሎች ሲነቁ የምናሌ ግቤቶች ይታያሉ። +SetupDescription3=
%s -> %s

Basic parameters used to customize the default behavior of your application (e.g for country-related features). +SetupDescription4=%s -> %s

This software is a suite of many modules/applications. The modules related to your needs must be enabled and configured. Menu entries will appears with the activation of these modules. SetupDescription5=ሌሎች የማዋቀር ምናሌ ግቤቶች የአማራጭ መለኪያዎችን ያስተዳድራሉ። -SetupDescriptionLink=%s - %s / span> +SetupDescriptionLink=%s - %s SetupDescription3b=የመተግበሪያዎን ነባሪ ባህሪ ለማበጀት የሚያገለግሉ መሰረታዊ መለኪያዎች (ለምሳሌ ከአገር ጋር ለተያያዙ ባህሪያት)። SetupDescription4b=ይህ ሶፍትዌር የበርካታ ሞጁሎች/መተግበሪያዎች ስብስብ ነው። ከእርስዎ ፍላጎቶች ጋር የተያያዙ ሞጁሎች መንቃት አለባቸው. እነዚህ ሞጁሎች ሲነቁ የምናሌ ግቤቶች ይታያሉ። AuditedSecurityEvents=ኦዲት የተደረጉ የደህንነት ክስተቶች @@ -1268,7 +1269,7 @@ BrowserOS=አሳሽ OS ListOfSecurityEvents=የዶሊባርር የደህንነት ክስተቶች ዝርዝር SecurityEventsPurged=የደህንነት ክስተቶች ጸድተዋል። TrackableSecurityEvents=መከታተል የሚችሉ የደህንነት ክስተቶች -LogEventDesc=ለተወሰኑ የደህንነት ክስተቶች መግባትን አንቃ። ምዝግብ ማስታወሻውን በምናሌ በኩል ያስተዳድራሉ %s - %s notranslate'>
። ማስጠንቀቂያ፣ ይህ ባህሪ በመረጃ ቋቱ ውስጥ ከፍተኛ መጠን ያለው ውሂብ ሊያመነጭ ይችላል። +LogEventDesc=Enable logging for specific security events. Administrators the log via menu %s - %s. Warning, this feature can generate a large amount of data in the database. AreaForAdminOnly=የማዋቀር መለኪያዎች በአስተዳዳሪ ተጠቃሚዎች ብቻ ሊቀናበሩ ይችላሉ። SystemInfoDesc=የስርዓት መረጃ በንባብ ብቻ ሁነታ የሚያገኙት ልዩ ልዩ ቴክኒካዊ መረጃ እና ለአስተዳዳሪዎች ብቻ የሚታይ ነው። SystemAreaForAdminOnly=ይህ አካባቢ ለአስተዳዳሪ ተጠቃሚዎች ብቻ ይገኛል። የዶሊባርር ተጠቃሚ ፈቃዶች ይህንን ገደብ መለወጥ አይችሉም። @@ -1281,13 +1282,13 @@ AvailableModules=የሚገኝ መተግበሪያ/ሞዱሎች ToActivateModule=ሞጁሎችን ለማግበር ወደ ማቀናበሪያ ቦታ ይሂዱ (ቤት -> ማዋቀር -> ሞጁሎች)። SessionTimeOut=ለክፍለ ጊዜ ጊዜው አልፏል SessionExplanation=የክፍለ-ጊዜው ማጽጃ የሚከናወነው በInternal PHP ክፍለ ጊዜ ማጽጃ (እና ምንም ካልሆነ) ይህ ቁጥር ከዚህ መዘግየት በፊት ክፍለ ጊዜው እንደማያልቅ ዋስትና ይሰጣል። የውስጥ ፒኤችፒ ክፍለ ጊዜ ማጽጃ ክፍለ ጊዜው ከዚህ መዘግየት በኋላ ጊዜው እንደሚያልፍ ዋስትና አይሰጥም። ከዚህ መዘግየት በኋላ እና የክፍለ-ጊዜ ማጽጃው ሲሰራ ጊዜው ያበቃል፣ ስለዚህ እያንዳንዱ %s/%sመዳረሻ፣ ነገር ግን በሌሎች ክፍለ-ጊዜዎች በሚደረግ መዳረሻ ጊዜ ብቻ (እሴቱ 0 ከሆነ፣ ክፍለ-ጊዜውን ማጽዳት በውጫዊ ሂደት ብቻ ነው የሚከናወነው) .
ማስታወሻ፡ በአንዳንድ የውጫዊ ክፍለ ጊዜ ማጽጃ ዘዴ ባላቸው አገልጋዮች ላይ (ክሮን በዴቢያን፣ ubuntu ...)፣ ክፍለ-ጊዜዎቹ በውጫዊ ማዋቀር ከተወሰነ ጊዜ በኋላ ሊጠፉ ይችላሉ። እዚህ የገባው ዋጋ ምንም ይሁን ምን. -SessionsPurgedByExternalSystem=በዚህ አገልጋይ ላይ ያሉ ክፍለ-ጊዜዎች በውጫዊ ዘዴ (ክሮን በዴቢያን፣ ubuntu ...)፣ ምናልባት እያንዳንዱ %s ሰከንድ (= የመለኪያ እሴት session.gc_maxlifetimeb09a4b173) , ስለዚህ እዚህ ያለውን ዋጋ መቀየር ምንም ውጤት የለውም. የክፍለ ጊዜ መዘግየትን እንዲቀይር የአገልጋይ አስተዳዳሪን መጠየቅ አለብህ። +SessionsPurgedByExternalSystem=Sessions on this server seems to be cleaned by an external mechanism (cron under debian, ubuntu ...), probably every %s seconds (= value of parameter session.gc_maxlifetime), so changing the value here has no effect. You must ask the server administrator to change session delay. TriggersAvailable=የሚገኙ ቀስቅሴዎች TriggersDesc=ቀስቅሴዎች ወደ ማውጫ htdocs/core/triggers ማውጫ ውስጥ አንዴ ከተገለበጡ የዶሊባርር የስራ ፍሰት ባህሪን የሚቀይሩ ፋይሎች ናቸው። አዳዲስ ድርጊቶችን ይገነዘባሉ, በ Dolibarr ክስተቶች (አዲስ ኩባንያ ፈጠራ, የክፍያ መጠየቂያ ማረጋገጫ, ...) ላይ ነቅተዋል. TriggerDisabledByName=በዚህ ፋይል ውስጥ ያሉ ቀስቅሴዎች በስማቸው በ-NORUN ቅጥያ ተሰናክለዋል። -TriggerDisabledAsModuleDisabled=በዚህ ፋይል ውስጥ ያሉ ቀስቅሴዎች እንደ ሞጁል %s ሊሰናከል አይችልም። +TriggerDisabledAsModuleDisabled=Triggers in this file are disabled as module %s is disabled. TriggerAlwaysActive=በዚህ ፋይል ውስጥ ያሉ ቀስቅሴዎች ምንጊዜም ንቁ ናቸው፣ ምንም አይነት የነቃው የ Dolibarr ሞጁሎች። -TriggerActiveAsModuleActive=በዚህ ፋይል ውስጥ ያሉ ቀስቅሴዎች እንደ ሞጁል %s የነቃ ነው%s is enabled. GeneratedPasswordDesc=በራስ-ሰር ለሚፈጠሩ የይለፍ ቃሎች የሚጠቀሙበትን ዘዴ ይምረጡ። DictionaryDesc=ሁሉንም የማጣቀሻ ውሂብ አስገባ። እሴቶችዎን ወደ ነባሪ ማከል ይችላሉ። ConstDesc=ይህ ገጽ በሌሎች ገጾች ላይ የማይገኙ ግቤቶችን እንዲያርትዑ ይፈቅድልዎታል። እነዚህ በአብዛኛው የተጠበቁ መለኪያዎች ለገንቢዎች/ላቀ መላ ፍለጋ ብቻ ናቸው። @@ -1306,8 +1307,8 @@ NoEventOrNoAuditSetup=ምንም የደህንነት ክስተት አልተመዘ NoEventFoundWithCriteria=ለዚህ የፍለጋ መስፈርት ምንም የደህንነት ክስተት አልተገኘም። SeeLocalSendMailSetup=የአካባቢዎን የመልእክት መልእክት ማዋቀር ይመልከቱ BackupDesc=የሙሉ የ Dolibarr ጭነት ምትኬ ሁለት ደረጃዎችን ይፈልጋል። -BackupDesc2=የ"ሰነዶች" ማውጫ ይዘቶችን ምትኬ ያስቀምጡ (%sb09a4b739f17f>b09a4b739f17f> ሁሉንም የተሰቀሉ እና የተፈጠሩ ፋይሎችን የያዘ። ይህ ደግሞ በደረጃ 1 ውስጥ የተፈጠሩትን ሁሉንም የቆሻሻ ፋይሎች ያካትታል። ይህ ክዋኔ ለብዙ ደቂቃዎች ሊቆይ ይችላል። -BackupDesc3=የውሂብ ጎታህን አወቃቀር እና ይዘቶች (%s ወደ ውስጥ አስቀምጥ የቆሻሻ መጣያ ፋይል. ለዚህም, የሚከተለውን ረዳት መጠቀም ይችላሉ. +BackupDesc2=Backup the contents of the "documents" directory (%s) containing all uploaded and generated files. This will also include all the dump files generated in Step 1. This operation may last several minutes. +BackupDesc3=Backup the structure and contents of your database (%s) into a dump file. For this, you can use the following assistant. BackupDescX=በማህደር የተቀመጠው ማውጫ ደህንነቱ በተጠበቀ ቦታ መቀመጥ አለበት። BackupDescY=የተፈጠረው የቆሻሻ መጣያ ፋይል ደህንነቱ በተጠበቀ ቦታ መቀመጥ አለበት። BackupPHPWarning=ምትኬ በዚህ ዘዴ ሊረጋገጥ አይችልም። ቀዳሚው ይመከራል። @@ -1371,8 +1372,8 @@ SendmailOptionMayHurtBuggedMTA="PHP mail direct" ዘዴን በመጠቀም መ TranslationSetup=የትርጉም ማዋቀር TranslationKeySearch=የትርጉም ቁልፍ ወይም ሕብረቁምፊ ይፈልጉ TranslationOverwriteKey=የትርጉም ሕብረቁምፊን ይፃፉ -TranslationDesc=የማሳያ ቋንቋን እንዴት ማዋቀር እንደሚቻል፡
* ነባሪ/ስርዓት ሰፊ፡ ሜኑ ቤት -> ማዋቀር -> አሳይ
* በእያንዳንዱ ተጠቃሚ፡ በማያ ገጹ ላይኛው ክፍል ላይ ያለውን የተጠቃሚ ስም ጠቅ ያድርጉ እና b0e784394006 span>የተጠቃሚ ማሳያ ማዋቀር በተጠቃሚ ካርዱ ላይ። -TranslationOverwriteDesc=እንዲሁም የሚከተለውን ሰንጠረዥ የሚሞሉ ሕብረቁምፊዎችን መሻር ይችላሉ። ቋንቋህን ከ"%s" ተቆልቋይ ምረጥ፣ የትርጉም ቁልፍ ሕብረቁምፊውን ወደ "%s" እና አዲሱ ትርጉምህን ወደ " አስገባ class='notranslate'>%s" +TranslationDesc=How to set the display language:
* Default/Systemwide: menu Home -> Setup -> Display
* Per user: Click on the username at the top of the screen and modify the User Display Setup tab on the user card. +TranslationOverwriteDesc=You can also override strings filling the following table. Choose your language from "%s" dropdown, insert the translation key string into "%s" and your new translation into "%s" TranslationOverwriteDesc2=የትኛውን የትርጉም ቁልፍ መጠቀም እንዳለቦት ለማወቅ እንዲረዳህ ሌላኛውን ትር መጠቀም ትችላለህ TranslationString=የትርጉም ሕብረቁምፊ CurrentTranslationString=የአሁኑ የትርጉም ሕብረቁምፊ @@ -1397,7 +1398,7 @@ SearchOptim=የፍለጋ ማመቻቸት YouHaveXObjectUseComboOptim=በመረጃ ቋቱ ውስጥ %s %s አለህ። በተጫኑ ቁልፍ ክስተቶች ላይ ጥምር ዝርዝርን ለመጫን ወደ ሞጁል ማዋቀር መሄድ ይችላሉ። YouHaveXObjectUseSearchOptim=በመረጃ ቋቱ ውስጥ %s %s አለህ። በHome-Setup-Other ውስጥ ቋሚውን %s ወደ 1 ማከል ትችላለህ። YouHaveXObjectUseSearchOptimDesc=ይህ ፍለጋውን ወደ ሕብረቁምፊዎች መጀመሪያ ይገድባል ይህም የመረጃ ቋቱ መረጃ ጠቋሚዎችን እንዲጠቀም ያደርገዋል እና ፈጣን ምላሽ ማግኘት አለብዎት። -YouHaveXObjectAndSearchOptimOn=በመረጃ ቋቱ ውስጥ %s %s አለህ እና ቋሚ %s ተቀናብሯል span class='notranslate'>%s
በቤት-ማዋቀር-ሌላ። +YouHaveXObjectAndSearchOptimOn=You have %s %s in the database and constant %s is set to %s in Home-Setup-Other. BrowserIsOK=የ %s የድር አሳሽ እየተጠቀምክ ነው። ይህ አሳሽ ለደህንነት እና አፈጻጸም ደህና ነው። BrowserIsKO=የ %s የድር አሳሽ እየተጠቀምክ ነው። ይህ አሳሽ ለደህንነት፣ አፈጻጸም እና አስተማማኝነት መጥፎ ምርጫ እንደሆነ ይታወቃል። ፋየርፎክስ፣ ክሮም፣ ኦፔራ ወይም ሳፋሪ እንዲጠቀሙ እንመክራለን። PHPModuleLoaded=የPHP ክፍል %s ተጭኗል @@ -1663,7 +1664,7 @@ LDAPDescUsers=ይህ ገጽ በ LDAP ዛፍ ውስጥ የኤልዲኤፒ ባህ LDAPDescGroups=ይህ ገጽ በ LDAP ዛፍ ውስጥ የኤልዲኤፒ ባህሪያትን ስም በዶሊባርር ቡድኖች ላይ ላለው እያንዳንዱ መረጃ እንዲገልጹ ያስችልዎታል። LDAPDescMembers=ይህ ገጽ በ LDAP ዛፍ ውስጥ የኤልዲኤፒ ባህሪያትን ስም በዶሊባርር አባላት ሞጁል ላይ ላለው እያንዳንዱ መረጃ እንዲገልጹ ያስችልዎታል። LDAPDescMembersTypes=ይህ ገጽ በ LDAP ዛፍ ውስጥ የኤልዲኤፒ ባህሪያትን ስም በዶሊባርር አባላት አይነቶች ላይ ላለው እያንዳንዱ መረጃ እንዲገልጹ ያስችልዎታል። -LDAPDescValues=የምሳሌ ዋጋዎች የተነደፉት ለOpenLDAP በሚከተለው የተጫኑ መርሃ ግብሮች ነው፡ 360ee365ee core.schema, cosine.schema, inetorgperson.schema
)። እሴቶችን እና ክፈት LDAPን ከተጠቀሙ፣ ሁሉም የተጫኑ መርሃግብሮችን ለመምረጥ የኤልዲኤፒ ማዋቀሪያ ፋይልዎን slapd.conf ያሻሽሉ። +LDAPDescValues=Example values are designed for OpenLDAP with following loaded schemas: core.schema, cosine.schema, inetorgperson.schema). If you use thoose values and OpenLDAP, modify your LDAP config file slapd.conf to have all thoose schemas loaded. ForANonAnonymousAccess=ለተረጋገጠ መዳረሻ (ለመፃፍ መዳረሻ ለምሳሌ) PerfDolibarr=የአፈጻጸም ማዋቀር/አሳቢ ሪፖርት YouMayFindPerfAdviceHere=ይህ ገጽ ከአፈጻጸም ጋር የተያያዙ አንዳንድ ቼኮችን ወይም ምክሮችን ይሰጣል። @@ -1860,7 +1861,7 @@ PastDelayVCalExport=ያለፈውን ክስተት ወደ ውጭ አትላክ SecurityKey = የሚስጥራዊ ቁልፍ ##### ClickToDial ##### ClickToDialSetup=ሞጁል ማዋቀርን ለመደወል ጠቅ ያድርጉ -ClickToDialUrlDesc=በስልክ ፒክቶ ላይ ጠቅ ሲደረግ URL ይጠራል። በዩአርኤል ውስጥ፣ መለያዎችን መጠቀም ትችላለህ
__PHONETO__b09a4b739f17f8z ያደርጋል በሚደውለው ሰው ስልክ ቁጥር ተተክቷል
__PHONEFROM__b09a4b739f17f>ያ በሚደውለው ሰው (የእርስዎ) ስልክ ቁጥር ይተካዋል
__LOGIN__b09a4b73z span> በ clicktodial login የሚተካ (በተጠቃሚ ካርድ ላይ የተገለጸ)
__PASS__ በጠቅታ ይለፍ ቃል የሚተካ (በተጠቃሚ ካርድ ላይ የተገለጸ)። +ClickToDialUrlDesc=URL called when a click on phone picto is done. In URL, you can use tags
__PHONETO__ that will be replaced with the phone number of person to call
__PHONEFROM__ that will be replaced with phone number of calling person (yours)
__LOGIN__ that will be replaced with clicktodial login (defined on user card)
__PASS__ that will be replaced with clicktodial password (defined on user card). ClickToDialDesc=ይህ ሞጁል የዴስክቶፕ ኮምፒዩተር ሲጠቀሙ ስልክ ቁጥሮችን ወደ ጠቅ ሊደረጉ የሚችሉ አገናኞች ይለውጣል። አንድ ጠቅታ ቁጥሩን ይደውላል. ይህ በዴስክቶፕዎ ላይ ለስላሳ ስልክ ሲጠቀሙ ወይም ለምሳሌ በ SIP ፕሮቶኮል ላይ የተመሰረተ የሲቲኤ ሲስተም ሲጠቀሙ የስልክ ጥሪውን ለመጀመር ሊያገለግል ይችላል። ማስታወሻ: ስማርትፎን ሲጠቀሙ, የስልክ ቁጥሮች ሁልጊዜ ጠቅ ሊደረጉ ይችላሉ. ClickToDialUseTelLink=በስልክ ቁጥሮች ላይ "tel:" የሚለውን አገናኝ ብቻ ይጠቀሙ ClickToDialUseTelLinkDesc=ተጠቃሚዎችዎ ሶፍት ፎን ወይም የሶፍትዌር በይነገጽ ካላቸው፣ በአሳሹ ውስጥ በተመሳሳይ ኮምፒዩተር ላይ የተጫነ እና በአሳሽዎ ውስጥ በ"ቴል:" የሚጀምር ሊንክ ሲጫኑ ይደውሉ። በ"sIP:" የሚጀምር አገናኝ ወይም ሙሉ የአገልጋይ መፍትሄ (የአገር ውስጥ ሶፍትዌር መጫን አያስፈልግም) ከፈለጉ ይህንን ወደ "አይ" ማዘጋጀት እና ቀጣዩን መስክ መሙላት አለብዎት። @@ -1920,8 +1921,8 @@ IfSetToYesDontForgetPermission=ወደ ባዶ ያልሆነ እሴት ከተዋቀ GeoIPMaxmindSetup=GeoIP Maxmind ሞጁል ማዋቀር PathToGeoIPMaxmindCountryDataFile=ወደ አገር ትርጉም Maxmind ip ን የያዘ ወደ ፋይል የሚወስድበት መንገድ NoteOnPathLocation=የእርስዎ የአይ ፒ ወደ ሀገር ውሂብ ፋይል ፒኤችፒ ሊያነበው በሚችለው ማውጫ ውስጥ መሆን እንዳለበት ልብ ይበሉ (የ PHP open_basedir ማዋቀር እና የፋይል ስርዓት ፈቃዶችን ያረጋግጡ)። -YouCanDownloadFreeDatFileTo=የ Maxmind GeoIP የሀገር ፋይል ነጻ ማሳያ ስሪትን የማክስmind ጂኦአይፒ የሀገር ፋይል በ b0ecb2ecbz07 ላይ ማውረድ ትችላለህ። / span> -YouCanDownloadAdvancedDatFileTo=ተጨማሪ ሙሉ ስሪት ከዝማኔዎች ጋር የ Maxmind GeoIP የሀገር ፋይል በ%s። +YouCanDownloadFreeDatFileTo=You can download a free demo version of the Maxmind GeoIP country file at %s. +YouCanDownloadAdvancedDatFileTo=You can also download a more complete version, with updates, of the Maxmind GeoIP country file at %s. TestGeoIPResult=የልወጣ IP -> አገር ሙከራ ##### Projects ##### ProjectsNumberingModules=የፕሮጀክቶች ቁጥር መስጫ ሞጁል @@ -1971,7 +1972,7 @@ SomethingMakeInstallFromWebNotPossible=በሚከተሉት ምክንያቶች የ SomethingMakeInstallFromWebNotPossible2=በዚህ ምክንያት፣ እዚህ ላይ የተገለጸው የማሻሻል ሂደት አንድ ልዩ ተጠቃሚ ሊያደርገው የሚችለው በእጅ የሚሰራ ሂደት ነው። InstallModuleFromWebHasBeenDisabledContactUs=የውጫዊ ሞጁሎችን ወይም ተለዋዋጭ ድር ጣቢያዎችን መጫን ወይም ማልማት፣ ከመተግበሪያው፣ በአሁኑ ጊዜ ለደህንነት ዓላማ ተቆልፏል። ይህንን ባህሪ ማንቃት ከፈለጉ እባክዎ ያነጋግሩን። InstallModuleFromWebHasBeenDisabledByFile=የውጫዊ ሞጁል ከመተግበሪያው መጫን በአስተዳዳሪዎ ተሰናክሏል። ይህንን እንዲፈቅድ %s ፋይሉን እንዲያስወግድ መጠየቅ አለብህ። ባህሪ. -ConfFileMustContainCustom=ከመተግበሪያው ውጫዊ ሞጁል መጫን ወይም መገንባት የሞጁሉን ፋይሎች ወደ ማውጫ ውስጥ ማስቀመጥ አለበት %s ። ይህንን ማውጫ በDolibarr ለማስኬድ፣ 2 የመመሪያ መስመሮችን ለመጨመር የእርስዎን conf/conf.php ማዋቀር አለብህ፡
$dolibarr_main_url_root_alt='/custom';b710 class='notranslate'>b7010 ='notranslate'>
$dolibarr_main_document_root_alt='b0ecb2ecztomlate'>b0ecb2ecztomtom07fe/span > +ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory %s. To have this directory processed by Dolibarr, you must setup your conf/conf.php to add the 2 directive lines:
$dolibarr_main_url_root_alt='/custom';
$dolibarr_main_document_root_alt='%s/custom'; HighlightLinesOnMouseHover=የመዳፊት እንቅስቃሴ ሲያልፍ የጠረጴዛ መስመሮችን ያድምቁ HighlightLinesColor=አይጤው ሲያልፍ የመስመሩን ቀለም ያድምቁ (ያለ ድምቀት 'ffffff' ይጠቀሙ) HighlightLinesChecked=ሲፈተሽ የመስመሩን ቀለም ያድምቁ (ያለ ድምቀት 'ffffff' ይጠቀሙ) @@ -2065,7 +2066,7 @@ DetectionNotPossible=ማወቅ አይቻልም UrlToGetKeyToUseAPIs=ኤፒአይን ለመጠቀም ማስመሰያ ለማግኘት ዩአርኤል (አንድ ጊዜ ማስመሰያ ከደረሰ በኋላ በመረጃ ቋት የተጠቃሚ ሠንጠረዥ ውስጥ ይቀመጣል እና በእያንዳንዱ የኤፒአይ ጥሪ ላይ መቅረብ አለበት) ListOfAvailableAPIs=የሚገኙ APIs ዝርዝር activateModuleDependNotSatisfied=ሞጁል "%s" በሞጁል "%s" ላይ የተመሰረተ ነው, ይህ ጠፍቷል, ስለዚህ ሞጁል " %1$s" በትክክል ላይሰራ ይችላል። እባክህ ሞጁሉን ጫን "%2$s" ወይም ሞጁሉን አሰናክል "%1$s" ከማንኛውም አስገራሚ ነገር መጠበቅ ከፈለጉ -CommandIsNotInsideAllowedCommands=ለማስኬድ እየሞከሩት ያለው ትእዛዝ በፓራሜትር $dolibarr_main_restrict_os_commandsb0a65d071f6fc9z>በመለኪያ የተገለጹ የተፈቀደላቸው ትዕዛዞች ዝርዝር ውስጥ የለም። class='notranslate'>conf.php ፋይል። +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter $dolibarr_main_restrict_os_commands in the conf.php file. LandingPage=ማረፊያ ገጽ SamePriceAlsoForSharedCompanies=የባለብዙ ኩባንያ ሞጁሉን ከተጠቀሙ በምርጫው "ነጠላ ዋጋ" ምርቶች በአካባቢው መካከል የሚጋሩ ከሆነ ዋጋው ለሁሉም ኩባንያዎች ተመሳሳይ ይሆናል. ModuleEnabledAdminMustCheckRights=ሞዱል ነቅቷል። የነቃ ሞጁል(ዎች) ፈቃዶች የተሰጡት ለአስተዳዳሪ ተጠቃሚዎች ብቻ ነው። አስፈላጊ ከሆነ ለሌሎች ተጠቃሚዎች ወይም ቡድኖች ፈቃዶችን በእጅ መስጠት ሊኖርብዎ ይችላል። @@ -2074,7 +2075,7 @@ TypeCdr=የመክፈያ ጊዜው የክፍያ ቀን እና በቀን ውስጥ BaseCurrency=የኩባንያው የማጣቀሻ ምንዛሪ (ይህንን ለመለወጥ ወደ ኩባንያው ማዋቀር ይሂዱ) WarningNoteModuleInvoiceForFrenchLaw=ይህ ሞጁል %s የፈረንሳይ ህጎችን ያከብራል (Loi Finance 2016)። WarningNoteModulePOSForFrenchLaw=ይህ ሞጁል %s የፈረንሳይ ህጎችን (Loi Finance 2016) ያከብራል ምክንያቱም ሞጁል የማይቀለበስ ምዝግብ ማስታወሻዎች በራስ ሰር ስለሚነቃ ነው። -WarningInstallationMayBecomeNotCompliantWithLaw=ውጫዊ ሞጁል የሆነውን ሞጁል %s ለመጫን እየሞከርክ ነው። ውጫዊ ሞጁል ማግበር ማለት የዚያን ሞጁል አታሚ ያምናሉ እና ይህ ሞጁል በማመልከቻዎ ባህሪ ላይ አሉታዊ ተጽዕኖ እንደማይኖረው እና በአገርዎ ህግጋት (%s) ያከብራል ማለት ነው። span>) ሞጁሉ ሕገ-ወጥ ባህሪን ካስተዋወቀ, ለህገ-ወጥ ሶፍትዌር አጠቃቀም ተጠያቂ ይሆናሉ. +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software. MAIN_PDF_MARGIN_LEFT=የግራ ህዳግ በፒዲኤፍ ላይ MAIN_PDF_MARGIN_RIGHT=የቀኝ ህዳግ በፒዲኤፍ ላይ @@ -2114,7 +2115,7 @@ YouCanDeleteFileOnServerWith=ይህንን ፋይል በአገልጋዩ ላይ ChartLoaded=የመለያ ገበታ ተጭኗል SocialNetworkSetup=የሞዱል ማህበራዊ አውታረ መረቦች ማዋቀር EnableFeatureFor=ለ%s ባህሪያትን አንቃ -VATIsUsedIsOff=ማሳሰቢያ፡ የሽያጭ ታክስን ወይም ተ.እ.ታን የመጠቀም አማራጩ ወደ ጠፍቷል በምናሌው - %s፣ ስለዚህ ጥቅም ላይ የሚውለው የሽያጭ ታክስ ወይም ቫት ሁልጊዜ ለሽያጭ 0 ይሆናል። +VATIsUsedIsOff=Note: The option to use Sales Tax or VAT has been set to Off in the menu %s - %s, so Sales tax or Vat used will always be 0 for sales. SwapSenderAndRecipientOnPDF=በፒዲኤፍ ሰነዶች ላይ የላኪ እና የተቀባይ አድራሻ ቦታ ይቀያይሩ FeatureSupportedOnTextFieldsOnly=ማስጠንቀቂያ፣ ባህሪ የሚደገፈው በጽሑፍ መስኮች እና ጥምር ዝርዝሮች ላይ ብቻ ነው። እንዲሁም የዩአርኤል መለኪያ action=create or action=edit መዘጋጀት አለበት ወይም ይህን ባህሪ ለመቀስቀስ የገጽ ስም በ'new.php' ያበቃል። EmailCollector=ኢሜል ሰብሳቢ @@ -2176,7 +2177,7 @@ CreateCandidature=የሥራ ማመልከቻ ይፍጠሩ FormatZip=ዚፕ MainMenuCode=የምናሌ መግቢያ ኮድ (ዋና ምናሌ) ECMAutoTree=ራስ-ሰር የ ECM ዛፍን አሳይ -OperationParamDesc=አንዳንድ ውሂብ ለማውጣት የሚጠቀሙባቸውን ደንቦች ይግለጹ ወይም ለስራ የሚውሉ እሴቶችን ያቀናብሩ።

የኩባንያውን ስም ለማውጣት ምሳሌ ኢሜል ርእሱን ወደ ጊዜያዊ ተለዋዋጭ፡
tmp_var=EXTRACT:SUBJECT:መልዕክት ከኩባንያ ([^])\n]*)

የአንድን ነገር ባህሪ ለመፍጠር ምሳሌዎች፡
/span>objproperty1=SET:ሃርድ ኮድ የተደረገ እሴት
objproperty2=SET:__tmp_var__
obj valuepropertyFE የሚዋቀረው ንብረት አስቀድሞ ካልተገለጸ ብቻ ነው)
objproperty4=EXTRACT:HEADER:X-Myheaderkey:\\s*([^\\s]*)
options_myextrafield1=EXTRACT:SUBJECT:([^& # 92;n]*)
object.objproperty5=EXTRACT:BODY:የእኔ ኩባንያ s([^\\s]*)

ብዙ ንብረቶችን ለማውጣት ወይም ለማዘጋጀት አዲስ መስመር ይጠቀሙ። +OperationParamDesc=Define the rules to use to extract some data or set values to use for operation.

Example to extract a company name from email subject into a temporary variable:
tmp_var=EXTRACT:SUBJECT:Message from company ([^\n]*)

Examples to set the properties of an object to create:
objproperty1=SET:a hard coded value
objproperty2=SET:__tmp_var__
objproperty3=SETIFEMPTY:a value (value is set only if property is not already defined)
objproperty4=EXTRACT:HEADER:X-Myheaderkey:\\s*([^\\s]*)
options_myextrafield1=EXTRACT:SUBJECT:([^\n]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a new line to extract or set several properties. OpeningHours=ክፍት የሚሆንበት ሰዓቶች OpeningHoursDesc=የድርጅትዎን መደበኛ የስራ ሰዓቶች እዚህ ያስገቡ። ResourceSetup=የመርጃ ሞጁል ውቅር @@ -2262,7 +2263,7 @@ ModuleActivatedMayExposeInformation=ይህ የPHP ቅጥያ ሚስጥራዊነ ModuleActivatedDoNotUseInProduction=ለልማቱ የተነደፈ ሞጁል ነቅቷል። በማምረት አካባቢ ላይ አታድርጉት። CombinationsSeparator=ለምርት ውህዶች መለያ ባህሪ SeeLinkToOnlineDocumentation=ለምሳሌዎች ከላይ ባለው ምናሌ ላይ ወደ የመስመር ላይ ሰነዶች አገናኝ ይመልከቱ -SHOW_SUBPRODUCT_REF_IN_PDF=ባህሪው "%s የሞጁል %s=span> ጥቅም ላይ ይውላል፣ የኪት ንዑስ ምርቶች ዝርዝሮችን በፒዲኤፍ አሳይ። +SHOW_SUBPRODUCT_REF_IN_PDF=If the feature "%s" of module %s is used, show details of subproducts of a kit on PDF. AskThisIDToYourBank=ይህን መታወቂያ ለማግኘት ባንክዎን ያነጋግሩ AdvancedModeOnly=ፍቃድ በላቁ የፍቃድ ሁነታ ብቻ ይገኛል። ConfFileIsReadableOrWritableByAnyUsers=የ conf ፋይል በማንኛውም ተጠቃሚ ሊነበብ ወይም ሊፃፍ ይችላል። ለድር አገልጋይ ተጠቃሚ እና ቡድን ብቻ ፍቃድ ይስጡ። @@ -2291,7 +2292,7 @@ APIsAreNotEnabled=የኤፒአይዎች ሞጁሎች አልነቁም። YouShouldSetThisToOff=ይህንን ወደ 0 ወይም አጥፋ ማዋቀር አለብዎት InstallAndUpgradeLockedBy=መጫን እና ማሻሻያ በፋይሉ ተቆልፏል %s InstallLockedBy=ጫን/እንደገና መጫን በፋይሉ ተቆልፏል %s -InstallOfAddonIsNotBlocked=የ addons ጭነቶች አልተቆለፉም። ፋይል ይፍጠሩ installmodules.lock ወደ ማውጫ b0aee83365837f ='notranslate'>%s
የውጭ addons/modules ጭነቶችን ለማገድ። +InstallOfAddonIsNotBlocked=Installations of addons are not locked. Create a file installmodules.lock into directory %s to block installations of external addons/modules. OldImplementation=የድሮ አተገባበር PDF_SHOW_LINK_TO_ONLINE_PAYMENT=አንዳንድ የመስመር ላይ ክፍያ ሞጁሎች ከነቃ (Paypal፣ Stripe፣...)፣ የመስመር ላይ ክፍያ ለመፈጸም በፒዲኤፍ ላይ አገናኝ ያክሉ DashboardDisableGlobal=ሁሉንም የተከፈቱ ነገሮች አውራ ጣትን በአለምአቀፍ ደረጃ አሰናክል @@ -2405,8 +2406,8 @@ NotAvailableByDefaultEnabledOnModuleActivation=በነባሪነት አልተፈ CSSPage=የሲኤስኤስ ዘይቤ Defaultfortype=ነባሪ DefaultForTypeDesc=ለአብነት አይነት አዲስ ኢሜይል ሲፈጥሩ በነባሪነት ጥቅም ላይ የሚውለው አብነት -OptionXShouldBeEnabledInModuleY=አማራጭ "%sወደ ሞጁል ውስጥ መንቃት አለበት ='notranslate'>
%s -OptionXIsCorrectlyEnabledInModuleY=አማራጭ "%ss ሞጁል ውስጥ ነቅቷል 'notranslate'>
%s +OptionXShouldBeEnabledInModuleY=Option "%s" should be enabled into module %s +OptionXIsCorrectlyEnabledInModuleY=Option "%s" is enabled into module %s AllowOnLineSign=የመስመር ላይ ፊርማ ፍቀድ AtBottomOfPage=ከገጹ ግርጌ FailedAuth=ያልተሳኩ ማረጋገጫዎች @@ -2433,3 +2434,12 @@ UrlPublicInterfaceHelpAdmin=It is possible to define an alias to the web server ExportUseForce=Use the parameter -f ExportUseForceHelp=Force to continue the export even when an error is found (Backup may not be reliable) CustomPrompt=Custom prompts +AiDescription=AI (Artificial Intelligence) features +AiDescriptionLong=Provides AI (Artificial Intelligence) features in different part of the application. Need external AI API. +AI_KEY_API_CHATGPT= Key for ChatGPT IA api +AiSetup=AI module setup +AiCustomPrompt=AI customs prompt +AI_CONFIGURATIONS_PROMPT=Custom prompt +ImageGeneration=Image generation +AIPromptForFeatures=AI custom prompts for features +EnterAnIP=Enter an IP address diff --git a/htdocs/langs/am_ET/agenda.lang b/htdocs/langs/am_ET/agenda.lang index 7e1253ab492..c6ed3d5f76a 100644 --- a/htdocs/langs/am_ET/agenda.lang +++ b/htdocs/langs/am_ET/agenda.lang @@ -137,7 +137,7 @@ DateActionEnd=የመጨረሻ ቀን AgendaUrlOptions1=ውጤቱን ለማጣራት የሚከተሉትን መለኪያዎች ማከል ይችላሉ- AgendaUrlOptions3=logina=%s አንድን ውፅዓት በተጠቃሚ ወደ ድርጊቶች እንዲገድብ %s። AgendaUrlOptionsNotAdmin=logina=!%s ውፅዓት በድርጊት ያልተገደበ ተጠቃሚ %s። -AgendaUrlOptions4=logint=%sተጠቃሚን ውፅዓት ለድርጊት ለመገደብ ተመድቧል። span class='notranslate'>%s(ባለቤት እና ሌሎች)። +AgendaUrlOptions4=logint=%s to restrict output to actions assigned to user %s (owner and others). AgendaUrlOptionsProject=project=__PROJECT_ID__ ከፕሮጀክት ጋር የተገናኙትን እርምጃዎች ለመገደብ 365ee 365ee __PROJECT_ID__። AgendaUrlOptionsNotAutoEvent=አውቶማቲክ ክስተቶችን ለማስቀረት notactiontype=systemauto። AgendaUrlOptionsIncludeHolidays=የበዓላት ክስተቶችን ለማካተት includeholidays=1። @@ -161,7 +161,7 @@ AddEvent=ክስተት ፍጠር MyAvailability=የእኔ ተገኝነት ActionType=የክስተት አይነት DateActionBegin=የክስተት መጀመሪያ ቀን -ConfirmCloneEvent=እርግጠኛ ነህ ክስተቱን መዝጋት ትፈልጋለህ %s? +ConfirmCloneEvent=Are you sure you want to clone the event %s? RepeatEvent=ክስተቱን ድገም። OnceOnly=አንዴ ብቻ EveryDay=በየቀኑ diff --git a/htdocs/langs/am_ET/assets.lang b/htdocs/langs/am_ET/assets.lang index ef04723c6c2..6c1653d3f93 100644 --- a/htdocs/langs/am_ET/assets.lang +++ b/htdocs/langs/am_ET/assets.lang @@ -1,4 +1,4 @@ -# Copyright (C) 2018 Alexandre Spangaro +# Copyright (C) 2018-2022 Alexandre Spangaro # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -16,50 +16,170 @@ # # Generic # -Assets = Assets -NewAsset = New asset -AccountancyCodeAsset = Accounting code (asset) -AccountancyCodeDepreciationAsset = Accounting code (depreciation asset account) -AccountancyCodeDepreciationExpense = Accounting code (depreciation expense account) -NewAssetType=New asset type -AssetsTypeSetup=Asset type setup -AssetTypeModified=Asset type modified -AssetType=Asset type -AssetsLines=Assets -DeleteType=Delete -DeleteAnAssetType=Delete an asset type -ConfirmDeleteAssetType=Are you sure you want to delete this asset type? -ShowTypeCard=Show type '%s' +NewAsset=አዲስ ንብረት +AccountancyCodeAsset=የሂሳብ ኮድ (ንብረት) +AccountancyCodeDepreciationAsset=የሂሳብ ኮድ (የዋጋ ቅነሳ የንብረት መለያ) +AccountancyCodeDepreciationExpense=የሂሳብ ኮድ (የዋጋ ቅናሽ ሂሳብ) +AssetsLines=ንብረቶች +DeleteType=ሰርዝ +DeleteAnAssetType=የንብረት ሞዴልን ሰርዝ +ConfirmDeleteAssetType=እርግጠኛ ነዎት ይህን የንብረት ሞዴል መሰረዝ ይፈልጋሉ? +ShowTypeCard=ሞዴል '%s' አሳይ # Module label 'ModuleAssetsName' -ModuleAssetsName = Assets +ModuleAssetsName=ንብረቶች # Module description 'ModuleAssetsDesc' -ModuleAssetsDesc = Assets description +ModuleAssetsDesc=የንብረት መግለጫ # # Admin page # -AssetsSetup = Assets setup -Settings = Settings -AssetsSetupPage = Assets setup page -ExtraFieldsAssetsType = Complementary attributes (Asset type) -AssetsType=Asset type -AssetsTypeId=Asset type id -AssetsTypeLabel=Asset type label -AssetsTypes=Assets types +AssetSetup=የንብረት ማዋቀር +AssetSetupPage=የንብረት ማዋቀር ገጽ +ExtraFieldsAssetModel=ተጨማሪ ባህሪያት (የንብረት ሞዴል) + +AssetsType=የንብረት ሞዴል +AssetsTypeId=የንብረት ሞዴል መታወቂያ +AssetsTypeLabel=የንብረት ሞዴል መለያ +AssetsTypes=የንብረት ሞዴሎች +ASSET_ACCOUNTANCY_CATEGORY=ቋሚ የንብረት ሒሳብ ቡድን # # Menu # -MenuAssets = Assets -MenuNewAsset = New asset -MenuTypeAssets = Type assets -MenuListAssets = List -MenuNewTypeAssets = New -MenuListTypeAssets = List +MenuAssets=ንብረቶች +MenuNewAsset=አዲስ ንብረት +MenuAssetModels=የሞዴል ንብረቶች +MenuListAssets=ዝርዝር +MenuNewAssetModel=አዲስ የንብረት ሞዴል +MenuListAssetModels=ዝርዝር # # Module # -NewAssetType=New asset type -NewAsset=New asset +ConfirmDeleteAsset=ይህን ንብረት በእርግጥ ማስወገድ ይፈልጋሉ? + +# +# Tab +# +AssetDepreciationOptions=የዋጋ ቅነሳ አማራጮች +AssetAccountancyCodes=የሂሳብ አያያዝ መለያዎች +AssetDepreciation=የዋጋ ቅነሳ + +# +# Asset +# +Asset=ንብረት +Assets=ንብረቶች +AssetReversalAmountHT=የተገላቢጦሽ መጠን (ያለ ታክስ) +AssetAcquisitionValueHT=የማግኛ መጠን (ያለ ታክስ) +AssetRecoveredVAT=የተመለሰ ተ.እ.ታ +AssetReversalDate=የተገላቢጦሽ ቀን +AssetDateAcquisition=የተገኘበት ቀን +AssetDateStart=የተጀመረበት ቀን +AssetAcquisitionType=የግዢ አይነት +AssetAcquisitionTypeNew=አዲስ +AssetAcquisitionTypeOccasion=ጥቅም ላይ የዋለ +AssetType=የንብረት አይነት +AssetTypeIntangible=የማይዳሰስ +AssetTypeTangible=የሚዳሰስ +AssetTypeInProgress=በሂደት ላይ +AssetTypeFinancial=የገንዘብ +AssetNotDepreciated=አልቀነሰም። +AssetDisposal=ማስወገድ +AssetConfirmDisposalAsk=Are you sure you want to dispose of the asset %s? +AssetConfirmReOpenAsk=Are you sure you want to reopen the asset %s? + +# +# Asset status +# +AssetInProgress=በሂደት ላይ +AssetDisposed=ተወግዷል +AssetRecorded=ተቆጥሯል። + +# +# Asset disposal +# +AssetDisposalDate=የሚወገድበት ቀን +AssetDisposalAmount=የማስወገጃ ዋጋ +AssetDisposalType=የማስወገጃ አይነት +AssetDisposalDepreciated=የዝውውር ዓመት ዋጋን ይቀንሱ +AssetDisposalSubjectToVat=አወጋገድ ተ.እ.ታ + +# +# Asset model +# +AssetModel=የንብረት ሞዴል +AssetModels=የንብረት ሞዴሎች + +# +# Asset depreciation options +# +AssetDepreciationOptionEconomic=የኢኮኖሚ ዋጋ መቀነስ +AssetDepreciationOptionAcceleratedDepreciation=የተፋጠነ የዋጋ ቅናሽ (ግብር) +AssetDepreciationOptionDepreciationType=የዋጋ ቅነሳ ዓይነት +AssetDepreciationOptionDepreciationTypeLinear=መስመራዊ +AssetDepreciationOptionDepreciationTypeDegressive=ወራዳ +AssetDepreciationOptionDepreciationTypeExceptional=ልዩ +AssetDepreciationOptionDegressiveRate=የማሽቆልቆል መጠን +AssetDepreciationOptionDuration=ቆይታ +AssetDepreciationOptionDurationType=የቆይታ ጊዜ ይተይቡ +AssetDepreciationOptionDurationTypeAnnual=አመታዊ +AssetDepreciationOptionDurationTypeMonthly=ወርሃዊ +AssetDepreciationOptionDurationTypeDaily=በየቀኑ +AssetDepreciationOptionRate=ደረጃ ይስጡ (%%) +AssetDepreciationOptionAmountBaseDepreciationHT=የዋጋ ቅናሽ መሰረት (ከተጨማሪ እሴት ታክስ በስተቀር) +AssetDepreciationOptionAmountBaseDeductibleHT=የሚቀነሰው መሠረት (ከተጨማሪ እሴት ታክስ በስተቀር) +AssetDepreciationOptionTotalAmountLastDepreciationHT=የዋጋ ቅናሽ ጠቅላላ መጠን (ከተጨማሪ እሴት ታክስ በስተቀር) + +# +# Asset accountancy codes +# +AssetAccountancyCodeDepreciationEconomic=የኢኮኖሚ ዋጋ መቀነስ +AssetAccountancyCodeAsset=ንብረት +AssetAccountancyCodeDepreciationAsset=የዋጋ ቅነሳ +AssetAccountancyCodeDepreciationExpense=የዋጋ ቅነሳ ወጪ +AssetAccountancyCodeValueAssetSold=የተጣለ ንብረት ዋጋ +AssetAccountancyCodeReceivableOnAssignment=በመጣል ላይ ደረሰኝ +AssetAccountancyCodeProceedsFromSales=ከማስወገድ የሚገኘው ገቢ +AssetAccountancyCodeVatCollected=የተሰበሰበ ተ.እ.ታ +AssetAccountancyCodeVatDeductible=በንብረቶች ላይ የተመለሰ ተ.እ.ታ +AssetAccountancyCodeDepreciationAcceleratedDepreciation=የተፋጠነ የዋጋ ቅናሽ (ግብር) +AssetAccountancyCodeAcceleratedDepreciation=መለያ +AssetAccountancyCodeEndowmentAcceleratedDepreciation=የዋጋ ቅነሳ ወጪ +AssetAccountancyCodeProvisionAcceleratedDepreciation=መልሶ ማግኘት/ አቅርቦት + +# +# Asset depreciation +# +AssetBaseDepreciationHT=የዋጋ ቅናሽ መሰረት (ከተጨማሪ እሴት ታክስ በስተቀር) +AssetDepreciationBeginDate=የዋጋ ቅነሳ ጅምር በርቷል። +AssetDepreciationDuration=ቆይታ +AssetDepreciationRate=ደረጃ ይስጡ (%%) +AssetDepreciationDate=የዋጋ ቅነሳ ቀን +AssetDepreciationHT=የዋጋ ቅነሳ (ከተጨማሪ እሴት ታክስ በስተቀር) +AssetCumulativeDepreciationHT=ድምር የዋጋ ቅናሽ (ከተጨማሪ እሴት ታክስ በስተቀር) +AssetResidualHT=ቀሪ እሴት (ከተጨማሪ እሴት ታክስ በስተቀር) +AssetDispatchedInBookkeeping=የዋጋ ቅናሽ ተመዝግቧል +AssetFutureDepreciationLine=የወደፊት የዋጋ ቅነሳ +AssetDepreciationReversal=መቀልበስ + +# +# Errors +# +AssetErrorAssetOrAssetModelIDNotProvide=የንብረቱ መታወቂያ ወይም የተገኘው ሞዴል አልቀረበም። +AssetErrorFetchAccountancyCodesForMode=ለ'%sየዋጋ ቅነሳ ሁነታ የሂሳብ መለያዎችን በማውጣት ላይ ስህተት +AssetErrorDeleteAccountancyCodesForMode=የሒሳብ መለያዎችን ከ'%sየዋጋ ቅነሳ ሁነታ ሲሰረዝ ስህተት +AssetErrorInsertAccountancyCodesForMode=የዋጋ ቅነሳ ሁነታ '%s' የሂሳብ መለያዎችን ሲያስገቡ ስህተት +AssetErrorFetchDepreciationOptionsForMode=የ%sየዋጋ ቅነሳ ሁነታ አማራጮችን በማውጣት ላይ ስህተት +AssetErrorDeleteDepreciationOptionsForMode=የ%sየዋጋ ቅነሳ ሁነታ አማራጮችን ሲሰርዝ ስህተት +AssetErrorInsertDepreciationOptionsForMode=የ%s የዋጋ ቅነሳ ሁነታ አማራጮችን ሲያስገቡ ስህተት +AssetErrorFetchDepreciationLines=የተመዘገቡ የዋጋ ቅነሳ መስመሮችን በማውጣት ላይ ስህተት +AssetErrorClearDepreciationLines=የተመዘገቡ የዋጋ ቅነሳ መስመሮችን (ተገላቢጦሽ እና ወደፊት) በማጽዳት ጊዜ ስህተት +AssetErrorAddDepreciationLine=የዋጋ ቅነሳ መስመር ሲጨመር ስህተት +AssetErrorCalculationDepreciationLines=የዋጋ ቅነሳ መስመሮችን (ማግኛ እና የወደፊት) ሲያሰሉ ስህተት +AssetErrorReversalDateNotProvidedForMode=የተገላቢጦሹ ቀን ለ'%sየዋጋ ቅነሳ ዘዴ አልቀረበም። +AssetErrorReversalDateNotGreaterThanCurrentBeginFiscalDateForMode=ለ%sየዋጋ ቅነሳ ዘዴ ከአሁኑ የበጀት ዓመት መጀመሪያ የሚበልጥ ወይም እኩል መሆን አለበት። +AssetErrorReversalAmountNotProvidedForMode=የተገላቢጦሹ መጠን ለዋጋ ቅናሽ ሁነታ '%s' አልቀረበም። +AssetErrorFetchCumulativeDepreciation=የተጠራቀመውን የዋጋ ቅናሽ መጠን ከዋጋ ቅናሽ መስመር በማውጣት ላይ ስህተት +AssetErrorSetLastCumulativeDepreciation=የመጨረሻውን የተጠራቀመ የዋጋ ቅናሽ መጠን ሲመዘገብ ስህተት diff --git a/htdocs/langs/am_ET/banks.lang b/htdocs/langs/am_ET/banks.lang index c249c19252c..21e524fd5e8 100644 --- a/htdocs/langs/am_ET/banks.lang +++ b/htdocs/langs/am_ET/banks.lang @@ -115,7 +115,7 @@ MenuBankInternalTransfer=የውስጥ ሽግግር TransferDesc=ከአንድ መለያ ወደ ሌላ ለማዛወር የውስጥ ዝውውርን ተጠቀም፣ አፕሊኬሽኑ ሁለት መዝገቦችን ይጽፋል፡ በምንጭ መለያ ውስጥ ያለ ዴቢት እና በዒላማ መለያ ውስጥ ያለ ብድር። ለዚህ ግብይት ተመሳሳይ መጠን፣ መለያ እና ቀን ጥቅም ላይ ይውላል። TransferFrom=ከ TransferTo=ለ -TransferFromToDone=ከ%s ወደ %sየb0583738f 'notranslate'>%s %s ተመዝግቧል። +TransferFromToDone=A transfer from %s to %s of %s %s has been recorded. CheckTransmitter=ላኪ ValidateCheckReceipt=ይህ የቼክ ደረሰኝ ይረጋገጥ? ConfirmValidateCheckReceipt=እርግጠኛ ነዎት ይህን የቼክ ደረሰኝ ለማረጋገጫ ማስገባት ይፈልጋሉ? አንዴ ከተረጋገጠ ምንም ለውጦች አይኖሩም። diff --git a/htdocs/langs/am_ET/bills.lang b/htdocs/langs/am_ET/bills.lang index f7d0155f41e..bfdf7b82e3b 100644 --- a/htdocs/langs/am_ET/bills.lang +++ b/htdocs/langs/am_ET/bills.lang @@ -1,609 +1,655 @@ # Dolibarr language file - Source file is en_US - bills -Bill=Invoice -Bills=Invoices -BillsCustomers=Customer invoices -BillsCustomer=Customer invoice -BillsSuppliers=Vendor invoices -BillsCustomersUnpaid=Unpaid customer invoices -BillsCustomersUnpaidForCompany=Unpaid customer invoices for %s -BillsSuppliersUnpaid=Unpaid vendor invoices -BillsSuppliersUnpaidForCompany=Unpaid vendors invoices for %s -BillsLate=Late payments -BillsStatistics=Customers invoices statistics -BillsStatisticsSuppliers=Vendors invoices statistics -DisabledBecauseDispatchedInBookkeeping=Disabled because invoice was dispatched into bookkeeping -DisabledBecauseNotLastInvoice=Disabled because invoice is not erasable. Some invoices were recorded after this one and it will create holes in the counter. -DisabledBecauseNotErasable=Disabled because cannot be erased -InvoiceStandard=Standard invoice -InvoiceStandardAsk=Standard invoice -InvoiceStandardDesc=This kind of invoice is the common invoice. -InvoiceDeposit=Down payment invoice -InvoiceDepositAsk=Down payment invoice -InvoiceDepositDesc=This kind of invoice is done when a down payment has been received. -InvoiceProForma=Proforma invoice -InvoiceProFormaAsk=Proforma invoice -InvoiceProFormaDesc=Proforma invoice is an image of a true invoice but has no accountancy value. -InvoiceReplacement=Replacement invoice -InvoiceReplacementAsk=Replacement invoice for invoice -InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. -InvoiceAvoir=Credit note -InvoiceAvoirAsk=Credit note to correct invoice -InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). -invoiceAvoirWithLines=Create Credit Note with lines from the origin invoice -invoiceAvoirWithPaymentRestAmount=Create Credit Note with remaining unpaid of origin invoice -invoiceAvoirLineWithPaymentRestAmount=Credit Note for remaining unpaid amount -ReplaceInvoice=Replace invoice %s -ReplacementInvoice=Replacement invoice -ReplacedByInvoice=Replaced by invoice %s -ReplacementByInvoice=Replaced by invoice -CorrectInvoice=Correct invoice %s -CorrectionInvoice=Correction invoice -UsedByInvoice=Used to pay invoice %s -ConsumedBy=Consumed by -NotConsumed=Not consumed -NoReplacableInvoice=No replaceable invoices -NoInvoiceToCorrect=No invoice to correct -InvoiceHasAvoir=Was source of one or several credit notes -CardBill=Invoice card -PredefinedInvoices=Predefined Invoices -Invoice=Invoice -PdfInvoiceTitle=Invoice -Invoices=Invoices -InvoiceLine=Invoice line -InvoiceCustomer=Customer invoice -CustomerInvoice=Customer invoice -CustomersInvoices=Customer invoices -SupplierInvoice=Vendor invoice -SuppliersInvoices=Vendor invoices -SupplierInvoiceLines=Vendor invoice lines -SupplierBill=Vendor invoice -SupplierBills=Vendor invoices -Payment=Payment -PaymentBack=Refund -CustomerInvoicePaymentBack=Refund -Payments=Payments -PaymentsBack=Refunds -paymentInInvoiceCurrency=in invoices currency -PaidBack=Paid back -DeletePayment=Delete payment -ConfirmDeletePayment=Are you sure you want to delete this payment? -ConfirmConvertToReduc=Do you want to convert this %s into an available credit? -ConfirmConvertToReduc2=The amount will be saved among all discounts and could be used as a discount for a current or a future invoice for this customer. -ConfirmConvertToReducSupplier=Do you want to convert this %s into an available credit? -ConfirmConvertToReducSupplier2=The amount will be saved among all discounts and could be used as a discount for a current or a future invoice for this vendor. -SupplierPayments=Vendor payments -ReceivedPayments=Received payments -ReceivedCustomersPayments=Payments received from customers -PayedSuppliersPayments=Payments paid to vendors -ReceivedCustomersPaymentsToValid=Received customers payments to validate -PaymentsReportsForYear=Payments reports for %s -PaymentsReports=Payments reports -PaymentsAlreadyDone=Payments already done -PaymentsBackAlreadyDone=Refunds already done -PaymentRule=Payment rule -PaymentMode=Payment method -PaymentModes=Payment methods -DefaultPaymentMode=Default Payment method -DefaultBankAccount=Default Bank Account -IdPaymentMode=Payment method (id) -CodePaymentMode=Payment method (code) -LabelPaymentMode=Payment method (label) -PaymentModeShort=Payment method -PaymentTerm=Payment Term -PaymentConditions=Payment Terms -PaymentConditionsShort=Payment Terms -PaymentAmount=Payment amount -PaymentHigherThanReminderToPay=Payment higher than reminder to pay -HelpPaymentHigherThanReminderToPay=Attention, the payment amount of one or more bills is higher than the outstanding amount to pay.
Edit your entry, otherwise confirm and consider creating a credit note for the excess received for each overpaid invoice. -HelpPaymentHigherThanReminderToPaySupplier=Attention, the payment amount of one or more bills is higher than the outstanding amount to pay.
Edit your entry, otherwise confirm and consider creating a credit note for the excess paid for each overpaid invoice. -ClassifyPaid=Classify 'Paid' -ClassifyUnPaid=Classify 'Unpaid' -ClassifyPaidPartially=Classify 'Paid partially' -ClassifyCanceled=Classify 'Abandoned' -ClassifyClosed=Classify 'Closed' -ClassifyUnBilled=Classify 'Unbilled' -CreateBill=Create Invoice -CreateCreditNote=Create credit note -AddBill=Create invoice or credit note -AddToDraftInvoices=Add to draft invoice -DeleteBill=Delete invoice -SearchACustomerInvoice=Search for a customer invoice -SearchASupplierInvoice=Search for a vendor invoice -CancelBill=Cancel an invoice -SendRemindByMail=Send reminder by email -DoPayment=Enter payment -DoPaymentBack=Enter refund -ConvertToReduc=Mark as credit available -ConvertExcessReceivedToReduc=Convert excess received into available credit -ConvertExcessPaidToReduc=Convert excess paid into available discount -EnterPaymentReceivedFromCustomer=Enter payment received from customer -EnterPaymentDueToCustomer=Make payment due to customer -DisabledBecauseRemainderToPayIsZero=Disabled because remaining unpaid is zero -PriceBase=Base price -BillStatus=Invoice status -StatusOfGeneratedInvoices=Status of generated invoices -BillStatusDraft=Draft (needs to be validated) -BillStatusPaid=Paid -BillStatusPaidBackOrConverted=Credit note refund or marked as credit available -BillStatusConverted=Paid (ready for consumption in final invoice) -BillStatusCanceled=Abandoned -BillStatusValidated=Validated (needs to be paid) -BillStatusStarted=Started -BillStatusNotPaid=Not paid -BillStatusNotRefunded=Not refunded -BillStatusClosedUnpaid=Closed (unpaid) -BillStatusClosedPaidPartially=Paid (partially) -BillShortStatusDraft=Draft -BillShortStatusPaid=Paid -BillShortStatusPaidBackOrConverted=Refunded or converted -Refunded=Refunded -BillShortStatusConverted=Paid -BillShortStatusCanceled=Abandoned -BillShortStatusValidated=Validated -BillShortStatusStarted=Started -BillShortStatusNotPaid=Not paid -BillShortStatusNotRefunded=Not refunded -BillShortStatusClosedUnpaid=Closed -BillShortStatusClosedPaidPartially=Paid (partially) -PaymentStatusToValidShort=To validate -ErrorVATIntraNotConfigured=Intra-Community VAT number not yet defined -ErrorNoPaiementModeConfigured=No default payment type defined. Go to Invoice module setup to fix this. -ErrorCreateBankAccount=Create a bank account, then go to Setup panel of Invoice module to define payment types -ErrorBillNotFound=Invoice %s does not exist -ErrorInvoiceAlreadyReplaced=Error, you tried to validate an invoice to replace invoice %s. But this one has already been replaced by invoice %s. -ErrorDiscountAlreadyUsed=Error, discount already used -ErrorInvoiceAvoirMustBeNegative=Error, correct invoice must have a negative amount -ErrorInvoiceOfThisTypeMustBePositive=Error, this type of invoice must have an amount excluding tax positive (or null) -ErrorCantCancelIfReplacementInvoiceNotValidated=Error, can't cancel an invoice that has been replaced by another invoice that is still in draft status -ErrorThisPartOrAnotherIsAlreadyUsedSoDiscountSerieCantBeRemoved=This part or another is already used so discount series cannot be removed. -BillFrom=From -BillTo=To -ActionsOnBill=Actions on invoice -RecurringInvoiceTemplate=Template / Recurring invoice -NoQualifiedRecurringInvoiceTemplateFound=No recurring template invoice qualified for generation. -FoundXQualifiedRecurringInvoiceTemplate=Found %s recurring template invoice(s) qualified for generation. -NotARecurringInvoiceTemplate=Not a recurring template invoice -NewBill=New invoice -LastBills=Latest %s invoices -LatestTemplateInvoices=Latest %s template invoices -LatestCustomerTemplateInvoices=Latest %s customer template invoices -LatestSupplierTemplateInvoices=Latest %s vendor template invoices -LastCustomersBills=Latest %s customer invoices -LastSuppliersBills=Latest %s vendor invoices -AllBills=All invoices -AllCustomerTemplateInvoices=All template invoices -OtherBills=Other invoices -DraftBills=Draft invoices -CustomersDraftInvoices=Customer draft invoices -SuppliersDraftInvoices=Vendor draft invoices -Unpaid=Unpaid -ErrorNoPaymentDefined=Error No payment defined -ConfirmDeleteBill=Are you sure you want to delete this invoice? -ConfirmValidateBill=Are you sure you want to validate this invoice with reference %s? -ConfirmUnvalidateBill=Are you sure you want to change invoice %s to draft status? +Bill=ደረሰኝ +Bills=ደረሰኞች +BillsCustomers=የደንበኛ ደረሰኞች +BillsCustomer=የደንበኛ ደረሰኝ +BillsSuppliers=የአቅራቢ ደረሰኞች +BillsCustomersUnpaid=ያልተከፈለ የደንበኛ ደረሰኞች +BillsCustomersUnpaidForCompany=ለ%s ያልተከፈለ ደንበኛ ደረሰኞች +BillsSuppliersUnpaid=ያልተከፈለ የሻጭ ደረሰኞች +BillsSuppliersUnpaidForCompany=ያልተከፈለ የአቅራቢዎች ደረሰኞች ለ%s +BillsLate=ዘግይተው ክፍያዎች +BillsStatistics=የደንበኞች ደረሰኞች ስታቲስቲክስ +BillsStatisticsSuppliers=የአቅራቢዎች የክፍያ መጠየቂያ ስታቲስቲክስ +DisabledBecauseDispatchedInBookkeeping=ደረሰኝ ወደ ሒሳብ አያያዝ ስለተላከ ተሰናክሏል። +DisabledBecauseNotLastInvoice=ደረሰኝ ሊሰረዝ ስለማይችል ተሰናክሏል። አንዳንድ ደረሰኞች ከዚህ በኋላ ተመዝግበዋል እና በቆጣሪው ላይ ቀዳዳዎችን ይፈጥራል። +DisabledBecauseNotLastSituationInvoice=ደረሰኝ ሊሰረዝ ስለማይችል ተሰናክሏል። ይህ የክፍያ መጠየቂያ በሁኔታ የክፍያ መጠየቂያ ዑደት ውስጥ የመጨረሻው አይደለም። +DisabledBecauseNotErasable=ተሰናክሏል ምክንያቱም ሊሰረዝ አይችልም። +InvoiceStandard=መደበኛ ደረሰኝ +InvoiceStandardAsk=መደበኛ ደረሰኝ +InvoiceStandardDesc=የዚህ ዓይነቱ ደረሰኝ የተለመደው ደረሰኝ ነው. +InvoiceStandardShort=መደበኛ +InvoiceDeposit=የቅድሚያ ክፍያ ደረሰኝ +InvoiceDepositAsk=የቅድሚያ ክፍያ ደረሰኝ +InvoiceDepositDesc=የዚህ ዓይነቱ ደረሰኝ የሚከናወነው ቅድመ ክፍያ ሲደርስ ነው. +InvoiceProForma=የዋጋ መሰብሰቢያ ደረሰኝ +InvoiceProFormaAsk=የዋጋ መሰብሰቢያ ደረሰኝ +InvoiceProFormaDesc=ፕሮፎርማ ደረሰኝ የእውነተኛ የክፍያ መጠየቂያ ምስል ነው ነገር ግን ምንም የሂሳብ ዋጋ የለውም። +InvoiceReplacement=የምትክ ደረሰኝ +InvoiceReplacementShort=መተካት +InvoiceReplacementAsk=የክፍያ መጠየቂያ ደረሰኝ ምትክ +InvoiceReplacementDesc=የመተኪያ ደረሰኝ ያለ ክፍያ መጠየቂያ ሙሉ በሙሉ ለመተካት ይጠቅማል።b0341
ማስታወሻ፡ ምንም ክፍያ የሌላቸው ደረሰኞች ብቻ ሊተኩ ይችላሉ። የሚተኩት ደረሰኝ ገና ካልተዘጋ፣ በቀጥታ ወደ 'የተተወ' ይዘጋል። +InvoiceAvoir=የተሸጠ ዕቃ ሲመለስ የሚሰጥ ወረቀት +InvoiceAvoirAsk=ደረሰኝ ለማረም የክሬዲት ማስታወሻ +InvoiceAvoirDesc=የ ክሬዲት ማስታወሻ የክፍያ መጠየቂያ በትክክል ከገንዘቡ የሚለይ መጠን ያሳያል የሚለውን እውነታ ለማስተካከል የሚያገለግል አሉታዊ ደረሰኝ ነው። የተከፈለ (ለምሳሌ ደንበኛው በስህተት ብዙ ከፍሏል ወይም አንዳንድ ምርቶች ስለተመለሱ ሙሉውን መጠን አይከፍሉም)። +invoiceAvoirWithLines=ከመነሻ ደረሰኝ መስመሮች ጋር የብድር ማስታወሻ ይፍጠሩ +invoiceAvoirWithPaymentRestAmount=ያልተከፈለ መነሻ ደረሰኝ ጋር የብድር ማስታወሻ ይፍጠሩ +invoiceAvoirLineWithPaymentRestAmount=ለቀሪው ያልተከፈለ መጠን የብድር ማስታወሻ +ReplaceInvoice=ደረሰኝ %s ተካ +ReplacementInvoice=የምትክ ደረሰኝ +ReplacedByInvoice=በክፍያ መጠየቂያ %s ተተክቷል +ReplacementByInvoice=በክፍያ መጠየቂያ ተተካ +CorrectInvoice=ትክክለኛ ደረሰኝ %s +CorrectionInvoice=የማስተካከያ ደረሰኝ +UsedByInvoice=ደረሰኝ ለመክፈል ያገለግል ነበር %s +ConsumedBy=የሚበላው በ +NotConsumed=አልተበላም። +NoReplacableInvoice=ምንም ሊተኩ የሚችሉ ደረሰኞች የሉም +NoInvoiceToCorrect=የሚስተካከል ደረሰኝ የለም። +InvoiceHasAvoir=የአንድ ወይም ብዙ የብድር ማስታወሻዎች ምንጭ ነበር። +CardBill=የክፍያ መጠየቂያ ካርድ +PredefinedInvoices=አስቀድሞ የተገለጹ ደረሰኞች +Invoice=ደረሰኝ +PdfInvoiceTitle=ደረሰኝ +Invoices=ደረሰኞች +InvoiceLine=የክፍያ መጠየቂያ መስመር +InvoiceCustomer=የደንበኛ ደረሰኝ +CustomerInvoice=የደንበኛ ደረሰኝ +CustomersInvoices=የደንበኛ ደረሰኞች +SupplierInvoice=የአቅራቢ ደረሰኝ +SuppliersInvoices=የአቅራቢ ደረሰኞች +SupplierInvoiceLines=የአቅራቢ ደረሰኝ መስመሮች +SupplierBill=የአቅራቢ ደረሰኝ +SupplierBills=የአቅራቢ ደረሰኞች +Payment=ክፍያ +PaymentBack=ተመላሽ ገንዘብ +CustomerInvoicePaymentBack=ተመላሽ ገንዘብ +Payments=ክፍያዎች +PaymentsBack=ተመላሽ ገንዘብ +paymentInInvoiceCurrency=በክፍያ መጠየቂያዎች ምንዛሬ +PaidBack=መልሶ ተከፍሏል። +DeletePayment=ክፍያ ሰርዝ +ConfirmDeletePayment=እርግጠኛ ነዎት ይህን ክፍያ መሰረዝ ይፈልጋሉ? +ConfirmConvertToReduc=ይህንን %s ወደሚገኝ ክሬዲት መቀየር ይፈልጋሉ? +ConfirmConvertToReduc2=መጠኑ በሁሉም ቅናሾች መካከል ይቀመጣል እና ለዚህ ደንበኛ የአሁኑ ወይም የወደፊት የክፍያ መጠየቂያ ቅናሽ ሆኖ ሊያገለግል ይችላል። +ConfirmConvertToReducSupplier=ይህንን %s ወደሚገኝ ክሬዲት መቀየር ይፈልጋሉ? +ConfirmConvertToReducSupplier2=መጠኑ በሁሉም ቅናሾች መካከል ይቀመጣል እና ለዚህ ሻጭ የአሁኑ ወይም የወደፊት ደረሰኝ ቅናሽ ሆኖ ሊያገለግል ይችላል። +SupplierPayments=የአቅራቢ ክፍያዎች +ReceivedPayments=የተቀበሉት ክፍያዎች +ReceivedCustomersPayments=ከደንበኞች የተቀበሉት ክፍያዎች +PayedSuppliersPayments=ለሻጮች የተከፈለ ክፍያ +ReceivedCustomersPaymentsToValid=ለማፅደቅ የተቀበሉት የደንበኞች ክፍያዎች +PaymentsReportsForYear=የክፍያ ሪፖርቶች ለ%s +PaymentsReports=የክፍያ ሪፖርቶች +PaymentsAlreadyDone=ክፍያዎች አስቀድመው ተከናውነዋል +PaymentsBackAlreadyDone=ተመላሽ ገንዘቦች ቀድሞውኑ ተከናውነዋል +PaymentRule=የክፍያ ደንብ +PaymentMode=የመክፈያ ዘዴ +PaymentModes=የመክፈያ ዘዴዎች +DefaultPaymentMode=ነባሪ የመክፈያ ዘዴ +DefaultBankAccount=ነባሪ የባንክ ሂሳብ +IdPaymentMode=የመክፈያ ዘዴ (መታወቂያ) +CodePaymentMode=የመክፈያ ዘዴ (ኮድ) +LabelPaymentMode=የመክፈያ ዘዴ (መለያ) +PaymentModeShort=የመክፈያ ዘዴ +PaymentTerm=የክፍያ ጊዜ +IdPaymentTerm=Payment term (id) +CodePaymentTerm=Payment term (code) +LabelPaymentTerm=Payment term (label) +PaymentConditions=የክፍያ ውል +PaymentConditionsShort=የክፍያ ውል +PaymentAmount=የክፍያ መጠን +PaymentHigherThanReminderToPay=ክፍያ ለመክፈል ከማስታወሻ በላይ +HelpPaymentHigherThanReminderToPay=ትኩረት፣ የአንድ ወይም ከዚያ በላይ የፍጆታ ሂሳቦች ክፍያ መጠን ከሚከፈለው ቀሪ መጠን ከፍ ያለ ነው።
ግቤትዎን ያርትዑ፣ አለበለዚያ አረጋግጡ እና ለእያንዳንዱ የተትረፈረፈ የክፍያ መጠየቂያ ደረሰኝ የክሬዲት ማስታወሻ መፍጠር ያስቡበት። +HelpPaymentHigherThanReminderToPaySupplier=ትኩረት፣ የአንድ ወይም ከዚያ በላይ የፍጆታ ሂሳቦች ክፍያ መጠን ከሚከፈለው ቀሪ መጠን ከፍ ያለ ነው።
ግቤትዎን ያርትዑ፣ አለበለዚያ አረጋግጡ እና ለእያንዳንዱ ከልክ በላይ ለተከፈለው ደረሰኝ የክሬዲት ማስታወሻ መፍጠር ያስቡበት። +ClassifyPaid=«የሚከፈልበት»ን ይመድቡ +ClassifyUnPaid=«ያልተከፈለ»ን መድብ +ClassifyPaidPartially='በከፊል የሚከፈል'' ይመድቡ +ClassifyCanceled='የተተወ'ን መደብ +ClassifyClosed=‹ዝግ›ን መድብ +ClassifyUnBilled=«ያልተከፈለ»ን መደብ +CreateBill=ደረሰኝ ፍጠር +CreateCreditNote=የብድር ማስታወሻ ይፍጠሩ +AddBill=የክፍያ መጠየቂያ ወይም የብድር ማስታወሻ ይፍጠሩ +AddToDraftInvoices=ወደ ረቂቅ ደረሰኝ አክል +DeleteBill=ደረሰኝ ሰርዝ +SearchACustomerInvoice=የደንበኛ ደረሰኝ ይፈልጉ +SearchASupplierInvoice=የአቅራቢ ደረሰኝ ይፈልጉ +CancelBill=ደረሰኝ ሰርዝ +SendRemindByMail=አስታዋሽ በኢሜል ላክ +DoPayment=ክፍያ ያስገቡ +DoPaymentBack=ተመላሽ ገንዘብ ያስገቡ +ConvertToReduc=ክሬዲት እንዳለ ምልክት አድርግበት +ConvertExcessReceivedToReduc=የተቀበለውን ትርፍ ወደሚገኝ ክሬዲት ይለውጡ +ConvertExcessPaidToReduc=የተከፈለ ትርፍ ወደ የሚገኝ ቅናሽ ይለውጡ +EnterPaymentReceivedFromCustomer=ከደንበኛው የተቀበለውን ክፍያ ያስገቡ +EnterPaymentDueToCustomer=በደንበኛው ምክንያት ክፍያ ይፈጽሙ +DisabledBecauseRemainderToPayIsZero=ያልተከፈለ ቀሪው ዜሮ ስለሆነ ተሰናክሏል። +PriceBase=የመሠረት ዋጋ +BillStatus=የክፍያ መጠየቂያ ሁኔታ +StatusOfAutoGeneratedInvoices=በራስ ሰር የመነጩ ደረሰኞች ሁኔታ +BillStatusDraft=ረቂቅ (መረጋገጥ አለበት) +BillStatusPaid=የተከፈለ +BillStatusPaidBackOrConverted=የብድር ማስታወሻ ገንዘብ ተመላሽ ወይም እንደ ክሬዲት ምልክት ተደርጎበታል። +BillStatusConverted=የተከፈለ (በመጨረሻ ደረሰኝ ለምግብነት ዝግጁ) +BillStatusCanceled=የተተወ +BillStatusValidated=የተረጋገጠ (መከፈል አለበት) +BillStatusStarted=ተጀመረ +BillStatusNotPaid=አልተከፈለም። +BillStatusNotRefunded=ገንዘቡ አልተመለሰም። +BillStatusClosedUnpaid=ዝግ (ያልተከፈለ) +BillStatusClosedPaidPartially=የተከፈለ (በከፊል) +BillShortStatusDraft=ረቂቅ +BillShortStatusPaid=የተከፈለ +BillShortStatusPaidBackOrConverted=ገንዘቡ ተመላሽ ተደርጓል ወይም ተቀይሯል። +Refunded=ተመላሽ ተደርጓል +BillShortStatusConverted=የተከፈለ +BillShortStatusCanceled=የተተወ +BillShortStatusValidated=ተረጋግጧል +BillShortStatusStarted=ተጀመረ +BillShortStatusNotPaid=አልተከፈለም። +BillShortStatusNotRefunded=ገንዘቡ አልተመለሰም። +BillShortStatusClosedUnpaid=ዝግ +BillShortStatusClosedPaidPartially=የተከፈለ (በከፊል) +PaymentStatusToValidShort=ለማረጋገጥ +ErrorVATIntraNotConfigured=የማህበረሰብ ውስጥ የተጨማሪ እሴት ታክስ ቁጥር ገና አልተገለጸም። +ErrorNoPaiementModeConfigured=ምንም ነባሪ የክፍያ ዓይነት አልተገለጸም። ይህንን ለማስተካከል ወደ የክፍያ መጠየቂያ ሞጁል ማዋቀር ይሂዱ። +ErrorCreateBankAccount=የባንክ ሒሳብ ይፍጠሩ፣ ከዚያ የክፍያ ዓይነቶችን ለመወሰን ወደ የዋጋ መጠየቂያ ሞጁል ይሂዱ +ErrorBillNotFound=ደረሰኝ %s የለም +ErrorInvoiceAlreadyReplaced=ስህተት፣ መጠየቂያ %sን ለመተካት ደረሰኝ ለማረጋገጥ ሞክረዋል። ነገር ግን ይህ አስቀድሞ በክፍያ መጠየቂያ %s ተተክቷል። +ErrorDiscountAlreadyUsed=ስህተት፣ ቅናሽ አስቀድሞ ጥቅም ላይ ውሏል +ErrorInvoiceAvoirMustBeNegative=ስህተት፣ ትክክለኛ ደረሰኝ አሉታዊ መጠን ሊኖረው ይገባል። +ErrorInvoiceOfThisTypeMustBePositive=ስህተት፣ የዚህ አይነት ደረሰኝ የታክስ አወንታዊ (ወይም ባዶ) ሳይጨምር መጠን ሊኖረው ይገባል +ErrorCantCancelIfReplacementInvoiceNotValidated=ስህተት፣ አሁንም በረቂቅ ደረጃ ላይ ባለው ሌላ ደረሰኝ የተተካ ደረሰኝ መሰረዝ አይቻልም +ErrorThisPartOrAnotherIsAlreadyUsedSoDiscountSerieCantBeRemoved=ይህ ክፍል ወይም ሌላ አስቀድሞ ጥቅም ላይ ውሏል ስለዚህ የቅናሽ ተከታታይ ሊወገድ አይችልም። +ErrorInvoiceIsNotLastOfSameType=ስህተት፡ የክፍያ መጠየቂያ ቀን %s %s ነው። ለተመሳሳይ ዓይነት ደረሰኞች (%s) ከኋላ ወይም ከመጨረሻው ቀን ጋር እኩል መሆን አለበት። እባክዎ የክፍያ መጠየቂያ ቀኑን ይለውጡ። +BillFrom=ከ +BillTo=ለ +ShippingTo=መላኪያ ወደ +ActionsOnBill=በክፍያ መጠየቂያ ላይ ያሉ ድርጊቶች +ActionsOnBillRec=ተደጋጋሚ ደረሰኝ ላይ ያሉ እርምጃዎች +RecurringInvoiceTemplate=አብነት / ተደጋጋሚ ደረሰኝ +NoQualifiedRecurringInvoiceTemplateFound=ለትውልድ ብቁ የሆነ ተደጋጋሚ የአብነት ደረሰኝ የለም። +FoundXQualifiedRecurringInvoiceTemplate=%s ተደጋጋሚ የአብነት መጠየቂያ(ዎች) ለትውልድ ብቁ ነው። +NotARecurringInvoiceTemplate=ተደጋጋሚ የአብነት ደረሰኝ አይደለም። +NewBill=አዲስ ደረሰኝ +LastBills=የቅርብ ጊዜ %s ደረሰኞች +LatestTemplateInvoices=የቅርብ ጊዜ %s የአብነት ደረሰኞች +LatestCustomerTemplateInvoices=የቅርብ ጊዜ %s የደንበኛ አብነት ደረሰኞች +LatestSupplierTemplateInvoices=የቅርብ ጊዜ %s የአቅራቢ አብነት ደረሰኞች +LastCustomersBills=የቅርብ ጊዜ %s የደንበኛ ደረሰኞች +LastSuppliersBills=የቅርብ ጊዜ %s የአቅራቢ ደረሰኞች +AllBills=ሁሉም ደረሰኞች +AllCustomerTemplateInvoices=ሁሉም የአብነት ደረሰኞች +OtherBills=ሌሎች ደረሰኞች +DraftBills=ረቂቅ ደረሰኞች +CustomersDraftInvoices=የደንበኛ ረቂቅ ደረሰኞች +SuppliersDraftInvoices=የአቅራቢ ረቂቅ ደረሰኞች +Unpaid=ያልተከፈለ +ErrorNoPaymentDefined=ስህተት ምንም ክፍያ አልተገለጸም። +ConfirmDeleteBill=እርግጠኛ ነዎት ይህን ደረሰኝ መሰረዝ ይፈልጋሉ? +ConfirmValidateBill=Are you sure you want to validate this invoice with the reference %s? +ConfirmUnvalidateBill=እርግጠኛ ነህ ደረሰኝ %s ወደ ረቂቅ ሁኔታመቀየር ትፈልጋለህ? ? ConfirmClassifyPaidBill=Are you sure you want to change invoice %s to status paid? ConfirmCancelBill=Are you sure you want to cancel invoice %s? -ConfirmCancelBillQuestion=Why do you want to classify this invoice 'abandoned'? +ConfirmCancelBillQuestion=ለምን ይህን ደረሰኝ 'የተተወ' ለመመደብ ፈለጋችሁ? ConfirmClassifyPaidPartially=Are you sure you want to change invoice %s to status paid? -ConfirmClassifyPaidPartiallyQuestion=This invoice has not been paid completely. What is the reason for closing this invoice? -ConfirmClassifyPaidPartiallyReasonAvoir=Remaining unpaid (%s %s) is a discount granted because payment was made before term. I regularize the VAT with a credit note. -ConfirmClassifyPaidPartiallyReasonDiscount=Remaining unpaid (%s %s) is a discount granted because payment was made before term. -ConfirmClassifyPaidPartiallyReasonDiscountNoVat=Remaining unpaid (%s %s) is a discount granted because payment was made before term. I accept to lose the VAT on this discount. -ConfirmClassifyPaidPartiallyReasonDiscountVat=Remaining unpaid (%s %s) is a discount granted because payment was made before term. I recover the VAT on this discount without a credit note. -ConfirmClassifyPaidPartiallyReasonBadCustomer=Bad customer -ConfirmClassifyPaidPartiallyReasonBankCharge=Deduction by bank (intermediary bank fees) -ConfirmClassifyPaidPartiallyReasonProductReturned=Products partially returned -ConfirmClassifyPaidPartiallyReasonOther=Amount abandoned for other reason -ConfirmClassifyPaidPartiallyReasonDiscountNoVatDesc=This choice is possible if your invoice has been provided with suitable comments. (Example «Only the tax corresponding to the price that has been actually paid gives rights to deduction») -ConfirmClassifyPaidPartiallyReasonDiscountVatDesc=In some countries, this choice might be possible only if your invoice contains correct notes. -ConfirmClassifyPaidPartiallyReasonAvoirDesc=Use this choice if all other does not suit -ConfirmClassifyPaidPartiallyReasonBadCustomerDesc=A bad customer is a customer that refuses to pay his debt. -ConfirmClassifyPaidPartiallyReasonProductReturnedDesc=This choice is used when payment is not complete because some of products were returned +ConfirmClassifyPaidPartiallyQuestion=ይህ ደረሰኝ ሙሉ በሙሉ አልተከፈለም። ይህን ደረሰኝ የሚዘጋበት ምክንያት ምንድን ነው? +ConfirmClassifyPaidPartiallyReasonAvoir=ያልተከፈለው (%s %s' > የሚከፈለው ከውል በፊት በመሆኑ ቅናሽ ነው። ተ.እ.ታን በክሬዲት ኖት መደበኛ አደርጋለሁ። +ConfirmClassifyPaidPartiallyReasonDiscount=ያልተከፈለው (%s %s' > የሚከፈለው ከውል በፊት በመሆኑ ቅናሽ ነው። +ConfirmClassifyPaidPartiallyReasonDiscountNoVat=ያልተከፈለው (%s %s' > የሚከፈለው ከውል በፊት በመሆኑ ቅናሽ ነው። በዚህ ቅናሽ ቫትን ማጣት እቀበላለሁ። +ConfirmClassifyPaidPartiallyReasonDiscountVat=ያልተከፈለው (%s %s' > የሚከፈለው ከውል በፊት በመሆኑ ቅናሽ ነው። ያለ ክሬዲት ማስታወሻ ተ.እ.ታን በዚህ ቅናሽ አገኛለሁ። +ConfirmClassifyPaidPartiallyReasonBadCustomer=መጥፎ ደንበኛ +ConfirmClassifyPaidPartiallyReasonBadSupplier=መጥፎ ሻጭ +ConfirmClassifyPaidPartiallyReasonBankCharge=በባንክ ተቀናሽ (የመካከለኛ ባንክ ክፍያ) +ConfirmClassifyPaidPartiallyReasonWithholdingTax=የተቀናሽ ግብር +ConfirmClassifyPaidPartiallyReasonProductReturned=ምርቶች በከፊል ተመልሰዋል። +ConfirmClassifyPaidPartiallyReasonOther=በሌላ ምክንያት የተተወ መጠን +ConfirmClassifyPaidPartiallyReasonDiscountNoVatDesc=የክፍያ መጠየቂያዎ ተስማሚ አስተያየቶች ከተሰጠ ይህ ምርጫ ይቻላል. (ምሳሌ «ከተከፈለው ዋጋ ጋር የሚዛመድ ግብር ብቻ የመቀነስ መብት ይሰጣል») +ConfirmClassifyPaidPartiallyReasonDiscountVatDesc=በአንዳንድ አገሮች ይህ ምርጫ የሚቻለው ደረሰኝዎ ትክክለኛ ማስታወሻዎችን ከያዘ ብቻ ነው። +ConfirmClassifyPaidPartiallyReasonAvoirDesc=ሁሉም ሌሎች የማይስማሙ ከሆነ ይህንን ምርጫ ይጠቀሙ +ConfirmClassifyPaidPartiallyReasonBadCustomerDesc=A መጥፎ ደንበኛ ዕዳውን ለመክፈል ፈቃደኛ ያልሆነ ደንበኛ ነው። +ConfirmClassifyPaidPartiallyReasonProductReturnedDesc=ይህ ምርጫ ጥቅም ላይ የሚውለው ክፍያ ሳይጠናቀቅ ሲቀር ነው ምክንያቱም አንዳንድ ምርቶች ተመልሰዋል። ConfirmClassifyPaidPartiallyReasonBankChargeDesc=The unpaid amount is intermediary bank fees, deducted directly from the correct amount paid by the Customer. -ConfirmClassifyPaidPartiallyReasonOtherDesc=Use this choice if all others are not suitable, for example in following situation:
- payment not complete because some products were shipped back
- amount claimed too important because a discount was forgotten
In all cases, amount over-claimed must be corrected in accountancy system by creating a credit note. -ConfirmClassifyAbandonReasonOther=Other -ConfirmClassifyAbandonReasonOtherDesc=This choice will be used in all other cases. For example because you plan to create a replacing invoice. +ConfirmClassifyPaidPartiallyReasonWithholdingTaxDesc=ያልተከፈለው መጠን የተቀናሽ ታክስ ስለሆነ በጭራሽ አይከፈልም። +ConfirmClassifyPaidPartiallyReasonOtherDesc=ሌሎች ሁሉም ተስማሚ ካልሆኑ ይህን ምርጫ ይጠቀሙ፡ ለምሳሌ በሚከተለው ሁኔታ፡
- ክፍያ አልተጠናቀቀም ምክንያቱም አንዳንድ ምርቶች ተመልሰው ስለተላኩ
span>- የተጠየቀው መጠን በጣም አስፈላጊ ነው ምክንያቱም ቅናሹ ስለተረሳ
በሁሉም ጉዳዮች ላይ የክሬዲት ማስታወሻ በመፍጠር ከመጠን በላይ የይገባኛል ጥያቄ በሂሳብ አያያዝ ሥርዓት ውስጥ መታረም አለበት። +ConfirmClassifyPaidPartiallyReasonBadSupplierDesc=A መጥፎ አቅራቢ ለመክፈል እምቢ ያልነው አቅራቢ ነው። +ConfirmClassifyAbandonReasonOther=ሌላ +ConfirmClassifyAbandonReasonOtherDesc=ይህ ምርጫ በሁሉም ሌሎች ጉዳዮች ላይ ጥቅም ላይ ይውላል. ለምሳሌ የሚተካ ደረሰኝ ለመፍጠር ስላሰቡ ነው። ConfirmCustomerPayment=Do you confirm this payment input for %s %s? ConfirmSupplierPayment=Do you confirm this payment input for %s %s? -ConfirmValidatePayment=Are you sure you want to validate this payment? No change can be made once payment is validated. -ValidateBill=Validate invoice -UnvalidateBill=Unvalidate invoice -NumberOfBills=No. of invoices -NumberOfBillsByMonth=No. of invoices per month -AmountOfBills=Amount of invoices -AmountOfBillsHT=Amount of invoices (net of tax) -AmountOfBillsByMonthHT=Amount of invoices by month (net of tax) -UseSituationInvoices=Allow situation invoice -UseSituationInvoicesCreditNote=Allow situation invoice credit note -Retainedwarranty=Retained warranty -AllowedInvoiceForRetainedWarranty=Retained warranty usable on the following types of invoices -RetainedwarrantyDefaultPercent=Retained warranty default percent -RetainedwarrantyOnlyForSituation=Make "retained warranty" available only for situation invoices -RetainedwarrantyOnlyForSituationFinal=On situation invoices the global "retained warranty" deduction is applied only on the final situation -ToPayOn=To pay on %s -toPayOn=to pay on %s -RetainedWarranty=Retained Warranty -PaymentConditionsShortRetainedWarranty=Retained warranty payment terms -DefaultPaymentConditionsRetainedWarranty=Default retained warranty payment terms -setPaymentConditionsShortRetainedWarranty=Set retained warranty payment terms -setretainedwarranty=Set retained warranty -setretainedwarrantyDateLimit=Set retained warranty date limit -RetainedWarrantyDateLimit=Retained warranty date limit -RetainedWarrantyNeed100Percent=The situation invoice need to be at 100%% progress to be displayed on PDF -AlreadyPaid=Already paid -AlreadyPaidBack=Already paid back -AlreadyPaidNoCreditNotesNoDeposits=Already paid (without credit notes and down payments) -Abandoned=Abandoned -RemainderToPay=Remaining unpaid -RemainderToPayMulticurrency=Remaining unpaid, original currency -RemainderToTake=Remaining amount to take -RemainderToTakeMulticurrency=Remaining amount to take, original currency -RemainderToPayBack=Remaining amount to refund -RemainderToPayBackMulticurrency=Remaining amount to refund, original currency -NegativeIfExcessRefunded=negative if excess refunded -Rest=Pending -AmountExpected=Amount claimed -ExcessReceived=Excess received -ExcessReceivedMulticurrency=Excess received, original currency -NegativeIfExcessReceived=negative if excess received -ExcessPaid=Excess paid -ExcessPaidMulticurrency=Excess paid, original currency -EscompteOffered=Discount offered (payment before term) -EscompteOfferedShort=Discount -SendBillRef=Submission of invoice %s -SendReminderBillRef=Submission of invoice %s (reminder) -SendPaymentReceipt=Submission of payment receipt %s -NoDraftBills=No draft invoices -NoOtherDraftBills=No other draft invoices -NoDraftInvoices=No draft invoices -RefBill=Invoice ref -ToBill=To bill -RemainderToBill=Remainder to bill -SendBillByMail=Send invoice by email -SendReminderBillByMail=Send reminder by email -RelatedCommercialProposals=Related commercial proposals -RelatedRecurringCustomerInvoices=Related recurring customer invoices -MenuToValid=To valid -DateMaxPayment=Payment due on -DateInvoice=Invoice date -DatePointOfTax=Point of tax -NoInvoice=No invoice -NoOpenInvoice=No open invoice -NbOfOpenInvoices=Number of open invoices -ClassifyBill=Classify invoice -SupplierBillsToPay=Unpaid vendor invoices -CustomerBillsUnpaid=Unpaid customer invoices -NonPercuRecuperable=Non-recoverable -SetConditions=Set Payment Terms -SetMode=Set Payment Type -SetRevenuStamp=Set revenue stamp -Billed=Billed -RecurringInvoices=Recurring invoices -RecurringInvoice=Recurring invoice -RepeatableInvoice=Template invoice -RepeatableInvoices=Template invoices -Repeatable=Template -Repeatables=Templates -ChangeIntoRepeatableInvoice=Convert into template invoice -CreateRepeatableInvoice=Create template invoice -CreateFromRepeatableInvoice=Create from template invoice -CustomersInvoicesAndInvoiceLines=Customer invoices and invoice details -CustomersInvoicesAndPayments=Customer invoices and payments -ExportDataset_invoice_1=Customer invoices and invoice details -ExportDataset_invoice_2=Customer invoices and payments -ProformaBill=Proforma Bill: -Reduction=Reduction -ReductionShort=Disc. -Reductions=Reductions -ReductionsShort=Disc. -Discounts=Discounts -AddDiscount=Create discount -AddRelativeDiscount=Create relative discount -EditRelativeDiscount=Edit relative discount -AddGlobalDiscount=Create absolute discount -EditGlobalDiscounts=Edit absolute discounts -AddCreditNote=Create credit note -ShowDiscount=Show discount -ShowReduc=Show the discount -ShowSourceInvoice=Show the source invoice -RelativeDiscount=Relative discount -GlobalDiscount=Global discount -CreditNote=Credit note -CreditNotes=Credit notes -CreditNotesOrExcessReceived=Credit notes or excess received -Deposit=Down payment -Deposits=Down payments -DiscountFromCreditNote=Discount from credit note %s -DiscountFromDeposit=Down payments from invoice %s -DiscountFromExcessReceived=Payments in excess of invoice %s -DiscountFromExcessPaid=Payments in excess of invoice %s -AbsoluteDiscountUse=This kind of credit can be used on invoice before its validation -CreditNoteDepositUse=Invoice must be validated to use this kind of credits -NewGlobalDiscount=New absolute discount -NewRelativeDiscount=New relative discount -DiscountType=Discount type -NoteReason=Note/Reason -ReasonDiscount=Reason -DiscountOfferedBy=Granted by -DiscountStillRemaining=Discounts or credits available -DiscountAlreadyCounted=Discounts or credits already consumed -CustomerDiscounts=Customer discounts -SupplierDiscounts=Vendors discounts -BillAddress=Bill address -HelpEscompte=This discount is a discount granted to customer because payment was made before term. -HelpAbandonBadCustomer=This amount has been abandoned (customer said to be a bad customer) and is considered as an exceptional loss. -HelpAbandonOther=This amount has been abandoned since it was an error (wrong customer or invoice replaced by another for example) -IdSocialContribution=Social/fiscal tax payment id -PaymentId=Payment id -PaymentRef=Payment ref. -InvoiceId=Invoice id -InvoiceRef=Invoice ref. -InvoiceDateCreation=Invoice creation date -InvoiceStatus=Invoice status -InvoiceNote=Invoice note -InvoicePaid=Invoice paid -InvoicePaidCompletely=Paid completely -InvoicePaidCompletelyHelp=Invoice that are paid completely. This excludes invoices that are paid partially. To get list of all 'Closed' or non 'Closed' invoices, prefer to use a filter on the invoice status. -OrderBilled=Order billed -DonationPaid=Donation paid -PaymentNumber=Payment number -RemoveDiscount=Remove discount -WatermarkOnDraftBill=Watermark on draft invoices (nothing if empty) -InvoiceNotChecked=No invoice selected +ConfirmValidatePayment=እርግጠኛ ነዎት ይህን ክፍያ ማረጋገጥ ይፈልጋሉ? ክፍያ ከተረጋገጠ በኋላ ምንም ለውጥ ማድረግ አይቻልም። +ValidateBill=ደረሰኝ አረጋግጥ +UnvalidateBill=የክፍያ መጠየቂያ ዋጋን አጥፋ +NumberOfBills=የክፍያ መጠየቂያዎች ቁጥር +NumberOfBillsByMonth=በወር የክፍያ መጠየቂያዎች ቁጥር +AmountOfBills=የክፍያ መጠየቂያዎች ብዛት +AmountOfBillsHT=የክፍያ መጠየቂያዎች መጠን (የተጣራ ታክስ) +AmountOfBillsByMonthHT=የክፍያ መጠየቂያዎች መጠን በወር (የተጣራ ታክስ) +UseSituationInvoices=የሁኔታ ደረሰኝ ፍቀድ +UseSituationInvoicesCreditNote=የሁኔታ ደረሰኝ የብድር ማስታወሻ ፍቀድ +Retainedwarranty=የቆየ ዋስትና +AllowedInvoiceForRetainedWarranty=በሚከተሉት የክፍያ መጠየቂያ ዓይነቶች ላይ ጥቅም ላይ ሊውል የሚችል ዋስትና ያለው ዋስትና +RetainedwarrantyDefaultPercent=የቆየ የዋስትና ነባሪ መቶኛ +RetainedwarrantyOnlyForSituation="ያቆየው ዋስትና" ለሁኔታ ደረሰኞች ብቻ የሚገኝ አድርግ +RetainedwarrantyOnlyForSituationFinal=በሁኔታ ደረሰኞች ላይ የአለምአቀፍ "የቆየ ዋስትና" ቅነሳ በመጨረሻው ሁኔታ ላይ ብቻ ይተገበራል +ToPayOn=በ%s ለመክፈል +toPayOn=በ%s ለመክፈል +RetainedWarranty=የዋስትና ማረጋገጫ +PaymentConditionsShortRetainedWarranty=የተያዙ የዋስትና ክፍያ ውሎች +DefaultPaymentConditionsRetainedWarranty=ነባሪው የዋስትና ክፍያ ውሎች +setPaymentConditionsShortRetainedWarranty=የዋስትና ክፍያ ውሎችን ያዘጋጁ +setretainedwarranty=የተያዘውን ዋስትና ያዘጋጁ +setretainedwarrantyDateLimit=የተያዘውን የዋስትና ቀን ገደብ ያዘጋጁ +RetainedWarrantyDateLimit=የቆየ የዋስትና ቀን ገደብ +RetainedWarrantyNeed100Percent=የሁኔታ መጠየቂያው በፒዲኤፍ ላይ ለመታየት 100%% ሂደት ላይ መሆን አለበት። +AlreadyPaid=አስቀድሞ ተከፍሏል። +AlreadyPaidBack=ቀድሞውኑ ተመልሷል +AlreadyPaidNoCreditNotesNoDeposits=አስቀድሞ የተከፈለ (ያለ የብድር ማስታወሻዎች እና ቅድመ ክፍያዎች) +Abandoned=የተተወ +RemainderToPay=ሳይከፈል የቀረው +RemainderToPayMulticurrency=ቀሪ ያልተከፈለ፣ ኦሪጅናል ምንዛሬ +RemainderToTake=የሚቀረው መጠን +RemainderToTakeMulticurrency=የሚቀረው መጠን፣ የመጀመሪያው ምንዛሬ +RemainderToPayBack=የሚቀረው ገንዘብ ተመላሽ ለማድረግ +RemainderToPayBackMulticurrency=የሚቀረው ገንዘብ ተመላሽ ገንዘብ፣ የመጀመሪያው ምንዛሬ +NegativeIfExcessReceived=ከመጠን በላይ ከተቀበለ አሉታዊ +NegativeIfExcessRefunded=ትርፍ ገንዘብ ከተመለሰ አሉታዊ +NegativeIfExcessPaid=ከመጠን በላይ ከተከፈለ አሉታዊ +Rest=በመጠባበቅ ላይ +AmountExpected=የተጠየቀው መጠን +ExcessReceived=ከመጠን በላይ ደረሰ +ExcessReceivedMulticurrency=የተቀበለው ትርፍ፣ የመጀመሪያው ምንዛሬ +ExcessPaid=ከመጠን በላይ የተከፈለ +ExcessPaidMulticurrency=ከመጠን በላይ የተከፈለ, የመጀመሪያ ምንዛሬ +EscompteOffered=ቅናሽ ቀርቧል (ከጊዜ በፊት ክፍያ) +EscompteOfferedShort=ቅናሽ +SendBillRef=የክፍያ መጠየቂያ ማቅረቢያ %s +SendReminderBillRef=የክፍያ መጠየቂያ ማቅረቢያ %s (አስታዋሽ) +SendPaymentReceipt=የክፍያ ደረሰኝ ማስገባት %s +NoDraftBills=ምንም ረቂቅ ደረሰኞች የሉም +NoOtherDraftBills=ምንም ሌላ ረቂቅ ደረሰኞች የሉም +NoDraftInvoices=ምንም ረቂቅ ደረሰኞች የሉም +RefBill=የክፍያ መጠየቂያ ማጣቀሻ +RefSupplierBill=የአቅራቢ ደረሰኝ ማጣቀሻ +SupplierOrderCreateBill=ደረሰኝ ፍጠር +ToBill=ለማስከፈል +RemainderToBill=ሂሳብ ለማስከፈል የቀረው +SendBillByMail=ደረሰኝ በኢሜል ይላኩ። +SendReminderBillByMail=አስታዋሽ በኢሜል ይላኩ። +RelatedCommercialProposals=ተዛማጅ የንግድ ፕሮፖዛል +RelatedRecurringCustomerInvoices=ተዛማጅ ተደጋጋሚ የደንበኛ ደረሰኞች +MenuToValid=ትክክለኛ እንዲሆን +DateMaxPayment=ክፍያ በ ላይ +DateInvoice=የክፍያ መጠየቂያ ቀን +DatePointOfTax=የግብር ነጥብ +NoInvoice=ምንም ደረሰኝ የለም። +NoOpenInvoice=ክፍት ደረሰኝ የለም። +NbOfOpenInvoices=ክፍት ደረሰኞች ብዛት +ClassifyBill=ደረሰኝ መድብ +SupplierBillsToPay=ያልተከፈለ የሻጭ ደረሰኞች +CustomerBillsUnpaid=ያልተከፈለ የደንበኛ ደረሰኞች +NonPercuRecuperable=የማይመለስ +SetConditions=የክፍያ ውሎችን ያዘጋጁ +SetMode=የክፍያ ዓይነት ያዘጋጁ +SetRevenuStamp=የገቢ ማህተም ያዘጋጁ +Billed=ተከፍሏል። +RecurringInvoices=ተደጋጋሚ ደረሰኞች +RecurringInvoice=ተደጋጋሚ ደረሰኝ +RecurringInvoiceSource=ተደጋጋሚ ደረሰኝ ምንጭ +RepeatableInvoice=የአብነት ደረሰኝ +RepeatableInvoices=የአብነት ደረሰኞች +RecurringInvoicesJob=ተደጋጋሚ ደረሰኞች (የሽያጭ ደረሰኞች) ማመንጨት +RecurringSupplierInvoicesJob=ተደጋጋሚ ደረሰኞች ማመንጨት (የግዢ ደረሰኞች) +Repeatable=አብነት +Repeatables=አብነቶች +ChangeIntoRepeatableInvoice=ወደ አብነት ደረሰኝ ቀይር +CreateRepeatableInvoice=የአብነት ደረሰኝ ይፍጠሩ +CreateFromRepeatableInvoice=ከአብነት ደረሰኝ ፍጠር +CustomersInvoicesAndInvoiceLines=የደንበኛ ደረሰኞች እና የክፍያ መጠየቂያ ዝርዝሮች +CustomersInvoicesAndPayments=የደንበኛ ደረሰኞች እና ክፍያዎች +ExportDataset_invoice_1=የደንበኛ ደረሰኞች እና የክፍያ መጠየቂያ ዝርዝሮች +ExportDataset_invoice_2=የደንበኛ ደረሰኞች እና ክፍያዎች +ProformaBill=ፕሮፎርማ ቢል፡ +Reduction=ቅነሳ +ReductionShort=ዲስክ. +Reductions=ቅነሳዎች +ReductionsShort=ዲስክ. +Discounts=ቅናሾች +AddDiscount=ቅናሽ ይፍጠሩ +AddRelativeDiscount=አንጻራዊ ቅናሽ ይፍጠሩ +EditRelativeDiscount=አንጻራዊ ቅናሽ ያርትዑ +AddGlobalDiscount=ፍጹም ቅናሽ ይፍጠሩ +EditGlobalDiscounts=ፍጹም ቅናሾችን ያርትዑ +AddCreditNote=የብድር ማስታወሻ ይፍጠሩ +ShowDiscount=ቅናሽ አሳይ +ShowReduc=ቅናሹን አሳይ +ShowSourceInvoice=የምንጭ ደረሰኝ አሳይ +RelativeDiscount=አንጻራዊ ቅናሽ +GlobalDiscount=ዓለም አቀፍ ቅናሽ +CreditNote=የተሸጠ ዕቃ ሲመለስ የሚሰጥ ወረቀት +CreditNotes=የብድር ማስታወሻዎች +CreditNotesOrExcessReceived=የተቀበሉት የክሬዲት ማስታወሻዎች ወይም ትርፍ +Deposit=የቅድሚያ ክፍያ +Deposits=የቅድሚያ ክፍያዎች +DiscountFromCreditNote=ቅናሽ ከክሬዲት ማስታወሻ %s +DiscountFromDeposit=የቅድሚያ ክፍያዎች ከክፍያ መጠየቂያ %s +DiscountFromExcessReceived=ከክፍያ መጠየቂያ በላይ የሆኑ ክፍያዎች %s +DiscountFromExcessPaid=ከክፍያ መጠየቂያ በላይ የሆኑ ክፍያዎች %s +AbsoluteDiscountUse=ይህ ዓይነቱ ክሬዲት ከመፅደቁ በፊት ደረሰኝ ላይ ጥቅም ላይ ሊውል ይችላል። +CreditNoteDepositUse=ደረሰኝ እንደዚህ አይነት ክሬዲቶችን ለመጠቀም መረጋገጥ አለበት። +NewGlobalDiscount=አዲስ ፍጹም ቅናሽ +NewSupplierGlobalDiscount=አዲስ ፍጹም አቅራቢ ቅናሽ +NewClientGlobalDiscount=አዲስ ፍጹም የደንበኛ ቅናሽ +NewRelativeDiscount=አዲስ አንጻራዊ ቅናሽ +DiscountType=የቅናሽ ዓይነት +NoteReason=ማስታወሻ/ምክንያት። +ReasonDiscount=ምክንያት +DiscountOfferedBy=የተሰጠ በ +DiscountStillRemaining=ቅናሾች ወይም ክሬዲቶች ይገኛሉ +DiscountAlreadyCounted=አስቀድመው ጥቅም ላይ የዋሉ ቅናሾች ወይም ክሬዲቶች +CustomerDiscounts=የደንበኛ ቅናሾች +SupplierDiscounts=የአቅራቢዎች ቅናሾች +BillAddress=የክፍያ መጠየቂያ አድራሻ +HelpEscompte=ይህ ቅናሽ ለደንበኛ የተሰጠ ቅናሽ ነው ምክንያቱም ክፍያ የሚፈጸመው ከውል በፊት ነው። +HelpAbandonBadCustomer=ይህ መጠን ተትቷል (ደንበኛው መጥፎ ደንበኛ ነው ይባላል) እና እንደ ልዩ ኪሳራ ይቆጠራል። +HelpAbandonOther=ይህ መጠን ስህተት ስለሆነ ተትቷል (የተሳሳተ ደንበኛ ወይም ደረሰኝ በሌላ ተተክቷል ለምሳሌ) +IdSocialContribution=የማህበራዊ/የፋይናንስ ታክስ ክፍያ መታወቂያ +PaymentId=የክፍያ መታወቂያ +PaymentRef=ክፍያ ማጣቀሻ. +SourceInvoiceId=Source invoice id +InvoiceId=የክፍያ መጠየቂያ መታወቂያ +InvoiceRef=የክፍያ መጠየቂያ ማጣቀሻ. +InvoiceDateCreation=የክፍያ መጠየቂያ የተፈጠረበት ቀን +InvoiceStatus=የክፍያ መጠየቂያ ሁኔታ +InvoiceNote=የክፍያ መጠየቂያ ማስታወሻ +InvoicePaid=ደረሰኝ ተከፍሏል። +InvoicePaidCompletely=ሙሉ በሙሉ ተከፍሏል። +InvoicePaidCompletelyHelp=ሙሉ በሙሉ የሚከፈል ደረሰኝ. ይህ በከፊል የሚከፈሉትን ደረሰኞች አያካትትም። የሁሉንም 'ዝግ' ወይም 'የተዘጉ' የክፍያ መጠየቂያዎች ዝርዝር ለማግኘት በክፍያ መጠየቂያው ሁኔታ ላይ ማጣሪያ መጠቀምን ይምረጡ። +OrderBilled=ትእዛዝ ተከፍሏል። +DonationPaid=ልገሳ ተከፍሏል። +PaymentNumber=የክፍያ ቁጥር +RemoveDiscount=ቅናሽ አስወግድ +WatermarkOnDraftBill=በረቂቅ ደረሰኞች ላይ ያለው የውሃ ምልክት (ባዶ ከሆነ ምንም የለም) +InvoiceNotChecked=ምንም ደረሰኝ አልተመረጠም። ConfirmCloneInvoice=Are you sure you want to clone this invoice %s? -DisabledBecauseReplacedInvoice=Action disabled because invoice has been replaced -DescTaxAndDividendsArea=This area presents a summary of all payments made for special expenses. Only records with payments during the fixed year are included here. -NbOfPayments=No. of payments -SplitDiscount=Split discount in two +DisabledBecauseReplacedInvoice=ደረሰኝ ስለተተካ እርምጃ ተወግዷል +DescTaxAndDividendsArea=ይህ ቦታ ለልዩ ወጪዎች የተደረጉትን ሁሉንም ክፍያዎች ማጠቃለያ ያቀርባል. በተወሰነው ዓመት ውስጥ ክፍያዎች ያላቸው መዝገቦች ብቻ እዚህ ተካትተዋል። +NbOfPayments=የክፍያዎች ብዛት +SplitDiscount=ቅናሽ ለሁለት ተከፍሏል። ConfirmSplitDiscount=Are you sure you want to split this discount of %s %s into two smaller discounts? -TypeAmountOfEachNewDiscount=Input amount for each of two parts: -TotalOfTwoDiscountMustEqualsOriginal=The total of the two new discounts must be equal to the original discount amount. -ConfirmRemoveDiscount=Are you sure you want to remove this discount? -RelatedBill=Related invoice -RelatedBills=Related invoices -RelatedCustomerInvoices=Related customer invoices -RelatedSupplierInvoices=Related vendor invoices -LatestRelatedBill=Latest related invoice -WarningBillExist=Warning, one or more invoices already exist -MergingPDFTool=Merging PDF tool -AmountPaymentDistributedOnInvoice=Payment amount distributed on invoice -PaymentOnDifferentThirdBills=Allow payments on different third parties bills but same parent company -PaymentNote=Payment note -ListOfPreviousSituationInvoices=List of previous situation invoices -ListOfNextSituationInvoices=List of next situation invoices -ListOfSituationInvoices=List of situation invoices -CurrentSituationTotal=Total current situation -DisabledBecauseNotEnouthCreditNote=To remove a situation invoice from cycle, this invoice's credit note total must cover this invoice total -RemoveSituationFromCycle=Remove this invoice from cycle -ConfirmRemoveSituationFromCycle=Remove this invoice %s from cycle ? -ConfirmOuting=Confirm outing -FrequencyPer_d=Every %s days -FrequencyPer_m=Every %s months -FrequencyPer_y=Every %s years -FrequencyUnit=Frequency unit +TypeAmountOfEachNewDiscount=ለእያንዳንዱ ሁለት ክፍሎች የግቤት መጠን: +TotalOfTwoDiscountMustEqualsOriginal=የሁለቱ አዲስ ቅናሾች አጠቃላይ ከዋናው የቅናሽ መጠን ጋር እኩል መሆን አለበት። +ConfirmRemoveDiscount=እርግጠኛ ነዎት ይህን ቅናሽ ማስወገድ ይፈልጋሉ? +RelatedBill=ተዛማጅ ደረሰኝ +RelatedBills=ተዛማጅ ደረሰኞች +RelatedCustomerInvoices=ተዛማጅ የደንበኛ ደረሰኞች +RelatedSupplierInvoices=ተዛማጅ የአቅራቢ ደረሰኞች +LatestRelatedBill=የቅርብ ጊዜ ተዛማጅ ደረሰኝ +WarningBillExist=ማስጠንቀቂያ፣ አንድ ወይም ከዚያ በላይ ደረሰኞች አስቀድመው አሉ። +MergingPDFTool=ፒዲኤፍ መሣሪያን በማዋሃድ ላይ +AmountPaymentDistributedOnInvoice=የክፍያ መጠን በክፍያ መጠየቂያ ላይ ተሰራጭቷል። +PaymentOnDifferentThirdBills=በተለያዩ የሶስተኛ ወገን ሂሳቦች ግን በተመሳሳይ የወላጅ ኩባንያ ክፍያዎችን ይፍቀዱ +PaymentNote=የክፍያ ማስታወሻ +ListOfPreviousSituationInvoices=የቀደመው ሁኔታ ደረሰኞች ዝርዝር +ListOfNextSituationInvoices=የሚቀጥለው ሁኔታ ደረሰኞች ዝርዝር +ListOfSituationInvoices=የሁኔታ ደረሰኞች ዝርዝር +CurrentSituationTotal=አጠቃላይ ወቅታዊ ሁኔታ +DisabledBecauseNotEnouthCreditNote=የሁኔታ ደረሰኝን ከዑደት ለማስወገድ፣ የዚህ የክፍያ መጠየቂያ ክሬዲት ኖት ጠቅላላ ይህንን የክፍያ መጠየቂያ ጠቅላላ መሸፈን አለበት። +RemoveSituationFromCycle=ይህን ደረሰኝ ከዑደት ያስወግዱት። +ConfirmRemoveSituationFromCycle=ይህ መጠየቂያ %s ከዑደት ይወገድ? +ConfirmOuting=መውጣትን ያረጋግጡ +FrequencyPer_d=በየ%s ቀናት +FrequencyPer_m=በየ%s ወራት +FrequencyPer_y=በየ%s ዓመታት +FrequencyUnit=የድግግሞሽ ክፍል toolTipFrequency=Examples:
Set 7, Day: give a new invoice every 7 days
Set 3, Month: give a new invoice every 3 month -NextDateToExecution=Date for next invoice generation -NextDateToExecutionShort=Date next gen. -DateLastGeneration=Date of latest generation -DateLastGenerationShort=Date latest gen. -MaxPeriodNumber=Max. number of invoice generation -NbOfGenerationDone=Number of invoice generation already done -NbOfGenerationOfRecordDone=Number of record generation already done -NbOfGenerationDoneShort=Number of generation done -MaxGenerationReached=Maximum number of generations reached -InvoiceAutoValidate=Validate invoices automatically -GeneratedFromRecurringInvoice=Generated from template recurring invoice %s -DateIsNotEnough=Date not reached yet -InvoiceGeneratedFromTemplate=Invoice %s generated from recurring template invoice %s -GeneratedFromTemplate=Generated from template invoice %s -WarningInvoiceDateInFuture=Warning, the invoice date is higher than current date -WarningInvoiceDateTooFarInFuture=Warning, the invoice date is too far from current date -ViewAvailableGlobalDiscounts=View available discounts -GroupPaymentsByModOnReports=Group payments by mode on reports +NextDateToExecution=የሚቀጥለው የክፍያ መጠየቂያ ትውልድ ቀን +NextDateToExecutionShort=የሚቀጥለው ጄኔራል ቀን. +DateLastGeneration=የቅርብ ጊዜ ትውልድ ቀን +DateLastGenerationShort=የቅርብ ጊዜ Gen. +MaxPeriodNumber=ከፍተኛ. የክፍያ መጠየቂያ ትውልድ ቁጥር +NbOfGenerationDone=አስቀድሞ የተደረገ የክፍያ መጠየቂያ ማመንጨት ብዛት +NbOfGenerationOfRecordDone=ቀድሞ የተከናወነ የመዝገብ ማመንጨት ብዛት +NbOfGenerationDoneShort=የተከናወኑ ትውልዶች ብዛት +MaxGenerationReached=ከፍተኛው የትውልዶች ብዛት ደርሷል +InvoiceAutoValidate=ደረሰኞችን በራስ ሰር ያረጋግጡ +GeneratedFromRecurringInvoice=ከአብነት ተደጋጋሚ ደረሰኝ የመነጨ %s +DateIsNotEnough=ቀን ገና አልደረሰም። +InvoiceGeneratedFromTemplate=ደረሰኝ %s ከተደጋጋሚ የአብነት መጠየቂያ ደረሰኝ የመነጨ %s +GeneratedFromTemplate=ከአብነት ደረሰኝ %s የመነጨ +WarningInvoiceDateInFuture=ማስጠንቀቂያ፣ የክፍያ መጠየቂያ ቀኑ ከአሁኑ ቀን ይበልጣል +WarningInvoiceDateTooFarInFuture=ማስጠንቀቂያ፣ የክፍያ መጠየቂያ ቀኑ ከአሁኑ ቀን በጣም የራቀ ነው። +ViewAvailableGlobalDiscounts=የሚገኙ ቅናሾችን ይመልከቱ +GroupPaymentsByModOnReports=የቡድን ክፍያዎች በሪፖርቶች ሁነታ # PaymentConditions -Statut=Status -PaymentConditionShortRECEP=Due Upon Receipt -PaymentConditionRECEP=Due Upon Receipt -PaymentConditionShort30D=30 days -PaymentCondition30D=30 days -PaymentConditionShort30DENDMONTH=30 days of month-end -PaymentCondition30DENDMONTH=Within 30 days following the end of the month -PaymentConditionShort60D=60 days -PaymentCondition60D=60 days -PaymentConditionShort60DENDMONTH=60 days of month-end -PaymentCondition60DENDMONTH=Within 60 days following the end of the month -PaymentConditionShortPT_DELIVERY=Delivery -PaymentConditionPT_DELIVERY=On delivery -PaymentConditionShortPT_ORDER=Order -PaymentConditionPT_ORDER=On order +Statut=ሁኔታ +PaymentConditionShortRECEP=በደረሰኝ ጊዜ የሚከፈል +PaymentConditionRECEP=በደረሰኝ ጊዜ የሚከፈል +PaymentConditionShort30D=30 ቀናት +PaymentCondition30D=30 ቀናት +PaymentConditionShort30DENDMONTH=የወሩ መጨረሻ 30 ቀናት +PaymentCondition30DENDMONTH=ከወሩ መጨረሻ በኋላ ባሉት 30 ቀናት ውስጥ +PaymentConditionShort60D=60 ቀናት +PaymentCondition60D=60 ቀናት +PaymentConditionShort60DENDMONTH=የወሩ መጨረሻ 60 ቀናት +PaymentCondition60DENDMONTH=ከወሩ መጨረሻ በኋላ ባሉት 60 ቀናት ውስጥ +PaymentConditionShortPT_DELIVERY=ማድረስ +PaymentConditionPT_DELIVERY=በማስረከብ ላይ +PaymentConditionShortPT_ORDER=ማዘዝ +PaymentConditionPT_ORDER=በትዕዛዝ ላይ PaymentConditionShortPT_5050=50-50 -PaymentConditionPT_5050=50%% in advance, 50%% on delivery -PaymentConditionShort10D=10 days -PaymentCondition10D=10 days -PaymentConditionShort10DENDMONTH=10 days of month-end -PaymentCondition10DENDMONTH=Within 10 days following the end of the month -PaymentConditionShort14D=14 days -PaymentCondition14D=14 days -PaymentConditionShort14DENDMONTH=14 days of month-end -PaymentCondition14DENDMONTH=Within 14 days following the end of the month -FixAmount=Fixed amount - 1 line with label '%s' -VarAmount=Variable amount (%% tot.) -VarAmountOneLine=Variable amount (%% tot.) - 1 line with label '%s' -VarAmountAllLines=Variable amount (%% tot.) - all lines from origin +PaymentConditionPT_5050=50%% በቅድሚያ፣ 50%% በማድረስ ላይ +PaymentConditionShort10D=10 ቀናት +PaymentCondition10D=10 ቀናት +PaymentConditionShort10DENDMONTH=የወሩ መጨረሻ 10 ቀናት +PaymentCondition10DENDMONTH=ከወሩ መጨረሻ በኋላ ባሉት 10 ቀናት ውስጥ +PaymentConditionShort14D=14 ቀናት +PaymentCondition14D=14 ቀናት +PaymentConditionShort14DENDMONTH=በወር መጨረሻ 14 ቀናት +PaymentCondition14DENDMONTH=ከወሩ መጨረሻ በኋላ ባሉት 14 ቀናት ውስጥ +PaymentConditionShortDEP30PCTDEL=__DEPOSIT_PERCENT__%% ማስቀመጫ +PaymentConditionDEP30PCTDEL=__DEPOSIT_PERCENT__%% ተቀማጭ፣ በማስረከብ ላይ የቀረው +FixAmount=የተወሰነ መጠን - 1 መስመር '%s' መለያ +VarAmount=ተለዋዋጭ መጠን (%% ቶ.) +VarAmountOneLine=ተለዋዋጭ መጠን (%% tot.) - 1 መስመር ከመለያ ጋር '%s' +VarAmountAllLines=ተለዋዋጭ መጠን (%%ቶ.) - ሁሉም መስመሮች ከመነሻ +DepositPercent=ተቀማጭ %% +DepositGenerationPermittedByThePaymentTermsSelected=ይህ በተመረጡት የክፍያ ውሎች ይፈቀዳል። +GenerateDeposit=የ%s%% የማስቀመጫ ደረሰኝ ይፍጠሩ +ValidateGeneratedDeposit=የተፈጠረውን ተቀማጭ ገንዘብ ያረጋግጡ +DepositGenerated=ተቀማጭ ተፈጠረ +ErrorCanOnlyAutomaticallyGenerateADepositFromProposalOrOrder=ተቀማጭ ገንዘብ ከፕሮፖዛል ወይም ከትእዛዝ ብቻ ማመንጨት ይችላሉ። +ErrorPaymentConditionsNotEligibleToDepositCreation=የተመረጡት የክፍያ ሁኔታዎች አውቶማቲክ ተቀማጭ ገንዘብ ለማመንጨት ብቁ አይደሉም # PaymentType -PaymentTypeVIR=Bank transfer -PaymentTypeShortVIR=Bank transfer -PaymentTypePRE=Direct debit payment order -PaymentTypeShortPRE=Debit payment order -PaymentTypeLIQ=Cash -PaymentTypeShortLIQ=Cash -PaymentTypeCB=Credit card -PaymentTypeShortCB=Credit card -PaymentTypeCHQ=Check -PaymentTypeShortCHQ=Check -PaymentTypeTIP=TIP (Documents against Payment) -PaymentTypeShortTIP=TIP Payment -PaymentTypeVAD=Online payment -PaymentTypeShortVAD=Online payment -PaymentTypeTRA=Bank draft -PaymentTypeShortTRA=Draft -PaymentTypeFAC=Factor -PaymentTypeShortFAC=Factor -PaymentTypeDC=Debit/Credit Card +PaymentTypeVIR=የባንክ ማስተላለፍ +PaymentTypeShortVIR=የባንክ ማስተላለፍ +PaymentTypePRE=ቀጥታ የዴቢት ክፍያ ማዘዣ +PaymentTypePREdetails=(በመለያ %s...) +PaymentTypeShortPRE=የዴቢት ክፍያ ማዘዣ +PaymentTypeLIQ=ጥሬ ገንዘብ +PaymentTypeShortLIQ=ጥሬ ገንዘብ +PaymentTypeCB=የዱቤ ካርድ +PaymentTypeShortCB=የዱቤ ካርድ +PaymentTypeCHQ=ይፈትሹ +PaymentTypeShortCHQ=ይፈትሹ +PaymentTypeTIP=ጠቃሚ ምክር (ከክፍያ ጋር የተያያዙ ሰነዶች) +PaymentTypeShortTIP=የቲፕ ክፍያ +PaymentTypeVAD=የመስመር ላይ ክፍያ +PaymentTypeShortVAD=የመስመር ላይ ክፍያ +PaymentTypeTRA=የባንክ ረቂቅ +PaymentTypeShortTRA=ረቂቅ +PaymentTypeFAC=ምክንያት +PaymentTypeShortFAC=ምክንያት +PaymentTypeDC=ዴቢት/ክሬዲት ካርድ PaymentTypePP=PayPal -BankDetails=Bank details -BankCode=Bank code -DeskCode=Branch code -BankAccountNumber=Account number +BankDetails=የባንክ ዝርዝሮች +BankCode=የባንክ ኮድ +DeskCode=የቅርንጫፍ ኮድ +BankAccountNumber=መለያ ቁጥር BankAccountNumberKey=Checksum -Residence=Address -IBANNumber=IBAN account number -IBAN=IBAN -CustomerIBAN=IBAN of customer -SupplierIBAN=IBAN of vendor +Residence=አድራሻ +IBANNumber=IBAN መለያ ቁጥር +IBAN=አይባን +CustomerIBAN=የደንበኛ IBAN +SupplierIBAN=የአቅራቢው IBAN BIC=BIC/SWIFT -BICNumber=BIC/SWIFT code -ExtraInfos=Extra infos -RegulatedOn=Regulated on -ChequeNumber=Check N° -ChequeOrTransferNumber=Check/Transfer N° -ChequeBordereau=Check schedule -ChequeMaker=Check/Transfer sender -ChequeBank=Bank of Check -CheckBank=Check -NetToBePaid=Net to be paid -PhoneNumber=Tel -FullPhoneNumber=Telephone -TeleFax=Fax -PrettyLittleSentence=Accept the amount of payments due by checks issued in my name as a Member of an accounting association approved by the Fiscal Administration. -IntracommunityVATNumber=Intra-Community VAT ID -PaymentByChequeOrderedTo=Check payments (including tax) are payable to %s, send to -PaymentByChequeOrderedToShort=Check payments (incl. tax) are payable to -SendTo=sent to -PaymentByTransferOnThisBankAccount=Payment by transfer to the following bank account -VATIsNotUsedForInvoice=* Non applicable VAT art-293B of CGI -LawApplicationPart1=By application of the law 80.335 of 12/05/80 -LawApplicationPart2=the goods remain the property of -LawApplicationPart3=the seller until full payment of -LawApplicationPart4=their price. -LimitedLiabilityCompanyCapital=SARL with Capital of -UseLine=Apply -UseDiscount=Use discount -UseCredit=Use credit -UseCreditNoteInInvoicePayment=Reduce amount to pay with this credit -MenuChequeDeposits=Check Deposits -MenuCheques=Checks -MenuChequesReceipts=Check receipts -NewChequeDeposit=New deposit -ChequesReceipts=Check receipts -ChequesArea=Check deposits area -ChequeDeposits=Check deposits -Cheques=Checks -DepositId=Id deposit -NbCheque=Number of checks -CreditNoteConvertedIntoDiscount=This %s has been converted into %s -UsBillingContactAsIncoiveRecipientIfExist=Use contact/address with type 'billing contact' instead of third-party address as recipient for invoices -ShowUnpaidAll=Show all unpaid invoices -ShowUnpaidLateOnly=Show late unpaid invoices only -PaymentInvoiceRef=Payment invoice %s -ValidateInvoice=Validate invoice -ValidateInvoices=Validate invoices -Cash=Cash -Reported=Delayed -DisabledBecausePayments=Not possible since there are some payments -CantRemovePaymentWithOneInvoicePaid=Can't remove payment since there is at least one invoice classified paid -CantRemovePaymentVATPaid=Can't remove payment since VAT declaration is classified paid -CantRemovePaymentSalaryPaid=Can't remove payment since salary is classified paid -ExpectedToPay=Expected payment -CantRemoveConciliatedPayment=Can't remove reconciled payment -PayedByThisPayment=Paid by this payment -ClosePaidInvoicesAutomatically=Classify automatically all standard, down payment or replacement invoices as "Paid" when payment is done entirely. -ClosePaidCreditNotesAutomatically=Classify automatically all credit notes as "Paid" when refund is done entirely. -ClosePaidContributionsAutomatically=Classify automatically all social or fiscal contributions as "Paid" when payment is done entirely. -ClosePaidVATAutomatically=Classify automatically VAT declaration as "Paid" when payment is done entirely. -ClosePaidSalaryAutomatically=Classify automatically salary as "Paid" when payment is done entirely. -AllCompletelyPayedInvoiceWillBeClosed=All invoices with no remainder to pay will be automatically closed with status "Paid". -ToMakePayment=Pay -ToMakePaymentBack=Pay back -ListOfYourUnpaidInvoices=List of unpaid invoices -NoteListOfYourUnpaidInvoices=Note: This list contains only invoices for third parties you are linked to as a sale representative. -RevenueStamp=Tax stamp -YouMustCreateInvoiceFromThird=This option is only available when creating an invoice from tab "Customer" of third party -YouMustCreateInvoiceFromSupplierThird=This option is only available when creating an invoice from tab "Vendor" of third party -YouMustCreateStandardInvoiceFirstDesc=You have to create a standard invoice first and convert it to "template" to create a new template invoice -PDFCrabeDescription=Invoice PDF template Crabe. A complete invoice template (old implementation of Sponge template) -PDFSpongeDescription=Invoice PDF template Sponge. A complete invoice template -PDFCrevetteDescription=Invoice PDF template Crevette. A complete invoice template for situation invoices -TerreNumRefModelDesc1=Return number in the format %syymm-nnnn for standard invoices and %syymm-nnnn for credit notes where yy is year, mm is month and nnnn is a sequencial auto-incrementing number with no break and no return to 0 -MarsNumRefModelDesc1=Return number in the format %syymm-nnnn for standard invoices, %syymm-nnnn for replacement invoices, %syymm-nnnn for down payment invoices and %syymm-nnnn for credit notes where yy is year, mm is month and nnnn is a sequencial auto-incrementing number with no break and no return to 0 -TerreNumRefModelError=A bill starting with $syymm already exists and is not compatible with this model of sequence. Remove it or rename it to activate this module. -CactusNumRefModelDesc1=Return number in the format %syymm-nnnn for standard invoices, %syymm-nnnn for credit notes and %syymm-nnnn for down payment invoices where yy is year, mm is month and nnnn is a sequencial auto-incrementing number with no break and no return to 0 -EarlyClosingReason=Early closing reason -EarlyClosingComment=Early closing note +BICNumber=BIC/SWIFT ኮድ +ExtraInfos=ተጨማሪ መረጃ +RegulatedOn=ላይ ተስተካክሏል። +ChequeNumber=N ° ያረጋግጡ +ChequeOrTransferNumber=N°ን ያረጋግጡ/አስተላልፍ +ChequeBordereau=መርሐግብር ያረጋግጡ +ChequeMaker=ላኪን ያረጋግጡ/አስተላልፍ +ChequeBank=የቼክ ባንክ +CheckBank=ይፈትሹ +NetToBePaid=የሚከፈልበት የተጣራ +PhoneNumber=ስልክ +FullPhoneNumber=ስልክ +TeleFax=ፋክስ +PrettyLittleSentence=በፋይስካል አስተዳደር የፀደቀ የሂሳብ ማኅበር አባል እንደመሆኔ በስሜ በወጡ ቼኮች የሚከፈለውን የክፍያ መጠን ተቀበል። +IntracommunityVATNumber=የማህበረሰብ ውስጥ የተጨማሪ እሴት ታክስ መታወቂያ +PaymentByChequeOrderedTo=ክፍያዎችን (ግብርን ጨምሮ) ለ%s የሚከፈሉ ናቸው፣ ይላኩ +PaymentByChequeOrderedToShort=የቼክ ክፍያዎች (ግብርን ጨምሮ) የሚከፈሉ ናቸው። +SendTo=ተልኳል። +PaymentByTransferOnThisBankAccount=ወደሚከተለው የባንክ ሂሳብ በማስተላለፍ ክፍያ +VATIsNotUsedForInvoice=* የማይተገበር ተ.እ.ታ ጥበብ-293B የ CGI +VATIsNotUsedForInvoiceAsso=* የማይተገበር ተ.እ.ታ ጥበብ-261-7 የ CGI +LawApplicationPart1=በህጉ 80.335 የ 12/05/80 አተገባበር +LawApplicationPart2=እቃዎቹ የንብረቱ ንብረት ሆነው ይቆያሉ +LawApplicationPart3=እስከ ሙሉ ክፍያ ድረስ ሻጩ +LawApplicationPart4=ዋጋቸው. +LimitedLiabilityCompanyCapital=SARL ከ ካፒታል ጋር +UseLine=ያመልክቱ +UseDiscount=ቅናሽ ይጠቀሙ +UseCredit=ክሬዲት ተጠቀም +UseCreditNoteInInvoicePayment=በዚህ ክሬዲት የሚከፍሉትን መጠን ይቀንሱ +MenuChequeDeposits=የተቀማጭ ገንዘብ ይንሸራተታል። +MenuCheques=ቼኮች +MenuChequesReceipts=የተቀማጭ ወረቀቶች +NewChequeDeposit=አዲስ የተቀማጭ ወረቀት +ChequesReceipts=የተቀማጭ ወረቀቶችን ያረጋግጡ +DocumentsDepositArea=የተቀማጭ መንሸራተቻ ቦታ +ChequesArea=የተቀማጭ መንሸራተቻ ቦታ +ChequeDeposits=የተቀማጭ ወረቀቶች +Cheques=ቼኮች +DepositId=መታወቂያ ማስቀመጫ +NbCheque=የቼኮች ብዛት +CreditNoteConvertedIntoDiscount=ይህ %s ወደ %s ተቀይሯል +UsBillingContactAsIncoiveRecipientIfExist=ለክፍያ መጠየቂያዎች ተቀባይ ከሶስተኛ ወገን አድራሻ ይልቅ እውቂያ/አድራሻን ዓይነት 'የክፍያ መጠየቂያ አድራሻ' ይጠቀሙ +ShowUnpaidAll=ሁሉንም ያልተከፈሉ ደረሰኞች አሳይ +ShowUnpaidLateOnly=ዘግይተው ያልተከፈሉ ደረሰኞችን ብቻ አሳይ +PaymentInvoiceRef=የክፍያ መጠየቂያ ደረሰኝ %s +ValidateInvoice=ደረሰኝ አረጋግጥ +ValidateInvoices=ደረሰኞችን ያረጋግጡ +Cash=ጥሬ ገንዘብ +Reported=ዘግይቷል +DisabledBecausePayments=አንዳንድ ክፍያዎች ስላሉ አይቻልም +CantRemovePaymentWithOneInvoicePaid=ቢያንስ አንድ የክፍያ መጠየቂያ የተከፈለ ክፍያ ስላለ ክፍያን ማስወገድ አይቻልም +CantRemovePaymentVATPaid=የተጨማሪ እሴት ታክስ መግለጫ ስለሚከፈል ክፍያን ማስወገድ አይቻልም +CantRemovePaymentSalaryPaid=ደሞዝ የሚከፈልበት ስለሆነ ክፍያን ማስወገድ አይቻልም +ExpectedToPay=የሚጠበቀው ክፍያ +CantRemoveConciliatedPayment=የታረቀ ክፍያን ማስወገድ አልተቻለም +PayedByThisPayment=በዚህ ክፍያ ተከፍሏል። +ClosePaidInvoicesAutomatically=ክፍያ ሙሉ በሙሉ ሲጠናቀቅ ሁሉንም መደበኛ፣ ቅድመ ክፍያ ወይም ምትክ ደረሰኞችን እንደ "የተከፈለ" ይመድቡ። +ClosePaidCreditNotesAutomatically=ተመላሽ ገንዘብ ሙሉ በሙሉ ሲጠናቀቅ ሁሉንም የክሬዲት ማስታወሻዎች በራስ-ሰር እንደ "የተከፈለ" ይመድቡ። +ClosePaidContributionsAutomatically=ክፍያ ሙሉ በሙሉ ሲጠናቀቅ ሁሉንም ማህበራዊ ወይም ፊስካል መዋጮዎችን እንደ "የተከፈለ" ይመድቡ። +ClosePaidVATAutomatically=ክፍያ ሙሉ በሙሉ ሲጠናቀቅ የተጨማሪ እሴት ታክስ መግለጫን እንደ "የተከፈለ" ይመድቡ። +ClosePaidSalaryAutomatically=ክፍያ ሙሉ በሙሉ ሲጠናቀቅ ደመወዙን እንደ "የተከፈለ" ይመድቡ። +AllCompletelyPayedInvoiceWillBeClosed=ለመክፈል ምንም ቀሪ የሌላቸው ሁሉም ደረሰኞች በ"የተከፈለ" ሁኔታ በራስ-ሰር ይዘጋሉ። +ToMakePayment=ይክፈሉ። +ToMakePaymentBack=መልሰው ይክፈሉ። +ListOfYourUnpaidInvoices=ያልተከፈሉ የክፍያ መጠየቂያዎች ዝርዝር +NoteListOfYourUnpaidInvoices=ማሳሰቢያ፡ ይህ ዝርዝር እንደ የሽያጭ ተወካይ ከተያያዙት የሶስተኛ ወገኖች ደረሰኞች ብቻ ይዟል። +RevenueStamp=የግብር ማህተም +YouMustCreateInvoiceFromThird=ይህ አማራጭ ከሶስተኛ ወገን ትር "ደንበኛ" ደረሰኝ ሲፈጠር ብቻ ይገኛል +YouMustCreateInvoiceFromSupplierThird=ይህ አማራጭ ከሶስተኛ ወገን "አቅራቢ" ትር ደረሰኝ ሲፈጠር ብቻ ይገኛል። +YouMustCreateStandardInvoiceFirstDesc=አዲስ የአብነት መጠየቂያ ደረሰኝ ለመፍጠር መጀመሪያ መደበኛ ደረሰኝ መፍጠር እና ወደ "አብነት" መቀየር አለብዎት +PDFCrabeDescription=የክፍያ መጠየቂያ ፒዲኤፍ አብነት Crabe. የተሟላ የክፍያ መጠየቂያ አብነት (የስፖንጅ አብነት የቆየ ትግበራ) +PDFSpongeDescription=የክፍያ መጠየቂያ ፒዲኤፍ አብነት ስፖንጅ። የተሟላ የክፍያ መጠየቂያ አብነት +PDFCrevetteDescription=የክፍያ መጠየቂያ ፒዲኤፍ አብነት Crevette። ለሁኔታ ደረሰኞች የተሟላ የክፍያ መጠየቂያ አብነት +TerreNumRefModelDesc1=የመመለሻ ቁጥር በ%syymm-nnnn ለመደበኛ ደረሰኞች እና %syymm-nnn ለክሬዲት ማስታወሻዎች አመት ሲሆን ሚሜ ወር ነው እና nnn ምንም እረፍት የሌለው እና ወደ 0 የማይመለስ ተከታታይ በራስ-የሚጨምር ቁጥር ነው +MarsNumRefModelDesc1=የመመለሻ ቁጥር በ%syymm-nnnn ለመደበኛ ደረሰኞች፣ %syymm-ninn ለመተኪያ ደረሰኞች፣ %syymm-nnnn ለቅድመ ክፍያ መጠየቂያዎች እና %syymm-nnnn ለክሬዲት ማስታወሻዎች ዓመተ ምህረት ወር ነው እና nnn ራስ-ሰር ተከታታይ ነው። ያለማቋረጥ እና ወደ 0 የማይመለስ ቁጥር እየጨመረ ነው። +TerreNumRefModelError=በ$syymm የሚጀምር ሂሳብ አስቀድሞ አለ እና ከዚህ ተከታታይ ሞዴል ጋር ተኳሃኝ አይደለም። ይህን ሞጁል ለማንቃት ያስወግዱት ወይም እንደገና ይሰይሙት። +CactusNumRefModelDesc1=የመመለሻ ቁጥር በ%syymm-nnnn ለመደበኛ ደረሰኞች፣ %syymm-nnn ለክሬዲት ማስታወሻዎች እና %syymm-nnnn ለቅድመ ክፍያ መጠየቂያዎች yy አመት ሲሆን ሚሜ ወር ሲሆን እና nnn ምንም እረፍት የሌለው እና ወደ 0 የማይመለስ በራስ-ሰር የሚጨምር ቁጥር ነው +EarlyClosingReason=ቀደምት የመዝጊያ ምክንያት +EarlyClosingComment=ቀደም መዝጊያ ማስታወሻ ##### Types de contacts ##### -TypeContact_facture_internal_SALESREPFOLL=Representative following-up customer invoice -TypeContact_facture_external_BILLING=Customer invoice contact -TypeContact_facture_external_SHIPPING=Customer shipping contact -TypeContact_facture_external_SERVICE=Customer service contact -TypeContact_invoice_supplier_internal_SALESREPFOLL=Representative following-up vendor invoice -TypeContact_invoice_supplier_external_BILLING=Vendor invoice contact -TypeContact_invoice_supplier_external_SHIPPING=Vendor shipping contact -TypeContact_invoice_supplier_external_SERVICE=Vendor service contact +TypeContact_facture_internal_SALESREPFOLL=የተከታታይ ደንበኛ ደረሰኝ ተወካይ +TypeContact_facture_external_BILLING=የደንበኛ የክፍያ መጠየቂያ እውቂያ +TypeContact_facture_external_SHIPPING=የደንበኛ መላኪያ ዕውቂያ +TypeContact_facture_external_SERVICE=የደንበኛ አገልግሎት ግንኙነት +TypeContact_invoice_supplier_internal_SALESREPFOLL=የተከታታይ አቅራቢ ደረሰኝ ተወካይ +TypeContact_invoice_supplier_external_BILLING=የአቅራቢ ደረሰኝ ግንኙነት +TypeContact_invoice_supplier_external_SHIPPING=የአቅራቢ መላኪያ ግንኙነት +TypeContact_invoice_supplier_external_SERVICE=የአቅራቢ አገልግሎት ግንኙነት # Situation invoices -InvoiceFirstSituationAsk=First situation invoice -InvoiceFirstSituationDesc=The situation invoices are tied to situations related to a progression, for example the progression of a construction. Each situation is tied to an invoice. -InvoiceSituation=Situation invoice -PDFInvoiceSituation=Situation invoice -InvoiceSituationAsk=Invoice following the situation -InvoiceSituationDesc=Create a new situation following an already existing one -SituationAmount=Situation invoice amount(net) -SituationDeduction=Situation subtraction -ModifyAllLines=Modify all lines -CreateNextSituationInvoice=Create next situation -ErrorFindNextSituationInvoice=Error unable to find next situation cycle ref -ErrorOutingSituationInvoiceOnUpdate=Unable to outing this situation invoice. -ErrorOutingSituationInvoiceCreditNote=Unable to outing linked credit note. -NotLastInCycle=This invoice is not the latest in cycle and must not be modified. -DisabledBecauseNotLastInCycle=The next situation already exists. -DisabledBecauseFinal=This situation is final. -situationInvoiceShortcode_AS=AS -situationInvoiceShortcode_S=S -CantBeLessThanMinPercent=The progress can't be smaller than its value in the previous situation. -NoSituations=No open situations -InvoiceSituationLast=Final and general invoice -PDFCrevetteSituationNumber=Situation N°%s -PDFCrevetteSituationInvoiceLineDecompte=Situation invoice - COUNT -PDFCrevetteSituationInvoiceTitle=Situation invoice -PDFCrevetteSituationInvoiceLine=Situation N°%s: Inv. N°%s on %s -TotalSituationInvoice=Total situation -invoiceLineProgressError=Invoice line progress can't be greater than or equal to the next invoice line -updatePriceNextInvoiceErrorUpdateline=Error: update price on invoice line: %s -ToCreateARecurringInvoice=To create a recurring invoice for this contract, first create this draft invoice, then convert it into an invoice template and define the frequency for generation of future invoices. -ToCreateARecurringInvoiceGene=To generate future invoices regularly and manually, just go on menu %s - %s - %s. -ToCreateARecurringInvoiceGeneAuto=If you need to have such invoices generated automatically, ask your administrator to enable and setup module %s. Note that both methods (manual and automatic) can be used together with no risk of duplication. -DeleteRepeatableInvoice=Delete template invoice -ConfirmDeleteRepeatableInvoice=Are your sure you want to delete the template invoice? -CreateOneBillByThird=Create one invoice per third party (otherwise, one invoice per selected object) -BillCreated=%s invoice(s) generated -BillXCreated=Invoice %s generated -StatusOfGeneratedDocuments=Status of document generation -DoNotGenerateDoc=Do not generate document file -AutogenerateDoc=Auto generate document file -AutoFillDateFrom=Set start date for service line with invoice date -AutoFillDateFromShort=Set start date -AutoFillDateTo=Set end date for service line with next invoice date -AutoFillDateToShort=Set end date -MaxNumberOfGenerationReached=Max number of gen. reached -BILL_DELETEInDolibarr=Invoice deleted -BILL_SUPPLIER_DELETEInDolibarr=Supplier invoice deleted -UnitPriceXQtyLessDiscount=Unit price x Qty - Discount -CustomersInvoicesArea=Customer billing area -SupplierInvoicesArea=Supplier billing area -FacParentLine=Invoice Line Parent -SituationTotalRayToRest=Remainder to pay without taxe -PDFSituationTitle=Situation n° %d -SituationTotalProgress=Total progress %d %% -SearchUnpaidInvoicesWithDueDate=Search unpaid invoices with a due date = %s -NoPaymentAvailable=No payment available for %s -PaymentRegisteredAndInvoiceSetToPaid=Payment registered and invoice %s set to paid -SendEmailsRemindersOnInvoiceDueDate=Send reminder by email for unpaid invoices +InvoiceFirstSituationAsk=የመጀመሪያ ሁኔታ ደረሰኝ +InvoiceFirstSituationDesc=የሁኔታ ደረሰኞች ከእድገት ጋር በተያያዙ ሁኔታዎች ላይ የተሳሰሩ ናቸው ለምሳሌ የግንባታ እድገት። እያንዳንዱ ሁኔታ ከክፍያ መጠየቂያ ደረሰኝ ጋር የተሳሰረ ነው። +InvoiceSituation=የሁኔታ ደረሰኝ +PDFInvoiceSituation=የሁኔታ ደረሰኝ +InvoiceSituationAsk=ሁኔታውን ተከትሎ ደረሰኝ +InvoiceSituationDesc=ቀደም ሲል የነበረውን ሁኔታ በመከተል አዲስ ሁኔታ ይፍጠሩ +SituationAmount=የሁኔታ ደረሰኝ መጠን (የተጣራ) +SituationDeduction=ሁኔታ መቀነስ +ModifyAllLines=ሁሉንም መስመሮች ያስተካክሉ +CreateNextSituationInvoice=የሚቀጥለውን ሁኔታ ይፍጠሩ +ErrorFindNextSituationInvoice=የሚቀጥለውን ሁኔታ ዑደት ማግኘት አልተቻለም +ErrorOutingSituationInvoiceOnUpdate=ከዚህ ሁኔታ ደረሰኝ መውጣት አልተቻለም። +ErrorOutingSituationInvoiceCreditNote=የተገናኘ የብድር ማስታወሻ መውጣት አልተቻለም። +NotLastInCycle=ይህ የክፍያ መጠየቂያ በዑደት ውስጥ የቅርብ ጊዜ አይደለም እናም መሻሻል የለበትም። +DisabledBecauseNotLastInCycle=የሚቀጥለው ሁኔታ ቀድሞውኑ አለ። +DisabledBecauseFinal=ይህ ሁኔታ የመጨረሻ ነው. +situationInvoiceShortcode_AS=አስ +situationInvoiceShortcode_S=ኤስ +CantBeLessThanMinPercent=እድገቱ ካለፈው ሁኔታ ከዋጋው ያነሰ ሊሆን አይችልም። +NoSituations=ክፍት ሁኔታዎች የሉም +InvoiceSituationLast=የመጨረሻ እና አጠቃላይ ደረሰኝ +PDFCrevetteSituationNumber=ሁኔታ N°%s +PDFCrevetteSituationInvoiceLineDecompte=የሁኔታ ደረሰኝ - COUNT +PDFCrevetteSituationInvoiceTitle=የሁኔታ ደረሰኝ +PDFCrevetteSituationInvoiceLine=ሁኔታ N°%s፡ Inv. N°%s በ%s ላይ +TotalSituationInvoice=አጠቃላይ ሁኔታ +invoiceLineProgressError=የክፍያ መጠየቂያ መስመር ሂደት ከሚቀጥለው የክፍያ መጠየቂያ መስመር የበለጠ ወይም እኩል ሊሆን አይችልም። +updatePriceNextInvoiceErrorUpdateline=ስህተት፡ በክፍያ መጠየቂያ መስመር ላይ ያለውን ዋጋ አዘምን፡ %s +ToCreateARecurringInvoice=ለዚህ ውል ተደጋጋሚ የክፍያ መጠየቂያ ደረሰኝ ለመፍጠር በመጀመሪያ ይህንን ረቂቅ ደረሰኝ ይፍጠሩ እና ከዚያ ወደ ደረሰኝ አብነት ይለውጡት እና የወደፊቱን ደረሰኞች የማመንጨት ድግግሞሽ ይግለጹ። +ToCreateARecurringInvoiceGene=የወደፊት ደረሰኞችን በመደበኛነት እና በእጅ ለማመንጨት ወደ ሜኑ ይሂዱ። span> - %s
። +ToCreateARecurringInvoiceGeneAuto=እንደዚህ አይነት ደረሰኞች በራስ ሰር እንዲፈጠሩ ከፈለጉ አስተዳዳሪዎን ሞጁሉን እንዲያነቃ እና እንዲያዋቅሩ ይጠይቁ %s ። ሁለቱም ዘዴዎች (በእጅ እና አውቶማቲክ) ምንም የማባዛት አደጋ ሳይኖር አብረው ጥቅም ላይ ሊውሉ እንደሚችሉ ልብ ይበሉ። +DeleteRepeatableInvoice=የአብነት ደረሰኝ ሰርዝ +ConfirmDeleteRepeatableInvoice=እርግጠኛ ነዎት የአብነት መጠየቂያ መጠየቂያ ደረሰኝ መሰረዝ ይፈልጋሉ? +CreateOneBillByThird=በሶስተኛ ወገን አንድ ደረሰኝ ይፍጠሩ (አለበለዚያ በተመረጠው ነገር አንድ ደረሰኝ) +BillCreated=%s ደረሰኝ(ዎች) መነጨ +BillXCreated=ደረሰኝ %s ተፈጥሯል +StatusOfGeneratedDocuments=ሰነድ የማመንጨት ሁኔታ +DoNotGenerateDoc=የሰነድ ፋይል አታመነጭ +AutogenerateDoc=የሰነድ ፋይልን በራስ ሰር ፍጠር +AutoFillDateFrom=በክፍያ መጠየቂያ ቀን ለአገልግሎት መስመር የሚጀምርበትን ቀን ያዘጋጁ +AutoFillDateFromShort=የመጀመሪያ ቀን ያዘጋጁ +AutoFillDateTo=የአገልግሎት መስመር ማብቂያ ቀንን በሚቀጥለው የክፍያ መጠየቂያ ቀን ያዘጋጁ +AutoFillDateToShort=የማብቂያ ቀን ያዘጋጁ +MaxNumberOfGenerationReached=ከፍተኛው የጄኔራል ቁጥር ደርሷል +BILL_DELETEInDolibarr=ደረሰኝ ተሰርዟል። +BILL_SUPPLIER_DELETEInDolibarr=የአቅራቢ ደረሰኝ ተሰርዟል። +UnitPriceXQtyLessDiscount=የክፍል ዋጋ x Qty - ቅናሽ +CustomersInvoicesArea=የደንበኛ መክፈያ ቦታ +SupplierInvoicesArea=የአቅራቢ ክፍያ ቦታ +SituationTotalRayToRest=ያለ ቀረጥ ለመክፈል የቀረው +PDFSituationTitle=ሁኔታ n° %d +SituationTotalProgress=አጠቃላይ ሂደት %d %% +SearchUnpaidInvoicesWithDueDate=ያልተከፈለ የክፍያ መጠየቂያ ደረሰኞችን ከማለቂያ ቀን ጋር ይፈልጉ = %s +SearchValidatedInvoicesWithDate=ያልተከፈለ ደረሰኞችን ከማረጋገጫ ቀን ጋር ይፈልጉ = %s +NoPaymentAvailable=ለ%s ምንም ክፍያ የለም +PaymentRegisteredAndInvoiceSetToPaid=ክፍያ ተመዝግቧል እና ደረሰኝ %s የሚከፈልበት ተቀናብሯል +SendEmailsRemindersOnInvoiceDueDate=ለተረጋገጡ እና ላልተከፈሉ ደረሰኞች አስታዋሽ በኢሜል ይላኩ። +MakePaymentAndClassifyPayed=ክፍያ ይመዝግቡ +BulkPaymentNotPossibleForInvoice=ለክፍያ መጠየቂያ %s (መጥፎ ዓይነት ወይም ደረጃ) የጅምላ ክፍያ አይቻልም። +MentionVATDebitOptionIsOn=በዴቢት ላይ በመመስረት ግብር የመክፈል አማራጭ +MentionCategoryOfOperations=የክዋኔዎች ምድብ +MentionCategoryOfOperations0=እቃዎች ማድረስ +MentionCategoryOfOperations1=አገልግሎቶች አቅርቦት +MentionCategoryOfOperations2=የተቀላቀለ - የሸቀጦች አቅርቦት እና አገልግሎቶች አቅርቦት +Salaries=ደሞዝ +InvoiceSubtype=የክፍያ መጠየቂያ ንዑስ ዓይነት +SalaryInvoice=ደሞዝ +BillsAndSalaries=ሂሳቦች እና ደሞዝ +CreateCreditNoteWhenClientInvoiceExists=ይህ አማራጭ የሚነቃው የተረጋገጠ የክፍያ መጠየቂያ(ዎች) ለደንበኛ ሲኖር ወይም ቋሚ INVOICE_CREDIT_NOTE_STANDALONE ጥቅም ላይ ሲውል (ለአንዳንድ አገሮች ጠቃሚ) diff --git a/htdocs/langs/am_ET/bookmarks.lang b/htdocs/langs/am_ET/bookmarks.lang index be0f2f7e25d..c4c99c8cd9a 100644 --- a/htdocs/langs/am_ET/bookmarks.lang +++ b/htdocs/langs/am_ET/bookmarks.lang @@ -1,22 +1,24 @@ -# Dolibarr language file - Source file is en_US - marque pages -AddThisPageToBookmarks=Add current page to bookmarks -Bookmark=Bookmark -Bookmarks=Bookmarks -ListOfBookmarks=List of bookmarks -EditBookmarks=List/edit bookmarks -NewBookmark=New bookmark -ShowBookmark=Show bookmark -OpenANewWindow=Open a new tab -ReplaceWindow=Replace current tab -BookmarkTargetNewWindowShort=New tab -BookmarkTargetReplaceWindowShort=Current tab -BookmarkTitle=Bookmark name -UrlOrLink=URL -BehaviourOnClick=Behaviour when a bookmark URL is selected -CreateBookmark=Create bookmark -SetHereATitleForLink=Set a name for the bookmark -UseAnExternalHttpLinkOrRelativeDolibarrLink=Use an external/absolute link (https://externalurl.com) or an internal/relative link (/mypage.php). You can also use phone like tel:0123456. -ChooseIfANewWindowMustBeOpenedOnClickOnBookmark=Choose if the linked page should open in the current tab or a new tab -BookmarksManagement=Bookmarks management -BookmarksMenuShortCut=Ctrl + shift + m -NoBookmarks=No bookmarks defined +# Dolibarr language file - Source file is en_US - marque pages / bookmarks + +AddThisPageToBookmarks = የአሁኑን ገጽ ወደ ዕልባቶች ያክሉ +BehaviourOnClick = የዕልባት URL ሲመረጥ ባህሪ +Bookmark = ዕልባት +Bookmarks = ዕልባቶች +BookmarkTargetNewWindowShort = አዲስ ትር +BookmarkTargetReplaceWindowShort = የአሁኑ ትር +BookmarkTitle = የዕልባት ስም +BookmarksManagement = የዕልባቶች አስተዳደር +BookmarksMenuShortCut = Ctrl + Shift + m +ChooseIfANewWindowMustBeOpenedOnClickOnBookmark = የተገናኘው ገጽ አሁን ባለው ትር ወይም በአዲስ ትር ውስጥ መከፈት እንዳለበት ይምረጡ +CreateBookmark = ዕልባት ይፍጠሩ +EditBookmarks = ዕልባቶችን ይዘርዝሩ/ያርትዑ +ListOfBookmarks = የዕልባቶች ዝርዝር +NewBookmark = አዲስ ዕልባት +NoBookmarkFound = ምንም ዕልባት አልተገኘም። +NoBookmarks = ምንም ዕልባቶች አልተገለጹም። +OpenANewWindow = አዲስ ትር ክፈት +ReplaceWindow = የአሁኑን ትር ይተኩ +SetHereATitleForLink = ለዕልባቶች ስም ያዘጋጁ +ShowBookmark = ዕልባት አሳይ +UrlOrLink = URL +UseAnExternalHttpLinkOrRelativeDolibarrLink = ውጫዊ/ፍፁም ማገናኛን (https://externalurl.com) ወይም የውስጥ/ዘመድ አገናኝ (/mypage.php) ተጠቀም። እንዲሁም እንደ ቴል፡0123456 ያለ ስልክ መጠቀም ይችላሉ። diff --git a/htdocs/langs/am_ET/boxes.lang b/htdocs/langs/am_ET/boxes.lang index 710d49bfab6..6fca04775df 100644 --- a/htdocs/langs/am_ET/boxes.lang +++ b/htdocs/langs/am_ET/boxes.lang @@ -1,120 +1,146 @@ # Dolibarr language file - Source file is en_US - boxes -BoxDolibarrStateBoard=Statistics on main business objects in database -BoxLoginInformation=Login Information -BoxLastRssInfos=RSS Information -BoxLastProducts=Latest %s Products/Services -BoxProductsAlertStock=Stock alerts for products -BoxLastProductsInContract=Latest %s contracted products/services -BoxLastSupplierBills=Latest Vendor invoices -BoxLastCustomerBills=Latest Customer invoices -BoxOldestUnpaidCustomerBills=Oldest unpaid customer invoices -BoxOldestUnpaidSupplierBills=Oldest unpaid vendor invoices -BoxLastProposals=Latest commercial proposals -BoxLastProspects=Latest modified prospects -BoxLastCustomers=Latest modified customers -BoxLastSuppliers=Latest modified suppliers -BoxLastCustomerOrders=Latest sales orders -BoxLastActions=Latest actions -BoxLastContracts=Latest contracts -BoxLastContacts=Latest contacts/addresses -BoxLastMembers=Latest members -BoxLastModifiedMembers=Latest modified members -BoxLastMembersSubscriptions=Latest member subscriptions -BoxFicheInter=Latest interventions -BoxCurrentAccounts=Open accounts balance -BoxTitleMemberNextBirthdays=Birthdays of this month (members) -BoxTitleMembersByType=Members by type -BoxTitleMembersSubscriptionsByYear=Members Subscriptions by year -BoxTitleLastRssInfos=Latest %s news from %s -BoxTitleLastProducts=Products/Services: last %s modified -BoxTitleProductsAlertStock=Products: stock alert -BoxTitleLastSuppliers=Latest %s recorded suppliers -BoxTitleLastModifiedSuppliers=Vendors: last %s modified -BoxTitleLastModifiedCustomers=Customers: last %s modified -BoxTitleLastCustomersOrProspects=Latest %s customers or prospects -BoxTitleLastCustomerBills=Latest %s modified Customer invoices -BoxTitleLastSupplierBills=Latest %s modified Vendor invoices -BoxTitleLastModifiedProspects=Prospects: last %s modified -BoxTitleLastModifiedMembers=Latest %s members -BoxTitleLastFicheInter=Latest %s modified interventions -BoxTitleOldestUnpaidCustomerBills=Customer Invoices: oldest %s unpaid -BoxTitleOldestUnpaidSupplierBills=Vendor Invoices: oldest %s unpaid -BoxTitleCurrentAccounts=Open Accounts: balances -BoxTitleSupplierOrdersAwaitingReception=Supplier orders awaiting reception -BoxTitleLastModifiedContacts=Contacts/Addresses: last %s modified -BoxMyLastBookmarks=Bookmarks: latest %s -BoxOldestExpiredServices=Oldest active expired services -BoxLastExpiredServices=Latest %s oldest contacts with active expired services -BoxTitleLastActionsToDo=Latest %s actions to do -BoxTitleLastContracts=Latest %s contracts which were modified -BoxTitleLastModifiedDonations=Latest %s donations which were modified -BoxTitleLastModifiedExpenses=Latest %s expense reports which were modified -BoxTitleLatestModifiedBoms=Latest %s BOMs which were modified -BoxTitleLatestModifiedMos=Latest %s Manufacturing Orders which were modified -BoxTitleLastOutstandingBillReached=Customers with maximum outstanding exceeded -BoxGlobalActivity=Global activity (invoices, proposals, orders) -BoxGoodCustomers=Good customers -BoxTitleGoodCustomers=%s Good customers -BoxScheduledJobs=Scheduled jobs -BoxTitleFunnelOfProspection=Lead funnel -FailedToRefreshDataInfoNotUpToDate=Failed to refresh RSS flux. Latest successful refresh date: %s -LastRefreshDate=Latest refresh date -NoRecordedBookmarks=No bookmarks defined. -ClickToAdd=Click here to add. -NoRecordedCustomers=No recorded customers -NoRecordedContacts=No recorded contacts -NoActionsToDo=No actions to do -NoRecordedOrders=No recorded sales orders -NoRecordedProposals=No recorded proposals -NoRecordedInvoices=No recorded customer invoices -NoUnpaidCustomerBills=No unpaid customer invoices -NoUnpaidSupplierBills=No unpaid vendor invoices -NoModifiedSupplierBills=No recorded vendor invoices -NoRecordedProducts=No recorded products/services -NoRecordedProspects=No recorded prospects -NoContractedProducts=No products/services contracted -NoRecordedContracts=No recorded contracts -NoRecordedInterventions=No recorded interventions -BoxLatestSupplierOrders=Latest purchase orders -BoxLatestSupplierOrdersAwaitingReception=Latest Purchase Orders (with a pending reception) -NoSupplierOrder=No recorded purchase order -BoxCustomersInvoicesPerMonth=Customer Invoices per month -BoxSuppliersInvoicesPerMonth=Vendor Invoices per month -BoxCustomersOrdersPerMonth=Sales Orders per month -BoxSuppliersOrdersPerMonth=Vendor Orders per month -BoxProposalsPerMonth=Proposals per month -NoTooLowStockProducts=No products are under the low stock limit -BoxProductDistribution=Products/Services Distribution -ForObject=On %s -BoxTitleLastModifiedSupplierBills=Vendor Invoices: last %s modified -BoxTitleLatestModifiedSupplierOrders=Vendor Orders: last %s modified -BoxTitleLastModifiedCustomerBills=Customer Invoices: last %s modified -BoxTitleLastModifiedCustomerOrders=Sales Orders: last %s modified -BoxTitleLastModifiedPropals=Latest %s modified proposals -BoxTitleLatestModifiedJobPositions=Latest %s modified job positions -BoxTitleLatestModifiedCandidatures=Latest %s modified job applications -ForCustomersInvoices=Customers invoices -ForCustomersOrders=Customers orders -ForProposals=Proposals -LastXMonthRolling=The latest %s month rolling -ChooseBoxToAdd=Add widget to your dashboard -BoxAdded=Widget was added in your dashboard -BoxTitleUserBirthdaysOfMonth=Birthdays of this month (users) -BoxLastManualEntries=Latest record in accountancy entered manually or without source document -BoxTitleLastManualEntries=%s latest record entered manually or without source document -NoRecordedManualEntries=No manual entries record in accountancy -BoxSuspenseAccount=Count accountancy operation with suspense account -BoxTitleSuspenseAccount=Number of unallocated lines -NumberOfLinesInSuspenseAccount=Number of line in suspense account -SuspenseAccountNotDefined=Suspense account isn't defined -BoxLastCustomerShipments=Last customer shipments -BoxTitleLastCustomerShipments=Latest %s customer shipments -NoRecordedShipments=No recorded customer shipment -BoxCustomersOutstandingBillReached=Customers with oustanding limit reached +BoxDolibarrStateBoard=በመረጃ ቋት ውስጥ በዋና ዋና የንግድ ዕቃዎች ላይ ስታትስቲክስ +BoxLoginInformation=የመግቢያ መረጃ +BoxLastRssInfos=የአርኤስኤስ መረጃ +BoxLastProducts=የቅርብ ጊዜ %s ምርቶች/አገልግሎቶች +BoxProductsAlertStock=ለምርቶች የአክሲዮን ማንቂያዎች +BoxLastProductsInContract=የቅርብ ጊዜ %s የተዋዋሉ ምርቶች/አገልግሎቶች +BoxLastSupplierBills=የቅርብ ጊዜ ሻጭ ደረሰኞች +BoxLastCustomerBills=የቅርብ ጊዜ የደንበኛ ደረሰኞች +BoxOldestUnpaidCustomerBills=በጣም የቆዩ ያልተከፈሉ የደንበኛ ደረሰኞች +BoxOldestUnpaidSupplierBills=በጣም የቆዩ ያልተከፈሉ የሻጭ ደረሰኞች +BoxLastProposals=የቅርብ ጊዜ የንግድ ፕሮፖዛል +BoxLastProspects=የቅርብ ጊዜ የተሻሻሉ ተስፋዎች +BoxLastCustomers=የቅርብ ጊዜ የተሻሻሉ ደንበኞች +BoxLastSuppliers=የቅርብ ጊዜ የተሻሻሉ አቅራቢዎች +BoxLastCustomerOrders=የቅርብ ጊዜ የሽያጭ ትዕዛዞች +BoxLastActions=የቅርብ ጊዜ ድርጊቶች +BoxLastContracts=የቅርብ ጊዜ ኮንትራቶች +BoxLastContacts=የቅርብ ጊዜ እውቂያዎች/አድራሻዎች +BoxLastMembers=የቅርብ አባላት +BoxLastModifiedMembers=የቅርብ ጊዜ የተሻሻሉ አባላት +BoxLastMembersSubscriptions=የቅርብ ጊዜ የአባልነት ምዝገባዎች +BoxFicheInter=የቅርብ ጊዜ ጣልቃገብነቶች +BoxCurrentAccounts=የሂሳብ ቀሪ ሂሳብን ይክፈቱ +BoxTitleMemberNextBirthdays=የዚህ ወር ልደት (አባላት) +BoxTitleMembersByType=አባላት በአይነት እና በሁኔታ +BoxTitleMembersByTags=አባላት በመለያዎች እና በሁኔታ +BoxTitleMembersSubscriptionsByYear=የአባላት ምዝገባ በዓመት +BoxTitleLastRssInfos=የቅርብ ጊዜ የ%s ዜና ከ%s +BoxTitleLastProducts=ምርቶች/አገልግሎቶች፡ የመጨረሻው %s የተሻሻለው +BoxTitleProductsAlertStock=ምርቶች: የአክሲዮን ማንቂያ +BoxTitleLastSuppliers=የቅርብ ጊዜ %s የተመዘገቡ አቅራቢዎች +BoxTitleLastModifiedSuppliers=ሻጮች፡ የመጨረሻው %s የተሻሻለው +BoxTitleLastModifiedCustomers=ደንበኞች፡ የመጨረሻው %s የተሻሻለው +BoxTitleLastCustomersOrProspects=የቅርብ ጊዜ %s ደንበኞች ወይም ተስፋዎች +BoxTitleLastCustomerBills=የቅርብ ጊዜ %s የተሻሻሉ የደንበኛ ደረሰኞች +BoxTitleLastSupplierBills=የቅርብ ጊዜ %s የተሻሻሉ የአቅራቢ ደረሰኞች +BoxTitleLastModifiedProspects=ተስፋዎች፡ የመጨረሻው %s የተሻሻለው +BoxTitleLastModifiedMembers=የቅርብ ጊዜ %s አባላት +BoxTitleLastFicheInter=የቅርብ ጊዜ %s የተሻሻሉ ጣልቃገብነቶች +BoxTitleOldestUnpaidCustomerBills=የደንበኛ ደረሰኞች፡ የቆዩ %s ያልተከፈለ +BoxTitleOldestUnpaidSupplierBills=የአቅራቢ ደረሰኞች፡ የቆዩ %s ያልተከፈለ +BoxTitleCurrentAccounts=ክፈት መለያዎች፡ ቀሪዎች +BoxTitleSupplierOrdersAwaitingReception=መቀበያ በመጠባበቅ ላይ ያሉ የአቅራቢዎች ትዕዛዞች +BoxTitleLastModifiedContacts=እውቂያዎች/አድራሻዎች፡ የመጨረሻው %s የተሻሻለው +BoxMyLastBookmarks=ዕልባቶች፡ የቅርብ %s +BoxOldestExpiredServices=በጣም የቆዩ ንቁ ጊዜ ያለፈባቸው አገልግሎቶች +BoxOldestActions=የሚደረጉ በጣም የቆዩ ክስተቶች +BoxLastExpiredServices=የቅርብ ጊዜ የ%s የቆዩ እውቂያዎች ከንቁ ጊዜ ያለፈባቸው አገልግሎቶች +BoxTitleLastActionsToDo=የቅርብ ጊዜ %s የሚደረጉ እርምጃዎች +BoxTitleOldestActionsToDo=በጣም የቆዩ %s የተደረጉ ክስተቶች፣ አልተጠናቀቁም +BoxTitleFutureActions=ቀጣዩ %s መጪ ክስተቶች +BoxTitleLastContracts=የተሻሻለው የ%s ኮንትራቶች +BoxTitleLastModifiedDonations=የቅርብ ጊዜ የ%s ልገሳዎች የተሻሻሉ +BoxTitleLastModifiedExpenses=የቅርብ ጊዜ የ%s የወጪ ሪፖርቶች የተሻሻሉ +BoxTitleLatestModifiedBoms=የቅርብ ጊዜ %s የተሻሻሉ BOMዎች +BoxTitleLatestModifiedMos=የቅርብ ጊዜ %s የተሻሻሉ የምርት ትዕዛዞች +BoxTitleLastOutstandingBillReached=ከፍተኛ ውጤት ያላቸው ደንበኞች አልፈዋል +BoxGlobalActivity=ዓለም አቀፍ እንቅስቃሴ (ክፍያ መጠየቂያዎች፣ ፕሮፖዛል፣ ትዕዛዞች) +BoxGoodCustomers=ጥሩ ደንበኞች +BoxTitleGoodCustomers=%s ጥሩ ደንበኞች +BoxScheduledJobs=የታቀዱ ስራዎች +BoxTitleFunnelOfProspection=የእርሳስ ፈንጣጣ +FailedToRefreshDataInfoNotUpToDate=የአርኤስኤስ ፍሰትን ማደስ አልተሳካም። የቅርብ ጊዜ የተሳካ የማደሻ ቀን፡ %s +LastRefreshDate=የቅርብ ጊዜ እድሳት ቀን +NoRecordedBookmarks=ምንም ዕልባቶች አልተገለጹም። +ClickToAdd=ለመጨመር እዚህ ጠቅ ያድርጉ። +NoRecordedCustomers=ምንም የተመዘገቡ ደንበኞች የሉም +NoRecordedContacts=ምንም የተመዘገቡ እውቂያዎች የሉም +NoActionsToDo=ምንም የሚደረጉ ድርጊቶች የሉም +NoRecordedOrders=ምንም የተመዘገቡ የሽያጭ ትዕዛዞች የሉም +NoRecordedProposals=ምንም የተመዘገቡ ሀሳቦች የሉም +NoRecordedInvoices=ምንም የተመዘገቡ የደንበኛ ደረሰኞች የሉም +NoUnpaidCustomerBills=ምንም ያልተከፈለ የደንበኛ ደረሰኞች የሉም +NoUnpaidSupplierBills=ምንም ያልተከፈለ የሻጭ ደረሰኞች የሉም +NoModifiedSupplierBills=ምንም የተመዘገቡ የሻጭ ደረሰኞች የሉም +NoRecordedProducts=ምንም የተመዘገቡ ምርቶች/አገልግሎት የለም። +NoRecordedProspects=ምንም የተመዘገቡ ተስፋዎች የሉም +NoContractedProducts=ምንም ምርቶች/አገልግሎቶች አልተስማሙም። +NoRecordedContracts=ምንም የተመዘገቡ ኮንትራቶች የሉም +NoRecordedInterventions=ምንም የተመዘገቡ ጣልቃገብነቶች የሉም +BoxLatestSupplierOrders=የቅርብ ጊዜ የግዢ ትዕዛዞች +BoxLatestSupplierOrdersAwaitingReception=የቅርብ ጊዜ የግዢ ትዕዛዞች (በመጠባበቅ ላይ ያለ አቀባበል) +NoSupplierOrder=ምንም የተመዘገበ የግዢ ትዕዛዝ የለም። +BoxCustomersInvoicesPerMonth=የደንበኛ ደረሰኞች በወር +BoxSuppliersInvoicesPerMonth=የአቅራቢ ደረሰኞች በወር +BoxCustomersOrdersPerMonth=የሽያጭ ትዕዛዞች በወር +BoxSuppliersOrdersPerMonth=የአቅራቢ ትዕዛዞች በወር +BoxProposalsPerMonth=ፕሮፖዛል በወር +NoTooLowStockProducts=በዝቅተኛ የአክሲዮን ገደብ ውስጥ ምንም ምርቶች የሉም +BoxProductDistribution=ምርቶች / አገልግሎቶች ስርጭት +ForObject=በ%s ላይ +BoxTitleLastModifiedSupplierBills=የሻጭ ደረሰኞች፡ የመጨረሻው %s የተሻሻለው +BoxTitleLatestModifiedSupplierOrders=የሻጭ ትዕዛዞች፡ የመጨረሻው %s የተሻሻለው +BoxTitleLastModifiedCustomerBills=የደንበኛ ደረሰኞች፡ የመጨረሻው %s የተሻሻለው +BoxTitleLastModifiedCustomerOrders=የሽያጭ ትዕዛዞች፡ የመጨረሻው %s የተሻሻለው +BoxTitleLastModifiedPropals=የቅርብ ጊዜ %s የተሻሻሉ ሀሳቦች +BoxTitleLatestModifiedJobPositions=የቅርብ ጊዜ %s የተሻሻሉ የስራ ቦታዎች +BoxTitleLatestModifiedCandidatures=የቅርብ ጊዜ %s የተሻሻሉ የስራ መተግበሪያዎች +ForCustomersInvoices=የደንበኞች ደረሰኞች +ForCustomersOrders=ደንበኞች ያዛሉ +ForProposals=ፕሮፖዛል +LastXMonthRolling=የቅርብ ጊዜ የ%s ወር በመንከባለል ላይ +ChooseBoxToAdd=መግብርን ወደ ዳሽቦርድዎ ያክሉ +BoxAdded=መግብር በእርስዎ ዳሽቦርድ ውስጥ ታክሏል። +BoxTitleUserBirthdaysOfMonth=የዚህ ወር ልደት (ተጠቃሚዎች) +BoxLastManualEntries=በሂሳብ አያያዝ ውስጥ የቅርብ ጊዜ መዝገብ በእጅ ወይም ያለ ምንጭ ሰነድ ገብቷል። +BoxTitleLastManualEntries=%s የቅርብ ጊዜ መዝገብ በእጅ ወይም ያለ ምንጭ ሰነድ ገብቷል +NoRecordedManualEntries=በሂሳብ መዝገብ ውስጥ ምንም በእጅ የተመዘገቡ ግቤቶች የሉም +BoxSuspenseAccount=በተጠረጠረ መለያ የሂሳብ አሰራርን ይቁጠሩ +BoxTitleSuspenseAccount=ያልተመደቡ መስመሮች ብዛት +NumberOfLinesInSuspenseAccount=በተጠረጠረ መለያ ውስጥ ያለው የመስመር ብዛት +SuspenseAccountNotDefined=የተንጠለጠለበት መለያ አልተገለጸም። +BoxLastCustomerShipments=የመጨረሻ የደንበኛ መላኪያዎች +BoxTitleLastCustomerShipments=የቅርብ ጊዜ %s የደንበኛ ጭነት +BoxTitleLastLeaveRequests=የቅርብ ጊዜ %s የተሻሻሉ የእረፍት ጥያቄዎች +NoRecordedShipments=የተመዘገበ የደንበኛ ጭነት የለም። +BoxCustomersOutstandingBillReached=ከፍተኛ ገደብ ያላቸው ደንበኞች ደርሰዋል # Pages -UsersHome=Home users and groups -MembersHome=Home Membership -ThirdpartiesHome=Home Thirdparties -TicketsHome=Home Tickets -AccountancyHome=Home Accountancy -ValidatedProjects=Validated projects +UsersHome=የቤት ተጠቃሚዎች እና ቡድኖች +MembersHome=የቤት አባልነት +ThirdpartiesHome=ቤት የሶስተኛ ወገኖች +productindex=የቤት ምርቶች እና አገልግሎቶች +mrpindex=መነሻ MRP +commercialindex=የቤት ማስታወቂያ +projectsindex=የቤት ፕሮጀክቶች +invoiceindex=የቤት ደረሰኞች +hrmindex=የቤት ደረሰኞች +TicketsHome=የቤት ትኬቶች +stockindex=የቤት አክሲዮኖች +sendingindex=የቤት ማጓጓዣዎች +receptionindex=የቤት መቀበል +activityindex=የቤት እንቅስቃሴ +proposalindex=የቤት ፕሮፖዛል +ordersindex=የቤት ሽያጭ ትዕዛዞች +orderssuppliersindex=የቤት ግዢ ትዕዛዞች +contractindex=የቤት ኮንትራቶች +interventionindex=የቤት ውስጥ ጣልቃገብነቶች +suppliersproposalsindex=የቤት አቅራቢዎች ሀሳቦች +donationindex=የቤት ልገሳዎች +specialexpensesindex=የቤት ልዩ ወጪዎች +expensereportindex=የቤት ወጪ ሪፖርት +mailingindex=የቤት መላክ +opensurveyindex=የቤት ክፍት ዳሰሳ +AccountancyHome=የቤት ሒሳብ +ValidatedProjects=የተረጋገጡ ፕሮጀክቶች diff --git a/htdocs/langs/am_ET/cashdesk.lang b/htdocs/langs/am_ET/cashdesk.lang index 34abe080280..77f9e86ea9b 100644 --- a/htdocs/langs/am_ET/cashdesk.lang +++ b/htdocs/langs/am_ET/cashdesk.lang @@ -58,7 +58,7 @@ Numberspad=የቁጥሮች ፓድ BillsCoinsPad=ሳንቲሞች እና የባንክ ኖቶች ፓድ DolistorePosCategory=የ TakePOS ሞጁሎች እና ሌሎች የ POS መፍትሄዎች ለ Dolibarr TakeposNeedsCategories=TakePOS ለመስራት ቢያንስ አንድ የምርት ምድብ ያስፈልገዋል -TakeposNeedsAtLeastOnSubCategoryIntoParentCategory=TakePOS በ%s ምድብ ስር ቢያንስ 1 የምርት ምድብ ያስፈልገዋል። ሥራ +TakeposNeedsAtLeastOnSubCategoryIntoParentCategory=TakePOS needs at least 1 product category under the category %s to work OrderNotes=በእያንዳንዱ የታዘዙ ዕቃዎች ላይ አንዳንድ ማስታወሻዎችን ማከል ይችላል። CashDeskBankAccountFor=ለክፍያዎች የሚውል ነባሪ መለያ NoPaimementModesDefined=በ TakePOS ውቅረት ውስጥ ምንም ዓይነት የመዳኛ ሁነታ አልተገለጸም። @@ -136,7 +136,7 @@ PrintWithoutDetailsLabelDefault=ያለ ዝርዝሮች በማተም ላይ የ PrintWithoutDetails=ያለ ዝርዝሮች አትም YearNotDefined=ዓመት አልተገለጸም። TakeposBarcodeRuleToInsertProduct=ምርት ለማስገባት የአሞሌ ኮድ -TakeposBarcodeRuleToInsertProductDesc=የምርት ማመሳከሪያውን + ብዛት ከተቃኘ ባርኮድ ለማውጣት ደንብ።
ባዶ ከሆነ (ነባሪ እሴት) ትግበራ ምርቱን ለማግኘት የተቃኘውን ሙሉ ባርኮድ ይጠቀማል።

ከተገለጸ አገባብ የሚከተለው መሆን አለበት፡
ref:NB+qu:NB+qd:NB+other:NB

የት ነው NB ከተቃኘው ባር ኮድ ለማውጣት የሚጠቀሙባቸው የቁምፊዎች ብዛት፡-
refb09a4f739f ፡ የምርት ማጣቀሻ
qus ንጥል (ዩኒቶች) በሚያስገቡበት ጊዜ ያቀናብሩ
qdb09a4b739f17f80: qud ንጥል ሲያስገቡ ይዘጋጃሉ (አስርዮሽ)
ሌላb09a4b739f17f>ሌሎችም:09a4b739f17f8z +TakeposBarcodeRuleToInsertProductDesc=Rule to extract the product reference + a quantity from a scanned barcode.
If empty (default value), application will use the full barcode scanned to find the product.

If defined, syntax must be:
ref:NB+qu:NB+qd:NB+other:NB
where NB is the number of characters to use to extract data from the scanned barcode with:
ref : product reference
qu : quantity to set when inserting item (units)
qd : quantity to set when inserting item (decimals)
other : others characters AlreadyPrinted=አስቀድሞ ታትሟል HideCategories=የምድብ ምርጫውን ሙሉውን ክፍል ደብቅ HideStockOnLine=በመስመር ላይ ክምችትን ደብቅ diff --git a/htdocs/langs/am_ET/categories.lang b/htdocs/langs/am_ET/categories.lang index cf0de898bdb..21839418ee8 100644 --- a/htdocs/langs/am_ET/categories.lang +++ b/htdocs/langs/am_ET/categories.lang @@ -1,100 +1,105 @@ # Dolibarr language file - Source file is en_US - categories -Rubrique=Tag/Category -Rubriques=Tags/Categories -RubriquesTransactions=Tags/Categories of transactions -categories=tags/categories -NoCategoryYet=No tag/category of this type has been created -In=In -AddIn=Add in -modify=modify -Classify=Classify -CategoriesArea=Tags/Categories area -ProductsCategoriesArea=Product/Service tags/categories area -SuppliersCategoriesArea=Vendor tags/categories area -CustomersCategoriesArea=Customer tags/categories area -MembersCategoriesArea=Member tags/categories area -ContactsCategoriesArea=Contact tags/categories area -AccountsCategoriesArea=Bank account tags/categories area -ProjectsCategoriesArea=Project tags/categories area -UsersCategoriesArea=User tags/categories area -SubCats=Sub-categories -CatList=List of tags/categories -CatListAll=List of tags/categories (all types) -NewCategory=New tag/category -ModifCat=Modify tag/category -CatCreated=Tag/category created -CreateCat=Create tag/category -CreateThisCat=Create this tag/category -NoSubCat=No subcategory. -SubCatOf=Subcategory -FoundCats=Found tags/categories -ImpossibleAddCat=Impossible to add the tag/category %s -WasAddedSuccessfully=%s was added successfully. -ObjectAlreadyLinkedToCategory=Element is already linked to this tag/category. -ProductIsInCategories=Product/service is linked to following tags/categories -CompanyIsInCustomersCategories=This third party is linked to following customers/prospects tags/categories -CompanyIsInSuppliersCategories=This third party is linked to following vendors tags/categories -MemberIsInCategories=This member is linked to following members tags/categories -ContactIsInCategories=This contact is linked to following contacts tags/categories -ProductHasNoCategory=This product/service is not in any tags/categories -CompanyHasNoCategory=This third party is not in any tags/categories -MemberHasNoCategory=This member is not in any tags/categories -ContactHasNoCategory=This contact is not in any tags/categories -ProjectHasNoCategory=This project is not in any tags/categories -ClassifyInCategory=Add to tag/category -NotCategorized=Without tag/category -CategoryExistsAtSameLevel=This category already exists with this ref -ContentsVisibleByAllShort=Contents visible by all -ContentsNotVisibleByAllShort=Contents not visible by all -DeleteCategory=Delete tag/category -ConfirmDeleteCategory=Are you sure you want to delete this tag/category? -NoCategoriesDefined=No tag/category defined -SuppliersCategoryShort=Vendors tag/category -CustomersCategoryShort=Customers tag/category -ProductsCategoryShort=Products tag/category -MembersCategoryShort=Members tag/category -SuppliersCategoriesShort=Vendors tags/categories -CustomersCategoriesShort=Customers tags/categories -ProspectsCategoriesShort=Prospects tags/categories -CustomersProspectsCategoriesShort=Cust./Prosp. tags/categories -ProductsCategoriesShort=Products tags/categories -MembersCategoriesShort=Members tags/categories -ContactCategoriesShort=Contacts tags/categories -AccountsCategoriesShort=Accounts tags/categories -ProjectsCategoriesShort=Projects tags/categories -UsersCategoriesShort=Users tags/categories -StockCategoriesShort=Warehouse tags/categories -ThisCategoryHasNoItems=This category does not contain any items. -CategId=Tag/category id -ParentCategory=Parent tag/category -ParentCategoryLabel=Label of parent tag/category -CatSupList=List of vendors tags/categories -CatCusList=List of customers/prospects tags/categories -CatProdList=List of products tags/categories -CatMemberList=List of members tags/categories -CatContactList=List of contacts tags/categories -CatProjectsList=List of projects tags/categories -CatUsersList=List of users tags/categories -CatSupLinks=Links between vendors and tags/categories -CatCusLinks=Links between customers/prospects and tags/categories -CatContactsLinks=Links between contacts/addresses and tags/categories -CatProdLinks=Links between products/services and tags/categories -CatMembersLinks=Links between members and tags/categories -CatProjectsLinks=Links between projects and tags/categories -CatUsersLinks=Links between users and tags/categories -DeleteFromCat=Remove from tags/category -ExtraFieldsCategories=Complementary attributes -CategoriesSetup=Tags/categories setup -CategorieRecursiv=Link with parent tag/category automatically -CategorieRecursivHelp=If option is on, when you add a product into a subcategory, product will also be added into the parent category. -AddProductServiceIntoCategory=Add the following product/service -AddCustomerIntoCategory=Assign category to customer -AddSupplierIntoCategory=Assign category to supplier -ShowCategory=Show tag/category -ByDefaultInList=By default in list -ChooseCategory=Choose category -StocksCategoriesArea=Warehouse Categories -ActionCommCategoriesArea=Event Categories -WebsitePagesCategoriesArea=Page-Container Categories -KnowledgemanagementsCategoriesArea=KM article Categories -UseOrOperatorForCategories=Use 'OR' operator for categories +Rubrique=መለያ / ምድብ +Rubriques=መለያዎች / ምድቦች +RubriquesTransactions=መለያዎች / የግብይቶች ምድቦች +categories=መለያዎች / ምድቦች +NoCategoryYet=የዚህ አይነት መለያ/መደብ አልተፈጠረም። +In=ውስጥ +AddIn=ጨምር +modify=ቀይር +Classify=መድብ +CategoriesArea=መለያዎች / ምድቦች አካባቢ +ProductsCategoriesArea=የምርት / የአገልግሎት መለያዎች / ምድቦች አካባቢ +SuppliersCategoriesArea=የአቅራቢ መለያዎች/የምድቦች አካባቢ +CustomersCategoriesArea=የደንበኛ መለያዎች / ምድቦች አካባቢ +MembersCategoriesArea=የአባል መለያዎች / ምድቦች አካባቢ +ContactsCategoriesArea=የእውቂያ መለያዎች / ምድቦች አካባቢ +AccountsCategoriesArea=የባንክ መለያ መለያዎች / ምድቦች አካባቢ +ProjectsCategoriesArea=የፕሮጀክት መለያዎች / ምድቦች አካባቢ +UsersCategoriesArea=የተጠቃሚ መለያዎች / ምድቦች አካባቢ +SubCats=ንዑስ ምድቦች +CatList=የመለያዎች / ምድቦች ዝርዝር +CatListAll=የመለያዎች/የምድቦች ዝርዝር (ሁሉም ዓይነቶች) +NewCategory=አዲስ መለያ/መደብ +ModifCat=መለያ/ምድብ ቀይር +CatCreated=መለያ/ምድብ ተፈጥሯል። +CreateCat=መለያ/መደብ ፍጠር +CreateThisCat=ይህን መለያ/መደብ ፍጠር +NoSubCat=ንዑስ ምድብ የለም። +SubCatOf=ንዑስ ምድብ +FoundCats=መለያዎች/ ምድቦች ተገኝተዋል +ImpossibleAddCat=መለያ/መደብ %s ማከል አይቻልም +WasAddedSuccessfully=%s በተሳካ ሁኔታ ታክሏል። +ObjectAlreadyLinkedToCategory=ኤለመንት አስቀድሞ ከዚህ መለያ/መደብ ጋር ተገናኝቷል። +ProductIsInCategories=ምርት/አገልግሎት ከሚከተሉት መለያዎች/ምድቦች ጋር ተገናኝቷል። +CompanyIsInCustomersCategories=ይህ ሶስተኛ ወገን ከደንበኞች/የተስፋዎች መለያዎች/ምድቦች ጋር የተገናኘ ነው። +CompanyIsInSuppliersCategories=ይህ ሶስተኛ ወገን ከሚከተለው የአቅራቢዎች መለያዎች/ ምድቦች ጋር የተገናኘ ነው። +MemberIsInCategories=ይህ አባል ከሚከተለው የአባላት መለያዎች/ ምድቦች ጋር የተገናኘ ነው። +ContactIsInCategories=ይህ እውቂያ ከሚከተሉት የእውቂያ መለያዎች/ ምድቦች ጋር የተገናኘ ነው። +ProductHasNoCategory=ይህ ምርት/አገልግሎት በማንኛውም መለያዎች/ ምድቦች ውስጥ የለም። +CompanyHasNoCategory=ይህ ሶስተኛ ወገን በማንኛውም መለያዎች/ምድቦች ውስጥ የለም። +MemberHasNoCategory=ይህ አባል በማንኛውም መለያዎች/ ምድቦች ውስጥ የለም። +ContactHasNoCategory=ይህ እውቂያ በማንኛውም መለያዎች/ምድቦች ውስጥ የለም። +ProjectHasNoCategory=ይህ ፕሮጀክት በማንኛውም መለያዎች/ ምድቦች ውስጥ የለም። +ClassifyInCategory=ወደ መለያ / ምድብ ያክሉ +RemoveCategory=ምድብ አስወግድ +NotCategorized=ያለ መለያ / ምድብ +CategoryExistsAtSameLevel=ይህ ምድብ አስቀድሞ ከዚህ ማጣቀሻ ጋር አለ። +ContentsVisibleByAllShort=ለሁሉም የሚታይ ይዘት +ContentsNotVisibleByAllShort=ይዘቶች ለሁሉም አይታዩም። +DeleteCategory=መለያ/መደብን ሰርዝ +ConfirmDeleteCategory=እርግጠኛ ነዎት ይህን መለያ/መደብ መሰረዝ ይፈልጋሉ? +NoCategoriesDefined=ምንም መለያ/ምድብ አልተገለጸም። +SuppliersCategoryShort=የአቅራቢዎች መለያ / ምድብ +CustomersCategoryShort=የደንበኞች መለያ / ምድብ +ProductsCategoryShort=ምርቶች መለያ / ምድብ +MembersCategoryShort=የአባላት መለያ/ምድብ +SuppliersCategoriesShort=የአቅራቢዎች መለያዎች / ምድቦች +CustomersCategoriesShort=የደንበኞች መለያዎች / ምድቦች +ProspectsCategoriesShort=ተስፋዎች መለያዎች / ምድቦች +CustomersProspectsCategoriesShort=Cust./Prosp. መለያዎች / ምድቦች +ProductsCategoriesShort=ምርቶች መለያዎች / ምድቦች +MembersCategoriesShort=የአባላት መለያዎች / ምድቦች +ContactCategoriesShort=የእውቂያ መለያዎች / ምድቦች +AccountsCategoriesShort=መለያዎች መለያዎች / ምድቦች +ProjectsCategoriesShort=የፕሮጀክቶች መለያዎች / ምድቦች +UsersCategoriesShort=የተጠቃሚ መለያዎች / ምድቦች +StockCategoriesShort=የመጋዘን መለያዎች / ምድቦች +ThisCategoryHasNoItems=ይህ ምድብ ምንም ንጥሎችን አልያዘም። +CategId=መለያ/የምድብ መታወቂያ +ParentCategory=የወላጅ መለያ / ምድብ +ParentCategoryID=የወላጅ መለያ/ምድብ መታወቂያ +ParentCategoryLabel=የወላጅ መለያ / ምድብ መለያ +CatSupList=የአቅራቢዎች መለያዎች/ ምድቦች ዝርዝር +CatCusList=የደንበኞች/የተስፋዎች መለያዎች/ ምድቦች ዝርዝር +CatProdList=የምርት መለያዎች / ምድቦች ዝርዝር +CatMemberList=የአባላት መለያዎች/ ምድቦች ዝርዝር +CatContactList=የእውቂያዎች መለያዎች / ምድቦች ዝርዝር +CatProjectsList=የፕሮጀክቶች መለያዎች / ምድቦች ዝርዝር +CatUsersList=የተጠቃሚ መለያዎች/ ምድቦች ዝርዝር +CatSupLinks=በአቅራቢዎች እና መለያዎች/ምድቦች መካከል ያሉ አገናኞች +CatCusLinks=በደንበኞች / ተስፋዎች እና መለያዎች / ምድቦች መካከል ያሉ ግንኙነቶች +CatContactsLinks=በእውቂያዎች/አድራሻዎች እና መለያዎች/ምድቦች መካከል ያሉ አገናኞች +CatProdLinks=በምርቶች/አገልግሎቶች እና መለያዎች/ምድቦች መካከል ያሉ አገናኞች +CatMembersLinks=በአባላት እና መለያዎች / ምድቦች መካከል ያሉ አገናኞች +CatProjectsLinks=በፕሮጀክቶች እና በመለያዎች / ምድቦች መካከል ያሉ አገናኞች +CatUsersLinks=በተጠቃሚዎች እና መለያዎች / ምድቦች መካከል ያሉ አገናኞች +DeleteFromCat=ከመለያዎች/ምድብ ያስወግዱ +ExtraFieldsCategories=ተጨማሪ ባህሪያት +CategoriesSetup=መለያዎች / ምድቦች ማዋቀር +CategorieRecursiv=ከወላጅ መለያ/ምድብ ጋር በራስ ሰር ማገናኘት። +CategorieRecursivHelp=ምርጫው በርቶ ከሆነ አንድን ነገር ወደ ንዑስ ምድብ ሲጨምሩ ነገሩ ወደ የወላጅ ምድቦችም ይታከላል። +AddProductServiceIntoCategory=ለምርቱ/አገልግሎት ምድብ መድብ +AddCustomerIntoCategory=ምድብ ለደንበኛ መድብ +AddSupplierIntoCategory=ምድብ ለአቅራቢው መድብ +AssignCategoryTo=ምድብ ለ +ShowCategory=መለያ/መደብ አሳይ +ByDefaultInList=በነባሪ ዝርዝር ውስጥ +ChooseCategory=ምድብ ይምረጡ +StocksCategoriesArea=የመጋዘን ምድቦች +TicketsCategoriesArea=የቲኬቶች ምድቦች +ActionCommCategoriesArea=የክስተት ምድቦች +WebsitePagesCategoriesArea=ገጽ-የመያዣ ምድቦች +KnowledgemanagementsCategoriesArea=KM መጣጥፍ ምድቦች +UseOrOperatorForCategories=ለምድብ የ'OR' ኦፕሬተርን ተጠቀም +AddObjectIntoCategory=ወደ ምድብ መድብ diff --git a/htdocs/langs/am_ET/commercial.lang b/htdocs/langs/am_ET/commercial.lang index 10c536e0d48..69ce04202bf 100644 --- a/htdocs/langs/am_ET/commercial.lang +++ b/htdocs/langs/am_ET/commercial.lang @@ -1,80 +1,93 @@ # Dolibarr language file - Source file is en_US - commercial -Commercial=Commerce -CommercialArea=Commerce area -Customer=Customer -Customers=Customers -Prospect=Prospect -Prospects=Prospects -DeleteAction=Delete an event -NewAction=New event -AddAction=Create event -AddAnAction=Create an event -AddActionRendezVous=Create a Rendez-vous event -ConfirmDeleteAction=Are you sure you want to delete this event? -CardAction=Event card -ActionOnCompany=Related company -ActionOnContact=Related contact -TaskRDVWith=Meeting with %s -ShowTask=Show task -ShowAction=Show event -ActionsReport=Events report -ThirdPartiesOfSaleRepresentative=Third parties with sales representative -SaleRepresentativesOfThirdParty=Sales representatives of third party -SalesRepresentative=Sales representative -SalesRepresentatives=Sales representatives -SalesRepresentativeFollowUp=Sales representative (follow-up) -SalesRepresentativeSignature=Sales representative (signature) -NoSalesRepresentativeAffected=No particular sales representative assigned -ShowCustomer=Show customer -ShowProspect=Show prospect -ListOfProspects=List of prospects -ListOfCustomers=List of customers -LastDoneTasks=Latest %s completed actions -LastActionsToDo=Oldest %s not completed actions -DoneAndToDoActions=Completed and To do events -DoneActions=Completed events -ToDoActions=Incomplete events -SendPropalRef=Submission of commercial proposal %s -SendOrderRef=Submission of order %s -StatusNotApplicable=Not applicable -StatusActionToDo=To do -StatusActionDone=Complete -StatusActionInProcess=In process -TasksHistoryForThisContact=Events for this contact -LastProspectDoNotContact=Do not contact -LastProspectNeverContacted=Never contacted -LastProspectToContact=To contact -LastProspectContactInProcess=Contact in process -LastProspectContactDone=Contact done -ActionAffectedTo=Event assigned to -ActionDoneBy=Event done by -ActionAC_TEL=Phone call -ActionAC_FAX=Send fax -ActionAC_PROP=Send proposal by mail -ActionAC_EMAIL=Send Email -ActionAC_EMAIL_IN=Reception of Email -ActionAC_RDV=Meetings -ActionAC_INT=Intervention on site -ActionAC_FAC=Send customer invoice by mail -ActionAC_REL=Send customer invoice by mail (reminder) -ActionAC_CLO=Close -ActionAC_EMAILING=Send mass email -ActionAC_COM=Send sales order by mail -ActionAC_SHIP=Send shipping by mail -ActionAC_SUP_ORD=Send purchase order by mail -ActionAC_SUP_INV=Send vendor invoice by mail -ActionAC_OTH=Other -ActionAC_OTH_AUTO=Automatically inserted events -ActionAC_MANUAL=Manually inserted events -ActionAC_AUTO=Automatically inserted events -ActionAC_OTH_AUTOShort=Auto -Stats=Sales statistics -StatusProsp=Prospect status -DraftPropals=Draft commercial proposals -NoLimit=No limit -ToOfferALinkForOnlineSignature=Link for online signature -WelcomeOnOnlineSignaturePage=Welcome to the page to accept commercial proposals from %s -ThisScreenAllowsYouToSignDocFrom=This screen allow you to accept and sign, or refuse, a quote/commercial proposal -ThisIsInformationOnDocumentToSign=This is information on document to accept or refuse -SignatureProposalRef=Signature of quote/commercial proposal %s -FeatureOnlineSignDisabled=Feature for online signing disabled or document generated before the feature was enabled +Commercial=ንግድ +CommercialArea=የንግድ አካባቢ +Customer=ደንበኛ +Customers=ደንበኞች +Prospect=ተስፋ +Prospects=ተስፋዎች +DeleteAction=አንድ ክስተት ሰርዝ +NewAction=አዲስ ክስተት +AddAction=ክስተት ፍጠር +AddAnAction=ክስተት ፍጠር +AddActionRendezVous=Rendez-vous ክስተት ይፍጠሩ +ConfirmDeleteAction=እርግጠኛ ነዎት ይህን ክስተት መሰረዝ ይፈልጋሉ? +CardAction=የክስተት ካርድ +ActionOnCompany=ተዛማጅ ኩባንያ +ActionOnContact=ተዛማጅ ግንኙነት +TaskRDVWith=ከ%s ጋር መገናኘት +ShowTask=ተግባር አሳይ +ShowAction=ክስተት አሳይ +ActionsReport=ክስተቶች ሪፖርት +ThirdPartiesOfSaleRepresentative=የሶስተኛ ወገኖች ከሽያጭ ተወካይ ጋር +SaleRepresentativesOfThirdParty=የሶስተኛ ወገን የሽያጭ ተወካዮች +SalesRepresentative=የሽያጭ ተወካይ +SalesRepresentatives=የሽያጭ ተወካዮች +SalesRepresentativeFollowUp=የሽያጭ ተወካይ (ክትትል) +SalesRepresentativeSignature=የሽያጭ ተወካይ (ፊርማ) +NoSalesRepresentativeAffected=የተለየ የሽያጭ ተወካይ አልተመደበም። +ShowCustomer=ደንበኛን አሳይ +ShowProspect=ተስፋን አሳይ +ListOfProspects=የተስፋዎች ዝርዝር +ListOfCustomers=የደንበኞች ዝርዝር +LastDoneTasks=የቅርብ ጊዜ %s የተጠናቀቁ ድርጊቶች +LastActionsToDo=የቆዩ %s ያልተጠናቀቁ ድርጊቶች +DoneAndToDoActions=የተጠናቀቁ እና ዝግጅቶችን ለማድረግ +DoneActions=የተጠናቀቁ ክስተቶች +ToDoActions=ያልተሟሉ ክስተቶች +SendPropalRef=የንግድ ፕሮፖዛል ማቅረብ %s +SendOrderRef=ትዕዛዝ ማስረከብ %s +StatusNotApplicable=ተፈፃሚ የማይሆን +StatusActionToDo=ለመስራት +StatusActionDone=ተጠናቀቀ +StatusActionInProcess=በሂደት ላይ +TasksHistoryForThisContact=ለዚህ እውቂያ ክስተቶች +LastProspectDoNotContact=አትገናኝ +LastProspectNeverContacted=በጭራሽ አልተገናኘም። +LastProspectToContact=ለማነጋገር +LastProspectContactInProcess=በሂደት ላይ ያለ ግንኙነት +LastProspectContactDone=ግንኙነት ተከናውኗል +ActionAffectedTo=ክስተት ተመድቧል +ActionDoneBy=ክስተት የተደረገው በ +ActionAC_TEL=የስልክ ጥሪ +ActionAC_FAX=ፋክስ ላክ +ActionAC_PROP=ፕሮፖዛል በፖስታ ይላኩ። +ActionAC_EMAIL=ኢሜል ላክ +ActionAC_EMAIL_IN=የኢሜል መቀበል +ActionAC_RDV=ስብሰባዎች +ActionAC_INT=በቦታው ላይ ጣልቃ መግባት +ActionAC_FAC=የደንበኛ ደረሰኝ በፖስታ ይላኩ። +ActionAC_REL=የደንበኛ ደረሰኝ በፖስታ ይላኩ (አስታዋሽ) +ActionAC_CLO=ገጠመ +ActionAC_EMAILING=የጅምላ ኢሜይል ላክ +ActionAC_COM=የሽያጭ ትዕዛዝ በፖስታ ይላኩ +ActionAC_SHIP=መላኪያ በፖስታ ላክ +ActionAC_SUP_ORD=የግዢ ትዕዛዝ በፖስታ ይላኩ። +ActionAC_SUP_INV=የአቅራቢ ደረሰኝ በፖስታ ይላኩ። +ActionAC_OTH=ሌላ +ActionAC_OTH_AUTO=ሌላ መኪና +ActionAC_MANUAL=ክስተቶች በእጅ የገቡ (በተጠቃሚ) +ActionAC_AUTO=ክስተቶች በራስ ሰር ገብተዋል። +ActionAC_OTH_AUTOShort=ሌላ +ActionAC_EVENTORGANIZATION=የዝግጅት አደረጃጀት ዝግጅቶች +Stats=የሽያጭ ስታቲስቲክስ +StatusProsp=የተስፋ ሁኔታ +DraftPropals=የንግድ ፕሮፖዛል ረቂቅ +NoLimit=ገደብ የለዉም። +ToOfferALinkForOnlineSignature=የመስመር ላይ ፊርማ አገናኝ +WelcomeOnOnlineSignaturePageProposal=ከ%s የንግድ ፕሮፖዛል ለመቀበል ወደ ገጹ እንኳን በደህና መጡ +WelcomeOnOnlineSignaturePageContract=እንኳን ወደ %s የኮንትራት ፒዲኤፍ መፈረሚያ ገጽ እንኳን በደህና መጡ +WelcomeOnOnlineSignaturePageFichinter=እንኳን ወደ %s ጣልቃ ገብነት ፒዲኤፍ መፈረሚያ ገጽ እንኳን በደህና መጡ +WelcomeOnOnlineSignaturePageSociete_rib=እንኳን ወደ %s መጡ SEPA የፒዲኤፍ መፈረሚያ ገጽ +ThisScreenAllowsYouToSignDocFromProposal=ይህ ማያ ገጽ የጥቅስ/የንግድ ፕሮፖዛልን ለመቀበል እና ለመፈረም ወይም ውድቅ ለማድረግ ያስችላል +ThisScreenAllowsYouToSignDocFromContract=ይህ ማያ ገጽ በፒዲኤፍ ቅርጸት በመስመር ላይ ውል እንዲፈርሙ ያስችልዎታል። +ThisScreenAllowsYouToSignDocFromFichinter=ይህ ማያ ገጽ በፒዲኤፍ ቅርጸት በመስመር ላይ ጣልቃ ገብነት እንዲፈርሙ ያስችልዎታል። +ThisScreenAllowsYouToSignDocFromSociete_rib=ይህ ስክሪን በፒዲኤፍ ቅርጸት በመስመር ላይ SEPA Mandate እንዲፈርሙ ያስችልዎታል። +ThisIsInformationOnDocumentToSignProposal=ይህ ለመቀበል ወይም ላለመቀበል በሰነድ ላይ ያለ መረጃ ነው። +ThisIsInformationOnDocumentToSignContract=ይህ ለመፈረም ውል ላይ ያለ መረጃ ነው። +ThisIsInformationOnDocumentToSignFichinter=ይህ ለመፈረም ጣልቃ ገብነት መረጃ ነው። +ThisIsInformationOnDocumentToSignSociete_rib=ይህ በ SEPA የመፈረም ትእዛዝ ላይ ያለ መረጃ ነው። +SignatureProposalRef=የጥቅስ/የንግድ ፕሮፖዛል ፊርማ %s +SignatureContractRef=የኮንትራት ፊርማ %s +SignatureFichinterRef=የጣልቃ ገብነት ፊርማ %s +SignatureSociete_ribRef=የ SEPA ትዕዛዝ ፊርማ %s +FeatureOnlineSignDisabled=ባህሪው ከመንቃት በፊት በመስመር ላይ የመፈረም ባህሪ ተሰናክሏል ወይም ሰነድ የመነጨ ነው። diff --git a/htdocs/langs/am_ET/companies.lang b/htdocs/langs/am_ET/companies.lang index 7de663ede6d..a63fec78ad7 100644 --- a/htdocs/langs/am_ET/companies.lang +++ b/htdocs/langs/am_ET/companies.lang @@ -1,495 +1,530 @@ # Dolibarr language file - Source file is en_US - companies -ErrorCompanyNameAlreadyExists=Company name %s already exists. Choose another one. -ErrorSetACountryFirst=Set the country first -SelectThirdParty=Select a third party -ConfirmDeleteCompany=Are you sure you want to delete this company and all related information? -DeleteContact=Delete a contact/address -ConfirmDeleteContact=Are you sure you want to delete this contact and all related information? -MenuNewThirdParty=New Third Party -MenuNewCustomer=New Customer -MenuNewProspect=New Prospect -MenuNewSupplier=New Vendor -MenuNewPrivateIndividual=New private individual -NewCompany=New company (prospect, customer, vendor) -NewThirdParty=New Third Party (prospect, customer, vendor) -CreateDolibarrThirdPartySupplier=Create a third party (vendor) -CreateThirdPartyOnly=Create third party -CreateThirdPartyAndContact=Create a third party + a child contact -ProspectionArea=Prospection area -IdThirdParty=Id third party -IdCompany=Company Id -IdContact=Contact Id -ThirdPartyContacts=Third-party contacts -ThirdPartyContact=Third-party contact/address -Company=Company -CompanyName=Company name -AliasNames=Alias name (commercial, trademark, ...) -AliasNameShort=Alias Name -Companies=Companies -CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price display format in the current language and currency -ThirdPartyName=Third-party name -ThirdPartyEmail=Third-party email -ThirdParty=Third-party -ThirdParties=Third-parties -ThirdPartyProspects=Prospects -ThirdPartyProspectsStats=Prospects -ThirdPartyCustomers=Customers -ThirdPartyCustomersStats=Customers -ThirdPartyCustomersWithIdProf12=Customers with %s or %s -ThirdPartySuppliers=Vendors -ThirdPartyType=Third-party type -Individual=Private individual -ToCreateContactWithSameName=Will automatically create a contact/address with same information as the third party under the third party. In most cases, even if your third party is a physical person, creating a third party alone is enough. -ParentCompany=Parent company -Subsidiaries=Subsidiaries -ReportByMonth=Report per month -ReportByCustomers=Report per customer -ReportByThirdparties=Report per thirdparty -ReportByQuarter=Report per rate -CivilityCode=Civility code -RegisteredOffice=Registered office -Lastname=Last name -Firstname=First name -PostOrFunction=Job position -UserTitle=Title -NatureOfThirdParty=Nature of Third party -NatureOfContact=Nature of Contact -Address=Address -State=State/Province -StateCode=State/Province code -StateShort=State -Region=Region -Region-State=Region - State -Country=Country -CountryCode=Country code -CountryId=Country id -Phone=Phone -PhoneShort=Phone -Skype=Skype -Call=Call -Chat=Chat -PhonePro=Bus. phone -PhonePerso=Pers. phone -PhoneMobile=Mobile -No_Email=Refuse bulk emailings -Fax=Fax -Zip=Zip Code -Town=City -Web=Web -Poste= Position -DefaultLang=Default language -VATIsUsed=Sales tax used -VATIsUsedWhenSelling=This defines if this third party includes a sales tax or not when it makes an invoice to its own customers -VATIsNotUsed=Sales tax is not used -CopyAddressFromSoc=Copy address from third-party details -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects -ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor vendor, discounts are not available -PaymentBankAccount=Payment bank account -OverAllProposals=Proposals -OverAllOrders=Orders -OverAllInvoices=Invoices -OverAllSupplierProposals=Price requests +newSocieteAdded=የእውቂያ ዝርዝሮችዎ ተመዝግበዋል። በቅርቡ እንመለሳለን... +ContactUsDesc=ይህ ቅጽ ለመጀመሪያ ግንኙነት መልእክት እንድትልኩልን ይፈቅድልሃል። +ErrorCompanyNameAlreadyExists=የኩባንያ ስም %s አስቀድሞ አለ። ሌላ ይምረጡ። +ErrorSetACountryFirst=መጀመሪያ አገሩን ያዘጋጁ +SelectThirdParty=ሶስተኛ ወገን ይምረጡ +ConfirmDeleteCompany=እርግጠኛ ነዎት ይህንን ኩባንያ እና ሁሉንም ተዛማጅ መረጃዎችን መሰረዝ ይፈልጋሉ? +DeleteContact=እውቂያ/አድራሻ ሰርዝ +ConfirmDeleteContact=እርግጠኛ ነዎት ይህን እውቂያ እና ሁሉንም ተዛማጅ መረጃዎች መሰረዝ ይፈልጋሉ? +MenuNewThirdParty=አዲስ ሶስተኛ ወገን +MenuNewCustomer=አዲስ ደንበኛ +MenuNewProspect=አዲስ ተስፋ +MenuNewSupplier=አዲስ ሻጭ +MenuNewPrivateIndividual=አዲስ የግል ሰው +NewCompany=አዲስ ኩባንያ (ተፈላጊ, ደንበኛ, ሻጭ) +NewThirdParty=አዲስ ሶስተኛ ወገን (ተፈላጊ፣ ደንበኛ፣ ሻጭ) +CreateDolibarrThirdPartySupplier=ሶስተኛ ወገን (ሻጭ) ይፍጠሩ +CreateThirdPartyOnly=ሶስተኛ ወገን ፍጠር +CreateThirdPartyAndContact=የሶስተኛ ወገን + የልጅ ግንኙነት ይፍጠሩ +ProspectionArea=የእይታ አካባቢ +IdThirdParty=ሶስተኛ ወገን መታወቂያ +IdCompany=የኩባንያ መታወቂያ +IdContact=የእውቂያ መታወቂያ +ThirdPartyAddress=የሶስተኛ ወገን አድራሻ +ThirdPartyContacts=የሶስተኛ ወገን እውቂያዎች +ThirdPartyContact=የሶስተኛ ወገን እውቂያ/አድራሻ +Company=ኩባንያ +CompanyName=የድርጅት ስም +AliasNames=ተለዋጭ ስም (የንግድ ፣ የንግድ ምልክት ፣ ...) +AliasNameShort=ተለዋጭ ስም +Companies=ኩባንያዎች +CountryIsInEEC=አገሪቱ በአውሮፓ ኢኮኖሚክ ማህበረሰብ ውስጥ ነች +PriceFormatInCurrentLanguage=የዋጋ ማሳያ ቅርጸት አሁን ባለው ቋንቋ እና ምንዛሬ +ThirdPartyName=የሶስተኛ ወገን ስም +ThirdPartyEmail=የሶስተኛ ወገን ኢሜይል +ThirdParty=ሶስተኛ ወገን +ThirdParties=ሦስተኛ ወገኖች +ThirdPartyProspects=ተስፋዎች +ThirdPartyProspectsStats=ተስፋዎች +ThirdPartyCustomers=ደንበኞች +ThirdPartyCustomersStats=ደንበኞች +ThirdPartyCustomersWithIdProf12=%s ወይም %s ያላቸው ደንበኞች +ThirdPartySuppliers=ሻጮች +ThirdPartyType=የሶስተኛ ወገን አይነት +Individual=የግል ግለሰብ +ToCreateContactWithSameName=በሶስተኛ ወገን ስር ከሦስተኛ ወገን ጋር ተመሳሳይ መረጃ ያለው አድራሻ/አድራሻ በራስ ሰር ይፈጥራል። በአብዛኛዎቹ ጉዳዮች፣ ሶስተኛ ወገንህ አካላዊ ሰው ቢሆንም፣ ሶስተኛ ወገን መፍጠር ብቻውን በቂ ነው። +ParentCompany=ወላጅ ኩባንያ +Subsidiaries=ቅርንጫፎች +ReportByMonth=በወር ሪፖርት አድርግ +ReportByCustomers=ሪፖርት ለእያንዳንዱ ደንበኛ +ReportByThirdparties=ለሶስተኛ ወገን ሪፖርት ያድርጉ +ReportByQuarter=በየደረጃው ሪፖርት አድርግ +CivilityCode=የዜግነት ኮድ +RegisteredOffice=የተመዘገበ ቢሮ +Lastname=የአያት ስም +Firstname=የመጀመሪያ ስም +RefEmployee=የሰራተኛ ማጣቀሻ +NationalRegistrationNumber=ብሔራዊ የምዝገባ ቁጥር +PostOrFunction=የሥራ ቦታ +UserTitle=ርዕስ +NatureOfThirdParty=የሶስተኛ ወገን ተፈጥሮ +NatureOfContact=የግንኙነት ተፈጥሮ +Address=አድራሻ +State=ግዛት/አውራጃ +StateId=የግዛት መታወቂያ +StateCode=ግዛት / ግዛት ኮድ +StateShort=ግዛት +Region=ክልል +Region-State=ክልል - ግዛት +Country=ሀገር +CountryCode=የአገር መለያ ቁጥር +CountryId=የሀገር መታወቂያ +Phone=ስልክ +PhoneShort=ስልክ +Skype=ስካይፕ +Call=ይደውሉ +Chat=ተወያይ +PhonePro=አውቶቡስ. ስልክ +PhonePerso=ፐርስ. ስልክ +PhoneMobile=ሞባይል +No_Email=የጅምላ ኢሜይሎችን እምቢ ይበሉ +Fax=ፋክስ +Zip=አካባቢያዊ መለያ ቁጥር +Town=ከተማ +Web=ድር +Poste= አቀማመጥ +DefaultLang=ነባሪ ቋንቋ +VATIsUsed=ጥቅም ላይ የዋለው የሽያጭ ታክስ +VATIsUsedWhenSelling=ይህ ሶስተኛ ወገን ለደንበኞቹ ደረሰኝ ሲያደርግ የሽያጭ ታክስን የሚጨምር ከሆነ ወይም ካልሆነ ይገልጻል +VATIsNotUsed=የሽያጭ ታክስ ጥቅም ላይ አይውልም +VATReverseCharge=ተ.እ.ታ በግልባጭ መሙላት +VATReverseChargeByDefault=ተ.እ.ታ በግልባጭ ክፍያ በነባሪ +VATReverseChargeByDefaultDesc=በአቅራቢው ደረሰኝ ላይ፣ ተ.እ.ታ ተቃራኒ ክፍያ በነባሪነት ጥቅም ላይ ይውላል +CopyAddressFromSoc=አድራሻ ከሶስተኛ ወገን ዝርዝሮች ይቅዱ +ThirdpartyNotCustomerNotSupplierSoNoRef=ሶስተኛ ወገን ደንበኛም ሆነ ሻጭ፣ ምንም የሚገኙ የሚጠቁሙ ነገሮች የሉም +ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=ሶስተኛ ወገን ደንበኛም ሆነ ሻጭ፣ ቅናሾች አይገኙም። +PaymentBankAccount=የክፍያ የባንክ ሂሳብ +OverAllProposals=ፕሮፖዛል +OverAllOrders=ትዕዛዞች +OverAllInvoices=ደረሰኞች +OverAllSupplierProposals=የዋጋ ጥያቄዎች ##### Local Taxes ##### -LocalTax1IsUsed=Use second tax -LocalTax1IsUsedES= RE is used -LocalTax1IsNotUsedES= RE is not used -LocalTax2IsUsed=Use third tax -LocalTax2IsUsedES= IRPF is used -LocalTax2IsNotUsedES= IRPF is not used -WrongCustomerCode=Customer code invalid -WrongSupplierCode=Vendor code invalid -CustomerCodeModel=Customer code model -SupplierCodeModel=Vendor code model -Gencod=Barcode +LocalTax1IsUsed=ሁለተኛ ግብር ተጠቀም +LocalTax1IsUsedES= RE ጥቅም ላይ ይውላል +LocalTax1IsNotUsedES= RE ጥቅም ላይ አይውልም +LocalTax2IsUsed=ሶስተኛ ግብር ተጠቀም +LocalTax2IsUsedES= IRPF ጥቅም ላይ ይውላል +LocalTax2IsNotUsedES= IRPF ጥቅም ላይ አይውልም +WrongCustomerCode=የደንበኛ ኮድ ልክ ያልሆነ +WrongSupplierCode=የአቅራቢ ኮድ ልክ ያልሆነ +CustomerCodeModel=የደንበኛ ኮድ ሞዴል +SupplierCodeModel=የአቅራቢ ኮድ ሞዴል +Gencod=የአሞሌ ኮድ +GencodBuyPrice=የዋጋ ባርኮድ ማጣቀሻ ##### Professional ID ##### -ProfId1Short=Prof. id 1 -ProfId2Short=Prof. id 2 -ProfId3Short=Prof. id 3 -ProfId4Short=Prof. id 4 -ProfId5Short=Prof. id 5 -ProfId6Short=Prof. id 6 -ProfId1=Professional ID 1 -ProfId2=Professional ID 2 -ProfId3=Professional ID 3 -ProfId4=Professional ID 4 -ProfId5=Professional ID 5 -ProfId6=Professional ID 6 -ProfId1AR=Prof Id 1 (CUIT/CUIL) -ProfId2AR=Prof Id 2 (Revenu brutes) +ProfId1Short=ፕሮፌሰር መታወቂያ 1 +ProfId2Short=ፕሮፌሰር መታወቂያ 2 +ProfId3Short=ፕሮፌሰር መታወቂያ 3 +ProfId4Short=ፕሮፌሰር መታወቂያ 4 +ProfId5Short=ፕሮፌሰር መታወቂያ 5 +ProfId6Short=ፕሮፌሰር መታወቂያ 6 +ProfId7Short=ፕሮፌሰር መታወቂያ 7 +ProfId8Short=ፕሮፌሰር መታወቂያ 8 +ProfId9Short=ፕሮፌሰር መታወቂያ 9 +ProfId10Short=ፕሮፌሰር መታወቂያ 10 +ProfId1=የባለሙያ መታወቂያ 1 +ProfId2=የባለሙያ መታወቂያ 2 +ProfId3=የባለሙያ መታወቂያ 3 +ProfId4=የባለሙያ መታወቂያ 4 +ProfId5=የባለሙያ መታወቂያ 5 +ProfId6=የባለሙያ መታወቂያ 6 +ProfId7=የባለሙያ መታወቂያ 7 +ProfId8=የባለሙያ መታወቂያ 8 +ProfId9=የባለሙያ መታወቂያ 9 +ProfId10=የባለሙያ መታወቂያ 10 +ProfId1AR=ፕሮፌሰር መታወቂያ 1 (CUIT/CUIL) +ProfId2AR=ፕሮፌሰር መታወቂያ 2 (የሪቨኑ ብሩቶች) ProfId3AR=- ProfId4AR=- ProfId5AR=- ProfId6AR=- -ProfId1AT=Prof Id 1 (USt.-IdNr) -ProfId2AT=Prof Id 2 (USt.-Nr) -ProfId3AT=Prof Id 3 (Handelsregister-Nr.) +ProfId1AT=ፕሮፌሰር መታወቂያ 1 (USt.-IdNr) +ProfId2AT=ፕሮፌሰር መታወቂያ 2 (USt.-Nr) +ProfId3AT=ፕሮፌሰር መታወቂያ 3 (Handelsregister-Nr.) ProfId4AT=- -ProfId5AT=EORI number +ProfId5AT=EORI ቁጥር ProfId6AT=- -ProfId1AU=Prof Id 1 (ABN) +ProfId1AU=ፕሮፌሰር መታወቂያ 1 (ABN) ProfId2AU=- ProfId3AU=- ProfId4AU=- ProfId5AU=- ProfId6AU=- -ProfId1BE=Prof Id 1 (Professional number) +ProfId1BE=ፕሮፌሰር መታወቂያ 1 (የሙያ ቁጥር) ProfId2BE=- ProfId3BE=- ProfId4BE=- -ProfId5BE=EORI number +ProfId5BE=EORI ቁጥር ProfId6BE=- ProfId1BR=- -ProfId2BR=IE (Inscricao Estadual) -ProfId3BR=IM (Inscricao Municipal) -ProfId4BR=CPF +ProfId2BR=IE (ኢንስክሪካኦ ኢስታዱያል) +ProfId3BR=አይኤም (ኢንስክሪካኦ ማዘጋጃ ቤት) +ProfId4BR=ሲፒኤፍ #ProfId5BR=CNAE #ProfId6BR=INSS ProfId1CH=UID-Nummer ProfId2CH=- -ProfId3CH=Prof Id 1 (Federal number) -ProfId4CH=Prof Id 2 (Commercial Record number) -ProfId5CH=EORI number +ProfId3CH=ፕሮፌሰር መታወቂያ 1 (የፌዴራል ቁጥር) +ProfId4CH=ፕሮፌሰር መታወቂያ 2 (የንግድ መዝገብ ቁጥር) +ProfId5CH=EORI ቁጥር ProfId6CH=- -ProfId1CL=Prof Id 1 (R.U.T.) +ProfId1CL=ፕሮፌሰር መታወቂያ 1 (R.U.T.) ProfId2CL=- ProfId3CL=- ProfId4CL=- ProfId5CL=- ProfId6CL=- -ProfId1CM=Id. prof. 1 (Trade Register) -ProfId2CM=Id. prof. 2 (Taxpayer No.) -ProfId3CM=Id. prof. 3 (Decree of creation) -ProfId4CM=- -ProfId5CM=- +ProfId1CM=መታወቂያ ፕሮፌሰር 1 (የንግድ መዝገብ) +ProfId2CM=መታወቂያ ፕሮፌሰር 2 (የግብር ከፋይ ቁጥር) +ProfId3CM=መታወቂያ ፕሮፌሰር 3 (የፍጥረት ድንጋጌ ቁጥር) +ProfId4CM=መታወቂያ ፕሮፌሰር 4 (የተቀማጭ የምስክር ወረቀት ቁጥር) +ProfId5CM=መታወቂያ ፕሮፌሰር 5 (ሌሎች) ProfId6CM=- -ProfId1ShortCM=Trade Register -ProfId2ShortCM=Taxpayer No. -ProfId3ShortCM=Decree of creation -ProfId4ShortCM=- -ProfId5ShortCM=- +ProfId1ShortCM=የንግድ ምዝገባ +ProfId2ShortCM=የግብር ከፋይ ቁጥር. +ProfId3ShortCM=የፍጥረት ድንጋጌ ቁጥር +ProfId4ShortCM=የተቀማጭ የምስክር ወረቀት ቁጥር +ProfId5ShortCM=ሌሎች ProfId6ShortCM=- -ProfId1CO=Prof Id 1 (R.U.T.) +ProfId1CO=ፕሮፌሰር መታወቂያ 1 (R.U.T.) ProfId2CO=- ProfId3CO=- ProfId4CO=- ProfId5CO=- ProfId6CO=- -ProfId1DE=Prof Id 1 (USt.-IdNr) -ProfId2DE=Prof Id 2 (USt.-Nr) -ProfId3DE=Prof Id 3 (Handelsregister-Nr.) +ProfId1DE=ፕሮፌሰር መታወቂያ 1 (USt.-IdNr) +ProfId2DE=ፕሮፌሰር መታወቂያ 2 (USt.-Nr) +ProfId3DE=ፕሮፌሰር መታወቂያ 3 (Handelsregister-Nr.) ProfId4DE=- -ProfId5DE=EORI number +ProfId5DE=EORI ቁጥር ProfId6DE=- -ProfId1ES=Prof Id 1 (CIF/NIF) -ProfId2ES=Prof Id 2 (Social security number) -ProfId3ES=Prof Id 3 (CNAE) -ProfId4ES=Prof Id 4 (Collegiate number) -ProfId5ES=Prof Id 5 (EORI number) +ProfId1ES=ፕሮፌሰር መታወቂያ 1 (CIF/NIF) +ProfId2ES=ፕሮፌሰር መታወቂያ 2 (የማህበራዊ ዋስትና ቁጥር) +ProfId3ES=ፕሮፌሰር መታወቂያ 3 (ሲኤንኤኢ) +ProfId4ES=ፕሮፌሰር መታወቂያ 4 (የኮሌጅ ቁጥር) +ProfId5ES=ፕሮፌሰር መታወቂያ 5 (EORI ቁጥር) ProfId6ES=- -ProfId1FR=Prof Id 1 (SIREN) -ProfId2FR=Prof Id 2 (SIRET) -ProfId3FR=Prof Id 3 (NAF, old APE) -ProfId4FR=Prof Id 4 (RCS/RM) -ProfId5FR=Prof Id 5 (numéro EORI) +ProfId1FR=ፕሮፌሰር መታወቂያ 1 (SIREN) +ProfId2FR=ፕሮፌሰር መታወቂያ 2 (SIRET) +ProfId3FR=ፕሮፌሰር መታወቂያ 3 (NAF፣ የድሮ APE) +ProfId4FR=ፕሮፌሰር መታወቂያ 4 (RCS/RM) +ProfId5FR=ፕሮፌሰር መታወቂያ 5 (ቁጥር ኢኦሪ) ProfId6FR=- +ProfId7FR=- +ProfId8FR=- +ProfId9FR=- +ProfId10FR=- ProfId1ShortFR=SIREN ProfId2ShortFR=SIRET ProfId3ShortFR=NAF ProfId4ShortFR=RCS ProfId5ShortFR=EORI ProfId6ShortFR=- -ProfId1GB=Registration Number +ProfId7ShortFR=- +ProfId8ShortFR=- +ProfId9ShortFR=- +ProfId10ShortFR=- +ProfId1GB=የምዝገባ ቁጥር ProfId2GB=- ProfId3GB=SIC ProfId4GB=- ProfId5GB=- ProfId6GB=- -ProfId1HN=Id prof. 1 (RTN) +ProfId1HN=መታወቂያ ፕሮፌሰር 1 (RTN) ProfId2HN=- ProfId3HN=- ProfId4HN=- ProfId5HN=- ProfId6HN=- -ProfId1IN=Prof Id 1 (TIN) -ProfId2IN=Prof Id 2 (PAN) -ProfId3IN=Prof Id 3 (SRVC TAX) -ProfId4IN=Prof Id 4 -ProfId5IN=Prof Id 5 +ProfId1IN=ፕሮፌሰር መታወቂያ 1 (ቲን) +ProfId2IN=ፕሮፌሰር መታወቂያ 2 (PAN) +ProfId3IN=ፕሮፌሰር መታወቂያ 3 (SRVC TAX) +ProfId4IN=ፕሮፌሰር መታወቂያ 4 +ProfId5IN=ፕሮፌሰር መታወቂያ 5 ProfId6IN=- ProfId1IT=- ProfId2IT=- ProfId3IT=- ProfId4IT=- -ProfId5IT=EORI number +ProfId5IT=EORI ቁጥር ProfId6IT=- -ProfId1LU=Id. prof. 1 (R.C.S. Luxembourg) -ProfId2LU=Id. prof. 2 (Business permit) +ProfId1LU=መታወቂያ ፕሮፌሰር 1 (አር.ሲ.ኤስ. ሉክሰምበርግ) +ProfId2LU=መታወቂያ ፕሮፌሰር 2 (የንግድ ፈቃድ) ProfId3LU=- ProfId4LU=- -ProfId5LU=EORI number +ProfId5LU=EORI ቁጥር ProfId6LU=- -ProfId1MA=Id prof. 1 (R.C.) -ProfId2MA=Id prof. 2 (Patente) -ProfId3MA=Id prof. 3 (I.F.) -ProfId4MA=Id prof. 4 (C.N.S.S.) -ProfId5MA=Id prof. 5 (I.C.E.) +ProfId1MA=መታወቂያ ፕሮፌሰር 1 (አር.ሲ.) +ProfId2MA=መታወቂያ ፕሮፌሰር 2 (ፓተንት) +ProfId3MA=መታወቂያ ፕሮፌሰር 3 (አይ.ኤፍ.) +ProfId4MA=መታወቂያ ፕሮፌሰር 4 (ሲ.ኤን.ኤስ.ኤስ.) +ProfId5MA=መታወቂያ ፕሮፌሰር 5 (አይ.ሲ.ኢ.) ProfId6MA=- -ProfId1MX=Prof Id 1 (R.F.C). -ProfId2MX=Prof Id 2 (R..P. IMSS) -ProfId3MX=Prof Id 3 (Profesional Charter) +ProfId1MX=ፕሮፌሰር መታወቂያ 1 (አር.ኤፍ.ሲ) +ProfId2MX=ፕሮፌሰር መታወቂያ 2 (R..P. IMSS) +ProfId3MX=ፕሮፌሰር መታወቂያ 3 (የፕሮፌሽናል ቻርተር) ProfId4MX=- ProfId5MX=- ProfId6MX=- ProfId1NL=KVK nummer ProfId2NL=- ProfId3NL=- -ProfId4NL=Burgerservicenummer (BSN) -ProfId5NL=EORI number +ProfId4NL=የበርገር አገልግሎት ቁጥር (BSN) +ProfId5NL=EORI ቁጥር ProfId6NL=- -ProfId1PT=Prof Id 1 (NIPC) -ProfId2PT=Prof Id 2 (Social security number) -ProfId3PT=Prof Id 3 (Commercial Record number) -ProfId4PT=Prof Id 4 (Conservatory) -ProfId5PT=Prof Id 5 (EORI number) +ProfId1PT=ፕሮፌሰር መታወቂያ 1 (NIPC) +ProfId2PT=ፕሮፌሰር መታወቂያ 2 (የማህበራዊ ዋስትና ቁጥር) +ProfId3PT=ፕሮፌሰር መታወቂያ 3 (የንግድ መዝገብ ቁጥር) +ProfId4PT=ፕሮፌሰር መታወቂያ 4 (ኮንሰርቫቶሪ) +ProfId5PT=ፕሮፌሰር መታወቂያ 5 (EORI ቁጥር) ProfId6PT=- -ProfId1SN=RC -ProfId2SN=NINEA +ProfId1SN=አር.ሲ +ProfId2SN=ኒኒያ ProfId3SN=- ProfId4SN=- ProfId5SN=- ProfId6SN=- -ProfId1TN=Prof Id 1 (RC) -ProfId2TN=Prof Id 2 (Fiscal matricule) -ProfId3TN=Prof Id 3 (Douane code) -ProfId4TN=Prof Id 4 (BAN) +ProfId1TN=ፕሮፌሰር መታወቂያ 1 (አርሲ) +ProfId2TN=ፕሮፌሰር መታወቂያ 2 (የፊስካል ማትሪክስ) +ProfId3TN=ፕሮፌሰር መታወቂያ 3 (Douane ኮድ) +ProfId4TN=ፕሮፌሰር መታወቂያ 4 (BAN) ProfId5TN=- ProfId6TN=- -ProfId1US=Prof Id (FEIN) +ProfId1US=የፕሮፌሰር መታወቂያ (FEIN) ProfId2US=- ProfId3US=- ProfId4US=- ProfId5US=- ProfId6US=- -ProfId1RO=Prof Id 1 (CUI) -ProfId2RO=Prof Id 2 (Nr. Înmatriculare) -ProfId3RO=Prof Id 3 (CAEN) -ProfId4RO=Prof Id 5 (EUID) -ProfId5RO=Prof Id 5 (EORI number) +ProfId1RO=ፕሮፌሰር መታወቂያ 1 (CUI) +ProfId2RO=ፕሮፌሰር መታወቂያ 2 (Nr. Înmatriculare) +ProfId3RO=ፕሮፌሰር መታወቂያ 3 (CAEN) +ProfId4RO=ፕሮፌሰር መታወቂያ 5 (EUID) +ProfId5RO=ፕሮፌሰር መታወቂያ 5 (EORI ቁጥር) ProfId6RO=- -ProfId1RU=Prof Id 1 (OGRN) -ProfId2RU=Prof Id 2 (INN) -ProfId3RU=Prof Id 3 (KPP) -ProfId4RU=Prof Id 4 (OKPO) +ProfId1RU=ፕሮፌሰር መታወቂያ 1 (OGRN) +ProfId2RU=ፕሮፌሰር መታወቂያ 2 (INN) +ProfId3RU=ፕሮፌሰር መታወቂያ 3 (KPP) +ProfId4RU=ፕሮፌሰር መታወቂያ 4 (OKPO) ProfId5RU=- ProfId6RU=- -ProfId1UA=Prof Id 1 (EDRPOU) -ProfId2UA=Prof Id 2 (DRFO) -ProfId3UA=Prof Id 3 (INN) -ProfId4UA=Prof Id 4 (Certificate) -ProfId5UA=Prof Id 5 (RNOKPP) -ProfId6UA=Prof Id 6 (TRDPAU) -ProfId1DZ=RC -ProfId2DZ=Art. +ProfId1UA=ፕሮፌሰር መታወቂያ 1 (EDRPOU) +ProfId2UA=ፕሮፌሰር መታወቂያ 2 (DRFO) +ProfId3UA=ፕሮፌሰር መታወቂያ 3 (INN) +ProfId4UA=ፕሮፌሰር መታወቂያ 4 (የምስክር ወረቀት) +ProfId5UA=ፕሮፌሰር መታወቂያ 5 (RNOKPP) +ProfId6UA=ፕሮፌሰር መታወቂያ 6 (TRDPAU) +ProfId1DZ=አር.ሲ +ProfId2DZ=ስነ ጥበብ. ProfId3DZ=NIF -ProfId4DZ=NIS -VATIntra=VAT ID -VATIntraShort=VAT ID -VATIntraSyntaxIsValid=Syntax is valid -VATReturn=VAT return -ProspectCustomer=Prospect / Customer -Prospect=Prospect -CustomerCard=Customer Card -Customer=Customer -CustomerRelativeDiscount=Relative customer discount -SupplierRelativeDiscount=Relative vendor discount -CustomerRelativeDiscountShort=Relative discount -CustomerAbsoluteDiscountShort=Absolute discount +ProfId4DZ=ኤን.አይ.ኤስ +VATIntra=የተ.እ.ታ መታወቂያ +VATIntraShort=የተ.እ.ታ መታወቂያ +VATIntraSyntaxIsValid=አገባብ ልክ ነው። +VATReturn=የተ.እ.ታ ተመላሽ +ProspectCustomer=ተስፋ / ደንበኛ +Prospect=ተስፋ +CustomerCard=የደንበኛ ካርድ +Customer=ደንበኛ +CustomerRelativeDiscount=አንጻራዊ የደንበኛ ቅናሽ +SupplierRelativeDiscount=አንጻራዊ የአቅራቢ ቅናሽ +CustomerRelativeDiscountShort=አንጻራዊ ቅናሽ +CustomerAbsoluteDiscountShort=ፍጹም ቅናሽ CompanyHasRelativeDiscount=This customer has a default discount of %s%% -CompanyHasNoRelativeDiscount=This customer has no relative discount by default -HasRelativeDiscountFromSupplier=You have a default discount of %s%% from this vendor -HasNoRelativeDiscountFromSupplier=You have no default relative discount from this vendor +CompanyHasNoRelativeDiscount=ይህ ደንበኛ በነባሪ አንጻራዊ ቅናሽ የለውም +HasRelativeDiscountFromSupplier=You have a default discount of %s%% with this vendor +HasNoRelativeDiscountFromSupplier=ከዚህ አቅራቢ ጋር ምንም ነባሪ አንጻራዊ ቅናሽ የለም። CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for %s %s CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for %s %s CompanyHasCreditNote=This customer still has credit notes for %s %s -HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this vendor +HasNoAbsoluteDiscountFromSupplier=ከዚህ አቅራቢ ምንም ቅናሽ/ክሬዲት የለም። HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for %s %s from this vendor HasDownPaymentOrCommercialDiscountFromSupplier=You have discounts available (commercial, down payments) for %s %s from this vendor -HasCreditNoteFromSupplier=You have credit notes for %s %s from this vendor -CompanyHasNoAbsoluteDiscount=This customer has no discount credit available -CustomerAbsoluteDiscountAllUsers=Absolute customer discounts (granted by all users) -CustomerAbsoluteDiscountMy=Absolute customer discounts (granted by yourself) -SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users) -SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) -DiscountNone=None -Vendor=Vendor -Supplier=Vendor -AddContact=Create contact -AddContactAddress=Create contact/address -EditContact=Edit contact -EditContactAddress=Edit contact/address -Contact=Contact/Address -Contacts=Contacts/Addresses -ContactId=Contact id -ContactsAddresses=Contacts/Addresses -FromContactName=Name: -NoContactDefinedForThirdParty=No contact defined for this third party -NoContactDefined=No contact defined -DefaultContact=Default contact/address -ContactByDefaultFor=Default contact/address for -AddThirdParty=Create third party -DeleteACompany=Delete a company -PersonalInformations=Personal data -AccountancyCode=Accounting account -CustomerCode=Customer Code -SupplierCode=Vendor Code -CustomerCodeShort=Customer Code -SupplierCodeShort=Vendor Code -CustomerCodeDesc=Customer Code, unique for all customers -SupplierCodeDesc=Vendor Code, unique for all vendors -RequiredIfCustomer=Required if third party is a customer or prospect -RequiredIfSupplier=Required if third party is a vendor -ValidityControledByModule=Validity controlled by the module -ThisIsModuleRules=Rules for this module -ProspectToContact=Prospect to contact -CompanyDeleted=Company "%s" deleted from database. -ListOfContacts=List of contacts/addresses -ListOfContactsAddresses=List of contacts/addresses -ListOfThirdParties=List of Third Parties -ShowCompany=Third Party -ShowContact=Contact-Address -ContactsAllShort=All (No filter) -ContactType=Contact type -ContactForOrders=Order's contact -ContactForOrdersOrShipments=Order's or shipment's contact -ContactForProposals=Proposal's contact -ContactForContracts=Contract's contact -ContactForInvoices=Invoice's contact -NoContactForAnyOrder=This contact is not a contact for any order -NoContactForAnyOrderOrShipments=This contact is not a contact for any order or shipment -NoContactForAnyProposal=This contact is not a contact for any commercial proposal -NoContactForAnyContract=This contact is not a contact for any contract -NoContactForAnyInvoice=This contact is not a contact for any invoice -NewContact=New contact -NewContactAddress=New Contact/Address -MyContacts=My contacts -Capital=Capital -CapitalOf=Capital of %s -EditCompany=Edit company -ThisUserIsNot=This user is not a prospect, customer or vendor -VATIntraCheck=Check -VATIntraCheckDesc=The VAT ID must include the country prefix. The link %s uses the European VAT checker service (VIES) which requires internet access from the Dolibarr server. -VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do -VATIntraCheckableOnEUSite=Check the intra-Community VAT ID on the European Commission website -VATIntraManualCheck=You can also check manually on the European Commission website %s -ErrorVATCheckMS_UNAVAILABLE=Check not possible. Check service is not provided by the member state (%s). -NorProspectNorCustomer=Not prospect, nor customer -JuridicalStatus=Business entity type -Workforce=Workforce -Staff=Employees -ProspectLevelShort=Potential -ProspectLevel=Prospect potential -ContactPrivate=Private -ContactPublic=Shared -ContactVisibility=Visibility -ContactOthers=Other -OthersNotLinkedToThirdParty=Others, not linked to a third party -ProspectStatus=Prospect status -PL_NONE=None -PL_UNKNOWN=Unknown -PL_LOW=Low -PL_MEDIUM=Medium -PL_HIGH=High +HasCreditNoteFromSupplier=ለ%s ክሬዲት ማስታወሻ አለህ። ‹%s ከዚህ አቅራቢ +CompanyHasNoAbsoluteDiscount=ይህ ደንበኛ ምንም የቅናሽ ክሬዲት የለውም +CustomerAbsoluteDiscountAllUsers=ፍጹም የደንበኛ ቅናሾች (በሁሉም ተጠቃሚዎች የተሰጠ) +CustomerAbsoluteDiscountMy=ፍጹም የደንበኛ ቅናሾች (በራስዎ የተሰጠ) +SupplierAbsoluteDiscountAllUsers=ፍፁም የሻጭ ቅናሾች (በሁሉም ተጠቃሚዎች የገባ) +SupplierAbsoluteDiscountMy=ፍፁም የሻጭ ቅናሾች (በራስዎ የገቡ) +DiscountNone=ምንም +Vendor=ሻጭ +Supplier=ሻጭ +AddContact=ዕውቂያ ፍጠር +AddContactAddress=እውቂያ/አድራሻ ፍጠር +EditContact=እውቂያን ያርትዑ +EditContactAddress=እውቂያ/አድራሻ ያርትዑ +Contact=አድራሻ/አድራሻ +Contacts=እውቂያዎች/አድራሻዎች +ContactId=የእውቂያ መታወቂያ +ContactsAddresses=እውቂያዎች/አድራሻዎች +FromContactName=ስም፡ +NoContactDefinedForThirdParty=ለዚህ ሶስተኛ ወገን ምንም አይነት ግንኙነት አልተገለጸም። +NoContactDefined=ምንም ዕውቂያ አልተገለጸም። +DefaultContact=ነባሪ ዕውቂያ/አድራሻ +ContactByDefaultFor=ነባሪ ዕውቂያ/አድራሻ ለ +AddThirdParty=ሶስተኛ ወገን ፍጠር +DeleteACompany=ኩባንያ ሰርዝ +PersonalInformations=የግል መረጃ +AccountancyCode=የሂሳብ አያያዝ መለያ +CustomerCode=የደንበኛ ኮድ +SupplierCode=የአቅራቢ ኮድ +CustomerCodeShort=የደንበኛ ኮድ +SupplierCodeShort=የአቅራቢ ኮድ +CustomerCodeDesc=የደንበኛ ኮድ፣ ለሁሉም ደንበኞች ልዩ +SupplierCodeDesc=የሻጭ ኮድ፣ ለሁሉም አቅራቢዎች ልዩ +RequiredIfCustomer=ሶስተኛ ወገን ደንበኛ ወይም ተስፋ ከሆነ የሚፈለግ +RequiredIfSupplier=ሶስተኛ ወገን ሻጭ ከሆነ ያስፈልጋል +ValidityControledByModule=ሞጁሉ የሚቆጣጠረው ትክክለኛነት +ThisIsModuleRules=የዚህ ሞጁል ደንቦች +ProspectToContact=የመገናኘት ተስፋ +CompanyDeleted=ኩባንያ "%s" ከመረጃ ቋት ተሰርዟል። +ListOfContacts=የእውቂያዎች/አድራሻዎች ዝርዝር +ListOfContactsAddresses=የእውቂያዎች/አድራሻዎች ዝርዝር +ListOfThirdParties=የሶስተኛ ወገኖች ዝርዝር +ShowCompany=ሶስተኛ ወገን +ShowContact=አድራሻ-አድራሻ +ContactsAllShort=ሁሉም (ማጣሪያ የለም) +ContactType=የግንኙነት ሚና +ContactForOrders=የትዕዛዝ ግንኙነት +ContactForOrdersOrShipments=የትዕዛዝ ወይም የመርከብ ግንኙነት +ContactForProposals=የፕሮፖዛል ግንኙነት +ContactForContracts=የኮንትራት ግንኙነት +ContactForInvoices=የክፍያ መጠየቂያ እውቂያ +NoContactForAnyOrder=ይህ እውቂያ ለማንኛውም ትእዛዝ እውቂያ አይደለም። +NoContactForAnyOrderOrShipments=ይህ እውቂያ ለማንኛውም ትእዛዝ ወይም ጭነት እውቂያ አይደለም። +NoContactForAnyProposal=ይህ እውቂያ ለማንኛውም የንግድ ፕሮፖዛል ዕውቂያ አይደለም። +NoContactForAnyContract=ይህ እውቂያ ለማንኛውም ውል ግንኙነት አይደለም። +NoContactForAnyInvoice=ይህ እውቂያ ለማንኛውም ደረሰኝ አድራሻ አይደለም። +NewContact=አዲስ ግንኙነት +NewContactAddress=አዲስ እውቂያ/አድራሻ +MyContacts=የእኔ እውቂያዎች +Capital=ካፒታል +CapitalOf=የ%s ካፒታል +EditCompany=ኩባንያ አርትዕ +ThisUserIsNot=ይህ ተጠቃሚ ተጠባባቂ፣ ደንበኛ ወይም ሻጭ አይደለም። +VATIntraCheck=ይፈትሹ +VATIntraCheckDesc=የቫት መታወቂያው የአገር ቅድመ ቅጥያ ማካተት አለበት። አገናኙ %s የአውሮፓ ቫት አረጋጋጭ አገልግሎትን ይጠቀማል ከ Dolibarr አገልጋይ የበይነመረብ መዳረሻ ያስፈልገዋል. +VATIntraCheckURL=https://ec.europa.eu/taxation_customs/vies/#/vat-validation +VATIntraCheckableOnEUSite=የውስጠ-ማህበረሰብ ተ.እ.ታን መታወቂያ በአውሮፓ ኮሚሽን ድረ-ገጽ ላይ ያረጋግጡ +VATIntraManualCheck=እንዲሁም በአውሮፓ ኮሚሽን ድህረ ገጽ ላይ እራስዎ መመልከት ይችላሉ %s +ErrorVATCheckMS_UNAVAILABLE=ማረጋገጥ አይቻልም። የፍተሻ አገልግሎት በአባል ሀገር (%s) አይሰጥም። +NorProspectNorCustomer=ተስፋ አይደለም, ወይም ደንበኛ +JuridicalStatus=የንግድ ድርጅት ዓይነት +Workforce=የሰው ኃይል +Staff=ሰራተኞች +ProspectLevelShort=እምቅ +ProspectLevel=የተስፋ አቅም +ContactPrivate=የግል +ContactPublic=ተጋርቷል። +ContactVisibility=ታይነት +ContactOthers=ሌላ +OthersNotLinkedToThirdParty=ሌሎች፣ ከሶስተኛ ወገን ጋር ያልተገናኘ +ProspectStatus=የተስፋ ሁኔታ +PL_NONE=ምንም +PL_UNKNOWN=ያልታወቀ +PL_LOW=ዝቅተኛ +PL_MEDIUM=መካከለኛ +PL_HIGH=ከፍተኛ TE_UNKNOWN=- -TE_STARTUP=Startup -TE_GROUP=Large company -TE_MEDIUM=Medium company -TE_ADMIN=Governmental -TE_SMALL=Small company -TE_RETAIL=Retailer -TE_WHOLE=Wholesaler -TE_PRIVATE=Private individual -TE_OTHER=Other -StatusProspect-1=Do not contact -StatusProspect0=Never contacted -StatusProspect1=To be contacted -StatusProspect2=Contact in process -StatusProspect3=Contact done -ChangeDoNotContact=Change status to 'Do not contact' -ChangeNeverContacted=Change status to 'Never contacted' -ChangeToContact=Change status to 'To be contacted' -ChangeContactInProcess=Change status to 'Contact in process' -ChangeContactDone=Change status to 'Contact done' -ProspectsByStatus=Prospects by status -NoParentCompany=None -ExportCardToFormat=Export card to format -ContactNotLinkedToCompany=Contact not linked to any third party -DolibarrLogin=Dolibarr login -NoDolibarrAccess=No Dolibarr access -ExportDataset_company_1=Third-parties (companies/foundations/physical people) and their properties -ExportDataset_company_2=Contacts and their properties -ImportDataset_company_1=Third-parties and their properties -ImportDataset_company_2=Third-parties additional contacts/addresses and attributes -ImportDataset_company_3=Third-parties Bank accounts -ImportDataset_company_4=Third-parties Sales representatives (assign sales representatives/users to companies) -PriceLevel=Price Level -PriceLevelLabels=Price Level Labels -DeliveryAddress=Delivery address -AddAddress=Add address -SupplierCategory=Vendor category -JuridicalStatus200=Independent -DeleteFile=Delete file -ConfirmDeleteFile=Are you sure you want to delete this file? -AllocateCommercial=Assigned to sales representative -Organization=Organization -FiscalYearInformation=Fiscal Year -FiscalMonthStart=Starting month of the fiscal year -SocialNetworksInformation=Social networks +TE_STARTUP=መነሻ ነገር +TE_GROUP=ትልቅ ኩባንያ +TE_MEDIUM=መካከለኛ ኩባንያ +TE_ADMIN=መንግሥታዊ +TE_SMALL=አነስተኛ ኩባንያ +TE_RETAIL=ቸርቻሪ +TE_WHOLE=ጅምላ ሻጭ +TE_PRIVATE=የግል ግለሰብ +TE_OTHER=ሌላ +StatusProspect-1=አትገናኝ +StatusProspect0=በጭራሽ አልተገናኘም። +StatusProspect1=ለመገናኘት +StatusProspect2=በሂደት ላይ ያለ ግንኙነት +StatusProspect3=ግንኙነት ተከናውኗል +ChangeDoNotContact=ሁኔታውን ወደ 'አትገናኝ' ቀይር +ChangeNeverContacted=ሁኔታውን ወደ 'በፍፁም አልተገናኘም' ቀይር +ChangeToContact=ሁኔታውን ወደ 'መገናኘት' ቀይር +ChangeContactInProcess=ሁኔታውን ወደ 'በሂደት ላይ ያለ ግንኙነት' ቀይር +ChangeContactDone=ሁኔታውን ወደ 'እውቂያ ተከናውኗል' ቀይር +ProspectsByStatus=ተስፋዎች በሁኔታ +NoParentCompany=ምንም +ExportCardToFormat=ካርድ ወደ ቅርጸት ይላኩ። +ContactNotLinkedToCompany=እውቂያ ከማንኛውም ሶስተኛ ወገን ጋር አልተገናኘም። +DolibarrLogin=Dolibarr መግቢያ +NoDolibarrAccess=የዶሊባርር መዳረሻ የለም። +ExportDataset_company_1=የሶስተኛ ወገኖች (ኩባንያዎች / መሠረቶች / አካላዊ ሰዎች) እና ንብረታቸው +ExportDataset_company_2=እውቂያዎች እና ንብረቶቻቸው +ImportDataset_company_1=የሶስተኛ ወገኖች እና ንብረቶቻቸው +ImportDataset_company_2=የሶስተኛ ወገኖች ተጨማሪ እውቂያዎች / አድራሻዎች እና ባህሪያት +ImportDataset_company_3=የሶስተኛ ወገኖች የባንክ ሂሳቦች +ImportDataset_company_4=የሶስተኛ ወገን የሽያጭ ተወካዮች (የሽያጭ ተወካዮችን/ተጠቃሚዎችን ለኩባንያዎች ይመድቡ) +PriceLevel=የዋጋ ደረጃ +PriceLevelLabels=የዋጋ ደረጃ መለያዎች +DeliveryAddress=መድረሻ አድራሻ +AddAddress=አድራሻ ጨምር +SupplierCategory=የአቅራቢዎች ምድብ +JuridicalStatus200=ገለልተኛ +DeleteFile=ፋይል ሰርዝ +ConfirmDeleteFile=እርግጠኛ ነህ ይህን ፋይል %s? +AllocateCommercial=ለሽያጭ ተወካይ ተመድቧል +Organization=ድርጅት +FiscalYearInformation=የበጀት ዓመት +FiscalMonthStart=የበጀት ዓመቱ መጀመሪያ ወር +SocialNetworksInformation=ማህበራዊ አውታረ መረቦች SocialNetworksFacebookURL=Facebook URL -SocialNetworksTwitterURL=Twitter URL +SocialNetworksTwitterURL=የትዊተር ዩአርኤል SocialNetworksLinkedinURL=Linkedin URL SocialNetworksInstagramURL=Instagram URL SocialNetworksYoutubeURL=Youtube URL SocialNetworksGithubURL=Github URL -YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification. -YouMustCreateContactFirst=To be able to add email notifications, you must first define contacts with valid emails for the third party -ListSuppliersShort=List of Vendors -ListProspectsShort=List of Prospects -ListCustomersShort=List of Customers -ThirdPartiesArea=Third Parties/Contacts -LastModifiedThirdParties=Latest %s Third Parties which were modified -UniqueThirdParties=Total number of Third Parties -InActivity=Open -ActivityCeased=Closed -ThirdPartyIsClosed=Third party is closed -ProductsIntoElements=List of products/services mapped to %s -CurrentOutstandingBill=Current outstanding bill -OutstandingBill=Max. for outstanding bill -OutstandingBillReached=Max. for outstanding bill reached -OrderMinAmount=Minimum amount for order -MonkeyNumRefModelDesc=Return a number in the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequencial auto-incrementing number with no break and no return to 0. -LeopardNumRefModelDesc=The code is free. This code can be modified at any time. -ManagingDirectors=Manager(s) name (CEO, director, president...) -MergeOriginThirdparty=Duplicate third party (third party you want to delete) -MergeThirdparties=Merge third parties -ConfirmMergeThirdparties=Are you sure you want to merge the chosen third party with the current one? All linked objects (invoices, orders, ...) will be moved to the current third party, after which the chosen third party will be deleted. -ThirdpartiesMergeSuccess=Third parties have been merged -SaleRepresentativeLogin=Login of sales representative -SaleRepresentativeFirstname=First name of sales representative -SaleRepresentativeLastname=Last name of sales representative -ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted. -NewCustomerSupplierCodeProposed=Customer or Vendor code already used, a new code is suggested -KeepEmptyIfGenericAddress=Keep this field empty if this address is a generic address +YouMustAssignUserMailFirst=የኢሜል ማሳወቂያ ማከል ከመቻልዎ በፊት ለዚህ ተጠቃሚ ኢሜይል መፍጠር አለብዎት። +YouMustCreateContactFirst=የኢሜል ማሳወቂያዎችን ለመጨመር በመጀመሪያ ለሶስተኛ ወገን ትክክለኛ ኢሜይሎች ያላቸውን እውቂያዎች መግለፅ አለብዎት +ListSuppliersShort=የአቅራቢዎች ዝርዝር +ListProspectsShort=የተስፋዎች ዝርዝር +ListCustomersShort=የደንበኞች ዝርዝር +ThirdPartiesArea=የሶስተኛ ወገኖች/እውቂያዎች +LastModifiedThirdParties=የቅርብ ጊዜ %s የተሻሻሉ ሶስተኛ ወገኖች +UniqueThirdParties=የሶስተኛ ወገኖች ጠቅላላ ቁጥር +InActivity=ክፈት +ActivityCeased=ዝግ +ThirdPartyIsClosed=ሶስተኛ ወገን ተዘግቷል። +ProductsIntoElements=በ%s የተቀረጹ ምርቶች/አገልግሎቶች ዝርዝር +CurrentOutstandingBill=አሁን ያለ ክፍያ ሂሳብ +OutstandingBill=ከፍተኛ. ለላቀ ክፍያ +OutstandingBillReached=ከፍተኛ. ለደረሰው የላቀ ሂሳብ +OrderMinAmount=ለትእዛዝ ዝቅተኛው መጠን +MonkeyNumRefModelDesc=ቁጥርን በ%syymm-nnnn ለደንበኛው ኮድ እና %syymm-nnn ለአቅራቢው ኮድ yy ባለበት ቅርጸት ይመልሱ። አመት፣ ሚሜ ወር ነው እና nnn ምንም እረፍት የሌለው እና ወደ 0 የማይመለስ ተከታታይ በራስ-የሚጨምር ቁጥር ነው። +LeopardNumRefModelDesc=ኮዱ ነፃ ነው። ይህ ኮድ በማንኛውም ጊዜ ሊቀየር ይችላል። +ManagingDirectors=የአስተዳዳሪ(ዎች) ስም (ዋና ሥራ አስኪያጅ፣ ዳይሬክተር፣ ፕሬዚዳንት...) +MergeOriginThirdparty=የሶስተኛ ወገን ብዜት (መሰረዝ የሚፈልጉት ሶስተኛ ወገን) +MergeThirdparties=ሶስተኛ ወገኖችን አዋህድ +ConfirmMergeThirdparties=እርግጠኛ ነዎት የተመረጠውን ሶስተኛ አካል አሁን ካለው ጋር ማዋሃድ ይፈልጋሉ? ሁሉም የተገናኙ ነገሮች (ደረሰኞች, ትዕዛዞች, ...) ወደ የአሁኑ ሶስተኛ ወገን ይንቀሳቀሳሉ, ከዚያ በኋላ የተመረጠው ሶስተኛ አካል ይሰረዛል. +ThirdpartiesMergeSuccess=ሶስተኛ ወገኖች ተዋህደዋል +SaleRepresentativeLogin=የሽያጭ ተወካይ መግቢያ +SaleRepresentativeFirstname=የሽያጭ ተወካይ የመጀመሪያ ስም +SaleRepresentativeLastname=የሽያጭ ተወካይ የመጨረሻ ስም +ErrorThirdpartiesMerge=ሶስተኛ ወገኖችን ሲሰርዝ ስህተት ነበር። እባክዎን መዝገቡን ያረጋግጡ። ለውጦች ተመልሰዋል። +NewCustomerSupplierCodeProposed=የደንበኛ ወይም የአቅራቢ ኮድ አስቀድሞ ጥቅም ላይ ውሏል፣ አዲስ ኮድ ይጠቁማል +KeepEmptyIfGenericAddress=ይህ አድራሻ አጠቃላይ አድራሻ ከሆነ ይህንን መስክ ባዶ ያድርጉት #Imports -PaymentTypeCustomer=Payment Type - Customer -PaymentTermsCustomer=Payment Terms - Customer -PaymentTypeSupplier=Payment Type - Vendor -PaymentTermsSupplier=Payment Term - Vendor -PaymentTypeBoth=Payment Type - Customer and Vendor -MulticurrencyUsed=Use Multicurrency -MulticurrencyCurrency=Currency -InEEC=Europe (EEC) -RestOfEurope=Rest of Europe (EEC) -OutOfEurope=Out of Europe (EEC) -CurrentOutstandingBillLate=Current outstanding bill late -BecarefullChangeThirdpartyBeforeAddProductToInvoice=Be carefull, depending on your product price settings, you should change thirdparty before adding product to POS. +PaymentTypeCustomer=የክፍያ ዓይነት - ደንበኛ +PaymentTermsCustomer=የክፍያ ውሎች - ደንበኛ +PaymentTypeSupplier=የክፍያ ዓይነት - ሻጭ +PaymentTermsSupplier=የክፍያ ጊዜ - ሻጭ +PaymentTypeBoth=የክፍያ ዓይነት - ደንበኛ እና ሻጭ +MulticurrencyUsed=Multicurrency ይጠቀሙ +MulticurrencyCurrency=ምንዛሪ +InEEC=አውሮፓ (ኢኢሲ) +RestOfEurope=የተቀረው አውሮፓ (EEC) +OutOfEurope=ከአውሮፓ ውጪ (EEC) +CurrentOutstandingBillLate=የአሁኑ ያልተከፈለ ሂሳብ ዘግይቷል። +BecarefullChangeThirdpartyBeforeAddProductToInvoice=ይጠንቀቁ፣ እንደ የምርት ዋጋ ቅንብሮችዎ፣ ምርቱን ወደ POS ከማከልዎ በፊት ሶስተኛ ወገንን መቀየር አለብዎት። +EmailAlreadyExistsPleaseRewriteYourCompanyName=ኢሜይል አስቀድሞ አለ እባክዎ የኩባንያዎን ስም እንደገና ይፃፉ +TwoRecordsOfCompanyName=ለዚህ ኩባንያ ከአንድ በላይ መዝገብ አለ፣ እባክዎን የአጋርነት ጥያቄዎን ለማጠናቀቅ ያነጋግሩን። +CompanySection=የኩባንያው ክፍል +ShowSocialNetworks=ማህበራዊ አውታረ መረቦችን አሳይ +HideSocialNetworks=ማህበራዊ አውታረ መረቦችን ደብቅ +ExternalSystemID=የውጭ ስርዓት መታወቂያ +IDOfPaymentInAnExternalSystem=የመክፈያ ሁነታ መታወቂያ ወደ ውጫዊ ስርዓት (እንደ Stripe፣ Paypal፣ ...) +AADEWebserviceCredentials=ADE Webservice ምስክርነቶች +ThirdPartyMustBeACustomerToCreateBANOnStripe=የሶስተኛ ወገን የባንክ መረጃውን በ Stripe በኩል ለመፍጠር ደንበኛ መሆን አለበት። diff --git a/htdocs/langs/am_ET/compta.lang b/htdocs/langs/am_ET/compta.lang index 640a229b7f2..f486e6a4936 100644 --- a/htdocs/langs/am_ET/compta.lang +++ b/htdocs/langs/am_ET/compta.lang @@ -1,300 +1,315 @@ # Dolibarr language file - Source file is en_US - compta -MenuFinancial=Billing | Payment -TaxModuleSetupToModifyRules=Go to Taxes module setup to modify rules for calculation -TaxModuleSetupToModifyRulesLT=Go to Company setup to modify rules for calculation -OptionMode=Option for accountancy -OptionModeTrue=Option Incomes-Expenses -OptionModeVirtual=Option Claims-Debts -OptionModeTrueDesc=In this context, the turnover is calculated over payments (date of payments). The validity of the figures is assured only if the book-keeping is scrutinized through the input/output on the accounts via invoices. -OptionModeVirtualDesc=In this context, the turnover is calculated over invoices (date of validation). When these invoices are due, whether they have been paid or not, they are listed in the turnover output. -FeatureIsSupportedInInOutModeOnly=Feature only available in CREDITS-DEBTS accountancy mode (See Accountancy module configuration) -VATReportBuildWithOptionDefinedInModule=Amounts shown here are calculated using rules defined by Tax module setup. -LTReportBuildWithOptionDefinedInModule=Amounts shown here are calculated using rules defined by Company setup. -Param=Setup -RemainingAmountPayment=Amount payment remaining: -Account=Account -Accountparent=Parent account -Accountsparent=Parent accounts -Income=Income -Outcome=Expense -MenuReportInOut=Income / Expense -ReportInOut=Balance of income and expenses -ReportTurnover=Turnover invoiced -ReportTurnoverCollected=Turnover collected -PaymentsNotLinkedToInvoice=Payments not linked to any invoice, so not linked to any third party -PaymentsNotLinkedToUser=Payments not linked to any user -Profit=Profit -AccountingResult=Accounting result -BalanceBefore=Balance (before) -Balance=Balance -Debit=Debit -Credit=Credit -Piece=Accounting Doc. -AmountHTVATRealReceived=Net collected -AmountHTVATRealPaid=Net paid -VATToPay=Tax sales -VATReceived=Tax received -VATToCollect=Tax purchases -VATSummary=Tax monthly -VATBalance=Tax Balance -VATPaid=Tax paid -LT1Summary=Tax 2 summary -LT2Summary=Tax 3 summary -LT1SummaryES=RE Balance -LT2SummaryES=IRPF Balance -LT1SummaryIN=CGST Balance -LT2SummaryIN=SGST Balance -LT1Paid=Tax 2 paid -LT2Paid=Tax 3 paid -LT1PaidES=RE Paid -LT2PaidES=IRPF Paid -LT1PaidIN=CGST Paid -LT2PaidIN=SGST Paid -LT1Customer=Tax 2 sales -LT1Supplier=Tax 2 purchases -LT1CustomerES=RE sales -LT1SupplierES=RE purchases -LT1CustomerIN=CGST sales -LT1SupplierIN=CGST purchases -LT2Customer=Tax 3 sales -LT2Supplier=Tax 3 purchases -LT2CustomerES=IRPF sales -LT2SupplierES=IRPF purchases -LT2CustomerIN=SGST sales -LT2SupplierIN=SGST purchases -VATCollected=VAT collected -StatusToPay=To pay -SpecialExpensesArea=Area for all special payments -VATExpensesArea=Area for all TVA payments -SocialContribution=Social or fiscal tax -SocialContributions=Social or fiscal taxes -SocialContributionsDeductibles=Deductible social or fiscal taxes -SocialContributionsNondeductibles=Nondeductible social or fiscal taxes -DateOfSocialContribution=Date of social or fiscal tax -LabelContrib=Label contribution -TypeContrib=Type contribution -MenuSpecialExpenses=Special expenses -MenuTaxAndDividends=Taxes and dividends -MenuSocialContributions=Social/fiscal taxes -MenuNewSocialContribution=New social/fiscal tax -NewSocialContribution=New social/fiscal tax -AddSocialContribution=Add social/fiscal tax -ContributionsToPay=Social/fiscal taxes to pay -AccountancyTreasuryArea=Billing and payment area -NewPayment=New payment -PaymentCustomerInvoice=Customer invoice payment -PaymentSupplierInvoice=vendor invoice payment -PaymentSocialContribution=Social/fiscal tax payment -PaymentVat=VAT payment -AutomaticCreationPayment=Automatically record the payment -ListPayment=List of payments -ListOfCustomerPayments=List of customer payments -ListOfSupplierPayments=List of vendor payments -DateStartPeriod=Date start period -DateEndPeriod=Date end period -newLT1Payment=New tax 2 payment -newLT2Payment=New tax 3 payment -LT1Payment=Tax 2 payment -LT1Payments=Tax 2 payments -LT2Payment=Tax 3 payment -LT2Payments=Tax 3 payments -newLT1PaymentES=New RE payment -newLT2PaymentES=New IRPF payment -LT1PaymentES=RE Payment -LT1PaymentsES=RE Payments -LT2PaymentES=IRPF Payment -LT2PaymentsES=IRPF Payments -VATPayment=Sales tax payment -VATPayments=Sales tax payments -VATDeclarations=VAT declarations -VATDeclaration=VAT declaration -VATRefund=Sales tax refund -NewVATPayment=New sales tax payment -NewLocalTaxPayment=New tax %s payment -Refund=Refund -SocialContributionsPayments=Social/fiscal taxes payments -ShowVatPayment=Show VAT payment -TotalToPay=Total to pay -BalanceVisibilityDependsOnSortAndFilters=Balance is visible in this list only if table is sorted on %s and filtered on 1 bank account (with no other filters) -CustomerAccountancyCode=Customer accounting code -SupplierAccountancyCode=Vendor accounting code -CustomerAccountancyCodeShort=Cust. account. code -SupplierAccountancyCodeShort=Sup. account. code -AccountNumber=Account number -NewAccountingAccount=New account -Turnover=Turnover invoiced -TurnoverCollected=Turnover collected -SalesTurnoverMinimum=Minimum turnover -ByExpenseIncome=By expenses & incomes -ByThirdParties=By third parties -ByUserAuthorOfInvoice=By invoice author -CheckReceipt=Check deposit -CheckReceiptShort=Check deposit -LastCheckReceiptShort=Latest %s check receipts -NewCheckReceipt=New discount -NewCheckDeposit=New check deposit -NewCheckDepositOn=Create receipt for deposit on account: %s -NoWaitingChecks=No checks awaiting deposit. -DateChequeReceived=Check receiving date -NbOfCheques=No. of checks -PaySocialContribution=Pay a social/fiscal tax -PayVAT=Pay a VAT declaration -PaySalary=Pay a salary card -ConfirmPaySocialContribution=Are you sure you want to classify this social or fiscal tax as paid ? -ConfirmPayVAT=Are you sure you want to classify this VAT declaration as paid ? -ConfirmPaySalary=Are you sure you want to classify this salary card as paid? -DeleteSocialContribution=Delete a social or fiscal tax payment -DeleteVAT=Delete a VAT declaration -DeleteSalary=Delete a salary card -ConfirmDeleteSocialContribution=Are you sure you want to delete this social/fiscal tax payment ? -ConfirmDeleteVAT=Are you sure you want to delete this VAT declaration ? -ConfirmDeleteSalary=Are you sure you want to delete this salary? -ExportDataset_tax_1=Social and fiscal taxes and payments -CalcModeVATDebt=Mode %sVAT on commitment accounting%s. +MenuFinancial=ማስከፈል | ክፍያ +TaxModuleSetupToModifyRules=የስሌት ደንቦችን ለማሻሻል ወደ የግብር ሞዱል ማዋቀር ይሂዱ +TaxModuleSetupToModifyRulesLT=የስሌት ደንቦችን ለማሻሻል ወደ የኩባንያ ማዋቀር ይሂዱ +OptionMode=ለሂሳብ አያያዝ አማራጭ +OptionModeTrue=አማራጭ ገቢዎች-ወጪዎች +OptionModeVirtual=አማራጭ የይገባኛል ጥያቄዎች-ዕዳዎች +OptionModeTrueDesc=በዚህ ዐውደ-ጽሑፍ, ማዞሪያው በክፍያዎች (የክፍያ ቀን) ላይ ይሰላል. የቁጥሮቹ ትክክለኛነት የሚረጋገጠው የመጽሃፍ ማከማቻው በሂሳብ ደረሰኞች ላይ ባለው ግብአት/ውጤት ከተመረመረ ብቻ ነው። +OptionModeVirtualDesc=በዚህ አውድ፣ ማዞሪያው በደረሰኞች (የተረጋገጠበት ቀን) ላይ ይሰላል። እነዚህ ደረሰኞች ሲከፈሉ፣ተከፈሉም አልሆኑ፣በማዞሪያው ውጤት ውስጥ ተዘርዝረዋል። +FeatureIsSupportedInInOutModeOnly=ባህሪ የሚገኘው በCREDITS-DEBTS የሒሳብ አያያዝ ሁነታ ላይ ብቻ ነው (የአካውንቲንግ ሞጁል ውቅረትን ይመልከቱ) +VATReportBuildWithOptionDefinedInModule=እዚህ የሚታዩት መጠኖች የሚሰሉት በታክስ ሞጁል ማዋቀር የተገለጹ ህጎችን በመጠቀም ነው። +LTReportBuildWithOptionDefinedInModule=እዚህ የሚታዩት መጠኖች በኩባንያው ማዋቀር የተገለጹ ደንቦችን በመጠቀም ይሰላሉ. +Param=አዘገጃጀት +RemainingAmountPayment=የሚቀረው የክፍያ መጠን፡- +Account=መለያ +Accountparent=የወላጅ መለያ +Accountsparent=የወላጅ መለያዎች +Income=ገቢ +Outcome=ወጪ +MenuReportInOut=ገቢ / ወጪ +ReportInOut=የገቢ እና ወጪዎች ሚዛን +ReportTurnover=የማዞሪያ ደረሰኝ ተከፍሏል። +ReportTurnoverCollected=ማዞሪያ ተሰብስቧል +PaymentsNotLinkedToInvoice=ክፍያዎች ከማንኛውም ደረሰኝ ጋር አልተገናኙም፣ ስለዚህ ከማንኛውም ሶስተኛ ወገን ጋር አልተገናኙም። +PaymentsNotLinkedToUser=ክፍያዎች ከማንም ተጠቃሚ ጋር አልተገናኙም። +Profit=ትርፍ +AccountingResult=የሂሳብ አያያዝ ውጤት +BalanceBefore=ሚዛን (በፊት) +Balance=ሚዛን +Debit=ዴቢት +Credit=ክሬዲት +AccountingDebit=ዴቢት +AccountingCredit=ክሬዲት +Piece=የሂሳብ አያያዝ ሰነድ. +AmountHTVATRealReceived=የተጣራ ተሰብስቧል +AmountHTVATRealPaid=የተጣራ ክፍያ +VATToPay=የግብር ሽያጭ +VATReceived=ግብር ተቀብሏል። +VATToCollect=የግብር ግዢዎች +VATSummary=ግብር ወርሃዊ +VATBalance=የግብር ሒሳብ +VATPaid=ግብር ተከፍሏል። +LT1Summary=የግብር 2 ማጠቃለያ +LT2Summary=የግብር 3 ማጠቃለያ +LT1SummaryES=የዳግም ሚዛን +LT2SummaryES=የ IRPF ሚዛን +LT1SummaryIN=CGST ሚዛን +LT2SummaryIN=SGST ሚዛን +LT1Paid=ግብር 2 ተከፍሏል። +LT2Paid=ግብር 3 ተከፍሏል። +LT1PaidES=እንደገና ተከፍሏል። +LT2PaidES=IRPF ተከፍሏል። +LT1PaidIN=CGST ተከፍሏል። +LT2PaidIN=SGST ተከፍሏል። +LT1Customer=ግብር 2 ሽያጭ +LT1Supplier=ግብር 2 ግዢዎች +LT1CustomerES=RE ሽያጭ +LT1SupplierES=RE ግዢዎች +LT1CustomerIN=የ CGST ሽያጭ +LT1SupplierIN=የCGST ግዢዎች +LT2Customer=ግብር 3 ሽያጭ +LT2Supplier=ግብር 3 ግዢዎች +LT2CustomerES=የ IRPF ሽያጭ +LT2SupplierES=የ IRPF ግዢዎች +LT2CustomerIN=SGST ሽያጮች +LT2SupplierIN=የ SGST ግዢዎች +VATCollected=ተ.እ.ታ ተሰብስቧል +StatusToPay=መክፈል +SpecialExpensesArea=ለሁሉም ልዩ ክፍያዎች አካባቢ +VATExpensesArea=ለሁሉም የTVA ክፍያዎች አካባቢ +SocialContribution=ማህበራዊ ወይም ፊስካል ታክስ +SocialContributions=ማህበራዊ ወይም የፊስካል ግብሮች +SocialContributionsDeductibles=የሚቀነሱ ማህበራዊ ወይም ፊስካል ታክሶች +SocialContributionsNondeductibles=የማይቀነሱ ማህበራዊ ወይም ፊስካል ታክሶች +DateOfSocialContribution=የማህበራዊ ወይም የፊስካል ታክስ ቀን +LabelContrib=መሰየሚያ አስተዋጽዖ +TypeContrib=መዋጮ ይተይቡ +MenuSpecialExpenses=ልዩ ወጪዎች +MenuTaxAndDividends=ግብሮች እና ክፍፍሎች +MenuSocialContributions=ማህበራዊ/የገንዘብ ታክስ +MenuNewSocialContribution=አዲስ የማህበራዊ/የፊስካል ታክስ +NewSocialContribution=አዲስ ማህበራዊ/የፊስካል ታክስ +AddSocialContribution=ማህበራዊ/የፋይስካል ታክስን ጨምር +ContributionsToPay=ለመክፈል የማህበራዊ/የፋይናንስ ታክስ +AccountancyTreasuryArea=የሂሳብ አያያዝ አካባቢ +InvoicesArea=የክፍያ እና የክፍያ ቦታ +NewPayment=አዲስ ክፍያ +PaymentCustomerInvoice=የደንበኛ ደረሰኝ ክፍያ +PaymentSupplierInvoice=የሻጭ ደረሰኝ ክፍያ +PaymentSocialContribution=የማህበራዊ/የፋይናንስ ታክስ ክፍያ +PaymentVat=የተጨማሪ እሴት ታክስ ክፍያ +AutomaticCreationPayment=ክፍያውን በራስ-ሰር ይመዝግቡ +ListPayment=የክፍያዎች ዝርዝር +ListOfCustomerPayments=የደንበኛ ክፍያዎች ዝርዝር +ListOfSupplierPayments=የአቅራቢ ክፍያዎች ዝርዝር +DateStartPeriod=የሚጀምርበት ቀን +DateEndPeriod=ቀን የሚያበቃበት ጊዜ +newLT1Payment=አዲስ ግብር 2 ክፍያ +newLT2Payment=አዲስ ግብር 3 ክፍያ +LT1Payment=ግብር 2 ክፍያ +LT1Payments=ግብር 2 ክፍያዎች +LT2Payment=ግብር 3 ክፍያ +LT2Payments=ግብር 3 ክፍያዎች +newLT1PaymentES=አዲስ የRE ክፍያ +newLT2PaymentES=አዲስ የIRPF ክፍያ +LT1PaymentES=RE ክፍያ +LT1PaymentsES=RE ክፍያዎች +LT2PaymentES=የIRPF ክፍያ +LT2PaymentsES=የIRPF ክፍያዎች +VATPayment=የሽያጭ ታክስ ክፍያ +VATPayments=የሽያጭ ታክስ ክፍያዎች +VATDeclarations=የተ.እ.ታ መግለጫዎች +VATDeclaration=የተጨማሪ እሴት ታክስ መግለጫ +VATRefund=የሽያጭ ታክስ ተመላሽ +NewVATPayment=አዲስ የሽያጭ ታክስ ክፍያ +NewLocalTaxPayment=አዲስ ግብር %s ክፍያ +Refund=ተመላሽ ገንዘብ +SocialContributionsPayments=የማህበራዊ/የፋይናንስ ታክስ ክፍያዎች +ShowVatPayment=የተ.እ.ታ ክፍያን አሳይ +TotalToPay=የሚከፈልበት ጠቅላላ +BalanceVisibilityDependsOnSortAndFilters=ቀሪ ሂሳብ በዚህ ዝርዝር ውስጥ የሚታየው ሠንጠረዥ በ%s ላይ ከተደረደረ እና በ1 የባንክ አካውንት ላይ (ሌላ ማጣሪያ ከሌለው) ከተጣራ ብቻ ነው። +CustomerAccountancyCode=የደንበኛ የሂሳብ ኮድ +SupplierAccountancyCode=የአቅራቢ የሂሳብ ኮድ +CustomerAccountancyCodeShort=ኩስት መለያ ኮድ +SupplierAccountancyCodeShort=ሱፕ. መለያ ኮድ +AccountNumber=መለያ ቁጥር +NewAccountingAccount=አዲስ መለያ +Turnover=የማዞሪያ ደረሰኝ ተከፍሏል። +TurnoverCollected=ማዞሪያ ተሰብስቧል +SalesTurnoverMinimum=ዝቅተኛ ማዞሪያ +ByExpenseIncome=በወጪ እና ገቢ +ByThirdParties=በሶስተኛ ወገኖች +ByUserAuthorOfInvoice=በክፍያ መጠየቂያ ደራሲ +CheckReceipt=የተቀማጭ ወረቀት +CheckReceiptShort=የተቀማጭ ወረቀት +LastCheckReceiptShort=የቅርብ ጊዜ %s የተቀማጭ ወረቀቶች +LastPaymentForDepositShort=የቅርብ ጊዜ %s %s የተቀማጭ ወረቀቶች +NewCheckReceipt=አዲስ ቅናሽ +NewCheckDeposit=አዲስ የተቀማጭ ወረቀት +NewCheckDepositOn=በሒሳብ ላይ ተቀማጭ የሚሆን ደረሰኝ ይፍጠሩ፡ %s +NoWaitingChecks=ምንም ቼኮች ተቀማጭ የሚጠብቁ። +NoWaitingPaymentForDeposit=ምንም የ%s ክፍያ ተቀማጭ የሚጠብቅ። +DateChequeReceived=የመቀበያ ቀንን ያረጋግጡ +DatePaymentReceived=የሰነድ መቀበያ ቀን +NbOfCheques=የቼኮች ቁጥር +PaySocialContribution=ማህበራዊ/ፋይስካል ታክስ ይክፈሉ። +PayVAT=የተጨማሪ እሴት ታክስ መግለጫ ይክፈሉ። +PaySalary=የደመወዝ ካርድ ይክፈሉ +ConfirmPaySocialContribution=እርግጠኛ ነዎት ይህን ማህበራዊ ወይም ፊስካል ታክስ በሚከፈልበት መከፋፈል ይፈልጋሉ? +ConfirmPayVAT=እርግጠኛ ነዎት ይህን የተጨማሪ እሴት ታክስ መግለጫ እንደተከፈለ መከፋፈል ይፈልጋሉ? +ConfirmPaySalary=እርግጠኛ ነዎት ይህን የደመወዝ ካርድ በሚከፈልበት መከፋፈል ይፈልጋሉ? +DeleteSocialContribution=የማህበራዊ ወይም የፊስካል ታክስ ክፍያን ሰርዝ +DeleteVAT=የተጨማሪ እሴት ታክስ መግለጫን ሰርዝ +DeleteSalary=የደመወዝ ካርድ ሰርዝ +DeleteVariousPayment=የተለየ ክፍያ ሰርዝ +ConfirmDeleteSocialContribution=እርግጠኛ ነዎት ይህን ማህበራዊ/ፋይስካል ታክስ ክፍያ መሰረዝ ይፈልጋሉ? +ConfirmDeleteVAT=እርግጠኛ ነዎት ይህን የቫት መግለጫ መሰረዝ ይፈልጋሉ? +ConfirmDeleteSalary=እርግጠኛ ነዎት ይህን ደሞዝ መሰረዝ ይፈልጋሉ? +ConfirmDeleteVariousPayment=እርግጠኛ ነዎት ይህን የተለያየ ክፍያ መሰረዝ ይፈልጋሉ? +ExportDataset_tax_1=ማህበራዊ እና የፊስካል ግብሮች እና ክፍያዎች +CalcModeVATDebt=ሁነታ %sተ.እ.ታ በቁርጠኝነት ሂሳብ%s=span> ። CalcModeVATEngagement=Mode %sVAT on incomes-expenses%s. -CalcModeDebt=Analysis of known recorded documents even if they are not yet accounted in ledger. -CalcModeEngagement=Analysis of known recorded payments, even if they are not yet accounted in Ledger. -CalcModeBookkeeping=Analysis of data journalized in Bookkeeping Ledger table. +CalcModeDebt=የታወቁ የተመዘገቡ ሰነዶች ትንተና +CalcModeEngagement=የታወቁ የተመዘገቡ ክፍያዎች ትንተና +CalcModePayment=Analysis of known recorded payments +CalcModeBookkeeping=በመፅሃፍ መዝገብ ሠንጠረዥ ውስጥ የጋዜጣ መረጃ ትንተና። +CalcModeNoBookKeeping=ምንም እንኳን በሌድገር ውስጥ ገና ያልተመዘገቡ ቢሆኑም CalcModeLT1= Mode %sRE on customer invoices - suppliers invoices%s -CalcModeLT1Debt=Mode %sRE on customer invoices%s -CalcModeLT1Rec= Mode %sRE on suppliers invoices%s +CalcModeLT1Debt=ሁነታ %sበደንበኛ ደረሰኞች ላይ RE%s=0ecb2ec87f49fz0 = > +CalcModeLT1Rec= ሁነታ %sRE በአቅራቢዎች ደረሰኞች ላይb0ecb2> CalcModeLT2= Mode %sIRPF on customer invoices - suppliers invoices%s -CalcModeLT2Debt=Mode %sIRPF on customer invoices%s -CalcModeLT2Rec= Mode %sIRPF on suppliers invoices%s -AnnualSummaryDueDebtMode=Balance of income and expenses, annual summary -AnnualSummaryInputOutputMode=Balance of income and expenses, annual summary -AnnualByCompanies=Balance of income and expenses, by predefined groups of account +CalcModeLT2Debt=ሁነታ %sIRPF በደንበኛ ደረሰኞች ላይ%s=0ecb2ec87f49fz0
+CalcModeLT2Rec= ሁነታ %sIRPF በአቅራቢዎች ደረሰኞችb0ecb2>
+AnnualSummaryDueDebtMode=የገቢ እና ወጪዎች ሚዛን, አመታዊ ማጠቃለያ +AnnualSummaryInputOutputMode=የገቢ እና ወጪዎች ሚዛን, አመታዊ ማጠቃለያ +AnnualByCompanies=የገቢ እና ወጪዎች ሚዛን, አስቀድሞ በተገለጹ የሂሳብ ቡድኖች AnnualByCompaniesDueDebtMode=Balance of income and expenses, detail by predefined groups, mode %sClaims-Debts%s said Commitment accounting. AnnualByCompaniesInputOutputMode=Balance of income and expenses, detail by predefined groups, mode %sIncomes-Expenses%s said cash accounting. -SeeReportInInputOutputMode=See %sanalysis of payments%s for a calculation based on recorded payments made even if they are not yet accounted in Ledger -SeeReportInDueDebtMode=See %sanalysis of recorded documents%s for a calculation based on known recorded documents even if they are not yet accounted in Ledger -SeeReportInBookkeepingMode=See %sanalysis of bookeeping ledger table%s for a report based on Bookkeeping Ledger table -RulesAmountWithTaxIncluded=- Amounts shown are with all taxes included -RulesAmountWithTaxExcluded=- Amounts of invoices shown are with all taxes excluded -RulesResultDue=- It includes all invoices, expenses, VAT, donations, salaries, whether they are paid or not.
- It is based on the billing date of invoices and on the due date for expenses or tax payments. For salaries, the date of end of period is used. -RulesResultInOut=- It includes the real payments made on invoices, expenses, VAT and salaries.
- It is based on the payment dates of the invoices, expenses, VAT, donations and salaries. -RulesCADue=- It includes the customer's due invoices whether they are paid or not.
- It is based on the billing date of these invoices.
-RulesCAIn=- It includes all the effective payments of invoices received from customers.
- It is based on the payment date of these invoices
-RulesCATotalSaleJournal=It includes all credit lines from the Sale journal. -RulesSalesTurnoverOfIncomeAccounts=It includes (credit - debit) of lines for product accounts in group INCOME -RulesAmountOnInOutBookkeepingRecord=It includes record in your Ledger with accounting accounts that has the group "EXPENSE" or "INCOME" -RulesResultBookkeepingPredefined=It includes record in your Ledger with accounting accounts that has the group "EXPENSE" or "INCOME" -RulesResultBookkeepingPersonalized=It show record in your Ledger with accounting accounts grouped by personalized groups -SeePageForSetup=See menu %s for setup -DepositsAreNotIncluded=- Down payment invoices are not included -DepositsAreIncluded=- Down payment invoices are included -LT1ReportByMonth=Tax 2 report by month -LT2ReportByMonth=Tax 3 report by month -LT1ReportByCustomers=Report tax 2 by third party -LT2ReportByCustomers=Report tax 3 by third party -LT1ReportByCustomersES=Report by third party RE -LT2ReportByCustomersES=Report by third party IRPF -VATReport=Sales tax report -VATReportByPeriods=Sales tax report by period -VATReportByMonth=Sales tax report by month -VATReportByRates=Sales tax report by rate -VATReportByThirdParties=Sales tax report by third party -VATReportByCustomers=Sales tax report by customer -VATReportByCustomersInInputOutputMode=Report by the customer VAT collected and paid -VATReportByQuartersInInputOutputMode=Report by Sales tax rate of the tax collected and paid -VATReportShowByRateDetails=Show details of this rate -LT1ReportByQuarters=Report tax 2 by rate -LT2ReportByQuarters=Report tax 3 by rate -LT1ReportByQuartersES=Report by RE rate -LT2ReportByQuartersES=Report by IRPF rate +SeeReportInInputOutputMode=%sየክፍያዎች ትንተና%s='span>የተመዘገቡ ክፍያዎች ላይ ለተመሰረተ ስሌት ምንም እንኳን በሌዘር ውስጥ ባይሆንም እስካሁን አልተደረጉም። +SeeReportInDueDebtMode=%sየተመዘገቡ ሰነዶችን ትንተና ይመልከቱ%s='span> በታወቀ የተመዘገቡ ሰነዶችሌሎች ውስጥ ባይሆኑም እንኳ ለማስላት +SeeReportInBookkeepingMode=See %sanalysis of bookkeeping ledger table%s for a report based on Bookkeeping Ledger table +RulesAmountWithTaxIncluded=- የሚታዩት መጠኖች ከሁሉም ግብሮች ጋር ተካትተዋል። +RulesAmountWithTaxExcluded=- የታዩት የክፍያ መጠየቂያዎች መጠን ከሁሉም ግብሮች የተገለሉ ናቸው። +RulesResultDue=- ሁሉንም ደረሰኞች፣ ወጭዎች፣ ተ.እ.ታ፣ ልገሳዎች፣ ደሞዞች፣ የሚከፈሉም ይሁኑ ያልተከፈሉ ያካትታል።
- ደረሰኞች በሚከፈልበት ቀን እና በክፍያ ቀን ላይ የተመሰረተ ነው. ወጪዎች ወይም የግብር ክፍያዎች. ለደሞዝ, ጊዜው የሚያበቃበት ቀን ጥቅም ላይ ይውላል. +RulesResultInOut=- በክፍያ መጠየቂያ ደረሰኞች፣ ወጭዎች፣ ተ.እ.ታ እና ደሞዞች ላይ የተደረጉ እውነተኛ ክፍያዎችን ያካትታል።
- በክፍያ መጠየቂያዎች፣ ወጪዎች፣ ተ.እ.ታ፣ ልገሳዎች እና ደሞዞች መክፈያ ቀናት ላይ የተመሰረተ ነው። +RulesCADue=- የተከፈለም ሆነ ያልተከፈለ የደንበኛ ክፍያ መጠየቂያ ደረሰኞችን ያጠቃልላል።
- በነዚህ ደረሰኞች የመክፈያ ቀን ላይ የተመሰረተ ነው።
+RulesCAIn=- ከደንበኞች የተቀበሉትን የክፍያ መጠየቂያዎች ሁሉንም ውጤታማ ክፍያዎች ያካትታል።
- በነዚህ ደረሰኞች የክፍያ ቀን ላይ የተመሰረተ ነው
+RulesCATotalSaleJournal=ከሽያጭ መጽሔት ሁሉንም የብድር መስመሮች ያካትታል። +RulesSalesTurnoverOfIncomeAccounts=በቡድን ገቢ ውስጥ ለምርት መለያዎች (ክሬዲት - ዴቢት) መስመሮችን ያካትታል +RulesAmountOnInOutBookkeepingRecord=በሂሳብ መዝገብዎ ውስጥ "EXPENSE" ወይም "ገቢ" ቡድን ካለው የሂሳብ መዝገብ ጋር መዝገብ ያካትታል +RulesResultBookkeepingPredefined=በሂሳብ መዝገብዎ ውስጥ "EXPENSE" ወይም "ገቢ" ቡድን ካለው የሂሳብ መዝገብ ጋር መዝገብ ያካትታል +RulesResultBookkeepingPersonalized=በሂሳብ መዝገብህ ውስጥ መዝገቡን ያሳያል በግል በተበጁ ቡድኖች የተሰባሰበ +SeePageForSetup=ለማዋቀር ሜኑ %s ይመልከቱ +DepositsAreNotIncluded=- የቅድሚያ ክፍያ ደረሰኞች አልተካተቱም። +DepositsAreIncluded=- የቅድሚያ ክፍያ መጠየቂያዎች ተካትተዋል +LT1ReportByMonth=የግብር 2 ሪፖርት በወር +LT2ReportByMonth=የግብር 3 ሪፖርት በወር +LT1ReportByCustomers=ግብር 2 በሶስተኛ ወገን ሪፖርት ያድርጉ +LT2ReportByCustomers=ግብር 3 በሶስተኛ ወገን ሪፖርት ያድርጉ +LT1ReportByCustomersES=በሶስተኛ ወገን RE ሪፖርት +LT2ReportByCustomersES=በሶስተኛ ወገን IRPF ሪፖርት ያድርጉ +VATReport=የሽያጭ ታክስ ሪፖርት +VATReportByPeriods=የሽያጭ ታክስ ሪፖርት በየወቅቱ +VATReportByMonth=የሽያጭ ታክስ ሪፖርት በወር +VATReportByRates=የሽያጭ ታክስ ሪፖርት በተመጣጣኝ ዋጋ +VATReportByThirdParties=የሶስተኛ ወገን የሽያጭ ታክስ ሪፖርት +VATReportByCustomers=የሽያጭ ታክስ ሪፖርት በደንበኛ +VATReportByCustomersInInputOutputMode=የተሰበሰበ እና የተከፈለ የደንበኛ ተ.እ.ታ ሪፖርት ያድርጉ +VATReportByQuartersInInputOutputMode=የተሰበሰበው እና የተከፈለው የታክስ መጠን በሽያጭ ታክስ ሪፖርት ያድርጉ +VATReportShowByRateDetails=የዚህን ተመን ዝርዝሮች አሳይ +LT1ReportByQuarters=ታክስ 2 በታሪፍ ሪፖርት አድርግ +LT2ReportByQuarters=ግብር 3 በታሪፍ ሪፖርት ያድርጉ +LT1ReportByQuartersES=በ RE ተመን ሪፖርት ያድርጉ +LT2ReportByQuartersES=በ IRPF መጠን ሪፖርት ያድርጉ SeeVATReportInInputOutputMode=See report %sVAT collection%s for a standard calculation SeeVATReportInDueDebtMode=See report %sVAT on debit%s for a calculation with an option on the invoicing -RulesVATInServices=- For services, the report includes the VAT of payments actually received or paid on the basis of the date of payment. -RulesVATInProducts=- For material assets, the report includes the VAT on the basis of the date of payment. -RulesVATDueServices=- For services, the report includes VAT of due invoices, paid or not, based on the invoice date. -RulesVATDueProducts=- For material assets, the report includes the VAT of due invoices, based on the invoice date. -OptionVatInfoModuleComptabilite=Note: For material assets, it should use the date of delivery to be more fair. -ThisIsAnEstimatedValue=This is a preview, based on business events and not from the final ledger table, so final results may differ from this preview values -PercentOfInvoice=%%/invoice -NotUsedForGoods=Not used on goods -ProposalStats=Statistics on proposals -OrderStats=Statistics on orders -InvoiceStats=Statistics on bills -Dispatch=Dispatching -Dispatched=Dispatched -ToDispatch=To dispatch -ThirdPartyMustBeEditAsCustomer=Third party must be defined as a customer -SellsJournal=Sales Journal -PurchasesJournal=Purchases Journal -DescSellsJournal=Sales Journal -DescPurchasesJournal=Purchases Journal -CodeNotDef=Not defined -WarningDepositsNotIncluded=Down payment invoices are not included in this version with this accountancy module. -DatePaymentTermCantBeLowerThanObjectDate=Payment term date can't be lower than object date. -Pcg_version=Chart of accounts models -Pcg_type=Pcg type -Pcg_subtype=Pcg subtype -InvoiceLinesToDispatch=Invoice lines to dispatch -ByProductsAndServices=By product and service -RefExt=External ref -ToCreateAPredefinedInvoice=To create a template invoice, create a standard invoice, then, without validating it, click on button "%s". -LinkedOrder=Link to order -Mode1=Method 1 -Mode2=Method 2 -CalculationRuleDesc=To calculate total VAT, there is two methods:
Method 1 is rounding vat on each line, then summing them.
Method 2 is summing all vat on each line, then rounding result.
Final result may differs from few cents. Default mode is mode %s. -CalculationRuleDescSupplier=According to vendor, choose appropriate method to apply same calculation rule and get same result expected by your vendor. -TurnoverPerProductInCommitmentAccountingNotRelevant=The report of Turnover collected per product is not available. This report is only available for turnover invoiced. -TurnoverPerSaleTaxRateInCommitmentAccountingNotRelevant=The report of Turnover collected per sale tax rate is not available. This report is only available for turnover invoiced. -CalculationMode=Calculation mode -AccountancyJournal=Accounting code journal -ACCOUNTING_VAT_SOLD_ACCOUNT=Accounting account by default for VAT on sales (used if not defined on VAT dictionary setup) -ACCOUNTING_VAT_BUY_ACCOUNT=Accounting account by default for VAT on purchases (used if not defined on VAT dictionary setup) -ACCOUNTING_VAT_PAY_ACCOUNT=Accounting account by default for paying VAT -ACCOUNTING_ACCOUNT_CUSTOMER=Accounting account used for customer third parties -ACCOUNTING_ACCOUNT_CUSTOMER_Desc=The dedicated accounting account defined on third party card will be used for Subledger accounting only. This one will be used for General Ledger and as default value of Subledger accounting if dedicated customer accounting account on third party is not defined. -ACCOUNTING_ACCOUNT_SUPPLIER=Accounting account used for vendor third parties -ACCOUNTING_ACCOUNT_SUPPLIER_Desc=The dedicated accounting account defined on third party card will be used for Subledger accounting only. This one will be used for General Ledger and as default value of Subledger accounting if dedicated vendor accounting account on third party is not defined. -ConfirmCloneTax=Confirm the clone of a social/fiscal tax -ConfirmCloneVAT=Confirm the clone of a VAT declaration -ConfirmCloneSalary=Confirm the clone of a salary -CloneTaxForNextMonth=Clone it for next month -SimpleReport=Simple report -AddExtraReport=Extra reports (add foreign and national customer report) -OtherCountriesCustomersReport=Foreign customers report -BasedOnTwoFirstLettersOfVATNumberBeingDifferentFromYourCompanyCountry=Based on the two first letters of the VAT number being different from your own company's country code -SameCountryCustomersWithVAT=National customers report -BasedOnTwoFirstLettersOfVATNumberBeingTheSameAsYourCompanyCountry=Based on the two first letters of the VAT number being the same as your own company's country code -LinkedFichinter=Link to an intervention -ImportDataset_tax_contrib=Social/fiscal taxes -ImportDataset_tax_vat=Vat payments -ErrorBankAccountNotFound=Error: Bank account not found -FiscalPeriod=Accounting period -ListSocialContributionAssociatedProject=List of social contributions associated with the project -DeleteFromCat=Remove from accounting group -AccountingAffectation=Accounting assignment -LastDayTaxIsRelatedTo=Last day of period the tax is related to -VATDue=Sale tax claimed -ClaimedForThisPeriod=Claimed for the period -PaidDuringThisPeriod=Paid for this period -PaidDuringThisPeriodDesc=This is the sum of all payments linked to VAT declarations which have an end-of-period date in the selected date range -ByVatRate=By sale tax rate -TurnoverbyVatrate=Turnover invoiced by sale tax rate -TurnoverCollectedbyVatrate=Turnover collected by sale tax rate -PurchasebyVatrate=Purchase by sale tax rate -LabelToShow=Short label -PurchaseTurnover=Purchase turnover -PurchaseTurnoverCollected=Purchase turnover collected -RulesPurchaseTurnoverDue=- It includes the supplier's due invoices whether they are paid or not.
- It is based on the invoice date of these invoices.
-RulesPurchaseTurnoverIn=- It includes all the effective payments of invoices done to suppliers.
- It is based on the payment date of these invoices
-RulesPurchaseTurnoverTotalPurchaseJournal=It includes all debit lines from the purchase journal. -RulesPurchaseTurnoverOfExpenseAccounts=It includes (debit - credit) of lines for product accounts in group EXPENSE -ReportPurchaseTurnover=Purchase turnover invoiced -ReportPurchaseTurnoverCollected=Purchase turnover collected -IncludeVarpaysInResults = Include various payments in reports -IncludeLoansInResults = Include loans in reports -InvoiceLate30Days = Invoices late (> 30 days) -InvoiceLate15Days = Invoices late (15 to 30 days) -InvoiceLateMinus15Days = Invoices late (< 15 days) -InvoiceNotLate = To be collected (< 15 days) -InvoiceNotLate15Days = To be collected (15 to 30 days) -InvoiceNotLate30Days = To be collected (> 30 days) -InvoiceToPay=To pay (< 15 days) -InvoiceToPay15Days=To pay (15 to 30 days) -InvoiceToPay30Days=To pay (> 30 days) -ConfirmPreselectAccount=Preselect accountancy code -ConfirmPreselectAccountQuestion=Are you sure you want to preselect the %s selected lines with this accountancy code ? +RulesVATInServices=- ለአገልግሎቶች, ሪፖርቱ በተከፈለበት ቀን መሰረት በትክክል የተቀበሉት ወይም የተከፈሉ ክፍያዎች ተ.እ.ታን ያካትታል. +RulesVATInProducts=- ለቁሳዊ ንብረቶች, ሪፖርቱ በተከፈለበት ቀን መሰረት ተ.እ.ታን ያካትታል. +RulesVATDueServices=- ለአገልግሎቶች፣ ሪፖርቱ በደረሰኝ ደረሰኝ ቀን ላይ በመመስረት የተከፈለ ወይም ያልተከፈለ የክፍያ መጠየቂያ ደረሰኞች ተ.እ.ታን ያካትታል። +RulesVATDueProducts=- ለቁሳዊ ንብረቶች፣ ሪፖርቱ የክፍያ መጠየቂያ ደረሰኞችን ተ.እ.ታን ያካትታል፣ በደረሰኝ ደረሰኝ ቀን መሰረት። +OptionVatInfoModuleComptabilite=ማሳሰቢያ፡ ለቁሳዊ ንብረቶች፣ የበለጠ ፍትሃዊ ለመሆን የማስረከቢያውን ቀን መጠቀም አለበት። +ThisIsAnEstimatedValue=ይህ ቅድመ-ዕይታ ነው፣ በንግድ ክስተቶች ላይ የተመሰረተ እንጂ ከመጨረሻው የሂሳብ መዝገብ ሰንጠረዥ አይደለም፣ ስለዚህ የመጨረሻ ውጤቶች ከዚህ ቅድመ እይታ ዋጋዎች ሊለያዩ ይችላሉ +PercentOfInvoice=%%/ ደረሰኝ +NotUsedForGoods=በእቃዎች ላይ ጥቅም ላይ አይውልም +ProposalStats=የውሳኔ ሃሳቦች ላይ ስታቲስቲክስ +OrderStats=በትእዛዞች ላይ ስታቲስቲክስ +InvoiceStats=በሂሳቦች ላይ ስታትስቲክስ +Dispatch=በመላክ ላይ +Dispatched=ተልኳል። +ToDispatch=ለመላክ +ThirdPartyMustBeEditAsCustomer=ሶስተኛ ወገን እንደ ደንበኛ መገለጽ አለበት። +SellsJournal=የሽያጭ ጆርናል +PurchasesJournal=የግዢ ጆርናል +DescSellsJournal=የሽያጭ ጆርናል +DescPurchasesJournal=የግዢ ጆርናል +CodeNotDef=አልተገለጸም። +WarningDepositsNotIncluded=የቅድሚያ ክፍያ መጠየቂያ ደረሰኞች ከዚህ የሂሳብ ሞጁል ጋር በዚህ ስሪት ውስጥ አልተካተቱም። +DatePaymentTermCantBeLowerThanObjectDate=የክፍያ ጊዜ ቀን ከእቃ ቀን ያነሰ ሊሆን አይችልም። +Pcg_version=የመለያዎች ሞዴሎች ገበታ +Pcg_type=ፒሲጂ አይነት +Pcg_subtype=ፒሲጂ ንዑስ ዓይነት +InvoiceLinesToDispatch=ለመላክ የክፍያ መጠየቂያ መስመሮች +ByProductsAndServices=በምርት እና በአገልግሎት +RefExt=የውጭ ማጣቀሻ +ToCreateAPredefinedInvoice=የአብነት መጠየቂያ ደረሰኝ ለመፍጠር መደበኛ የክፍያ መጠየቂያ ደረሰኝ ይፍጠሩ፣ ከዚያ ሳያረጋግጡ የ%s የሚለውን ቁልፍ ጠቅ ያድርጉ። +LinkedOrder=ለማዘዝ አገናኝ +Mode1=ዘዴ 1 +Mode2=ዘዴ 2 +CalculationRuleDesc=ጠቅላላ ተ.እ.ታን ለማስላት ሁለት ዘዴዎች አሉ
ዘዴ 1 በእያንዳንዱ መስመር ላይ ቫት እየጠጋጋ ነው፣ከዚያም ጠቅለል አድርጎላቸዋል።
ዘዴ 2 በእያንዳንዱ መስመር ላይ ያሉትን ሁሉንም ቫት እያጠቃለለ ነው፣ በመቀጠል ውጤቱን እየጠጋጋ ነው።
የመጨረሻው ውጤት ከጥቂት ሳንቲም ሊለያይ ይችላል። ነባሪው ሁነታ ሁነታ ነው %s። +CalculationRuleDescSupplier=በሻጩ መሰረት፣ ተመሳሳዩን የስሌት ህግ ተግባራዊ ለማድረግ ተገቢውን ዘዴ ይምረጡ እና በአቅራቢዎ የሚጠበቀውን ተመሳሳይ ውጤት ያግኙ። +TurnoverPerProductInCommitmentAccountingNotRelevant=በእያንዳንዱ ምርት የተሰበሰበ የተርን ኦቨር ሪፖርት አይገኝም። ይህ ሪፖርት የሚገኘው ለማዞሪያ ደረሰኝ ብቻ ነው። +TurnoverPerSaleTaxRateInCommitmentAccountingNotRelevant=በአንድ የሽያጭ ታክስ መጠን የተሰበሰበው የተርን ኦቨር ሪፖርት አይገኝም። ይህ ሪፖርት የሚገኘው ለማዞሪያ ደረሰኝ ብቻ ነው። +CalculationMode=ስሌት ሁነታ +AccountancyJournal=የሂሳብ ኮድ መጽሔት +ACCOUNTING_VAT_SOLD_ACCOUNT=መለያ (ከመለያ ገበታ) በሽያጭ ላይ ለተጨማሪ እሴት ታክስ እንደ ነባሪ መለያ ጥቅም ላይ የሚውል (በተ.እ.ታ መዝገበ ቃላት ማዋቀር ላይ ካልተገለጸ ጥቅም ላይ ይውላል) +ACCOUNTING_VAT_BUY_ACCOUNT=መለያ (ከመለያ ገበታ) በግዢዎች ላይ ለተጨማሪ እሴት ታክስ እንደ ነባሪ ሂሳብ የሚያገለግል (በተ.እ.ታ መዝገበ ቃላት ማዋቀር ላይ ካልተገለጸ ጥቅም ላይ ይውላል) +ACCOUNTING_REVENUESTAMP_SOLD_ACCOUNT=በሽያጭ ላይ ላለው የገቢ ማህተም ጥቅም ላይ የሚውል መለያ (ከሂሳብ ሰንጠረዥ) +ACCOUNTING_REVENUESTAMP_BUY_ACCOUNT=በግዢዎች ላይ ለገቢ ማህተም ጥቅም ላይ የሚውል መለያ (ከሂሳብ ሰንጠረዥ) +ACCOUNTING_VAT_PAY_ACCOUNT=ተ.እ.ታ ለመክፈል እንደ ነባሪ ሂሳብ የሚያገለግል መለያ (ከሂሳብ ገበታ) +ACCOUNTING_VAT_BUY_REVERSE_CHARGES_CREDIT=መለያ (ከሂሳብ ገበታ) ለተጨማሪ ክፍያዎች (ክሬዲት) በሚደረጉ ግዢዎች ላይ ለተጨማሪ እሴት ታክስ እንደ ነባሪ ሂሳብ ያገለግላል። +ACCOUNTING_VAT_BUY_REVERSE_CHARGES_DEBIT=መለያ (ከሂሣብ ገበታ) በግል ለሚደረጉ ክፍያዎች ግዢዎች ለተጨማሪ እሴት ታክስ እንደ ነባሪ መለያ ጥቅም ላይ ይውላል (ዴቢት) +ACCOUNTING_ACCOUNT_CUSTOMER=መለያ (ከመለያ ገበታ) ለ "ደንበኛ" ሶስተኛ ወገኖች ጥቅም ላይ ይውላል +ACCOUNTING_ACCOUNT_CUSTOMER_Desc=በሶስተኛ ወገን ካርድ ላይ የተገለጸው የወሰኑ የሂሳብ አካውንት ለ Subledger ሒሳብ ብቻ ጥቅም ላይ ይውላል። በሶስተኛ ወገን ላይ የተወሰነ የደንበኛ የሂሳብ አያያዝ መለያ ካልተገለጸ ይህ ለጄኔራል ሌድገር እና እንደ ነባሪ ዋጋ ለ Subledger ሂሳብ ስራ ላይ ይውላል። +ACCOUNTING_ACCOUNT_SUPPLIER=ለ "ሻጭ" ሶስተኛ ወገኖች ጥቅም ላይ የዋለ መለያ (ከሂሳብ ሠንጠረዥ). +ACCOUNTING_ACCOUNT_SUPPLIER_Desc=በሶስተኛ ወገን ካርድ ላይ የተገለጸው የወሰኑ የሂሳብ አካውንት ለ Subledger ሒሳብ ብቻ ጥቅም ላይ ይውላል። በሶስተኛ ወገን ላይ የተወሰነ የአቅራቢ የሂሳብ መዝገብ ካልተገለጸ ይህ ለጄኔራል ሌድገር እና እንደ ነባሪ ዋጋ ለ Subledger ሂሳብ ስራ ላይ ይውላል። +ConfirmCloneTax=የማህበራዊ/የፋይስካል ታክስ ክሎኑን ያረጋግጡ +ConfirmCloneVAT=የተጨማሪ እሴት ታክስ መግለጫ ክሎሉን ያረጋግጡ +ConfirmCloneSalary=የደመወዝ ክሎኑን ያረጋግጡ +CloneTaxForNextMonth=ለሚቀጥለው ወር ያጥፉት +SimpleReport=ቀላል ዘገባ +AddExtraReport=ተጨማሪ ሪፖርቶች (የውጭ እና የሀገር ውስጥ የደንበኞችን ሪፖርት ይጨምሩ) +OtherCountriesCustomersReport=የውጭ ደንበኞች ሪፖርት +BasedOnTwoFirstLettersOfVATNumberBeingDifferentFromYourCompanyCountry=በሁለቱ የመጀመሪያ ፊደላት ላይ በመመስረት የቫት ቁጥሩ ከድርጅትዎ የአገር ኮድ የተለየ ነው። +SameCountryCustomersWithVAT=ብሔራዊ ደንበኞች ሪፖርት +BasedOnTwoFirstLettersOfVATNumberBeingTheSameAsYourCompanyCountry=በሁለቱ የቫት ፊደሎች ላይ በመመስረት ከኩባንያዎ የአገር ኮድ ጋር ተመሳሳይ ነው። +LinkedFichinter=ወደ ጣልቃገብነት ግንኙነት +ImportDataset_tax_contrib=ማህበራዊ/የገንዘብ ታክስ +ImportDataset_tax_vat=የቫት ክፍያዎች +ErrorBankAccountNotFound=ስህተት፡ የባንክ ሂሳብ አልተገኘም። +FiscalPeriod=የሂሳብ ጊዜ +ListSocialContributionAssociatedProject=ከፕሮጀክቱ ጋር የተያያዙ የማህበራዊ አስተዋፅኦዎች ዝርዝር +DeleteFromCat=ከሂሳብ ቡድን ያስወግዱ +AccountingAffectation=የሂሳብ ስራ +LastDayTaxIsRelatedTo=የክፍለ-ጊዜው የመጨረሻ ቀን ከግብር ጋር የተያያዘ ነው። +VATDue=የሽያጭ ግብር ተጠየቀ +ClaimedForThisPeriod=ለክፍለ-ጊዜው ይገባኛል +PaidDuringThisPeriod=ለዚህ ጊዜ ተከፍሏል +PaidDuringThisPeriodDesc=ይህ ከተጨማሪ እሴት ታክስ መግለጫዎች ጋር የተገናኙት የሁሉም ክፍያዎች ድምር ሲሆን እነዚህም በተመረጠው የቀን ክልል ውስጥ የፍጻሜ ቀን አላቸው +ByVatRate=በሽያጭ የግብር መጠን +TurnoverbyVatrate=በሽያጭ የግብር ተመን የተገኘ የትርፍ ደረሰኝ +TurnoverCollectedbyVatrate=በሽያጭ የግብር ተመን የተሰበሰበ ትርፍ +PurchasebyVatrate=በሽያጭ የግብር መጠን ይግዙ +LabelToShow=አጭር መለያ +PurchaseTurnover=የግዢ ማዞሪያ +PurchaseTurnoverCollected=የግዢ ማዞሪያ ተሰብስቧል +RulesPurchaseTurnoverDue=- ተከፈለም አልተከፈለም የአቅራቢውን የክፍያ መጠየቂያ ደረሰኞች ያካትታል።
- በነዚህ ደረሰኞች የክፍያ መጠየቂያ ቀን ላይ የተመሰረተ ነው።
+RulesPurchaseTurnoverIn=- ለአቅራቢዎች የሚደረጉትን ሁሉንም ውጤታማ የክፍያ መጠየቂያ ክፍያዎች ያካትታል።
- በነዚህ ደረሰኞች የመክፈያ ቀን ላይ የተመሰረተ ነው
+RulesPurchaseTurnoverTotalPurchaseJournal=ከግዢ መጽሔት ሁሉንም የዴቢት መስመሮችን ያካትታል. +RulesPurchaseTurnoverOfExpenseAccounts=በቡድን EXPENSE ውስጥ ለምርት መለያዎች (ዴቢት - ክሬዲት) መስመሮችን ያካትታል +ReportPurchaseTurnover=የግዢ ማዞሪያ ደረሰኝ ደርሷል +ReportPurchaseTurnoverCollected=የግዢ ማዞሪያ ተሰብስቧል +IncludeVarpaysInResults = በሪፖርቶች ውስጥ የተለያዩ ክፍያዎችን ያካትቱ +IncludeLoansInResults = በሪፖርቶች ውስጥ ብድሮችን ያካትቱ +InvoiceLate30Days = ዘግይቷል (> 30 ቀናት) +InvoiceLate15Days = ዘግይቶ (ከ15 እስከ 30 ቀናት) +InvoiceLateMinus15Days = ዘግይቷል (< 15 ቀናት) +InvoiceNotLate = ለመሰብሰብ (< 15 ቀናት) +InvoiceNotLate15Days = መሰብሰብ (ከ15 እስከ 30 ቀናት) +InvoiceNotLate30Days = ለመሰብሰብ (> 30 ቀናት) +InvoiceToPay=ለመክፈል (< 15 ቀናት) +InvoiceToPay15Days=ለመክፈል (ከ15 እስከ 30 ቀናት) +InvoiceToPay30Days=ለመክፈል (> 30 ቀናት) +ConfirmPreselectAccount=የሂሳብ አያያዝ ኮድ አስቀድመው ይምረጡ +ConfirmPreselectAccountQuestion=እርግጠኛ ነዎት %s የተመረጡ መስመሮችን ከዚህ የሂሳብ ኮድ ጋር አስቀድመው መምረጥ ይፈልጋሉ? +AmountPaidMustMatchAmountOfDownPayment=የተከፈለው መጠን ከቅድመ ክፍያ መጠን ጋር መዛመድ አለበት። diff --git a/htdocs/langs/am_ET/contracts.lang b/htdocs/langs/am_ET/contracts.lang index 1f3526bd994..2faee1ade06 100644 --- a/htdocs/langs/am_ET/contracts.lang +++ b/htdocs/langs/am_ET/contracts.lang @@ -1,104 +1,107 @@ # Dolibarr language file - Source file is en_US - contracts -ContractsArea=Contracts area -ListOfContracts=List of contracts -AllContracts=All contracts -ContractCard=Contract card -ContractStatusNotRunning=Not running -ContractStatusDraft=Draft -ContractStatusValidated=Validated -ContractStatusClosed=Closed -ServiceStatusInitial=Not running -ServiceStatusRunning=Running -ServiceStatusNotLate=Running, not expired -ServiceStatusNotLateShort=Not expired -ServiceStatusLate=Running, expired -ServiceStatusLateShort=Expired -ServiceStatusClosed=Closed -ShowContractOfService=Show contract of service -Contracts=Contracts -ContractsSubscriptions=Contracts/Subscriptions -ContractsAndLine=Contracts and line of contracts -Contract=Contract -ContractLine=Contract line -Closing=Closing -NoContracts=No contracts -MenuServices=Services -MenuInactiveServices=Services not active -MenuRunningServices=Running services -MenuExpiredServices=Expired services -MenuClosedServices=Closed services -NewContract=New contract -NewContractSubscription=New contract or subscription -AddContract=Create contract -DeleteAContract=Delete a contract -ActivateAllOnContract=Activate all services -CloseAContract=Close a contract -ConfirmDeleteAContract=Are you sure you want to delete this contract and all its services? +ContractsArea=የኮንትራቶች አካባቢ +ListOfContracts=የኮንትራቶች ዝርዝር +AllContracts=ሁሉም ኮንትራቶች +ContractCard=ውል +ContractStatusNotRunning=እየሮጠ አይደለም +ContractStatusDraft=ረቂቅ +ContractStatusValidated=ተረጋግጧል +ContractStatusClosed=ዝግ +ServiceStatusInitial=እየሮጠ አይደለም +ServiceStatusRunning=መሮጥ +ServiceStatusNotLate=መሮጥ፣ ጊዜው አላበቃም። +ServiceStatusNotLateShort=ጊዜው አላበቃም። +ServiceStatusLate=መሮጥ፣ ጊዜው አልፎበታል። +ServiceStatusLateShort=ጊዜው አልፎበታል። +ServiceStatusClosed=ዝግ +ShowContractOfService=የአገልግሎት ውል አሳይ +Contracts=ኮንትራቶች +ContractsSubscriptions=ኮንትራቶች / የደንበኝነት ምዝገባዎች +ContractsAndLine=ኮንትራቶች እና የኮንትራቶች መስመር +Contract=ውል +ContractLine=የኮንትራት መስመር +ContractLines=የኮንትራት መስመሮች +Closing=መዝጋት +NoContracts=ምንም ኮንትራቶች የሉም +MenuServices=አገልግሎቶች +MenuInactiveServices=አገልግሎቶች ንቁ አይደሉም +MenuRunningServices=የሩጫ አገልግሎቶች +MenuExpiredServices=የአገልግሎት ጊዜያቸው ያለፈባቸው +MenuClosedServices=የተዘጉ አገልግሎቶች +NewContract=አዲስ ውል +NewContractSubscription=አዲስ ውል ወይም የደንበኝነት ምዝገባ +AddContract=ውል ይፍጠሩ +DeleteAContract=ውል ሰርዝ +ActivateAllOnContract=ሁሉንም አገልግሎቶች ያግብሩ +CloseAContract=ውል ዝጋ +ConfirmDeleteAContract=እርግጠኛ ነዎት ይህን ውል እና ሁሉንም አገልግሎቶቹን መሰረዝ ይፈልጋሉ? ConfirmValidateContract=Are you sure you want to validate this contract under name %s? -ConfirmActivateAllOnContract=This will open all services (not yet active). Are you sure you want to open all services? -ConfirmCloseContract=This will close all services (expired or not). Are you sure you want to close this contract? -ConfirmCloseService=Are you sure you want to close this service with date %s? -ValidateAContract=Validate a contract -ActivateService=Activate service +ConfirmActivateAllOnContract=ይህ ሁሉንም አገልግሎቶች ይከፍታል (ገና ንቁ ያልሆነ)። እርግጠኛ ነዎት ሁሉንም አገልግሎቶች መክፈት ይፈልጋሉ? +ConfirmCloseContract=ይህ ሁሉንም አገልግሎቶች ይዘጋዋል (ጊዜው ያለፈበት ወይም አይደለም)። እርግጠኛ ነዎት ይህን ውል መዝጋት ይፈልጋሉ? +ConfirmCloseService=እርግጠኛ ነዎት ይህን አገልግሎት በቀን %s
s ? +ValidateAContract=ውልን ያረጋግጡ +ActivateService=አገልግሎትን አንቃ ConfirmActivateService=Are you sure you want to activate this service with date %s? -RefContract=Contract reference -DateContract=Contract date -DateServiceActivate=Service activation date -ListOfServices=List of services -ListOfInactiveServices=List of not active services -ListOfExpiredServices=List of expired active services -ListOfClosedServices=List of closed services -ListOfRunningServices=List of running services -NotActivatedServices=Inactive services (among validated contracts) -BoardNotActivatedServices=Services to activate among validated contracts -BoardNotActivatedServicesShort=Services to activate -LastContracts=Latest %s contracts -LastModifiedServices=Latest %s modified services -ContractStartDate=Start date -ContractEndDate=End date -DateStartPlanned=Planned start date -DateStartPlannedShort=Planned start date -DateEndPlanned=Planned end date -DateEndPlannedShort=Planned end date -DateStartReal=Real start date -DateStartRealShort=Real start date -DateEndReal=Real end date -DateEndRealShort=Real end date -CloseService=Close service -BoardRunningServices=Services running -BoardRunningServicesShort=Services running -BoardExpiredServices=Services expired -BoardExpiredServicesShort=Services expired -ServiceStatus=Status of service -DraftContracts=Drafts contracts -CloseRefusedBecauseOneServiceActive=Contract can't be closed as there is at least one open service on it -ActivateAllContracts=Activate all contract lines -CloseAllContracts=Close all contract lines -DeleteContractLine=Delete a contract line -ConfirmDeleteContractLine=Are you sure you want to delete this contract line? -MoveToAnotherContract=Move service into another contract. -ConfirmMoveToAnotherContract=I choosed new target contract and confirm I want to move this service into this contract. -ConfirmMoveToAnotherContractQuestion=Choose in which existing contract (of same third party), you want to move this service to? -PaymentRenewContractId=Renew contract line (number %s) -ExpiredSince=Expiration date -NoExpiredServices=No expired active services -ListOfServicesToExpireWithDuration=List of Services to expire in %s days -ListOfServicesToExpireWithDurationNeg=List of Services expired from more than %s days -ListOfServicesToExpire=List of Services to expire -NoteListOfYourExpiredServices=This list contains only services of contracts for third parties you are linked to as a sale representative. -StandardContractsTemplate=Standard contracts template -ContactNameAndSignature=For %s, name and signature: -OnlyLinesWithTypeServiceAreUsed=Only lines with type "Service" will be cloned. -ConfirmCloneContract=Are you sure you want to clone the contract %s? -LowerDateEndPlannedShort=Lower planned end date of active services -SendContractRef=Contract information __REF__ -OtherContracts=Other contracts +RefContract=የኮንትራት ማጣቀሻ +DateContract=የኮንትራት ቀን +DateServiceActivate=የአገልግሎት ማግበር ቀን +ListOfServices=የአገልግሎቶች ዝርዝር +ListOfInactiveServices=ንቁ ያልሆኑ አገልግሎቶች ዝርዝር +ListOfExpiredServices=ጊዜው ያለፈባቸው ንቁ አገልግሎቶች ዝርዝር +ListOfClosedServices=የተዘጉ አገልግሎቶች ዝርዝር +ListOfRunningServices=የሩጫ አገልግሎቶች ዝርዝር +NotActivatedServices=እንቅስቃሴ-አልባ አገልግሎቶች (ከተረጋገጡ ኮንትራቶች መካከል) +BoardNotActivatedServices=ከተረጋገጡ ኮንትራቶች መካከል ለማግበር አገልግሎቶች +BoardNotActivatedServicesShort=ለማግበር አገልግሎቶች +LastContracts=የቅርብ ጊዜ %s ውሎች +LastModifiedServices=የቅርብ ጊዜ %s የተሻሻሉ አገልግሎቶች +ContractStartDate=የመጀመሪያ ቀን +ContractEndDate=የመጨረሻ ቀን +DateStartPlanned=የታቀደ የመጀመሪያ ቀን +DateStartPlannedShort=የታቀደ የመጀመሪያ ቀን +DateEndPlanned=የታቀደ የመጨረሻ ቀን +DateEndPlannedShort=የታቀደ የመጨረሻ ቀን +DateStartReal=እውነተኛ መጀመሪያ ቀን +DateStartRealShort=እውነተኛ መጀመሪያ ቀን +DateEndReal=እውነተኛ የመጨረሻ ቀን +DateEndRealShort=እውነተኛ የመጨረሻ ቀን +CloseService=አገልግሎት ዝጋ +BoardRunningServices=አገልግሎቶች እየሰሩ ነው። +BoardRunningServicesShort=አገልግሎቶች እየሰሩ ነው። +BoardExpiredServices=አገልግሎቶች ጊዜው አልፎባቸዋል +BoardExpiredServicesShort=አገልግሎቶች ጊዜው አልፎባቸዋል +ServiceStatus=የአገልግሎት ሁኔታ +DraftContracts=ኮንትራቶችን ያዘጋጃል +CloseRefusedBecauseOneServiceActive=በላዩ ላይ ቢያንስ አንድ ክፍት አገልግሎት ስላለ ውል ሊዘጋ አይችልም። +ActivateAllContracts=ሁሉንም የኮንትራት መስመሮችን ያግብሩ +CloseAllContracts=ሁሉንም የኮንትራት መስመሮች ዝጋ +DeleteContractLine=የኮንትራት መስመርን ሰርዝ +ConfirmDeleteContractLine=እርግጠኛ ነዎት ይህን የውል መስመር መሰረዝ ይፈልጋሉ? +MoveToAnotherContract=አገልግሎቱን ወደ ሌላ ውል ያንቀሳቅሱ። +ConfirmMoveToAnotherContract=አዲስ የታለመ ውል መርጫለሁ እና ይህን አገልግሎት ወደዚህ ውል ማዛወር እንደምፈልግ አረጋግጣለሁ። +ConfirmMoveToAnotherContractQuestion=የትኛውን ነባር ውል ይምረጡ (የተመሳሳይ ሶስተኛ ወገን)፣ ይህን አገልግሎት ማዛወር ይፈልጋሉ? +PaymentRenewContractId=ውል ያድሱ %s (አገልግሎት %s) +ExpiredSince=የመጠቀሚያ ግዜ +NoExpiredServices=ምንም የአገልግሎት ጊዜ ያለፈባቸው አገልግሎቶች የሉም +ListOfServicesToExpireWithDuration=በ%s ቀናት ውስጥ ጊዜው የሚያበቃው የአገልግሎቶች ዝርዝር +ListOfServicesToExpireWithDurationNeg=የአገልግሎቶች ዝርዝር ከ%s ቀናት በላይ ጊዜው አልፎበታል። +ListOfServicesToExpire=የአገልግሎት ጊዜው የሚያበቃበት ዝርዝር +NoteListOfYourExpiredServices=ይህ ዝርዝር እንደ የሽያጭ ተወካይ ከተያያዙት የሶስተኛ ወገኖች የኮንትራት አገልግሎት ብቻ ይዟል። +StandardContractsTemplate=መደበኛ ኮንትራቶች አብነት +ContactNameAndSignature=ለ%s ስም እና ፊርማ፡- +OnlyLinesWithTypeServiceAreUsed=የ"አገልግሎት" አይነት ያላቸው መስመሮች ብቻ ይዘጋሉ። +ConfirmCloneContract=እርግጠኛ ነህ ውሉን %s +LowerDateEndPlannedShort=ዝቅተኛ የታቀዱ የንቁ አገልግሎቶች የመጨረሻ ቀን +SendContractRef=የውል መረጃ __REF__ +OtherContracts=ሌሎች ኮንትራቶች ##### Types de contacts ##### -TypeContact_contrat_internal_SALESREPSIGN=Sales representative signing contract -TypeContact_contrat_internal_SALESREPFOLL=Sales representative following-up contract -TypeContact_contrat_external_BILLING=Billing customer contact -TypeContact_contrat_external_CUSTOMER=Follow-up customer contact -TypeContact_contrat_external_SALESREPSIGN=Signing contract customer contact -HideClosedServiceByDefault=Hide closed services by default -ShowClosedServices=Show Closed Services -HideClosedServices=Hide Closed Services +TypeContact_contrat_internal_SALESREPSIGN=የሽያጭ ተወካይ ውል መፈረም +TypeContact_contrat_internal_SALESREPFOLL=የሽያጭ ተወካይ የክትትል ውል +TypeContact_contrat_external_BILLING=የሂሳብ አከፋፈል ደንበኛ ግንኙነት +TypeContact_contrat_external_CUSTOMER=ክትትል የደንበኛ ግንኙነት +TypeContact_contrat_external_SALESREPSIGN=የደንበኛ ግንኙነት መፈረም +HideClosedServiceByDefault=በነባሪነት የተዘጉ አገልግሎቶችን ደብቅ +ShowClosedServices=የተዘጉ አገልግሎቶችን አሳይ +HideClosedServices=የተዘጉ አገልግሎቶችን ደብቅ +UserStartingService=የተጠቃሚ መነሻ አገልግሎት +UserClosingService=የተጠቃሚ መዝጊያ አገልግሎት diff --git a/htdocs/langs/am_ET/cron.lang b/htdocs/langs/am_ET/cron.lang index 4fd2220dea6..d95e57e6449 100644 --- a/htdocs/langs/am_ET/cron.lang +++ b/htdocs/langs/am_ET/cron.lang @@ -1,91 +1,100 @@ # Dolibarr language file - Source file is en_US - cron -# About page -# Right -Permission23101 = Read Scheduled job -Permission23102 = Create/update Scheduled job -Permission23103 = Delete Scheduled job -Permission23104 = Execute Scheduled job +# Permissions +Permission23101 = የታቀደውን ሥራ ያንብቡ +Permission23102 = የታቀደ ሥራን ይፍጠሩ / ያዘምኑ +Permission23103 = የታቀደውን ሥራ ሰርዝ +Permission23104 = የታቀደውን ሥራ ያከናውኑ # Admin -CronSetup=Scheduled job management setup -URLToLaunchCronJobs=URL to check and launch qualified cron jobs from a browser -OrToLaunchASpecificJob=Or to check and launch a specific job from a browser -KeyForCronAccess=Security key for URL to launch cron jobs -FileToLaunchCronJobs=Command line to check and launch qualified cron jobs -CronExplainHowToRunUnix=On Unix environment you should use the following crontab entry to run the command line each 5 minutes -CronExplainHowToRunWin=On Microsoft(tm) Windows environment you can use Scheduled Task tools to run the command line each 5 minutes -CronMethodDoesNotExists=Class %s does not contains any method %s -CronMethodNotAllowed=Method %s of class %s is in blacklist of forbidden methods -CronJobDefDesc=Cron job profiles are defined into the module descriptor file. When module is activated, they are loaded and available so you can administer the jobs from the admin tools menu %s. -CronJobProfiles=List of predefined cron job profiles +CronSetup=የታቀደ የሥራ አስተዳደር ማዋቀር +URLToLaunchCronJobs=ዩአርኤል ለመፈተሽ እና ብቁ የሆኑ የክሮን ስራዎችን ከአሳሽ ለማስጀመር +OrToLaunchASpecificJob=ወይም ከአሳሽ አንድ የተወሰነ ሥራ ለመፈተሽ እና ለመጀመር +KeyForCronAccess=የክሮን ስራዎችን ለመጀመር የዩአርኤል የደህንነት ቁልፍ +FileToLaunchCronJobs=ብቁ የሆኑ ክሮን ስራዎችን ለመፈተሽ እና ለመጀመር የትእዛዝ መስመር +CronExplainHowToRunUnix=በዩኒክስ አካባቢ የትእዛዝ መስመሩን በየ 5 ደቂቃው ለማስኬድ የሚከተለውን ክሮንታብ ግቤት መጠቀም አለቦት +CronExplainHowToRunWin=በማይክሮሶፍት(tm) ዊንዶውስ አካባቢ በየ5 ደቂቃው የትእዛዝ መስመሩን ለማስኬድ የታቀዱ የተግባር መሳሪያዎችን መጠቀም ይችላሉ። +CronMethodDoesNotExists=ክፍል %s ምንም አይነት ዘዴ አልያዘም %s +CronMethodNotAllowed=የክፍል %s ክፍል %s የተከለከሉ ዘዴዎች በብሎክ ዝርዝር ውስጥ አለ +CronJobDefDesc=የክሮን የስራ መገለጫዎች በሞጁል ገላጭ ፋይል ውስጥ ተገልጸዋል። ሞጁል ሲነቃ ተጭነዋል እና ይገኛሉ ስለዚህ ከአስተዳዳሪ መሳሪያዎች ሜኑ %s ሆነው ስራዎቹን ማስተዳደር ይችላሉ። +CronJobProfiles=አስቀድሞ የተገለጹ የክሮን የሥራ መገለጫዎች ዝርዝር # Menu -EnabledAndDisabled=Enabled and disabled +EnabledAndDisabled=ነቅቷል እና ተሰናክሏል። # Page list -CronLastOutput=Latest run output -CronLastResult=Latest result code -CronCommand=Command -CronList=Scheduled jobs -CronDelete=Delete scheduled jobs -CronConfirmDelete=Are you sure you want to delete these scheduled jobs? -CronExecute=Launch scheduled job -CronConfirmExecute=Are you sure you want to execute these scheduled jobs now? -CronInfo=Scheduled job module allows to schedule jobs to execute them automatically. Jobs can also be started manually. -CronTask=Job -CronNone=None -CronDtStart=Not before -CronDtEnd=Not after -CronDtNextLaunch=Next execution -CronDtLastLaunch=Start date of latest execution -CronDtLastResult=End date of latest execution -CronFrequency=Frequency -CronClass=Class -CronMethod=Method -CronModule=Module -CronNoJobs=No jobs registered -CronPriority=Priority -CronLabel=Label -CronNbRun=Number of launches -CronMaxRun=Maximum number of launches -CronEach=Every -JobFinished=Job launched and finished -Scheduled=Scheduled +CronLastOutput=የቅርብ ጊዜ አሂድ ውጤት +CronLastResult=የቅርብ ጊዜ የውጤት ኮድ +CronCommand=ትዕዛዝ +CronList=የታቀዱ ስራዎች +CronDelete=የታቀዱ ስራዎችን ሰርዝ +CronConfirmDelete=እርግጠኛ ነዎት እነዚህን የታቀዱ ስራዎች መሰረዝ ይፈልጋሉ? +CronExecute=አሁን አስጀምር +CronConfirmExecute=እርግጠኛ ነዎት እነዚህን የታቀዱ ስራዎችን አሁን ማከናወን ይፈልጋሉ? +CronInfo=መርሐግብር የተያዘለት የሥራ ሞጁል ሥራን በራስ-ሰር ለማስፈጸም ቀጠሮ ለመያዝ ያስችላል። ስራዎች እንዲሁ በእጅ ሊጀምሩ ይችላሉ. +CronTask=ኢዮብ +CronNone=ምንም +CronDtStart=በፊት አይደለም +CronDtEnd=በኋላ አይደለም +CronDtNextLaunch=ቀጣይ አፈጻጸም +CronDtLastLaunch=የቅርብ ጊዜ አፈፃፀም የሚጀምርበት ቀን +CronDtLastResult=የቅርብ ጊዜ አፈፃፀም ማብቂያ ቀን +CronFrequency=ድግግሞሽ +CronClass=ክፍል +CronMethod=ዘዴ +CronModule=ሞጁል +CronNoJobs=ምንም ስራዎች አልተመዘገቡም። +CronPriority=ቅድሚያ +CronLabel=መለያ +CronNbRun=የማስጀመሪያዎች ብዛት +CronMaxRun=ከፍተኛው የማስጀመሪያዎች ብዛት +CronEach=እያንዳንዱ +JobFinished=ሥራ ተጀምሮ ተጠናቀቀ +Scheduled=መርሐግብር ተይዞለታል #Page card -CronAdd= Add jobs -CronEvery=Execute job each -CronObject=Instance/Object to create -CronArgs=Parameters -CronSaveSucess=Save successfully -CronNote=Comment -CronFieldMandatory=Fields %s is mandatory -CronErrEndDateStartDt=End date cannot be before start date -StatusAtInstall=Status at module installation -CronStatusActiveBtn=Schedule -CronStatusInactiveBtn=Disable -CronTaskInactive=This job is disabled (not scheduled) -CronId=Id -CronClassFile=Filename with class -CronModuleHelp=Name of Dolibarr module directory (also work with external Dolibarr module).
For example to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for module is
product -CronClassFileHelp=The relative path and file name to load (path is relative to web server root directory).
For example to call the fetch method of Dolibarr Product object htdocs/product/class/product.class.php, the value for class file name is
product/class/product.class.php +CronAdd= ስራዎችን ያክሉ +CronEvery=እያንዳንዱን ሥራ ያከናውኑ +CronObject=ምሳሌ/ የሚፈጠር ነገር +CronArgs=መለኪያዎች +CronSaveSucess=በተሳካ ሁኔታ አስቀምጥ +CronNote=አስተያየት +CronFieldMandatory=መስኮች %s ግዴታ ነው +CronErrEndDateStartDt=የማለቂያ ቀን ከመጀመሪያው ቀን በፊት ሊሆን አይችልም +StatusAtInstall=በሞጁል ጭነት ላይ ያለ ሁኔታ +CronStatusActiveBtn=መርሐግብርን አንቃ +CronStatusInactiveBtn=አሰናክል +CronTaskInactive=ይህ ሥራ ተሰናክሏል (በእቅድ አልተያዘም) +CronId=መታወቂያ +CronClassFile=የፋይል ስም ከክፍል ጋር +CronModuleHelp=የዶሊባርር ሞጁል ማውጫ ስም (እንዲሁም ከውጫዊ Dolibarr ሞጁል ጋር ይሰራል)።
ለምሳሌ የዶሊባርር ምርት ነገር /htdocs/ምርትb0dca48 ለመደወል /class/product.class.php፣ የሞጁሉ ዋጋ
ምርት ነው +CronClassFileHelp=የሚጫኑበት አንጻራዊ ዱካ እና የፋይል ስም (ዱካ ከድር አገልጋይ ስርወ ማውጫ አንጻራዊ ነው)።
ለምሳሌ የዶሊባርር ምርት ነገር htdocs/product/class/product.class.phpምርት.class.php፣ የክፍል ፋይል ስም ዋጋ
ምርት/ክፍል ነው .class.php CronObjectHelp=The object name to load.
For example to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for class file name is
Product -CronMethodHelp=The object method to launch.
For example to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for method is
fetch -CronArgsHelp=The method arguments.
For example to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for paramters can be
0, ProductRef -CronCommandHelp=The system command line to execute. -CronCreateJob=Create new Scheduled Job -CronFrom=From +CronMethodHelp=ለማስጀመር የነገር ዘዴ።
ለምሳሌ የዶሊባርር ምርት ነገር /htdocs/product/class/product.class.php የማምጣት ዘዴን ለመጥራት የስልት ዋጋው ነው።
fetch +CronArgsHelp=The method arguments.
For example to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for parameters can be
0, ProductRef +CronCommandHelp=ለማስፈጸም የስርዓት ትዕዛዝ መስመር. +CronCreateJob=አዲስ የታቀደ ሥራ ፍጠር +CronFrom=ከ # Info # Common -CronType=Job type -CronType_method=Call method of a PHP Class -CronType_command=Shell command -CronCannotLoadClass=Cannot load class file %s (to use class %s) -CronCannotLoadObject=Class file %s was loaded, but object %s was not found into it -UseMenuModuleToolsToAddCronJobs=Go into menu "Home - Admin tools - Scheduled jobs" to see and edit scheduled jobs. -JobDisabled=Job disabled -MakeLocalDatabaseDumpShort=Local database backup -MakeLocalDatabaseDump=Create a local database dump. Parameters are: compression ('gz' or 'bz' or 'none'), backup type ('mysql', 'pgsql', 'auto'), 1, 'auto' or filename to build, number of backup files to keep -WarningCronDelayed=Attention, for performance purpose, whatever is next date of execution of enabled jobs, your jobs may be delayed to a maximum of %s hours, before being run. -DATAPOLICYJob=Data cleaner and anonymizer -JobXMustBeEnabled=Job %s must be enabled +CronType=የሥራ ዓይነት +CronType_method=የ PHP ክፍል የጥሪ ዘዴ +CronType_command=የሼል ትዕዛዝ +CronCannotLoadClass=የክፍል ፋይልን መጫን አልተቻለም %s (ክፍል %s ለመጠቀም) +CronCannotLoadObject=የክፍል ፋይል %s ተጭኗል፣ ነገር ግን %s አልተገኘም +UseMenuModuleToolsToAddCronJobs=ወደ ሜኑ ይሂዱ "ቤት - የአስተዳዳሪ መሳሪያዎች - የታቀዱ ስራዎችን ለማየት እና ለማረም" +JobDisabled=ሥራ ተወግዷል +MakeLocalDatabaseDumpShort=የአካባቢ የውሂብ ጎታ ምትኬ +MakeLocalDatabaseDump=የአካባቢ የመረጃ ቋት ፍጠር። መለኪያዎች፡ መጭመቅ ('gz' ወይም 'bz' or 'none')፣ የመጠባበቂያ አይነት ('mysql'፣ 'pgsql'፣ 'auto')፣ 1፣ 'auto' ወይም filename to build፣ የሚቀመጡ የመጠባበቂያ ፋይሎች ብዛት ናቸው። +MakeSendLocalDatabaseDumpShort=የአካባቢ የውሂብ ጎታ ምትኬን ይላኩ። +MakeSendLocalDatabaseDump=የአካባቢያዊ የውሂብ ጎታ ምትኬን በኢሜል ይላኩ። ልኬቶች፡ ከ፣ ከ ርዕሰ ጉዳይ፣ መልእክት፣ የፋይል ስም (የተላከው ፋይል ስም) ማጣሪያ ('sql' ለዳታቤዝ መጠባበቂያ ብቻ) +BackupIsTooLargeSend=ይቅርታ፣ የመጨረሻው የመጠባበቂያ ፋይል በኢሜይል ለመላክ በጣም ትልቅ ነው። +CleanUnfinishedCronjobShort=ያልተጠናቀቀ ክሮንጆብን አጽዳ +CleanUnfinishedCronjob=ሂደቱ በማይሰራበት ጊዜ በማቀነባበር ላይ የተጣበቀ ክሮንጆብን ያጽዱ +WarningCronDelayed=ትኩረት፣ ለአፈጻጸም ዓላማ፣ የነቁ ስራዎች የሚፈጸሙበት የሚቀጥለው ቀን ምንም ይሁን ምን ስራዎችዎ ከመሮጥዎ በፊት ቢበዛ እስከ %s ሰዓታት ሊዘገዩ ይችላሉ። +DATAPOLICYJob=የውሂብ ማጽጃ እና ማንነት የማያሳውቅ +JobXMustBeEnabled=ስራ %s መንቃት አለበት +EmailIfError=ለስህተት ማስጠንቀቂያ ኢሜይል ያድርጉ +JobNotFound=ስራ %s በስራዎች ዝርዝር ውስጥ አልተገኘም (ሞጁሉን ለማሰናከል/የነቃ) +ErrorInBatch=ስራውን ሲሰራ ስህተት %s + # Cron Boxes -LastExecutedScheduledJob=Last executed scheduled job -NextScheduledJobExecute=Next scheduled job to execute -NumberScheduledJobError=Number of scheduled jobs in error +LastExecutedScheduledJob=ለመጨረሻ ጊዜ የተከናወነው የታቀደ ሥራ +NextScheduledJobExecute=ቀጣይ መርሐግብር የተያዘለት ሥራ ለማስፈጸም +NumberScheduledJobError=በስህተት የታቀዱ ስራዎች ብዛት +NumberScheduledJobNeverFinished=የታቀዱ ሥራዎች ብዛት አላለቀም። diff --git a/htdocs/langs/am_ET/deliveries.lang b/htdocs/langs/am_ET/deliveries.lang index cd8a36e6c70..9d10bc21fb1 100644 --- a/htdocs/langs/am_ET/deliveries.lang +++ b/htdocs/langs/am_ET/deliveries.lang @@ -1,33 +1,33 @@ # Dolibarr language file - Source file is en_US - deliveries -Delivery=Delivery -DeliveryRef=Ref Delivery -DeliveryCard=Receipt card -DeliveryOrder=Delivery receipt -DeliveryDate=Delivery date -CreateDeliveryOrder=Generate delivery receipt -DeliveryStateSaved=Delivery state saved -SetDeliveryDate=Set shipping date -ValidateDeliveryReceipt=Validate delivery receipt -ValidateDeliveryReceiptConfirm=Are you sure you want to validate this delivery receipt? -DeleteDeliveryReceipt=Delete delivery receipt +Delivery=ማድረስ +DeliveryRef=ማጣቀሻ መላኪያ +DeliveryCard=የአክሲዮን ደረሰኝ +DeliveryOrder=የመላኪያ ደረሰኝ +DeliveryDate=መላኪያ ቀን +CreateDeliveryOrder=የመላኪያ ደረሰኝ ይፍጠሩ +DeliveryStateSaved=የማስረከቢያ ሁኔታ ተቀምጧል +SetDeliveryDate=የመላኪያ ቀን ያዘጋጁ +ValidateDeliveryReceipt=የመላኪያ ደረሰኝ ያረጋግጡ +ValidateDeliveryReceiptConfirm=እርግጠኛ ነዎት ይህን የመላኪያ ደረሰኝ ማረጋገጥ ይፈልጋሉ? +DeleteDeliveryReceipt=የመላኪያ ደረሰኝ ሰርዝ DeleteDeliveryReceiptConfirm=Are you sure you want to delete delivery receipt %s? -DeliveryMethod=Delivery method -TrackingNumber=Tracking number -DeliveryNotValidated=Delivery not validated -StatusDeliveryCanceled=Canceled -StatusDeliveryDraft=Draft -StatusDeliveryValidated=Received +DeliveryMethod=የማስረከቢያ ዘዴ +TrackingNumber=መከታተያ ቁጥር +DeliveryNotValidated=ማቅረቡ አልተረጋገጠም። +StatusDeliveryCanceled=ተሰርዟል። +StatusDeliveryDraft=ረቂቅ +StatusDeliveryValidated=ተቀብሏል # merou PDF model -NameAndSignature=Name and Signature: -ToAndDate=To___________________________________ on ____/_____/__________ -GoodStatusDeclaration=Have received the goods above in good condition, -Deliverer=Deliverer: -Sender=Sender -Recipient=Recipient -ErrorStockIsNotEnough=There's not enough stock -Shippable=Shippable -NonShippable=Not Shippable -ShowShippableStatus=Show shippable status -ShowReceiving=Show delivery receipt -NonExistentOrder=Nonexistent order -StockQuantitiesAlreadyAllocatedOnPreviousLines = Stock quantities already allocated on previous lines +NameAndSignature=ስም እና ፊርማ፡- +ToAndDate=ለ__________________________________ በ____/____/__________ ላይ +GoodStatusDeclaration=ከላይ ያሉትን እቃዎች በጥሩ ሁኔታ ተቀብለዋል, +Deliverer=አቅራቢ፡ +Sender=ላኪ +Recipient=ተቀባይ +ErrorStockIsNotEnough=በቂ ክምችት የለም። +Shippable=ሊላክ የሚችል +NonShippable=ሊላክ የሚችል አይደለም። +ShowShippableStatus=ሊላክ የሚችል ሁኔታን አሳይ +ShowReceiving=የመላኪያ ደረሰኝ አሳይ +NonExistentOrder=ያለ ትእዛዝ +StockQuantitiesAlreadyAllocatedOnPreviousLines = በቀደሙት መስመሮች ላይ አስቀድሞ የተመደበው የአክሲዮን መጠን diff --git a/htdocs/langs/am_ET/dict.lang b/htdocs/langs/am_ET/dict.lang index ec315d97142..94ee0b6d67d 100644 --- a/htdocs/langs/am_ET/dict.lang +++ b/htdocs/langs/am_ET/dict.lang @@ -1,359 +1,362 @@ # Dolibarr language file - Source file is en_US - dict -CountryFR=France -CountryBE=Belgium -CountryIT=Italy -CountryES=Spain -CountryDE=Germany -CountryCH=Switzerland +CountryFR=ፈረንሳይ +CountryBE=ቤልጄም +CountryIT=ጣሊያን +CountryES=ስፔን +CountryDE=ጀርመን +CountryCH=ስዊዘሪላንድ # Warning, country code GB is for United Kingdom. UK Does not exists as country code in ISO standard. -CountryGB=United Kingdom -CountryUK=United Kingdom -CountryIE=Ireland -CountryCN=China -CountryTN=Tunisia -CountryUS=United States -CountryMA=Morocco -CountryDZ=Algeria -CountryCA=Canada -CountryTG=Togo -CountryGA=Gabon -CountryNL=Netherlands -CountryHU=Hungary -CountryRU=Russia -CountrySE=Sweden -CountryCI=Ivoiry Coast -CountrySN=Senegal -CountryAR=Argentina -CountryCM=Cameroon -CountryPT=Portugal -CountrySA=Saudi Arabia -CountryMC=Monaco -CountryAU=Australia -CountrySG=Singapore -CountryAF=Afghanistan -CountryAX=Åland Islands -CountryAL=Albania -CountryAS=American Samoa -CountryAD=Andorra -CountryAO=Angola -CountryAI=Anguilla -CountryAQ=Antarctica -CountryAG=Antigua and Barbuda -CountryAM=Armenia -CountryAW=Aruba -CountryAT=Austria -CountryAZ=Azerbaijan -CountryBS=Bahamas -CountryBH=Bahrain -CountryBD=Bangladesh -CountryBB=Barbados -CountryBY=Belarus -CountryBZ=Belize -CountryBJ=Benin -CountryBM=Bermuda -CountryBT=Bhutan -CountryBO=Bolivia -CountryBA=Bosnia and Herzegovina -CountryBW=Botswana -CountryBV=Bouvet Island -CountryBR=Brazil -CountryIO=British Indian Ocean Territory -CountryBN=Brunei Darussalam -CountryBG=Bulgaria -CountryBF=Burkina Faso -CountryBI=Burundi -CountryKH=Cambodia -CountryCV=Cape Verde -CountryKY=Cayman Islands -CountryCF=Central African Republic -CountryTD=Chad -CountryCL=Chile -CountryCX=Christmas Island -CountryCC=Cocos (Keeling) Islands -CountryCO=Colombia -CountryKM=Comoros -CountryCG=Congo -CountryCD=Congo, The Democratic Republic of the -CountryCK=Cook Islands -CountryCR=Costa Rica -CountryHR=Croatia -CountryCU=Cuba -CountryCY=Cyprus -CountryCZ=Czech Republic -CountryDK=Denmark -CountryDJ=Djibouti -CountryDM=Dominica -CountryDO=Dominican Republic -CountryEC=Ecuador -CountryEG=Egypt -CountrySV=El Salvador -CountryGQ=Equatorial Guinea -CountryER=Eritrea -CountryEE=Estonia -CountryET=Ethiopia -CountryFK=Falkland Islands -CountryFO=Faroe Islands -CountryFJ=Fiji Islands -CountryFI=Finland -CountryGF=French Guiana -CountryPF=French Polynesia -CountryTF=French Southern Territories -CountryGM=Gambia -CountryGE=Georgia -CountryGH=Ghana -CountryGI=Gibraltar -CountryGR=Greece -CountryGL=Greenland -CountryGD=Grenada -CountryGP=Guadeloupe -CountryGU=Guam -CountryGT=Guatemala -CountryGN=Guinea -CountryGW=Guinea-Bissau -CountryGY=Guyana -CountryHT=Haïti -CountryHM=Heard Island and McDonald -CountryVA=Holy See (Vatican City State) -CountryHN=Honduras -CountryHK=Hong Kong -CountryIS=Iceland -CountryIN=India -CountryID=Indonesia -CountryIR=Iran -CountryIQ=Iraq -CountryIL=Israel -CountryJM=Jamaica -CountryJP=Japan -CountryJO=Jordan -CountryKZ=Kazakhstan -CountryKE=Kenya -CountryKI=Kiribati -CountryKP=North Korea -CountryKR=South Korea -CountryKW=Kuwait -CountryKG=Kyrgyzstan -CountryLA=Lao -CountryLV=Latvia -CountryLB=Lebanon -CountryLS=Lesotho -CountryLR=Liberia -CountryLY=Libyan -CountryLI=Liechtenstein -CountryLT=Lithuania -CountryLU=Luxembourg -CountryMO=Macao -CountryMK=Macedonia, the former Yugoslav of -CountryMG=Madagascar -CountryMW=Malawi -CountryMY=Malaysia -CountryMV=Maldives -CountryML=Mali -CountryMT=Malta -CountryMH=Marshall Islands -CountryMQ=Martinique -CountryMR=Mauritania -CountryMU=Mauritius -CountryYT=Mayotte -CountryMX=Mexico -CountryFM=Micronesia -CountryMD=Moldova -CountryMN=Mongolia -CountryMS=Monserrat -CountryMZ=Mozambique -CountryMM=Myanmar (Burma) -CountryNA=Namibia -CountryNR=Nauru -CountryNP=Nepal -CountryAN=Netherlands Antilles -CountryNC=New Caledonia -CountryNZ=New Zealand -CountryNI=Nicaragua -CountryNE=Niger -CountryNG=Nigeria -CountryNU=Niue -CountryNF=Norfolk Island -CountryMP=Northern Mariana Islands -CountryNO=Norway -CountryOM=Oman -CountryPK=Pakistan -CountryPW=Palau -CountryPS=Palestinian Territory, Occupied -CountryPA=Panama -CountryPG=Papua New Guinea -CountryPY=Paraguay -CountryPE=Peru -CountryPH=Philippines -CountryPN=Pitcairn Islands -CountryPL=Poland -CountryPR=Puerto Rico -CountryQA=Qatar -CountryRE=Reunion -CountryRO=Romania -CountryRW=Rwanda -CountrySH=Saint Helena -CountryKN=Saint Kitts and Nevis -CountryLC=Saint Lucia -CountryPM=Saint Pierre and Miquelon -CountryVC=Saint Vincent and Grenadines -CountryWS=Samoa -CountrySM=San Marino -CountryST=Sao Tome and Principe -CountryRS=Serbia -CountrySC=Seychelles -CountrySL=Sierra Leone -CountrySK=Slovakia -CountrySI=Slovenia -CountrySB=Solomon Islands -CountrySO=Somalia -CountryZA=South Africa -CountryGS=South Georgia and the South Sandwich Islands -CountryLK=Sri Lanka -CountrySD=Sudan -CountrySR=Suriname -CountrySJ=Svalbard and Jan Mayen -CountrySZ=Swaziland -CountrySY=Syrian -CountryTW=Taiwan -CountryTJ=Tajikistan -CountryTZ=Tanzania -CountryTH=Thailand -CountryTL=Timor-Leste -CountryTK=Tokelau -CountryTO=Tonga -CountryTT=Trinidad and Tobago -CountryTR=Turkey -CountryTM=Turkmenistan -CountryTC=Turks and Caicos Islands -CountryTV=Tuvalu -CountryUG=Uganda -CountryUA=Ukraine -CountryAE=United Arab Emirates -CountryUM=United States Minor Outlying Islands -CountryUY=Uruguay -CountryUZ=Uzbekistan -CountryVU=Vanuatu -CountryVE=Venezuela -CountryVN=Viet Nam -CountryVG=Virgin Islands, British -CountryVI=Virgin Islands, U.S. -CountryWF=Wallis and Futuna -CountryEH=Western Sahara -CountryYE=Yemen -CountryZM=Zambia -CountryZW=Zimbabwe -CountryGG=Guernsey -CountryIM=Isle of Man -CountryJE=Jersey -CountryME=Montenegro -CountryBL=Saint Barthelemy -CountryMF=Saint Martin +CountryGB=የተባበሩት የንጉሥ ግዛት +CountryUK=የተባበሩት የንጉሥ ግዛት +CountryIE=አይርላድ +CountryCN=ቻይና +CountryTN=ቱንሲያ +CountryUS=ዩናይትድ ስቴተት +CountryMA=ሞሮኮ +CountryDZ=አልጄሪያ +CountryCA=ካናዳ +CountryTG=ቶጎ +CountryGA=ጋቦን +CountryNL=ኔዜሪላንድ +CountryHU=ሃንጋሪ +CountryRU=ራሽያ +CountrySE=ስዊዲን +CountryCI=አይቮሪ ኮስት +CountrySN=ሴኔጋል +CountryAR=አርጀንቲና +CountryCM=ካሜሩን +CountryPT=ፖርቹጋል +CountrySA=ሳውዲ ዓረቢያ +CountryMC=ሞናኮ +CountryAU=አውስትራሊያ +CountrySG=ስንጋፖር +CountryAF=አፍጋኒስታን +CountryAX=የአላንድ ደሴቶች +CountryAL=አልባኒያ +CountryAS=የአሜሪካ ሳሞአ +CountryAD=አንዶራ +CountryAO=አንጎላ +CountryAI=አንጉላ +CountryAQ=አንታርክቲካ +CountryAG=አንቲጉአ እና ባርቡዳ +CountryAM=አርሜኒያ +CountryAW=አሩባ +CountryAT=ኦስትራ +CountryAZ=አዘርባጃን +CountryBS=ባሐማስ +CountryBH=ባሃሬን +CountryBD=ባንግላድሽ +CountryBB=ባርባዶስ +CountryBY=ቤላሩስ +CountryBZ=ቤሊዜ +CountryBJ=ቤኒኒ +CountryBM=ቤርሙዳ +CountryBT=በሓቱን +CountryBO=ቦሊቪያ +CountryBA=ቦስኒያ እና ሔርዞጎቪያ +CountryBW=ቦትስዋና +CountryBV=ቡቬት ደሴት +CountryBR=ብራዚል +CountryIO=የብሪቲሽ ህንድ ውቅያኖስ ግዛት +CountryBN=ብሩኒ ዳሩሳላም። +CountryBG=ቡልጋሪያ +CountryBF=ቡርክናፋሶ +CountryBI=ቡሩንዲ +CountryKH=ካምቦዲያ +CountryCV=ኬፕ ቬሪዴ +CountryKY=ኬይማን አይስላንድ +CountryCF=ሴንትራል አፍሪካ ሪፑቢሊክ +CountryTD=ቻድ +CountryCL=ቺሊ +CountryCX=የገና ደሴት +CountryCC=ኮኮስ (ኬሊንግ) ደሴቶች +CountryCO=ኮሎምቢያ +CountryKM=ኮሞሮስ +CountryCG=ኮንጎ +CountryCD=ኮንጎ፣ ዲሞክራቲክ ሪፐብሊክ +CountryCK=ኩክ አይስላንድስ +CountryCR=ኮስታሪካ +CountryHR=ክሮሽያ +CountryCU=ኩባ +CountryCY=ቆጵሮስ +CountryCZ=ቼክ ሪፐብሊክ +CountryDK=ዴንማሪክ +CountryDJ=ጅቡቲ +CountryDM=ዶሚኒካ +CountryDO=ዶሚኒካን ሪፑብሊክ +CountryEC=ኢኳዶር +CountryEG=ግብጽ +CountrySV=ኤልሳልቫዶር +CountryGQ=ኢኳቶሪያል ጊኒ +CountryER=ኤርትሪያ +CountryEE=ኢስቶኒያ +CountryET=ኢትዮጵያ +CountryFK=የፎክላንድ ደሴቶች +CountryFO=የፋሮ ደሴቶች +CountryFJ=ፊጂ ደሴቶች +CountryFI=ፊኒላንድ +CountryGF=የፈረንሳይ ጉያና +CountryPF=የፈረንሳይ ፖሊኔዥያ +CountryTF=የፈረንሳይ ደቡባዊ ግዛቶች +CountryGM=ጋምቢያ +CountryGE=ጆርጂያ +CountryGH=ጋና +CountryGI=ጊብራልታር +CountryGR=ግሪክ +CountryGL=ግሪንላንድ +CountryGD=ግሪንዳዳ +CountryGP=ጓዴሎፕ +CountryGU=ጉአሜ +CountryGT=ጓቴማላ +CountryGN=ጊኒ +CountryGW=ጊኒ-ቢሳው +CountryGY=ጉያና +CountryHT=ሓይቲ +CountryHM=ሄርድ ደሴት እና ማክዶናልድ +CountryVA=ቅድስት መንበር (የቫቲካን ከተማ ግዛት) +CountryHN=ሆንዱራስ +CountryHK=ሆንግ ኮንግ +CountryIS=አይስላንድ +CountryIN=ሕንድ +CountryID=ኢንዶኔዥያ +CountryIR=ኢራን +CountryIQ=ኢራቅ +CountryIL=እስራኤል +CountryJM=ጃማይካ +CountryJP=ጃፓን +CountryJO=ዮርዳኖስ +CountryKZ=ካዛክስታን +CountryKE=ኬንያ +CountryKI=ኪሪባቲ +CountryKP=ሰሜናዊ ኮሪያ +CountryKR=ደቡብ ኮሪያ +CountryKW=ኵዌት +CountryKG=ክይርጋዝስታን +CountryLA=ላኦ +CountryLV=ላቲቪያ +CountryLB=ሊባኖስ +CountryLS=ሌስቶ +CountryLR=ላይቤሪያ +CountryLY=ሊቢያ +CountryLI=ለይችቴንስቴይን +CountryLT=ሊቱአኒያ +CountryLU=ሉዘምቤርግ +CountryMO=ማካዎ +CountryMK=መቄዶኒያ፣ የቀድሞዋ ዩጎዝላቪያ +CountryMG=ማዳጋስካር +CountryMW=ማላዊ +CountryMY=ማሌዥያ +CountryMV=ማልዲቬስ +CountryML=ማሊ +CountryMT=ማልታ +CountryMH=ማርሻል አይስላንድ +CountryMQ=ማርቲኒክ +CountryMR=ሞሪታኒያ +CountryMU=ሞሪሼስ +CountryYT=ማዮት +CountryMX=ሜክስኮ +CountryFM=ሚክሮኔዥያ +CountryMD=ሞልዶቫ +CountryMN=ሞንጎሊያ +CountryMS=ሞንትሴራት +CountryMZ=ሞዛምቢክ +CountryMM=ምያንማር (በርማ) +CountryNA=ናምቢያ +CountryNR=ናኡሩ +CountryNP=ኔፓል +CountryAN=ኔዘርላንድስ አንቲልስ +CountryNC=ኒው ካሌዶኒያ +CountryNZ=ኒውዚላንድ +CountryNI=ኒካራጉአ +CountryNE=ኒጀር +CountryNG=ናይጄሪያ +CountryNU=ኒይኡ +CountryNF=ኖርፎልክ አይስላንድስ +CountryMP=የሰሜናዊ ማሪያና አይስላንድስ +CountryNO=ኖርዌይ +CountryOM=ኦማን +CountryPK=ፓኪስታን +CountryPW=ፓላኡ +CountryPS=የፍልስጤም ግዛት፣ ተይዟል። +CountryPA=ፓናማ +CountryPG=ፓፓያ ኒው ጊኒ +CountryPY=ፓራጓይ +CountryPE=ፔሩ +CountryPH=ፊሊፕንሲ +CountryPN=ፒትካይርን አይስላንድስ +CountryPL=ፖላንድ +CountryPR=ፑኤርቶ ሪኮ +CountryQA=ኳታር +CountryRE=እንደገና መገናኘት +CountryRO=ሮማኒያ +CountryRW=ሩዋንዳ +CountrySH=ሰይንት ሄሌና +CountryKN=ሰይንት ኪትስ እና ኔቪስ +CountryLC=ሰይንት ሉካስ +CountryPM=ቅዱስ ፒየር እና ሚኩሎን +CountryVC=ሴንት ቪንሰንት እና ግሬናዲንስ +CountryWS=ሳሞአ +CountrySM=ሳን ማሪኖ +CountryST=ሳኦ ቶሜ እና ፕሪንቺፔ +CountryRS=ሴርቢያ +CountrySC=ሲሼልስ +CountrySL=ሰራሊዮን +CountrySK=ስሎቫኒካ +CountrySI=ስሎቫኒያ +CountrySB=የሰሎሞን አይስላንድስ +CountrySO=ሶማሊያ +CountryZA=ደቡብ አፍሪቃ +CountryGS=ደቡብ ጆርጂያ እና ደቡብ ሳንድዊች ደሴቶች +CountryLK=ሲሪላንካ +CountrySD=ሱዳን +CountrySR=ሱሪናሜ +CountrySJ=ስቫልባርድ እና ጃን ማየን +CountrySZ=ስዋዝላድ +CountrySY=ሶሪያዊ +CountryTW=ታይዋን +CountryTJ=ታጂኪስታን +CountryTZ=ታንዛንኒያ +CountryTH=ታይላንድ +CountryTL=ቲሞር-ሌስቴ +CountryTK=ቶኬላኡ +CountryTO=ቶንጋ +CountryTT=ትሪኒዳድ እና ቶባጎ +CountryTR=ቱሪክ +CountryTM=ቱርክሜኒስታን +CountryTC=የቱርኮች እና የካይኮስ ደሴቶች +CountryTV=ቱቫሉ +CountryUG=ኡጋንዳ +CountryUA=ዩክሬን +CountryAE=ዩናይትድ ዓረብ ኤምሬት +CountryUM=የዩናይትድ ስቴትስ ትናንሽ ውጫዊ ደሴቶች +CountryUY=ኡራጋይ +CountryUZ=ኡዝቤክስታን +CountryVU=ቫኑአቱ +CountryVE=ቨንዙዋላ +CountryVN=ቪትናም +CountryVG=ቨርጂን ደሴቶች፣ ብሪቲሽ +CountryVI=ቨርጂን ደሴቶች፣ አሜሪካ +CountryWF=ዋሊስ እና ፉቱና +CountryEH=ምዕራባዊ ሳሃራ +CountryYE=የመን +CountryZM=ዛምቢያ +CountryZW=ዝምባቡዌ +CountryGG=ገርንሴይ +CountryIM=የሰው ደሴት +CountryJE=ጀርሲ +CountryME=ሞንቴኔግሮ +CountryBL=ቅድስት በርተሌሚ +CountryMF=ቅዱስ ማርቲን +CountryXK=ኮሶቮ ##### Civilities ##### -CivilityMME=Mrs. -CivilityMR=Mr. -CivilityMLE=Ms. -CivilityMTRE=Master -CivilityDR=Doctor +CivilityMME=ወይዘሮ. +CivilityMMEShort=ወይዘሮ. +CivilityMR=ለ አቶ +CivilityMRShort=ለ አቶ +CivilityMLE=ወይዘሪት. +CivilityMTRE=መምህር +CivilityDR=ዶክተር ##### Currencies ##### -Currencyeuros=Euros -CurrencyAUD=AU Dollars -CurrencySingAUD=AU Dollar -CurrencyCAD=CAN Dollars -CurrencySingCAD=CAN Dollar -CurrencyCHF=Swiss Francs -CurrencySingCHF=Swiss Franc -CurrencyEUR=Euros -CurrencySingEUR=Euro -CurrencyFRF=French Francs -CurrencySingFRF=French Franc -CurrencyGBP=GB Pounds -CurrencySingGBP=GB Pound -CurrencyINR=Indian rupees -CurrencySingINR=Indian rupee -CurrencyMAD=Dirham -CurrencySingMAD=Dirham -CurrencyMGA=Ariary -CurrencySingMGA=Ariary -CurrencyMUR=Mauritius rupees -CurrencySingMUR=Mauritius rupee -CurrencyNOK=Norwegian krones -CurrencySingNOK=Norwegian kronas -CurrencyTND=Tunisian dinars -CurrencySingTND=Tunisian dinar -CurrencyUSD=US Dollars -CurrencySingUSD=US Dollar -CurrencyUAH=Hryvnia -CurrencySingUAH=Hryvnia -CurrencyXAF=CFA Francs BEAC -CurrencySingXAF=CFA Franc BEAC -CurrencyXOF=CFA Francs BCEAO -CurrencySingXOF=CFA Franc BCEAO -CurrencyXPF=CFP Francs -CurrencySingXPF=CFP Franc -CurrencyCentEUR=cents -CurrencyCentSingEUR=cent +Currencyeuros=ዩሮ +CurrencyAUD=AU ዶላር +CurrencySingAUD=AU ዶላር +CurrencyCAD=የ CAN ዶላር +CurrencySingCAD=CAN ዶላር +CurrencyCHF=የስዊዝ ፍራንክ +CurrencySingCHF=የስዊዝ ፍራንክ +CurrencyEUR=ዩሮ +CurrencySingEUR=ዩሮ +CurrencyFRF=የፈረንሳይ ፍራንክ +CurrencySingFRF=የፈረንሳይ ፍራንክ +CurrencyGBP=ጂቢ ፓውንድ +CurrencySingGBP=ጂቢ ፓውንድ +CurrencyINR=የህንድ ሩፒ +CurrencySingINR=የህንድ ሩፒ +CurrencyMAD=ዲርሃም +CurrencySingMAD=ዲርሃም +CurrencyMGA=አሪሪ +CurrencySingMGA=አሪሪ +CurrencyMUR=የሞሪሸስ ሩፒ +CurrencySingMUR=የሞሪሸስ ሩፒ +CurrencyNOK=የኖርዌይ ክሮኖች +CurrencySingNOK=የኖርዌይ ክሮናስ +CurrencyTND=የቱኒዚያ ዲናር +CurrencySingTND=የቱኒዚያ ዲናር +CurrencyUSD=የአሜሪካ ዶላር +CurrencySingUSD=የአሜሪካ ዶላር +CurrencyUAH=ሂርቪንያ +CurrencySingUAH=ሂርቪንያ +CurrencyXAF=ሴኤፍአ ፍራንክ BEAC +CurrencySingXAF=ሴኤፍአ ፍራንክ ቤኤክ +CurrencyXOF=ሴኤፍአ ፍራንክ BCEAO +CurrencySingXOF=ሴኤፍአ ፍራንክ BEAO +CurrencyXPF=ሲኤፍፒ ፍራንክ +CurrencySingXPF=ሲኤፍፒ ፍራንክ +CurrencyCentEUR=ሳንቲም +CurrencyCentSingEUR=መቶ CurrencyCentINR=paisa CurrencyCentSingINR=paise -CurrencyThousandthSingTND=thousandth +CurrencyThousandthSingTND=ሺህ #### Input reasons ##### -DemandReasonTypeSRC_INTE=Internet -DemandReasonTypeSRC_CAMP_MAIL=Mailing campaign -DemandReasonTypeSRC_CAMP_EMAIL=EMailing campaign -DemandReasonTypeSRC_CAMP_PHO=Phone campaign -DemandReasonTypeSRC_CAMP_FAX=Fax campaign -DemandReasonTypeSRC_COMM=Commercial contact -DemandReasonTypeSRC_SHOP=Shop contact -DemandReasonTypeSRC_WOM=Word of mouth -DemandReasonTypeSRC_PARTNER=Partner -DemandReasonTypeSRC_EMPLOYEE=Employee -DemandReasonTypeSRC_SPONSORING=Sponsorship -DemandReasonTypeSRC_SRC_CUSTOMER=Incoming contact of a customer +DemandReasonTypeSRC_INTE=ኢንተርኔት +DemandReasonTypeSRC_CAMP_MAIL=የደብዳቤ መላኪያ ዘመቻ +DemandReasonTypeSRC_CAMP_EMAIL=የኢሜል ዘመቻ +DemandReasonTypeSRC_CAMP_PHO=የስልክ ዘመቻ +DemandReasonTypeSRC_CAMP_FAX=የፋክስ ዘመቻ +DemandReasonTypeSRC_COMM=የንግድ ግንኙነት +DemandReasonTypeSRC_SHOP=የሱቅ ግንኙነት +DemandReasonTypeSRC_WOM=የአፍ ቃል +DemandReasonTypeSRC_PARTNER=አጋር +DemandReasonTypeSRC_EMPLOYEE=ሰራተኛ +DemandReasonTypeSRC_SPONSORING=ስፖንሰርነት +DemandReasonTypeSRC_SRC_CUSTOMER=የደንበኛ ገቢ ግንኙነት #### Paper formats #### -PaperFormatEU4A0=Format 4A0 -PaperFormatEU2A0=Format 2A0 -PaperFormatEUA0=Format A0 -PaperFormatEUA1=Format A1 -PaperFormatEUA2=Format A2 -PaperFormatEUA3=Format A3 -PaperFormatEUA4=Format A4 -PaperFormatEUA5=Format A5 -PaperFormatEUA6=Format A6 -PaperFormatUSLETTER=Format Letter US -PaperFormatUSLEGAL=Format Legal US -PaperFormatUSEXECUTIVE=Format Executive US -PaperFormatUSLEDGER=Format Ledger/Tabloid -PaperFormatCAP1=Format P1 Canada -PaperFormatCAP2=Format P2 Canada -PaperFormatCAP3=Format P3 Canada -PaperFormatCAP4=Format P4 Canada -PaperFormatCAP5=Format P5 Canada -PaperFormatCAP6=Format P6 Canada +PaperFormatEU4A0=ቅርጸት 4A0 +PaperFormatEU2A0=ቅርጸት 2A0 +PaperFormatEUA0=ቅርጸት A0 +PaperFormatEUA1=ቅርጸት A1 +PaperFormatEUA2=ቅርጸት A2 +PaperFormatEUA3=ቅርጸት A3 +PaperFormatEUA4=ቅርጸት A4 +PaperFormatEUA5=ቅርጸት A5 +PaperFormatEUA6=ቅርጸት A6 +PaperFormatUSLETTER=ፎርማት ደብዳቤ US +PaperFormatUSLEGAL=ሕጋዊ US ቅርጸት +PaperFormatUSEXECUTIVE=ቅርጸት አስፈፃሚ ዩኤስ +PaperFormatUSLEDGER=ቅርጸት Ledger/Tabloid +PaperFormatCAP1=ቅርጸት P1 ካናዳ +PaperFormatCAP2=ቅርጸት P2 ካናዳ +PaperFormatCAP3=ቅርጸት P3 ካናዳ +PaperFormatCAP4=ቅርጸት P4 ካናዳ +PaperFormatCAP5=ቅርጸት P5 ካናዳ +PaperFormatCAP6=ቅርጸት P6 ካናዳ #### Expense report categories #### -ExpAutoCat=Car -ExpCycloCat=Moped -ExpMotoCat=Motorbike +ExpAutoCat=መኪና +ExpCycloCat=ሞፔድ +ExpMotoCat=ሞተርሳይክል ExpAuto3CV=3 CV -ExpAuto4CV=4 CV +ExpAuto4CV=4 ሲቪ ExpAuto5CV=5 CV -ExpAuto6CV=6 CV -ExpAuto7CV=7 CV -ExpAuto8CV=8 CV -ExpAuto9CV=9 CV -ExpAuto10CV=10 CV -ExpAuto11CV=11 CV -ExpAuto12CV=12 CV -ExpAuto3PCV=3 CV and more -ExpAuto4PCV=4 CV and more -ExpAuto5PCV=5 CV and more -ExpAuto6PCV=6 CV and more -ExpAuto7PCV=7 CV and more -ExpAuto8PCV=8 CV and more -ExpAuto9PCV=9 CV and more -ExpAuto10PCV=10 CV and more -ExpAuto11PCV=11 CV and more -ExpAuto12PCV=12 CV and more -ExpAuto13PCV=13 CV and more -ExpCyclo=Capacity lower to 50cm3 -ExpMoto12CV=Motorbike 1 or 2 CV -ExpMoto345CV=Motorbike 3, 4 or 5 CV -ExpMoto5PCV=Motorbike 5 CV and more +ExpAuto6CV=6 ሲቪ +ExpAuto7CV=7 ሲቪ +ExpAuto8CV=8 ሲቪ +ExpAuto9CV=9 ሲቪ +ExpAuto10CV=10 ሲቪ +ExpAuto11CV=11 ሲቪ +ExpAuto12CV=12 ሲ.ቪ +ExpAuto3PCV=3 CV እና ሌሎችም። +ExpAuto4PCV=4 CV እና ሌሎችም። +ExpAuto5PCV=5 CV እና ሌሎችም። +ExpAuto6PCV=6 ሲቪ እና ሌሎችም። +ExpAuto7PCV=7 CV እና ሌሎችም። +ExpAuto8PCV=8 ሲቪ እና ሌሎችም። +ExpAuto9PCV=9 CV እና ሌሎችም። +ExpAuto10PCV=10 ሲቪ እና ሌሎችም። +ExpAuto11PCV=11 ሲቪ እና ሌሎችም። +ExpAuto12PCV=12 CV እና ሌሎችም። +ExpAuto13PCV=13 CV እና ሌሎችም። +ExpCyclo=አቅም እስከ 50 ሴ.ሜ.3 +ExpMoto12CV=ሞተርሳይክል 1 ወይም 2 ሲ.ቪ +ExpMoto345CV=ሞተር ብስክሌት 3, 4 ወይም 5 CV +ExpMoto5PCV=ሞተርሳይክል 5 ሲቪ እና ሌሎችም። diff --git a/htdocs/langs/am_ET/donations.lang b/htdocs/langs/am_ET/donations.lang index fc725495c27..09daaca69b7 100644 --- a/htdocs/langs/am_ET/donations.lang +++ b/htdocs/langs/am_ET/donations.lang @@ -31,6 +31,7 @@ DONATION_ART200=የሚያሳስብዎት ከሆነ ከ CGI አንቀጽ 200 ያ DONATION_ART238=የሚያሳስብዎት ከሆነ ከ CGI አንቀጽ 238 ን አሳይ DONATION_ART978=የሚያሳስብዎት ከሆነ ከ CGI አንቀጽ 978 አሳይ DonationPayment=የልገሳ ክፍያ +DonationPayments=Donation payments DonationValidated=ልገሳ %s የተረጋገጠ DonationUseThirdparties=የነባር የሶስተኛ ወገን አድራሻን እንደ ለጋሹ አድራሻ ይጠቀሙ DonationsStatistics=የልገሳ ስታቲስቲክስ diff --git a/htdocs/langs/am_ET/ecm.lang b/htdocs/langs/am_ET/ecm.lang index 494a6c55164..5d479b5ed7f 100644 --- a/htdocs/langs/am_ET/ecm.lang +++ b/htdocs/langs/am_ET/ecm.lang @@ -1,49 +1,56 @@ # Dolibarr language file - Source file is en_US - ecm -ECMNbOfDocs=No. of documents in directory -ECMSection=Directory -ECMSectionManual=Manual directory -ECMSectionAuto=Automatic directory -ECMSectionsManual=Manual tree -ECMSectionsAuto=Automatic tree -ECMSections=Directories -ECMRoot=ECM Root -ECMNewSection=New directory -ECMAddSection=Add directory -ECMCreationDate=Creation date -ECMNbOfFilesInDir=Number of files in directory -ECMNbOfSubDir=Number of sub-directories -ECMNbOfFilesInSubDir=Number of files in sub-directories -ECMCreationUser=Creator -ECMArea=DMS/ECM area -ECMAreaDesc=The DMS/ECM (Document Management System / Electronic Content Management) area allows you to save, share and search quickly all kind of documents in Dolibarr. -ECMAreaDesc2=* Automatic directories are filled automatically when adding documents from card of an element.
* Manual directories can be used to save documents not linked to a particular element. -ECMSectionWasRemoved=Directory %s has been deleted. -ECMSectionWasCreated=Directory %s has been created. -ECMSearchByKeywords=Search by keywords -ECMSearchByEntity=Search by object -ECMSectionOfDocuments=Directories of documents -ECMTypeAuto=Automatic -ECMDocsBy=Documents linked to %s -ECMNoDirectoryYet=No directory created -ShowECMSection=Show directory -DeleteSection=Remove directory -ConfirmDeleteSection=Can you confirm you want to delete the directory %s? -ECMDirectoryForFiles=Relative directory for files -CannotRemoveDirectoryContainsFilesOrDirs=Removal not possible because it contains some files or sub-directories -CannotRemoveDirectoryContainsFiles=Removal not possible because it contains some files -ECMFileManager=File manager -ECMSelectASection=Select a directory in the tree... -DirNotSynchronizedSyncFirst=This directory seems to be created or modified outside ECM module. You must click on "Resync" button first to synchronize disk and database to get content of this directory. -ReSyncListOfDir=Resync list of directories -HashOfFileContent=Hash of file content -NoDirectoriesFound=No directories found -FileNotYetIndexedInDatabase=File not yet indexed into database (try to re-upload it) -ExtraFieldsEcmFiles=Extrafields Ecm Files -ExtraFieldsEcmDirectories=Extrafields Ecm Directories -ECMSetup=ECM Setup -GenerateImgWebp=Duplicate all images with another version with .webp format -ConfirmGenerateImgWebp=If you confirm, you will generate an image in .webp format for all images currently into this folder (subfolders are not included)... -ConfirmImgWebpCreation=Confirm all images duplication -SucessConvertImgWebp=Images successfully duplicated -ECMDirName=Dir name -ECMParentDirectory=Parent directory +ECMNbOfDocs=በማውጫው ውስጥ የሰነዶች ቁጥር +ECMSection=ማውጫ +ECMSectionManual=በእጅ ማውጫ +ECMSectionAuto=ራስ-ሰር ማውጫ +ECMSectionsManual=የግል በእጅ ዛፍ +ECMSectionsAuto=የግል አውቶማቲክ ዛፍ +ECMSectionsMedias=የህዝብ ዛፍ +ECMSections=ማውጫዎች +ECMRoot=ECM ስርወ +ECMNewSection=አዲስ ማውጫ +ECMAddSection=ማውጫ ያክሉ +ECMCreationDate=የተፈጠረበት ቀን +ECMNbOfFilesInDir=በማውጫው ውስጥ ያሉ የፋይሎች ብዛት +ECMNbOfSubDir=የንዑስ ማውጫዎች ብዛት +ECMNbOfFilesInSubDir=በንዑስ ማውጫዎች ውስጥ ያሉ የፋይሎች ብዛት +ECMCreationUser=ፈጣሪ +ECMArea=DMS/ECM አካባቢ +ECMAreaDesc=የዲኤምኤስ/ኢሲኤም (የሰነድ አስተዳደር ስርዓት / የኤሌክትሮኒክስ ይዘት አስተዳደር) አካባቢ በዶሊባርር ውስጥ ሁሉንም ዓይነት ሰነዶች በፍጥነት እንዲያስቀምጡ ፣ እንዲያጋሩ እና እንዲፈልጉ ይፈቅድልዎታል። +ECMAreaDesc2a=* የዛፍ መዋቅር ነፃ ድርጅት ጋር ሰነዶችን ለማስቀመጥ በእጅ ማውጫዎች መጠቀም ይቻላል. +ECMAreaDesc2b=* ከኤለመንቱ ገጽ ላይ ሰነዶችን ሲጨምሩ አውቶማቲክ ማውጫዎች በራስ-ሰር ይሞላሉ። +ECMAreaDesc3=* ይፋዊ ማውጫዎች በንኡስ ማውጫው ውስጥ ያሉ ፋይሎች ናቸው /medias የሰነዶች ማውጫ ውስጥ ያሉ ሁሉም ሰው ሊነበብ እና መግባት አያስፈልግም እና ፋይሉን በግልፅ ማጋራት አያስፈልግም። ለምሳሌ ለኢሜል ወይም ለድር ጣቢያ ሞጁል የምስል ፋይሎችን ለማከማቸት ይጠቅማል። +ECMSectionWasRemoved=ማውጫ %s ተሰርዟል። +ECMSectionWasCreated=ማውጫ %s ተፈጥሯል። +ECMSearchByKeywords=በቁልፍ ቃላት ይፈልጉ +ECMSearchByEntity=በነገር ፈልግ +ECMSectionOfDocuments=የሰነዶች ማውጫዎች +ECMTypeAuto=አውቶማቲክ +ECMDocsBy=ከ%s ጋር የተገናኙ ሰነዶች +ECMNoDirectoryYet=ምንም ማውጫ አልተፈጠረም። +ShowECMSection=ማውጫ አሳይ +DeleteSection=ማውጫ አስወግድ +ConfirmDeleteSection=ማውጫውን %sመሰረዝ መፈለግህን ማረጋገጥ ትችላለህ? +ECMDirectoryForFiles=ለፋይሎች አንጻራዊ ማውጫ +CannotRemoveDirectoryContainsFilesOrDirs=አንዳንድ ፋይሎችን ወይም ንዑስ ማውጫዎችን ስለያዘ ማስወገድ አይቻልም +CannotRemoveDirectoryContainsFiles=አንዳንድ ፋይሎችን ስለያዘ ማስወገድ አይቻልም +ECMFileManager=የፋይል አስተዳዳሪ +ECMSelectASection=በዛፉ ውስጥ ማውጫ ምረጥ... +DirNotSynchronizedSyncFirst=ይህ ማውጫ ከECM ሞጁል ውጪ የተፈጠረ ወይም የተሻሻለ ይመስላል። የዚህን ማውጫ ይዘት ለማግኘት ዲስክ እና ዳታቤዝ ለማመሳሰል መጀመሪያ የ"ዳግም አስምር" የሚለውን ቁልፍ ጠቅ ማድረግ አለቦት። +ReSyncListOfDir=የማውጫዎችን ዝርዝር ዳግም አስምር +HashOfFileContent=የፋይል ይዘት Hash +NoDirectoriesFound=ምንም ማውጫዎች አልተገኙም። +FileNotYetIndexedInDatabase=ፋይል ገና ወደ ዳታቤዝ አልተጠቆመም (እንደገና ለመጫን ይሞክሩ) +ExtraFieldsEcmFiles=Extrafields Ecm ፋይሎች +ExtraFieldsEcmDirectories=Extrafields Ecm ማውጫዎች +ECMSetup=ECM ማዋቀር +GenerateImgWebp=ሁሉንም ምስሎች በሌላ ስሪት በ.webp ቅርጸት ያባዙ +ConfirmGenerateImgWebp=ካረጋገጡ፣ በአሁኑ ጊዜ ወደዚህ አቃፊ ውስጥ ላሉ ምስሎች ሁሉ በድር ፒ ቅርጸት ምስል ያመነጫሉ (ንዑስ አቃፊዎች አልተካተቱም፣ የዌብፕ ምስሎች መጠኑ ከዋናው በላይ ከሆነ አይፈጠሩም)... +ConfirmImgWebpCreation=ሁሉንም ምስሎች ማባዛትን ያረጋግጡ +GenerateChosenImgWebp=የተመረጠውን ምስል ከሌላ ስሪት ከ.webp ቅርጸት ጋር ያባዙ +ConfirmGenerateChosenImgWebp=ካረጋገጡ፣ ምስልን በ.webp ቅርጸት ለምስሉ ያመነጫሉ %s +ConfirmChosenImgWebpCreation=የተመረጡ ምስሎችን ማባዛትን ያረጋግጡ +SucessConvertImgWebp=ምስሎች በተሳካ ሁኔታ ተባዝተዋል። +SucessConvertChosenImgWebp=የተመረጠው ምስል በተሳካ ሁኔታ ተባዝቷል። +ECMDirName=ዲር ስም +ECMParentDirectory=የወላጅ ማውጫ diff --git a/htdocs/langs/am_ET/errors.lang b/htdocs/langs/am_ET/errors.lang index 4caaa3345f0..76239dacf12 100644 --- a/htdocs/langs/am_ET/errors.lang +++ b/htdocs/langs/am_ET/errors.lang @@ -15,12 +15,12 @@ ErrorGroupAlreadyExists=ቡድን %s አስቀድሞ አለ። ErrorEmailAlreadyExists=ኢሜይል %s አስቀድሞ አለ። ErrorRecordNotFound=መዝገብ አልተገኘም። ErrorRecordNotFoundShort=አልተገኘም -ErrorFailToCopyFile=ፋይል '%s ወደ "መቅዳት አልተሳካም ='notranslate'>
%s'። -ErrorFailToCopyDir=ማውጫ '%s ወደ 'ክፍል መቅዳት አልተሳካም ='notranslate'>
%s'። -ErrorFailToRenameFile=የፋይሉን ስም መቀየር አልተሳካም %s ወደ 'ክፍል' ='notranslate'>%s'። +ErrorFailToCopyFile=Failed to copy file '%s' into '%s'. +ErrorFailToCopyDir=Failed to copy directory '%s' into '%s'. +ErrorFailToRenameFile=Failed to rename file '%s' into '%s'. ErrorFailToDeleteFile=ፋይል '%s' ማስወገድ አልተሳካም። ErrorFailToCreateFile=ፋይል መፍጠር አልተሳካም '%s'። -ErrorFailToRenameDir=ማውጫ '%s ክፍል ውስጥ እንደገና መሰየም አልተሳካም ='notranslate'>%s'። +ErrorFailToRenameDir=Failed to rename directory '%s' into '%s'. ErrorFailToCreateDir=ማውጫ '%s' ማውጫ መፍጠር አልተሳካም። ErrorFailToDeleteDir=ማውጫ '%s' መሰረዝ አልተሳካም። ErrorFailToMakeReplacementInto=በፋይል '%s' ፋይል ማድረግ አልተሳካም። @@ -51,7 +51,7 @@ ErrorBadDateFormat=እሴት %s የተሳሳተ የቀን ቅርጸት አለው ErrorWrongDate=ቀኑ ትክክል አይደለም! ErrorFailedToWriteInDir=ማውጫ %s ውስጥ መጻፍ አልተሳካም ErrorFailedToBuildArchive=የማህደር ፋይል %s መገንባት አልተሳካም -ErrorFoundBadEmailInFile=በፋይል ውስጥ ለ%s መስመሮች ትክክል ያልሆነ የኢሜይል አገባብ ተገኝቷል (ምሳሌ መስመር %sከኢሜይል ጋር=b0ecb42ec / span>) +ErrorFoundBadEmailInFile=Found incorrect email syntax for %s lines in file (example line %s with email=%s) ErrorUserCannotBeDelete=ተጠቃሚ ሊሰረዝ አይችልም። ምናልባት ከዶሊባርር አካላት ጋር የተያያዘ ሊሆን ይችላል. ErrorFieldsRequired=አንዳንድ አስፈላጊ መስኮች ባዶ ቀርተዋል። ErrorSubjectIsRequired=የኢሜል ርዕሰ ጉዳይ ያስፈልጋል @@ -81,7 +81,7 @@ ErrorNoValueForRadioType=እባክዎ ለሬዲዮ ዝርዝር ዋጋ ይሙሉ ErrorBadFormatValueList=የዝርዝሩ እሴት ከአንድ በላይ ነጠላ ሰረዝ ሊኖረው አይችልም፡ %s, ግን ቢያንስ አንድ ያስፈልግዎታል: ቁልፍ ፣ እሴት ErrorFieldCanNotContainSpecialCharacters=መስኩ %s ልዩ ቁምፊዎችን መያዝ የለበትም። ErrorFieldCanNotContainSpecialNorUpperCharacters=መስኩ %s ልዩ ቁምፊዎችን መያዝ የለበትም ቁምፊዎች፣ እና በፊደል ፊደል (a-z) መጀመር አለበት። -ErrorFieldMustHaveXChar=መስኩ %s ቢያንስ %s ቁምፊዎች። +ErrorFieldMustHaveXChar=The field %s must have at least %s characters. ErrorNoAccountancyModuleLoaded=ምንም የሂሳብ ሞጁል አልነቃም። ErrorExportDuplicateProfil=ይህ የመገለጫ ስም አስቀድሞ ለዚህ ወደ ውጭ መላኪያ ስብስብ አለ። ErrorLDAPSetupNotComplete=Dolibarr-LDAP ማዛመድ አልተጠናቀቀም። @@ -94,11 +94,11 @@ ErrorRecordIsUsedCantDelete=መዝገብ መሰረዝ አልተቻለም። አ ErrorModuleRequireJavascript=ይህ ባህሪ እንዲሰራ JavaScript መሰናከል የለበትም። ጃቫ ስክሪፕትን ለማንቃት/ለማሰናከል ወደ ሜኑ መነሻ->ማዋቀር->ማሳያ ይሂዱ። ErrorPasswordsMustMatch=ሁለቱም የተተየቡ የይለፍ ቃሎች እርስ በእርስ መመሳሰል አለባቸው ErrorContactEMail=የቴክኒክ ስህተት ተከስቷል። እባኮትን ለሚከተለው ኢሜል አስተዳዳሪን ያግኙ %sእና ስህተቱን ያቅርቡ code %sበመልዕክትህ ውስጥ ወይም ስክሪን ኮፒ ጨምር። ይህ ገጽ. -ErrorWrongValueForField=መስክ %s: '%s' does not match regex rule %s ErrorHtmlInjectionForField=መስክ %s= እሴቱ '%s' የማይፈቀድ ተንኮል አዘል ውሂብ ይዟል። -ErrorFieldValueNotIn=መስክ %s: '%s የ b0aee833365837fz0%s ነባር ማጣቀሻ -ErrorMultipleRecordFoundFromRef=ከ ref %ss ሲፈለግ ብዙ ሪከርዶች ተገኝተዋል። የትኛውን መታወቂያ መጠቀም እንዳለብን ለማወቅ ምንም መንገድ የለም። +ErrorFieldValueNotIn=Field %s: '%s' is not a value found in field %s of %s +ErrorFieldRefNotIn=Field %s: '%s' is not a %s existing ref +ErrorMultipleRecordFoundFromRef=Several record found when searching from ref %s. No way to know which ID to use. ErrorsOnXLines=%s ስህተቶች ተገኝተዋል ErrorFileIsInfectedWithAVirus=የጸረ-ቫይረስ ፕሮግራሙ ፋይሉን ማረጋገጥ አልቻለም (ፋይሉ በቫይረስ ሊጠቃ ይችላል) ErrorFileIsAnInfectedPDFWithJSInside=ፋይሉ በውስጡ በአንዳንድ ጃቫ ስክሪፕት የተበከለ ፒዲኤፍ ነው። @@ -219,7 +219,7 @@ ErrorPhpMailDelivery=በጣም ብዙ የተቀባዮችን ቁጥር እንደ ErrorUserNotAssignedToTask=ተጠቃሚው የሚፈጀውን ጊዜ ማስገባት እንዲችል ለተግባር መመደብ አለበት። ErrorTaskAlreadyAssigned=ተግባር አስቀድሞ ለተጠቃሚ ተሰጥቷል። ErrorModuleFileSeemsToHaveAWrongFormat=የሞጁሉ ጥቅል የተሳሳተ ቅርጸት ያለው ይመስላል። -ErrorModuleFileSeemsToHaveAWrongFormat2=ቢያንስ አንድ የግዴታ ማውጫ ወደ ሞጁል ዚፕ ውስጥ መኖር አለበት፡ %sb0a65d09z071fs > ወይም %s +ErrorModuleFileSeemsToHaveAWrongFormat2=At least one mandatory directory must exists into zip of module: %s or %s ErrorFilenameDosNotMatchDolibarrPackageRules=የሞጁሉ ጥቅል ስም (%s አይመሳሰልም የሚጠበቀው ስም አገባብ፡ %s ErrorDuplicateTrigger=ስህተት፣ የተባዛ የማስነሻ ስም %s። ቀድሞውንም ከ%s ተጭኗል። ErrorNoWarehouseDefined=ስህተት፣ ምንም መጋዘኖች አልተገለጹም። @@ -260,12 +260,12 @@ ErrorBatchNoFoundEnoughQuantityForProductInWarehouse=ለዚህ ሎጥ/ተከታ ErrorOnlyOneFieldForGroupByIsPossible=ለ'ግሩፕ በ' 1 መስክ ብቻ ይቻላል (ሌሎች ይጣላሉ) ErrorTooManyDifferentValueForSelectedGroupBy=በጣም ብዙ የተለያዩ እሴቶች ተገኝተዋል (ከ%s ለ) መስክ '%s' ስለዚህ ልንጠቀምበት አንችልም። ለግራፊክስ እንደ 'ቡድን'። መስክ 'Group By' ተወግዷል። እንደ X-Axis ሊጠቀሙበት ይፈልጉ ይሆናል? ErrorReplaceStringEmpty=ስህተት፣ የሚተካው ሕብረቁምፊ ባዶ ነው። -ErrorProductNeedBatchNumber=ስህተት፣ ምርት '%sቁጥር ብዙ ያስፈልገዋል +ErrorProductNeedBatchNumber=Error, product '%s' need a lot/serial number ErrorProductDoesNotNeedBatchNumber=ስህተት፣ ምርት '%sዕጣ አይቀበልም ተከታታይ ቁጥር ErrorFailedToReadObject=ስህተት፣ የነገር አይነት ማንበብ አልተሳካም %s -ErrorParameterMustBeEnabledToAllwoThisFeature=ስህተት፣ ፓራሜትር %s=span> ክፍል መንቃት አለበት 'notranslate'>conf/conf.php<> የትእዛዝ መስመር በይነገጽን በውስጣዊ የስራ መርሐግብር ለመጠቀም ያስችላል። +ErrorParameterMustBeEnabledToAllwoThisFeature=Error, parameter %s must be enabled into conf/conf.php<> to allow use of Command Line Interface by the internal job scheduler ErrorLoginDateValidity=ስህተት፣ ይህ መግቢያ ከትክክለኛው የቀን ክልል ውጭ ነው። -ErrorValueLength=የመስክ ርዝመት '%sከ'' በላይ መሆን አለበት span class='notranslate'>%s' +ErrorValueLength=Length of field '%s' must be higher than '%s' ErrorReservedKeyword=%s የሚለው ቃል የተያዘ ቁልፍ ቃል ነው። ErrorFilenameReserved=የፋይል ስም %s ጥቅም ላይ ሊውል አይችልም. የተጠበቀ እና የተጠበቀ ትእዛዝ. ErrorNotAvailableWithThisDistribution=በዚህ ስርጭት አይገኝም @@ -337,7 +337,7 @@ WarningParamUploadMaxFileSizeHigherThanPostMaxSize=የእርስዎ ፒኤችፒ WarningPasswordSetWithNoAccount=ለዚህ አባል የይለፍ ቃል ተቀናብሯል። ሆኖም የተጠቃሚ መለያ አልተፈጠረም። ስለዚህ ይህ የይለፍ ቃል ተከማችቷል ነገር ግን ወደ ዶሊባርር ለመግባት መጠቀም አይቻልም። በውጫዊ ሞጁል/በይነገጽ ጥቅም ላይ ሊውል ይችላል ነገር ግን ለአባል ምንም አይነት መግቢያም ሆነ የይለፍ ቃል መግለጽ ካላስፈለገዎት ከአባላት ሞጁል ቅንብር "ለእያንዳንዱ አባል መግቢያን ያስተዳድሩ" የሚለውን አማራጭ ማሰናከል ይችላሉ። መግቢያን ማስተዳደር ከፈለጉ ነገር ግን ምንም የይለፍ ቃል የማይፈልጉ ከሆነ ይህንን ማስጠንቀቂያ ለማስወገድ ይህንን መስክ ባዶ ማቆየት ይችላሉ። ማሳሰቢያ፡ አባሉ ከተጠቃሚ ጋር የተገናኘ ከሆነ ኢሜል እንደ መግቢያ መጠቀምም ይችላል። WarningMandatorySetupNotComplete=ዋና መለኪያዎችን ለማዘጋጀት እዚህ ጠቅ ያድርጉ WarningEnableYourModulesApplications=የእርስዎን ሞጁሎች እና መተግበሪያዎች ለማንቃት እዚህ ጠቅ ያድርጉ -WarningSafeModeOnCheckExecDir=ማስጠንቀቂያ፣ የPHP አማራጭ safe_mode ስላለ ትዕዛዙ በ php መለኪያ በተገለጸው ማውጫ ውስጥ መቀመጥ አለበት safe_mode_exec_dir። +WarningSafeModeOnCheckExecDir=Warning, PHP option safe_mode is on so command must be stored inside a directory declared by php parameter safe_mode_exec_dir. WarningBookmarkAlreadyExists=ይህ ርዕስ ወይም ይህ ኢላማ (ዩአርኤል) ያለው ዕልባት አስቀድሞ አለ። WarningPassIsEmpty=ማስጠንቀቂያ፣ የውሂብ ጎታ ይለፍ ቃል ባዶ ነው። ይህ የደህንነት ጉድጓድ ነው. ይህንን ለማንፀባረቅ የይለፍ ቃል ወደ የውሂብ ጎታዎ ማከል እና የእርስዎን conf.php ፋይል መለወጥ አለብዎት። WarningConfFileMustBeReadOnly=ማስጠንቀቂያ፣ የእርስዎ የማዋቀር ፋይል (htdocs/conf/conf.php) በድር አገልጋይ ሊገለበጥ ይችላል። ይህ ከባድ የደህንነት ጉድጓድ ነው. በድር አገልጋይ ለሚጠቀመው የስርዓተ ክወና ተጠቃሚ የፋይል ፈቃዶችን በንባብ ብቻ ሁነታ ላይ ቀይር። ለዲስክዎ ዊንዶውስ እና ፋት (FAT) ቅርፀትን የሚጠቀሙ ከሆነ ይህ የፋይል ስርዓት በፋይል ላይ ፍቃዶችን ለመጨመር እንደማይፈቅድ ማወቅ አለብዎት ስለዚህ ሙሉ በሙሉ ደህንነቱ የተጠበቀ ሊሆን አይችልም. @@ -349,13 +349,13 @@ WarningCloseAlways=ማስጠንቀቂያ፣ መጠኑ በምንጭ እና በዒ WarningUsingThisBoxSlowDown=ማስጠንቀቂያ፣ ይህን ሳጥን በመጠቀም ሳጥኑን የሚያሳዩ ሁሉንም ገጾች በቁም ነገር ይቀንሱ። WarningClickToDialUserSetupNotComplete=ለተጠቃሚዎ የ ClickToDial መረጃ ማዋቀር አልተጠናቀቀም (በተጠቃሚ ካርድዎ ላይ ጠቅ ለማድረግ ጠቅ ያድርጉ)። WarningFeatureDisabledWithDisplayOptimizedForBlindNoJs=የማሳያ ማዋቀር ለዓይነ ስውራን ወይም ለጽሑፍ አሳሾች ሲመቻች ባህሪው ተሰናክሏል። -WarningPaymentDateLowerThanInvoiceDate=የክፍያ ቀን (%s) ከክፍያ መጠየቂያ ቀን (%s) ለክፍያ መጠየቂያ b0ecb2fz007fe span> +WarningPaymentDateLowerThanInvoiceDate=Payment date (%s) is earlier than invoice date (%s) for invoice %s. WarningTooManyDataPleaseUseMoreFilters=በጣም ብዙ ውሂብ (ከ%s መስመሮች በላይ)። እባክዎ ተጨማሪ ማጣሪያዎችን ይጠቀሙ ወይም ቋሚውን %s ወደ ከፍተኛ ገደብ ያቀናብሩ። WarningSomeLinesWithNullHourlyRate=አንዳንድ ጊዜ በአንዳንድ ተጠቃሚዎች የተመዘገቡ ሲሆን የሰዓት ታሪካቸው አልተገለጸም። በሰዓት 0 %s ዋጋ ጥቅም ላይ ውሏል ነገር ግን ይህ ያጠፋውን ጊዜ የተሳሳተ ግምትን ሊያስከትል ይችላል። WarningYourLoginWasModifiedPleaseLogin=መግቢያህ ተስተካክሏል። ለደህንነት አላማ ከሚቀጥለው እርምጃ በፊት በአዲሱ መግቢያህ መግባት አለብህ። WarningYourPasswordWasModifiedPleaseLogin=የይለፍ ቃልህ ተስተካክሏል። ለደህንነት ሲባል በአዲሱ የይለፍ ቃልዎ አሁን መግባት ይኖርብዎታል። WarningAnEntryAlreadyExistForTransKey=ለዚህ ቋንቋ ለትርጉም ቁልፍ መግቢያ አስቀድሞ አለ። -WarningNumberOfRecipientIsRestrictedInMassAction=ማስጠንቀቂያ፣ የተለያዩ ተቀባይዎች ቁጥር በ%sb09a4b739f17f80 በመጠቀም የተገደበ ነው። በዝርዝሮች ላይ የጅምላ ድርጊቶች +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to %s when using the mass actions on lists WarningDateOfLineMustBeInExpenseReportRange=ማስጠንቀቂያ፣ የመስመሩ ቀን በወጪ ሪፖርቱ ክልል ውስጥ አይደለም። WarningProjectDraft=ፕሮጀክቱ አሁንም በረቂቅ ሁነታ ላይ ነው። ተግባሮችን ለመጠቀም ካቀዱ ማረጋገጥዎን አይርሱ። WarningProjectClosed=ፕሮጀክቱ ተዘግቷል። መጀመሪያ እንደገና መክፈት አለብህ። @@ -373,7 +373,7 @@ WarningModuleNeedRefresh = ሞጁል %s ተሰናክሏል። እሱን WarningPermissionAlreadyExist=ለዚህ ነገር ነባር ፈቃዶች WarningGoOnAccountancySetupToAddAccounts=ይህ ዝርዝር ባዶ ከሆነ ወደ ሜኑ ይሂዱ %s - %s - %s ለመለያ ገበታዎ መለያዎችን ለመጫን ወይም ለመፍጠር። WarningCorrectedInvoiceNotFound=የተስተካከለ ደረሰኝ አልተገኘም። -WarningCommentNotFound=እባክዎ ለ%s ውስጥ ለአስተያየቶች አቀማመጥን ያረጋግጡ። እርምጃዎን ከማስገባትዎ በፊት ፋይል %s +WarningCommentNotFound=Please check placement of start and end comments for %s section in file %s before submitting your action WarningAlreadyReverse=የአክሲዮን እንቅስቃሴ አስቀድሞ ተቀልብሷል SwissQrOnlyVIR = የስዊስQR ደረሰኝ በክሬዲት ማስተላለፍ ክፍያዎች እንዲከፈሉ በተዘጋጁ ደረሰኞች ላይ ብቻ መጨመር ይችላል። diff --git a/htdocs/langs/am_ET/eventorganization.lang b/htdocs/langs/am_ET/eventorganization.lang index 4dffc1e3122..4f4695b5ea0 100644 --- a/htdocs/langs/am_ET/eventorganization.lang +++ b/htdocs/langs/am_ET/eventorganization.lang @@ -36,7 +36,7 @@ EventOrganizationSetup=የክስተት ድርጅት ማዋቀር EventOrganization=የክስተት ድርጅት EventOrganizationSetupPage = የክስተት ድርጅት ማዋቀር ገጽ EVENTORGANIZATION_TASK_LABEL = ፕሮጀክቱ ሲረጋገጥ በራስ ሰር የሚፈጠሩ የተግባር መለያዎች -EVENTORGANIZATION_TASK_LABELTooltip = አንድን ክስተት ለማደራጀት ሲያረጋግጡ አንዳንድ ተግባራት በፕሮጀክቱ ውስጥ በራስ ሰር ሊፈጠሩ ይችላሉ

ለምሳሌ፡
የኮንፈረንስ ጥሪ ይላኩ
ጥሪ ለቡዝ ላክ
Valid Conference classes ='notranslate'>
የቡትስ ማመልከቻን አረጋግጥ
ለክስተቱ የደንበኝነት ምዝገባዎችን ለተሳታፊዎች ክፈትb0342fccfda19b>b0342fccfda19b> የዝግጅቱ ድምጽ ለተናጋሪዎች
የዝግጅቱን አስታዋሽ ለቡዝ አስተናጋጆች ይላኩ
ክስተቱን ለተሰብሳቢዎች አስታዋሽ ላክ +EVENTORGANIZATION_TASK_LABELTooltip = When you validate an event to organize, some tasks can be automatically created in the project

For example:
Send Call for Conferences
Send Call for Booths
Validate suggestions of Conferences
Validate application for Booths
Open subscriptions to the event for attendees
Send a remind of the event to speakers
Send a remind of the event to Booth hosters
Send a remind of the event to attendees EVENTORGANIZATION_TASK_LABELTooltip2=ስራዎችን በራስ-ሰር መፍጠር ካላስፈለገዎት ባዶ ያስቀምጡ። EVENTORGANIZATION_CATEG_THIRDPARTY_CONF = የሆነ ሰው ጉባኤን ሲጠቁም ወደ ሶስተኛ ወገኖች የሚታከል ምድብ EVENTORGANIZATION_CATEG_THIRDPARTY_BOOTH = ዳስ ሲጠቁሙ ወደ ሶስተኛ ወገኖች የሚታከሉ ምድብ @@ -88,6 +88,7 @@ PriceOfRegistration=የምዝገባ ዋጋ PriceOfRegistrationHelp=በክስተቱ ላይ ለመመዝገብ ወይም ለመሳተፍ የሚከፈል ዋጋ PriceOfBooth=ዳስ ለመቆም የደንበኝነት ምዝገባ ዋጋ PriceOfBoothHelp=ዳስ ለመቆም የደንበኝነት ምዝገባ ዋጋ +EventOrganizationICSLinkProject=Link ICS for the event EventOrganizationICSLink=ለኮንፈረንስ ICS አገናኝ ConferenceOrBoothInformation=የኮንፈረንስ ወይም የቡዝ መረጃ Attendees=ተሳታፊዎች @@ -127,7 +128,7 @@ PublicAttendeeSubscriptionPage = ለዚህ ክስተት ብቻ የህዝብ ግ MissingOrBadSecureKey = የደህንነት ቁልፉ ልክ ያልሆነ ወይም ጠፍቷል EvntOrgWelcomeMessage = ይህ ቅጽ ለዝግጅቱ እንደ አዲስ ተሳታፊ እንዲመዘገቡ ያስችልዎታል EvntOrgDuration = ይህ ኮንፈረንስ በ%s ይጀምር እና በ%s ላይ ያበቃል። -ConferenceAttendeeFee = የስብሰባው ተሳታፊዎች ክፍያ ለዝግጅቱ፡ '%sከ%s እስከ b0ecb2ec87fe49fez0 >. +ConferenceAttendeeFee = Conference attendee fee for the event : '%s' occurring from %s to %s. BoothLocationFee = የዝግጅቱ ቦታ፡ '%s ከ%s እስከ b0ecb2ec87fe49fez0 የሚከሰት EventType = የክስተት አይነት LabelOfBooth=የዳስ መለያ diff --git a/htdocs/langs/am_ET/exports.lang b/htdocs/langs/am_ET/exports.lang index f053588a0b7..5a6ca800842 100644 --- a/htdocs/langs/am_ET/exports.lang +++ b/htdocs/langs/am_ET/exports.lang @@ -83,38 +83,38 @@ SelectFormat=ይህን የማስመጣት ፋይል ቅርጸት ይምረጡ RunImportFile=ውሂብ አስመጣ NowClickToRunTheImport=የማስመጣት ማስመሰል ውጤቶችን ያረጋግጡ። ማናቸውንም ስህተቶች ያስተካክሉ እና እንደገና ይሞክሩ።
አስመሳይው ምንም ስህተት እንደሌለው ሲገልጽ ውሂቡን ወደ ዳታቤዝ ማስገባት መቀጠል ይችላሉ። DataLoadedWithId=የገባው ውሂብ በእያንዳንዱ የውሂብ ጎታ ሠንጠረዥ ውስጥ ይህ የማስመጣት መታወቂያ ያለው ተጨማሪ መስክ ይኖረዋል፡ %s፣ ከዚህ ማስመጣት ጋር የተያያዘ ችግርን በማጣራት ላይ እንዲፈለግ ለማድረግ። -ErrorMissingMandatoryValue=አስገዳጅ ውሂብ በአምድ %s ላይ ባለው የምንጭ ፋይል ውስጥ ባዶ ነው። +ErrorMissingMandatoryValue=Mandatory data is empty in the source file in column %s. TooMuchErrors=አሁንም አሉ %sሌሎች የውጤት መስመሮች ግን ስህተቶች አሏቸው ተገድቧል። TooMuchWarnings=አሁንም አሉ %sሌሎች የውጤት መስመሮች ግን ማስጠንቀቂያዎች አሉት ተገድቧል። EmptyLine=ባዶ መስመር (ይወገዳል) -CorrectErrorBeforeRunningImport=አንተ አለብህ ሁሉንም ስህተቶች ማረም notranslate'>
አስመጪውን እያሄደ ነው። +CorrectErrorBeforeRunningImport=You must correct all errors before running the definitive import. FileWasImported=ፋይሉ የመጣው በቁጥር %s ነው። YouCanUseImportIdToFindRecord=በመስክ import_key='%s'በማጣራት በውሂብ ጎታህ ውስጥ ማግኘት ትችላለህ። > ። -NbOfLinesOK=ምንም ስህተቶች እና ማስጠንቀቂያዎች የሌሉባቸው መስመሮች ብዛት፡ %s
+NbOfLinesOK=Number of lines with no errors and no warnings: %s. NbOfLinesImported=በተሳካ ሁኔታ የገቡ የመስመሮች ብዛት፡ %s። DataComeFromNoWhere=የማስገባት እሴት ከምንጭ ፋይል ውስጥ ከየትም አይመጣም። DataComeFromFileFieldNb=የማስገባት እሴት ከአምድ %s ምንጭ ፋይል ይመጣል። -DataComeFromIdFoundFromRef=ከምንጩ ፋይል የሚመጣው እሴት የሚጠቀመውን የወላጅ ነገር መታወቂያ ለማግኘት ጥቅም ላይ ይውላል (ስለዚህ ነገሩ %s
በመረጃ ቋቱ ውስጥ መኖር አለበት። -DataComeFromIdFoundFromCodeId=ከምንጩ ፋይል የሚመጣው ኮድ ዋጋ የሚጠቀመው የወላጅ ነገር መታወቂያ ለማግኘት ጥቅም ላይ ይውላል (ስለዚህ ከምንጩ ፋይል የሚገኘው ኮድ በመዝገበ ቃላት %s)። መታወቂያውን ካወቁ ከኮዱ ይልቅ በምንጭ ፋይሉ ውስጥ ሊጠቀሙበት እንደሚችሉ ልብ ይበሉ። ማስመጣት በሁለቱም ሁኔታዎች መስራት አለበት. +DataComeFromIdFoundFromRef=The value that comes from the source file will be used to find the id of the parent object to use (so the object %s that has the ref. from source file must exist in the database). +DataComeFromIdFoundFromCodeId=The value of code that comes from source file will be used to find the id of the parent object to use (so the code from source file must exist in the dictionary %s). Note that if you know the id, you can also use it in the source file instead of the code. Import should work in both cases. DataIsInsertedInto=ከምንጩ ፋይል የሚመጣው ውሂብ በሚከተለው መስክ ውስጥ ይገባል፡- DataIDSourceIsInsertedInto=በምንጭ ፋይል ውስጥ ያለውን ውሂብ ተጠቅሞ የተገኘው የወላጅ ነገር መታወቂያ በሚከተለው መስክ ውስጥ ይገባል፡ DataCodeIDSourceIsInsertedInto=ከኮድ የተገኘው የወላጅ መስመር መታወቂያ በሚከተለው መስክ ውስጥ ይገባል፡ SourceRequired=የውሂብ ዋጋ ግዴታ ነው SourceExample=ሊሆን የሚችል የውሂብ እሴት ምሳሌ ExampleAnyRefFoundIntoElement=ለኤለመንት %s የተገኘ ማንኛውም ማጣቀሻ -ExampleAnyCodeOrIdFoundIntoDictionary=መዝገበ ቃላት ውስጥ የተገኘ ማንኛውም ኮድ (ወይም መታወቂያ) %ss -CSVFormatDesc=በነጠላ ሰረዝ የተለየ እሴት የፋይል ቅርጸት (.csv)።b0342fccfda19 መስኮች በተከፋፋይ የሚለያዩበት የጽሑፍ ፋይል ቅርጸት ነው [ %s]። መለያየት በመስክ ይዘት ውስጥ ከተገኘ፣ ሜዳው በክብ ቁምፊ [%s የተጠጋጋ ነው። ክብ ቁምፊን ለማምለጥ የማምለጫ ቁምፊ [ %s ነው. -Excel95FormatDesc=Excel የፋይል ቅርጸት (.xls)
ይህ ነው
Excel የፋይል ቅርጸት (.xlsx)
ነው የ Excel 2007 ቅርጸት (የተመን ሉህ ኤምኤል)። -TsvFormatDesc=ትር የተለየ እሴት የፋይል ቅርጸት (.tsv)b0342fccfda19 ነው መስኮች በታቡሌተር [tab] የሚለያዩበት የጽሑፍ ፋይል ቅርጸት። +ExampleAnyCodeOrIdFoundIntoDictionary=Any code (or id) found into dictionary %s +CSVFormatDesc=Comma Separated Value file format (.csv).
This is a text file format where fields are separated by a separator [ %s ]. If separator is found inside a field content, field is rounded by round character [ %s ]. Escape character to escape round character is [ %s ]. +Excel95FormatDesc=Excel file format (.xls)
This is the native Excel 95 format (BIFF5). +Excel2007FormatDesc=Excel file format (.xlsx)
This is the native Excel 2007 format (SpreadsheetML). +TsvFormatDesc=Tab Separated Value file format (.tsv)
This is a text file format where fields are separated by a tabulator [tab]. ExportFieldAutomaticallyAdded=መስክ %s በቀጥታ ታክሏል። ተመሳሳይ መስመሮች እንደ የተባዛ መዝገብ እንዲታዩ ያደርግዎታል (ይህ መስክ ሲጨመር ሁሉም መስመሮች የራሳቸው መታወቂያ ይኖራቸዋል እና ይለያያሉ)። CsvOptions=የCSV ቅርጸት አማራጮች Separator=የመስክ መለያያ Enclosure=ሕብረቁምፊ Delimiter SpecialCode=ልዩ ኮድ ExportStringFilter=%% በጽሁፉ ውስጥ አንድ ወይም ከዚያ በላይ ቁምፊዎችን ለመተካት ይፈቅዳል. -ExportDateFilter=አይይ, ያኪ, ያሂድም, አንድ አመት / YYYCHED, yyyyme, yyyyme, Yyyymd + yyyymd + yyyymd: span class='notranslate'>
> ዓዓዓህ፣ > ዓዓዓህ፣ > ዓዓዓዓምዲ፡ ማጣሪያዎች በሁሉም በሚቀጥሉት ዓመታት/ወራቶች/ቀናቶች
<አህዋይ፣ <አህዋይ፣ አአአአአአአአ፡ ማጣሪያዎች በሁሉም ያለፉት አመታት/ወራቶች/ቀናቶች -ExportNumericFilter=NNNNN በአንድ እሴት ያጣራል
NNNNN+NNNNN በተለያዩ የእሴቶች ክልል ላይ ያጣራል
b208912a /span>> NNNNN በከፍተኛ እሴቶች ያጣራል። +ExportDateFilter=YYYY, YYYYMM, YYYYMMDD: filters by one year/month/day
YYYY+YYYY, YYYYMM+YYYYMM, YYYYMMDD+YYYYMMDD: filters over a range of years/months/days
> YYYY, > YYYYMM, > YYYYMMDD: filters on all following years/months/days
< YYYY, < YYYYMM, < YYYYMMDD: filters on all previous years/months/days +ExportNumericFilter=NNNNN filters by one value
NNNNN+NNNNN filters over a range of values
< NNNNN filters by lower values
> NNNNN filters by higher values ImportFromLine=ከመስመር ቁጥር ጀምሮ አስመጣ EndAtLineNb=በመስመር ቁጥር ጨርስ ImportFromToLine=ክልል ገድብ (ከ - ወደ)። ለምሳሌ. የራስጌ መስመር(ዎችን) ለመተው። diff --git a/htdocs/langs/am_ET/help.lang b/htdocs/langs/am_ET/help.lang index 048de16d3c0..b98cbf68256 100644 --- a/htdocs/langs/am_ET/help.lang +++ b/htdocs/langs/am_ET/help.lang @@ -1,23 +1,23 @@ # Dolibarr language file - Source file is en_US - help -CommunitySupport=Forum/Wiki support -EMailSupport=Emails support -RemoteControlSupport=Online real-time / remote support -OtherSupport=Other support -ToSeeListOfAvailableRessources=To contact/see available resources: -HelpCenter=Help Center -DolibarrHelpCenter=Dolibarr Help and Support Center -ToGoBackToDolibarr=Otherwise, click here to continue to use Dolibarr. -TypeOfSupport=Type of support -TypeSupportCommunauty=Community (free) -TypeSupportCommercial=Commercial -TypeOfHelp=Type -NeedHelpCenter=Need help or support? -Efficiency=Efficiency -TypeHelpOnly=Help only -TypeHelpDev=Help+Development -TypeHelpDevForm=Help+Development+Training -BackToHelpCenter=Otherwise, go back to Help center home page. -LinkToGoldMember=You can call one of the trainers preselected by Dolibarr for your language (%s) by clicking their Widget (status and maximum price are automatically updated): -PossibleLanguages=Supported languages -SubscribeToFoundation=Help the Dolibarr project, subscribe to the foundation -SeeOfficalSupport=For official Dolibarr support in your language:
%s +CommunitySupport=መድረክ/ዊኪ ድጋፍ +EMailSupport=የኢሜል ድጋፍ +RemoteControlSupport=የመስመር ላይ ቅጽበታዊ / የርቀት ድጋፍ +OtherSupport=ሌላ ድጋፍ +ToSeeListOfAvailableRessources=ያሉትን ምንጮች ለማግኘት/ለመመልከት፡- +HelpCenter=የእገዛ ማዕከል +DolibarrHelpCenter=ዶሊባርር የእርዳታ እና ድጋፍ ማዕከል +ToGoBackToDolibarr=አለበለዚያ Dolibarr መጠቀም ለመቀጠል እዚህ ጠቅ ያድርጉ። +TypeOfSupport=የድጋፍ አይነት +TypeSupportCommunauty=ማህበረሰብ (ነጻ) +TypeSupportCommercial=ንግድ +TypeOfHelp=ዓይነት +NeedHelpCenter=ድጋፍ ይፈልጋሉ? +Efficiency=ቅልጥፍና +TypeHelpOnly=እገዛ ብቻ +TypeHelpDev=እገዛ+ልማት +TypeHelpDevForm=እገዛ+ልማት+ስልጠና +BackToHelpCenter=አለበለዚያ ወደ የእገዛ ማዕከል መነሻ ገጽ ይመለሱ። +LinkToGoldMember=ለቋንቋዎ በዶሊባርር ከተመረጡት አሰልጣኞች አንዱን መደወል ይችላሉ (%s) መግብርን ጠቅ በማድረግ (ሁኔታ እና ከፍተኛ ዋጋ በራስ-ሰር ይሻሻላል)። +PossibleLanguages=የሚደገፉ ቋንቋዎች +SubscribeToFoundation=የዶሊባርር ፕሮጀክትን ያግዙ, ለመሠረት ይመዝገቡ +SeeOfficalSupport=For official Dolibarr support in your language:
%s diff --git a/htdocs/langs/am_ET/holiday.lang b/htdocs/langs/am_ET/holiday.lang index d5285b38b97..6433c022527 100644 --- a/htdocs/langs/am_ET/holiday.lang +++ b/htdocs/langs/am_ET/holiday.lang @@ -27,7 +27,7 @@ UserForApprovalLastname=የተፈቀደ ተጠቃሚ የመጨረሻ ስም UserForApprovalLogin=የፍቃድ ተጠቃሚ መግቢያ DescCP=መግለጫ SendRequestCP=የእረፍት ጥያቄ ፍጠር -DelayToRequestCP=የመልቀቅ ጥያቄ ቢያንስ %s ቀን(ዎች)b09a4b739f17f80 ከነሱ በፊት. +DelayToRequestCP=Leave requests must be made at least %s day(s) before them. MenuConfCP=የእረፍት ጊዜ ሚዛን SoldeCPUser=ቀሪ ሂሳብን ይተው (በቀናት ውስጥ)፡ %s ErrorEndDateCP=ከመጀመሪያው ቀን የሚበልጥ የመጨረሻ ቀን መምረጥ አለብህ። @@ -109,7 +109,6 @@ TypeWasDisabledOrRemoved=የመልቀቅ አይነት (id %s) ተሰናክሏል LastHolidays=የቅርብ ጊዜ %s የመልቀቂያ ጥያቄዎች AllHolidays=ሁሉም የመልቀቅ ጥያቄዎች HalfDay=ግማሽ ቀን -NotTheAssignedApprover=እርስዎ የተመደቡት አጽዳቂ አይደሉም LEAVE_PAID=የሚከፈልበት የእረፍት ጊዜ LEAVE_SICK=የህመም ጊዜ የስራ ዕረፍት ፍቃድ LEAVE_OTHER=ሌላ ዕረፍት diff --git a/htdocs/langs/am_ET/hrm.lang b/htdocs/langs/am_ET/hrm.lang index 8724bb805a6..564fc9d7042 100644 --- a/htdocs/langs/am_ET/hrm.lang +++ b/htdocs/langs/am_ET/hrm.lang @@ -2,80 +2,96 @@ # Admin -HRM_EMAIL_EXTERNAL_SERVICE=Email to prevent HRM external service -Establishments=Establishments -Establishment=Establishment -NewEstablishment=New establishment -DeleteEstablishment=Delete establishment -ConfirmDeleteEstablishment=Are you sure you wish to delete this establishment? -OpenEtablishment=Open establishment -CloseEtablishment=Close establishment +HRM_EMAIL_EXTERNAL_SERVICE=የኤችአርኤም የውጭ አገልግሎትን ለመከላከል ኢሜይል ያድርጉ +Establishments=ማቋቋሚያዎች +Establishment=መመስረት +NewEstablishment=አዲስ ተቋም +DeleteEstablishment=መመስረትን ሰርዝ +ConfirmDeleteEstablishment=እርግጠኛ ነዎት ይህን ተቋም መሰረዝ ይፈልጋሉ? +OpenEtablishment=ክፍት ተቋም +CloseEtablishment=ማቋቋሚያ ዝጋ # Dictionary -DictionaryPublicHolidays=Leave - Public holidays -DictionaryDepartment=HRM - Department list -DictionaryFunction=HRM - Job positions +DictionaryPublicHolidays=መልቀቅ - የህዝብ በዓላት +DictionaryDepartment=HRM - ድርጅታዊ ክፍል +DictionaryFunction=HRM - የሥራ ቦታዎች # Module -Employees=Employees -Employee=Employee -NewEmployee=New employee -ListOfEmployees=List of employees -HrmSetup=HRM module setup -HRM_MAXRANK=Maximum rank for a skill -HRM_DEFAULT_SKILL_DESCRIPTION=Default description of ranks when skill is created -deplacement=Shift -DateEval=Evaluation date -JobCard=Job card -Job=Job -Jobs=Jobs -NewSkill=New Skill -SkillType=Skill type -Skilldets=List of ranks for this skill -Skilldet=Skill level -rank=Rank -ErrNoSkillSelected=No skill selected -ErrSkillAlreadyAdded=This skill is already in the list -SkillHasNoLines=This skill has no lines -skill=Skill -Skills=Skills -SkillCard=Skill card -EmployeeSkillsUpdated=Employee skills have been updated (see "Skills" tab of employee card) -Eval=Evaluation -Evals=Evaluations -NewEval=New evaluation -ValidateEvaluation=Validate evaluation -ConfirmValidateEvaluation=Are you sure you want to validate this evaluation with reference %s? -EvaluationCard=Evaluation card -RequiredRank=Required rank for this job -EmployeeRank=Employee rank for this skill -Position=Position -Positions=Positions -PositionCard=Position card -EmployeesInThisPosition=Employees in this position -group1ToCompare=Usergroup to analyze -group2ToCompare=Second usergroup for comparison -OrJobToCompare=Compare to job skills requirements -difference=Difference -CompetenceAcquiredByOneOrMore=Competence acquired by one or more users but not requested by the second comparator -MaxlevelGreaterThan=Max level greater than the one requested -MaxLevelEqualTo=Max level equal to that demand -MaxLevelLowerThan=Max level lower than that demand -MaxlevelGreaterThanShort=Employee level greater than the one requested -MaxLevelEqualToShort=Employee level equals to that demand -MaxLevelLowerThanShort=Employee level lower than that demand -SkillNotAcquired=Skill not acquired by all users and requested by the second comparator -legend=Legend -TypeSkill=Skill type -AddSkill=Add skills to job -RequiredSkills=Required skills for this job -UserRank=User Rank -SkillList=Skill list -SaveRank=Save rank -knowHow=Know how -HowToBe=How to be -knowledge=Knowledge -AbandonmentComment=Abandonment comment -DateLastEval=Date last evaluation -NoEval=No evaluation done for this employee -HowManyUserWithThisMaxNote=Number of users with this rank -HighestRank=Highest rank -SkillComparison=Skill comparison +Employees=ሰራተኞች +Employee=ሰራተኛ +NewEmployee=አዲስ ሰራተኛ +ListOfEmployees=የሰራተኞች ዝርዝር +HrmSetup=HRM ሞጁል ማዋቀር +SkillsManagement=የችሎታ አስተዳደር +HRM_MAXRANK=ክህሎትን ለመሰየም ከፍተኛው የደረጃዎች ብዛት +HRM_DEFAULT_SKILL_DESCRIPTION=ክህሎት ሲፈጠር የደረጃዎች ነባሪ መግለጫ +deplacement=ፈረቃ +DateEval=የግምገማ ቀን +JobCard=የሥራ ካርድ +NewJobProfile=አዲስ የስራ መገለጫ +JobProfile=የስራ መገለጫ +JobsProfiles=የስራ መገለጫዎች +NewSkill=አዲስ ችሎታ +SkillType=የክህሎት አይነት +Skilldets=ለዚህ ችሎታ የደረጃዎች ዝርዝር +Skilldet=የክህሎት ደረጃ +rank=ደረጃ +ErrNoSkillSelected=ምንም ችሎታ አልተመረጠም። +ErrSkillAlreadyAdded=ይህ ችሎታ አስቀድሞ በዝርዝሩ ውስጥ አለ። +SkillHasNoLines=ይህ ችሎታ ምንም መስመሮች የለውም +Skill=ችሎታ +Skills=ችሎታዎች +SkillCard=የክህሎት ካርድ +EmployeeSkillsUpdated=የሰራተኛ ችሎታዎች ተዘምነዋል (የሰራተኛ ካርድን "ክህሎት" ትርን ይመልከቱ) +Eval=ግምገማ +Evals=ግምገማዎች +NewEval=አዲስ ግምገማ +ValidateEvaluation=ግምገማን ያረጋግጡ +ConfirmValidateEvaluation=Are you sure you want to validate this evaluation with the reference %s? +EvaluationCard=የግምገማ ካርድ +RequiredRank=ለሥራው መገለጫ አስፈላጊ ደረጃ +RequiredRankShort=ተፈላጊ ደረጃ +PositionsWithThisProfile=ከዚህ የስራ መገለጫዎች ጋር ያሉ ቦታዎች +EmployeeRank=ለዚህ ችሎታ የሰራተኛ ደረጃ +EmployeeRankShort=የሰራተኛ ደረጃ +EmployeePosition=የሰራተኛ አቀማመጥ +EmployeePositions=የሰራተኛ ቦታዎች +EmployeesInThisPosition=በዚህ ቦታ ላይ ያሉ ሰራተኞች +group1ToCompare=ለመተንተን የተጠቃሚ ቡድን +group2ToCompare=ለማነፃፀር ሁለተኛ የተጠቃሚ ቡድን +OrJobToCompare=ከስራ መገለጫ የክህሎት መስፈርቶች ጋር አወዳድር +difference=ልዩነት +CompetenceAcquiredByOneOrMore=በአንድ ወይም በብዙ ተጠቃሚዎች የተገኘ ብቃት ግን በሁለተኛው ንጽጽር አልተጠየቀም። +MaxlevelGreaterThan=የሰራተኛ ደረጃ ከሚጠበቀው ደረጃ ይበልጣል +MaxLevelEqualTo=የሰራተኛ ደረጃ ከሚጠበቀው ደረጃ ጋር እኩል ነው +MaxLevelLowerThan=የሰራተኛ ደረጃ ከሚጠበቀው ደረጃ ያነሰ ነው +MaxlevelGreaterThanShort=ከተጠበቀው በላይ ደረጃ +MaxLevelEqualToShort=ከተጠበቀው ደረጃ ጋር እኩል የሆነ ደረጃ +MaxLevelLowerThanShort=ከተጠበቀው በታች ደረጃ +SkillNotAcquired=ችሎታ በሁሉም ተጠቃሚዎች ያልተገኘ እና በሁለተኛው ንፅፅር የተጠየቀ +legend=አፈ ታሪክ +TypeSkill=የክህሎት አይነት +AddSkill=ወደ ሥራ መገለጫ ችሎታዎችን ያክሉ +RequiredSkills=ለዚህ የሥራ መገለጫ የሚያስፈልጉ ክህሎቶች +UserRank=የተጠቃሚ ደረጃ +SkillList=የክህሎት ዝርዝር +SaveRank=ደረጃ አስቀምጥ +TypeKnowHow=ተረዳ +TypeHowToBe=እንዴት መሆን እንደሚቻል +TypeKnowledge=እውቀት +AbandonmentComment=የመተው አስተያየት +DateLastEval=የመጨረሻ ግምገማ ቀን +NoEval=ለዚህ ሰራተኛ ምንም አይነት ግምገማ አልተደረገም። +HowManyUserWithThisMaxNote=የዚህ ደረጃ ተጠቃሚዎች ብዛት +HighestRank=ከፍተኛ ደረጃ +SkillComparison=የክህሎት ንጽጽር +ActionsOnJob=በዚህ ሥራ ላይ ያሉ ክስተቶች +VacantPosition=የሥራ ማስታወቂያ +VacantCheckboxHelper=ይህንን አማራጭ መፈተሽ ያልተሞሉ የስራ መደቦችን ያሳያል (የስራ ክፍት ቦታ) +SaveAddSkill = ችሎታ(ዎች) ታክሏል። +SaveLevelSkill = የክህሎት(ዎች) ደረጃ ተቀምጧል +DeleteSkill = ችሎታ ተወግዷል +SkillsExtraFields=ተጨማሪ ባህሪያት (ችሎታዎች) +JobsExtraFields=ተጨማሪ ባህሪያት (የስራ መገለጫ) +EvaluationsExtraFields=ተጨማሪ ባህሪያት (ግምገማዎች) +NeedBusinessTravels=የንግድ ጉዞዎች ያስፈልጉታል +NoDescription=መግለጫ የለም። +TheJobProfileHasNoSkillsDefinedFixBefore=የዚህ ሰራተኛ የተገመገመ የስራ መገለጫ በእሱ ላይ የተገለጸ ችሎታ የለውም. እባክህ ችሎታ(ዎች) ጨምር፣ ከዛ ሰርዝ እና ግምገማውን እንደገና አስጀምር። diff --git a/htdocs/langs/am_ET/install.lang b/htdocs/langs/am_ET/install.lang index 989f6aa9793..cee2cc8b055 100644 --- a/htdocs/langs/am_ET/install.lang +++ b/htdocs/langs/am_ET/install.lang @@ -1,219 +1,219 @@ # Dolibarr language file - Source file is en_US - install -InstallEasy=Just follow the instructions step by step. -MiscellaneousChecks=Prerequisites check -ConfFileExists=Configuration file %s exists. -ConfFileDoesNotExistsAndCouldNotBeCreated=Configuration file %s does not exist and could not be created! -ConfFileCouldBeCreated=Configuration file %s could be created. -ConfFileIsNotWritable=Configuration file %s is not writable. Check permissions. For first install, your web server must be able to write into this file during configuration process ("chmod 666" for example on a Unix like OS). -ConfFileIsWritable=Configuration file %s is writable. -ConfFileMustBeAFileNotADir=Configuration file %s must be a file, not a directory. -ConfFileReload=Reloading parameters from configuration file. -PHPSupportPOSTGETOk=This PHP supports variables POST and GET. -PHPSupportPOSTGETKo=It's possible your PHP setup does not support variables POST and/or GET. Check the parameter variables_order in php.ini. -PHPSupportSessions=This PHP supports sessions. -PHPSupport=This PHP supports %s functions. -PHPMemoryOK=Your PHP max session memory is set to %s. This should be enough. +InstallEasy=መመሪያዎቹን ደረጃ በደረጃ ብቻ ይከተሉ። +MiscellaneousChecks=ቅድመ-ሁኔታዎች ቼክ +ConfFileExists=የማዋቀር ፋይል %s አለ። +ConfFileDoesNotExistsAndCouldNotBeCreated=የማዋቀር ፋይል %s ሊኖር አይችልም እና አይችልም! +ConfFileCouldBeCreated=የማዋቀር ፋይል %s ሊፈጠር ይችላል። +ConfFileIsNotWritable=የማዋቀር ፋይል %s writable አይደለም ፈቃዶችን ያረጋግጡ። ለመጀመሪያ ጭነት፣ የእርስዎ ድር አገልጋይ በማዋቀር ሂደት ("chmod 666" ለምሳሌ በዩኒክስ እንደ OS ላይ) ወደዚህ ፋይል መፃፍ መቻል አለበት። +ConfFileIsWritable=የማዋቀር ፋይል %s wri የሚችል ነው። +ConfFileMustBeAFileNotADir=የማዋቀሪያ ፋይል %sፋይል ሳይሆን ማውጫ መሆን አለበት። +ConfFileReload=መለኪያዎችን ከውቅረት ፋይል እንደገና በመጫን ላይ። +NoReadableConfFileSoStartInstall=የማዋቀሪያው ፋይል conf/conf.php የለም ወይም አይነበብም። እሱን ለማስጀመር ለመሞከር የመጫን ሂደቱን እናካሂዳለን። +PHPSupportPOSTGETOk=ይህ ፒኤችፒ ተለዋዋጮችን POST እና GET ይደግፋል። +PHPSupportPOSTGETKo=የእርስዎ ፒኤችፒ ማዋቀር ተለዋዋጮችን አይደግፍም POST እና/ወይም GET። መለኪያውን በphp.ini ውስጥ variables_orderን ያረጋግጡ። +PHPSupportSessions=ይህ ፒኤችፒ ክፍለ ጊዜዎችን ይደግፋል። +PHPSupport=ይህ PHP የ%s ተግባራትን ይደግፋል። +PHPMemoryOK=የእርስዎ ፒኤችፒ ከፍተኛ ክፍለ ጊዜ ማህደረ ትውስታ ወደ %s ተቀናብሯል። ይህ በቂ መሆን አለበት. PHPMemoryTooLow=Your PHP max session memory is set to %s bytes. This is too low. Change your php.ini to set memory_limit parameter to at least %s bytes. -Recheck=Click here for a more detailed test -ErrorPHPDoesNotSupportSessions=Your PHP installation does not support sessions. This feature is required to allow Dolibarr to work. Check your PHP setup and permissions of the sessions directory. -ErrorPHPDoesNotSupportGD=Your PHP installation does not support GD graphical functions. No graphs will be available. -ErrorPHPDoesNotSupportCurl=Your PHP installation does not support Curl. -ErrorPHPDoesNotSupportCalendar=Your PHP installation does not support php calendar extensions. -ErrorPHPDoesNotSupportUTF8=Your PHP installation does not support UTF8 functions. Dolibarr cannot work correctly. Resolve this before installing Dolibarr. -ErrorPHPDoesNotSupportIntl=Your PHP installation does not support Intl functions. -ErrorPHPDoesNotSupportMbstring=Your PHP installation does not support mbstring functions. -ErrorPHPDoesNotSupportxDebug=Your PHP installation does not support extend debug functions. -ErrorPHPDoesNotSupport=Your PHP installation does not support %s functions. -ErrorDirDoesNotExists=Directory %s does not exist. -ErrorGoBackAndCorrectParameters=Go back and check/correct the parameters. -ErrorWrongValueForParameter=You may have typed a wrong value for parameter '%s'. -ErrorFailedToCreateDatabase=Failed to create database '%s'. -ErrorFailedToConnectToDatabase=Failed to connect to database '%s'. -ErrorDatabaseVersionTooLow=Database version (%s) too old. Version %s or higher is required. -ErrorPHPVersionTooLow=PHP version too old. Version %s is required. -ErrorConnectedButDatabaseNotFound=Connection to server successful but database '%s' not found. -ErrorDatabaseAlreadyExists=Database '%s' already exists. -IfDatabaseNotExistsGoBackAndUncheckCreate=If the database does not exist, go back and check option "Create database". -IfDatabaseExistsGoBackAndCheckCreate=If database already exists, go back and uncheck "Create database" option. -WarningBrowserTooOld=Version of browser is too old. Upgrading your browser to a recent version of Firefox, Chrome or Opera is highly recommended. -PHPVersion=PHP Version -License=Using license -ConfigurationFile=Configuration file -WebPagesDirectory=Directory where web pages are stored -DocumentsDirectory=Directory to store uploaded and generated documents -URLRoot=URL Root -ForceHttps=Force secure connections (https) -CheckToForceHttps=Check this option to force secure connections (https).
This requires that the web server is configured with an SSL certificate. -DolibarrDatabase=Dolibarr Database -DatabaseType=Database type -DriverType=Driver type -Server=Server -ServerAddressDescription=Name or ip address for the database server. Usually 'localhost' when the database server is hosted on the same server as the web server. -ServerPortDescription=Database server port. Keep empty if unknown. -DatabaseServer=Database server -DatabaseName=Database name -DatabasePrefix=Database table prefix -DatabasePrefixDescription=Database table prefix. If empty, defaults to llx_. -AdminLogin=User account for the Dolibarr database owner. -PasswordAgain=Retype password confirmation -AdminPassword=Password for Dolibarr database owner. -CreateDatabase=Create database -CreateUser=Create user account or grant user account permission on the Dolibarr database -DatabaseSuperUserAccess=Database server - Superuser access -CheckToCreateDatabase=Check the box if the database does not exist yet and so must be created.
In this case, you must also fill in the user name and password for the superuser account at the bottom of this page. -CheckToCreateUser=Check the box if:
the database user account does not yet exist and so must be created, or
if the user account exists but the database does not exist and permissions must be granted.
In this case, you must enter the user account and password and also the superuser account name and password at the bottom of this page. If this box is unchecked, database owner and password must already exist. -DatabaseRootLoginDescription=Superuser account name (to create new databases or new users), mandatory if the database or its owner does not already exist. -KeepEmptyIfNoPassword=Leave empty if superuser has no password (NOT recommended) -SaveConfigurationFile=Saving parameters to -ServerConnection=Server connection -DatabaseCreation=Database creation -CreateDatabaseObjects=Database objects creation -ReferenceDataLoading=Reference data loading -TablesAndPrimaryKeysCreation=Tables and Primary keys creation -CreateTableAndPrimaryKey=Create table %s -CreateOtherKeysForTable=Create foreign keys and indexes for table %s -OtherKeysCreation=Foreign keys and indexes creation -FunctionsCreation=Functions creation -AdminAccountCreation=Administrator login creation -PleaseTypePassword=Please type a password, empty passwords are not allowed! -PleaseTypeALogin=Please type a login! -PasswordsMismatch=Passwords differs, please try again! -SetupEnd=End of setup -SystemIsInstalled=This installation is complete. -SystemIsUpgraded=Dolibarr has been upgraded successfully. -YouNeedToPersonalizeSetup=You need to configure Dolibarr to suit your needs (appearance, features, ...). To do this, please follow the link below: -AdminLoginCreatedSuccessfuly=Dolibarr administrator login '%s' created successfully. -GoToDolibarr=Go to Dolibarr -GoToSetupArea=Go to Dolibarr (setup area) -MigrationNotFinished=The database version is not completely up to date: run the upgrade process again. -GoToUpgradePage=Go to upgrade page again -WithNoSlashAtTheEnd=Without the slash "/" at the end -DirectoryRecommendation=IMPORTANT: You must use a directory that is outside of the web pages (so do not use a subdirectory of previous parameter). -LoginAlreadyExists=Already exists -DolibarrAdminLogin=Dolibarr admin login -AdminLoginAlreadyExists=Dolibarr administrator account '%s' already exists. Go back if you want to create another one. -FailedToCreateAdminLogin=Failed to create Dolibarr administrator account. -WarningRemoveInstallDir=Warning, for security reasons, once the install or upgrade is complete, you should add a file called install.lock into the Dolibarr document directory in order to prevent the accidental/malicious use of the install tools again. -FunctionNotAvailableInThisPHP=Not available in this PHP -ChoosedMigrateScript=Choose migration script -DataMigration=Database migration (data) -DatabaseMigration=Database migration (structure + some data) -ProcessMigrateScript=Script processing -ChooseYourSetupMode=Choose your setup mode and click "Start"... -FreshInstall=Fresh install -FreshInstallDesc=Use this mode if this is your first install. If not, this mode can repair a incomplete previous install. If you want to upgrade your version, choose "Upgrade" mode. -Upgrade=Upgrade -UpgradeDesc=Use this mode if you have replaced old Dolibarr files with files from a newer version. This will upgrade your database and data. -Start=Start -InstallNotAllowed=Setup not allowed by conf.php permissions -YouMustCreateWithPermission=You must create file %s and set write permissions on it for the web server during install process. -CorrectProblemAndReloadPage=Please fix the problem and press F5 to reload the page. -AlreadyDone=Already migrated -DatabaseVersion=Database version -ServerVersion=Database server version -YouMustCreateItAndAllowServerToWrite=You must create this directory and allow for the web server to write into it. -DBSortingCollation=Character sorting order +Recheck=ለበለጠ ዝርዝር ሙከራ እዚህ ጠቅ ያድርጉ +ErrorPHPDoesNotSupportSessions=የእርስዎ ፒኤችፒ ጭነት ክፍለ ጊዜዎችን አይደግፍም። Dolibarr እንዲሰራ ለመፍቀድ ይህ ባህሪ ያስፈልጋል። የእርስዎን ፒኤችፒ ማዋቀር እና የክፍለ ጊዜዎች ማውጫ ፈቃዶችን ያረጋግጡ። +ErrorPHPDoesNotSupport=የእርስዎ ፒኤችፒ ጭነት የ%s ተግባራትን አይደግፍም። +ErrorDirDoesNotExists=ማውጫ %s የለም። +ErrorGoBackAndCorrectParameters=ተመለስ እና ግቤቶችን አረጋግጥ/አስተካክል። +ErrorWrongValueForParameter=ለፓራሜትር '%s የተሳሳተ እሴት ተይበው ሊሆን ይችላል። +ErrorFailedToCreateDatabase=የውሂብ ጎታ '%s' መፍጠር አልተሳካም። +ErrorFailedToConnectToDatabase=ከመረጃ ቋት '%s ጋር መገናኘት አልተሳካም። +ErrorDatabaseVersionTooLow=የውሂብ ጎታ ስሪት (%s) በጣም ያረጀ ነው። ሥሪት %s ወይም ከዚያ በላይ ያስፈልጋል። +ErrorPHPVersionTooLow=የPHP ስሪት በጣም የቆየ ነው። ሥሪት %s ወይም ከዚያ በላይ ያስፈልጋል። +ErrorPHPVersionTooHigh=የ PHP ስሪት በጣም ከፍተኛ ነው። ሥሪት %s ወይም ከዚያ በታች ያስፈልጋል። +ErrorConnectedButDatabaseNotFound=ከአገልጋይ ጋር ያለው ግንኙነት ተሳክቷል ነገር ግን የውሂብ ጎታ '%s አልተገኘም። +ErrorDatabaseAlreadyExists=የውሂብ ጎታ '%s አስቀድሞ አለ። +ErrorNoMigrationFilesFoundForParameters=ለተመረጡት ስሪቶች ምንም የፍልሰት ፋይል አልተገኘም። +IfDatabaseNotExistsGoBackAndUncheckCreate=የመረጃ ቋቱ ከሌለ ወደ ኋላ ተመለስ እና "ዳታቤዝ ፍጠር" የሚለውን አማራጭ አረጋግጥ። +IfDatabaseExistsGoBackAndCheckCreate=የውሂብ ጎታ አስቀድሞ ካለ፣ ይመለሱ እና "ዳታቤዝ ፍጠር" የሚለውን አማራጭ ያንሱ። +WarningBrowserTooOld=የአሳሽ ስሪት በጣም ያረጀ ነው። አሳሽዎን ወደ የቅርብ ጊዜ የፋየርፎክስ፣ Chrome ወይም Opera ስሪት ማሻሻል በጣም ይመከራል። +PHPVersion=ፒኤችፒ ስሪት +License=ፈቃድ በመጠቀም +ConfigurationFile=የማዋቀር ፋይል +WebPagesDirectory=ድረ-ገጾች የሚቀመጡበት ማውጫ +DocumentsDirectory=የተሰቀሉ እና የተፈጠሩ ሰነዶችን ለማከማቸት ማውጫ +URLRoot=URL ስርወ +ForceHttps=ደህንነታቸው የተጠበቁ ግንኙነቶችን አስገድድ (https) +CheckToForceHttps=ደህንነታቸው የተጠበቁ ግንኙነቶችን ለማስገደድ ይህንን አማራጭ ያረጋግጡ (https)።
ይህ የድር አገልጋዩ በSSL እውቅና ማረጋገጫ እንዲዋቀር ይጠይቃል። +DolibarrDatabase=ዶሊባርር ዳታቤዝ +DatabaseType=የውሂብ ጎታ አይነት +DriverType=የአሽከርካሪ አይነት +Server=አገልጋይ +ServerAddressDescription=ለዳታቤዝ አገልጋይ ስም ወይም አይ ፒ አድራሻ። አብዛኛውን ጊዜ 'localhost' የመረጃ ቋቱ አገልጋይ ከድር አገልጋይ ጋር በተመሳሳይ አገልጋይ ላይ ሲስተናገድ። +ServerPortDescription=የውሂብ ጎታ አገልጋይ ወደብ. ካልታወቀ ባዶ ያስቀምጡ። +DatabaseServer=የውሂብ ጎታ አገልጋይ +DatabaseName=የውሂብ ጎታ ስም +DatabasePrefix=የውሂብ ጎታ ሰንጠረዥ ቅድመ ቅጥያ +DatabasePrefixDescription=የውሂብ ጎታ ሰንጠረዥ ቅድመ ቅጥያ። ባዶ ከሆነ ነባሪው ወደ llx_ ነው። +AdminLogin=የተጠቃሚ መለያ ለ Dolibarr የውሂብ ጎታ ባለቤት። +AdminPassword=የይለፍ ቃል ለ Dolibarr የውሂብ ጎታ ባለቤት። +CreateDatabase=የውሂብ ጎታ ይፍጠሩ +CreateUser=የተጠቃሚ መለያ ይፍጠሩ ወይም በ Dolibarr የውሂብ ጎታ ላይ የተጠቃሚ መለያ ፍቃድ ይስጡ +DatabaseSuperUserAccess=የውሂብ ጎታ አገልጋይ - ሱፐር ተጠቃሚ መዳረሻ +CheckToCreateDatabase=የመረጃ ቋቱ እስካሁን ከሌለ እና መፈጠር ካለበት ሳጥኑ ላይ ምልክት ያድርጉ።
በዚህ አጋጣሚ የሱፐር ተጠቃሚ መለያውን የተጠቃሚ ስም እና የይለፍ ቃል መሙላት አለቦት። የዚህ ገጽ. +CheckToCreateUser=ሳጥኑ ላይ ምልክት ያድርጉ፡
የመረጃ ቋቱ ተጠቃሚ መለያ እስካሁን ከሌለ እና መፈጠር አለበት ወይም
የተጠቃሚ መለያ ከሆነ አለ ግን ዳታቤዙ የለም እና ፈቃዶች መሰጠት አለባቸው።
በዚህ አጋጣሚ የተጠቃሚ መለያውን እና የይለፍ ቃሉን እና b0aee833365837fz0ን ማስገባት አለብህ። span>እንዲሁም
የሱፐር ተጠቃሚ መለያ ስም እና የይለፍ ቃል በዚህ ገጽ ግርጌ ላይ። ይህ ሳጥን ምልክት ካልተደረገበት የውሂብ ጎታው ባለቤት እና የይለፍ ቃል አስቀድሞ መኖር አለበት። +DatabaseRootLoginDescription=የሱፐር ተጠቃሚ መለያ ስም (አዲስ ዳታቤዝ ወይም አዲስ ተጠቃሚዎችን ለመፍጠር)፣ የውሂብ ጎታው ወይም ባለቤቱ ከሌለ የግዴታ። +KeepEmptyIfNoPassword=ሱፐር ተጠቃሚ የይለፍ ቃል ከሌለው ባዶ ይተው (አይመከርም) +SaveConfigurationFile=መለኪያዎችን በማስቀመጥ ላይ ወደ +ServerConnection=የአገልጋይ ግንኙነት +DatabaseCreation=የውሂብ ጎታ መፍጠር +CreateDatabaseObjects=የውሂብ ጎታ ዕቃዎች መፍጠር +ReferenceDataLoading=የማጣቀሻ ውሂብ መጫን +TablesAndPrimaryKeysCreation=ሰንጠረዦች እና ዋና ቁልፎች መፍጠር +CreateTableAndPrimaryKey=ሰንጠረዥ ይፍጠሩ %s +CreateOtherKeysForTable=ለሠንጠረዥ የውጭ ቁልፎችን እና ኢንዴክሶችን ይፍጠሩ %s +OtherKeysCreation=የውጭ ቁልፎች እና ኢንዴክሶች መፍጠር +FunctionsCreation=ተግባራትን መፍጠር +AdminAccountCreation=የአስተዳዳሪ መግቢያ መፍጠር +PleaseTypePassword=እባክዎ የይለፍ ቃል ይተይቡ፣ ባዶ የይለፍ ቃሎች አይፈቀዱም! +PleaseTypeALogin=እባክዎ መግቢያ ይተይቡ! +PasswordsMismatch=የይለፍ ቃሎች ይለያያሉ፣ እባክዎ እንደገና ይሞክሩ! +SetupEnd=የማዋቀር መጨረሻ +SystemIsInstalled=ይህ ጭነት ተጠናቅቋል። +SystemIsUpgraded=ዶሊባርር በተሳካ ሁኔታ ተሻሽሏል። +YouNeedToPersonalizeSetup=ለፍላጎትዎ (መልክ, ባህሪያት, ...) ለማሟላት Dolibarr ማዋቀር ያስፈልግዎታል. ይህንን ለማድረግ፣ እባክዎ ከታች ያለውን ሊንክ ይከተሉ፡- +AdminLoginCreatedSuccessfuly=Dolibarr አስተዳዳሪ መግቢያ '%s በተሳካ ሁኔታ ተፈጥሯል +GoToDolibarr=ወደ ዶሊባርር ይሂዱ +GoToSetupArea=ወደ ዶሊባርር (የማዋቀሪያ ቦታ) ይሂዱ +MigrationNotFinished=የመረጃ ቋቱ ስሪት ሙሉ በሙሉ የተዘመነ አይደለም፡ የማሻሻያ ሂደቱን እንደገና ያሂዱ። +GoToUpgradePage=እንደገና ወደ ማላቅ ገጽ ይሂዱ +WithNoSlashAtTheEnd=በመጨረሻው ላይ "/" ያለ ጩኸት +DirectoryRecommendation=አስፈላጊ፡ ከድረ-ገጾች ውጭ የሆነ ማውጫ መጠቀም አለብህ (ስለዚህ የቀደመውን መለኪያ ንዑስ ማውጫ አትጠቀም። ). +LoginAlreadyExists=አስቀድሞ አለ +DolibarrAdminLogin=Dolibarr አስተዳዳሪ መግቢያ +AdminLoginAlreadyExists=Dolibarr አስተዳዳሪ መለያ '%s አስቀድሞ አለ ሌላ መፍጠር ከፈለጉ ይመለሱ። +FailedToCreateAdminLogin=የዶሊባርር አስተዳዳሪ መለያ መፍጠር አልተሳካም። +WarningRemoveInstallDir=ማስጠንቀቂያ፣ ለደህንነት ሲባል፣ የመጫን ሂደቱ እንደተጠናቀቀ፣ install.lock የሚባል ፋይል ወደ ውስጥ ማከል አለብህ። የመጫኛ መሳሪያዎች ድንገተኛ/ተንኮል አዘል አጠቃቀምን ለመከላከል Dolibarr ሰነድ ማውጫ። +FunctionNotAvailableInThisPHP=በዚህ ፒኤችፒ ውስጥ አይገኝም +ChoosedMigrateScript=የፍልሰት ስክሪፕት ይምረጡ +DataMigration=የውሂብ ጎታ ፍልሰት (ውሂብ) +DatabaseMigration=የውሂብ ጎታ ፍልሰት (መዋቅር + አንዳንድ ውሂብ) +ProcessMigrateScript=የስክሪፕት ሂደት +ChooseYourSetupMode=የማዋቀር ሁነታን ይምረጡ እና "ጀምር" ን ጠቅ ያድርጉ ... +FreshInstall=አዲስ ጭነት +FreshInstallDesc=ይህ የመጀመሪያዎ ጭነት ከሆነ ይህንን ሁነታ ይጠቀሙ። ካልሆነ ይህ ሁነታ ያልተጠናቀቀ የቀድሞ ጭነት መጠገን ይችላል። የእርስዎን ስሪት ማሻሻል ከፈለጉ "ማሻሻል" ሁነታን ይምረጡ። +Upgrade=አሻሽል። +UpgradeDesc=የድሮ Dolibarr ፋይሎችን በአዲስ ስሪት በፋይሎች ከተተኩ ይህን ሁነታ ይጠቀሙ። ይህ የእርስዎን የውሂብ ጎታ እና ውሂብ ያሻሽላል። +Start=ጀምር +InstallNotAllowed=ማዋቀር በconf.php ፍቃዶች አይፈቀድም +YouMustCreateWithPermission=በመጫን ሂደት ፋይል %s መፍጠር እና ለድር አገልጋዩ የመፃፍ ፈቃዶችን ማዘጋጀት አለቦት። +CorrectProblemAndReloadPage=እባክዎን ችግሩን ያስተካክሉት እና ገጹን እንደገና ለመጫን F5 ን ይጫኑ። +AlreadyDone=ቀድሞውኑ ተሰደዱ +DatabaseVersion=የውሂብ ጎታ ስሪት +ServerVersion=የውሂብ ጎታ አገልጋይ ስሪት +YouMustCreateItAndAllowServerToWrite=ይህንን ማውጫ መፍጠር እና የድር አገልጋዩ እንዲጽፍበት መፍቀድ አለብዎት። +DBSortingCollation=የቁምፊ መደርደር ቅደም ተከተል YouAskDatabaseCreationSoDolibarrNeedToConnect=You selected create database %s, but for this, Dolibarr needs to connect to server %s with super user %s permissions. YouAskLoginCreationSoDolibarrNeedToConnect=You selected create database user %s, but for this, Dolibarr needs to connect to server %s with super user %s permissions. -BecauseConnectionFailedParametersMayBeWrong=The database connection failed: the host or super user parameters must be wrong. -OrphelinsPaymentsDetectedByMethod=Orphans payment detected by method %s -RemoveItManuallyAndPressF5ToContinue=Remove it manually and press F5 to continue. -FieldRenamed=Field renamed -IfLoginDoesNotExistsCheckCreateUser=If the user does not exist yet, you must check option "Create user" +BecauseConnectionFailedParametersMayBeWrong=የውሂብ ጎታው ግንኙነቱ አልተሳካም፡ የአስተናጋጁ ወይም የሱፐር ተጠቃሚ መለኪያዎች ስህተት መሆን አለባቸው። +OrphelinsPaymentsDetectedByMethod=ወላጅ አልባ ክፍያ በ%s ዘዴ ተገኝቷል +RemoveItManuallyAndPressF5ToContinue=እራስዎ ያስወግዱት እና ለመቀጠል F5 ን ይጫኑ። +FieldRenamed=የመስክ ስም ተቀይሯል። +IfLoginDoesNotExistsCheckCreateUser=ተጠቃሚው እስካሁን ከሌለ፣ “ተጠቃሚ ፍጠር” የሚለውን አማራጭ ማረጋገጥ አለብህ። ErrorConnection=Server "%s", database name "%s", login "%s", or database password may be wrong or the PHP client version may be too old compared to the database version. InstallChoiceRecommanded=Recommended choice to install version %s from your current version %s -InstallChoiceSuggested=Install choice suggested by installer. -MigrateIsDoneStepByStep=The targeted version (%s) has a gap of several versions. The install wizard will come back to suggest a further migration once this one is complete. -CheckThatDatabasenameIsCorrect=Check that the database name "%s" is correct. -IfAlreadyExistsCheckOption=If this name is correct and that database does not exist yet, you must check option "Create database". -OpenBaseDir=PHP openbasedir parameter -YouAskToCreateDatabaseSoRootRequired=You checked the box "Create database". For this, you need to provide the login/password of superuser (bottom of form). -YouAskToCreateDatabaseUserSoRootRequired=You checked the box "Create database owner". For this, you need to provide the login/password of superuser (bottom of form). -NextStepMightLastALongTime=The current step may take several minutes. Please wait until the next screen is shown completely before continuing. -MigrationCustomerOrderShipping=Migrate shipping for sales orders storage -MigrationShippingDelivery=Upgrade storage of shipping -MigrationShippingDelivery2=Upgrade storage of shipping 2 -MigrationFinished=Migration finished -LastStepDesc=Last step: Define here the login and password you wish to use to connect to Dolibarr. Do not lose this as it is the master account to administer all other/additional user accounts. -ActivateModule=Activate module %s -ShowEditTechnicalParameters=Click here to show/edit advanced parameters (expert mode) -WarningUpgrade=Warning:\nDid you run a database backup first?\nThis is highly recommended. Loss of data (due to for example bugs in mysql version 5.5.40/41/42/43) may be possible during this process, so it is essential to take a complete dump of your database before starting any migration.\n\nClick OK to start migration process... -ErrorDatabaseVersionForbiddenForMigration=Your database version is %s. It has a critical bug, making data loss possible if you make structural changes in your database, such as is required by the migration process. For his reason, migration will not be allowed until you upgrade your database to a layer (patched) version (list of known buggy versions: %s) -KeepDefaultValuesWamp=You used the Dolibarr setup wizard from DoliWamp, so values proposed here are already optimized. Change them only if you know what you are doing. -KeepDefaultValuesDeb=You used the Dolibarr setup wizard from a Linux package (Ubuntu, Debian, Fedora...), so the values proposed here are already optimized. Only the password of the database owner to create must be entered. Change other parameters only if you know what you are doing. -KeepDefaultValuesMamp=You used the Dolibarr setup wizard from DoliMamp, so the values proposed here are already optimized. Change them only if you know what you are doing. -KeepDefaultValuesProxmox=You used the Dolibarr setup wizard from a Proxmox virtual appliance, so the values proposed here are already optimized. Change them only if you know what you are doing. -UpgradeExternalModule=Run dedicated upgrade process of external module -SetAtLeastOneOptionAsUrlParameter=Set at least one option as a parameter in URL. For example: '...repair.php?standard=confirmed' -NothingToDelete=Nothing to clean/delete -NothingToDo=Nothing to do +InstallChoiceSuggested=የመጫኛ ምርጫ በጫኝ የተጠቆመ። +MigrateIsDoneStepByStep=የታለመው ስሪት (%s) የበርካታ ስሪቶች ክፍተት አለው። የመጫኛ አዋቂው ይህ ከተጠናቀቀ በኋላ ተጨማሪ ፍልሰትን ለመጠቆም ተመልሶ ይመጣል። +CheckThatDatabasenameIsCorrect=የመረጃ ቋቱ ስም "%s" ትክክል መሆኑን ያረጋግጡ። +IfAlreadyExistsCheckOption=ይህ ስም ትክክል ከሆነ እና የመረጃ ቋቱ እስካሁን ከሌለ፣ “ዳታቤዝ ፍጠር” የሚለውን አማራጭ ማረጋገጥ አለብህ። +OpenBaseDir=PHP openbasedir መለኪያ +YouAskToCreateDatabaseSoRootRequired="ዳታቤዝ ፍጠር" በሚለው ሳጥን ላይ ምልክት አድርገሃል። ለዚህም የሱፐርሰተር መግቢያ/የይለፍ ቃል (ከቅርጽ በታች) ማቅረብ አለቦት። +YouAskToCreateDatabaseUserSoRootRequired="የውሂብ ጎታ ባለቤት ፍጠር" በሚለው ሳጥን ላይ ምልክት አድርገሃል። ለዚህም የሱፐርሰተር መግቢያ/የይለፍ ቃል (ከቅርጽ በታች) ማቅረብ አለቦት። +NextStepMightLastALongTime=አሁን ያለው እርምጃ ብዙ ደቂቃዎችን ሊወስድ ይችላል። እባክዎ ከመቀጠልዎ በፊት የሚቀጥለው ማያ ገጽ ሙሉ በሙሉ እስኪታይ ድረስ ይጠብቁ። +MigrationCustomerOrderShipping=ለሽያጭ ማዘዣ ማከማቻ ማጓጓዝ +MigrationShippingDelivery=የማጓጓዣ ማከማቻን ያሻሽሉ። +MigrationShippingDelivery2=የማጓጓዣ ማከማቻን አሻሽል 2 +MigrationFinished=ስደት አልቋል +LastStepDesc=የመጨረሻው ደረጃ: ከዶሊባርር ጋር ለመገናኘት የሚፈልጉትን መግቢያ እና የይለፍ ቃል እዚህ ይግለጹ። ይህን ሁሉ ሌሎች/ተጨማሪ የተጠቃሚ መለያዎችን ለማስተዳደር ዋናው መለያ ስለሆነ አይጥፋው። +ActivateModule=ሞጁሉን አግብር %s +ShowEditTechnicalParameters=የላቁ መለኪያዎችን ለማሳየት/ለማርትዕ እዚህ ጠቅ ያድርጉ (የባለሙያ ሁነታ) +WarningUpgrade=ማስጠንቀቂያ፡-\nመጀመሪያ የውሂብ ጎታ ምትኬን አስኬደህ ነበር?\nይህ በጣም ይመከራል. በዚህ ሂደት ውስጥ የውሂብ መጥፋት (ለምሳሌ በ mysql ስሪት 5.5.40/41/42/43 ስህተት ምክንያት) ሊኖር ይችላል ስለዚህ ማንኛውንም ፍልሰት ከመጀመርዎ በፊት የውሂብ ጎታዎን ሙሉ በሙሉ መጣል አስፈላጊ ነው።\n\nየስደት ሂደቱን ለመጀመር እሺን ጠቅ ያድርጉ... +ErrorDatabaseVersionForbiddenForMigration=የውሂብ ጎታህ ስሪት %s ነው። በውሂብ ጎታህ ላይ መዋቅራዊ ለውጦችን ካደረግክ በስደት ሂደት የሚፈለገውን ያህል የውሂብ መጥፋት እንዲቻል የሚያደርግ ወሳኝ ስህተት አለው። በእሱ ምክንያት የውሂብ ጎታዎን ወደ ንብርብር (የተጣበቁ) ስሪት እስካላሳደጉ ድረስ ስደት አይፈቀድም (የሚታወቁት የስህተት ስሪቶች ዝርዝር፡ %s) +KeepDefaultValuesWamp=የዶሊባርር ማዋቀር አዋቂን ከ DoliWamp ተጠቅመሃል፣ ስለዚህ እዚህ የታቀዱ እሴቶች አስቀድመው ተመቻችተዋል። ምን እየሰሩ እንደሆነ ካወቁ ብቻ ይቀይሯቸው። +KeepDefaultValuesDeb=የዶሊባርር ማዋቀር አዋቂን ከሊኑክስ ፓኬጅ (ኡቡንቱ፣ ዴቢያን፣ ፌዶራ...) ተጠቅመዋል፣ ስለዚህ እዚህ የታቀዱት እሴቶች ቀድሞውኑ የተመቻቹ ናቸው። ለመፍጠር የውሂብ ጎታው ባለቤት የይለፍ ቃል ብቻ ነው መግባት ያለበት። ምን እየሰሩ እንደሆነ ካወቁ ብቻ ሌሎች መለኪያዎችን ይቀይሩ። +KeepDefaultValuesMamp=የዶሊባርር ማዋቀር አዋቂን ከ DoliMamp ተጠቅመዋል፣ ስለዚህ እዚህ የታቀዱት እሴቶች ቀድሞውኑ የተመቻቹ ናቸው። ምን እየሰሩ እንደሆነ ካወቁ ብቻ ይቀይሯቸው። +KeepDefaultValuesProxmox=የዶሊባርር ማዋቀር አዋቂን ከProxmox ቨርቹዋል ዕቃ ይጠቀማሉ፣ ስለዚህ እዚህ የታቀዱት እሴቶች ቀድሞውኑ የተመቻቹ ናቸው። ምን እየሰሩ እንደሆነ ካወቁ ብቻ ይቀይሯቸው። +UpgradeExternalModule=የውጫዊ ሞጁል ልዩ የማሻሻያ ሂደትን ያሂዱ +SetAtLeastOneOptionAsUrlParameter=በዩአርኤል ውስጥ ቢያንስ አንድ አማራጭ እንደ መለኪያ ያዘጋጁ። ለምሳሌ፡- '...repair.php?standard=confirmed' +NothingToDelete=የሚጸዳ/የሚሰርዝ ነገር የለም። +NothingToDo=ምንም የማደርገው የለም ######### # upgrade -MigrationFixData=Fix for denormalized data -MigrationOrder=Data migration for customer's orders -MigrationSupplierOrder=Data migration for vendor's orders -MigrationProposal=Data migration for commercial proposals -MigrationInvoice=Data migration for customer's invoices -MigrationContract=Data migration for contracts -MigrationSuccessfullUpdate=Upgrade successful -MigrationUpdateFailed=Failed upgrade process -MigrationRelationshipTables=Data migration for relationship tables (%s) -MigrationPaymentsUpdate=Payment data correction -MigrationPaymentsNumberToUpdate=%s payment(s) to update -MigrationProcessPaymentUpdate=Update payment(s) %s -MigrationPaymentsNothingToUpdate=No more things to do -MigrationPaymentsNothingUpdatable=No more payments that can be corrected -MigrationContractsUpdate=Contract data correction -MigrationContractsNumberToUpdate=%s contract(s) to update -MigrationContractsLineCreation=Create contract line for contract ref %s -MigrationContractsNothingToUpdate=No more things to do -MigrationContractsFieldDontExist=Field fk_facture does not exist anymore. Nothing to do. -MigrationContractsEmptyDatesUpdate=Contract empty date correction -MigrationContractsEmptyDatesUpdateSuccess=Contract empty date correction done successfully -MigrationContractsEmptyDatesNothingToUpdate=No contract empty date to correct -MigrationContractsEmptyCreationDatesNothingToUpdate=No contract creation date to correct -MigrationContractsInvalidDatesUpdate=Bad value date contract correction +MigrationFixData=መደበኛ ያልሆነ ውሂብን አስተካክል። +MigrationOrder=ለደንበኛ ትዕዛዞች የውሂብ ሽግግር +MigrationSupplierOrder=ለሻጭ ትዕዛዞች የውሂብ ሽግግር +MigrationProposal=ለንግድ ሀሳቦች የውሂብ ሽግግር +MigrationInvoice=ለደንበኛ ደረሰኞች የውሂብ ሽግግር +MigrationContract=የውሂብ ፍልሰት ለኮንትራቶች +MigrationSuccessfullUpdate=ማሻሻል ተሳክቷል። +MigrationUpdateFailed=የማሻሻል ሂደት አልተሳካም። +MigrationRelationshipTables=የውሂብ ፍልሰት ለግንኙነት ሠንጠረዦች (%s) +MigrationPaymentsUpdate=የክፍያ ውሂብ ማስተካከያ +MigrationPaymentsNumberToUpdate=%s ክፍያ(ዎች) ለማዘመን +MigrationProcessPaymentUpdate=ክፍያ(ዎች) አዘምን %s +MigrationPaymentsNothingToUpdate=ምንም ተጨማሪ ነገሮች የሉም +MigrationPaymentsNothingUpdatable=ከእንግዲህ የሚስተካከሉ ክፍያዎች የሉም +MigrationContractsUpdate=የኮንትራት ውሂብ ማስተካከያ +MigrationContractsNumberToUpdate=%s ለመዘመን ውል(ዎች) +MigrationContractsLineCreation=የኮንትራት መስመር ይፍጠሩ ለኮንትራት ref %s +MigrationContractsNothingToUpdate=ምንም ተጨማሪ ነገሮች የሉም +MigrationContractsFieldDontExist=የመስክ fk_facture ከእንግዲህ የለም። ምንም የማደርገው የለም. +MigrationContractsEmptyDatesUpdate=ውል ባዶ የቀን እርማት +MigrationContractsEmptyDatesUpdateSuccess=የኮንትራት ባዶ ቀን እርማት በተሳካ ሁኔታ ተከናውኗል +MigrationContractsEmptyDatesNothingToUpdate=ምንም ውል ለማረም ባዶ ቀን የለም። +MigrationContractsEmptyCreationDatesNothingToUpdate=ምንም የሚስተካከል የውል ስምምነት የለም። +MigrationContractsInvalidDatesUpdate=የመጥፎ እሴት ቀን ውል ማረም MigrationContractsInvalidDateFix=Correct contract %s (Contract date=%s, Starting service date min=%s) -MigrationContractsInvalidDatesNumber=%s contracts modified -MigrationContractsInvalidDatesNothingToUpdate=No date with bad value to correct -MigrationContractsIncoherentCreationDateUpdate=Bad value contract creation date correction -MigrationContractsIncoherentCreationDateUpdateSuccess=Bad value contract creation date correction done successfully -MigrationContractsIncoherentCreationDateNothingToUpdate=No bad value for contract creation date to correct -MigrationReopeningContracts=Open contract closed by error -MigrationReopenThisContract=Reopen contract %s -MigrationReopenedContractsNumber=%s contracts modified -MigrationReopeningContractsNothingToUpdate=No closed contract to open -MigrationBankTransfertsUpdate=Update links between bank entry and a bank transfer -MigrationBankTransfertsNothingToUpdate=All links are up to date -MigrationShipmentOrderMatching=Sendings receipt update -MigrationDeliveryOrderMatching=Delivery receipt update -MigrationDeliveryDetail=Delivery update -MigrationStockDetail=Update stock value of products -MigrationMenusDetail=Update dynamic menus tables -MigrationDeliveryAddress=Update delivery address in shipments -MigrationProjectTaskActors=Data migration for table llx_projet_task_actors -MigrationProjectUserResp=Data migration field fk_user_resp of llx_projet to llx_element_contact -MigrationProjectTaskTime=Update time spent in seconds -MigrationActioncommElement=Update data on actions -MigrationPaymentMode=Data migration for payment type -MigrationCategorieAssociation=Migration of categories -MigrationEvents=Migration of events to add event owner into assignment table -MigrationEventsContact=Migration of events to add event contact into assignment table -MigrationRemiseEntity=Update entity field value of llx_societe_remise -MigrationRemiseExceptEntity=Update entity field value of llx_societe_remise_except -MigrationUserRightsEntity=Update entity field value of llx_user_rights -MigrationUserGroupRightsEntity=Update entity field value of llx_usergroup_rights -MigrationUserPhotoPath=Migration of photo paths for users -MigrationFieldsSocialNetworks=Migration of users fields social networks (%s) -MigrationReloadModule=Reload module %s -MigrationResetBlockedLog=Reset module BlockedLog for v7 algorithm -MigrationImportOrExportProfiles=Migration of import or export profiles (%s) -ShowNotAvailableOptions=Show unavailable options -HideNotAvailableOptions=Hide unavailable options -ErrorFoundDuringMigration=Error(s) were reported during the migration process so next step is not available. To ignore errors, you can click here, but the application or some features may not work correctly until the errors are resolved. -YouTryInstallDisabledByDirLock=The application tried to self-upgrade, but the install/upgrade pages have been disabled for security (directory renamed with .lock suffix).
-YouTryInstallDisabledByFileLock=The application tried to self-upgrade, but the install/upgrade pages have been disabled for security (by the existence of a lock file install.lock in the dolibarr documents directory).
-ClickHereToGoToApp=Click here to go to your application -ClickOnLinkOrRemoveManualy=If an upgrade is in progress, please wait. If not, click on the following link. If you always see this same page, you must remove/rename the file install.lock in the documents directory. -Loaded=Loaded -FunctionTest=Function test +MigrationContractsInvalidDatesNumber=%s ውሎች ተሻሽለዋል +MigrationContractsInvalidDatesNothingToUpdate=ለማረም መጥፎ ዋጋ ያለው ቀን የለም። +MigrationContractsIncoherentCreationDateUpdate=የመጥፎ እሴት ውል መፍጠር ቀን ማረም +MigrationContractsIncoherentCreationDateUpdateSuccess=የመጥፎ እሴት ውል የተፈጠረበት ቀን ማስተካከያ በተሳካ ሁኔታ ተከናውኗል +MigrationContractsIncoherentCreationDateNothingToUpdate=ለማረም የውል መፍጠሪያ ቀን ምንም መጥፎ ዋጋ የለም። +MigrationReopeningContracts=ክፍት ውል በስህተት ተዘግቷል። +MigrationReopenThisContract=ኮንትራቱን እንደገና ክፈት %s +MigrationReopenedContractsNumber=%s ውሎች ተሻሽለዋል +MigrationReopeningContractsNothingToUpdate=ለመክፈት የተዘጋ ውል የለም። +MigrationBankTransfertsUpdate=በባንክ መግቢያ እና በባንክ ዝውውር መካከል ያለውን ግንኙነት ያዘምኑ +MigrationBankTransfertsNothingToUpdate=ሁሉም ማገናኛዎች የተዘመኑ ናቸው። +MigrationShipmentOrderMatching=ደረሰኝ ዝማኔ በመላክ ላይ +MigrationDeliveryOrderMatching=የመላኪያ ደረሰኝ ዝማኔ +MigrationDeliveryDetail=የማድረስ ዝማኔ +MigrationStockDetail=የምርት ዋጋን ያዘምኑ +MigrationMenusDetail=ተለዋዋጭ ምናሌዎችን ሰንጠረዦች ያዘምኑ +MigrationDeliveryAddress=የመላኪያ አድራሻን በማጓጓዝ ያዘምኑ +MigrationProjectTaskActors=ለሠንጠረዥ llx_projet_task_ተዋንያን የውሂብ ሽግግር +MigrationProjectUserResp=የውሂብ ፍልሰት መስክ fk_user_resp of llx_projet ወደ llx_element_contact +MigrationProjectTaskTime=በሰከንዶች ውስጥ የሚጠፋውን ጊዜ ያዘምኑ +MigrationActioncommElement=በድርጊቶች ላይ ውሂብ ያዘምኑ +MigrationPaymentMode=ለክፍያ አይነት የውሂብ ዝውውር +MigrationCategorieAssociation=ምድቦች ፍልሰት +MigrationEvents=የክስተት ባለቤትን ወደ የምደባ ሠንጠረዥ ለመጨመር የክስተቶች ሽግግር +MigrationEventsContact=የክስተት ግንኙነትን ወደ ምደባ ሰንጠረዥ ለመጨመር የክስተቶች ፍልሰት +MigrationRemiseEntity=የllx_societe_remise የህጋዊ አካል ዋጋን ያዘምኑ +MigrationRemiseExceptEntity=የllx_societe_remise_ከቀር የህጋዊ አካል መስክ ዋጋን ያዘምኑ +MigrationUserRightsEntity=የህጋዊ አካል የመስክ ዋጋ የllx_user_rights ያዘምኑ +MigrationUserGroupRightsEntity=የህጋዊ አካል የመስክ ዋጋ የllx_usergroup_rights ያዘምኑ +MigrationUserPhotoPath=ለተጠቃሚዎች የፎቶ ዱካዎች ፍልሰት +MigrationFieldsSocialNetworks=የተጠቃሚዎች ፍልሰት ማህበራዊ አውታረ መረቦች (%s) +MigrationReloadModule=ሞጁሉን እንደገና ጫን %s +MigrationResetBlockedLog=ለv7 አልጎሪዝም ሞዱል የታገደ ሎግ ዳግም ያስጀምሩ +MigrationImportOrExportProfiles=የማስመጣት ወይም ወደ ውጭ የሚላኩ መገለጫዎችን ስደት (%s) +ShowNotAvailableOptions=የማይገኙ አማራጮችን አሳይ +HideNotAvailableOptions=የማይገኙ አማራጮችን ደብቅ +ErrorFoundDuringMigration=በስደት ሂደት ውስጥ ስህተት(ዎች) ሪፖርት ተደርጓል ስለዚህ ቀጣዩ ደረጃ አይገኝም። ስህተቶችን ችላ ለማለት እዚህ ጠቅ ማድረግ ይችላሉ ነገር ግን ስህተቶቹ እስኪፈቱ ድረስ አፕሊኬሽኑ ወይም አንዳንድ ባህሪያት በትክክል ላይሰሩ ይችላሉ። . +YouTryInstallDisabledByDirLock=አፕሊኬሽኑ እራሱን ለማሻሻል ሞክሯል፣ ነገር ግን የመጫኛ/የማሻሻያ ገጾቹ ለደህንነት ሲባል ተሰናክለዋል (ማውጫ በ .መቆለፊያ ቅጥያ ተሰይሟል)።
+YouTryInstallDisabledByFileLock=አፕሊኬሽኑ እራሱን ለማሻሻል ሞክሯል፣ ነገር ግን የመጫኛ/ማሻሻያ ገጾቹ ለደህንነት ሲባል ተሰናክለዋል (የመቆለፊያ ፋይል በመኖሩ install.lock በ dolibarr ሰነዶች ማውጫ ውስጥ)።
+YouTryUpgradeDisabledByMissingFileUnLock=አፕሊኬሽኑ እራሱን ለማሻሻል ሞክሯል፣ ነገር ግን የማሻሻያ ሂደቱ በአሁኑ ጊዜ አይፈቀድም።
+ClickHereToGoToApp=ወደ ማመልከቻዎ ለመሄድ እዚህ ጠቅ ያድርጉ +ClickOnLinkOrRemoveManualy=ማሻሻያ በሂደት ላይ ከሆነ፣ እባክዎ ይጠብቁ። ካልሆነ የሚከተለውን ሊንክ ይጫኑ። ይህንን ተመሳሳይ ገጽ ሁል ጊዜ የሚያዩ ከሆነ በሰነዶች ማውጫ ውስጥ ያለውን ፋይል install.lock ማስወገድ ወይም እንደገና መሰየም አለብዎት። +ClickOnLinkOrCreateUnlockFileManualy=ማሻሻያ በሂደት ላይ ከሆነ እባክህ ጠብቅ... ካልሆነ ፋይሉን install.lock ማስወገድ አለብህ ወይም የፋይል ማሻሻያ.unlockን ወደ Dolibarr documents directory መፍጠር አለብህ። +Loaded=ተጭኗል +FunctionTest=የተግባር ሙከራ +NodoUpgradeAfterDB=የውሂብ ጎታውን ከማሻሻል በኋላ በውጫዊ ሞጁሎች የተጠየቀ ምንም አይነት እርምጃ የለም። +NodoUpgradeAfterFiles=ፋይሎችን ወይም ማውጫዎችን ካሻሻሉ በኋላ በውጫዊ ሞጁሎች የተጠየቀ ምንም እርምጃ የለም። +MigrationContractLineRank=ደረጃን ለመጠቀም የኮንትራት መስመርን ያዛውሩ (እና እንደገና ለማዘዝ አንቃ) diff --git a/htdocs/langs/am_ET/interventions.lang b/htdocs/langs/am_ET/interventions.lang index ef5df43e546..4d0e0a2dfff 100644 --- a/htdocs/langs/am_ET/interventions.lang +++ b/htdocs/langs/am_ET/interventions.lang @@ -1,68 +1,75 @@ # Dolibarr language file - Source file is en_US - interventions -Intervention=Intervention -Interventions=Interventions -InterventionCard=Intervention card -NewIntervention=New intervention -AddIntervention=Create intervention -ChangeIntoRepeatableIntervention=Change to repeatable intervention -ListOfInterventions=List of interventions -ActionsOnFicheInter=Actions on intervention -LastInterventions=Latest %s interventions -AllInterventions=All interventions -CreateDraftIntervention=Create draft -InterventionContact=Intervention contact -DeleteIntervention=Delete intervention -ValidateIntervention=Validate intervention -ModifyIntervention=Modify intervention -DeleteInterventionLine=Delete intervention line -ConfirmDeleteIntervention=Are you sure you want to delete this intervention? +Intervention=ጣልቃ መግባት +Interventions=ጣልቃገብነቶች +InterventionCard=የጣልቃ ገብነት ካርድ +NewIntervention=አዲስ ጣልቃ ገብነት +AddIntervention=ጣልቃ ገብነት ይፍጠሩ +ChangeIntoRepeatableIntervention=ወደ ተደጋጋሚ ጣልቃገብነት ይቀይሩ +ListOfInterventions=የጣልቃ ገብነት ዝርዝር +ActionsOnFicheInter=በጣልቃ ገብነት ላይ የሚደረጉ እርምጃዎች +LastInterventions=የቅርብ ጊዜ %s ጣልቃገብነቶች +AllInterventions=ሁሉም ጣልቃገብነቶች +CreateDraftIntervention=ረቂቅ ፍጠር +InterventionContact=የጣልቃ ገብነት ግንኙነት +DeleteIntervention=ጣልቃ ገብነትን ሰርዝ +ValidateIntervention=ጣልቃ ገብነትን ያረጋግጡ +ModifyIntervention=ጣልቃ ገብነትን አስተካክል። +CloseIntervention=ጣልቃ ገብነትን ይዝጉ +DeleteInterventionLine=የጣልቃ ገብነት መስመርን ሰርዝ +ConfirmDeleteIntervention=እርግጠኛ ነዎት ይህን ጣልቃ ገብነት መሰረዝ ይፈልጋሉ? ConfirmValidateIntervention=Are you sure you want to validate this intervention under name %s? -ConfirmModifyIntervention=Are you sure you want to modify this intervention? -ConfirmDeleteInterventionLine=Are you sure you want to delete this intervention line? -ConfirmCloneIntervention=Are you sure you want to clone this intervention? -NameAndSignatureOfInternalContact=Name and signature of intervening: -NameAndSignatureOfExternalContact=Name and signature of customer: -DocumentModelStandard=Standard document model for interventions -InterventionCardsAndInterventionLines=Interventions and lines of interventions -InterventionClassifyBilled=Classify "Billed" -InterventionClassifyUnBilled=Classify "Unbilled" -InterventionClassifyDone=Classify "Done" -StatusInterInvoiced=Billed -SendInterventionRef=Submission of intervention %s -SendInterventionByMail=Send intervention by email -InterventionCreatedInDolibarr=Intervention %s created -InterventionValidatedInDolibarr=Intervention %s validated -InterventionModifiedInDolibarr=Intervention %s modified -InterventionClassifiedBilledInDolibarr=Intervention %s set as billed -InterventionClassifiedUnbilledInDolibarr=Intervention %s set as unbilled -InterventionSentByEMail=Intervention %s sent by email -InterventionDeletedInDolibarr=Intervention %s deleted -InterventionsArea=Interventions area -DraftFichinter=Draft interventions -LastModifiedInterventions=Latest %s modified interventions -FichinterToProcess=Interventions to process -TypeContact_fichinter_external_CUSTOMER=Following-up customer contact -PrintProductsOnFichinter=Print also lines of type "product" (not only services) on intervention card -PrintProductsOnFichinterDetails=interventions generated from orders -UseServicesDurationOnFichinter=Use services duration for interventions generated from orders -UseDurationOnFichinter=Hides the duration field for intervention records -UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records -InterventionStatistics=Statistics of interventions -NbOfinterventions=No. of intervention cards -NumberOfInterventionsByMonth=No. of intervention cards by month (date of validation) -AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them. -InterId=Intervention id -InterRef=Intervention ref. -InterDateCreation=Date creation intervention -InterDuration=Duration intervention -InterStatus=Status intervention -InterNote=Note intervention -InterLine=Line of intervention -InterLineId=Line id intervention -InterLineDate=Line date intervention -InterLineDuration=Line duration intervention -InterLineDesc=Line description intervention -RepeatableIntervention=Template of intervention -ToCreateAPredefinedIntervention=To create a predefined or recurring intervention, create a common intervention and convert it into intervention template +ConfirmModifyIntervention=እርግጠኛ ነዎት ይህን ጣልቃገብነት መቀየር ይፈልጋሉ? +ConfirmCloseIntervention=እርግጠኛ ነዎት ይህን ጣልቃ ገብነት መዝጋት ይፈልጋሉ? +ConfirmDeleteInterventionLine=እርግጠኛ ነዎት ይህን የጣልቃ ገብነት መስመር መሰረዝ ይፈልጋሉ? +ConfirmCloneIntervention=እርግጠኛ ነዎት ይህን ጣልቃ ገብነት መዝጋት ይፈልጋሉ? +NameAndSignatureOfInternalContact=የጣልቃ ገብነት ስም እና ፊርማ፡- +NameAndSignatureOfExternalContact=የደንበኛ ስም እና ፊርማ; +DocumentModelStandard=ለጣልቃ ገብነት መደበኛ ሰነድ ሞዴል +InterventionCardsAndInterventionLines=ጣልቃ-ገብነት እና ጣልቃ-ገብነት መስመሮች +InterventionClassifyBilled=«የተከፈለበት»ን መድብ +InterventionClassifyUnBilled="ያልተከፈለ" መደብ +InterventionClassifyDone=«ተከናውኗል»ን ይመድቡ +StatusInterInvoiced=ተከፍሏል። +SendInterventionRef=ጣልቃ መግባት %s +SendInterventionByMail=ጣልቃ ገብነትን በኢሜል ላክ +InterventionCreatedInDolibarr=ጣልቃ ገብነት %s ተፈጥሯል +InterventionValidatedInDolibarr=ጣልቃ ገብነት %s የተረጋገጠ +InterventionModifiedInDolibarr=ጣልቃ ገብነት %s ተቀይሯል +InterventionClassifiedBilledInDolibarr=ጣልቃ ገብነት %s እንደ ክፍያ ተቀናብሯል +InterventionClassifiedUnbilledInDolibarr=ጣልቃ ገብነት %s ያልተከፈለ ሆኖ ተቀናብሯል +InterventionSentByEMail=ጣልቃ ገብነት %s በኢሜይል ተልኳል +InterventionClosedInDolibarr= ጣልቃ ገብነት %s ተዘግቷል +InterventionDeletedInDolibarr=ጣልቃ ገብነት %s ተሰርዟል +InterventionsArea=ጣልቃ ገብነት አካባቢ +DraftFichinter=ረቂቅ ጣልቃገብነቶች +LastModifiedInterventions=የቅርብ ጊዜ %s የተሻሻሉ ጣልቃገብነቶች +FichinterToProcess=ለማካሄድ ጣልቃገብነቶች +TypeContact_fichinter_external_CUSTOMER=ተከታይ የደንበኛ ግንኙነት +PrintProductsOnFichinter=እንዲሁም በጣልቃ ገብነት ካርድ ላይ "ምርት" (አገልግሎቶችን ብቻ ሳይሆን) አይነት መስመሮችን ያትሙ +PrintProductsOnFichinterDetails=ከትእዛዞች የመነጩ ጣልቃገብነቶች +UseServicesDurationOnFichinter=ከትእዛዞች ለሚፈጠሩ ጣልቃገብነቶች የአገልግሎቶችን ቆይታ ይጠቀሙ +UseDurationOnFichinter=ለጣልቃ ገብነት መዝገቦች የቆይታ ጊዜውን ይደብቃል +UseDateWithoutHourOnFichinter=ለጣልቃ ገብነት መዝገቦች ከቀን መስኩ የሰአታት እና ደቂቃዎችን ይደብቃል +InterventionStatistics=የጣልቃ ገብነት ስታቲስቲክስ +NbOfinterventions=የጣልቃ ገብነት ካርዶች ቁጥር +NumberOfInterventionsByMonth=የጣልቃ ገብነት ካርዶች በወር (የተረጋገጠበት ቀን) +AmountOfInteventionNotIncludedByDefault=የጣልቃ ገብነት መጠን በነባሪ ወደ ትርፍ አልተካተተም (በአብዛኛዎቹ ሁኔታዎች የጊዜ ሰሌዳዎች ጊዜን ለመቁጠር ያገለግላሉ)። በትርፍ ውስጥ የተካተቱትን ንጥረ ነገሮች ዝርዝር ለማጠናቀቅ PROJECT_ELEMENTS_FOR_ADD_MARGIN እና PROJECT_ELEMENTS_FOR_MINUS_MARGIN አማራጭን ወደ ቤት-ማዋቀር መጠቀም ይችላሉ። +InterId=የጣልቃ ገብነት መታወቂያ +InterRef=ጣልቃ ገብነት ማጣቀሻ. +InterDateCreation=የቀን ፍጥረት ጣልቃገብነት +InterDuration=የቆይታ ጊዜ ጣልቃገብነት +InterStatus=የሁኔታ ጣልቃገብነት +InterNote=ጣልቃገብነት ማስታወሻ +InterLine=የጣልቃ ገብነት መስመር +InterLineId=የመስመር መታወቂያ ጣልቃገብነት +InterLineDate=የመስመር ቀን ጣልቃ ገብነት +InterLineDuration=የመስመር ቆይታ ጣልቃ ገብነት +InterLineDesc=የመስመር መግለጫ ጣልቃገብነት +RepeatableIntervention=የጣልቃ ገብነት አብነት +ToCreateAPredefinedIntervention=አስቀድሞ የተወሰነ ወይም ተደጋጋሚ ጣልቃ ገብነት ለመፍጠር፣ የተለመደ ጣልቃ ገብነት ይፍጠሩ እና ወደ ጣልቃ ገብነት አብነት ይለውጡት። ConfirmReopenIntervention=Are you sure you want to open back the intervention %s? -GenerateInter=Generate intervention +GenerateInter=ጣልቃ-ገብነት ይፍጠሩ +FichinterNoContractLinked=ጣልቃ ገብነት %s ያለ የተገናኘ ውል ተፈጥሯል። +ErrorFicheinterCompanyDoesNotExist=ኩባንያ የለም። ጣልቃ ገብነት አልተፈጠረም። +NextDateToIntervention=ለቀጣዩ ጣልቃገብነት ትውልድ ቀን +NoIntervention=ምንም ጣልቃ ገብነት የለም diff --git a/htdocs/langs/am_ET/intracommreport.lang b/htdocs/langs/am_ET/intracommreport.lang index 3060300b974..a374bd24187 100644 --- a/htdocs/langs/am_ET/intracommreport.lang +++ b/htdocs/langs/am_ET/intracommreport.lang @@ -1,40 +1,40 @@ -Module68000Name = Intracomm report -Module68000Desc = Intracomm report management (Support for French DEB/DES format) -IntracommReportSetup = Intracommreport module setup -IntracommReportAbout = About intracommreport +Module68000Name = የኢንትራኮም ሪፖርት +Module68000Desc = Intracomm ሪፖርት አስተዳደር (የፈረንሳይ DEB/DES ቅርጸት ድጋፍ) +IntracommReportSetup = ሞጁል ማዋቀር ኢንትራኮምምሪፖርት +IntracommReportAbout = ስለ ኢንትራኮም ሪፖርት # Setup INTRACOMMREPORT_NUM_AGREMENT=Numéro d'agrément (délivré par le CISD de rattachement) -INTRACOMMREPORT_TYPE_ACTEUR=Type d'acteur +INTRACOMMREPORT_TYPE_ACTEUR=d'acteur ይተይቡ INTRACOMMREPORT_ROLE_ACTEUR=Rôle joué par l'acteur -INTRACOMMREPORT_NIV_OBLIGATION_INTRODUCTION=Niveau d'obligation sur les introductions +INTRACOMMREPORT_NIV_OBLIGATION_INTRODUCTION=Niveau d'ግዴታ ሱር Les መግቢያዎች INTRACOMMREPORT_NIV_OBLIGATION_EXPEDITION=Niveau d'obligation sur les expéditions -INTRACOMMREPORT_CATEG_FRAISDEPORT=Catégorie de services de type "Frais de port" +INTRACOMMREPORT_CATEG_FRAISDEPORT=ምድብ ደ አገልግሎቶች ዓይነት "Frais de port" -INTRACOMMREPORT_NUM_DECLARATION=Numéro de déclarant +INTRACOMMREPORT_NUM_DECLARATION=Numéro de Declarant # Menu -MenuIntracommReport=Intracomm report -MenuIntracommReportNew=New declaration -MenuIntracommReportList=List +MenuIntracommReport=ኢንትራኮም ሪፖርት +MenuIntracommReportNew=አዲስ መግለጫ +MenuIntracommReportList=ዝርዝር # View -NewDeclaration=New declaration -Declaration=Declaration -AnalysisPeriod=Analysis period -TypeOfDeclaration=Type of declaration -DEB=Goods exchange declaration (DEB) -DES=Services exchange declaration (DES) +NewDeclaration=አዲስ መግለጫ +Declaration=መግለጫ +AnalysisPeriod=የትንታኔ ጊዜ +TypeOfDeclaration=የመግለጫ አይነት +DEB=የሸቀጦች ልውውጥ መግለጫ (DEB) +DES=የአገልግሎት ልውውጥ መግለጫ (DES) # Export page -IntracommReportTitle=Preparation of an XML file in ProDouane format +IntracommReportTitle=የኤክስኤምኤል ፋይል በProDouane ቅርጸት ማዘጋጀት # List -IntracommReportList=List of generated declarations -IntracommReportNumber=Numero of declaration -IntracommReportPeriod=Period of nalysis -IntracommReportTypeDeclaration=Type of declaration -IntracommReportDownload=download XML file +IntracommReportList=የመነጩ መግለጫዎች ዝርዝር +IntracommReportNumber=የመግለጫ ቁጥር +IntracommReportPeriod=የመተንተን ጊዜ +IntracommReportTypeDeclaration=የመግለጫ አይነት +IntracommReportDownload=የኤክስኤምኤል ፋይል ያውርዱ # Invoice -IntracommReportTransportMode=Transport mode +IntracommReportTransportMode=የመጓጓዣ ሁነታ diff --git a/htdocs/langs/am_ET/ldap.lang b/htdocs/langs/am_ET/ldap.lang index 8b6f0864215..a8a4d0e320a 100644 --- a/htdocs/langs/am_ET/ldap.lang +++ b/htdocs/langs/am_ET/ldap.lang @@ -1,27 +1,33 @@ # Dolibarr language file - Source file is en_US - ldap YouMustChangePassNextLogon=Password for user %s on the domain %s must be changed. -UserMustChangePassNextLogon=User must change password on the domain %s -LDAPInformationsForThisContact=Information in LDAP database for this contact -LDAPInformationsForThisUser=Information in LDAP database for this user -LDAPInformationsForThisGroup=Information in LDAP database for this group -LDAPInformationsForThisMember=Information in LDAP database for this member -LDAPInformationsForThisMemberType=Information in LDAP database for this member type -LDAPAttributes=LDAP attributes -LDAPCard=LDAP card -LDAPRecordNotFound=Record not found in LDAP database -LDAPUsers=Users in LDAP database -LDAPFieldStatus=Status -LDAPFieldFirstSubscriptionDate=First subscription date -LDAPFieldFirstSubscriptionAmount=First subscription amount -LDAPFieldLastSubscriptionDate=Latest subscription date -LDAPFieldLastSubscriptionAmount=Latest subscription amount -LDAPFieldSkype=Skype id -LDAPFieldSkypeExample=Example: skypeName -UserSynchronized=User synchronized -GroupSynchronized=Group synchronized -MemberSynchronized=Member synchronized -MemberTypeSynchronized=Member type synchronized -ContactSynchronized=Contact synchronized -ForceSynchronize=Force synchronizing Dolibarr -> LDAP -ErrorFailedToReadLDAP=Failed to read LDAP database. Check LDAP module setup and database accessibility. -PasswordOfUserInLDAP=Password of user in LDAP +UserMustChangePassNextLogon=ተጠቃሚው ጎራ ላይ የይለፍ ቃል መቀየር አለበት %s +LDAPInformationsForThisContact=ለዚህ እውቂያ በኤልዲኤፒ ዳታቤዝ ውስጥ ያለ መረጃ +LDAPInformationsForThisUser=ለዚህ ተጠቃሚ በኤልዲኤፒ ዳታቤዝ ውስጥ ያለ መረጃ +LDAPInformationsForThisGroup=ለዚህ ቡድን በኤልዲኤፒ ዳታቤዝ ውስጥ ያለ መረጃ +LDAPInformationsForThisMember=ለዚህ አባል በኤልዲኤፒ ዳታቤዝ ውስጥ ያለ መረጃ +LDAPInformationsForThisMemberType=የዚህ አባል አይነት በኤልዲኤፒ ዳታቤዝ ውስጥ ያለ መረጃ +LDAPAttributes=የኤልዲኤፒ ባህሪዎች +LDAPCard=LDAP ካርድ +LDAPRecordNotFound=መዝገብ በኤልዲኤፒ ዳታቤዝ ውስጥ አልተገኘም። +LDAPUsers=በኤልዲኤፒ ዳታቤዝ ውስጥ ያሉ ተጠቃሚዎች +LDAPFieldStatus=ሁኔታ +LDAPFieldFirstSubscriptionDate=የመጀመሪያው የደንበኝነት ምዝገባ ቀን +LDAPFieldFirstSubscriptionAmount=የመጀመሪያው የደንበኝነት መጠን +LDAPFieldLastSubscriptionDate=የቅርብ ጊዜ የደንበኝነት ምዝገባ ቀን +LDAPFieldLastSubscriptionAmount=የቅርብ ጊዜ የደንበኝነት ምዝገባ መጠን +LDAPFieldSkype=የስካይፕ መታወቂያ +LDAPFieldSkypeExample=ምሳሌ፡ ስካይፕ ስም +UserSynchronized=ተጠቃሚ ተመሳስሏል። +GroupSynchronized=ቡድን ተመሳስሏል። +MemberSynchronized=አባል ተመሳስሏል። +MemberTypeSynchronized=የአባል አይነት ተመሳስሏል። +ContactSynchronized=እውቂያ ተመሳስሏል። +ForceSynchronize=Dolibarr -> LDAPን ማመሳሰል ያስገድድ +ErrorFailedToReadLDAP=የኤልዲኤፒ ዳታቤዝ ማንበብ አልተሳካም። የኤልዲኤፒ ሞጁል ማዋቀር እና የውሂብ ጎታ ተደራሽነትን ያረጋግጡ። +PasswordOfUserInLDAP=በኤልዲኤፒ ውስጥ የተጠቃሚ ይለፍ ቃል +LDAPPasswordHashType=የይለፍ ቃል ሃሽ አይነት +LDAPPasswordHashTypeExample=በአገልጋዩ ላይ ጥቅም ላይ የዋለው የይለፍ ቃል ሃሽ ዓይነት +SupportedForLDAPExportScriptOnly=በldap ኤክስፖርት ስክሪፕት ብቻ የተደገፈ +SupportedForLDAPImportScriptOnly=በldap ማስመጣት ስክሪፕት ብቻ ነው የሚደገፈው +LDAPUserAccountControl = የተጠቃሚ መለያ ቁጥጥር በፍጥረት ላይ (ንቁ ማውጫ) +LDAPUserAccountControlExample = 512 መደበኛ መለያ / 546 መደበኛ መለያ + የይለፍ ቃል የለም + ተሰናክሏል (ይመልከቱ፡ https://fr.wikipedia.org/wiki/Active_Directory) diff --git a/htdocs/langs/am_ET/loan.lang b/htdocs/langs/am_ET/loan.lang index d271ed0c140..6272c777d70 100644 --- a/htdocs/langs/am_ET/loan.lang +++ b/htdocs/langs/am_ET/loan.lang @@ -1,34 +1,34 @@ # Dolibarr language file - Source file is en_US - loan -Loan=Loan -Loans=Loans -NewLoan=New Loan -ShowLoan=Show Loan -PaymentLoan=Loan payment -LoanPayment=Loan payment -ShowLoanPayment=Show Loan Payment -LoanCapital=Capital -Insurance=Insurance -Interest=Interest -Nbterms=Number of terms -Term=Term -LoanAccountancyCapitalCode=Accounting account capital -LoanAccountancyInsuranceCode=Accounting account insurance -LoanAccountancyInterestCode=Accounting account interest -ConfirmDeleteLoan=Confirm deleting this loan -LoanDeleted=Loan Deleted Successfully -ConfirmPayLoan=Confirm classify paid this loan -LoanPaid=Loan Paid -ListLoanAssociatedProject=List of loan associated with the project -AddLoan=Create loan -FinancialCommitment=Financial commitment -InterestAmount=Interest -CapitalRemain=Capital remain -TermPaidAllreadyPaid = This term is allready paid -CantUseScheduleWithLoanStartedToPaid = Can't use scheduler for a loan with payment started -CantModifyInterestIfScheduleIsUsed = You can't modify interest if you use schedule +Loan=ብድር +Loans=ብድሮች +NewLoan=አዲስ ብድር +ShowLoan=ብድር አሳይ +PaymentLoan=የብድር ክፍያ +LoanPayment=የብድር ክፍያ +ShowLoanPayment=የብድር ክፍያ አሳይ +LoanCapital=ካፒታል +Insurance=ኢንሹራንስ +Interest=ፍላጎት +Nbterms=የውል ብዛት +Term=ጊዜ +LoanAccountancyCapitalCode=የሂሳብ ካፒታል +LoanAccountancyInsuranceCode=የሂሳብ አያያዝ መለያ ኢንሹራንስ +LoanAccountancyInterestCode=የሂሳብ ወለድ +ConfirmDeleteLoan=ይህን ብድር መሰረዝን ያረጋግጡ +LoanDeleted=ብድር በተሳካ ሁኔታ ተሰርዟል። +ConfirmPayLoan=ይህንን ብድር መከፋፈሉን ያረጋግጡ +LoanPaid=የተከፈለ ብድር +ListLoanAssociatedProject=ከፕሮጀክቱ ጋር የተያያዘ የብድር ዝርዝር +AddLoan=ብድር ይፍጠሩ +FinancialCommitment=የገንዘብ ቁርጠኝነት +InterestAmount=ፍላጎት +CapitalRemain=ካፒታል ይቀራል +TermPaidAllreadyPaid = ይህ ቃል አስቀድሞ ተከፍሏል። +CantUseScheduleWithLoanStartedToPaid = ክፍያ በተጀመረ የብድር ጊዜ ማመንጨት አይቻልም +CantModifyInterestIfScheduleIsUsed = መርሐግብር ከተጠቀሙ ፍላጎትን መቀየር አይችሉም # Admin -ConfigLoan=Configuration of the module loan -LOAN_ACCOUNTING_ACCOUNT_CAPITAL=Accounting account capital by default -LOAN_ACCOUNTING_ACCOUNT_INTEREST=Accounting account interest by default -LOAN_ACCOUNTING_ACCOUNT_INSURANCE=Accounting account insurance by default -CreateCalcSchedule=Edit financial commitment +ConfigLoan=የሞጁል ብድር ውቅር +LOAN_ACCOUNTING_ACCOUNT_CAPITAL=መለያ (ከሂሳብ ገበታ) በነባሪ ለካፒታል (ብድር ሞጁል) ጥቅም ላይ ይውላል +LOAN_ACCOUNTING_ACCOUNT_INTEREST=መለያ (ከሂሳብ ገበታ) በነባሪ ለወለድ ጥቅም ላይ የሚውል (የብድር ሞጁል) +LOAN_ACCOUNTING_ACCOUNT_INSURANCE=መለያ (ከሂሳብ ገበታ) በነባሪነት ለኢንሹራንስ ጥቅም ላይ የሚውል (የብድር ሞጁል) +CreateCalcSchedule=የገንዘብ ቁርጠኝነትን ያርትዑ diff --git a/htdocs/langs/am_ET/mailmanspip.lang b/htdocs/langs/am_ET/mailmanspip.lang index bab4b3576b4..5db670a3708 100644 --- a/htdocs/langs/am_ET/mailmanspip.lang +++ b/htdocs/langs/am_ET/mailmanspip.lang @@ -1,27 +1,27 @@ # Dolibarr language file - Source file is en_US - mailmanspip -MailmanSpipSetup=Mailman and SPIP module Setup -MailmanTitle=Mailman mailing list system -TestSubscribe=To test subscription to Mailman lists -TestUnSubscribe=To test unsubscribe from Mailman lists -MailmanCreationSuccess=Subscription test was executed successfully -MailmanDeletionSuccess=Unsubscription test was executed successfully -SynchroMailManEnabled=A Mailman update will be performed -SynchroSpipEnabled=A Spip update will be performed -DescADHERENT_MAILMAN_ADMINPW=Mailman administrator password -DescADHERENT_MAILMAN_URL=URL for Mailman subscriptions -DescADHERENT_MAILMAN_UNSUB_URL=URL for Mailman unsubscriptions -DescADHERENT_MAILMAN_LISTS=List(s) for automatic inscription of new members (separated by a comma) -SPIPTitle=SPIP Content Management System -DescADHERENT_SPIP_SERVEUR=SPIP Server -DescADHERENT_SPIP_DB=SPIP database name -DescADHERENT_SPIP_USER=SPIP database login -DescADHERENT_SPIP_PASS=SPIP database password -AddIntoSpip=Add into SPIP -AddIntoSpipConfirmation=Are you sure you want to add this member into SPIP? -AddIntoSpipError=Failed to add the user in SPIP -DeleteIntoSpip=Remove from SPIP -DeleteIntoSpipConfirmation=Are you sure you want to remove this member from SPIP? -DeleteIntoSpipError=Failed to suppress the user from SPIP -SPIPConnectionFailed=Failed to connect to SPIP -SuccessToAddToMailmanList=%s successfully added to mailman list %s or SPIP database -SuccessToRemoveToMailmanList=%s successfully removed from mailman list %s or SPIP database +MailmanSpipSetup=የመልእክተኛ እና የ SPIP ሞጁል ማዋቀር +MailmanTitle=የፖስታ መላኪያ ዝርዝር ስርዓት +TestSubscribe=የMailman ዝርዝሮችን መመዝገብ ለመሞከር +TestUnSubscribe=ከመልእክተኛ ዝርዝሮች የደንበኝነት ምዝገባ ለመውጣት ለመሞከር +MailmanCreationSuccess=የደንበኝነት ምዝገባ ሙከራ በተሳካ ሁኔታ ተፈጽሟል +MailmanDeletionSuccess=ከደንበኝነት ምዝገባ የመውጣት ሙከራ በተሳካ ሁኔታ ተፈጽሟል +SynchroMailManEnabled=የመልእክተኛ ማሻሻያ ይከናወናል +SynchroSpipEnabled=የ Spip ዝማኔ ይከናወናል +DescADHERENT_MAILMAN_ADMIN_PASSWORD=የመልእክተኛ አስተዳዳሪ የይለፍ ቃል +DescADHERENT_MAILMAN_URL=ዩአርኤል ለመልእክተኛ ምዝገባዎች +DescADHERENT_MAILMAN_UNSUB_URL=ዩአርኤል ለመልእክተኛ ከደንበኝነት ምዝገባዎች +DescADHERENT_MAILMAN_LISTS=ዝርዝር(ዎች) ለአዲስ አባላት አውቶማቲክ ጽሁፍ (በነጠላ ሰረዝ ተለይቷል) +SPIPTitle=SPIP የይዘት አስተዳደር ስርዓት +DescADHERENT_SPIP_SERVEUR=SPIP አገልጋይ +DescADHERENT_SPIP_DB=የ SPIP የውሂብ ጎታ ስም +DescADHERENT_SPIP_USER=የ SPIP የውሂብ ጎታ መግቢያ +DescADHERENT_SPIP_PASS=የSPIP የውሂብ ጎታ ይለፍ ቃል +AddIntoSpip=ወደ SPIP ያክሉ +AddIntoSpipConfirmation=እርግጠኛ ነዎት ይህን አባል ወደ SPIP ማከል ይፈልጋሉ? +AddIntoSpipError=ተጠቃሚውን በSPIP ውስጥ ማከል አልተሳካም። +DeleteIntoSpip=ከ SPIP ያስወግዱ +DeleteIntoSpipConfirmation=እርግጠኛ ነዎት ይህን አባል ከSPIP ማስወገድ ይፈልጋሉ? +DeleteIntoSpipError=ተጠቃሚውን ከSPIP ማፈን አልተሳካም። +SPIPConnectionFailed=ከSPIP ጋር መገናኘት አልተሳካም። +SuccessToAddToMailmanList=%s በተሳካ ሁኔታ ወደ የመልዕክት ሰሪ ዝርዝር ታክሏል %s ወይም SPIP የውሂብ ጎታ +SuccessToRemoveToMailmanList=%s በተሳካ ሁኔታ ከመልእክተኛ ዝርዝር %s ወይም SPIP የውሂብ ጎታ ተወግዷል diff --git a/htdocs/langs/am_ET/mails.lang b/htdocs/langs/am_ET/mails.lang index f5babec9d03..21f2ab16691 100644 --- a/htdocs/langs/am_ET/mails.lang +++ b/htdocs/langs/am_ET/mails.lang @@ -50,7 +50,7 @@ MailingStatusReadAndUnsubscribe=ያንብቡ እና ከደንበኝነት ምዝ ErrorMailRecipientIsEmpty=ኢሜይል ተቀባይ ባዶ ነው። WarningNoEMailsAdded=ወደ ተቀባይ ዝርዝር የሚታከል አዲስ ኢሜይል የለም። ConfirmValidMailing=እርግጠኛ ነዎት ይህን ኢሜል ማረጋገጥ ይፈልጋሉ? -ConfirmResetMailing=ማስጠንቀቂያ፣ ኢሜል መላክን እንደገና በማስጀመር %s ይፈቅዳሉ ይህንን ኢሜል በጅምላ መላክ ላይ እንደገና የላከው። እርግጠኛ ነዎት ይህን ማድረግ ይፈልጋሉ? +ConfirmResetMailing=Warning, by re-initializing emailing %s, you will allow the re-sending this email in a bulk mailing. Are you sure you want to do this? ConfirmDeleteMailing=እርግጠኛ ነዎት ይህን ኢሜል መሰረዝ ይፈልጋሉ? NbOfUniqueEMails=የልዩ ኢሜይሎች ቁጥር NbOfUniquePhones=No. of unique phones @@ -147,7 +147,7 @@ UseFormatFileEmailToTarget=ከውጭ የመጣው ፋይል ቅርጸት ሊኖ UseFormatInputEmailToTarget=ሕብረቁምፊ ከቅርጸት ጋር አስገባ email;name;firstname;other MailAdvTargetRecipients=ተቀባዮች (የላቀ ምርጫ) AdvTgtTitle=ሶስተኛ ወገኖችን ወይም አድራሻዎችን/አድራሻዎችን ዒላማ ለመምረጥ የግቤት መስኮችን ሙላ -AdvTgtSearchTextHelp=%%ን እንደ ዱር ካርድ ተጠቀም። ለምሳሌ እንደ jean, joe, jim ያሉ ሁሉንም እቃዎች ለማግኘት ማስገባት ትችላለህ j%% እንዲሁም መጠቀም ይችላሉ; እንደ እሴት መለያ ፣ እና ይጠቀሙ! ከዚህ ዋጋ በስተቀር. ለምሳሌ jean;joe;jim%%;!jimo;!jimab07e53171 span> ሁሉንም ጂንስ፣ ጆ፣ በጂም ይጀምሩ ነገር ግን በጂሞ አይጀምርም እና በጅማ የሚጀምር ሁሉ ኢላማ ያደርጋል። +AdvTgtSearchTextHelp=Use %% as wildcards. For example to find all item like jean, joe, jim, you can input j%%, you can also use ; as separator for value, and use ! for except this value. For example jean;joe;jim%%;!jimo;!jima%% will target all jean, joe, start with jim but not jimo and not everything that starts with jima AdvTgtSearchIntHelp=ኢንት ወይም ተንሳፋፊ እሴትን ለመምረጥ ክፍተቱን ይጠቀሙ AdvTgtMinVal=ዝቅተኛው እሴት AdvTgtMaxVal=ከፍተኛው እሴት @@ -182,12 +182,12 @@ IsAnAnswer=የመጀመሪያ ኢሜል መልስ ነው። RecordCreatedByEmailCollector=በኢሜል ሰብሳቢው የተፈጠረ መዝገብ %s ከኢሜል %s DefaultBlacklistMailingStatus=አዲስ እውቂያ ሲፈጥሩ የመስክ ነባሪ እሴት %s DefaultStatusEmptyMandatory=ባዶ ግን ግዴታ -WarningLimitSendByDay=ማስጠንቀቂያ፡ የአብነትዎ ማዋቀር ወይም ውል በቀን የእርስዎን የኢሜይሎች ብዛት %s
። ተጨማሪ ለመላክ መሞከር ምሳሌዎ እንዲቀንስ ወይም እንዲታገድ ሊያደርግ ይችላል። ከፍ ያለ ኮታ ከፈለጉ እባክዎን ድጋፍዎን ያግኙ። +WarningLimitSendByDay=WARNING: The setup or contract of your instance limits your number of emails per day to %s. Trying to send more may result in having your instance slow down or suspended. Please contact your support if you need a higher quota. NoMoreRecipientToSendTo=ኢሜይሉን የሚልክለት ተቀባይ የለም። EmailOptedOut=የኢሜል ባለቤት በዚህ ኢሜይል እንዳያገኘው ጠይቀዋል። EvenUnsubscribe=መርጠው የወጡ ኢሜይሎችን ያካትቱ EvenUnsubscribeDesc=ኢሜይሎችን እንደ ዒላማ ሲመርጡ መርጠው የወጡ ኢሜይሎችን ያካትቱ። ለምሳሌ ለግዴታ አገልግሎት ኢሜይሎች ይጠቅማል። -XEmailsDoneYActionsDone=%s ኢሜይሎች ቅድመ ብቃት ያላቸው፣ %s ኢሜይሎች በተሳካ ሁኔታ ተካሂደዋል (ለb0ecb2ec87fe49f0%s በዶሊ ፓንባር ፋይሉ ውስጥ አልተገለጸም class='notranslate'>conf.php። +ErrorConfigParameterNotDefined=Parameter %s is not defined in the Dolibarr config file conf.php. ErrorCantLoadUserFromDolibarrDatabase=ተጠቃሚን ማግኘት አልተሳካም %s በ Dolibarr. ErrorNoVATRateDefinedForSellerCountry=ስህተት፣ ለአገር '%s' የተገለጹ የቫት ተመኖች የሉም። ErrorNoSocialContributionForSellerCountry=ስህተት፣ ለሀገር '%s' የተገለጸ የማህበራዊ/የፋይስካል ታክስ አይነት የለም። @@ -103,7 +103,7 @@ RecordDeleted=መዝገብ ተሰርዟል። RecordGenerated=መዝገብ ተፈጠረ LevelOfFeature=የባህሪዎች ደረጃ NotDefined=አልተገለጸም። -DolibarrInHttpAuthenticationSoPasswordUseless=Dolibarr የማረጋገጫ ሁነታ ወደ %sb09a4b739f17f80 ፋይል ውቅር ተቀናብሯል class='notranslate'>conf.php.
ይህ ማለት የውሂብ ጎታው ውጫዊ ነው ማለት ነው. ዶሊባርር, ስለዚህ ይህንን መስክ መቀየር ምንም ውጤት ላይኖረው ይችላል. +DolibarrInHttpAuthenticationSoPasswordUseless=Dolibarr authentication mode is set to %s in configuration file conf.php.
This means that the password database is external to Dolibarr, so changing this field may have no effect. Administrator=የስርዓት አስተዳዳሪ AdministratorDesc=የስርዓት አስተዳዳሪ (ተጠቃሚን ፣ ፈቃዶችን ግን የስርዓት ማዋቀር እና የሞጁሎችን ውቅር ማስተዳደር ይችላል) Undefined=ያልተገለጸ @@ -131,7 +131,7 @@ TechnicalID=የቴክኒክ መታወቂያ LineID=የመስመር መታወቂያ NotePublic=ማስታወሻ (ይፋዊ) NotePrivate=ማስታወሻ (የግል) -PrecisionUnitIsLimitedToXDecimals=ዶሊባር የተዋቀረው የዋጋ ትክክለኝነት ወደ %sb09a4b739f17f>b09a4b739f17f . +PrecisionUnitIsLimitedToXDecimals=Dolibarr was setup to limit precision of unit prices to %s decimals. DoTest=ሙከራ ToFilter=አጣራ NoFilter=ማጣሪያ የለም። @@ -172,7 +172,7 @@ Close=ገጠመ CloseAs=ሁኔታ አቀናብር ወደ CloseBox=መግብርን ከዳሽቦርድዎ ያስወግዱ Confirm=አረጋግጥ -ConfirmSendCardByMail=የምር የዚህን ካርድ ይዘት በደብዳቤ ወደ %sb09a4b739f17f17f መላክ ይፈልጋሉ? /ስፓን>? +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to %s? Delete=ሰርዝ Remove=አስወግድ Resiliate=አቋርጥ @@ -267,7 +267,7 @@ Numero=ቁጥር Limit=ገደብ Limits=ገደቦች Logout=ውጣ -NoLogoutProcessWithAuthMode=ከማረጋገጫ ሁነታ ጋር ምንም አይነት የሚተገበር የማቋረጥ ባህሪ የለም %s9a4b739f17f8z +NoLogoutProcessWithAuthMode=No applicative disconnect feature with authentication mode %s Connection=ግባ Setup=አዘገጃጀት Alert=ማንቂያ @@ -420,6 +420,8 @@ TotalTTCShort=ጠቅላላ (ግብርን ጨምሮ) TotalHT=ጠቅላላ (ከግብር በስተቀር) TotalHTforthispage=ጠቅላላ (ከግብር በስተቀር) ለዚህ ገጽ Totalforthispage=ለዚህ ገጽ አጠቃላይ +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=ጠቅላላ (ግብርን ጨምሮ) TotalTTCToYourCredit=ጠቅላላ (ግብርን ጨምሮ) ለእርስዎ ክሬዲት TotalVAT=ጠቅላላ ግብር @@ -502,7 +504,7 @@ Completed=ተጠናቀቀ Running=በሂደት ላይ RequestAlreadyDone=ጥያቄ አስቀድሞ ተመዝግቧል Filter=አጣራ -FilterOnInto=የፍለጋ መስፈርት '%s=span> ወደ መስኮች notranslate'>%s +FilterOnInto=Search criteria '%s' into fields %s RemoveFilter=ማጣሪያን ያስወግዱ ChartGenerated=ገበታ ተፈጥሯል። ChartNotGenerated=ገበታ አልተፈጠረም። @@ -647,6 +649,7 @@ ReportName=ስም ሪፖርት አድርግ ReportPeriod=የሪፖርት ጊዜ ReportDescription=መግለጫ Report=ሪፖርት አድርግ +Reports=Reports Keyword=ቁልፍ ቃል Origin=መነሻ Legend=አፈ ታሪክ @@ -757,7 +760,7 @@ MenuMembers=አባላት MenuAgendaGoogle=ጉግል አጀንዳ MenuTaxesAndSpecialExpenses=ግብር | ልዩ ወጪዎች ThisLimitIsDefinedInSetup=Dolibarr ገደብ (ሜኑ home-setup-security)፡ %s Kb፣ PHP ገደብ፡ %s Kb -ThisLimitIsDefinedInSetupAt=Dolibarr ገደብ (ምናሌ %s): %s Kb፣ PHP ገደብ (Param b0ecb2ecz807fespan >): %s ኪባ +ThisLimitIsDefinedInSetupAt=Dolibarr limit (Menu %s): %s Kb, PHP limit (Param %s): %s Kb NoFileFound=ምንም ሰነዶች አልተሰቀሉም። CurrentUserLanguage=የአሁኑ ቋንቋ CurrentTheme=የአሁኑ ጭብጥ @@ -787,7 +790,7 @@ Merge=አዋህድ DocumentModelStandardPDF=መደበኛ ፒዲኤፍ አብነት PrintContentArea=ዋናውን የይዘት ቦታ ለማተም ገጽ አሳይ MenuManager=የምናሌ አስተዳዳሪ -WarningYouAreInMaintenanceMode=ማስጠንቀቂያ፣ የጥገና ሁነታ ላይ ነዎት፡ መግቢያ ብቻ %s መተግበሪያውን በዚህ ሁነታ እንዲጠቀም ተፈቅዶለታል። +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode: only login %s is allowed to use the application in this mode. CoreErrorTitle=የስርዓት ስህተት CoreErrorMessage=ይቅርታ፣ ስህተት ተፈጥሯል። መዝገቦቹን ለመፈተሽ የስርዓት አስተዳዳሪዎን ያግኙ ወይም ተጨማሪ መረጃ ለማግኘት $dolibarr_main_prod=1ን ያሰናክሉ። CreditCard=የዱቤ ካርድ @@ -865,7 +868,7 @@ Access=መዳረሻ SelectAction=እርምጃ ይምረጡ SelectTargetUser=ኢላማ ተጠቃሚ/ሰራተኛ ይምረጡ HelpCopyToClipboard=ወደ ቅንጥብ ሰሌዳ ለመቅዳት Ctrl+C ይጠቀሙ -SaveUploadedFileWithMask=ፋይሉን በአገልጋዩ ላይ አስቀምጥ "%s (አለበለዚያ") %s") +SaveUploadedFileWithMask=Save file on server with name "%s" (otherwise "%s") OriginFileName=ኦሪጅናል የፋይል ስም SetDemandReason=ምንጭ አዘጋጅ SetBankAccount=የባንክ ሂሳብን ይግለጹ @@ -963,6 +966,7 @@ AutomaticallyCalculated=በራስ-ሰር ይሰላል TitleSetToDraft=ወደ ረቂቅ ተመለስ ConfirmSetToDraft=እርግጠኛ ነህ ወደ ረቂቅ ሁኔታ መመለስ ትፈልጋለህ? ImportId=የማስመጣት መታወቂያ +Event=Event Events=ክስተቶች EMailTemplates=የኢሜል አብነቶች FileNotShared=ፋይል ለውጭ ህዝብ አልተጋራም። @@ -1048,7 +1052,7 @@ Select2NotFound=ምንም ውጤት አልተገኘም። Select2Enter=አስገባ Select2MoreCharacter=ወይም ተጨማሪ ባህሪ Select2MoreCharacters=ወይም ተጨማሪ ቁምፊዎች -Select2MoreCharactersMore=አገባብ ይፈልጉ፡
>
|b0460de notranslate'> ወይም (a|b)
*='span> ማንኛውም ቁምፊ (a*b)
በ (^ab)
27060ec $ በ(ab$)
ያበቃል +Select2MoreCharactersMore=Search syntax:
| OR (a|b)
* Any character (a*b)
^ Start with (^ab)
$ End with (ab$)
Select2LoadingMoreResults=ተጨማሪ ውጤቶችን በመጫን ላይ... Select2SearchInProgress=ፍለጋ በሂደት ላይ... SearchIntoThirdparties=ሦስተኛ ወገኖች @@ -1180,7 +1184,6 @@ ConfirmAffectUserQuestion=እርግጠኛ ነዎት ተጠቃሚዎችን ለተ ConfirmSetSupervisorQuestion=እርግጠኛ ኖት ሱፐርቫይዘርን ወደ %s የተመረጡ መዝገብ(ዎች) ማዋቀር ይፈልጋሉ? ConfirmUpdatePriceQuestion=እርግጠኛ ነዎት የ%s የተመረጡ ሪኮርዶችን ዋጋ ማዘመን ይፈልጋሉ? CategTypeNotFound=ለመዝገቦች አይነት ምንም የመለያ አይነት አልተገኘም። -Rate=ደረጃ ይስጡ SupervisorNotFound=ተቆጣጣሪ አልተገኘም። CopiedToClipboard=ወደ ቅንጥብ ሰሌዳ ተቀድቷል። InformationOnLinkToContract=ይህ መጠን የውሉ መስመሮች አጠቃላይ ድምር ብቻ ነው። የጊዜ ፅንሰ-ሀሳብ ግምት ውስጥ አይገቡም. @@ -1213,6 +1216,7 @@ CanceledHidden=ተሰርዟል ተደብቋል CanceledShown=ተሰርዟል። Terminate=አቋርጥ Terminated=ተቋርጧል +Position=Position AddLineOnPosition=በአቀማመጥ ላይ መስመር አክል (ባዶ ከሆነ መጨረሻ ላይ) ConfirmAllocateCommercial=የሽያጭ ተወካይ ማረጋገጫ ይመድቡ ConfirmAllocateCommercialQuestion=እርግጠኛ ነዎት %s የተመረጠውን መዝገብ(ዎች) መመደብ ይፈልጋሉ? @@ -1230,6 +1234,7 @@ ExternalUser=የውጭ ተጠቃሚ NoSpecificContactAddress=የተለየ አድራሻ ወይም አድራሻ የለም። NoSpecificContactAddressBis=ይህ ትር የተወሰኑ እውቂያዎችን ወይም አድራሻዎችን አሁን ላለው ነገር ለማስገደድ የተነደፈ ነው። በሶስተኛ ወገን ላይ ያለው መረጃ በቂ ካልሆነ ወይም ትክክለኛ ካልሆነ ለዕቃው አንድ ወይም ብዙ የተወሰኑ እውቂያዎችን ወይም አድራሻዎችን ለመግለጽ ከፈለጉ ብቻ ይጠቀሙበት። HideOnVCard=ደብቅ %s +ShowOnVCard=Show %s AddToContacts=አድራሻዬን ወደ እውቂያዎቼ ጨምር LastAccess=የመጨረሻ መዳረሻ UploadAnImageToSeeAPhotoHere=እዚህ ፎቶ ለማየት ከትር %s ላይ ምስል ይስቀሉ @@ -1239,7 +1244,7 @@ PublicVirtualCard=ምናባዊ የንግድ ካርድ TreeView=የዛፍ እይታ DropFileToAddItToObject=ወደዚህ ነገር ለማከል ፋይል ጣል ያድርጉ UploadFileDragDropSuccess=ፋይሉ በተሳካ ሁኔታ ተሰቅሏል። -SearchSyntaxTooltipForStringOrNum=በጽሑፍ መስክ ውስጥ ለመፈለግ፣ 'በመጀመር ወይም በመጨረስ' ለመፈለግ ወይም ለመጠቀም ^ ወይም $ ቁምፊዎችን መጠቀም ትችላለህ። 'አልያዘም' ሙከራ ለማድረግ። መጠቀም ይችላሉ | ከ'AND' ይልቅ ለ'OR' ሁኔታ ከጠፈር ይልቅ በሁለት ሕብረቁምፊዎች መካከል። ለቁጥር እሴቶች፣ ከዋጋው በፊት የሂሳብ ንፅፅርን ተጠቅመው ለማጣራት ኦፕሬተሩን <, >፣ <=, >= ወይም != መጠቀም ትችላለህ። +SearchSyntaxTooltipForStringOrNum=For searching inside text fields, you can use the characters ^ or $ to make a 'start or end with' search or use the ! to make a 'does not contain' test. You can use the | between two strings instead of a space for a 'OR' condition instead of 'AND'. For numeric values, you can use the operator <, >, <=, >= or != before the value, to filter using a mathematical comparison InProgress=በሂደት ላይ DateOfPrinting=የታተመበት ቀን ClickFullScreenEscapeToLeave=ወደ ሙሉ ስክሪን ሁነታ ለመቀየር እዚህ ጠቅ ያድርጉ። ከሙሉ ማያ ገጽ ሁነታ ለመውጣት ESCAPE ን ይጫኑ። @@ -1259,4 +1264,7 @@ AmountSalary=የደመወዝ መጠን InvoiceSubtype=የክፍያ መጠየቂያ ንዑስ ዓይነት ConfirmMassReverse=የጅምላ ተገላቢጦሽ ማረጋገጫ ConfirmMassReverseQuestion=እርግጠኛ ነዎት %s የተመረጠውን መዝገብ(ዎች) መቀልበስ ይፈልጋሉ? - +ElementType=Element type +ElementId=Element Id +Encrypted=Encrypted +Settings=Settings diff --git a/htdocs/langs/am_ET/margins.lang b/htdocs/langs/am_ET/margins.lang index a91b139ec7b..33476ae433c 100644 --- a/htdocs/langs/am_ET/margins.lang +++ b/htdocs/langs/am_ET/margins.lang @@ -1,45 +1,46 @@ # Dolibarr language file - Source file is en_US - marges -Margin=Margin -Margins=Margins -TotalMargin=Total Margin -MarginOnProducts=Margin / Products -MarginOnServices=Margin / Services -MarginRate=Margin rate -MarkRate=Mark rate -DisplayMarginRates=Display margin rates -DisplayMarkRates=Display mark rates -InputPrice=Input price -margin=Profit margins management -margesSetup=Profit margins management setup -MarginDetails=Margin details -ProductMargins=Product margins -CustomerMargins=Customer margins -SalesRepresentativeMargins=Sales representative margins -ContactOfInvoice=Contact of invoice -UserMargins=User margins -ProductService=Product or Service -AllProducts=All products and services -ChooseProduct/Service=Choose product or service -ForceBuyingPriceIfNull=Force buying/cost price to selling price if not defined -ForceBuyingPriceIfNullDetails=If buying/cost price not provided when we add a new line, and this option is "ON", the margin will be 0%% on the new line (buying/cost price = selling price). If this option is "OFF" (recommended), margin will be equal to the value suggested by default (and may be 100%% if no default value can be found). -MARGIN_METHODE_FOR_DISCOUNT=Margin method for global discounts -UseDiscountAsProduct=As a product -UseDiscountAsService=As a service -UseDiscountOnTotal=On subtotal -MARGIN_METHODE_FOR_DISCOUNT_DETAILS=Defines if a global discount is treated as a product, a service, or only on subtotal for margin calculation. -MARGIN_TYPE=Buying/Cost price suggested by default for margin calculation -MargeType1=Margin on Best vendor price -MargeType2=Margin on Weighted Average Price (WAP) -MargeType3=Margin on Cost Price -MarginTypeDesc=* Margin on best buying price = Selling price - Best vendor price defined on product card
* Margin on Weighted Average Price (WAP) = Selling price - Product Weighted Average Price (WAP) or best vendor price if WAP not yet defined
* Margin on Cost price = Selling price - Cost price defined on product card or WAP if cost price not defined, or best vendor price if WAP not yet defined -CostPrice=Cost price -UnitCharges=Unit charges -Charges=Charges -AgentContactType=Commercial agent contact type -AgentContactTypeDetails=Define what contact type (linked on invoices) will be used for margin report per contact/address. Note that reading statistics on a contact is not reliable since in most cases the contact may not be defined explicitely on the invoices. -rateMustBeNumeric=Rate must be a numeric value -markRateShouldBeLesserThan100=Mark rate should be lower than 100 -ShowMarginInfos=Show margin infos -CheckMargins=Margins detail -MarginPerSaleRepresentativeWarning=The report of margin per user use the link between third parties and sale representatives to calculate the margin of each sale representative. Because some thirdparties may not have any dedicated sale representative and some third parties may be linked to several, some amounts may not be included into this report (if there is no sale representative) and some may appear on different lines (for each sale representative). +Margin=ህዳግ +Margins=ህዳጎች +TotalMargin=ጠቅላላ ህዳግ +MarginOnProducts=ህዳግ / ምርቶች +MarginOnServices=ህዳግ / አገልግሎቶች +MarginRate=የትርፍ መጠን +ModifyMarginRates=የኅዳግ ዋጋዎችን ያስተካክሉ +MarkRate=የደረጃ ምልክት ያድርጉ +DisplayMarginRates=የትርፍ መጠን አሳይ +DisplayMarkRates=የማሳያ ምልክቶች ተመኖች +InputPrice=የግቤት ዋጋ +margin=የትርፍ ህዳጎች አስተዳደር +margesSetup=የትርፍ ህዳጎች አስተዳደር ማዋቀር +MarginDetails=የኅዳግ ዝርዝሮች +ProductMargins=የምርት ህዳጎች +CustomerMargins=የደንበኛ ህዳጎች +SalesRepresentativeMargins=የሽያጭ ተወካይ ህዳጎች +ContactOfInvoice=የክፍያ መጠየቂያ እውቂያ +UserMargins=የተጠቃሚ ህዳጎች +ProductService=ምርት ወይም አገልግሎት +AllProducts=ሁሉም ምርቶች እና አገልግሎቶች +ChooseProduct/Service=ምርት ወይም አገልግሎት ይምረጡ +ForceBuyingPriceIfNull=ካልተገለጸ የግዢ/ዋጋን ወደ መሸጫ ዋጋ አስገድዱ +ForceBuyingPriceIfNullDetails=አዲስ መስመር ስንጨምር የግዢ/ዋጋ ካልቀረበ እና ይህ አማራጭ "በርቷል" ከሆነ ህዳጉ 0%% በአዲሱ መስመር (የግዢ/ዋጋ ዋጋ =) ይሆናል። የመሸጫ ዋጋ). ይህ አማራጭ "ጠፍቷል" (የሚመከር) ከሆነ ህዳግ በነባሪነት ከተጠቆመው እሴት ጋር እኩል ይሆናል (እና ምንም ነባሪ እሴት ካልተገኘ 100%% ሊሆን ይችላል)። +MARGIN_METHODE_FOR_DISCOUNT=ለአለም አቀፍ ቅናሾች የኅዳግ ዘዴ +UseDiscountAsProduct=እንደ ምርት +UseDiscountAsService=እንደ አገልግሎት +UseDiscountOnTotal=በንዑስ ድምር +MARGIN_METHODE_FOR_DISCOUNT_DETAILS=አለምአቀፍ ቅናሽ እንደ ምርት፣ አገልግሎት ወይም በንዑስ ድምር ለኅዳግ ስሌት ብቻ መያዙን ይገልጻል። +MARGIN_TYPE=ለኅዳግ ስሌት የግዢ/ዋጋ በነባሪነት የተጠቆመ +MargeType1=በምርጥ አቅራቢ ዋጋ ላይ ህዳግ +MargeType2=በክብደት አማካይ ዋጋ (ዋፕ) ላይ ህዳግ +MargeType3=በወጪ ዋጋ ላይ ህዳግ +MarginTypeDesc=* በምርጥ የግዢ ዋጋ ላይ ህዳግ = የመሸጫ ዋጋ - በምርት ካርድ ላይ የተገለጸ ምርጥ የአቅራቢ ዋጋ
* በተመዘነ አማካይ ዋጋ (WAP) = የመሸጫ ዋጋ - የምርት ክብደት አማካኝ ዋጋ (WAP) ወይም ምርጥ የአቅራቢ ዋጋ WAP ገና ካልተገለጸ
* በወጪ ዋጋ ላይ ህዳግ = የመሸጫ ዋጋ - የወጪ ዋጋ በምርት ካርድ ወይም WAP ላይ የዋጋ ዋጋው ካልተገለጸ፣ ወይም ምርጥ የአቅራቢ ዋጋ ከሆነ WAP እስካሁን አልተገለጸም። +CostPrice=የወጪ ዋጋ +UnitCharges=የክፍል ክፍያዎች +Charges=ክፍያዎች +AgentContactType=የንግድ ወኪል የእውቂያ አይነት +AgentContactTypeDetails=በእያንዳንዱ አድራሻ/አድራሻ ለኅዳግ ሪፖርት ምን ዓይነት የእውቂያ ዓይነት (በደረሰኞች ላይ የተገናኘ) ጥቅም ላይ እንደሚውል ይግለጹ። በአብዛኛዎቹ ሁኔታዎች እውቂያው በደረሰኞች ላይ በግልጽ ሊገለጽ ስለማይችል በእውቂያ ላይ የንባብ ስታቲስቲክስ አስተማማኝ እንዳልሆነ ልብ ይበሉ። +rateMustBeNumeric=ተመን የቁጥር እሴት መሆን አለበት። +markRateShouldBeLesserThan100=የማርክ መጠኑ ከ100 በታች መሆን አለበት። +ShowMarginInfos=የኅዳግ መረጃ አሳይ +CheckMargins=የኅዳግ ዝርዝር +MarginPerSaleRepresentativeWarning=የአንድ ተጠቃሚ የህዳግ ሪፖርት የእያንዳንዱን የሽያጭ ተወካይ ህዳግ ለማስላት በሶስተኛ ወገኖች እና በሽያጭ ተወካዮች መካከል ያለውን ግንኙነት ይጠቀማል። አንዳንድ የሶስተኛ ወገኖች የተወሰነ የሽያጭ ተወካይ ላይኖራቸው ስለሚችል እና አንዳንድ ሶስተኛ ወገኖች ከብዙ ጋር ሊገናኙ ስለሚችሉ፣ አንዳንድ መጠኖች በዚህ ሪፖርት ውስጥ ላይካተቱ ይችላሉ (የሽያጭ ተወካይ ከሌለ) እና አንዳንዶቹ በተለያዩ መስመሮች ላይ ሊታዩ ይችላሉ (ለእያንዳንዱ የሽያጭ ተወካይ) . diff --git a/htdocs/langs/am_ET/members.lang b/htdocs/langs/am_ET/members.lang index 5b21ed8e1c6..9844962eb49 100644 --- a/htdocs/langs/am_ET/members.lang +++ b/htdocs/langs/am_ET/members.lang @@ -13,7 +13,7 @@ MembersTickets=የአባልነት አድራሻ ሉህ FundationMembers=የመሠረት አባላት ListOfValidatedPublicMembers=የተረጋገጡ የህዝብ አባላት ዝርዝር ErrorThisMemberIsNotPublic=ይህ አባል ይፋዊ አይደለም። -ErrorMemberIsAlreadyLinkedToThisThirdParty=ሌላ አባል (ስም፦ %s፣ ይግቡ ='notranslate'>
%s) አስቀድሞ ከሦስተኛ ወገን ጋር ተገናኝቷል %s። ሶስተኛ ወገን ከአባል ጋር ብቻ ሊገናኝ ስለማይችል (እና በተገላቢጦሽ) ይህን አገናኝ መጀመሪያ ያስወግዱት። +ErrorMemberIsAlreadyLinkedToThisThirdParty=Another member (name: %s, login: %s) is already linked to a third party %s. Remove this link first because a third party can't be linked to only a member (and vice versa). ErrorUserPermissionAllowsToLinksToItselfOnly=ለደህንነት ሲባል፣ አባልን የአንተ ካልሆነ ተጠቃሚ ጋር ማገናኘት እንድትችል ሁሉንም ተጠቃሚዎች ለማርትዕ ፈቃድ ሊሰጥህ ይገባል። SetLinkToUser=ከ Dolibarr ተጠቃሚ ጋር አገናኝ SetLinkToThirdParty=ወደ Dolibarr ሶስተኛ ወገን አገናኝ diff --git a/htdocs/langs/am_ET/modulebuilder.lang b/htdocs/langs/am_ET/modulebuilder.lang index 54c46265757..883e25d328d 100644 --- a/htdocs/langs/am_ET/modulebuilder.lang +++ b/htdocs/langs/am_ET/modulebuilder.lang @@ -91,10 +91,10 @@ ListOfMenusEntries=የምናሌ ግቤቶች ዝርዝር ListOfDictionariesEntries=የመዝገበ-ቃላት ግቤቶች ዝርዝር ListOfPermissionsDefined=የተገለጹ ፈቃዶች ዝርዝር SeeExamples=ምሳሌዎችን እዚህ ይመልከቱ -EnabledDesc=ይህ መስክ ገቢር ለማድረግ ሁኔታ።

ምሳሌዎች፡

isModEnabled('anothermodule')
getDolGlobalString('MYMODULE_OPTION')==2 +EnabledDesc=Condition to have this field active.

Examples:
1
isModEnabled('anothermodule')
getDolGlobalString('MYMODULE_OPTION')==2 VisibleDesc=ሜዳው ይታያል? (ምሳሌዎች፡- 0=በፍፁም የማይታይ፣ 1=በዝርዝር ውስጥ የሚታይ እና ቅጾችን መፍጠር/ማዘመን/ዕይታ፣ 2=በዝርዝር ላይ ብቻ የሚታይ፣ 3=በፍጠር/ማዘመን/በእይታ ቅጽ ላይ ብቻ (በዝርዝሮች ላይ ያልሆነ)፣ 4=በዝርዝሮች ላይ የሚታየው እና ማዘመን/ዕይታ ቅጽ ብቻ (አይፈጠርም)፣ 5=በዝርዝር ላይ የሚታየው እና ቅጽ ብቻ (አይፈጥርም፣ አይዘምንም)።

አሉታዊ እሴትን መጠቀም ማለት መስክ በነባሪ ዝርዝር ውስጥ አይታይም ነገር ግን ለዕይታ ሊመረጥ ይችላል)። ItCanBeAnExpression=መግለጫ ሊሆን ይችላል። ምሳሌ፡
preg_match('/public/', $_SERVER['PHP_SELF'])?0:1
$user -> መብት አለው ('በዓል'፣ 'በዓልን_መግለፅ')?1፡5 -DisplayOnPdfDesc=ይህንን መስክ በተመጣጣኝ የፒዲኤፍ ሰነዶች ላይ አሳይ፣ ቦታን በ"Position" መስክ ማስተዳደር ይችላሉ።
ለሰነድ፡
0 = አልታየም
1 = ማሳያ
2 = ማሳያ ባዶ ካልሆነ ብቻ ነው

40478ለሰነድ መስመሮች፡

0 = አልታየም
= በአምድ ውስጥ ይታያል
3 = ከመግለጫው በኋላ በመስመር መግለጫ አምድ ላይ አሳይ
4 = ከማብራሪያው በኋላ በመግለጫ አምድ ውስጥ አሳይ ባዶ ካልሆነ ብቻ +DisplayOnPdfDesc=Display this field on compatible PDF documents, you can manage position with "Position" field.
For document :
0 = not displayed
1 = display
2 = display only if not empty

For document lines :
0 = not displayed
1 = displayed in a column
3 = display in line description column after the description
4 = display in description column after the description only if not empty DisplayOnPdf=በፒዲኤፍ ላይ IsAMeasureDesc=አጠቃላይ ወደ ዝርዝር ውስጥ ለመግባት የመስክ ዋጋ ሊጠራቀም ይችላል? (ምሳሌ፡ 1 ወይም 0) SearchAllDesc=መስኩ ከፈጣን መፈለጊያ መሳሪያ ለመፈለግ ጥቅም ላይ ይውላል? (ምሳሌ፡ 1 ወይም 0) @@ -111,7 +111,7 @@ TriggerDefDesc=ከሞጁልዎ ውጪ የሆነ የንግድ ክስተት ሲፈ SeeIDsInUse=በእርስዎ ጭነት ላይ ጥቅም ላይ የዋሉ መታወቂያዎችን ይመልከቱ SeeReservedIDsRangeHere=የተያዙ መታወቂያዎችን ክልል ይመልከቱ ToolkitForDevelopers=ለ Dolibarr ገንቢዎች መሣሪያ ስብስብ -TryToUseTheModuleBuilder=የSQL እና ፒኤችፒ እውቀት ካሎት ቤተኛ ሞጁል ገንቢ ዊዛርድን መጠቀም ይችላሉ።
ሞጁሉን %sእና ='span> በላይኛው ቀኝ ምናሌ ላይ።
ማስጠንቀቂያ፡ ይህ የላቀ የገንቢ ባህሪ ነው፣ b0aee83365837fz<0አይደረግም span class='notranslate'>
በምርት ቦታህ ላይ ሙከራ አድርግ! +TryToUseTheModuleBuilder=If you have knowledge of SQL and PHP, you may use the native module builder wizard.
Enable the module %s and use the wizard by clicking the on the top right menu.
Warning: This is an advanced developer feature, do not experiment on your production site! SeeTopRightMenu=ከላይ በቀኝ ሜኑ ላይ ን ይመልከቱ AddLanguageFile=የቋንቋ ፋይል ያክሉ YouCanUseTranslationKey=በቋንቋ ፋይል ውስጥ የሚገኘውን የትርጉም ቁልፍ የሆነውን ቁልፍ እዚህ መጠቀም ትችላለህ ("ቋንቋዎች" የሚለውን ትር ተመልከት) @@ -148,7 +148,7 @@ CSSListClass=CSS ለዝርዝር NotEditable=ሊስተካከል የማይችል ForeignKey=የውጭ ቁልፍ ForeignKeyDesc=የዚህ መስክ ዋጋ ወደ ሌላ ሠንጠረዥ መኖሩን ማረጋገጥ ካለበት. እዚህ ጋር የሚዛመድ አገባብ ያስገቡ፡ tablename.parentfieldtocheck -TypeOfFieldsHelp=ምሳሌ፡
varchar(99)
email
s ='notranslate'>
ip
url
የይለፍ ቃል
ቀን
datetime
የጊዜ ማህተም
ኢንቲጀር
integer:ClassName:relativepath/to/classfile.class.php[:1[:filter]]b0341 /span>
'1' ማለት መዝገቡን ለመፍጠር ከተጣመሩ በኋላ የ+ አዝራር እንጨምራለን
'filter' is an ሁለንተናዊ የማጣሪያ አገባብ ሁኔታ፡ ለምሳሌ፡ '((ሁኔታ፡=፡1) እና (fk_user==__USER_ID__) እና (ህጋዊ አካል፡ ውስጥ፡(__SHARED_ENTITIES__)))' +TypeOfFieldsHelp=Example:
varchar(99)
email
phone
ip
url
password
double(24,8)
real
text
html
date
datetime
timestamp
integer
integer:ClassName:relativepath/to/classfile.class.php[:1[:filter]]

'1' means we add a + button after the combo to create the record
'filter' is an Universal Filter syntax condition, example: '((status:=:1) AND (fk_user:=:__USER_ID__) AND (entity:IN:(__SHARED_ENTITIES__))' TypeOfFieldsHelpIntro=ይህ የመስክ/የባህሪው አይነት ነው። AsciiToHtmlConverter=Ascii ወደ HTML መቀየሪያ AsciiToPdfConverter=Ascii ወደ ፒዲኤፍ መቀየሪያ @@ -180,7 +180,7 @@ FailedToAddCodeIntoDescriptor=ኮድ ወደ ገላጭ ማከል አልተሳካ DictionariesCreated=መዝገበ ቃላት %s በተሳካ ሁኔታ ተፈጥሯል DictionaryDeleted=መዝገበ ቃላት %s በተሳካ ሁኔታ ተወግዷል PropertyModuleUpdated=ንብረት %s በተሳካ ሁኔታ ተዘምኗል -InfoForApiFile=* ለመጀመሪያ ጊዜ ፋይል ሲያመነጩ ሁሉም ዘዴዎች ይፈጠራሉ ለእያንዳንዱ ነገር።
* ን ጠቅ ሲያደርጉ ሁሉንም ዘዴዎች ያስወግዳል ='notranslate'>
የተመረጠ ነገር። +InfoForApiFile=* When you generate file for the first time then all methods will be created for each object.
* When you click in remove you just remove all methods for the selected object. SetupFile=ለሞጁል ማዋቀር ገጽ EmailingSelectors=Emails selectors EmailingSelectorDesc=ለጅምላ ኢሜል መላላኪያ ሞጁል አዲስ የኢሜል ኢላማ መራጮችን ለማቅረብ የክፍል ፋይሎችን እዚህ ማመንጨት እና ማርትዕ ይችላሉ። diff --git a/htdocs/langs/am_ET/mrp.lang b/htdocs/langs/am_ET/mrp.lang index 74bed0d9186..34f82751c95 100644 --- a/htdocs/langs/am_ET/mrp.lang +++ b/htdocs/langs/am_ET/mrp.lang @@ -1,109 +1,138 @@ -Mrp=Manufacturing Orders -MOs=Manufacturing orders -ManufacturingOrder=Manufacturing Order -MRPDescription=Module to manage production and Manufacturing Orders (MO). -MRPArea=MRP Area -MrpSetupPage=Setup of module MRP -MenuBOM=Bills of material -LatestBOMModified=Latest %s Bills of materials modified -LatestMOModified=Latest %s Manufacturing Orders modified -Bom=Bills of Material -BillOfMaterials=Bill of Materials -BillOfMaterialsLines=Bill of Materials lines -BOMsSetup=Setup of module BOM -ListOfBOMs=List of bills of material - BOM -ListOfManufacturingOrders=List of Manufacturing Orders -NewBOM=New bill of materials -ProductBOMHelp=Product to create (or disassemble) with this BOM.
Note: Products with the property 'Nature of product' = 'Raw material' are not visible into this list. -BOMsNumberingModules=BOM numbering templates -BOMsModelModule=BOM document templates -MOsNumberingModules=MO numbering templates -MOsModelModule=MO document templates -FreeLegalTextOnBOMs=Free text on document of BOM -WatermarkOnDraftBOMs=Watermark on draft BOM -FreeLegalTextOnMOs=Free text on document of MO -WatermarkOnDraftMOs=Watermark on draft MO -ConfirmCloneBillOfMaterials=Are you sure you want to clone the bill of materials %s ? -ConfirmCloneMo=Are you sure you want to clone the Manufacturing Order %s ? -ManufacturingEfficiency=Manufacturing efficiency -ConsumptionEfficiency=Consumption efficiency -ValueOfMeansLoss=Value of 0.95 means an average of 5%% of loss during the manufacturing or the disassembly -ValueOfMeansLossForProductProduced=Value of 0.95 means an average of 5%% of loss of produced product -DeleteBillOfMaterials=Delete Bill Of Materials -DeleteMo=Delete Manufacturing Order -ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials? -ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order? -MenuMRP=Manufacturing Orders -NewMO=New Manufacturing Order -QtyToProduce=Qty to produce -DateStartPlannedMo=Date start planned -DateEndPlannedMo=Date end planned -KeepEmptyForAsap=Empty means 'As Soon As Possible' -EstimatedDuration=Estimated duration -EstimatedDurationDesc=Estimated duration to manufacture (or disassemble) this product using this BOM +Mrp=የማምረት ትዕዛዞች +MOs=የማምረት ትዕዛዞች +ManufacturingOrder=የማምረት ትዕዛዝ +MRPDescription=የምርት እና የማምረቻ ትዕዛዞችን (MO) ለማስተዳደር ሞጁል። +MRPArea=MRP አካባቢ +MrpSetupPage=ሞጁል MRP ማዋቀር +MenuBOM=የቁሳቁስ ሂሳቦች +LatestBOMModified=የቅርብ ጊዜ %s የቁሳቁስ ሂሳቦች ተስተካክለዋል +LatestMOModified=የቅርብ ጊዜ %s የማምረቻ ትዕዛዞች ተሻሽለዋል +Bom=የቁሳቁስ ሂሳቦች +BillOfMaterials=የቁሳቁሶች ቢል +BillOfMaterialsLines=ቢል ኦፍ ማቴሪያሎች መስመሮች +BOMsSetup=ሞጁል BOM ማዋቀር +ListOfBOMs=የፍጆታ ሂሳቦች - BOM +ListOfManufacturingOrders=የማምረት ትዕዛዞች +NewBOM=አዲስ የቁሳቁስ ሂሳብ +ProductBOMHelp=በዚህ BOM ለመፍጠር (ወይም ለመበተን) ምርት።
ማስታወሻ፡ 'የምርት ተፈጥሮ' = 'ጥሬ ዕቃ' ንብረቱ ያላቸው ምርቶች በዚህ ዝርዝር ውስጥ አይታዩም። +BOMsNumberingModules=BOM የቁጥር አብነቶች +BOMsModelModule=BOM ሰነድ አብነቶች +MOsNumberingModules=MO የቁጥር አብነቶች +MOsModelModule=MO ሰነድ አብነቶች +FreeLegalTextOnBOMs=በBOM ሰነድ ላይ ነፃ ጽሑፍ +WatermarkOnDraftBOMs=በረቂቅ BOM ላይ የውሃ ምልክት +FreeLegalTextOnMOs=በ MO ሰነድ ላይ ነፃ ጽሑፍ +WatermarkOnDraftMOs=በረቂቅ MO ላይ የውሃ ምልክት +ConfirmCloneBillOfMaterials=እርግጠኛ ነህ የቁሳቁስ ሂሳብ መጠየቂያውን %s ? +ConfirmCloneMo=እርግጠኛ ነህ የማኑፋክቸሪንግ ትዕዛዙን %s መዝጋት ትፈልጋለህ? +ManufacturingEfficiency=የማምረት ውጤታማነት +ConsumptionEfficiency=የፍጆታ ቅልጥፍና +Consumption=ፍጆታ +ValueOfMeansLoss=የ0.95 ዋጋ በአማካይ 5%%በማምረቻው ወይም በሚፈታበት ጊዜ የጠፋ ኪሳራ ማለት ነው። +ValueOfMeansLossForProductProduced=የ0.95 ዋጋ በአማካይ 5%%የተመረተ ምርት ማጣት ማለት ነው። +DeleteBillOfMaterials=የቁሳቁስ ሂሳብን ሰርዝ +CancelMo=የማምረት ትዕዛዝ ሰርዝ +MoCancelConsumedAndProducedLines=እንዲሁም ሁሉንም የተበላሹ እና የተሰሩ መስመሮችን ይሰርዙ (መስመሮችን እና የመመለሻ አክሲዮኖችን ይሰርዙ) +ConfirmCancelMo=እርግጠኛ ነዎት ይህን የማምረቻ ትእዛዝ መሰረዝ ይፈልጋሉ? +DeleteMo=የማምረት ትዕዛዝ ሰርዝ +ConfirmDeleteBillOfMaterials=እርግጠኛ ነዎት ይህን የቢል ኦፍ ማቴሪያሎች መሰረዝ ይፈልጋሉ? +ConfirmDeleteMo=እርግጠኛ ነዎት ይህን የማምረቻ ትዕዛዝ መሰረዝ ይፈልጋሉ? +DeleteMoChild = ከዚህ MO ጋር የተገናኘውን ልጅ MOs ሰርዝ %s +MoChildsDeleted = ሁሉም የልጅ MOs ተሰርዘዋል +MenuMRP=የማምረት ትዕዛዞች +NewMO=አዲስ የማምረቻ ትእዛዝ +QtyToProduce=ለማምረት Qty +DateStartPlannedMo=የሚጀመርበት ቀን ታቅዷል +DateEndPlannedMo=የሚያበቃበት ቀን ታቅዷል +KeepEmptyForAsap=ባዶ ማለት 'እንደ በተቻለ ፍጥነት' ማለት ነው +EstimatedDuration=የሚገመተው ቆይታ +EstimatedDurationDesc=ይህን BOM በመጠቀም ይህን ምርት ለማምረት (ወይም ለመበተን) የሚገመተው የቆይታ ጊዜ ConfirmValidateBom=Are you sure you want to validate the BOM with the reference %s (you will be able to use it to build new Manufacturing Orders) -ConfirmCloseBom=Are you sure you want to cancel this BOM (you won't be able to use it to build new Manufacturing Orders anymore) ? -ConfirmReopenBom=Are you sure you want to re-open this BOM (you will be able to use it to build new Manufacturing Orders) -StatusMOProduced=Produced -QtyFrozen=Frozen Qty -QuantityFrozen=Frozen Quantity -QuantityConsumedInvariable=When this flag is set, the quantity consumed is always the value defined and is not relative to the quantity produced. -DisableStockChange=Stock change disabled -DisableStockChangeHelp=When this flag is set, there is no stock change on this product, whatever is the quantity consumed -BomAndBomLines=Bills Of Material and lines -BOMLine=Line of BOM -WarehouseForProduction=Warehouse for production -CreateMO=Create MO -ToConsume=To consume -ToProduce=To produce -ToObtain=To obtain -QtyAlreadyConsumed=Qty already consumed -QtyAlreadyProduced=Qty already produced -QtyRequiredIfNoLoss=Qty required if there is no loss (Manufacturing efficiency is 100%%) -ConsumeOrProduce=Consume or Produce -ConsumeAndProduceAll=Consume and Produce All -Manufactured=Manufactured -TheProductXIsAlreadyTheProductToProduce=The product to add is already the product to produce. -ForAQuantityOf=For a quantity to produce of %s -ForAQuantityToConsumeOf=For a quantity to disassemble of %s -ConfirmValidateMo=Are you sure you want to validate this Manufacturing Order? -ConfirmProductionDesc=By clicking on '%s', you will validate the consumption and/or production for the quantities set. This will also update the stock and record stock movements. -ProductionForRef=Production of %s -AutoCloseMO=Close automatically the Manufacturing Order if quantities to consume and to produce are reached -NoStockChangeOnServices=No stock change on services -ProductQtyToConsumeByMO=Product quantity still to consume by open MO -ProductQtyToProduceByMO=Product quantity still to produce by open MO -AddNewConsumeLines=Add new line to consume -AddNewProduceLines=Add new line to produce -ProductsToConsume=Products to consume -ProductsToProduce=Products to produce -UnitCost=Unit cost -TotalCost=Total cost -BOMTotalCost=The cost to produce this BOM based on cost of each quantity and product to consume (use Cost price if defined, else Average Weighted Price if defined, else the Best purchase price) -GoOnTabProductionToProduceFirst=You must first have started the production to close a Manufacturing Order (See tab '%s'). But you can Cancel it. -ErrorAVirtualProductCantBeUsedIntoABomOrMo=A kit can't be used into a BOM or a MO -Workstation=Workstation -Workstations=Workstations -WorkstationsDescription=Workstations management -WorkstationSetup = Workstations setup -WorkstationSetupPage = Workstations setup page -WorkstationList=Workstation list -WorkstationCreate=Add new workstation -ConfirmEnableWorkstation=Are you sure you want to enable workstation %s ? -EnableAWorkstation=Enable a workstation -ConfirmDisableWorkstation=Are you sure you want to disable workstation %s ? -DisableAWorkstation=Disable a workstation -DeleteWorkstation=Delete -NbOperatorsRequired=Number of operators required -THMOperatorEstimated=Estimated operator THM -THMMachineEstimated=Estimated machine THM -WorkstationType=Workstation type -Human=Human -Machine=Machine -HumanMachine=Human / Machine -WorkstationArea=Workstation area -Machines=Machines -THMEstimatedHelp=This rate makes it possible to define a forecast cost of the item -BOM=Bill Of Materials -CollapseBOMHelp=You can define the default display of the details of the nomenclature in the configuration of the BOM module -MOAndLines=Manufacturing Orders and lines +ConfirmCloseBom=እርግጠኛ ነዎት ይህን BOM መሰረዝ ይፈልጋሉ (ከአሁን በኋላ አዲስ የማምረቻ ትዕዛዞችን ለመገንባት ሊጠቀሙበት አይችሉም)? +ConfirmReopenBom=እርግጠኛ ነዎት ይህን BOM እንደገና መክፈት ይፈልጋሉ (አዲስ የማምረቻ ትዕዛዞችን ለመገንባት ሊጠቀሙበት ይችላሉ) +StatusMOProduced=ተመረተ +QtyFrozen=የቀዘቀዘ Qty +QuantityFrozen=የቀዘቀዘ ብዛት +QuantityConsumedInvariable=ይህ ባንዲራ ሲዋቀር፣ የሚበላው መጠን ሁልጊዜ የሚገለፀው እሴት ነው እና ከተመረተው መጠን ጋር አንጻራዊ አይደለም። +DisableStockChange=የአክሲዮን ለውጥ ተሰናክሏል። +DisableStockChangeHelp=ይህ ባንዲራ ሲዋቀር በዚህ ምርት ላይ ምንም አይነት የአክሲዮን ለውጥ የለም፣ የሚበላው ብዛት ምንም ይሁን +BomAndBomLines=የቁሳቁስ እና የመስመሮች ሂሳቦች +BOMLine=የ BOM መስመር +WarehouseForProduction=ለማምረት መጋዘን +CreateMO=MO ፍጠር +ToConsume=ለመመገብ +ToProduce=ለማምረት +ToObtain=ለማግኘት +QtyAlreadyConsumed=Qty አስቀድሞ ተበላ +QtyAlreadyProduced=Qty አስቀድሞ ተመርቷል። +QtyAlreadyConsumedShort=ብዛት ተበላ +QtyAlreadyProducedShort=Qty ተመረተ +QtyRequiredIfNoLoss=ምንም ኪሳራ ከሌለ (የማምረቻው ቅልጥፍና 100%% ከሆነ) ወደ BOM የተገለጸውን መጠን ለማምረት Qty ያስፈልጋል። +ConsumeOrProduce=መብላት ወይም ማምረት +ConsumeAndProduceAll=ሁሉንም መብላት እና ማምረት +Manufactured=ተመረተ +TheProductXIsAlreadyTheProductToProduce=የሚጨመርበት ምርት ቀድሞውኑ የሚመረተው ምርት ነው። +ForAQuantityOf=የ%s በብዛት ለማምረት +ForAQuantityToConsumeOf=የ%s ለመበተን መጠን +ConfirmValidateMo=እርግጠኛ ነዎት ይህን የማምረቻ ትዕዛዝ ማረጋገጥ ይፈልጋሉ? +ConfirmProductionDesc='%s' ላይ ጠቅ በማድረግ ለተቀመጡት መጠኖች ፍጆታ እና/ወይም ምርት ያረጋግጣሉ። ይህ የአክሲዮን ማዘመን እና የአክሲዮን እንቅስቃሴዎችን ይመዘግባል። +ProductionForRef=የ%s ምርት +CancelProductionForRef=የምርት ክምችት መቀነስ መሰረዝ ለምርት %s +TooltipDeleteAndRevertStockMovement=መስመርን ሰርዝ እና የአክሲዮን እንቅስቃሴን አድህር +AutoCloseMO=የሚፈጀው እና የሚያመርተው መጠን ከደረሰ የማምረቻውን ትዕዛዝ በራስ ሰር ዝጋ +NoStockChangeOnServices=በአገልግሎቶች ላይ ምንም የአክሲዮን ለውጥ የለም። +ProductQtyToConsumeByMO=በክፍት MO የሚበላው የምርት ብዛት +ProductQtyToProduceByMO=በክፍት MO የሚመረተው የምርት ብዛት +AddNewConsumeLines=ለመጠቀም አዲስ መስመር ያክሉ +AddNewProduceLines=ለማምረት አዲስ መስመር ያክሉ +ProductsToConsume=የሚበሉ ምርቶች +ProductsToProduce=ለማምረት ምርቶች +UnitCost=የክፍል ዋጋ +TotalCost=ጠቅላላ ወጪ +BOMTotalCost=ይህንን BOM ለማምረት በእያንዳንዱ መጠን እና በሚፈጀው ምርት ላይ የተመሰረተ ወጪ (የዋጋውን ዋጋ ከተገለጸ፣ ካልሆነ አማካይ የተመዘነ ዋጋ ከተገለጸ፣ አለበለዚያ ምርጡ የግዢ ዋጋ) +BOMTotalCostService="የመስሪያ ጣቢያ" ሞጁል ገቢር ከሆነ እና አንድ የስራ ቦታ በመስመሩ ላይ በነባሪነት ከተገለጸ, ስሌቱ "ብዛት (ወደ ሰአታት የተቀየረ) x የስራ ቦታ ahr" ነው, አለበለዚያ "የአገልግሎቱ ዋጋ x ብዛት" ነው. +GoOnTabProductionToProduceFirst=የማምረቻ ትእዛዝን ለመዝጋት መጀመሪያ ምርቱን መጀመር አለብህ (ትሩን '%s' ተመልከት)። ግን መሰረዝ ይችላሉ። +ErrorAVirtualProductCantBeUsedIntoABomOrMo=ኪት በBOM ወይም MO ውስጥ መጠቀም አይቻልም +Workstation=የስራ ቦታ +Workstations=የስራ ጣቢያዎች +WorkstationsDescription=የሥራ ቦታዎች አስተዳደር +WorkstationSetup = የስራ ጣቢያዎች ማዋቀር +WorkstationSetupPage = የሥራ ቦታዎች ማዋቀር ገጽ +WorkstationList=የስራ ቦታ ዝርዝር +WorkstationCreate=አዲስ የስራ ቦታ ያክሉ +ConfirmEnableWorkstation=እርግጠኛ ነዎት የስራ ቦታ %sን ማንቃት ይፈልጋሉ? +EnableAWorkstation=የስራ ቦታን አንቃ +ConfirmDisableWorkstation=እርግጠኛ ነዎት የስራ ቦታ %sን ማሰናከል ይፈልጋሉ? +DisableAWorkstation=የስራ ቦታን አሰናክል +DeleteWorkstation=ሰርዝ +NbOperatorsRequired=የሚፈለጉ የኦፕሬተሮች ብዛት +THMOperatorEstimated=የተገመተው ኦፕሬተር THM +THMMachineEstimated=የተገመተው ማሽን THM +WorkstationType=የስራ ቦታ አይነት +DefaultWorkstation=ነባሪ የስራ ቦታ +Human=ሰው +Machine=ማሽን +HumanMachine=የሰው / ማሽን +WorkstationArea=የስራ ቦታ +Machines=ማሽኖች +THMEstimatedHelp=ይህ ተመን የእቃውን ትንበያ ዋጋ ለመወሰን ያስችላል +BOM=የቁሳቁሶች ቢል +CollapseBOMHelp=በ BOM ሞጁል ውቅር ውስጥ የስም ዝርዝሮችን ነባሪ ማሳያ መግለጽ ይችላሉ። +MOAndLines=የማምረት ትዕዛዞች እና መስመሮች +MoChildGenerate=ልጅ ሞ ፍጠር +ParentMo=MO ወላጅ +MOChild=MO ልጅ +BomCantAddChildBom=ስያሜው %s ወደ ስያሜው በሚወስደው ዛፍ ላይ አስቀድሞ አለ %s +BOMNetNeeds = BOM የተጣራ ፍላጎቶች +BOMProductsList=የ BOM ምርቶች +BOMServicesList=የ BOM አገልግሎቶች +Manufacturing=ማምረት +Disassemble=መበተን +ProducedBy=የተሰራው በ +QtyTot=ብዛት ጠቅላላ + +QtyCantBeSplit= ብዛት ሊከፋፈል አይችልም። +NoRemainQtyToDispatch=ለመከፋፈል የሚቀረው ምንም መጠን የለም። + +THMOperatorEstimatedHelp=የሚገመተው የኦፕሬተር ዋጋ በሰዓት። ይህንን የስራ ቦታ በመጠቀም የBOM ወጪን ለመገመት ስራ ላይ ይውላል። +THMMachineEstimatedHelp=የሚገመተው የማሽን ዋጋ በሰዓት። ይህንን የስራ ቦታ በመጠቀም የBOM ወጪን ለመገመት ስራ ላይ ይውላል። diff --git a/htdocs/langs/am_ET/multicurrency.lang b/htdocs/langs/am_ET/multicurrency.lang index d59783d23ed..66b8b4fc86e 100644 --- a/htdocs/langs/am_ET/multicurrency.lang +++ b/htdocs/langs/am_ET/multicurrency.lang @@ -7,12 +7,12 @@ multicurrency_syncronize_error=የማመሳሰል ስህተት፡ %s MULTICURRENCY_USE_RATE_ON_DOCUMENT_DATE=የቅርብ ጊዜውን የታወቀ መጠን ከመጠቀም ይልቅ የምንዛሬ ተመንን ለማግኘት የሰነዱን ቀን ይጠቀሙ multicurrency_useOriginTx=አንድ ነገር ከሌላው ሲፈጠር ዋናውን መጠን ከምንጩ ነገር ያቆዩት (አለበለዚያ የቅርብ ጊዜውን የታወቀ መጠን ይጠቀሙ) CurrencyLayerAccount=CurrencyLayer API -CurrencyLayerAccount_help_to_synchronize=ይህንን ተግባር ለመጠቀም በድር ጣቢያ %s ላይ መለያ መፍጠር አለቦት።
የእርስዎን b0aee83365837 /span>ኤፒአይ ቁልፍ

ነጻ መለያ ከተጠቀሙ የምንጭ ምንዛሬ (በነባሪ የአሜሪካ ዶላር)
የእርስዎ ዋና ገንዘብ ከሆነ የአሜሪካ ዶላር አይደለም አፕሊኬሽኑ በራስ ሰር እንደገና ይሰላል።

እርስዎ በወር 1000 ማመሳሰል ተወስነዋል። +CurrencyLayerAccount_help_to_synchronize=You must create an account on website %s to use this functionality.
Get your API key.
If you use a free account, you can't change the source currency (USD by default).
If your main currency is not USD, the application will automatically recalculate it.

You are limited to 1000 synchronizations per month. multicurrency_appId=የኤፒአይ ቁልፍ multicurrency_appCurrencySource=ምንጭ ምንዛሬ multicurrency_alternateCurrencySource=ተለዋጭ ምንጭ ምንዛሬ CurrenciesUsed=ጥቅም ላይ የዋሉ ምንዛሬዎች -CurrenciesUsed_help_to_add=በእርስዎ proposals, b60838 /span>ትዕዛዝ ወዘተ። +CurrenciesUsed_help_to_add=Add the different currencies and rates you need to use on your proposals, orders etc. rate=ደረጃ MulticurrencyReceived=ተቀብሏል፣ ኦሪጅናል ምንዛሬ MulticurrencyRemainderToTake=የቀረው መጠን፣ የመጀመሪያው ምንዛሬ diff --git a/htdocs/langs/am_ET/opensurvey.lang b/htdocs/langs/am_ET/opensurvey.lang index 9fafacaf8bf..e5ea9acdc92 100644 --- a/htdocs/langs/am_ET/opensurvey.lang +++ b/htdocs/langs/am_ET/opensurvey.lang @@ -1,63 +1,64 @@ # Dolibarr language file - Source file is en_US - opensurvey -Survey=Poll -Surveys=Polls -OrganizeYourMeetingEasily=Organize your meetings and polls easily. First select the type of poll... -NewSurvey=New poll -OpenSurveyArea=Polls area -AddACommentForPoll=You can add a comment into poll... -AddComment=Add comment -CreatePoll=Create poll -PollTitle=Poll title -ToReceiveEMailForEachVote=Receive an email for each vote -TypeDate=Type date -TypeClassic=Type standard -OpenSurveyStep2=Select your dates among the free days (grey). The selected days are green. You can unselect a day previously selected by clicking again on it -RemoveAllDays=Remove all days -CopyHoursOfFirstDay=Copy hours of first day -RemoveAllHours=Remove all hours -SelectedDays=Selected days -TheBestChoice=The best choice currently is -TheBestChoices=The best choices currently are -with=with -OpenSurveyHowTo=If you agree to vote in this poll, you have to give your name, choose the values that fit best for you and validate with the plus button at the end of the line. -CommentsOfVoters=Comments of voters -ConfirmRemovalOfPoll=Are you sure you want to remove this poll (and all votes) -RemovePoll=Remove poll -UrlForSurvey=URL to communicate to get a direct access to poll -PollOnChoice=You are creating a poll to make a multi-choice for a poll. First enter all possible choices for your poll: -CreateSurveyDate=Create a date poll -CreateSurveyStandard=Create a standard poll -CheckBox=Simple checkbox -YesNoList=List (empty/yes/no) -PourContreList=List (empty/for/against) -AddNewColumn=Add new column -TitleChoice=Choice label -ExportSpreadsheet=Export result spreadsheet -ExpireDate=Limit date -NbOfSurveys=Number of polls -NbOfVoters=No. of voters -SurveyResults=Results -PollAdminDesc=You are allowed to change all vote lines of this poll with button "Edit". You can, as well, remove a column or a line with %s. You can also add a new column with %s. -5MoreChoices=5 more choices -Against=Against -YouAreInivitedToVote=You are invited to vote for this poll -VoteNameAlreadyExists=This name was already used for this poll -AddADate=Add a date -AddStartHour=Add start hour -AddEndHour=Add end hour -votes=vote(s) -NoCommentYet=No comments have been posted for this poll yet -CanComment=Voters can comment in the poll -YourVoteIsPrivate=This poll is private, nobody can see your vote. -YourVoteIsPublic=This poll is public, anybody with the link can see your vote. -CanSeeOthersVote=Voters can see other people's vote -SelectDayDesc=For each selected day, you can choose, or not, meeting hours in the following format:
- empty,
- "8h", "8H" or "8:00" to give a meeting's start hour,
- "8-11", "8h-11h", "8H-11H" or "8:00-11:00" to give a meeting's start and end hour,
- "8h15-11h15", "8H15-11H15" or "8:15-11:15" for the same thing but with minutes. -BackToCurrentMonth=Back to current month -ErrorOpenSurveyFillFirstSection=You haven't filled the first section of the poll creation -ErrorOpenSurveyOneChoice=Enter at least one choice -ErrorInsertingComment=There was an error while inserting your comment -MoreChoices=Enter more choices for the voters -SurveyExpiredInfo=The poll has been closed or voting delay has expired. -EmailSomeoneVoted=%s has filled a line.\nYou can find your poll at the link: \n%s -ShowSurvey=Show survey -UserMustBeSameThanUserUsedToVote=You must have voted and use the same user name that the one used to vote, to post a comment +Survey=የሕዝብ አስተያየት +Surveys=የሕዝብ አስተያየት መስጫዎች +OrganizeYourMeetingEasily=ስብሰባዎችዎን እና ምርጫዎችዎን በቀላሉ ያደራጁ። መጀመሪያ የምርጫውን አይነት ይምረጡ... +NewSurvey=አዲስ የሕዝብ አስተያየት +OpenSurveyArea=የምርጫ ክልል +AddACommentForPoll=በምርጫ አስተያየት ላይ አስተያየት ማከል ትችላለህ... +AddComment=አስተያየት ጨምር +CreatePoll=የሕዝብ አስተያየት ይፍጠሩ +PollTitle=የሕዝብ አስተያየት ርዕስ +ToReceiveEMailForEachVote=ለእያንዳንዱ ድምጽ ኢሜይል ይቀበሉ +TypeDate=ቀን ይተይቡ +TypeClassic=መደበኛ ይተይቡ +OpenSurveyStep2=ከነጻዎቹ ቀናት (ግራጫ) መካከል የእርስዎን ቀኖች ይምረጡ። የተመረጡት ቀናት አረንጓዴ ናቸው. እንደገና ጠቅ በማድረግ ከዚህ ቀደም የተመረጠውን ቀን መምረጥ ይችላሉ። +RemoveAllDays=ሁሉንም ቀናት አስወግድ +CopyHoursOfFirstDay=የመጀመሪያ ቀን ሰዓቶችን ይቅዱ +RemoveAllHours=ሁሉንም ሰዓቶች አስወግድ +SelectedDays=የተመረጡ ቀናት +TheBestChoice=በአሁኑ ጊዜ በጣም ጥሩው ምርጫ ነው። +TheBestChoices=በአሁኑ ጊዜ ምርጥ ምርጫዎች ናቸው +with=ጋር +OpenSurveyHowTo=በዚህ የሕዝብ አስተያየት ላይ ድምጽ ለመስጠት ከተስማሙ ስምዎን መስጠት አለብዎት, ለእርስዎ በጣም ተስማሚ የሆኑትን እሴቶች ይምረጡ እና በመስመሩ መጨረሻ ላይ ባለው የመደመር ቁልፍ ያረጋግጡ. +CommentsOfVoters=የመራጮች አስተያየት +ConfirmRemovalOfPoll=ይህን የሕዝብ አስተያየት (እና ሁሉንም ድምጾች) ማስወገድ እንደሚፈልጉ እርግጠኛ ነዎት +RemovePoll=የሕዝብ አስተያየትን ያስወግዱ +UrlForSurvey=የሕዝብ አስተያየትን በቀጥታ ለማግኘት ዩአርኤል ለመገናኘት +PollOnChoice=ለምርጫ ብዙ ምርጫ ለማድረግ ድምጽ እየፈጠሩ ነው። በመጀመሪያ ለድምጽ መስጫዎ ሊሆኑ የሚችሉ አማራጮችን ሁሉ ያስገቡ፡- +CreateSurveyDate=የቀን አስተያየት ይፍጠሩ +CreateSurveyStandard=መደበኛ የሕዝብ አስተያየት ይፍጠሩ +CheckBox=ቀላል አመልካች ሳጥን +YesNoList=ዝርዝር (ባዶ/አዎ/አይ) +PourContreList=ዝርዝር (ባዶ/ለ/ተቃውሞ) +AddNewColumn=አዲስ አምድ ጨምር +TitleChoice=የምርጫ መለያ +ExportSpreadsheet=የውጤት ተመን ሉህ ወደ ውጪ ላክ +ExpireDate=ቀን ገደብ +NbOfSurveys=የምርጫዎች ብዛት +NbOfVoters=የመራጮች ቁጥር +SurveyResults=ውጤቶች +PollAdminDesc=የዚህን የሕዝብ አስተያየት መስጫ መስመሮች በ"አርትዕ" ቁልፍ እንድትቀይሩ ተፈቅዶልሃል። እንዲሁም አንድ አምድ ወይም መስመር በ%s ማስወገድ ትችላለህ። እንዲሁም በ%s አዲስ አምድ ማከል ትችላለህ። +5MoreChoices=5 ተጨማሪ ምርጫዎች +Against=በመቃወም +YouAreInivitedToVote=ለዚህ የሕዝብ አስተያየት ድምጽ እንዲሰጡ ተጋብዘዋል +VoteNameAlreadyExists=ይህ ስም አስቀድሞ ለዚህ የሕዝብ አስተያየት ጥቅም ላይ ውሏል +AddADate=ቀን ጨምር +AddStartHour=የመጀመሪያ ሰዓት ጨምር +AddEndHour=የመጨረሻ ሰዓት ጨምር +votes=ድምጽ(ዎች) +NoCommentYet=ለዚህ የሕዝብ አስተያየት እስካሁን ምንም አስተያየት አልተለጠፈም። +CanComment=በምርጫው ላይ መራጮች አስተያየት መስጠት ይችላሉ። +YourVoteIsPrivate=ይህ የሕዝብ አስተያየት የግል ነው፣ ማንም የእርስዎን ድምጽ ማየት አይችልም። +YourVoteIsPublic=ይህ የሕዝብ አስተያየት የሕዝብ ነው፣ ማንኛውም አገናኙ ያለው ሰው የእርስዎን ድምጽ ማየት ይችላል። +CanSeeOthersVote=መራጮች የሌሎች ሰዎችን ድምጽ ማየት ይችላሉ። +SelectDayDesc=ለእያንዳንዱ የተመረጠ ቀን፣ የስብሰባ ሰአቶችን በሚከተለው ቅርጸት መምረጥ ወይም አለመምረጥ ትችላለህ፡
- ባዶ፣
- " 8 ሰ፣ "8H" ወይም "8:00" የስብሰባ መጀመሪያ ሰዓት ለመስጠት፣
- "8-11"፣ "8h-11h", "8H-11H" ወይም "8:00-11:00" የስብሰባ መጀመሪያ እና የመጨረሻ ሰዓት ለመስጠት፣
- "8h15-11h15"፣ "8H15-11H15" ወይም "8:15- 11፡15" ለተመሳሳይ ነገር ግን በደቂቃዎች። +BackToCurrentMonth=ወደ የአሁኑ ወር ተመለስ +ErrorOpenSurveyFillFirstSection=የምርጫውን መጀመሪያ ክፍል አልሞሉም። +ErrorOpenSurveyOneChoice=ቢያንስ አንድ ምርጫ ያስገቡ +ErrorInsertingComment=አስተያየትዎን በማስገባት ላይ ስህተት ነበር። +MoreChoices=ለመራጮች ተጨማሪ ምርጫዎችን ያስገቡ +SurveyExpiredInfo=የሕዝብ አስተያየት መስጫው ተዘግቷል ወይም የድምጽ አሰጣጥ መዘግየት ጊዜው አልፎበታል። +EmailSomeoneVoted=%s መስመር ሞልቷል።\nአስተያየትዎን በአገናኙ ላይ ማግኘት ይችላሉ፡-\n%s +ShowSurvey=የዳሰሳ ጥናት አሳይ +UserMustBeSameThanUserUsedToVote=አስተያየት ለመለጠፍ ድምጽ የሰጡበት እና ድምጽ ለመስጠት የተጠቀሙበትን የተጠቃሚ ስም መጠቀም አለብዎት +ListOfOpenSurveys=ክፍት የዳሰሳ ጥናቶች ዝርዝር diff --git a/htdocs/langs/am_ET/orders.lang b/htdocs/langs/am_ET/orders.lang index 1933d8dbeda..789c7b0088d 100644 --- a/htdocs/langs/am_ET/orders.lang +++ b/htdocs/langs/am_ET/orders.lang @@ -103,10 +103,10 @@ disablelinefree=ነፃ መስመሮች የሉም CloseOrder=ትእዛዝ ዝጋ ConfirmCloseOrder=እርግጠኛ ነዎት ይህን ትዕዛዝ እንዲደርስ ማዋቀር ይፈልጋሉ? አንዴ ትእዛዝ ከደረሰ፣ እንዲከፍል ሊዋቀር ይችላል። ConfirmDeleteOrder=እርግጠኛ ነዎት ይህን ትዕዛዝ መሰረዝ ይፈልጋሉ? -ConfirmValidateOrder=እርግጠኛ ነህ ይህን ትዕዛዝ በስም %s ? +ConfirmValidateOrder=Are you sure you want to validate this order under name %s? ConfirmUnvalidateOrder=እርግጠኛ ነህ %s ሁኔታን ወደ ረቂቅ ሁኔታ መመለስ ትፈልጋለህ? ? ConfirmCancelOrder=እርግጠኛ ነዎት ይህን ትዕዛዝ መሰረዝ ይፈልጋሉ? -ConfirmMakeOrder=እርግጠኛ ነዎት ይህንን ትዕዛዝ በ%s ላይ ማረጋገጥ ትፈልጋለህ። >? +ConfirmMakeOrder=Are you sure you want to confirm you made this order on %s? GenerateBill=የክፍያ መጠየቂያ ማመንጨት ClassifyShipped=ደርሷል PassedInShippedStatus=ተመድቧል diff --git a/htdocs/langs/am_ET/other.lang b/htdocs/langs/am_ET/other.lang index 49ff93dd589..1a5778132d0 100644 --- a/htdocs/langs/am_ET/other.lang +++ b/htdocs/langs/am_ET/other.lang @@ -1,305 +1,340 @@ # Dolibarr language file - Source file is en_US - other -SecurityCode=Security code +SecurityCode=የሚስጥር መለያ ቁጥር NumberingShort=N° -Tools=Tools -TMenuTools=Tools -ToolsDesc=All tools not included in other menu entries are grouped here.
All the tools can be accessed via the left menu. -Birthday=Birthday -BirthdayAlertOn=birthday alert active -BirthdayAlertOff=birthday alert inactive -TransKey=Translation of the key TransKey -MonthOfInvoice=Month (number 1-12) of invoice date -TextMonthOfInvoice=Month (text) of invoice date -PreviousMonthOfInvoice=Previous month (number 1-12) of invoice date -TextPreviousMonthOfInvoice=Previous month (text) of invoice date -NextMonthOfInvoice=Following month (number 1-12) of invoice date -TextNextMonthOfInvoice=Following month (text) of invoice date -PreviousMonth=Previous month -CurrentMonth=Current month -ZipFileGeneratedInto=Zip file generated into %s. -DocFileGeneratedInto=Doc file generated into %s. -JumpToLogin=Disconnected. Go to login page... -MessageForm=Message on online payment form -MessageOK=Message on the return page for a validated payment -MessageKO=Message on the return page for a canceled payment -ContentOfDirectoryIsNotEmpty=Content of this directory is not empty. -DeleteAlsoContentRecursively=Check to delete all content recursively -PoweredBy=Powered by -YearOfInvoice=Year of invoice date -PreviousYearOfInvoice=Previous year of invoice date -NextYearOfInvoice=Following year of invoice date -DateNextInvoiceBeforeGen=Date of next invoice (before generation) -DateNextInvoiceAfterGen=Date of next invoice (after generation) -GraphInBarsAreLimitedToNMeasures=Grapics are limited to %s measures in 'Bars' mode. The mode 'Lines' was automatically selected instead. -OnlyOneFieldForXAxisIsPossible=Only 1 field is currently possible as X-Axis. Only the first selected field has been selected. -AtLeastOneMeasureIsRequired=At least 1 field for measure is required -AtLeastOneXAxisIsRequired=At least 1 field for X-Axis is required -LatestBlogPosts=Latest Blog Posts -notiftouser=To users -notiftofixedemail=To fixed mail -notiftouserandtofixedemail=To user and fixed mail -Notify_ORDER_VALIDATE=Sales order validated -Notify_ORDER_SENTBYMAIL=Sales order sent by mail -Notify_ORDER_SUPPLIER_SENTBYMAIL=Purchase order sent by email -Notify_ORDER_SUPPLIER_VALIDATE=Purchase order recorded -Notify_ORDER_SUPPLIER_APPROVE=Purchase order approved -Notify_ORDER_SUPPLIER_REFUSE=Purchase order refused -Notify_PROPAL_VALIDATE=Customer proposal validated -Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed -Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused -Notify_PROPAL_SENTBYMAIL=Commercial proposal sent by mail -Notify_WITHDRAW_TRANSMIT=Transmission withdrawal -Notify_WITHDRAW_CREDIT=Credit withdrawal -Notify_WITHDRAW_EMIT=Perform withdrawal -Notify_COMPANY_CREATE=Third party created -Notify_COMPANY_SENTBYMAIL=Mails sent from third party card -Notify_BILL_VALIDATE=Customer invoice validated -Notify_BILL_UNVALIDATE=Customer invoice unvalidated -Notify_BILL_PAYED=Customer invoice paid -Notify_BILL_CANCEL=Customer invoice canceled -Notify_BILL_SENTBYMAIL=Customer invoice sent by mail -Notify_BILL_SUPPLIER_VALIDATE=Vendor invoice validated -Notify_BILL_SUPPLIER_PAYED=Vendor invoice paid -Notify_BILL_SUPPLIER_SENTBYMAIL=Vendor invoice sent by mail -Notify_BILL_SUPPLIER_CANCELED=Vendor invoice cancelled -Notify_CONTRACT_VALIDATE=Contract validated -Notify_FICHINTER_VALIDATE=Intervention validated -Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention -Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail -Notify_SHIPPING_VALIDATE=Shipping validated -Notify_SHIPPING_SENTBYMAIL=Shipping sent by mail -Notify_MEMBER_VALIDATE=Member validated -Notify_MEMBER_MODIFY=Member modified -Notify_MEMBER_SUBSCRIPTION=Member subscribed -Notify_MEMBER_RESILIATE=Member terminated -Notify_MEMBER_DELETE=Member deleted -Notify_PROJECT_CREATE=Project creation -Notify_TASK_CREATE=Task created -Notify_TASK_MODIFY=Task modified -Notify_TASK_DELETE=Task deleted -Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required) -Notify_EXPENSE_REPORT_APPROVE=Expense report approved -Notify_HOLIDAY_VALIDATE=Leave request validated (approval required) -Notify_HOLIDAY_APPROVE=Leave request approved -Notify_ACTION_CREATE=Added action to Agenda -SeeModuleSetup=See setup of module %s -NbOfAttachedFiles=Number of attached files/documents -TotalSizeOfAttachedFiles=Total size of attached files/documents -MaxSize=Maximum size -AttachANewFile=Attach a new file/document -LinkedObject=Linked object -NbOfActiveNotifications=Number of notifications (no. of recipient emails) -PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe lines are separated by a carriage return.\n\n__USER_SIGNATURE__ +Tools=መሳሪያዎች +TMenuTools=መሳሪያዎች +ToolsDesc=በሌሎች የሜኑ ምዝግቦች ውስጥ ያልተካተቱ ሁሉም መሳሪያዎች እዚህ ተመድበዋል።
ሁሉም መሳሪያዎች በግራ ምናሌው በኩል ሊገኙ ይችላሉ። +Birthday=የልደት ቀን +BirthdayAlert=የልደት ማስጠንቀቂያ +BirthdayAlertOn=የልደት ማንቂያ ንቁ +BirthdayAlertOff=የልደት ቀን ማንቂያ ቦዝኗል +TransKey=የ TransKey ቁልፍ ትርጉም +MonthOfInvoice=የክፍያ መጠየቂያ ቀን ወር (ቁጥር 1-12) +TextMonthOfInvoice=የክፍያ መጠየቂያ ቀን ወር (ጽሑፍ) +PreviousMonthOfInvoice=ያለፈው ወር (ቁጥር 1-12) የክፍያ መጠየቂያ ቀን +TextPreviousMonthOfInvoice=ያለፈው ወር (ጽሑፍ) የክፍያ መጠየቂያ ቀን +NextMonthOfInvoice=በሚቀጥለው ወር (ቁጥር 1-12) የክፍያ መጠየቂያ ቀን +TextNextMonthOfInvoice=የክፍያ መጠየቂያ ቀን ወር (ጽሑፍ) የሚከተለው +PreviousMonth=ያለፈው ወር +CurrentMonth=የአሁኑ ወር +ZipFileGeneratedInto=የዚፕ ፋይል ወደ %s ውስጥ ተፈጥሯል። +DocFileGeneratedInto=የሰነድ ፋይል ወደ %s ውስጥ ተፈጥሯል። +JumpToLogin=ግንኙነቱ ተቋርጧል። ወደ መግቢያ ገጽ ሂድ... +MessageForm=በመስመር ላይ የክፍያ ቅጽ ላይ መልእክት +MessageOK=ለተረጋገጠ ክፍያ በመመለሻ ገጹ ላይ መልእክት +MessageKO=ለተሰረዘ ክፍያ በመመለሻ ገጹ ላይ መልእክት +ContentOfDirectoryIsNotEmpty=የዚህ ማውጫ ይዘት ባዶ አይደለም። +DeleteAlsoContentRecursively=ሁሉንም ይዘቶች በተከታታይ ለመሰረዝ ያረጋግጡ +PoweredBy=የተጎላበተው በ +YearOfInvoice=የክፍያ መጠየቂያ ቀን +PreviousYearOfInvoice=ያለፈው ዓመት የክፍያ መጠየቂያ ቀን +NextYearOfInvoice=የክፍያ መጠየቂያ ቀን በሚቀጥለው ዓመት +DateNextInvoiceBeforeGen=የሚቀጥለው የክፍያ መጠየቂያ ቀን (ከትውልድ በፊት) +DateNextInvoiceAfterGen=የሚቀጥለው የክፍያ መጠየቂያ ቀን (ከትውልድ በኋላ) +GraphInBarsAreLimitedToNMeasures=ግራፊክስ በ'ባርስ' ሁነታ በ%s ልኬቶች የተገደበ ነው። በምትኩ 'መስመሮች' ሁነታ በራስ-ሰር ተመርጧል። +OnlyOneFieldForXAxisIsPossible=በአሁኑ ጊዜ እንደ X-Axis 1 መስክ ብቻ ይቻላል. የመጀመሪያው የተመረጠው መስክ ብቻ ነው የተመረጠው። +AtLeastOneMeasureIsRequired=ለመለካት ቢያንስ 1 መስክ ያስፈልጋል +AtLeastOneXAxisIsRequired=ለ X-Axis ቢያንስ 1 መስክ ያስፈልጋል +LatestBlogPosts=የቅርብ ጊዜ የብሎግ ልጥፎች +notiftouser=ለተጠቃሚዎች +notiftofixedemail=ወደ ቋሚ ደብዳቤ +notiftouserandtofixedemail=ወደ ተጠቃሚ እና ቋሚ ደብዳቤ +Notify_ORDER_VALIDATE=የሽያጭ ትዕዛዝ ተረጋግጧል +Notify_ORDER_SENTBYMAIL=የሽያጭ ማዘዣ በፖስታ ተልኳል። +Notify_ORDER_CLOSE=የሽያጭ ትዕዛዝ ደርሷል +Notify_ORDER_SUPPLIER_SENTBYMAIL=የግዢ ትዕዛዝ በኢሜል ተልኳል። +Notify_ORDER_SUPPLIER_VALIDATE=የግዢ ትዕዛዝ ተመዝግቧል +Notify_ORDER_SUPPLIER_APPROVE=የግዢ ትዕዛዝ ጸድቋል +Notify_ORDER_SUPPLIER_SUBMIT=የግዢ ትዕዛዝ ገብቷል። +Notify_ORDER_SUPPLIER_REFUSE=የግዢ ትዕዛዝ ተቀባይነት አላገኘም። +Notify_PROPAL_VALIDATE=የደንበኛ ሀሳብ ተረጋግጧል +Notify_PROPAL_CLOSE_SIGNED=የደንበኛ ፕሮፖዛል ተዘግቷል። +Notify_PROPAL_CLOSE_REFUSED=የደንበኛ ፕሮፖዛል ተዘግቷል። +Notify_PROPAL_SENTBYMAIL=የንግድ ፕሮፖዛል በፖስታ ተልኳል። +Notify_WITHDRAW_TRANSMIT=ማስተላለፊያ ማቋረጥ +Notify_WITHDRAW_CREDIT=ክሬዲት ማውጣት +Notify_WITHDRAW_EMIT=መውጣትን ያከናውኑ +Notify_COMPANY_CREATE=ሶስተኛ ወገን ተፈጠረ +Notify_COMPANY_SENTBYMAIL=ከሶስተኛ ወገን ገጽ የተላኩ ደብዳቤዎች +Notify_BILL_VALIDATE=የደንበኛ ደረሰኝ ተረጋግጧል +Notify_BILL_UNVALIDATE=የደንበኛ ደረሰኝ ተቀባይነት አላገኘም። +Notify_BILL_PAYED=የደንበኛ ደረሰኝ ተከፍሏል። +Notify_BILL_CANCEL=የደንበኛ ደረሰኝ ተሰርዟል። +Notify_BILL_SENTBYMAIL=የደንበኛ ደረሰኝ በፖስታ ተልኳል። +Notify_BILL_SUPPLIER_VALIDATE=የአቅራቢ ደረሰኝ ተረጋግጧል +Notify_BILL_SUPPLIER_PAYED=የአቅራቢ ደረሰኝ ተከፍሏል። +Notify_BILL_SUPPLIER_SENTBYMAIL=የአቅራቢ ደረሰኝ በፖስታ ተልኳል። +Notify_BILL_SUPPLIER_CANCELED=የአቅራቢ ደረሰኝ ተሰርዟል። +Notify_CONTRACT_VALIDATE=ውል ተረጋግጧል +Notify_FICHINTER_VALIDATE=ጣልቃ ገብነት ተረጋግጧል +Notify_FICHINTER_CLOSE=ጣልቃ ገብነት ተዘግቷል። +Notify_FICHINTER_ADD_CONTACT=ወደ ጣልቃ ገብነት እውቂያ ታክሏል። +Notify_FICHINTER_SENTBYMAIL=ጣልቃ ገብነት በፖስታ ተልኳል። +Notify_SHIPPING_VALIDATE=መላኪያ ተረጋግጧል +Notify_SHIPPING_SENTBYMAIL=መላኪያ በፖስታ ተልኳል። +Notify_MEMBER_VALIDATE=አባል ተረጋግጧል +Notify_MEMBER_MODIFY=አባል ተሻሽሏል። +Notify_MEMBER_SUBSCRIPTION=አባል ተመዝግቧል +Notify_MEMBER_RESILIATE=አባል ተቋርጧል +Notify_MEMBER_DELETE=አባል ተሰርዟል። +Notify_PROJECT_CREATE=የፕሮጀክት ፈጠራ +Notify_TASK_CREATE=ተግባር ተፈጥሯል። +Notify_TASK_MODIFY=ተግባር ተሻሽሏል። +Notify_TASK_DELETE=ተግባር ተሰርዟል። +Notify_EXPENSE_REPORT_VALIDATE=የወጪ ሪፖርት ተረጋግጧል (ማጽደቅ ያስፈልጋል) +Notify_EXPENSE_REPORT_APPROVE=የወጪ ሪፖርት ጸድቋል +Notify_HOLIDAY_VALIDATE=የመልቀቅ ጥያቄ ተረጋግጧል (ማጽደቅ ያስፈልጋል) +Notify_HOLIDAY_APPROVE=የመልቀቅ ጥያቄ ጸድቋል +Notify_ACTION_CREATE=እርምጃ ወደ አጀንዳ ታክሏል። +SeeModuleSetup=የሞጁሉን ማዋቀር ይመልከቱ %s +NbOfAttachedFiles=የተያያዙ ፋይሎች/ሰነዶች ብዛት +TotalSizeOfAttachedFiles=የተያያዙ ፋይሎች/ሰነዶች ጠቅላላ መጠን +MaxSize=ከፍተኛ መጠን +AttachANewFile=አዲስ ፋይል/ሰነድ ያያይዙ +LinkedObject=የተገናኘ ነገር +NbOfActiveNotifications=የማሳወቂያዎች ብዛት (የተቀባዩ ኢሜይሎች ቁጥር) +PredefinedMailTest=__(ሀሎ)__\nይህ ወደ __EMAIL__ የተላከ የሙከራ መልዕክት ነው።\nመስመሮቹ በሠረገላ መመለሻ ይለያያሉ.\n\n_USER_ፊርማ__ PredefinedMailTestHtml=__(Hello)__
This is a test mail sent to __EMAIL__ (the word test must be in bold).
The lines are separated by a carriage return.

__USER_SIGNATURE__ -PredefinedMailContentContract=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find invoice __REF__ attached \n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to remind you that the invoice __REF__ seems to have not been paid. A copy of the invoice is attached as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find commercial proposal __REF__ attached \n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find price request __REF__ attached\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find order __REF__ attached\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find our order __REF__ attached\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find invoice __REF__ attached\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find shipping __REF__ attached\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find intervention __REF__ attached\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n -PredefinedMailContentGeneric=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendActionComm=Event reminder "__EVENT_LABEL__" on __EVENT_DATE__ at __EVENT_TIME__

This is an automatic message, please do not reply. -DemoDesc=Dolibarr is a compact ERP/CRM supporting several business modules. A demo showcasing all modules makes no sense as this scenario never occurs (several hundred available). So, several demo profiles are available. -ChooseYourDemoProfil=Choose the demo profile that best suits your needs... -ChooseYourDemoProfilMore=...or build your own profile
(manual module selection) -DemoFundation=Manage members of a foundation -DemoFundation2=Manage members and bank account of a foundation -DemoCompanyServiceOnly=Company or freelance selling service only -DemoCompanyShopWithCashDesk=Manage a shop with a cash desk -DemoCompanyProductAndStocks=Shop selling products with Point Of Sales -DemoCompanyManufacturing=Company manufacturing products -DemoCompanyAll=Company with multiple activities (all main modules) -CreatedBy=Created by %s -ModifiedBy=Modified by %s -ValidatedBy=Validated by %s -SignedBy=Signed by %s -ClosedBy=Closed by %s -CreatedById=User id who created -ModifiedById=User id who made latest change -ValidatedById=User id who validated -CanceledById=User id who canceled -ClosedById=User id who closed -CreatedByLogin=User login who created -ModifiedByLogin=User login who made latest change -ValidatedByLogin=User login who validated -CanceledByLogin=User login who canceled -ClosedByLogin=User login who closed -FileWasRemoved=File %s was removed -DirWasRemoved=Directory %s was removed -FeatureNotYetAvailable=Feature not yet available in the current version -FeatureNotAvailableOnDevicesWithoutMouse=Feature not available on devices without mouse -FeaturesSupported=Supported features -Width=Width -Height=Height -Depth=Depth -Top=Top -Bottom=Bottom -Left=Left -Right=Right -CalculatedWeight=Calculated weight -CalculatedVolume=Calculated volume -Weight=Weight -WeightUnitton=ton -WeightUnitkg=kg -WeightUnitg=g -WeightUnitmg=mg -WeightUnitpound=pound -WeightUnitounce=ounce -Length=Length -LengthUnitm=m +PredefinedMailContentContract=__(ሀሎ)__\n\n\n__(ከሠላምታ ጋር)__\n\n_USER_ፊርማ__ +PredefinedMailContentSendInvoice=__(ሀሎ)__\n\nእባክዎን ደረሰኝ __REF__ አያይዘው ያግኙ\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(ከሠላምታ ጋር)__\n\n_USER_ፊርማ__ +PredefinedMailContentSendInvoiceReminder=__(ሀሎ)__\n\nየክፍያ መጠየቂያ __REF__ ያልተከፈለ እንደሚመስል ልናስታውስዎ እንወዳለን። የክፍያ መጠየቂያው ቅጂ እንደ ማስታወሻ ተያይዟል።\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(ከሠላምታ ጋር)__\n\n_USER_ፊርማ__ +PredefinedMailContentSendProposal=__(ሀሎ)__\n\nእባክዎ የንግድ ፕሮፖዛል __REF__ አያይዘው ያግኙ\n\n\n__(ከሠላምታ ጋር)__\n\n_USER_ፊርማ__ +PredefinedMailContentSendSupplierProposal=__(ሀሎ)__\n\nእባክዎ የዋጋ ጥያቄን __REF__ አያይዘው ያግኙ\n\n\n__(ከሠላምታ ጋር)__\n\n_USER_ፊርማ__ +PredefinedMailContentSendOrder=__(ሀሎ)__\n\nእባክዎን ትዕዛዝ__REF__ ተያይዟል።\n\n\n__(ከሠላምታ ጋር)__\n\n_USER_ፊርማ__ +PredefinedMailContentSendSupplierOrder=__(ሀሎ)__\n\nእባክዎን የእኛን ትዕዛዝ __REF__ አያይዘው ያግኙ\n\n\n__(ከሠላምታ ጋር)__\n\n_USER_ፊርማ__ +PredefinedMailContentSendSupplierInvoice=__(ሀሎ)__\n\nእባክዎን ደረሰኝ __REF__ አያይዘው ያግኙ\n\n\n__(ከሠላምታ ጋር)__\n\n_USER_ፊርማ__ +PredefinedMailContentSendShipping=__(ሀሎ)__\n\nእባክህ መላኪያ__REF__ ተያይዟል።\n\n\n__(ከሠላምታ ጋር)__\n\n_USER_ፊርማ__ +PredefinedMailContentSendFichInter=__(ሀሎ)__\n\nእባክዎን ጣልቃ ገብነት __REF__ አያይዘው ያግኙ\n\n\n__(ከሠላምታ ጋር)__\n\n_USER_ፊርማ__ +PredefinedMailContentLink=ክፍያው ካልተከናወነ ለመክፈል ከዚህ በታች ያለውን ሊንክ ጠቅ ማድረግ ይችላሉ።\n\n%s\n\n +PredefinedMailContentGeneric=__(ሀሎ)__\n\n\n__(ከሠላምታ ጋር)__\n\n_USER_ፊርማ__ +PredefinedMailContentSendActionComm=የክስተት አስታዋሽ "__EVENT_LABEL__" በ__EVENT_DATE__ በ__EVENT_TIME__

ይህ ራስ-ሰር መልእክት ነው፣ እባክዎን ምላሽ አይስጡ። +DemoDesc=ዶሊባርር ብዙ የንግድ ሞጁሎችን የሚደግፍ የታመቀ ኢአርፒ/ሲአርኤም ነው። ይህ ሁኔታ በጭራሽ ስለማይከሰት ሁሉንም ሞጁሎች የሚያሳይ ማሳያ ትርጉም የለውም (በርካታ መቶዎች ይገኛሉ)። ስለዚህ፣ በርካታ ማሳያዎች ይገኛሉ። +ChooseYourDemoProfil=ለፍላጎትዎ የበለጠ የሚስማማውን የማሳያ መገለጫ ይምረጡ... +ChooseYourDemoProfilMore=... ወይም የራስዎን መገለጫ ይገንቡ
(በእጅ ሞጁል ምርጫ) +DemoFundation=የአንድ ፋውንዴሽን አባላትን ያስተዳድሩ +DemoFundation2=የመሠረት አባላትን እና የባንክ ሂሳብን ያስተዳድሩ +DemoCompanyServiceOnly=ኩባንያ ወይም የፍሪላንስ ሽያጭ አገልግሎት ብቻ +DemoCompanyShopWithCashDesk=አንድ ሱቅ በጥሬ ገንዘብ ሳጥን ያስተዳድሩ +DemoCompanyProductAndStocks=የሚሸጡ ምርቶችን በሽያጭ ነጥብ ይግዙ +DemoCompanyManufacturing=ኩባንያ ማምረት ምርቶች +DemoCompanyAll=ብዙ እንቅስቃሴዎች ያለው ኩባንያ (ሁሉም ዋና ሞጁሎች) +CreatedBy=በ%s የተፈጠረ +ModifiedBy=በ%s የተሻሻለ +ValidatedBy=በ%s የተረጋገጠ +SignedBy=በ%s የተፈረመ +ClosedBy=በ%s ተዘግቷል +CreatedById=የፈጠረው የተጠቃሚ መታወቂያ +ModifiedById=የቅርብ ለውጥ ያደረገው የተጠቃሚ መታወቂያ +ValidatedById=የተረጋገጠ የተጠቃሚ መታወቂያ +CanceledById=የሰረዘ የተጠቃሚ መታወቂያ +ClosedById=የተዘጋ የተጠቃሚ መታወቂያ +CreatedByLogin=ማን የፈጠረው የተጠቃሚ መግቢያ +ModifiedByLogin=የቅርብ ለውጥ ያደረገው የተጠቃሚ መግቢያ +ValidatedByLogin=የተረጋገጠ የተጠቃሚ መግቢያ +CanceledByLogin=የተጠቃሚ መግቢያ ማን የሰረዘ +ClosedByLogin=የተዘጋው የተጠቃሚ መግቢያ +FileWasRemoved=ፋይል %s ተወግዷል +DirWasRemoved=ማውጫ %s ተወግዷል +FeatureNotYetAvailable=ባህሪው አሁን ባለው ስሪት ውስጥ እስካሁን አይገኝም +FeatureNotAvailableOnDevicesWithoutMouse=ባህሪው መዳፊት በሌለበት መሳሪያዎች ላይ አይገኝም +FeaturesSupported=የሚደገፉ ባህሪያት +Width=ስፋት +Height=ቁመት +Depth=ጥልቀት +Top=ከፍተኛ +Bottom=ከታች +Left=ግራ +Right=ቀኝ +CalculatedWeight=የተሰላ ክብደት +CalculatedVolume=የተሰላ መጠን +Weight=ክብደት +WeightUnitton=ቶን +WeightUnitkg=ኪግ +WeightUnitg=ሰ +WeightUnitmg=ሚ.ግ +WeightUnitpound=ፓውንድ +WeightUnitounce=አውንስ +Length=ርዝመት +LengthUnitm=ኤም LengthUnitdm=dm -LengthUnitcm=cm -LengthUnitmm=mm -Surface=Area +LengthUnitcm=ሴሜ +LengthUnitmm=ሚ.ሜ +Surface=አካባቢ SurfaceUnitm2=m² SurfaceUnitdm2=dm² -SurfaceUnitcm2=cm² -SurfaceUnitmm2=mm² -SurfaceUnitfoot2=ft² -SurfaceUnitinch2=in² -Volume=Volume +SurfaceUnitcm2=ሴሜ² +SurfaceUnitmm2=ሚሜ² +SurfaceUnitfoot2=ጫማ² +SurfaceUnitinch2=በ² ውስጥ +Volume=ድምጽ VolumeUnitm3=m³ -VolumeUnitdm3=dm³ (L) -VolumeUnitcm3=cm³ (ml) -VolumeUnitmm3=mm³ (µl) -VolumeUnitfoot3=ft³ -VolumeUnitinch3=in³ -VolumeUnitounce=ounce -VolumeUnitlitre=litre -VolumeUnitgallon=gallon -SizeUnitm=m +VolumeUnitdm3=dm³ (ኤል) +VolumeUnitcm3=ሴሜ³ (ሚሊ) +VolumeUnitmm3=ሚሜ³ (µl) +VolumeUnitfoot3=ጫማ³ +VolumeUnitinch3=ውስጥ³ +VolumeUnitounce=አውንስ +VolumeUnitlitre=ሊትር +VolumeUnitgallon=ጋሎን +SizeUnitm=ኤም SizeUnitdm=dm -SizeUnitcm=cm -SizeUnitmm=mm -SizeUnitinch=inch -SizeUnitfoot=foot -SizeUnitpoint=point -BugTracker=Bug tracker -SendNewPasswordDesc=This form allows you to request a new password. It will be sent to your email address.
Change will become effective once you click on the confirmation link in the email.
Check your inbox. -BackToLoginPage=Back to login page -AuthenticationDoesNotAllowSendNewPassword=Authentication mode is %s.
In this mode, Dolibarr can't know nor change your password.
Contact your system administrator if you want to change your password. -EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use this option. +SizeUnitcm=ሴሜ +SizeUnitmm=ሚ.ሜ +SizeUnitinch=ኢንች +SizeUnitfoot=እግር +SizeUnitpoint=ነጥብ +BugTracker=የሳንካ መከታተያ +SendNewPasswordDesc=ይህ ቅጽ አዲስ የይለፍ ቃል እንዲጠይቁ ያስችልዎታል። ወደ ኢሜል አድራሻዎ ይላካል።
ለውጡ ውጤታማ የሚሆነው በኢሜል ውስጥ ያለውን የማረጋገጫ አገናኝ ጠቅ ካደረጉ በኋላ ነው።
የገቢ መልእክት ሳጥንዎን ያረጋግጡ። +EnterNewPasswordHere=አዲሱን የይለፍ ቃልዎን እዚህ ያስገቡ +BackToLoginPage=ወደ የመግቢያ ገጽ ተመለስ +AuthenticationDoesNotAllowSendNewPassword=የማረጋገጫ ሁነታ %s ነው:: >
በዚህ ሁነታ Dolibarr የይለፍ ቃልህን ማወቅም ሆነ መለወጥ አይችልም።
የይለፍ ቃልህን መለወጥ ከፈለክ የስርዓት አስተዳዳሪህን አግኝ። +EnableGDLibraryDesc=ይህንን አማራጭ ለመጠቀም በPHP ጭነትዎ ላይ የጂዲ ቤተ-መጽሐፍትን ጫን ወይም አንቃ። ProfIdShortDesc=Prof Id %s is an information depending on third party country.
For example, for country %s, it's code %s. -DolibarrDemo=Dolibarr ERP/CRM demo -StatsByNumberOfUnits=Statistics for sum of qty of products/services -StatsByNumberOfEntities=Statistics for number of referring entities (no. of invoices, or orders...) -NumberOfProposals=Number of proposals -NumberOfCustomerOrders=Number of sales orders -NumberOfCustomerInvoices=Number of customer invoices -NumberOfSupplierProposals=Number of vendor proposals -NumberOfSupplierOrders=Number of purchase orders -NumberOfSupplierInvoices=Number of vendor invoices -NumberOfContracts=Number of contracts -NumberOfMos=Number of manufacturing orders -NumberOfUnitsProposals=Number of units on proposals -NumberOfUnitsCustomerOrders=Number of units on sales orders -NumberOfUnitsCustomerInvoices=Number of units on customer invoices -NumberOfUnitsSupplierProposals=Number of units on vendor proposals -NumberOfUnitsSupplierOrders=Number of units on purchase orders -NumberOfUnitsSupplierInvoices=Number of units on vendor invoices -NumberOfUnitsContracts=Number of units on contracts -NumberOfUnitsMos=Number of units to produce in manufacturing orders -EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. -EMailTextInterventionValidated=The intervention %s has been validated. -EMailTextInvoiceValidated=Invoice %s has been validated. -EMailTextInvoicePayed=Invoice %s has been paid. -EMailTextProposalValidated=Proposal %s has been validated. -EMailTextProposalClosedSigned=Proposal %s has been closed signed. -EMailTextOrderValidated=Order %s has been validated. -EMailTextOrderApproved=Order %s has been approved. -EMailTextOrderValidatedBy=Order %s has been recorded by %s. -EMailTextOrderApprovedBy=Order %s has been approved by %s. -EMailTextOrderRefused=Order %s has been refused. -EMailTextOrderRefusedBy=Order %s has been refused by %s. -EMailTextExpeditionValidated=Shipping %s has been validated. -EMailTextExpenseReportValidated=Expense report %s has been validated. -EMailTextExpenseReportApproved=Expense report %s has been approved. -EMailTextHolidayValidated=Leave request %s has been validated. -EMailTextHolidayApproved=Leave request %s has been approved. -EMailTextActionAdded=The action %s has been added to the Agenda. -ImportedWithSet=Importation data set -DolibarrNotification=Automatic notification -ResizeDesc=Enter new width OR new height. Ratio will be kept during resizing... -NewLength=New width -NewHeight=New height -NewSizeAfterCropping=New size after cropping -DefineNewAreaToPick=Define new area on image to pick (left click on image then drag until you reach the opposite corner) -CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image -ImageEditor=Image editor -YouReceiveMailBecauseOfNotification=You receive this message because your email has been added to list of targets to be informed of particular events into %s software of %s. -YouReceiveMailBecauseOfNotification2=This event is the following: -ThisIsListOfModules=This is a list of modules preselected by this demo profile (only most common modules are visible in this demo). Edit this to have a more personalized demo and click on "Start". -UseAdvancedPerms=Use the advanced permissions of some modules -FileFormat=File format -SelectAColor=Choose a color -AddFiles=Add Files -StartUpload=Start upload -CancelUpload=Cancel upload -FileIsTooBig=Files is too big -PleaseBePatient=Please be patient... -NewPassword=New password -ResetPassword=Reset password -RequestToResetPasswordReceived=A request to change your password has been received. -NewKeyIs=This is your new keys to login -NewKeyWillBe=Your new key to login to software will be -ClickHereToGoTo=Click here to go to %s -YouMustClickToChange=You must however first click on the following link to validate this password change -ConfirmPasswordChange=Confirm password change -ForgetIfNothing=If you didn't request this change, just forget this email. Your credentials are kept safe. -IfAmountHigherThan=If amount higher than %s -SourcesRepository=Repository for sources -Chart=Chart -PassEncoding=Password encoding -PermissionsAdd=Permissions added -PermissionsDelete=Permissions removed -YourPasswordMustHaveAtLeastXChars=Your password must have at least %s chars -PasswordNeedAtLeastXUpperCaseChars=The password need at least %s upper case chars -PasswordNeedAtLeastXDigitChars=The password need at least %s numeric chars -PasswordNeedAtLeastXSpecialChars=The password need at least %s special chars -PasswordNeedNoXConsecutiveChars=The password must not have %s consecutive similar chars -YourPasswordHasBeenReset=Your password has been reset successfully -ApplicantIpAddress=IP address of applicant -SMSSentTo=SMS sent to %s -MissingIds=Missing ids -ThirdPartyCreatedByEmailCollector=Third party created by email collector from email MSGID %s -ContactCreatedByEmailCollector=Contact/address created by email collector from email MSGID %s -ProjectCreatedByEmailCollector=Project created by email collector from email MSGID %s -TicketCreatedByEmailCollector=Ticket created by email collector from email MSGID %s -OpeningHoursFormatDesc=Use a - to separate opening and closing hours.
Use a space to enter different ranges.
Example: 8-12 14-18 -SuffixSessionName=Suffix for session name -LoginWith=Login with %s +DolibarrDemo=ዶሊባርር ኢአርፒ/CRM ማሳያ +StatsByAmount=የምርቶች/አገልግሎቶች ብዛት ላይ ስታቲስቲክስ +StatsByAmountProducts=የምርቶች ብዛት ላይ ስታቲስቲክስ +StatsByAmountServices=በአገልግሎት ብዛት ላይ ስታቲስቲክስ +StatsByNumberOfUnits=የቁቲ ምርቶች/አገልግሎቶች ድምር ስታቲስቲክስ +StatsByNumberOfUnitsProducts=የቁቲ ምርቶች ድምር ስታቲስቲክስ +StatsByNumberOfUnitsServices=የኪቲ አገልግሎቶች ድምር ስታቲስቲክስ +StatsByNumberOfEntities=የማጣቀሻ አካላት ብዛት ስታትስቲክስ (የክፍያ መጠየቂያዎች ቁጥር፣ ወይም ትዕዛዞች...) +NumberOf=የ%s ብዛት +NumberOfUnits=በ%s ላይ ያሉት ክፍሎች ብዛት +AmountIn=በ%s ውስጥ ያለው መጠን +NumberOfUnitsMos=በማኑፋክቸሪንግ ትዕዛዞች ውስጥ ለማምረት የንጥሎች ብዛት +EMailTextInterventionAddedContact=አዲስ ጣልቃ ገብነት %s ለእርስዎ ተመድቧል። +EMailTextInterventionValidated=ጣልቃ ገብነት %s ተረጋግጧል። +EMailTextInterventionClosed=ጣልቃ ገብነት %s ተዘግቷል። +EMailTextInvoiceValidated=ደረሰኝ %s ተረጋግጧል። +EMailTextInvoicePayed=ደረሰኝ %s ተከፍሏል። +EMailTextProposalValidated=ፕሮፖዛል %s ጸድቋል። +EMailTextProposalClosedSigned=ፕሮፖዛል %s ተፈርሟል። +EMailTextProposalClosedSignedWeb=ፕሮፖዛል %s በፖርታል ገጽ ላይ ተዘግቷል። +EMailTextProposalClosedRefused=ፕሮፖዛል %s ተዘግቷል። +EMailTextProposalClosedRefusedWeb=ፕሮፖዛል %s በፖርታል ገጽ ላይ እምቢታ ተዘግቷል። +EMailTextOrderValidated=ትዕዛዝ %s ጸድቋል። +EMailTextOrderClose=ትዕዛዝ %s ደርሷል። +EMailTextSupplierOrderApprovedBy=የግዢ ትዕዛዝ %s በ%s ጸድቋል። +EMailTextSupplierOrderValidatedBy=የግዢ ትዕዛዝ %s በ%s ተመዝግቧል። +EMailTextSupplierOrderSubmittedBy=የግዢ ትዕዛዝ %s በ%s ገብቷል። +EMailTextSupplierOrderRefusedBy=የግዢ ትዕዛዝ %s በ%s ውድቅ ተደርጓል። +EMailTextExpeditionValidated=%s ማጓጓዝ ተረጋግጧል። +EMailTextExpenseReportValidated=የወጪ ሪፖርት %s ተረጋግጧል። +EMailTextExpenseReportApproved=የወጪ ሪፖርት %s ጸድቋል። +EMailTextHolidayValidated=የመልቀቅ ጥያቄ %s ተረጋግጧል። +EMailTextHolidayApproved=የመልቀቅ ጥያቄ %s ጸድቋል። +EMailTextActionAdded=እርምጃው %s ወደ አጀንዳው ታክሏል። +ImportedWithSet=የማስመጣት ውሂብ ስብስብ +DolibarrNotification=ራስ-ሰር ማሳወቂያ +ResizeDesc=አዲስ ስፋት ወይም አዲስ ቁመት አስገባ። መጠኑ በሚቀየርበት ጊዜ ምጥጥን ይቀመጣል... +NewLength=አዲስ ስፋት +NewHeight=አዲስ ቁመት +NewSizeAfterCropping=ከመከርከም በኋላ አዲስ መጠን +DefineNewAreaToPick=ለመምረጥ በምስሉ ላይ አዲስ ቦታ ይግለጹ (ምስሉን በግራ ጠቅ ያድርጉ እና በተቃራኒው ጥግ ላይ እስኪደርሱ ድረስ ይጎትቱ) +CurrentInformationOnImage=ይህ መሳሪያ የተነደፈው ምስልን መጠን ለመቀየር ወይም ለመከርከም እንዲረዳዎት ነው። ይህ አሁን በተስተካከለው ምስል ላይ ያለው መረጃ ነው። +ImageEditor=ምስል አርታዒ +YouReceiveMailBecauseOfNotification=ይህ መልእክት የተቀበሉት ኢሜልዎ ስለተወሰኑ ክስተቶች ለማሳወቅ ወደ ዒላማዎች ዝርዝር ስለታከለ ነው ወደ %s ሶፍትዌር የ%s። +YouReceiveMailBecauseOfNotification2=ይህ ክስተት የሚከተለው ነው። +ThisIsListOfModules=ይህ በዚህ ማሳያ ፕሮፋይል አስቀድመው የተመረጡ የሞጁሎች ዝርዝር ነው (በዚህ ማሳያ ውስጥ በጣም የተለመዱ ሞጁሎች ብቻ ናቸው የሚታዩት)። የበለጠ ግላዊ የሆነ ማሳያ እንዲኖርዎት ይህንን ያርትዑ እና "ጀምር" ን ጠቅ ያድርጉ። +UseAdvancedPerms=የአንዳንድ ሞጁሎችን የላቁ ፈቃዶችን ተጠቀም +FileFormat=የፋይል ቅርጸት +SelectAColor=ቀለም ይምረጡ +AddFiles=ፋይሎችን ያክሉ +StartUpload=መጫን ጀምር +CancelUpload=ሰቀላን ሰርዝ +FileIsTooBig=ፋይሎች በጣም ትልቅ ናቸው። +PleaseBePatient=እባካችሁ ታገሱ... +NewPassword=አዲስ የይለፍ ቃል +ResetPassword=የይለፍ ቃል ዳግም አስጀምር +RequestToResetPasswordReceived=የይለፍ ቃልዎን የመቀየር ጥያቄ ደርሷል። +NewKeyIs=ይህ አዲስ የመግባት ቁልፎችዎ ነው። +NewKeyWillBe=ወደ ሶፍትዌር ለመግባት አዲሱ ቁልፍዎ ይሆናል። +ClickHereToGoTo=ወደ %s ለመሄድ እዚህ ጠቅ ያድርጉ +YouMustClickToChange=ይህን የይለፍ ቃል ለውጥ ለማረጋገጥ ግን መጀመሪያ የሚከተለውን ሊንክ ጠቅ ማድረግ አለቦት +ConfirmPasswordChange=የይለፍ ቃል ለውጥን ያረጋግጡ +ForgetIfNothing=ይህን ለውጥ ካልጠየቅክ፣ ይህን ኢሜይል ብቻ ረሳው። ምስክርነቶችዎ ደህንነታቸው የተጠበቀ ነው። +IfAmountHigherThan=መጠኑ ከ%s በላይ ከሆነ +SourcesRepository=የምንጮች ማከማቻ +Chart=ገበታ +PassEncoding=የይለፍ ቃል ኢንኮዲንግ +PermissionsAdd=ፈቃዶች ታክለዋል። +PermissionsDelete=ፈቃዶች ተወግደዋል +YourPasswordMustHaveAtLeastXChars=የይለፍ ቃልህ ቢያንስ %s ሊኖረው ይገባል +PasswordNeedAtLeastXUpperCaseChars=የይለፍ ቃሉ ቢያንስ %s ትልቅ ፊደል ያስፈልገዋል +PasswordNeedAtLeastXDigitChars=የይለፍ ቃሉ ቢያንስ %sቁጥር ያስፈልገዋል +PasswordNeedAtLeastXSpecialChars=የይለፍ ቃሉ ቢያንስ %s ልዩ ያስፈልገዋል +PasswordNeedNoXConsecutiveChars=የይለፍ ቃሉ %s ተመሳሳይ ውጤት ሊኖረው አይገባም። +YourPasswordHasBeenReset=የይለፍ ቃልዎ በተሳካ ሁኔታ ዳግም ተቀናብሯል። +ApplicantIpAddress=የአመልካች አይፒ አድራሻ +SMSSentTo=ኤስኤምኤስ ወደ %s ተልኳል +MissingIds=የጠፉ መታወቂያዎች +ThirdPartyCreatedByEmailCollector=ከኢሜይል MSGID %s በኢሜይል ሰብሳቢ የተፈጠረ ሶስተኛ ወገን +ContactCreatedByEmailCollector=እውቂያ/አድራሻ የተፈጠረው በኢሜል ሰብሳቢው ከኢሜል MSGID %s +ProjectCreatedByEmailCollector=ፕሮጀክት በኢሜይል ሰብሳቢ ከኤምኤስጂአይዲ የተፈጠረ %s +TicketCreatedByEmailCollector=ትኬት በኢሜይል ሰብሳቢው የተፈጠረ ከኢሜይል MSGID %s +OpeningHoursFormatDesc=የመክፈቻ እና የመዝጊያ ሰዓቶችን ለመለየት ሀ - ተጠቀም።
የተለያዩ ክልሎችን ለማስገባት ቦታ ተጠቀም።
ምሳሌ፡ 8-12 14 -18 +SuffixSessionName=ለክፍለ ጊዜ ስም ቅጥያ +LoginWith=በ%s ይግቡ ##### Export ##### -ExportsArea=Exports area -AvailableFormats=Available formats -LibraryUsed=Library used -LibraryVersion=Library version -ExportableDatas=Exportable data -NoExportableData=No exportable data (no modules with exportable data loaded, or missing permissions) +ExportsArea=የኤክስፖርት አካባቢ +AvailableFormats=የሚገኙ ቅርጸቶች +LibraryUsed=ጥቅም ላይ የዋለው ቤተ-መጽሐፍት +LibraryVersion=የቤተ መፃህፍት ስሪት +ExportableDatas=ሊላክ የሚችል ውሂብ +NoExportableData=ምንም ወደ ውጭ የሚላክ ውሂብ የለም (ወደ ውጭ ሊላክ የሚችል ውሂብ የተጫነ ወይም የጠፋ ፈቃዶች የሉትም) ##### External sites ##### -WebsiteSetup=Setup of module website -WEBSITE_PAGEURL=URL of page -WEBSITE_TITLE=Title -WEBSITE_DESCRIPTION=Description -WEBSITE_IMAGE=Image -WEBSITE_IMAGEDesc=Relative path of the image media. You can keep this empty as this is rarely used (it can be used by dynamic content to show a thumbnail in a list of blog posts). Use __WEBSITE_KEY__ in the path if path depends on website name (for example: image/__WEBSITE_KEY__/stories/myimage.png). -WEBSITE_KEYWORDS=Keywords -LinesToImport=Lines to import +WebsiteSetup=የሞጁል ድር ጣቢያ ማዋቀር +WEBSITE_PAGEURL=የገጽ URL +WEBSITE_TITLE=ርዕስ +WEBSITE_DESCRIPTION=መግለጫ +WEBSITE_IMAGE=ምስል +WEBSITE_IMAGEDesc=የምስል ሚዲያ አንጻራዊ መንገድ። ይህ በጣም አልፎ አልፎ ጥቅም ላይ የማይውል ስለሆነ ይህንን ባዶ ማድረግ ይችላሉ (በብሎግ ልጥፎች ዝርዝር ውስጥ ድንክዬ ለማሳየት በተለዋዋጭ ይዘት መጠቀም ይቻላል)። ዱካው በድር ጣቢያ ስም ላይ የሚመረኮዝ ከሆነ በመንገዱ ላይ __WEBSITE_KEY__ ተጠቀም (ለምሳሌ፡ ምስል/__ድር ጣቢያ_ቁልፍ__/ ታሪኮች/mymage.png)። +WEBSITE_KEYWORDS=ቁልፍ ቃላት +LinesToImport=ለማስመጣት መስመሮች -MemoryUsage=Memory usage -RequestDuration=Duration of request -ProductsPerPopularity=Products/Services by popularity -PopuProp=Products/Services by popularity in Proposals -PopuCom=Products/Services by popularity in Orders -ProductStatistics=Products/Services Statistics -NbOfQtyInOrders=Qty in orders -SelectTheTypeOfObjectToAnalyze=Select an object to view its statistics... +MemoryUsage=የማህደረ ትውስታ አጠቃቀም +RequestDuration=የጥያቄው ቆይታ +ProductsServicesPerPopularity=ምርቶች | አገልግሎቶች በታዋቂነት +ProductsPerPopularity=ምርቶች በታዋቂነት +ServicesPerPopularity=አገልግሎቶች በታዋቂነት +PopuProp=ምርቶች|በፕሮፖዛል ውስጥ ታዋቂነት ያላቸው አገልግሎቶች +PopuCom=ምርቶች|በትእዛዝ ውስጥ ያሉ አገልግሎቶች በታዋቂነት +ProductStatistics=ምርቶች|የአገልግሎቶች ስታቲስቲክስ +NbOfQtyInOrders=በትእዛዞች ውስጥ Qty +SelectTheTypeOfObjectToAnalyze=ስታቲስቲክሱን ለማየት አንድ ነገር ይምረጡ... -ConfirmBtnCommonContent = Are you sure you want to "%s" ? -ConfirmBtnCommonTitle = Confirm your action -CloseDialog = Close +ConfirmBtnCommonContent = እርግጠኛ ነህ "%s" ? +ConfirmBtnCommonTitle = ድርጊትህን አረጋግጥ +CloseDialog = ገጠመ +Autofill = ራስ-ሙላ +OrPasteAnURL=ወይም URL ለጥፍ + +# externalsite +ExternalSiteSetup=ወደ ውጫዊ ድር ጣቢያ የሚወስድ አገናኝ ያዋቅሩ +ExternalSiteURL=የኤችቲኤምኤል iframe ይዘት ውጫዊ ጣቢያ URL +ExternalSiteModuleNotComplete=Module ExternalSite በትክክል አልተዋቀረም። +ExampleMyMenuEntry=የእኔ ምናሌ ግቤት + +# ftp +FTPClientSetup=የኤፍቲፒ ወይም SFTP ደንበኛ ሞጁል ማዋቀር +NewFTPClient=አዲስ የኤፍቲፒ/SFTP ግንኙነት ማዋቀር +FTPArea=የኤፍቲፒ/SFTP አካባቢ +FTPAreaDesc=ይህ ማያ ገጽ የኤፍቲፒ እና SFTP አገልጋይ እይታ ያሳያል። +SetupOfFTPClientModuleNotComplete=የኤፍቲፒ ወይም SFTP ደንበኛ ሞጁል ማዋቀር ያልተሟላ ይመስላል +FTPFeatureNotSupportedByYourPHP=የእርስዎ ፒኤችፒ ኤፍቲፒ ወይም SFTP ተግባራትን አይደግፍም። +FailedToConnectToFTPServer=ከአገልጋይ ጋር መገናኘት አልተሳካም (አገልጋይ %s፣ ወደብ %s) +FailedToConnectToFTPServerWithCredentials=በተወሰነ የመግቢያ/የይለፍ ቃል ወደ አገልጋይ መግባት አልተሳካም። +FTPFailedToRemoveFile=ፋይል %sን ማስወገድ አልተሳካም። +FTPFailedToRemoveDir=ማውጫን ማስወገድ አልተሳካም %s ዳይሬክተሩን እና ፈቃዱን ያረጋግጡ: ባዶ ነው. +FTPPassiveMode=ተገብሮ ሁነታ +ChooseAFTPEntryIntoMenu=ከምናሌው የኤፍቲፒ/ኤስኤፍቲፒ ጣቢያ ይምረጡ... +FailedToGetFile=ፋይሎችን ማግኘት አልተሳካም %s +ErrorFTPNodisconnect=የኤፍቲፒ/SFTP አገልጋይን የማቋረጥ ስህተት +FileWasUpload=ፋይል %s ተሰቅሏል +FTPFailedToUploadFile=ፋይሉን %s መስቀል አልተሳካም። +AddFolder=አቃፊ ፍጠር +FileWasCreateFolder=አቃፊ %s ተፈጥሯል +FTPFailedToCreateFolder=%s አቃፊ መፍጠር አልተሳካም። +SelectADay=Select a day in calendar +SelectANewDate=Select a new date diff --git a/htdocs/langs/am_ET/partnership.lang b/htdocs/langs/am_ET/partnership.lang index 0fbdaa9744a..a5907df9596 100644 --- a/htdocs/langs/am_ET/partnership.lang +++ b/htdocs/langs/am_ET/partnership.lang @@ -91,8 +91,7 @@ CountLastUrlCheckError=ለመጨረሻው የዩአርኤል ፍተሻ የስህ LastCheckBacklink=የመጨረሻው የዩአርኤል ፍተሻ ቀን NewPartnershipRequest=አዲስ የአጋርነት ጥያቄ -NewPartnershipRequestDesc=ይህ ፎርም የአንዱ አጋርነት ፕሮግራማችን አካል ለመሆን እንዲጠይቁ ያስችልዎታል። ይህን ቅጽ ለመሙላት እርዳታ ከፈለጉ፣ እባክዎን በኢሜል ያነጋግሩ %sb09a4b739f17f80 span> +NewPartnershipRequestDesc=This form allows you to request to be part of one of our partnership program. If you need help to fill this form, please contact by email %s. ThisUrlMustContainsAtLeastOneLinkToWebsite=ይህ ገጽ ከሚከተሉት ጎራዎች ወደ አንዱ ቢያንስ አንድ አገናኝ መያዝ አለበት፡ %s IPOfApplicant=የአመልካች አይፒ - diff --git a/htdocs/langs/am_ET/paybox.lang b/htdocs/langs/am_ET/paybox.lang index 1bbbef4017b..ee163c258b6 100644 --- a/htdocs/langs/am_ET/paybox.lang +++ b/htdocs/langs/am_ET/paybox.lang @@ -1,31 +1,30 @@ # Dolibarr language file - Source file is en_US - paybox -PayBoxSetup=PayBox module setup -PayBoxDesc=This module offer pages to allow payment on Paybox by customers. This can be used for a free payment or for a payment on a particular Dolibarr object (invoice, order, ...) -FollowingUrlAreAvailableToMakePayments=Following URLs are available to offer a page to a customer to make a payment on Dolibarr objects -PaymentForm=Payment form -WelcomeOnPaymentPage=Welcome to our online payment service -ThisScreenAllowsYouToPay=This screen allow you to make an online payment to %s. -ThisIsInformationOnPayment=This is information on payment to do -ToComplete=To complete -YourEMail=Email to receive payment confirmation -Creditor=Creditor -PaymentCode=Payment code -PayBoxDoPayment=Pay with Paybox -YouWillBeRedirectedOnPayBox=You will be redirected on secured Paybox page to input you credit card information -Continue=Next -SetupPayBoxToHavePaymentCreatedAutomatically=Setup your Paybox with url %s to have payment created automatically when validated by Paybox. -YourPaymentHasBeenRecorded=This page confirms that your payment has been recorded. Thank you. -YourPaymentHasNotBeenRecorded=Your payment has NOT been recorded and the transaction has been canceled. Thank you. -AccountParameter=Account parameters -UsageParameter=Usage parameters -InformationToFindParameters=Help to find your %s account information -PAYBOX_CGI_URL_V2=Url of Paybox CGI module for payment -VendorName=Name of vendor -CSSUrlForPaymentForm=CSS style sheet url for payment form -NewPayboxPaymentReceived=New Paybox payment received -NewPayboxPaymentFailed=New Paybox payment tried but failed -PAYBOX_PAYONLINE_SENDEMAIL=Email notification after payment attempt (success or fail) -PAYBOX_PBX_SITE=Value for PBX SITE -PAYBOX_PBX_RANG=Value for PBX Rang -PAYBOX_PBX_IDENTIFIANT=Value for PBX ID -PAYBOX_HMAC_KEY=HMAC key +PayBoxSetup=PayBox ሞጁል ማዋቀር +PayBoxDesc=ይህ ሞጁል በደንበኞች Paybox ላይ ክፍያ ለመፍቀድ ገጾችን ያቀርባል። ይህ ለነጻ ክፍያ ወይም በአንድ የተወሰነ የዶሊባርር ነገር (ደረሰኝ፣ ትዕዛዝ፣ ...) ላይ ለክፍያ ሊያገለግል ይችላል። +FollowingUrlAreAvailableToMakePayments=የሚከተሉት ዩአርኤሎች በዶሊባርር ዕቃዎች ላይ ክፍያ ለመፈጸም ለደንበኛ አንድ ገጽ ለማቅረብ ይገኛሉ +PaymentForm=የክፍያ ቅጽ +WelcomeOnPaymentPage=ወደ የመስመር ላይ ክፍያ አገልግሎታችን እንኳን በደህና መጡ +ThisScreenAllowsYouToPay=ይህ ስክሪን ለ%s የመስመር ላይ ክፍያ እንድትከፍል ያስችልሃል። +ThisIsInformationOnPayment=ይህ በክፍያ ላይ መረጃ ነው +ToComplete=ለማጠናቀቅ +YourEMail=የክፍያ ማረጋገጫ ለመቀበል ኢሜይል ያድርጉ +Creditor=አበዳሪ +PaymentCode=የክፍያ ኮድ +PayBoxDoPayment=በ Paybox ይክፈሉ። +YouWillBeRedirectedOnPayBox=የክሬዲት ካርድ መረጃን ለማስገባት ደህንነቱ በተጠበቀው የ Paybox ገጽ ላይ ይዛወራሉ። +Continue=ቀጥሎ +SetupPayBoxToHavePaymentCreatedAutomatically=የክፍያ ሳጥንዎን በ url %s ለመክፈል በራስ-ሰር ሲፈጠር ያዋቅሩ። በ Paybox የተረጋገጠ። +YourPaymentHasBeenRecorded=ይህ ገጽ ክፍያዎ መመዝገቡን ያረጋግጣል። አመሰግናለሁ. +YourPaymentHasNotBeenRecorded=ክፍያዎ አልተመዘገበም እና ግብይቱ ተሰርዟል። አመሰግናለሁ. +AccountParameter=የመለያ መለኪያዎች +UsageParameter=የአጠቃቀም መለኪያዎች +InformationToFindParameters=የእርስዎን %s መለያ መረጃ ለማግኘት ያግዙ +PAYBOX_CGI_URL_V2=የ Paybox CGI ሞጁል ዩአርኤል ለክፍያ +CSSUrlForPaymentForm=ለክፍያ ቅጽ የCSS ቅጥ ሉህ ዩአርኤል +NewPayboxPaymentReceived=አዲስ የ Paybox ክፍያ ተቀብሏል። +NewPayboxPaymentFailed=አዲስ የ Paybox ክፍያ ሞክሮ አልተሳካም። +PAYBOX_PAYONLINE_SENDEMAIL=ከክፍያ ሙከራ በኋላ የኢሜል ማሳወቂያ (ስኬት ወይም ውድቀት) +PAYBOX_PBX_SITE=ለPBX SITE ዋጋ +PAYBOX_PBX_RANG=የPBX Rang ዋጋ +PAYBOX_PBX_IDENTIFIANT=ለPBX መታወቂያ ዋጋ +PAYBOX_HMAC_KEY=HMAC ቁልፍ diff --git a/htdocs/langs/am_ET/paypal.lang b/htdocs/langs/am_ET/paypal.lang index 5eb5f389445..9c1f88b3356 100644 --- a/htdocs/langs/am_ET/paypal.lang +++ b/htdocs/langs/am_ET/paypal.lang @@ -1,36 +1,37 @@ # Dolibarr language file - Source file is en_US - paypal -PaypalSetup=PayPal module setup -PaypalDesc=This module allows payment by customers via PayPal. This can be used for a ad-hoc payment or for a payment related to a Dolibarr object (invoice, order, ...) -PaypalOrCBDoPayment=Pay with PayPal (Card or PayPal) -PaypalDoPayment=Pay with PayPal -PAYPAL_API_SANDBOX=Mode test/sandbox -PAYPAL_API_USER=API username -PAYPAL_API_PASSWORD=API password -PAYPAL_API_SIGNATURE=API signature -PAYPAL_SSLVERSION=Curl SSL Version -PAYPAL_API_INTEGRAL_OR_PAYPALONLY=Offer "integral" payment (Credit card+PayPal) or "PayPal" only -PaypalModeIntegral=Integral -PaypalModeOnlyPaypal=PayPal only -ONLINE_PAYMENT_CSS_URL=Optional URL of CSS stylesheet on online payment page -ThisIsTransactionId=This is id of transaction: %s -PAYPAL_ADD_PAYMENT_URL=Include the PayPal payment url when you send a document by email -NewOnlinePaymentReceived=New online payment received -NewOnlinePaymentFailed=New online payment tried but failed -ONLINE_PAYMENT_SENDEMAIL=Email address for notifications after each payment attempt (for success and fail) -ReturnURLAfterPayment=Return URL after payment -ValidationOfOnlinePaymentFailed=Validation of online payment failed -PaymentSystemConfirmPaymentPageWasCalledButFailed=Payment confirmation page was called by payment system returned an error -SetExpressCheckoutAPICallFailed=SetExpressCheckout API call failed. -DoExpressCheckoutPaymentAPICallFailed=DoExpressCheckoutPayment API call failed. -DetailedErrorMessage=Detailed Error Message -ShortErrorMessage=Short Error Message -ErrorCode=Error Code -ErrorSeverityCode=Error Severity Code -OnlinePaymentSystem=Online payment system -PaypalLiveEnabled=PayPal "live" mode enabled (otherwise test/sandbox mode) -PaypalImportPayment=Import PayPal payments -PostActionAfterPayment=Post actions after payments -ARollbackWasPerformedOnPostActions=A rollback was performed on all Post actions. You must complete post actions manually if they are necessary. -ValidationOfPaymentFailed=Validation of payment has failed -CardOwner=Card holder -PayPalBalance=Paypal credit +PaypalSetup=የ PayPal ሞጁል ማዋቀር +PaypalDesc=ይህ ሞጁል በደንበኞች በPayPal በኩል ክፍያ ይፈቅዳል። ይህ ለማስታወቂያ-ሆክ ክፍያ ወይም ከዶሊባርር ነገር ጋር ለተዛመደ ክፍያ (ክፍያ መጠየቂያ፣ ትዕዛዝ፣ ...) ጥቅም ላይ ሊውል ይችላል። +PaypalOrCBDoPayment=በ PayPal (ካርድ ወይም PayPal) ይክፈሉ +PaypalDoPayment=በ PayPal ይክፈሉ። +PAYPAL_API_SANDBOX=ሁነታ ሙከራ/ማጠሪያ +PAYPAL_API_USER=የኤፒአይ ተጠቃሚ ስም +PAYPAL_API_PASSWORD=የኤፒአይ ይለፍ ቃል +PAYPAL_API_SIGNATURE=የኤፒአይ ፊርማ +PAYPAL_SSLVERSION=Curl SSL ስሪት +PAYPAL_API_INTEGRAL_OR_PAYPALONLY="የተዋሃደ" ክፍያ (ክሬዲት ካርድ+PayPal) ወይም "PayPal" ብቻ ያቅርቡ +PaypalModeIntegral=የተዋሃደ +PaypalModeOnlyPaypal=PayPal ብቻ +ONLINE_PAYMENT_CSS_URL=በመስመር ላይ የክፍያ ገጽ ላይ የሲኤስኤስ የቅጥ ሉህ አማራጭ ዩአርኤል +ThisIsTransactionId=ይህ የግብይት መታወቂያ ነው፡ %s +PAYPAL_ADD_PAYMENT_URL=ሰነድ በኢሜል ሲልኩ የ PayPal ክፍያ ዩአርኤልን ያካትቱ +NewOnlinePaymentReceived=አዲስ የመስመር ላይ ክፍያ ደረሰ +NewOnlinePaymentFailed=አዲስ የመስመር ላይ ክፍያ ሞክሮ አልተሳካም። +ONLINE_PAYMENT_SENDEMAIL=ከእያንዳንዱ የክፍያ ሙከራ በኋላ ለማሳወቂያዎች የኢሜይል አድራሻ (ለስኬት እና ውድቀት) +ReturnURLAfterPayment=ከተከፈለ በኋላ ዩአርኤልን ይመልሱ +ValidationOfOnlinePaymentFailed=የመስመር ላይ ክፍያን ማረጋገጥ አልተሳካም። +PaymentSystemConfirmPaymentPageWasCalledButFailed=የክፍያ ማረጋገጫ ገጽ በክፍያ ሥርዓት ተጠርቷል ስህተት መለሰ +SetExpressCheckoutAPICallFailed=SetExpressCheckout API ጥሪ አልተሳካም። +DoExpressCheckoutPaymentAPICallFailed=የDoExpressCheckoutPayment API ጥሪ አልተሳካም። +DetailedErrorMessage=ዝርዝር የስህተት መልእክት +ShortErrorMessage=አጭር የስህተት መልእክት +ErrorCode=የስህተት ኮድ +ErrorSeverityCode=የክብደት ኮድ ስህተት +OnlinePaymentSystem=የመስመር ላይ የክፍያ ስርዓት +PaypalLiveEnabled=የ PayPal "ቀጥታ" ሁነታ ነቅቷል (አለበለዚያ የሙከራ/ማጠሪያ ሁነታ) +PaypalImportPayment=የፔይፓል ክፍያዎችን ያስመጡ +PostActionAfterPayment=ከክፍያ በኋላ እርምጃዎችን ይለጥፉ +ARollbackWasPerformedOnPostActions=በሁሉም የልጥፍ ድርጊቶች ላይ የመልሶ ማቋቋም ስራ ተሰርቷል። አስፈላጊ ከሆነ ድርጊቶችን እራስዎ ማጠናቀቅ አለብዎት. +ValidationOfPaymentFailed=ክፍያን ማረጋገጥ አልተሳካም። +CardOwner=ካርድ ያዥ +PayPalBalance=Paypal ክሬዲት +OnlineSubscriptionPaymentLine=Online subscription recorded on %s
Paid via %s
Originating IP address: %s
Transaction ID: %s diff --git a/htdocs/langs/am_ET/printing.lang b/htdocs/langs/am_ET/printing.lang index bd9094f213d..521e43ecb90 100644 --- a/htdocs/langs/am_ET/printing.lang +++ b/htdocs/langs/am_ET/printing.lang @@ -1,54 +1,54 @@ # Dolibarr language file - Source file is en_US - printing -Module64000Name=One click Printing -Module64000Desc=Enable One click Printing System -PrintingSetup=Setup of One click Printing System -PrintingDesc=This module adds a Print button to various modules to allow documents to be printed directly to a printer with no need to open the document into another application. -MenuDirectPrinting=One click Printing jobs -DirectPrint=One click Print -PrintingDriverDesc=Configuration variables for printing driver. -ListDrivers=List of drivers -PrintTestDesc=List of Printers. -FileWasSentToPrinter=File %s was sent to printer -ViaModule=via the module -NoActivePrintingModuleFound=No active driver to print document. Check setup of module %s. -PleaseSelectaDriverfromList=Please select a driver from list. -PleaseConfigureDriverfromList=Please configure the selected driver from list. -SetupDriver=Driver setup -TargetedPrinter=Targeted printer -UserConf=Setup per user -PRINTGCP_INFO=Google OAuth API setup -PRINTGCP_AUTHLINK=Authentication -PRINTGCP_TOKEN_ACCESS=Google Cloud Print OAuth Token -PrintGCPDesc=This driver allows sending documents directly to a printer using Google Cloud Print. -GCP_Name=Name -GCP_displayName=Display Name -GCP_Id=Printer Id -GCP_OwnerName=Owner Name -GCP_State=Printer State -GCP_connectionStatus=Online State -GCP_Type=Printer Type -PrintIPPDesc=This driver allows sending of documents directly to a printer. It requires a Linux system with CUPS installed. -PRINTIPP_HOST=Print server -PRINTIPP_PORT=Port -PRINTIPP_USER=Login -PRINTIPP_PASSWORD=Password -NoDefaultPrinterDefined=No default printer defined -DefaultPrinter=Default printer -Printer=Printer -IPP_Uri=Printer Uri -IPP_Name=Printer Name -IPP_State=Printer State -IPP_State_reason=State reason -IPP_State_reason1=State reason1 +Module64000Name=አንድ ጠቅታ ማተም +Module64000Desc=የአንድ ጠቅታ ማተሚያ ስርዓትን አንቃ +PrintingSetup=የአንድ ጠቅታ ማተሚያ ስርዓት ማዋቀር +PrintingDesc=ይህ ሞጁል ሰነዱን ወደ ሌላ መተግበሪያ መክፈት ሳያስፈልገው ሰነዶች በቀጥታ ወደ አታሚ እንዲታተም በተለያዩ ሞጁሎች ላይ የህትመት ቁልፍን ይጨምራል። +MenuDirectPrinting=አንድ ጠቅታ የማተም ስራዎች +DirectPrint=አንድ ጠቅታ አትም +PrintingDriverDesc=ለህትመት ሾፌር የማዋቀር ተለዋዋጮች። +ListDrivers=የአሽከርካሪዎች ዝርዝር +PrintTestDesc=የአታሚዎች ዝርዝር. +FileWasSentToPrinter=ፋይል %s ወደ አታሚ ተልኳል +ViaModule=በሞጁሉ በኩል +NoActivePrintingModuleFound=ሰነድ ለማተም ንቁ አሽከርካሪ የለም። የሞጁሉን ማዋቀር ይመልከቱ %s። +PleaseSelectaDriverfromList=እባክዎን ከዝርዝሩ ውስጥ ሹፌር ይምረጡ። +PleaseConfigureDriverfromList=እባክዎ የተመረጠውን ሾፌር ከዝርዝር ውስጥ ያዋቅሩት። +SetupDriver=የአሽከርካሪ ማዋቀር +TargetedPrinter=የታለመ አታሚ +UserConf=ማዋቀር በተጠቃሚ +PRINTGCP_INFO=Google OAuth API ማዋቀር +PRINTGCP_AUTHLINK=ማረጋገጫ +PRINTGCP_TOKEN_ACCESS=ጉግል ደመና ህትመት OAuth ማስመሰያ +PrintGCPDesc=ይህ አሽከርካሪ Google Cloud Print በመጠቀም ሰነዶችን በቀጥታ ወደ አታሚ መላክ ይፈቅዳል። +GCP_Name=ስም +GCP_displayName=መጠሪያው ስም +GCP_Id=የአታሚ መታወቂያ +GCP_OwnerName=የባለቤቱ ስም +GCP_State=የአታሚ ግዛት +GCP_connectionStatus=የመስመር ላይ ግዛት +GCP_Type=የአታሚ ዓይነት +PrintIPPDesc=ይህ አሽከርካሪ ሰነዶችን በቀጥታ ወደ አታሚ መላክ ይፈቅዳል። CUPS የተጫነበት የሊኑክስ ሲስተም ያስፈልገዋል። +PRINTIPP_HOST=የህትመት አገልጋይ +PRINTIPP_PORT=ወደብ +PRINTIPP_USER=ግባ +PRINTIPP_PASSWORD=የይለፍ ቃል +NoDefaultPrinterDefined=ምንም ነባሪ አታሚ አልተገለጸም። +DefaultPrinter=ነባሪ አታሚ +Printer=አታሚ +IPP_Uri=አታሚ ዩሪ +IPP_Name=የአታሚ ስም +IPP_State=የአታሚ ግዛት +IPP_State_reason=የግዛት ምክንያት +IPP_State_reason1=የግዛት ምክንያት1 IPP_BW=BW -IPP_Color=Color -IPP_Device=Device -IPP_Media=Printer media -IPP_Supported=Type of media -DirectPrintingJobsDesc=This page lists printing jobs found for available printers. -GoogleAuthNotConfigured=Google OAuth has not been setup. Enable module OAuth and set a Google ID/Secret. -GoogleAuthConfigured=Google OAuth credentials were found into setup of module OAuth. -PrintingDriverDescprintgcp=Configuration variables for printing driver Google Cloud Print. -PrintingDriverDescprintipp=Configuration variables for printing driver Cups. -PrintTestDescprintgcp=List of Printers for Google Cloud Print. -PrintTestDescprintipp=List of Printers for Cups. +IPP_Color=ቀለም +IPP_Device=መሳሪያ +IPP_Media=የአታሚ ሚዲያ +IPP_Supported=የሚዲያ ዓይነት +DirectPrintingJobsDesc=ይህ ገጽ ላሉ አታሚዎች የተገኙ የማተሚያ ሥራዎችን ይዘረዝራል። +GoogleAuthNotConfigured=Google OAuth አልተዋቀረም። ሞዱል OAuthን አንቃ እና የGoogle መታወቂያ/ሚስጥርን አዘጋጅ። +GoogleAuthConfigured=የGoogle OAuth ምስክርነቶች በሞጁል OAuth ማዋቀር ውስጥ ተገኝተዋል። +PrintingDriverDescprintgcp=የጎግል ክላውድ ህትመት ነጂዎችን ለማተም የውቅር ተለዋዋጮች። +PrintingDriverDescprintipp=የአሽከርካሪ ኩባያዎችን ለማተም የማዋቀር ተለዋዋጮች። +PrintTestDescprintgcp=ለGoogle ደመና ህትመት የአታሚዎች ዝርዝር። +PrintTestDescprintipp=ለ ኩባያዎች የአታሚዎች ዝርዝር. diff --git a/htdocs/langs/am_ET/productbatch.lang b/htdocs/langs/am_ET/productbatch.lang index ddf3eab9f3f..921c527f0aa 100644 --- a/htdocs/langs/am_ET/productbatch.lang +++ b/htdocs/langs/am_ET/productbatch.lang @@ -1,45 +1,52 @@ # ProductBATCH language file - Source file is en_US - ProductBATCH -ManageLotSerial=Use lot/serial number -ProductStatusOnBatch=Yes (lot required) -ProductStatusOnSerial=Yes (unique serial number required) -ProductStatusNotOnBatch=No (lot/serial not used) -ProductStatusOnBatchShort=Lot -ProductStatusOnSerialShort=Serial -ProductStatusNotOnBatchShort=No -Batch=Lot/Serial -atleast1batchfield=Eat-by date or Sell-by date or Lot/Serial number -batch_number=Lot/Serial number -BatchNumberShort=Lot/Serial -EatByDate=Eat-by date -SellByDate=Sell-by date -DetailBatchNumber=Lot/Serial details -printBatch=Lot/Serial: %s -printEatby=Eat-by: %s -printSellby=Sell-by: %s -printQty=Qty: %d -AddDispatchBatchLine=Add a line for Shelf Life dispatching -WhenProductBatchModuleOnOptionAreForced=When module Lot/Serial is on, automatic stock decrease is forced to 'Decrease real stocks on shipping validation' and automatic increase mode is forced to 'Increase real stocks on manual dispatching into warehouses' and can't be edited. Other options can be defined as you want. -ProductDoesNotUseBatchSerial=This product does not use lot/serial number -ProductLotSetup=Setup of module lot/serial -ShowCurrentStockOfLot=Show current stock for couple product/lot -ShowLogOfMovementIfLot=Show log of movements for couple product/lot -StockDetailPerBatch=Stock detail per lot -SerialNumberAlreadyInUse=Serial number %s is already used for product %s -TooManyQtyForSerialNumber=You can only have one product %s for serial number %s -ManageLotMask=Custom mask -CustomMasks=Option to define a different numbering mask for each product -BatchLotNumberingModules=Numbering rule for automatic generation of lot number -BatchSerialNumberingModules=Numbering rule for automatic generation of serial number (for products with property 1 unique lot/serial for each product) -QtyToAddAfterBarcodeScan=Qty to %s for each barcode/lot/serial scanned -LifeTime=Life span (in days) -EndOfLife=End of life -ManufacturingDate=Manufacturing date -DestructionDate=Destruction date -FirstUseDate=First use date -QCFrequency=Quality control frequency (in days) -ShowAllLots=Show all lots -HideLots=Hide lots +ManageLotSerial=ዕጣ/ተከታታይ ቁጥር ተጠቀም +ProductStatusOnBatch=አዎ (ብዙ ያስፈልጋል) +ProductStatusOnSerial=አዎ (ልዩ መለያ ቁጥር ያስፈልጋል) +ProductStatusNotOnBatch=የለም (ሎት/ተከታታይ ጥቅም ላይ አልዋለም) +ProductStatusOnBatchShort=ሎጥ +ProductStatusOnSerialShort=ተከታታይ +ProductStatusNotOnBatchShort=አይ +BatchSellOrEatByMandatoryList=Make %s or %s mandatory +BatchSellOrEatByMandatoryNone=None +BatchSellOrEatByMandatoryAll=%s and %s +Batch=ሎጥ / ተከታታይ +atleast1batchfield=በቀን መብላት ወይም በቀን የሚሸጥ ወይም ሎጥ/መለያ ቁጥር +batch_number=ሎጥ / ተከታታይ ቁጥር +BatchNumberShort=ሎጥ / ተከታታይ +EatByDate=በቀን መመገብ +SellByDate=የሚሸጥ ቀን +DetailBatchNumber=ሎጥ / ተከታታይ ዝርዝሮች +printBatch=ሎት/ተከታታይ፡ %s +printEatby=መብል፡ %s +printSellby=የሚሸጥ፡ %s +printQty=ብዛት፡ %d +printPlannedWarehouse=መጋዘን፡ %s +AddDispatchBatchLine=ለመደርደሪያ ሕይወት መላኪያ መስመር ያክሉ +WhenProductBatchModuleOnOptionAreForced=ሞጁል ሎት/ተከታታይ ሲበራ፣ አውቶማቲክ የአክሲዮን ቅነሳ ወደ '%s' ይገደዳል እና ራስ-ሰር ጭማሪ ሁነታ '%s ይገደዳል። ' . አንዳንድ ምርጫዎች ላይገኙ ይችላሉ። ሌሎች አማራጮች እርስዎ እንደሚፈልጉት ሊገለጹ ይችላሉ. +ProductDoesNotUseBatchSerial=ይህ ምርት ዕጣ/ተከታታይ ቁጥር አይጠቀምም። +ProductLotSetup=የሞጁል ዕጣ/ተከታታይ ማዋቀር +ShowCurrentStockOfLot=ለጥንዶች ምርት/ሎት የአሁኑን ክምችት አሳይ +ShowLogOfMovementIfLot=ለጥንዶች ምርት/ሎት የእንቅስቃሴ ምዝግብ ማስታወሻ አሳይ +StockDetailPerBatch=የአክሲዮን ዝርዝር በዕጣ +SerialNumberAlreadyInUse=መለያ ቁጥር %s አስቀድሞ ለምርት %s ጥቅም ላይ ውሏል። +TooManyQtyForSerialNumber=አንድ ምርት ብቻ ነው ሊኖርህ የሚችለው %s ለመለያ ቁጥር %s +ManageLotMask=ብጁ ጭንብል +CustomMasks=ለእያንዳንዱ ምርት የተለየ የቁጥር ጭንብል ለመወሰን አማራጭ +BatchLotNumberingModules=የሎተሪ ቁጥርን በራስ-ሰር ለማመንጨት የቁጥር መመሪያ +BatchSerialNumberingModules=የመለያ ቁጥር በራስ ሰር ለማመንጨት የቁጥር መመሪያ (ለእያንዳንዱ ምርት 1 ልዩ ዕጣ/ተከታታይ ንብረት ላላቸው ምርቶች) +QtyToAddAfterBarcodeScan=Qty to %s ለእያንዳንዱ ባርኮድ/ሎት/ተከታታይ ስካን +LifeTime=የህይወት ዘመን (በቀናት) +EndOfLife=የህይወት መጨረሻ +ManufacturingDate=የምርት ቀን +DestructionDate=የመጥፋት ቀን +FirstUseDate=የመጀመሪያ አጠቃቀም ቀን +QCFrequency=የጥራት ቁጥጥር ድግግሞሽ (በቀናት) +ShowAllLots=ሁሉንም ብዙ አሳይ +HideLots=ብዙ ደብቅ #Traceability - qc status -OutOfOrder=Out of order -InWorkingOrder=In working order -ToReplace=Replace +OutOfOrder=ከትዕዛዝ ውጪ +InWorkingOrder=በስራ ቅደም ተከተል +ToReplace=ተካ +CantMoveNonExistantSerial=ስህተት ከአሁን በኋላ ለሌለው ተከታታይ መዝገብ ለመንቀሳቀስ ትጠይቃለህ። ተመሳሳዩን ተከታታይ መጋዘን በተመሳሳይ ጭነት ውስጥ ብዙ ጊዜ ወስደህ ሊሆን ይችላል ወይም በሌላ ጭነት ተጠቅሞ ሊሆን ይችላል። ይህንን ጭነት ያስወግዱ እና ሌላ ያዘጋጁ። +TableLotIncompleteRunRepairWithParamStandardEqualConfirmed=የሎጥ ጠረጴዛ ያልተሟላ የሩጫ ጥገና በመለኪያ '...repair.php?standard=የተረጋገጠ' +IlligalQtyForSerialNumbers= የአክሲዮን እርማት ያስፈልጋል ምክንያቱም ልዩ መለያ ቁጥር። diff --git a/htdocs/langs/am_ET/products.lang b/htdocs/langs/am_ET/products.lang index 14715670882..99c9e40291b 100644 --- a/htdocs/langs/am_ET/products.lang +++ b/htdocs/langs/am_ET/products.lang @@ -1,413 +1,438 @@ # Dolibarr language file - Source file is en_US - products -ProductRef=Product ref. -ProductLabel=Product label -ProductLabelTranslated=Translated product label -ProductDescription=Product description -ProductDescriptionTranslated=Translated product description -ProductNoteTranslated=Translated product note -ProductServiceCard=Products/Services card -TMenuProducts=Products -TMenuServices=Services -Products=Products -Services=Services -Product=Product -Service=Service -ProductId=Product/service id -Create=Create -Reference=Reference -NewProduct=New product -NewService=New service -ProductVatMassChange=Global VAT Update +ProductRef=የምርት ማጣቀሻ. +ProductLabel=የምርት መለያ +ProductLabelTranslated=የተተረጎመ የምርት መለያ +ProductDescription=የምርት ማብራሪያ +ProductDescriptionTranslated=የተተረጎመ የምርት መግለጫ +ProductNoteTranslated=የተተረጎመ የምርት ማስታወሻ +ProductServiceCard=ምርቶች / አገልግሎቶች ካርድ +TMenuProducts=ምርቶች +TMenuServices=አገልግሎቶች +Products=ምርቶች +Services=አገልግሎቶች +Product=ምርት +Service=አገልግሎት +ProductId=የምርት/አገልግሎት መታወቂያ +Create=ፍጠር +Reference=ማጣቀሻ +NewProduct=አዲስ ምርት +NewService=አዲስ አገልግሎት +ProductVatMassChange=ዓለም አቀፍ የተጨማሪ እሴት ታክስ ዝማኔ ProductVatMassChangeDesc=This tool updates the VAT rate defined on ALL products and services! -MassBarcodeInit=Mass barcode init -MassBarcodeInitDesc=This page can be used to initialize a barcode on objects that does not have barcode defined. Check before that setup of module barcode is complete. -ProductAccountancyBuyCode=Accounting code (purchase) -ProductAccountancyBuyIntraCode=Accounting code (purchase intra-community) -ProductAccountancyBuyExportCode=Accounting code (purchase import) -ProductAccountancySellCode=Accounting code (sale) -ProductAccountancySellIntraCode=Accounting code (sale intra-Community) -ProductAccountancySellExportCode=Accounting code (sale export) -ProductOrService=Product or Service -ProductsAndServices=Products and Services -ProductsOrServices=Products or Services -ProductsPipeServices=Products | Services -ProductsOnSale=Products for sale -ProductsOnPurchase=Products for purchase -ProductsOnSaleOnly=Products for sale only -ProductsOnPurchaseOnly=Products for purchase only -ProductsNotOnSell=Products not for sale and not for purchase -ProductsOnSellAndOnBuy=Products for sale and for purchase -ServicesOnSale=Services for sale -ServicesOnPurchase=Services for purchase -ServicesOnSaleOnly=Services for sale only -ServicesOnPurchaseOnly=Services for purchase only -ServicesNotOnSell=Services not for sale and not for purchase -ServicesOnSellAndOnBuy=Services for sale and for purchase -LastModifiedProductsAndServices=Latest %s products/services which were modified -LastRecordedProducts=Latest %s recorded products -LastRecordedServices=Latest %s recorded services -CardProduct0=Product -CardProduct1=Service -Stock=Stock -MenuStocks=Stocks -Stocks=Stocks and location (warehouse) of products -Movements=Movements -Sell=Sell -Buy=Purchase -OnSell=For sale -OnBuy=For purchase -NotOnSell=Not for sale -ProductStatusOnSell=For sale -ProductStatusNotOnSell=Not for sale -ProductStatusOnSellShort=For sale -ProductStatusNotOnSellShort=Not for sale -ProductStatusOnBuy=For purchase -ProductStatusNotOnBuy=Not for purchase -ProductStatusOnBuyShort=For purchase -ProductStatusNotOnBuyShort=Not for purchase -UpdateVAT=Update vat -UpdateDefaultPrice=Update default price -UpdateLevelPrices=Update prices for each level -AppliedPricesFrom=Applied from -SellingPrice=Selling price -SellingPriceHT=Selling price (excl. tax) -SellingPriceTTC=Selling price (inc. tax) -SellingMinPriceTTC=Minimum Selling price (inc. tax) -CostPriceDescription=This price field (excl. tax) can be used to capture the average amount this product costs to your company. It may be any price you calculate yourself, for example, from the average buying price plus average production and distribution cost. -CostPriceUsage=This value could be used for margin calculation. -ManufacturingPrice=Manufacturing price -SoldAmount=Sold amount -PurchasedAmount=Purchased amount -NewPrice=New price -MinPrice=Min. selling price -EditSellingPriceLabel=Edit selling price label -CantBeLessThanMinPrice=The selling price can't be lower than minimum allowed for this product (%s without tax). This message can also appears if you type a too important discount. -ContractStatusClosed=Closed -ErrorProductAlreadyExists=A product with reference %s already exists. -ErrorProductBadRefOrLabel=Wrong value for reference or label. -ErrorProductClone=There was a problem while trying to clone the product or service. -ErrorPriceCantBeLowerThanMinPrice=Error, price can't be lower than minimum price. -Suppliers=Vendors -SupplierRef=Vendor SKU -ShowProduct=Show product -ShowService=Show service -ProductsAndServicesArea=Product and Services area -ProductsArea=Product area -ServicesArea=Services area -ListOfStockMovements=List of stock movements -BuyingPrice=Buying price -PriceForEachProduct=Products with specific prices -SupplierCard=Vendor card -PriceRemoved=Price removed -BarCode=Barcode -BarcodeType=Barcode type -SetDefaultBarcodeType=Set barcode type -BarcodeValue=Barcode value -NoteNotVisibleOnBill=Note (not visible on invoices, proposals...) -ServiceLimitedDuration=If product is a service with limited duration: -FillWithLastServiceDates=Fill with last service line dates -MultiPricesAbility=Multiple price segments per product/service (each customer is in one price segment) -MultiPricesNumPrices=Number of prices -DefaultPriceType=Base of prices per default (with versus without tax) when adding new sale prices -AssociatedProductsAbility=Enable Kits (set of several products) -VariantsAbility=Enable Variants (variations of products, for example color, size) -AssociatedProducts=Kits -AssociatedProductsNumber=Number of products composing this kit -ParentProductsNumber=Number of parent packaging product -ParentProducts=Parent products -IfZeroItIsNotAVirtualProduct=If 0, this product is not a kit -IfZeroItIsNotUsedByVirtualProduct=If 0, this product is not used by any kit -KeywordFilter=Keyword filter -CategoryFilter=Category filter -ProductToAddSearch=Search product to add -NoMatchFound=No match found -ListOfProductsServices=List of products/services -ProductAssociationList=List of products/services that are component(s) of this kit -ProductParentList=List of kits with this product as a component -ErrorAssociationIsFatherOfThis=One of selected product is parent with current product -DeleteProduct=Delete a product/service -ConfirmDeleteProduct=Are you sure you want to delete this product/service? -ProductDeleted=Product/Service "%s" deleted from database. -ExportDataset_produit_1=Products -ExportDataset_service_1=Services -ImportDataset_produit_1=Products -ImportDataset_service_1=Services -DeleteProductLine=Delete product line -ConfirmDeleteProductLine=Are you sure you want to delete this product line? -ProductSpecial=Special -QtyMin=Min. purchase quantity -PriceQtyMin=Price quantity min. -PriceQtyMinCurrency=Price (currency) for this qty. (no discount) -VATRateForSupplierProduct=VAT Rate (for this vendor/product) -DiscountQtyMin=Discount for this qty. -NoPriceDefinedForThisSupplier=No price/qty defined for this vendor/product -NoSupplierPriceDefinedForThisProduct=No vendor price/qty defined for this product -PredefinedItem=Predefined item -PredefinedProductsToSell=Predefined Product -PredefinedServicesToSell=Predefined Service -PredefinedProductsAndServicesToSell=Predefined products/services to sell -PredefinedProductsToPurchase=Predefined product to purchase -PredefinedServicesToPurchase=Predefined services to purchase -PredefinedProductsAndServicesToPurchase=Predefined products/services to purchase -NotPredefinedProducts=Not predefined products/services -GenerateThumb=Generate thumb -ServiceNb=Service #%s -ListProductServiceByPopularity=List of products/services by popularity -ListProductByPopularity=List of products by popularity -ListServiceByPopularity=List of services by popularity -Finished=Manufactured product -RowMaterial=Raw Material +MassBarcodeInit=የጅምላ ባርኮድ መግቢያ +MassBarcodeInitDesc=ይህ ገጽ የአሞሌ ኮድ በሌለባቸው ነገሮች ላይ ባርኮድ ለመጀመር ሊያገለግል ይችላል። የሞጁል ባርኮድ ማዋቀር ከመጠናቀቁ በፊት ያረጋግጡ። +ProductAccountancyBuyCode=የሂሳብ ኮድ (ግዢ) +ProductAccountancyBuyIntraCode=የሂሳብ ኮድ (በማህበረሰብ ውስጥ ይግዙ) +ProductAccountancyBuyExportCode=የሂሳብ ኮድ (የግዢ ማስመጣት) +ProductAccountancySellCode=የሂሳብ ኮድ (ሽያጭ) +ProductAccountancySellIntraCode=የሂሳብ ኮድ (በማህበረሰብ ውስጥ የሚሸጥ) +ProductAccountancySellExportCode=የሂሳብ ኮድ (የሽያጭ ወደ ውጭ መላክ) +ProductOrService=ምርት ወይም አገልግሎት +ProductsAndServices=ምርቶች እና አገልግሎቶች +ProductsOrServices=ምርቶች ወይም አገልግሎቶች +ProductsPipeServices=ምርቶች | አገልግሎቶች +ProductsOnSale=የሚሸጡ ምርቶች +ProductsOnPurchase=ለግዢ ምርቶች +ProductsOnSaleOnly=የሚሸጡ ምርቶች ብቻ +ProductsOnPurchaseOnly=ምርቶች ለግዢ ብቻ +ProductsNotOnSell=ምርቶች አይሸጡም እና አይገዙም +ProductsOnSellAndOnBuy=ለሽያጭ እና ለግዢ ምርቶች +ServicesOnSale=ለሽያጭ አገልግሎቶች +ServicesOnPurchase=ለግዢ አገልግሎቶች +ServicesOnSaleOnly=አገልግሎቶች ለሽያጭ ብቻ +ServicesOnPurchaseOnly=አገልግሎቶች ለግዢ ብቻ +ServicesNotOnSell=አገልግሎቶች አይሸጡም እና አይገዙም +ServicesOnSellAndOnBuy=ለሽያጭ እና ለግዢ አገልግሎቶች +LastModifiedProductsAndServices=የተሻሻሉ የ%s ምርቶች/አገልግሎቶች +LastRecordedProducts=የቅርብ ጊዜ %s የተመዘገቡ ምርቶች +LastRecordedServices=የቅርብ ጊዜ %s የተመዘገቡ አገልግሎቶች +CardProduct0=ምርት +CardProduct1=አገልግሎት +Stock=አክሲዮን +MenuStocks=አክሲዮኖች +Stocks=የምርቶች አክሲዮኖች እና መገኛ (መጋዘን) +Movements=እንቅስቃሴዎች +Sell=መሸጥ +Buy=ግዢ +OnSell=የሚሸጥ ፡ ለሽያጭ የቀረበ +OnBuy=ለግዢ +NotOnSell=የሚሸጥ አይደለም። +ProductStatusOnSell=የሚሸጥ ፡ ለሽያጭ የቀረበ +ProductStatusNotOnSell=የሚሸጥ አይደለም። +ProductStatusOnSellShort=የሚሸጥ ፡ ለሽያጭ የቀረበ +ProductStatusNotOnSellShort=የሚሸጥ አይደለም። +ProductStatusOnBuy=ለግዢ +ProductStatusNotOnBuy=ለግዢ አይደለም +ProductStatusOnBuyShort=ለግዢ +ProductStatusNotOnBuyShort=ለግዢ አይደለም +UpdateVAT=ቫት አዘምን +UpdateDefaultPrice=ነባሪውን ዋጋ ያዘምኑ +UpdateLevelPrices=ለእያንዳንዱ ደረጃ ዋጋዎችን ያዘምኑ +AppliedPricesFrom=የተተገበረው ከ +SellingPrice=የመሸጫ ዋጋ +SellingPriceHT=የመሸጫ ዋጋ (ከግብር በስተቀር) +SellingPriceTTC=የመሸጫ ዋጋ (ግብርን ጨምሮ) +SellingMinPriceTTC=ዝቅተኛው የመሸጫ ዋጋ (ግብርን ጨምሮ) +CostPriceDescription=ይህ የዋጋ መስክ (ከግብር በስተቀር) ይህ ምርት ለድርጅትዎ የሚያወጣውን አማካይ መጠን ለመያዝ ሊያገለግል ይችላል። እራስዎን የሚያሰሉት ማንኛውም ዋጋ ሊሆን ይችላል, ለምሳሌ, ከአማካይ የግዢ ዋጋ እና አማካይ የምርት እና የስርጭት ዋጋ. +CostPriceUsage=ይህ እሴት ለኅዳግ ስሌት ጥቅም ላይ ሊውል ይችላል። +ManufacturingPrice=የማምረቻ ዋጋ +SoldAmount=የተሸጠው መጠን +PurchasedAmount=የተገዛው መጠን +NewPrice=አዲስ ዋጋ +MinPrice=ደቂቃ የመሸጫ ዋጋ +MinPriceHT=ደቂቃ የመሸጫ ዋጋ (ከግብር በስተቀር) +MinPriceTTC=ደቂቃ የመሸጫ ዋጋ (ግብርን ጨምሮ) +EditSellingPriceLabel=የዋጋ መለያን ያርትዑ +CantBeLessThanMinPrice=ለዚህ ምርት (%s ያለ ታክስ) የመሸጫ ዋጋው ከተፈቀደው ዝቅተኛው ያነሰ ሊሆን አይችልም። ከፍተኛ ቅናሽ ከተተይቡ ይህ መልእክትም ሊታይ ይችላል። +CantBeLessThanMinPriceInclTax=ለዚህ ምርት (%s ግብሮችን ጨምሮ) የመሸጫ ዋጋው ከተፈቀደው ዝቅተኛ ሊሆን አይችልም. በጣም አስፈላጊ የሆነ ቅናሽ ከተተይቡ ይህ መልእክትም ሊታይ ይችላል። +ContractStatusClosed=ዝግ +ErrorProductAlreadyExists=ማጣቀሻ %s ያለው ምርት አስቀድሞ አለ። +ErrorProductBadRefOrLabel=ለማጣቀሻ ወይም ለመሰየም የተሳሳተ እሴት። +ErrorProductClone=ምርቱን ወይም አገልግሎቱን ለመዝጋት በሚሞከርበት ጊዜ ችግር ነበር። +ErrorPriceCantBeLowerThanMinPrice=ስህተት፣ ዋጋው ከዝቅተኛው ዋጋ ያነሰ ሊሆን አይችልም። +Suppliers=ሻጮች +SupplierRef=ሻጭ SKU +ShowProduct=ምርት አሳይ +ShowService=አገልግሎት አሳይ +ProductsAndServicesArea=የምርት እና አገልግሎቶች አካባቢ +ProductsArea=የምርት አካባቢ +ServicesArea=የአገልግሎት አካባቢ +ListOfStockMovements=የአክሲዮን እንቅስቃሴዎች ዝርዝር +BuyingPrice=የግዢ ዋጋ +PriceForEachProduct=የተወሰኑ ዋጋዎች ያላቸው ምርቶች +SupplierCard=የአቅራቢ ካርድ +PriceRemoved=ዋጋ ተወግዷል +BarCode=የአሞሌ ኮድ +BarcodeType=የአሞሌ ኮድ አይነት +SetDefaultBarcodeType=የአሞሌ ኮድ አይነት ያዘጋጁ +BarcodeValue=የአሞሌ ኮድ እሴት +NoteNotVisibleOnBill=ማስታወሻ (በክፍያ መጠየቂያዎች ላይ አይታይም, ፕሮፖዛል ...) +ServiceLimitedDuration=ምርቱ የተወሰነ ጊዜ ያለው አገልግሎት ከሆነ፡- +FillWithLastServiceDates=በመጨረሻው የአገልግሎት መስመር ቀናት ይሙሉ +MultiPricesAbility=ብዙ የዋጋ ክፍሎች በአንድ ምርት/አገልግሎት (እያንዳንዱ ደንበኛ በአንድ የዋጋ ክፍል ውስጥ ነው) +MultiPricesNumPrices=የዋጋዎች ብዛት +DefaultPriceType=አዲስ የሽያጭ ዋጋዎችን ሲጨምሩ በነባሪ የዋጋዎች መሰረት (ከታክስ ያለ ታክስ ጋር) +AssociatedProductsAbility=Kitsን አንቃ (የበርካታ ምርቶች ስብስብ) +VariantsAbility=ተለዋጮችን አንቃ (የምርት ልዩነቶች፣ ለምሳሌ ቀለም፣ መጠን) +AssociatedProducts=ኪትስ +AssociatedProductsNumber=ይህንን ኪት ያቀፈ ምርቶች ብዛት +ParentProductsNumber=የወላጅ ማሸጊያ ምርት ብዛት +ParentProducts=የወላጅ ምርቶች +IfZeroItIsNotAVirtualProduct=0 ከሆነ ይህ ምርት ኪት አይደለም። +IfZeroItIsNotUsedByVirtualProduct=0 ከሆነ, ይህ ምርት በማንኛውም ኪት ጥቅም ላይ አይውልም +KeywordFilter=ቁልፍ ቃል ማጣሪያ +CategoryFilter=ምድብ ማጣሪያ +ProductToAddSearch=ለማከል ምርት ይፈልጉ +NoMatchFound=ምንም ተዛማጅ አልተገኘም። +ListOfProductsServices=ምርቶች / አገልግሎቶች ዝርዝር +ProductAssociationList=የዚህ ኪት አካል(ዎች) የሆኑ ምርቶች/አገልግሎቶች ዝርዝር +ProductParentList=የዚህ ምርት አካል የሆኑ የኪት ዝርዝር +ErrorAssociationIsFatherOfThis=ከተመረጡት ምርቶች ውስጥ አንዱ የአሁኑ ምርት ያላቸው ወላጅ ናቸው። +DeleteProduct=አንድ ምርት/አገልግሎት ሰርዝ +ConfirmDeleteProduct=እርግጠኛ ነዎት ይህን ምርት/አገልግሎት መሰረዝ ይፈልጋሉ? +ProductDeleted=ምርት/አገልግሎት "%s" ከመረጃ ቋት ተሰርዟል። +ExportDataset_produit_1=ምርቶች +ExportDataset_service_1=አገልግሎቶች +ImportDataset_produit_1=ምርቶች +ImportDataset_service_1=አገልግሎቶች +DeleteProductLine=የምርት መስመርን ሰርዝ +ConfirmDeleteProductLine=እርግጠኛ ነዎት ይህን የምርት መስመር መሰረዝ ይፈልጋሉ? +ProductSpecial=ልዩ +QtyMin=ደቂቃ የግዢ መጠን +PriceQtyMin=የዋጋ ብዛት ደቂቃ +PriceQtyMinCurrency=ዋጋ (ምንዛሪ) ለዚህ ኪቲ +WithoutDiscount=ያለ ቅናሽ +VATRateForSupplierProduct=የተእታ ተመን (ለዚህ ሻጭ/ምርት) +DiscountQtyMin=ለዚህ ኪቲ ቅናሽ። +NoPriceDefinedForThisSupplier=ለዚህ አቅራቢ/ምርት ምንም ዋጋ/ኪቲ አልተገለጸም። +NoSupplierPriceDefinedForThisProduct=ለዚህ ምርት ምንም የሻጭ ዋጋ/ኪቲ አልተገለጸም። +PredefinedItem=አስቀድሞ የተወሰነ ንጥል +PredefinedProductsToSell=አስቀድሞ የተገለጸ ምርት +PredefinedServicesToSell=አስቀድሞ የተገለጸ አገልግሎት +PredefinedProductsAndServicesToSell=ለመሸጥ አስቀድሞ የተገለጹ ምርቶች/አገልግሎቶች +PredefinedProductsToPurchase=ለመግዛት አስቀድሞ የተወሰነ ምርት +PredefinedServicesToPurchase=ለመግዛት አስቀድሞ የተገለጹ አገልግሎቶች +PredefinedProductsAndServicesToPurchase=ለመግዛት አስቀድመው የተገለጹ ምርቶች / አገልግሎቶች +NotPredefinedProducts=አስቀድሞ የተገለጹ ምርቶች/አገልግሎቶች አይደሉም +GenerateThumb=አውራ ጣት ይፍጠሩ +ServiceNb=አገልግሎት #%s +ListProductServiceByPopularity=የምርቶች/አገልግሎቶች ዝርዝር በታዋቂነት +ListProductByPopularity=የምርቶች ዝርዝር በታዋቂነት +ListServiceByPopularity=የአገልግሎቶች ዝርዝር በታዋቂነት +Finished=የተሰራ ምርት +RowMaterial=ጥሬ እቃ ConfirmCloneProduct=Are you sure you want to clone product or service %s? -CloneContentProduct=Clone all main information of the product/service -ClonePricesProduct=Clone prices -CloneCategoriesProduct=Clone linked tags/categories -CloneCompositionProduct=Clone virtual products/services -CloneCombinationsProduct=Clone the product variants -ProductIsUsed=This product is used -NewRefForClone=Ref. of new product/service -SellingPrices=Selling prices -BuyingPrices=Buying prices -CustomerPrices=Customer prices -SuppliersPrices=Vendor prices -SuppliersPricesOfProductsOrServices=Vendor prices (of products or services) -CustomCode=Customs|Commodity|HS code -CountryOrigin=Country of origin -RegionStateOrigin=Region of origin -StateOrigin=State|Province of origin -Nature=Nature of product (raw/manufactured) -NatureOfProductShort=Nature of product -NatureOfProductDesc=Raw material or manufactured product -ShortLabel=Short label -Unit=Unit -p=u. -set=set -se=set -second=second -s=s -hour=hour -h=h -day=day -d=d -kilogram=kilogram -kg=Kg -gram=gram -g=g -meter=meter -m=m +CloneContentProduct=ሁሉንም የምርቱን/አገልግሎቱን ዋና መረጃ ይዝጉ +ClonePricesProduct=Clone ዋጋዎች +CloneCategoriesProduct=ከክሎን የተገናኙ መለያዎች/ ምድቦች +CloneCompositionProduct=ክሎን ምናባዊ ምርቶች/አገልግሎቶች +CloneCombinationsProduct=የምርት ልዩነቶችን ይዝጉ +ProductIsUsed=ይህ ምርት ጥቅም ላይ ይውላል +NewRefForClone=ማጣቀሻ. አዲስ ምርት / አገልግሎት +SellingPrices=የሽያጭ ዋጋዎች +BuyingPrices=የግዢ ዋጋዎች +CustomerPrices=የደንበኛ ዋጋዎች +SuppliersPrices=የአቅራቢዎች ዋጋዎች +SuppliersPricesOfProductsOrServices=የአቅራቢዎች ዋጋ (የምርቶች ወይም አገልግሎቶች) +CustomCode=ጉምሩክ|ሸቀጥ|ኤችኤስ ኮድ +CountryOrigin=የትውልድ ቦታ +RegionStateOrigin=የትውልድ ክልል +StateOrigin=ግዛት|የትውልድ ክልል +Nature=የምርት ተፈጥሮ (ጥሬ/የተመረተ) +NatureOfProductShort=የምርት ተፈጥሮ +NatureOfProductDesc=ጥሬ እቃ ወይም የተሰራ ምርት +ShortLabel=አጭር መለያ +Unit=ክፍል +p=ዩ. +set=አዘጋጅ +se=አዘጋጅ +second=ሁለተኛ +s=ኤስ +hour=ሰአት +h=ሸ +day=ቀን +d=መ +kilogram=ኪሎግራም +kg=ኪግ +gram=ግራም +g=ሰ +meter=ሜትር +m=ኤም lm=lm m2=m² m3=m³ -liter=liter -l=L -unitP=Piece -unitSET=Set -unitS=Second -unitH=Hour -unitD=Day -unitG=Gram -unitM=Meter -unitLM=Linear meter -unitM2=Square meter -unitM3=Cubic meter -unitL=Liter -unitT=ton -unitKG=kg -unitG=Gram -unitMG=mg -unitLB=pound -unitOZ=ounce -unitM=Meter +liter=ሊትር +l=ኤል +unitP=ቁራጭ +unitSET=አዘጋጅ +unitS=ሁለተኛ +unitH=ሰአት +unitD=ቀን +unitL=ሊትር +unitT=ቶን +unitKG=ኪግ +unitG=ግራም +unitMG=ሚ.ግ +unitLB=ፓውንድ +unitOZ=አውንስ +unitM=ሜትር +unitLM=መስመራዊ ሜትር unitDM=dm -unitCM=cm -unitMM=mm -unitFT=ft -unitIN=in -unitM2=Square meter +unitCM=ሴሜ +unitMM=ሚ.ሜ +unitFT=ጫማ +unitIN=ውስጥ +unitM2=ካሬ ሜትር unitDM2=dm² -unitCM2=cm² -unitMM2=mm² -unitFT2=ft² -unitIN2=in² -unitM3=Cubic meter +unitCM2=ሴሜ² +unitMM2=ሚሜ² +unitFT2=ጫማ² +unitIN2=በ² ውስጥ +unitM3=ኪዩቢክ ሜትር unitDM3=dm³ -unitCM3=cm³ -unitMM3=mm³ -unitFT3=ft³ -unitIN3=in³ -unitOZ3=ounce -unitgallon=gallon -ProductCodeModel=Product ref template -ServiceCodeModel=Service ref template -CurrentProductPrice=Current price -AlwaysUseNewPrice=Always use current price of product/service -AlwaysUseFixedPrice=Use the fixed price -PriceByQuantity=Different prices by quantity -DisablePriceByQty=Disable prices by quantity -PriceByQuantityRange=Quantity range -MultipriceRules=Automatic prices for segment -UseMultipriceRules=Use price segment rules (defined into product module setup) to auto calculate prices of all other segments according to first segment -PercentVariationOver=%% variation over %s -PercentDiscountOver=%% discount over %s -KeepEmptyForAutoCalculation=Keep empty to have this calculated automatically from weight or volume of products -VariantRefExample=Examples: COL, SIZE -VariantLabelExample=Examples: Color, Size +unitCM3=ሴሜ³ +unitMM3=ሚሜ³ +unitFT3=ጫማ³ +unitIN3=ውስጥ³ +unitOZ3=አውንስ +unitgallon=ጋሎን +ProductCodeModel=የምርት ማጣቀሻ አብነት +ServiceCodeModel=የአገልግሎት ሪፍ አብነት +CurrentProductPrice=የአሁኑ ዋጋ +AlwaysUseNewPrice=ሁልጊዜ የአሁኑን የምርት/አገልግሎት ዋጋ ይጠቀሙ +AlwaysUseFixedPrice=የተወሰነውን ዋጋ ይጠቀሙ +PriceByQuantity=የተለያዩ ዋጋዎች በመጠን +DisablePriceByQty=ዋጋዎችን በብዛት ያሰናክሉ። +PriceByQuantityRange=የመጠን ክልል +MultipriceRules=ለክፍል ራስ-ሰር ዋጋዎች +UseMultipriceRules=በአንደኛው ክፍል መሠረት የሁሉም ሌሎች ክፍሎች ዋጋዎችን በራስ-ሰር ለማስላት የዋጋ ክፍል ህጎችን (በምርት ሞጁል ማዋቀር ውስጥ የተገለጹ) ይጠቀሙ። +PercentVariationOver=የ%% በ%s ላይ ያለው ልዩነት +PercentDiscountOver=%% ቅናሽ በ%s +KeepEmptyForAutoCalculation=ይህ በራስ-ሰር ከክብደት ወይም ከምርቶች ብዛት እንዲሰላ ባዶ ያድርጉት +VariantRefExample=ምሳሌዎች፡ COL፣ SIZE +VariantLabelExample=ምሳሌዎች: ቀለም, መጠን ### composition fabrication -Build=Produce -ProductsMultiPrice=Products and prices for each price segment -ProductsOrServiceMultiPrice=Customer prices (of products or services, multi-prices) -ProductSellByQuarterHT=Products turnover quarterly before tax -ServiceSellByQuarterHT=Services turnover quarterly before tax -Quarter1=1st. Quarter -Quarter2=2nd. Quarter -Quarter3=3rd. Quarter -Quarter4=4th. Quarter -BarCodePrintsheet=Print barcode -PageToGenerateBarCodeSheets=With this tool, you can print sheets of barcode stickers. Choose format of your sticker page, type of barcode and value of barcode, then click on button %s. -NumberOfStickers=Number of stickers to print on page -PrintsheetForOneBarCode=Print several stickers for one barcode -BuildPageToPrint=Generate page to print -FillBarCodeTypeAndValueManually=Fill barcode type and value manually. -FillBarCodeTypeAndValueFromProduct=Fill barcode type and value from barcode of a product. -FillBarCodeTypeAndValueFromThirdParty=Fill barcode type and value from barcode of a third party. -DefinitionOfBarCodeForProductNotComplete=Definition of type or value of barcode not complete for product %s. -DefinitionOfBarCodeForThirdpartyNotComplete=Definition of type or value of barcode non complete for third party %s. -BarCodeDataForProduct=Barcode information of product %s: -BarCodeDataForThirdparty=Barcode information of third party %s: -ResetBarcodeForAllRecords=Define barcode value for all record (this will also reset barcode value already defined with new values) -PriceByCustomer=Different prices for each customer -PriceCatalogue=A single sell price per product/service -PricingRule=Rules for selling prices -AddCustomerPrice=Add price by customer -ForceUpdateChildPriceSoc=Set same price on customer's subsidiaries -PriceByCustomerLog=Log of previous customer prices -MinimumPriceLimit=Minimum price can't be lower then %s -MinimumRecommendedPrice=Minimum recommended price is: %s -PriceExpressionEditor=Price expression editor -PriceExpressionSelected=Selected price expression -PriceExpressionEditorHelp1="price = 2 + 2" or "2 + 2" for setting the price. Use ; to separate expressions +Build=ማምረት +ProductsMultiPrice=ለእያንዳንዱ የዋጋ ክፍል ምርቶች እና ዋጋዎች +ProductsOrServiceMultiPrice=የደንበኛ ዋጋዎች (የምርቶች ወይም አገልግሎቶች፣ ባለብዙ ዋጋ) +ProductSellByQuarterHT=ምርቶች ከታክስ በፊት በየሩብ ዓመቱ ይሸጋገራሉ +ServiceSellByQuarterHT=ከታክስ በፊት በየሩብ ዓመቱ የአገልግሎት ሽግግር +Quarter1=1ኛ. ሩብ +Quarter2=2ኛ. ሩብ +Quarter3=3ኛ. ሩብ +Quarter4=4ኛ. ሩብ +BarCodePrintsheet=የአሞሌ ኮድ ያትሙ +PageToGenerateBarCodeSheets=በዚህ መሣሪያ አማካኝነት የባርኮድ ተለጣፊዎችን ማተም ይችላሉ. የተለጣፊ ገጽህን ቅርጸት፣ የባርኮድ አይነት እና የባርኮድ እሴት ምረጥ፣ በመቀጠል አዝራሩን ጠቅ አድርግ %s። +NumberOfStickers=በገጽ ላይ የሚታተሙ ተለጣፊዎች ብዛት +PrintsheetForOneBarCode=ለአንድ ባርኮድ ብዙ ተለጣፊዎችን ያትሙ +BuildPageToPrint=ለማተም ገጽ ይፍጠሩ +FillBarCodeTypeAndValueManually=የአሞሌ ኮድ አይነት እና ዋጋን በእጅ ይሙሉ። +FillBarCodeTypeAndValueFromProduct=የአሞሌ ኮድ አይነት እና ዋጋ ከምርቱ ባርኮድ ይሙሉ። +FillBarCodeTypeAndValueFromThirdParty=የሶስተኛ ወገን የአሞሌ ኮድ አይነት እና ዋጋ ይሙሉ። +DefinitionOfBarCodeForProductNotComplete=ለምርት %s የባርኮድ አይነት ወይም ዋጋ አልተጠናቀቀም። +DefinitionOfBarCodeForThirdpartyNotComplete=የባርኮድ አይነት ወይም ዋጋ ለሶስተኛ ወገን ያልተጠናቀቀ %s። +BarCodeDataForProduct=የምርት ኮድ መረጃ %s፡ +BarCodeDataForThirdparty=የሶስተኛ ወገን የአሞሌ ኮድ መረጃ %s፡ +ResetBarcodeForAllRecords=ለሁሉም መዝገቦች የአሞሌ ኮድ ዋጋን ይግለጹ (ይህ በተጨማሪ በአዲስ ዋጋዎች የተገለፀውን የአሞሌ ኮድ እሴት ዳግም ያስጀምራል) +PriceByCustomer=ለእያንዳንዱ ደንበኛ የተለያዩ ዋጋዎች +PriceCatalogue=በምርት/አገልግሎት የአንድ ነጠላ መሸጫ ዋጋ +PricingRule=ዋጋዎችን ለመሸጥ ህጎች +AddCustomerPrice=በደንበኛ ዋጋ ይጨምሩ +ForceUpdateChildPriceSoc=በደንበኛ ቅርንጫፎች ላይ ተመሳሳይ ዋጋ ያዘጋጁ +PriceByCustomerLog=የቀድሞ የደንበኛ ዋጋዎች መዝገብ +MinimumPriceLimit=ዝቅተኛው ዋጋ ከዚያ ያነሰ ሊሆን አይችልም %s +MinimumRecommendedPrice=ዝቅተኛው የሚመከር ዋጋ፡ %s +PriceExpressionEditor=የዋጋ መግለጫ አርታዒ +PriceExpressionSelected=የተመረጠ የዋጋ መግለጫ +PriceExpressionEditorHelp1=ዋጋውን ለማዘጋጀት "ዋጋ = 2 + 2" ወይም "2 + 2". ተጠቀም; መግለጫዎችን ለመለየት PriceExpressionEditorHelp2=You can access ExtraFields with variables like #extrafield_myextrafieldkey# and global variables with #global_mycode# -PriceExpressionEditorHelp3=In both product/service and vendor prices there are these variables available:
#tva_tx# #localtax1_tx# #localtax2_tx# #weight# #length# #surface# #price_min# +PriceExpressionEditorHelp3=በሁለቱም የምርት/አገልግሎት እና የአቅራቢ ዋጋዎች እነዚህ ተለዋዋጮች ይገኛሉ፡
#tva_tx# #localtax1_tx2# #txta ክብደት# #ርዝመት# #ገጽታ# #ዋጋ_ደቂቃ# PriceExpressionEditorHelp4=In product/service price only: #supplier_min_price#
In vendor prices only: #supplier_quantity# and #supplier_tva_tx# -PriceExpressionEditorHelp5=Available global values: -PriceMode=Price mode -PriceNumeric=Number -DefaultPrice=Default price -DefaultPriceLog=Log of previous default prices -ComposedProductIncDecStock=Increase/Decrease stock on parent change -ComposedProduct=Child products -MinSupplierPrice=Minimum buying price -MinCustomerPrice=Minimum selling price -NoDynamicPrice=No dynamic price -DynamicPriceConfiguration=Dynamic price configuration -DynamicPriceDesc=You may define mathematical formulae to calculate Customer or Vendor prices. Such formulas can use all mathematical operators, some constants and variables. You can define here the variables you wish to use. If the variable needs an automatic update, you may define the external URL to allow Dolibarr to update the value automatically. -AddVariable=Add Variable -AddUpdater=Add Updater -GlobalVariables=Global variables -VariableToUpdate=Variable to update -GlobalVariableUpdaters=External updaters for variables -GlobalVariableUpdaterType0=JSON data -GlobalVariableUpdaterHelp0=Parses JSON data from specified URL, VALUE specifies the location of relevant value, -GlobalVariableUpdaterHelpFormat0=Format for request {"URL": "http://example.com/urlofjson", "VALUE": "array1,array2,targetvalue"} -GlobalVariableUpdaterType1=WebService data -GlobalVariableUpdaterHelp1=Parses WebService data from specified URL, NS specifies the namespace, VALUE specifies the location of relevant value, DATA should contain the data to send and METHOD is the calling WS method -GlobalVariableUpdaterHelpFormat1=Format for request is {"URL": "http://example.com/urlofws", "VALUE": "array,targetvalue", "NS": "http://example.com/urlofns", "METHOD": "myWSMethod", "DATA": {"your": "data", "to": "send"}} -UpdateInterval=Update interval (minutes) -LastUpdated=Latest update -CorrectlyUpdated=Correctly updated -PropalMergePdfProductActualFile=Files use to add into PDF Azur are/is -PropalMergePdfProductChooseFile=Select PDF files -IncludingProductWithTag=Including products/services with the tag -DefaultPriceRealPriceMayDependOnCustomer=Default price, real price may depend on customer -WarningSelectOneDocument=Please select at least one document -DefaultUnitToShow=Unit -NbOfQtyInProposals=Qty in proposals -ClinkOnALinkOfColumn=Click on a link of column %s to get a detailed view... -ProductsOrServicesTranslations=Products/Services translations -TranslatedLabel=Translated label -TranslatedDescription=Translated description -TranslatedNote=Translated notes -ProductWeight=Weight for 1 product -ProductVolume=Volume for 1 product -WeightUnits=Weight unit -VolumeUnits=Volume unit -WidthUnits=Width unit -LengthUnits=Length unit -HeightUnits=Height unit -SurfaceUnits=Surface unit -SizeUnits=Size unit -DeleteProductBuyPrice=Delete buying price -ConfirmDeleteProductBuyPrice=Are you sure you want to delete this buying price? -SubProduct=Sub product -ProductSheet=Product sheet -ServiceSheet=Service sheet -PossibleValues=Possible values -GoOnMenuToCreateVairants=Go on menu %s - %s to prepare attribute variants (like colors, size, ...) -UseProductFournDesc=Add a feature to define the product description defined by the vendors (for each vendor reference) in addition to the description for customers -ProductSupplierDescription=Vendor description for the product -UseProductSupplierPackaging=Use packaging on supplier prices (recalculate quantities according to packaging set on supplier price when adding/updating line in supplier documents) -PackagingForThisProduct=Packaging -PackagingForThisProductDesc=On supplier order, you will automaticly order this quantity (or a multiple of this quantity). Cannot be less than minimum buying quantity -QtyRecalculatedWithPackaging=The quantity of the line were recalculated according to supplier packaging +PriceExpressionEditorHelp5=የሚገኙ ዓለም አቀፍ እሴቶች፡- +PriceMode=የዋጋ ሁነታ +PriceNumeric=ቁጥር +DefaultPrice=ነባሪ ዋጋ +DefaultPriceLog=የቀደሙት ነባሪ ዋጋዎች መዝገብ +ComposedProductIncDecStock=በወላጅ ለውጥ ላይ ክምችት ጨምር/ቀንስ +ComposedProduct=የልጆች ምርቶች +MinSupplierPrice=ዝቅተኛው የግዢ ዋጋ +MinCustomerPrice=ዝቅተኛው የመሸጫ ዋጋ +NoDynamicPrice=ምንም ተለዋዋጭ ዋጋ የለም +DynamicPriceConfiguration=ተለዋዋጭ የዋጋ ውቅር +DynamicPriceDesc=የደንበኛ ወይም የሻጭ ዋጋዎችን ለማስላት የሂሳብ ቀመሮችን መግለፅ ይችላሉ። እንደዚህ አይነት ቀመሮች ሁሉንም የሂሳብ ኦፕሬተሮችን, አንዳንድ ቋሚዎችን እና ተለዋዋጭዎችን መጠቀም ይችላሉ. ለመጠቀም የሚፈልጓቸውን ተለዋዋጮች እዚህ መግለፅ ይችላሉ። ተለዋዋጭው አውቶማቲክ ማሻሻያ ከሚያስፈልገው ዶሊባርር እሴቱን በራስ-ሰር እንዲያዘምን ለማድረግ ውጫዊውን ዩአርኤል ሊገልጹ ይችላሉ። +AddVariable=ተለዋዋጭ አክል +AddUpdater=ማዘመኛን ያክሉ +GlobalVariables=ዓለም አቀፍ ተለዋዋጮች +VariableToUpdate=ለማዘመን ተለዋዋጭ +GlobalVariableUpdaters=ለተለዋዋጮች ውጫዊ ማሻሻያ +GlobalVariableUpdaterType0=የJSON ውሂብ +GlobalVariableUpdaterHelp0=ከተጠቀሰው ዩአርኤል የJSON ውሂብን ይመረምራል፣ VALUE የሚመለከተውን እሴት ቦታ ይገልጻል፣ +GlobalVariableUpdaterHelpFormat0=የጥያቄ ቅርጸት {"URL": "http://example.com/urlofjson", "VALUE": "array1,array2,targetvalue"} +GlobalVariableUpdaterType1=የድር አገልግሎት ውሂብ +GlobalVariableUpdaterHelp1=የዌብ ሰርቪስ ውሂብን ከተጠቀሰው ዩአርኤል ይመረምራል፣ NS የስም ቦታውን ይገልፃል፣ VALUE የሚመለከተውን ቦታ ይገልፃል፣ DATA የሚላከው ውሂብ መያዝ አለበት እና METHOD የWS ጥሪ ዘዴ ነው። +GlobalVariableUpdaterHelpFormat1=የጥያቄው ቅርጸት {"URL": "http://example.com/urlofws", "VALUE": "array,targetvalue", "NS": "http://example.com/urlofns", "METHOD" ነው. : "myWSMethod", "DATA": {"የእርስዎ": "ውሂብ", "ወደ": "መላክ"}} +UpdateInterval=ክፍተቱን አዘምን (ደቂቃዎች) +LastUpdated=የቅርብ ጊዜ ዝመና +CorrectlyUpdated=በትክክል ዘምኗል +PropalMergePdfProductActualFile=ወደ ፒዲኤፍ አዙር ለመጨመር የሚያገለግሉ ፋይሎች ናቸው። +PropalMergePdfProductChooseFile=ፒዲኤፍ ፋይሎችን ይምረጡ +IncludingProductWithTag=ከመለያው ጋር ምርቶችን/አገልግሎቶችን ጨምሮ +DefaultPriceRealPriceMayDependOnCustomer=ነባሪ ዋጋ፣ እውነተኛ ዋጋ በደንበኛው ላይ ሊወሰን ይችላል። +WarningSelectOneDocument=እባክዎ ቢያንስ አንድ ሰነድ ይምረጡ +DefaultUnitToShow=ክፍል +NbOfQtyInProposals=Qty በፕሮፖዛል +ClinkOnALinkOfColumn=ዝርዝር እይታ ለማግኘት የአምድ %s አገናኝ ላይ ጠቅ ያድርጉ... +ProductsOrServicesTranslations=ምርቶች/አገልግሎቶች ትርጉሞች +TranslatedLabel=የተተረጎመ መለያ +TranslatedDescription=የተተረጎመ መግለጫ +TranslatedNote=የተተረጎሙ ማስታወሻዎች +ProductWeight=ክብደት ለ 1 ምርት +ProductVolume=ለ 1 ምርት መጠን +WeightUnits=የክብደት መለኪያ +VolumeUnits=የድምጽ አሃድ +WidthUnits=ስፋት ክፍል +LengthUnits=ርዝመት አሃድ +HeightUnits=ቁመት አሃድ +SurfaceUnits=የገጽታ ክፍል +SizeUnits=የመጠን አሃድ +DeleteProductBuyPrice=የግዢ ዋጋን ሰርዝ +ConfirmDeleteProductBuyPrice=እርግጠኛ ነዎት ይህን የግዢ ዋጋ መሰረዝ ይፈልጋሉ? +SubProduct=ንዑስ ምርት +ProductSheet=የምርት ሉህ +ServiceSheet=የአገልግሎት ሉህ +PossibleValues=ሊሆኑ የሚችሉ እሴቶች +GoOnMenuToCreateVairants=የባህሪ ልዩነቶችን (እንደ ቀለሞች፣ መጠን፣ ...) ለማዘጋጀት ወደ ምናሌ %s - %s ይሂዱ። +UseProductFournDesc=ለደንበኞች ከሚሰጠው መግለጫ በተጨማሪ በሻጮች (ለእያንዳንዱ የአቅራቢ ማጣቀሻ) የተገለጸውን የምርት መግለጫ ለመግለጽ ባህሪ ያክሉ +ProductSupplierDescription=ለምርቱ የአቅራቢዎች መግለጫ +UseProductSupplierPackaging=መጠኖቹን ወደ አንዳንድ ብዜቶች ለማሸጋገር የ"ማሸጊያ" ባህሪን ይጠቀሙ (በአቅራቢ ሰነዶች ውስጥ መስመር ሲደመር/ሲዘምን ፣ መጠኑን እና ዋጋን እንደገና በማስላት በአንድ ምርት የግዢ ዋጋዎች ላይ ባለው ከፍተኛ ስብስብ) +PackagingForThisProduct=የመጠን ማሸግ +PackagingForThisProductDesc=የዚህን መጠን ብዜት በራስ-ሰር ይገዛሉ። +QtyRecalculatedWithPackaging=የመስመሩ ብዛት በአቅራቢው ማሸጊያ መሰረት እንደገና ይሰላል #Attributes -VariantAttributes=Variant attributes -ProductAttributes=Variant attributes for products -ProductAttributeName=Variant attribute %s -ProductAttribute=Variant attribute -ProductAttributeDeleteDialog=Are you sure you want to delete this attribute? All values will be deleted -ProductAttributeValueDeleteDialog=Are you sure you want to delete the value "%s" with reference "%s" of this attribute? +Attributes=ባህሪያት +VariantAttributes=ተለዋጭ ባህሪያት +ProductAttributes=ለምርቶች ተለዋጭ ባህሪያት +ProductAttributeName=ተለዋጭ ባህሪ %s +ProductAttribute=ተለዋጭ ባህሪ +ProductAttributeDeleteDialog=እርግጠኛ ነዎት ይህን ባህሪ መሰረዝ ይፈልጋሉ? ሁሉም እሴቶች ይሰረዛሉ +ProductAttributeValueDeleteDialog=እርግጠኛ ነዎት የዚህን ባህሪ "%s" ከማጣቀሻ "%s" መሰረዝ ይፈልጋሉ? ProductCombinationDeleteDialog=Are you sure want to delete the variant of the product "%s"? -ProductCombinationAlreadyUsed=There was an error while deleting the variant. Please check it is not being used in any object -ProductCombinations=Variants -PropagateVariant=Propagate variants -HideProductCombinations=Hide products variant in the products selector -ProductCombination=Variant -NewProductCombination=New variant -EditProductCombination=Editing variant -NewProductCombinations=New variants -EditProductCombinations=Editing variants -SelectCombination=Select combination -ProductCombinationGenerator=Variants generator -Features=Features -PriceImpact=Price impact -ImpactOnPriceLevel=Impact on price level %s -ApplyToAllPriceImpactLevel= Apply to all levels -ApplyToAllPriceImpactLevelHelp=By clicking here you set the same price impact on all levels -WeightImpact=Weight impact -NewProductAttribute=New attribute -NewProductAttributeValue=New attribute value -ErrorCreatingProductAttributeValue=There was an error while creating the attribute value. It could be because there is already an existing value with that reference -ProductCombinationGeneratorWarning=If you continue, before generating new variants, all previous ones will be DELETED. Already existing ones will be updated with the new values -TooMuchCombinationsWarning=Generating lots of variants may result in high CPU, memory usage and Dolibarr not able to create them. Enabling the option "%s" may help reduce memory usage. -DoNotRemovePreviousCombinations=Do not remove previous variants -UsePercentageVariations=Use percentage variations -PercentageVariation=Percentage variation -ErrorDeletingGeneratedProducts=There was an error while trying to delete existing product variants -NbOfDifferentValues=No. of different values -NbProducts=Number of products -ParentProduct=Parent product -HideChildProducts=Hide variant products -ShowChildProducts=Show variant products -NoEditVariants=Go to Parent product card and edit variants price impact in the variants tab -ConfirmCloneProductCombinations=Would you like to copy all the product variants to the other parent product with the given reference? -CloneDestinationReference=Destination product reference -ErrorCopyProductCombinations=There was an error while copying the product variants -ErrorDestinationProductNotFound=Destination product not found -ErrorProductCombinationNotFound=Product variant not found -ActionAvailableOnVariantProductOnly=Action only available on the variant of product -ProductsPricePerCustomer=Product prices per customers -ProductSupplierExtraFields=Additional Attributes (Supplier Prices) -DeleteLinkedProduct=Delete the child product linked to the combination -AmountUsedToUpdateWAP=Amount to use to update the Weighted Average Price -PMPValue=Weighted average price -PMPValueShort=WAP -mandatoryperiod=Mandatory periods -mandatoryPeriodNeedTobeSet=Note: Period (start and end date) must be defined -mandatoryPeriodNeedTobeSetMsgValidate=A service requires a start and end period -mandatoryHelper=Check this if you want a message to the user when creating / validating an invoice, commercial proposal, sales order without entering a start and end date on lines with this service.
Note that the message is a warning and not a blocking error. -DefaultBOM=Default BOM -DefaultBOMDesc=The default BOM recommended to use to manufacture this product. This field can be set only if nature of product is '%s'. -Rank=Rank -SwitchOnSaleStatus=Switch on sale status -SwitchOnPurchaseStatus=Switch on purchase status -StockMouvementExtraFields= Extra Fields (stock mouvement) +ProductCombinationAlreadyUsed=ልዩነቱን በመሰረዝ ላይ ስህተት ነበር። እባክዎ በማንኛውም ዕቃ ውስጥ ጥቅም ላይ እንደማይውል ያረጋግጡ +ProductCombinations=ተለዋጮች +PropagateVariant=ማባዛት ተለዋጮች +HideProductCombinations=በምርቶች መራጭ ውስጥ የምርቶችን ልዩነት ደብቅ +ProductCombination=ተለዋጭ +NewProductCombination=አዲስ ተለዋጭ +EditProductCombination=የአርትዖት ልዩነት +NewProductCombinations=አዲስ ተለዋጮች +EditProductCombinations=ተለዋጮችን ማስተካከል +SelectCombination=ጥምረት ይምረጡ +ProductCombinationGenerator=ተለዋጮች ጄኔሬተር +Features=ዋና መለያ ጸባያት +PriceImpact=የዋጋ ተጽዕኖ +ImpactOnPriceLevel=በዋጋ ደረጃ ላይ ተጽእኖ %s +ApplyToAllPriceImpactLevel= በሁሉም ደረጃዎች ላይ ያመልክቱ +ApplyToAllPriceImpactLevelHelp=እዚህ ጠቅ በማድረግ በሁሉም ደረጃዎች ላይ ተመሳሳይ የዋጋ ተፅእኖን አዘጋጅተዋል። +WeightImpact=የክብደት ተጽእኖ +NewProductAttribute=አዲስ ባህሪ +NewProductAttributeValue=አዲስ የባህሪ እሴት +ErrorCreatingProductAttributeValue=የባህሪ እሴቱን በመፍጠር ላይ ስህተት ነበር። ከዚህ ማጣቀሻ ጋር ቀድሞውኑ ነባር እሴት ስላለ ሊሆን ይችላል። +ProductCombinationGeneratorWarning=ከቀጠሉ፣ አዲስ ተለዋጮችን ከማፍለቅዎ በፊት፣ ሁሉም ቀዳሚዎቹ ይሰረዛሉ። ቀድሞውንም የነበሩት በአዲሶቹ እሴቶች ይዘመናሉ። +TooMuchCombinationsWarning=ብዙ ተለዋጮች ማመንጨት ከፍተኛ ሲፒዩ፣ የማስታወሻ አጠቃቀም እና ዶሊባርር እነሱን መፍጠር አልቻለም። "%s" የሚለውን አማራጭ ማንቃት የማህደረ ትውስታ አጠቃቀምን ለመቀነስ ይረዳል። +DoNotRemovePreviousCombinations=ቀዳሚ ተለዋጮችን አታስወግድ +UsePercentageVariations=የመቶኛ ልዩነቶችን ተጠቀም +PercentageVariation=የመቶኛ ልዩነት +ErrorDeletingGeneratedProducts=ያሉትን የምርት ልዩነቶች ለመሰረዝ በመሞከር ላይ ሳለ አንድ ስህተት ነበር። +NbOfDifferentValues=የተለያዩ እሴቶች ቁጥር +NbProducts=የምርት ብዛት +ParentProduct=የወላጅ ምርት +ParentProductOfVariant=የወላጅ ምርት +HideChildProducts=የተለያዩ ምርቶችን ደብቅ +ShowChildProducts=ተለዋጭ ምርቶችን አሳይ +NoEditVariants=ወደ የወላጅ ምርት ካርድ ይሂዱ እና በተለዋዋጮች ትር ውስጥ የዋጋ ተፅእኖን ያርትዑ +ConfirmCloneProductCombinations=በተሰጠው ማጣቀሻ ሁሉንም የምርት ልዩነቶች ወደ ሌላኛው የወላጅ ምርት መቅዳት ይፈልጋሉ? +CloneDestinationReference=መድረሻ ምርት ማጣቀሻ +ErrorCopyProductCombinations=የምርት ልዩነቶችን በመቅዳት ላይ ስህተት ነበር። +ErrorDestinationProductNotFound=የመድረሻ ምርት አልተገኘም። +ErrorProductCombinationNotFound=የምርት ልዩነት አልተገኘም። +ActionAvailableOnVariantProductOnly=እርምጃ የሚገኘው በምርቱ ልዩነት ላይ ብቻ ነው። +ProductsPricePerCustomer=የምርት ዋጋዎች ለደንበኛ +ProductSupplierExtraFields=ተጨማሪ ባህሪያት (የአቅራቢዎች ዋጋዎች) +DeleteLinkedProduct=ከጥምረት ጋር የተገናኘውን የልጁን ምርት ይሰርዙ +AmountUsedToUpdateWAP=የተገመተውን አማካይ ዋጋ ለማዘመን የሚጠቅመው የክፍል መጠን +PMPValue=አማካይ ዋጋ +PMPValueShort=ዋፕ +mandatoryperiod=አስገዳጅ ወቅቶች +mandatoryPeriodNeedTobeSet=ማሳሰቢያ፡- ጊዜ (የመጀመሪያ እና የመጨረሻ ቀን) መገለጽ አለበት። +mandatoryPeriodNeedTobeSetMsgValidate=አገልግሎት የመጀመሪያ እና የመጨረሻ ጊዜን ይፈልጋል +mandatoryHelper=በዚህ አገልግሎት መስመሮች ላይ የመጀመሪያ እና የመጨረሻ ቀን ሳያስገቡ የክፍያ መጠየቂያ፣ የንግድ ፕሮፖዛል፣ የሽያጭ ማዘዣ ሲፈጥሩ ወይም ሲያረጋግጡ ለተጠቃሚው መልእክት ከፈለጉ ይህንን ያረጋግጡ።
ይህን ልብ ይበሉ መልእክቱ ማስጠንቀቂያ እንጂ የማገድ ስህተት አይደለም። +DefaultBOM=ነባሪ BOM +DefaultBOMDesc=ነባሪ BOM ይህንን ምርት ለማምረት እንዲጠቀም ይመከራል። ይህ መስክ ሊዋቀር የሚችለው የምርት ተፈጥሮ '%s' ከሆነ ብቻ ነው። +Rank=ደረጃ +MergeOriginProduct=የተባዛ ምርት (መሰረዝ የሚፈልጉት ምርት) +MergeProducts=ምርቶችን ያዋህዱ +ConfirmMergeProducts=እርግጠኛ ነዎት የተመረጠውን ምርት አሁን ካለው ጋር ማዋሃድ ይፈልጋሉ? ሁሉም የተገናኙ ነገሮች (ደረሰኞች, ትዕዛዞች, ...) ወደ አሁኑ ምርት ይንቀሳቀሳሉ, ከዚያ በኋላ የተመረጠው ምርት ይሰረዛል. +ProductsMergeSuccess=ምርቶች ተዋህደዋል +ErrorsProductsMerge=በምርቶች ውህደት ውስጥ ስህተቶች +SwitchOnSaleStatus=የሽያጭ ሁኔታን ያብሩ +SwitchOnPurchaseStatus=የግዢ ሁኔታን ያብሩ +UpdatePrice=የደንበኞችን ዋጋ ጨምር/ ቀንስ +StockMouvementExtraFields= ተጨማሪ መስኮች (የአክሲዮን እንቅስቃሴ) +InventoryExtraFields= ተጨማሪ መስኮች (እቃዎች) +ScanOrTypeOrCopyPasteYourBarCodes=የእርስዎን ባርኮዶች ይቃኙ ወይም ይተይቡ ወይም ይቅዱ/ለጥፉ +PuttingPricesUpToDate=ዋጋዎችን አሁን በሚታወቁ ዋጋዎች ያዘምኑ +PuttingDescUpToDate=መግለጫዎችን አሁን ከሚታወቁ መግለጫዎች ጋር ያዘምኑ +PMPExpected=የሚጠበቀው PMP +ExpectedValuation=የሚጠበቀው ዋጋ +PMPReal=እውነተኛ PMP +RealValuation=እውነተኛ ዋጋ +ConfirmEditExtrafield = ሊቀይሩት የሚፈልጉትን ትርፍ መስክ ይምረጡ +ConfirmEditExtrafieldQuestion = እርግጠኛ ነዎት ይህን ተጨማሪ መስክ መቀየር ይፈልጋሉ? +ModifyValueExtrafields = የተጨማሪ ሜዳ እሴትን ቀይር +OrProductsWithCategories=ወይም መለያዎች/ምድቦች ያላቸው ምርቶች +WarningTransferBatchStockMouvToGlobal = ይህንን ምርት ከስር ለማጥፋት ከፈለጉ፣ ሁሉም ተከታታይ አክሲዮኖች ወደ አለምአቀፍ አክሲዮን ይቀየራሉ +WarningConvertFromBatchToSerial=በአሁኑ ጊዜ ለምርቱ 2 መጠን ከፍ ያለ ወይም እኩል ከሆነ፣ ወደዚህ ምርጫ መቀየር ማለት አሁንም ተመሳሳይ ስብስብ ያላቸው የተለያዩ እቃዎች ያሉት ምርት ይኖርዎታል (ልዩ መለያ ቁጥር ሲፈልጉ)። ይህንን ለማስተካከል የተባዛው ክምችት ወይም የእጅ አክሲዮን እንቅስቃሴ እስኪደረግ ድረስ ይቆያል። +AllowStockMovementVariantParent=Also records stock movements on parent products of variant products +AllowStockMovementVariantParentHelp=By default, a parent of a variant is a virtual product, so no stock is managed for it. By enabling this option, a stock will be managed for parent products and each time a stock quantity is modified for a variant product, the same quantity will be modified for the parent product. You should not need this option, except if you are using variant to manage the same product than parent (but with different descriptions, prices...) +ConfirmSetToDraftInventory=እርግጠኛ ነህ ወደ ረቂቅ ሁኔታ መመለስ ትፈልጋለህ?
አሁን በዕቃው ውስጥ የተቀመጡት መጠኖች ዳግም ይጀመራሉ። diff --git a/htdocs/langs/am_ET/projects.lang b/htdocs/langs/am_ET/projects.lang index 4a3151fdaf1..4c98156fb55 100644 --- a/htdocs/langs/am_ET/projects.lang +++ b/htdocs/langs/am_ET/projects.lang @@ -147,7 +147,7 @@ LinkedToAnotherCompany=ከሌላ ሶስተኛ ወገን ጋር ተገናኝቷ TaskIsNotAssignedToUser=ተግባር ለተጠቃሚ አልተሰጠም። አሁን ተግባር ለመመደብ '%s የሚለውን ቁልፍ ተጠቀም። ErrorTimeSpentIsEmpty=ያጠፋው ጊዜ ባዶ ነው። TimeRecordingRestrictedToNMonthsBack=የጊዜ ቀረጻ በ%s ወራት የተገደበ ነው -ThisWillAlsoRemoveTasks=ይህ እርምጃ ሁሉንም የፕሮጀክት ተግባራት ይሰርዛል (%ss
s በአሁኑ ጊዜ) እና ሁሉም ጊዜ ያለፈባቸው ግብዓቶች። +ThisWillAlsoRemoveTasks=This action will also delete all tasks of project (%s tasks at the moment) and all inputs of time spent. IfNeedToUseOtherObjectKeepEmpty=የሌላ ሶስተኛ ወገን ንብረት የሆኑ አንዳንድ ነገሮች (ደረሰኝ፣ ትዕዛዝ፣...) ከፕሮጀክቱ ጋር መያያዝ ካለባቸው ፕሮጀክቱ ብዙ ሶስተኛ ወገኖች እንዲሆን ባዶ ያድርጉት። CloneTasks=Clone ተግባራት CloneContacts=ክሎን እውቂያዎች @@ -249,7 +249,7 @@ LatestProjects=የቅርብ ጊዜ %s ፕሮጀክቶች LatestModifiedProjects=የቅርብ ጊዜ %s የተሻሻሉ ፕሮጀክቶች OtherFilteredTasks=ሌሎች የተጣሩ ተግባራት NoAssignedTasks=ምንም የተመደቡ ተግባራት አልተገኙም (ጊዜ ለማስገባት ከላይ ከተመረጠው ሳጥን ውስጥ ፕሮጀክት/ተግባራትን ለአሁኑ ተጠቃሚ መድቡ) -ThirdPartyRequiredToGenerateInvoice=ደረሰኝ ለመጠየቅ ሶስተኛ ወገን በፕሮጀክቱ ላይ መገለጽ አለበት። +ThirdPartyRequiredToGenerateIntervention=A third party must be defined on project to be able to create intervention. ThirdPartyRequiredToGenerateInvoice=ደረሰኝ ለመጠየቅ ሶስተኛ ወገን በፕሮጀክቱ ላይ መገለጽ አለበት። ChooseANotYetAssignedTask=እስካሁን ያልተመደበልህን ተግባር ምረጥ # Comments trans diff --git a/htdocs/langs/am_ET/propal.lang b/htdocs/langs/am_ET/propal.lang index 9fa30e5b24d..46012d34ac1 100644 --- a/htdocs/langs/am_ET/propal.lang +++ b/htdocs/langs/am_ET/propal.lang @@ -15,8 +15,8 @@ ValidateProp=የንግድ ፕሮፖዛል አረጋግጥ CancelPropal=ሰርዝ AddProp=ፕሮፖዛል ፍጠር ConfirmDeleteProp=እርግጠኛ ነዎት ይህን የንግድ ፕሮፖዛል መሰረዝ ይፈልጋሉ? -ConfirmValidateProp=እርግጠኛ ነዎት ይህን የንግድ ፕሮፖዛል በስም %sb09a4b739f17f17f >? -ConfirmCancelPropal=እርግጠኛ ነህ የንግድ ፕሮፖዛል %s? +ConfirmValidateProp=Are you sure you want to validate this commercial proposal under name %s? +ConfirmCancelPropal=Are you sure you want to cancel commercial proposal %s? LastPropals=የቅርብ ጊዜ %s ሀሳቦች LastModifiedProposals=የቅርብ ጊዜ %s የተሻሻሉ ሀሳቦች AllPropals=ሁሉም ሀሳቦች @@ -61,8 +61,8 @@ DefaultProposalDurationValidity=ነባሪ የንግድ ፕሮፖዛል የሚቆ DefaultPuttingPricesUpToDate=በነባሪነት የፕሮፖዛልን ክሎኒንግ ላይ ከታወቁት ዋጋዎች ጋር ዋጋዎችን ያዘምኑ DefaultPuttingDescUpToDate=በነባሪነት ፕሮፖዛልን በመዝጋት ላይ ከሚታወቁት መግለጫዎች ጋር መግለጫዎችን ያዘምኑ UseCustomerContactAsPropalRecipientIfExist=ከሶስተኛ ወገን አድራሻ ይልቅ እንደ ሀሳብ ተቀባይ አድራሻ ከተገለጸ 'የእውቂያ ተከታይ ሀሳብ' አይነት ጋር እውቂያ/አድራሻ ይጠቀሙ -ConfirmClonePropal=እርግጠኛ ነዎት የንግድ ፕሮፖዛሉን %sb09a4b739f17f80? -ConfirmReOpenProp=እርግጠኛ ነዎት የንግድ ፕሮፖዛሉን %sb09a4b739f17f80 ? +ConfirmClonePropal=Are you sure you want to clone the commercial proposal %s? +ConfirmReOpenProp=Are you sure you want to open back the commercial proposal %s? ProposalsAndProposalsLines=የንግድ ፕሮፖዛል እና መስመሮች ProposalLine=የፕሮፖዛል መስመር ProposalLines=የፕሮፖዛል መስመሮች diff --git a/htdocs/langs/am_ET/receiptprinter.lang b/htdocs/langs/am_ET/receiptprinter.lang index 2574ff1b4bd..6e9d6fa236c 100644 --- a/htdocs/langs/am_ET/receiptprinter.lang +++ b/htdocs/langs/am_ET/receiptprinter.lang @@ -1,82 +1,85 @@ # Dolibarr language file - Source file is en_US - receiptprinter -ReceiptPrinterSetup=Setup of module ReceiptPrinter -PrinterAdded=Printer %s added -PrinterUpdated=Printer %s updated -PrinterDeleted=Printer %s deleted -TestSentToPrinter=Test Sent To Printer %s -ReceiptPrinter=Receipt printers -ReceiptPrinterDesc=Setup of receipt printers -ReceiptPrinterTemplateDesc=Setup of Templates -ReceiptPrinterTypeDesc=Description of Receipt Printer's type -ReceiptPrinterProfileDesc=Description of Receipt Printer's Profile -ListPrinters=List of Printers -SetupReceiptTemplate=Template Setup -CONNECTOR_DUMMY=Dummy Printer -CONNECTOR_NETWORK_PRINT=Network Printer -CONNECTOR_FILE_PRINT=Local Printer -CONNECTOR_WINDOWS_PRINT=Local Windows Printer -CONNECTOR_CUPS_PRINT=Cups Printer -CONNECTOR_DUMMY_HELP=Fake Printer for test, does nothing +ReceiptPrinterSetup=የሞዱል ደረሰኝ አታሚ ማዋቀር +PrinterAdded=አታሚ %s ታክሏል +PrinterUpdated=አታሚ %s ተዘምኗል +PrinterDeleted=አታሚ %s ተሰርዟል +TestSentToPrinter=ሙከራ ወደ አታሚ ተልኳል %s +ReceiptPrinter=ደረሰኝ አታሚዎች +ReceiptPrinterDesc=ደረሰኝ አታሚዎችን ማዋቀር +ReceiptPrinterTemplateDesc=አብነቶችን ማዋቀር +ReceiptPrinterTypeDesc=በመስክ ላይ ሊሆኑ የሚችሉ እሴቶች ምሳሌ "Parameters" እንደ አሽከርካሪው አይነት +ReceiptPrinterProfileDesc=ደረሰኝ የአታሚ መገለጫ መግለጫ +ListPrinters=የአታሚዎች ዝርዝር +FromServerPointOfView=From the web server point of view. This method must be reachable from the web server hosting. +SetupReceiptTemplate=የአብነት ማዋቀር +CONNECTOR_DUMMY=Dummy አታሚ +CONNECTOR_NETWORK_PRINT=የአውታረ መረብ አታሚ +CONNECTOR_FILE_PRINT=የአካባቢ አታሚ +CONNECTOR_WINDOWS_PRINT=የአካባቢ ዊንዶውስ አታሚ +CONNECTOR_CUPS_PRINT=ኩባያዎች አታሚ +CONNECTOR_DUMMY_HELP=የውሸት አታሚ ለሙከራ, ምንም አይሰራም CONNECTOR_NETWORK_PRINT_HELP=10.x.x.x:9100 -CONNECTOR_FILE_PRINT_HELP=/dev/usb/lp0, /dev/usb/lp1 -CONNECTOR_WINDOWS_PRINT_HELP=LPT1, COM1, smb://FooUser:secret@computername/workgroup/Receipt Printer -CONNECTOR_CUPS_PRINT_HELP=CUPS printer name, example: HPRT_TP805L -PROFILE_DEFAULT=Default Profile -PROFILE_SIMPLE=Simple Profile -PROFILE_EPOSTEP=Epos Tep Profile -PROFILE_P822D=P822D Profile -PROFILE_STAR=Star Profile -PROFILE_DEFAULT_HELP=Default Profile suitable for Epson printers -PROFILE_SIMPLE_HELP=Simple Profile No Graphics -PROFILE_EPOSTEP_HELP=Epos Tep Profile -PROFILE_P822D_HELP=P822D Profile No Graphics -PROFILE_STAR_HELP=Star Profile -DOL_LINE_FEED=Skip line -DOL_ALIGN_LEFT=Left align text -DOL_ALIGN_CENTER=Center text -DOL_ALIGN_RIGHT=Right align text -DOL_USE_FONT_A=Use font A of printer -DOL_USE_FONT_B=Use font B of printer -DOL_USE_FONT_C=Use font C of printer -DOL_PRINT_BARCODE=Print barcode -DOL_PRINT_BARCODE_CUSTOMER_ID=Print barcode customer id -DOL_CUT_PAPER_FULL=Cut ticket completely -DOL_CUT_PAPER_PARTIAL=Cut ticket partially -DOL_OPEN_DRAWER=Open cash drawer -DOL_ACTIVATE_BUZZER=Activate buzzer -DOL_PRINT_QRCODE=Print QR Code -DOL_PRINT_LOGO=Print logo of my company -DOL_PRINT_LOGO_OLD=Print logo of my company (old printers) -DOL_BOLD=Bold -DOL_BOLD_DISABLED=Disable bold -DOL_DOUBLE_HEIGHT=Double height size -DOL_DOUBLE_WIDTH=Double width size -DOL_DEFAULT_HEIGHT_WIDTH=Default height and width size -DOL_UNDERLINE=Enable underline -DOL_UNDERLINE_DISABLED=Disable underline -DOL_BEEP=Beed sound -DOL_PRINT_TEXT=Print text -DateInvoiceWithTime=Invoice date and time -YearInvoice=Invoice year -DOL_VALUE_MONTH_LETTERS=Invoice month in letters -DOL_VALUE_MONTH=Invoice month -DOL_VALUE_DAY=Invoice day -DOL_VALUE_DAY_LETTERS=Inovice day in letters -DOL_LINE_FEED_REVERSE=Line feed reverse -InvoiceID=Invoice ID -InvoiceRef=Invoice ref -DOL_PRINT_OBJECT_LINES=Invoice lines -DOL_VALUE_CUSTOMER_FIRSTNAME=Customer first name -DOL_VALUE_CUSTOMER_LASTNAME=Customer last name -DOL_VALUE_CUSTOMER_MAIL=Customer mail -DOL_VALUE_CUSTOMER_PHONE=Customer phone -DOL_VALUE_CUSTOMER_MOBILE=Customer mobile -DOL_VALUE_CUSTOMER_SKYPE=Customer Skype -DOL_VALUE_CUSTOMER_TAX_NUMBER=Customer tax number -DOL_VALUE_CUSTOMER_ACCOUNT_BALANCE=Customer account balance -DOL_VALUE_MYSOC_NAME=Your company name -VendorLastname=Vendor last name -VendorFirstname=Vendor first name -VendorEmail=Vendor email -DOL_VALUE_CUSTOMER_POINTS=Customer points -DOL_VALUE_OBJECT_POINTS=Object points +CONNECTOR_FILE_PRINT_HELP=/dev/usb/lp0፣ /dev/usb/lp1 +CONNECTOR_WINDOWS_PRINT_HELP=LPT1፣ COM1፣ smb://FooUser:secret@computername/workgroup/ደረሰኝ አታሚ +CONNECTOR_CUPS_PRINT_HELP=የCUPS አታሚ ስም፣ ለምሳሌ፡ HPRT_TP805L +PROFILE_DEFAULT=ነባሪ መገለጫ +PROFILE_SIMPLE=ቀላል መገለጫ +PROFILE_EPOSTEP=የኢፖስ ቴፕ መገለጫ +PROFILE_P822D=P822D መገለጫ +PROFILE_STAR=የኮከብ መገለጫ +PROFILE_DEFAULT_HELP=ነባሪ መገለጫ ለኤፕሰን አታሚዎች ተስማሚ +PROFILE_SIMPLE_HELP=ቀላል መገለጫ ምንም ግራፊክስ የለም። +PROFILE_EPOSTEP_HELP=የኢፖስ ቴፕ መገለጫ +PROFILE_P822D_HELP=P822D መገለጫ ምንም ግራፊክስ የለም። +PROFILE_STAR_HELP=የኮከብ መገለጫ +DOL_LINE_FEED=መስመር ዝለል +DOL_ALIGN_LEFT=ጽሑፍን በግራ አሰልፍ +DOL_ALIGN_CENTER=የመሃል ጽሑፍ +DOL_ALIGN_RIGHT=ጽሑፍን ወደ ቀኝ አሰልፍ +DOL_USE_FONT_A=የአታሚውን ቅርጸ-ቁምፊ A ይጠቀሙ +DOL_USE_FONT_B=የአታሚውን ቅርጸ-ቁምፊ B ተጠቀም +DOL_USE_FONT_C=የአታሚውን ቅርጸ-ቁምፊ C ይጠቀሙ +DOL_PRINT_BARCODE=የአሞሌ ኮድ ያትሙ +DOL_PRINT_BARCODE_CUSTOMER_ID=የአሞሌ ኮድ ደንበኛ መታወቂያ ያትሙ +DOL_CUT_PAPER_FULL=ቲኬቱን ሙሉ በሙሉ ይቁረጡ +DOL_CUT_PAPER_PARTIAL=ቲኬቱን በከፊል ይቁረጡ +DOL_OPEN_DRAWER=የገንዘብ መሣቢያውን ይክፈቱ +DOL_ACTIVATE_BUZZER=buzzerን አንቃ +DOL_PRINT_QRCODE=QR ኮድ ያትሙ +DOL_PRINT_LOGO=የኩባንያዬን አርማ አትም +DOL_PRINT_LOGO_OLD=የኩባንያዬን አርማ አትም (የድሮ አታሚዎች) +DOL_BOLD=ደፋር +DOL_BOLD_DISABLED=ድፍረትን አሰናክል +DOL_DOUBLE_HEIGHT=ድርብ ቁመት መጠን +DOL_DOUBLE_WIDTH=ድርብ ስፋት መጠን +DOL_DEFAULT_HEIGHT_WIDTH=ነባሪ ቁመት እና ስፋት መጠን +DOL_UNDERLINE=ከስር ስር አንቃ +DOL_UNDERLINE_DISABLED=ከስር መስመር አሰናክል +DOL_BEEP=ቢፕ ድምፅ +DOL_BEEP_ALTERNATIVE=ቢፕ ድምጽ (አማራጭ ሁነታ) +DOL_PRINT_CURR_DATE=የአሁኑን ቀን/ሰዓት ያትሙ +DOL_PRINT_TEXT=ጽሑፍ አትም +DateInvoiceWithTime=የክፍያ መጠየቂያ ቀን እና ሰዓት +YearInvoice=የክፍያ መጠየቂያ ዓመት +DOL_VALUE_MONTH_LETTERS=የክፍያ መጠየቂያ ወር በደብዳቤዎች +DOL_VALUE_MONTH=የክፍያ መጠየቂያ ወር +DOL_VALUE_DAY=የክፍያ መጠየቂያ ቀን +DOL_VALUE_DAY_LETTERS=የክፍያ መጠየቂያ ቀን በደብዳቤዎች +DOL_LINE_FEED_REVERSE=የመስመር ምግብ ተቃራኒ +InvoiceID=የክፍያ መጠየቂያ መታወቂያ +InvoiceRef=የክፍያ መጠየቂያ ማጣቀሻ +DOL_PRINT_OBJECT_LINES=የክፍያ መጠየቂያ መስመሮች +DOL_VALUE_CUSTOMER_FIRSTNAME=የደንበኛ ስም +DOL_VALUE_CUSTOMER_LASTNAME=የደንበኛ ስም +DOL_VALUE_CUSTOMER_MAIL=የደንበኛ ደብዳቤ +DOL_VALUE_CUSTOMER_PHONE=የደንበኛ ስልክ +DOL_VALUE_CUSTOMER_MOBILE=የደንበኛ ሞባይል +DOL_VALUE_CUSTOMER_SKYPE=የደንበኛ ስካይፕ +DOL_VALUE_CUSTOMER_TAX_NUMBER=የደንበኛ ግብር ቁጥር +DOL_VALUE_CUSTOMER_ACCOUNT_BALANCE=የደንበኛ መለያ ቀሪ ሂሳብ +DOL_VALUE_MYSOC_NAME=የድርጅትዎ ስም +VendorLastname=የአያት ስም ሻጭ +VendorFirstname=የመጀመሪያ ስም ሻጭ +VendorEmail=ሻጭ ኢሜይል +DOL_VALUE_CUSTOMER_POINTS=የደንበኛ ነጥቦች +DOL_VALUE_OBJECT_POINTS=የነገር ነጥቦች diff --git a/htdocs/langs/am_ET/receptions.lang b/htdocs/langs/am_ET/receptions.lang index 7f1a97d16a9..8ed5fbb59d0 100644 --- a/htdocs/langs/am_ET/receptions.lang +++ b/htdocs/langs/am_ET/receptions.lang @@ -1,54 +1,56 @@ # Dolibarr language file - Source file is en_US - receptions -ReceptionDescription=Vendor reception management (Create reception documents) -ReceptionsSetup=Vendor Reception setup -RefReception=Ref. reception -Reception=Reception -Receptions=Receptions -AllReceptions=All Receptions -Reception=Reception -Receptions=Receptions -ShowReception=Show Receptions -ReceptionsArea=Receptions area -ListOfReceptions=List of receptions -ReceptionMethod=Reception method -LastReceptions=Latest %s receptions -StatisticsOfReceptions=Statistics for receptions -NbOfReceptions=Number of receptions -NumberOfReceptionsByMonth=Number of receptions by month -ReceptionCard=Reception card -NewReception=New reception -CreateReception=Create reception -QtyInOtherReceptions=Qty in other receptions -OtherReceptionsForSameOrder=Other receptions for this order -ReceptionsAndReceivingForSameOrder=Receptions and receipts for this order -ReceptionsToValidate=Receptions to validate -StatusReceptionCanceled=Canceled -StatusReceptionDraft=Draft -StatusReceptionValidated=Validated (products to receive or already received) -StatusReceptionValidatedToReceive=Validated (products to receive) -StatusReceptionValidatedReceived=Validated (products received) -StatusReceptionProcessed=Processed -StatusReceptionDraftShort=Draft -StatusReceptionValidatedShort=Validated -StatusReceptionProcessedShort=Processed -ReceptionSheet=Reception sheet -ConfirmDeleteReception=Are you sure you want to delete this reception? -ConfirmValidateReception=Are you sure you want to validate this reception with reference %s? -ConfirmCancelReception=Are you sure you want to cancel this reception? -StatsOnReceptionsOnlyValidated=Statistics conducted on receptions only validated. Date used is date of validation of reception (planed delivery date is not always known). -SendReceptionByEMail=Send reception by email -SendReceptionRef=Submission of reception %s -ActionsOnReception=Events on reception -ReceptionCreationIsDoneFromOrder=For the moment, creation of a new reception is done from the Purchase Order. -ReceptionLine=Reception line -ProductQtyInReceptionAlreadySent=Product quantity from open sales order already sent -ProductQtyInSuppliersReceptionAlreadyRecevied=Product quantity from open supplier order already received -ValidateOrderFirstBeforeReception=You must first validate the order before being able to make receptions. -ReceptionsNumberingModules=Numbering module for receptions -ReceptionsReceiptModel=Document templates for receptions -NoMorePredefinedProductToDispatch=No more predefined products to dispatch -ReceptionExist=A reception exists -ByingPrice=Bying price -ReceptionBackToDraftInDolibarr=Reception %s back to draft -ReceptionClassifyClosedInDolibarr=Reception %s classified Closed -ReceptionUnClassifyCloseddInDolibarr=Reception %s re-open +ReceptionDescription=የአቅራቢዎች መቀበያ አስተዳደር (የመቀበያ ሰነዶችን ይፍጠሩ) +ReceptionsSetup=የአቅራቢ መቀበያ ማዋቀር +RefReception=ማጣቀሻ. መቀበያ +Reception=መቀበያ +Receptions=አቀባበል +AllReceptions=ሁሉም አቀባበል +ShowReception=አቀባበል አሳይ +ReceptionsArea=የመቀበያ ቦታ +ListOfReceptions=የአቀባበል ዝርዝር +ReceptionMethod=የመቀበያ ዘዴ +LastReceptions=የቅርብ ጊዜ %s አቀባበል +StatisticsOfReceptions=የአቀባበል ስታቲስቲክስ +NbOfReceptions=የአቀባበል ብዛት +NumberOfReceptionsByMonth=የመቀበያ ብዛት በወር +ReceptionCard=መቀበያ ካርድ +NewReception=አዲስ አቀባበል +CreateReception=መቀበያ ይፍጠሩ +QtyInOtherReceptions=በሌሎች መስተንግዶዎች ውስጥ Qty +OtherReceptionsForSameOrder=ለዚህ ትዕዛዝ ሌሎች መስተንግዶዎች +ReceptionsAndReceivingForSameOrder=ለዚህ ትዕዛዝ መቀበል እና ደረሰኞች +ReceptionsToValidate=ለማፅደቅ የተደረገ አቀባበል +StatusReceptionCanceled=ተሰርዟል። +StatusReceptionDraft=ረቂቅ +StatusReceptionValidated=የተረጋገጠ (ምርቶች ለመቀበል ወይም ቀድሞ የተቀበሉ) +StatusReceptionValidatedToReceive=የተረጋገጠ (ምርት ለመቀበል) +StatusReceptionValidatedReceived=የተረጋገጠ (ምርቶች ተቀብለዋል) +StatusReceptionProcessed=ተሰራ +StatusReceptionDraftShort=ረቂቅ +StatusReceptionValidatedShort=ተረጋግጧል +StatusReceptionProcessedShort=ተሰራ +ReceptionSheet=መቀበያ ወረቀት +ValidateReception=መቀበሉን ያረጋግጡ +ConfirmDeleteReception=እርግጠኛ ነዎት ይህን አቀባበል መሰረዝ ይፈልጋሉ? +ConfirmValidateReception=Are you sure you want to validate this reception with the reference %s? +ConfirmCancelReception=እርግጠኛ ነዎት ይህን አቀባበል መሰረዝ ይፈልጋሉ? +StatsOnReceptionsOnlyValidated=በተረጋገጡ መቀበያዎች ላይ ብቻ የተካሄደ ስታቲስቲክስ። ጥቅም ላይ የዋለው ቀን መቀበያው የተረጋገጠበት ቀን ነው (የታቀደው የመላኪያ ቀን ሁልጊዜ አይታወቅም)። +SendReceptionByEMail=አቀባበል በኢሜል ላክ +SendReceptionRef=የአቀባበል አቀራረብ %s +ActionsOnReception=በአቀባበል ላይ ያሉ ክስተቶች +ReceptionCreationIsDoneFromOrder=ለጊዜው፣ አዲስ መቀበያ መፍጠር የሚከናወነው ከግዢ ትዕዛዝ ነው። +ReceptionLine=መቀበያ መስመር +ProductQtyInReceptionAlreadySent=ከክፍት የሽያጭ ትእዛዝ የምርት ብዛት አስቀድሞ ተልኳል። +ProductQtyInSuppliersReceptionAlreadyRecevied=ከክፍት አቅራቢ ትዕዛዝ የተገኘው የምርት ብዛት +ValidateOrderFirstBeforeReception=አቀባበል ለማድረግ ከመቻልዎ በፊት በመጀመሪያ ትዕዛዙን ማረጋገጥ አለብዎት። +ReceptionsNumberingModules=የቁጥር ሞጁል ለእንግዶች አቀባበል +ReceptionsReceiptModel=የሰነድ አብነቶች ለአቀባበል +NoMorePredefinedProductToDispatch=ለመላክ ምንም ተጨማሪ አስቀድሞ የተገለጹ ምርቶች የሉም +ReceptionExist=አቀባበል አለ። +ReceptionBackToDraftInDolibarr=አቀባበል %s ወደ ረቂቅ ተመለስ +ReceptionClassifyClosedInDolibarr=መቀበያ %s ተዘግቷል +ReceptionUnClassifyCloseddInDolibarr=መቀበያ %s እንደገና ይከፈታል +RestoreWithCurrentQtySaved=በቅርብ የተቀመጡ ዋጋዎች መጠኖችን ይሙሉ +ReceptionsRecorded=አቀባበል ተመዝግቧል +ReceptionUpdated=አቀባበል በተሳካ ሁኔታ ዘምኗል +ReceptionDistribution=መቀበያ ስርጭት diff --git a/htdocs/langs/am_ET/resource.lang b/htdocs/langs/am_ET/resource.lang index e8574dc680f..9bc4ef5257b 100644 --- a/htdocs/langs/am_ET/resource.lang +++ b/htdocs/langs/am_ET/resource.lang @@ -1,39 +1,41 @@ # Dolibarr language file - Source file is en_US - resource -MenuResourceIndex=Resources -MenuResourceAdd=New resource -DeleteResource=Delete resource -ConfirmDeleteResourceElement=Confirm delete the resource for this element -NoResourceInDatabase=No resource in database. -NoResourceLinked=No resource linked -ActionsOnResource=Events about this resource -ResourcePageIndex=Resources list -ResourceSingular=Resource -ResourceCard=Resource card -AddResource=Create a resource -ResourceFormLabel_ref=Resource name -ResourceType=Resource type -ResourceFormLabel_description=Resource description +MenuResourceIndex=መርጃዎች +MenuResourceAdd=አዲስ መርጃ +DeleteResource=ሀብትን ሰርዝ +ConfirmDeleteResourceElement=የዚህን ንጥረ ነገር ምንጭ መሰረዝን ያረጋግጡ +NoResourceInDatabase=በመረጃ ቋት ውስጥ ምንም ግብዓት የለም። +NoResourceLinked=ምንም ምንጭ አልተገናኘም። +ActionsOnResource=ስለዚህ ሀብት ክስተቶች +ResourcePageIndex=የመርጃዎች ዝርዝር +ResourceSingular=ምንጭ +ResourceCard=የንብረት ካርድ +AddResource=ምንጭ ይፍጠሩ +ResourceFormLabel_ref=የንብረት ስም +ResourceType=የንብረት አይነት +ResourceFormLabel_description=የንብረት መግለጫ -ResourcesLinkedToElement=Resources linked to element +ResourcesLinkedToElement=ከኤለመንት ጋር የተገናኙ መርጃዎች -ShowResource=Show resource +ShowResource=ምንጭ አሳይ -ResourceElementPage=Element resources -ResourceCreatedWithSuccess=Resource successfully created -RessourceLineSuccessfullyDeleted=Resource line successfully deleted -RessourceLineSuccessfullyUpdated=Resource line successfully updated -ResourceLinkedWithSuccess=Resource linked with success +ResourceElementPage=የንጥረ ነገሮች ሀብቶች +ResourceCreatedWithSuccess=ሃብት በተሳካ ሁኔታ ተፈጥሯል። +RessourceLineSuccessfullyDeleted=የመርጃ መስመር በተሳካ ሁኔታ ተሰርዟል። +RessourceLineSuccessfullyUpdated=የመርጃ መስመር በተሳካ ሁኔታ ዘምኗል +ResourceLinkedWithSuccess=ምንጭ ከስኬት ጋር የተገናኘ -ConfirmDeleteResource=Confirm to delete this resource -RessourceSuccessfullyDeleted=Resource successfully deleted -DictionaryResourceType=Type of resources +ConfirmDeleteResource=ይህንን ግብዓት ለመሰረዝ ያረጋግጡ +RessourceSuccessfullyDeleted=ሃብት በተሳካ ሁኔታ ተሰርዟል። +DictionaryResourceType=የንብረቶች አይነት -SelectResource=Select resource +SelectResource=መርጃ ይምረጡ -IdResource=Id resource -AssetNumber=Serial number -ResourceTypeCode=Resource type code -ImportDataset_resource_1=Resources +IdResource=የመታወቂያ ምንጭ +AssetNumber=ተከታታይ ቁጥር +ResourceTypeCode=የንብረት አይነት ኮድ +ImportDataset_resource_1=መርጃዎች -ErrorResourcesAlreadyInUse=Some resources are in use -ErrorResourceUseInEvent=%s used in %s event +ErrorResourcesAlreadyInUse=አንዳንድ ሀብቶች ጥቅም ላይ ይውላሉ +ErrorResourceUseInEvent=%s በ%s ክስተት ውስጥ ጥቅም ላይ ውሏል + +MaxUsers=Maximum users (places, seats, etc.) diff --git a/htdocs/langs/am_ET/salaries.lang b/htdocs/langs/am_ET/salaries.lang index c0e115a20df..da6f432f1ff 100644 --- a/htdocs/langs/am_ET/salaries.lang +++ b/htdocs/langs/am_ET/salaries.lang @@ -1,26 +1,33 @@ # Dolibarr language file - Source file is en_US - salaries -SALARIES_ACCOUNTING_ACCOUNT_PAYMENT=Accounting account used for user third parties -SALARIES_ACCOUNTING_ACCOUNT_PAYMENT_Desc=The dedicated accounting account defined on user card will be used for Subledger accounting only. This one will be used for General Ledger and as default value of Subledger accounting if dedicated user accounting account on user is not defined. -SALARIES_ACCOUNTING_ACCOUNT_CHARGE=Accounting account by default for wage payments -CREATE_NEW_SALARY_WITHOUT_AUTO_PAYMENT=By default, leave empty the option "Automatically create a total payment" when creating a Salary -Salary=Salary -Salaries=Salaries -NewSalary=New salary -AddSalary=Add salary -NewSalaryPayment=New salary card -AddSalaryPayment=Add salary payment -SalaryPayment=Salary payment -SalariesPayments=Salaries payments -SalariesPaymentsOf=Salaries payments of %s -ShowSalaryPayment=Show salary payment -THM=Average hourly rate -TJM=Average daily rate -CurrentSalary=Current salary -THMDescription=This value may be used to calculate the cost of time consumed on a project entered by users if module project is used -TJMDescription=This value is currently for information only and is not used for any calculation -LastSalaries=Latest %s salaries -AllSalaries=All salaries -SalariesStatistics=Salary statistics -SalariesAndPayments=Salaries and payments -ConfirmDeleteSalaryPayment=Do you want to delete this salary payment ? -FillFieldFirst=Fill employee field first +SALARIES_ACCOUNTING_ACCOUNT_PAYMENT=መለያ (ከመለያ ገበታ) በነባሪነት ለ "ተጠቃሚ" ሶስተኛ ወገኖች ጥቅም ላይ የዋለ +SALARIES_ACCOUNTING_ACCOUNT_PAYMENT_Desc=በተጠቃሚ ካርድ ላይ የተገለጸው የተወሰነ መለያ ለ Subledger ሒሳብ ብቻ ጥቅም ላይ ይውላል። ይህ ለጠቅላላ Ledger እና ለ Subledger የሂሳብ አያያዝ ነባሪ እሴት ጥቅም ላይ የሚውለው በተጠቃሚው ላይ የተወሰነ የተጠቃሚ መለያ መለያ ካልተገለጸ ነው። +SALARIES_ACCOUNTING_ACCOUNT_CHARGE=ለደመወዝ ክፍያዎች በነባሪ የሂሳብ አያያዝ መለያ +CREATE_NEW_SALARY_WITHOUT_AUTO_PAYMENT=በነባሪ ደመወዝ ሲፈጥሩ "ጠቅላላ ክፍያን በራስ-ሰር ፍጠር" የሚለውን አማራጭ ባዶ ይተዉት። +Salary=ደሞዝ +Salaries=ደሞዝ +NewSalary=አዲስ ደመወዝ +AddSalary=ደሞዝ ጨምር +NewSalaryPayment=አዲስ የደመወዝ ካርድ +AddSalaryPayment=የደመወዝ ክፍያ ጨምር +SalaryPayment=የደመወዝ ክፍያ +SalariesPayments=የደመወዝ ክፍያዎች +SalariesPaymentsOf=የ%s የደመወዝ ክፍያዎች +ShowSalaryPayment=የደመወዝ ክፍያ አሳይ +THM=አማካይ የሰዓት ተመን +TJM=አማካይ ዕለታዊ ተመን +CurrentSalary=የአሁኑ ደመወዝ +THMDescription=ይህ ዋጋ ሞጁል ፕሮጀክት ጥቅም ላይ ከዋለ በተጠቃሚዎች የገባ ፕሮጀክት ላይ የሚፈጀውን ጊዜ ለማስላት ጥቅም ላይ ሊውል ይችላል። +TJMDescription=ይህ ዋጋ በአሁኑ ጊዜ ለመረጃ ብቻ ነው እና ለማንኛውም ስሌት ጥቅም ላይ አይውልም +LastSalaries=የቅርብ ጊዜ %s ደመወዝ +AllSalaries=ሁሉም ደሞዝ +SalariesStatistics=የደመወዝ ስታቲስቲክስ +SalariesAndPayments=ደመወዝ እና ክፍያዎች +ConfirmDeleteSalaryPayment=ይህን የደመወዝ ክፍያ መሰረዝ ይፈልጋሉ? +FillFieldFirst=መጀመሪያ የሰራተኛውን መስክ ይሙሉ +UpdateAmountWithLastSalary=የመጨረሻውን የደመወዝ መጠን ያዘጋጁ +MakeTransferRequest=የማስተላለፊያ ጥያቄ አቅርቡ +VirementOrder=የብድር ማስተላለፍ ጥያቄ +BankTransferAmount=የብድር ማስተላለፍ መጠን +WithdrawalReceipt=የዱቤ ማስተላለፍ ትዕዛዝ +OrderWaiting=በመጠባበቅ ላይ ያለ ትዕዛዝ +FillEndOfMonth=በወሩ መጨረሻ ሙላ diff --git a/htdocs/langs/am_ET/sendings.lang b/htdocs/langs/am_ET/sendings.lang index 8f10b1e9404..8dcf3a07f1c 100644 --- a/htdocs/langs/am_ET/sendings.lang +++ b/htdocs/langs/am_ET/sendings.lang @@ -1,76 +1,86 @@ # Dolibarr language file - Source file is en_US - sendings -RefSending=Ref. shipment -Sending=Shipment -Sendings=Shipments -AllSendings=All Shipments -Shipment=Shipment -Shipments=Shipments -ShowSending=Show Shipments -Receivings=Delivery Receipts -SendingsArea=Shipments area -ListOfSendings=List of shipments -SendingMethod=Shipping method -LastSendings=Latest %s shipments -StatisticsOfSendings=Statistics for shipments -NbOfSendings=Number of shipments -NumberOfShipmentsByMonth=Number of shipments by month -SendingCard=Shipment card -NewSending=New shipment -CreateShipment=Create shipment -QtyShipped=Qty shipped -QtyShippedShort=Qty ship. -QtyPreparedOrShipped=Qty prepared or shipped -QtyToShip=Qty to ship -QtyToReceive=Qty to receive -QtyReceived=Qty received -QtyInOtherShipments=Qty in other shipments -KeepToShip=Remain to ship -KeepToShipShort=Remain -OtherSendingsForSameOrder=Other shipments for this order -SendingsAndReceivingForSameOrder=Shipments and receipts for this order -SendingsToValidate=Shipments to validate -StatusSendingCanceled=Canceled -StatusSendingCanceledShort=Canceled -StatusSendingDraft=Draft -StatusSendingValidated=Validated (products to ship or already shipped) -StatusSendingProcessed=Processed -StatusSendingDraftShort=Draft -StatusSendingValidatedShort=Validated -StatusSendingProcessedShort=Processed -SendingSheet=Shipment sheet -ConfirmDeleteSending=Are you sure you want to delete this shipment? -ConfirmValidateSending=Are you sure you want to validate this shipment with reference %s? -ConfirmCancelSending=Are you sure you want to cancel this shipment? -DocumentModelMerou=Merou A5 model -WarningNoQtyLeftToSend=Warning, no products waiting to be shipped. -StatsOnShipmentsOnlyValidated=Statistics are only for validated shipments. Date used is the date of validation of shipment (planned delivery date is not always known) -DateDeliveryPlanned=Planned date of delivery -RefDeliveryReceipt=Ref delivery receipt -StatusReceipt=Status delivery receipt -DateReceived=Date delivery received -ClassifyReception=Classify reception -SendShippingByEMail=Send shipment by email -SendShippingRef=Submission of shipment %s -ActionsOnShipping=Events on shipment -LinkToTrackYourPackage=Link to track your package -ShipmentCreationIsDoneFromOrder=For the moment, creation of a new shipment is done from the Sales Order record. -ShipmentLine=Shipment line -ProductQtyInCustomersOrdersRunning=Product quantity from open sales orders -ProductQtyInSuppliersOrdersRunning=Product quantity from open purchase orders -ProductQtyInShipmentAlreadySent=Product quantity from open sales order already sent -ProductQtyInSuppliersShipmentAlreadyRecevied=Product quantity from open purchase orders already received -NoProductToShipFoundIntoStock=No product to ship found in warehouse %s. Correct stock or go back to choose another warehouse. -WeightVolShort=Weight/Vol. -ValidateOrderFirstBeforeShipment=You must first validate the order before being able to make shipments. +RefSending=ማጣቀሻ. ጭነት +Sending=መላኪያ +Sendings=ማጓጓዣዎች +AllSendings=ሁሉም መላኪያዎች +Shipment=መላኪያ +Shipments=ማጓጓዣዎች +ShowSending=መላኪያዎችን አሳይ +Receivings=የመላኪያ ደረሰኞች +SendingsArea=የመላኪያ አካባቢ +ListOfSendings=የመላኪያዎች ዝርዝር +SendingMethod=የማጓጓዣ ዘዴ +LastSendings=የቅርብ ጊዜ %s መላኪያዎች +StatisticsOfSendings=የመላኪያ ስታቲስቲክስ +NbOfSendings=የመላኪያዎች ብዛት +NumberOfShipmentsByMonth=የመላኪያዎች ብዛት በወር +SendingCard=የመላኪያ ካርድ +NewSending=አዲስ ጭነት +CreateShipment=ጭነት ይፍጠሩ +QtyShipped=ብዛት ተልኳል። +QtyShippedShort=Qty መርከብ። +QtyPreparedOrShipped=Qty ተዘጋጅቷል ወይም ተልኳል። +QtyToShip=ለመላክ Qty +QtyToReceive=ለመቀበል Qty +QtyReceived=Qty ተቀብሏል። +QtyInOtherShipments=Qty በሌሎች መላኪያዎች +KeepToShip=ለመላክ ይቆዩ +KeepToShipShort=ቀረ +OtherSendingsForSameOrder=ለዚህ ትዕዛዝ ሌሎች መላኪያዎች +SendingsAndReceivingForSameOrder=የዚህ ትዕዛዝ ማጓጓዣዎች እና ደረሰኞች +SendingsToValidate=ለማረጋገጫ መላኪያዎች +StatusSendingCanceled=ተሰርዟል። +StatusSendingCanceledShort=ተሰርዟል። +StatusSendingDraft=ረቂቅ +StatusSendingValidated=የተረጋገጠ (ምርቶች የሚላኩ ወይም አስቀድሞ የተላኩ) +StatusSendingProcessed=ተሰራ +StatusSendingDraftShort=ረቂቅ +StatusSendingValidatedShort=ተረጋግጧል +StatusSendingProcessedShort=ተሰራ +SendingSheet=የመላኪያ ሉህ +ConfirmDeleteSending=እርግጠኛ ነዎት ይህን ጭነት መሰረዝ ይፈልጋሉ? +ConfirmValidateSending=Are you sure you want to validate this shipment with the reference %s? +ConfirmCancelSending=እርግጠኛ ነዎት ይህን ጭነት መሰረዝ ይፈልጋሉ? +DocumentModelMerou=Merou A5 ሞዴል +WarningNoQtyLeftToSend=ማስጠንቀቂያ፣ ለመላክ የሚጠብቁ ምርቶች የሉም። +StatsOnShipmentsOnlyValidated=ስታቲስቲክስ ለተረጋገጠ ጭነት ብቻ ነው። ጥቅም ላይ የዋለው የመርከብ ጭነት የተረጋገጠበት ቀን ነው (የታቀደው የመላኪያ ቀን ሁልጊዜ አይታወቅም) +DateDeliveryPlanned=የሚላክበት ቀን +RefDeliveryReceipt=የማጣቀሻ ደረሰኝ +StatusReceipt=የሁኔታ መላኪያ ደረሰኝ +DateReceived=የተደረሰበት ቀን +ClassifyReception=መድብ ተቀብሏል +SendShippingByEMail=ጭነት በኢሜል ይላኩ። +SendShippingRef=የማጓጓዣ ማስረከብ %s +ActionsOnShipping=በማጓጓዝ ላይ ያሉ ክስተቶች +LinkToTrackYourPackage=ጥቅልዎን ለመከታተል አገናኝ +ShipmentCreationIsDoneFromOrder=ለጊዜው፣ አዲስ ጭነት መፍጠር የሚከናወነው ከሽያጭ ትዕዛዝ መዝገብ ነው። +ShipmentLine=የማጓጓዣ መስመር +ProductQtyInCustomersOrdersRunning=ከተከፈቱ የሽያጭ ትዕዛዞች የምርት ብዛት +ProductQtyInSuppliersOrdersRunning=ከክፍት የግዢ ትዕዛዞች የምርት ብዛት +ProductQtyInShipmentAlreadySent=ከክፍት የሽያጭ ትእዛዝ የምርት ብዛት አስቀድሞ ተልኳል። +ProductQtyInSuppliersShipmentAlreadyRecevied=አስቀድሞ ከደረሰው ክፍት የግዢ ትዕዛዞች የምርት ብዛት +NoProductToShipFoundIntoStock=ምንም የሚላክ ምርት በመጋዘን ውስጥ አልተገኘም %s አክሲዮን አስተካክል ወይም ሌላ መጋዘን ለመምረጥ ተመለስ። +WeightVolShort=ክብደት/ጥራዝ +ValidateOrderFirstBeforeShipment=ማጓጓዝ ከመቻልዎ በፊት በመጀመሪያ ትዕዛዙን ማረጋገጥ አለብዎት። +NoLineGoOnTabToAddSome=መስመር የለም፣ ለመጨመር "%s" የሚለውን ትር ቀጥል # Sending methods # ModelDocument -DocumentModelTyphon=More complete document model for delivery receipts (logo...) -DocumentModelStorm=More complete document model for delivery receipts and extrafields compatibility (logo...) -Error_EXPEDITION_ADDON_NUMBER_NotDefined=Constant EXPEDITION_ADDON_NUMBER not defined -SumOfProductVolumes=Sum of product volumes -SumOfProductWeights=Sum of product weights +DocumentModelTyphon=ለመላኪያ ደረሰኞች የበለጠ የተሟላ ሰነድ ሞዴል (አርማ...) +DocumentModelStorm=የመላኪያ ደረሰኞች እና ተጨማሪ ሜዳዎች ተኳሃኝነት የበለጠ የተሟላ ሰነድ ሞዴል (አርማ...) +Error_EXPEDITION_ADDON_NUMBER_NotDefined=ቋሚ EXPEDITION_ADDON_NUMBER አልተገለጸም። +SumOfProductVolumes=የምርት መጠኖች ድምር +SumOfProductWeights=የምርት ክብደት ድምር # warehouse details -DetailWarehouseNumber= Warehouse details -DetailWarehouseFormat= W:%s (Qty: %d) +DetailWarehouseNumber= የመጋዘን ዝርዝሮች +DetailWarehouseFormat= ወ፡%s (Qty: %d) +SHIPPING_DISPLAY_STOCK_ENTRY_DATE=የመለያ ቁጥር ወይም ባች በሚላክበት ጊዜ በክምችት ውስጥ የገባበትን የመጨረሻ ቀን አሳይ +CreationOptions=በማጓጓዣ ጊዜ ውስጥ ያሉ አማራጮች + +ShipmentDistribution=የማጓጓዣ ስርጭት + +ErrorTooManyCombinationBatchcode=ለመስመር ምንም መላኪያ የለም %s እንደ ብዙ የመጋዘን፣ የምርት፣ የባች ኮድ ጥምረት አልተገኘም (%s)። +ErrorNoCombinationBatchcode=Could not save the line %s as the combination of warehouse-product-lot/serial (%s, %s, %s) was not found in stock. + +ErrorTooMuchShipped=የተላከው መጠን ለመስመር %s ከታዘዘው መጠን መብለጥ የለበትም። diff --git a/htdocs/langs/am_ET/sms.lang b/htdocs/langs/am_ET/sms.lang index 055085eb16a..adb88ede4c3 100644 --- a/htdocs/langs/am_ET/sms.lang +++ b/htdocs/langs/am_ET/sms.lang @@ -1,51 +1,51 @@ # Dolibarr language file - Source file is en_US - sms -Sms=Sms -SmsSetup=SMS setup -SmsDesc=This page allows you to define global options on SMS features -SmsCard=SMS Card -AllSms=All SMS campaigns -SmsTargets=Targets -SmsRecipients=Targets -SmsRecipient=Target -SmsTitle=Description -SmsFrom=Sender -SmsTo=Target -SmsTopic=Topic of SMS -SmsText=Message -SmsMessage=SMS Message -ShowSms=Show SMS -ListOfSms=List SMS campaigns -NewSms=New SMS campaign -EditSms=Edit SMS -ResetSms=New sending -DeleteSms=Delete SMS campaign -DeleteASms=Remove a SMS campaign -PreviewSms=Previuw SMS -PrepareSms=Prepare SMS -CreateSms=Create SMS -SmsResult=Result of SMS sending -TestSms=Test SMS -ValidSms=Validate SMS -ApproveSms=Approve SMS -SmsStatusDraft=Draft -SmsStatusValidated=Validated -SmsStatusApproved=Approved -SmsStatusSent=Sent -SmsStatusSentPartialy=Sent partially -SmsStatusSentCompletely=Sent completely -SmsStatusError=Error -SmsStatusNotSent=Not sent -SmsSuccessfulySent=SMS correctly sent (from %s to %s) -ErrorSmsRecipientIsEmpty=Number of target is empty -WarningNoSmsAdded=No new phone number to add to target list -ConfirmValidSms=Do you confirm validation of this campaign? -NbOfUniqueSms=No. of unique phone numbers -NbOfSms=No. of phone numbers -ThisIsATestMessage=This is a test message -SendSms=Send SMS -SmsInfoCharRemain=No. of remaining characters -SmsInfoNumero= (international format i.e.: +33899701761) -DelayBeforeSending=Delay before sending (minutes) -SmsNoPossibleSenderFound=No sender available. Check setup of your SMS provider. -SmsNoPossibleRecipientFound=No target available. Check setup of your SMS provider. -DisableStopIfSupported=Disable STOP message (if supported) +Sms=ኤስኤምኤስ +SmsSetup=የኤስኤምኤስ ማዋቀር +SmsDesc=ይህ ገጽ በኤስኤምኤስ ባህሪያት ላይ አለምአቀፍ አማራጮችን እንዲገልጹ ያስችልዎታል +SmsCard=የኤስኤምኤስ ካርድ +AllSms=ሁሉም የኤስኤምኤስ ዘመቻዎች +SmsTargets=ዒላማዎች +SmsRecipients=ዒላማዎች +SmsRecipient=ዒላማ +SmsTitle=መግለጫ +SmsFrom=ላኪ +SmsTo=ዒላማ +SmsTopic=የኤስኤምኤስ ርዕስ +SmsText=መልእክት +SmsMessage=የኤስኤምኤስ መልእክት +ShowSms=ኤስኤምኤስ አሳይ +ListOfSms=የኤስኤምኤስ ዘመቻዎችን ይዘርዝሩ +NewSms=አዲስ የኤስኤምኤስ ዘመቻ +EditSms=SMS አርትዕ +ResetSms=አዲስ መላኪያ +DeleteSms=የኤስኤምኤስ ዘመቻን ሰርዝ +DeleteASms=የኤስኤምኤስ ዘመቻን ያስወግዱ +PreviewSms=ኤስኤምኤስ አስቀድመው ይመልከቱ +PrepareSms=ኤስኤምኤስ ያዘጋጁ +CreateSms=SMS ፍጠር +SmsResult=የኤስኤምኤስ መላኪያ ውጤት +TestSms=የኤስኤምኤስ ሙከራ ያድርጉ +ValidSms=ኤስኤምኤስ ያረጋግጡ +ApproveSms=ኤስኤምኤስ አጽድቅ +SmsStatusDraft=ረቂቅ +SmsStatusValidated=ተረጋግጧል +SmsStatusApproved=ጸድቋል +SmsStatusSent=ተልኳል። +SmsStatusSentPartialy=በከፊል ተልኳል። +SmsStatusSentCompletely=ሙሉ በሙሉ ተልኳል። +SmsStatusError=ስህተት +SmsStatusNotSent=አልተላከም። +SmsSuccessfulySent=ኤስኤምኤስ በትክክል ተልኳል (ከ%s ወደ %s) +ErrorSmsRecipientIsEmpty=የዒላማው ብዛት ባዶ ነው። +WarningNoSmsAdded=ወደ ዒላማ ዝርዝር የሚታከል አዲስ ስልክ ቁጥር የለም። +ConfirmValidSms=የዚህ ዘመቻ ትክክለኛነት አረጋግጠዋል? +NbOfUniqueSms=የልዩ ስልክ ቁጥሮች ቁጥር +NbOfSms=የስልክ ቁጥሮች ቁጥር +ThisIsATestMessage=ይህ የፈተና መልእክት ነው። +SendSms=ኤስኤምኤስ ላክ +SmsInfoCharRemain=የተቀሩት ቁምፊዎች ብዛት +SmsInfoNumero= (ዓለም አቀፍ ቅርጸት ማለትም፡ +33899701761) +DelayBeforeSending=ከመላክዎ በፊት መዘግየት (ደቂቃዎች) +SmsNoPossibleSenderFound=ምንም ላኪ አይገኝም። የኤስኤምኤስ አቅራቢዎን ማዋቀር ያረጋግጡ። +SmsNoPossibleRecipientFound=ምንም ኢላማ የለም። የኤስኤምኤስ አቅራቢዎን ማዋቀር ያረጋግጡ። +DisableStopIfSupported=STOP መልዕክትን አሰናክል (የሚደገፍ ከሆነ) diff --git a/htdocs/langs/am_ET/stocks.lang b/htdocs/langs/am_ET/stocks.lang index 7ea19e0d3fb..15cba5e1810 100644 --- a/htdocs/langs/am_ET/stocks.lang +++ b/htdocs/langs/am_ET/stocks.lang @@ -114,7 +114,7 @@ EstimatedStockValueSell=የሚሸጥ ዋጋ EstimatedStockValueShort=የግቤት ክምችት ዋጋ EstimatedStockValue=የግቤት ክምችት ዋጋ DeleteAWarehouse=መጋዘን ሰርዝ -ConfirmDeleteWarehouse=እርግጠኛ ነዎት መጋዘኑን መሰረዝ ይፈልጋሉ %s? +ConfirmDeleteWarehouse=Are you sure you want to delete the warehouse %s? PersonalStock=የግል ክምችት %s ThisWarehouseIsPersonalStock=ይህ መጋዘን የግል የ%s %sን ይወክላል SelectWarehouseForStockDecrease=ለክምችት ቅነሳ የሚጠቀሙበትን መጋዘን ይምረጡ @@ -145,8 +145,8 @@ ReplenishmentStatusDesc=ይህ ከተፈለገው አክሲዮን ያነሰ አ ReplenishmentStatusDescPerWarehouse=በአንድ መጋዘን በተገለፀው በተፈለገው መጠን መሰረት መሙላት ከፈለጉ በመጋዘኑ ላይ ማጣሪያ ማከል አለብዎት። ReplenishmentOrdersDesc=ይህ አስቀድሞ የተገለጹ ምርቶችን ጨምሮ የሁሉም ክፍት የግዢ ትዕዛዞች ዝርዝር ነው። አስቀድመው ከተገለጹ ምርቶች ጋር ክፍት ትዕዛዞች ብቻ ናቸው፣ ስለዚህ አክሲዮኖችን ሊነኩ የሚችሉ ትዕዛዞች እዚህ ይታያሉ። Replenishments=መሙላት -NbOfProductBeforePeriod=ከተመረጠው ጊዜ በፊት ያለው የምርት መጠን %s (<%s) -NbOfProductAfterPeriod=ከተመረጠው ጊዜ በኋላ (> %s ላይ ያለው የምርት መጠን %s +NbOfProductBeforePeriod=Quantity of product %s in stock before selected period (< %s) +NbOfProductAfterPeriod=Quantity of product %s in stock after selected period (> %s) MassMovement=የጅምላ እንቅስቃሴ SelectProductInAndOutWareHouse=የምንጭ መጋዘን (አማራጭ)፣ የታለመ መጋዘን፣ ምርት እና መጠን ይምረጡ ከዚያ «%sን ጠቅ ያድርጉ። አንዴ ይህ ለሁሉም አስፈላጊ እንቅስቃሴዎች ከተሰራ በኋላ "%s ላይ ጠቅ ያድርጉ። RecordMovement=ማስተላለፍን ይመዝግቡ @@ -171,7 +171,7 @@ MovementTransferStock=የምርት ክምችት %s ወደ ሌላ መጋዘን BatchStockMouvementAddInGlobal=ባች ክምችት ወደ አለምአቀፍ ክምችት ይሸጋገራል (ምርት ባች አይጠቀምም) InventoryCodeShort=ኢንቭ./Mov. ኮድ NoPendingReceptionOnSupplierOrder=በግዢ ትእዛዝ ምክንያት ምንም በመጠባበቅ ላይ ያለ አቀባበል የለም። -ThisSerialAlreadyExistWithDifferentDate=ይህ ዕጣ/ተከታታይ ቁጥር (%s%s ግን ገባህ span class='notranslate'>%s)። +ThisSerialAlreadyExistWithDifferentDate=This lot/serial number (%s) already exists but with different eatby or sellby date (found %s but you enter %s). OpenAnyMovement=ክፍት (ሁሉም እንቅስቃሴዎች) OpenInternal=ክፍት (የውስጥ እንቅስቃሴ ብቻ) UseDispatchStatus=በግዢ ማዘዣ መቀበያ ላይ ለምርት መስመሮች የመላኪያ ሁኔታን (አጽድቅ/እምቢ) ተጠቀም @@ -253,7 +253,7 @@ DisableStockChangeOfSubProduct=በዚህ እንቅስቃሴ ወቅት ለሁሉ ImportFromCSV=የእንቅስቃሴ ዝርዝር CSV አስመጣ ChooseFileToImport=ፋይሉን ስቀል ከዚያም የ%s አዶን ጠቅ በማድረግ ፋይሉን እንደ ምንጭ አስመጪ ፋይል ለመምረጥ... SelectAStockMovementFileToImport=ለማስመጣት የአክሲዮን እንቅስቃሴ ፋይል ይምረጡ -InfoTemplateImport=የተሰቀለው ፋይል ይህ ቅርጸት ሊኖረው ይገባል (* የግዴታ መስኮች ናቸው)፡
ምንጭ ማከማቻ* | ዒላማ መጋዘን* | ምርት* | ብዛት* | ሎት/ተከታታይ ቁጥር
CSV ቁምፊ መለያያ "b0ecb><2ec87f49f0 መሆን አለበት span class='notranslate'>" +InfoTemplateImport=Uploaded file needs to have this format (* are mandatory fields):
Source Warehouse* | Target Warehouse* | Product* | Quantity* | Lot/serial number
CSV character separator must be "%s" LabelOfInventoryMovemement=ክምችት %s ReOpen=እንደገና ክፈት ConfirmFinish=የእቃው መዘጋቱን አረጋግጠዋል? ይህ አክሲዮንዎን ወደ እቃው ያስገባዎትን ትክክለኛ ኪቲ ለማዘመን ሁሉንም የአክሲዮን እንቅስቃሴዎች ያመነጫል። @@ -282,7 +282,7 @@ ModuleStockTransferName=የላቀ የአክሲዮን ማስተላለፍ ModuleStockTransferDesc=የላቀ የአክሲዮን ማስተላለፍ አስተዳደር፣ የማስተላለፊያ ወረቀት በማመንጨት StockTransferNew=አዲስ የአክሲዮን ዝውውር StockTransferList=የአክሲዮን ዝውውሮች ዝርዝር -ConfirmValidateStockTransfer=እርግጠኛ ነዎት ይህንን የአክሲዮን ዝውውር በማጣቀሻ %sb09a4b739f17f span >? +ConfirmValidateStockTransfer=Are you sure you want to validate this stocks transfer with the reference %s ? ConfirmDestock=ከዝውውር ጋር የአክሲዮን ቅነሳ %s ConfirmDestockCancel=የአክሲዮን ቅነሳን በማስተላለፍ ይሰርዙ %s DestockAllProduct=የአክሲዮኖች ቅነሳ diff --git a/htdocs/langs/am_ET/stripe.lang b/htdocs/langs/am_ET/stripe.lang index 17d9951512b..56b088ad4d0 100644 --- a/htdocs/langs/am_ET/stripe.lang +++ b/htdocs/langs/am_ET/stripe.lang @@ -22,8 +22,8 @@ ToOfferALinkForOnlinePaymentOnContractLine=ዩአርኤል ለኮንትራት ToOfferALinkForOnlinePaymentOnFreeAmount=ምንም አይነት ነገር ሳይኖር የ%s የመስመር ላይ ክፍያ ገጽ ለማቅረብ URL. ToOfferALinkForOnlinePaymentOnMemberSubscription=ለአባል ምዝገባ %s የመስመር ላይ ክፍያ ገጽ ለማቅረብ URL. ToOfferALinkForOnlinePaymentOnDonation=ዩአርኤል ለልገሳ ክፍያ %s የመስመር ላይ መክፈያ ገጽ ለማቅረብ -YouCanAddTagOnUrl=እንዲሁም url መለኪያ ማከል ይችላሉ &tag=እሴትb0ae647358bac class='notranslate'> ወደ ማንኛቸውም ዩአርኤል (ከነገር ጋር ያልተገናኘ ክፍያ ብቻ የግዴታ) የራስዎን የክፍያ አስተያየት መለያ ለመጨመር።
ለ የክፍያ ዩአርኤል ያለ ምንም ነባር ነገር፣ ልኬቱን ማከል ይችላሉ &noidempotency=1 ስለዚህ ተመሳሳይ አገናኝ ከተመሳሳይ መለያ ጋር ብዙ ጊዜ ጥቅም ላይ ሊውል ይችላል (አንዳንድ የክፍያ ሁነታ ያለዚህ ግቤት ለእያንዳንዱ የተለየ አገናኝ ክፍያውን 1 ሊገድበው ይችላል) -SetupStripeToHavePaymentCreatedAutomatically=ስትሪፕህን በ url %s ለመክፈል በራስ ሰር ያዋቅሩ። በ Stripe የተረጋገጠ. +YouCanAddTagOnUrl=You can also add url parameter &tag=value to any of those URL (mandatory only for payment not linked to an object) to add your own payment comment tag.
For the URL of payments with no existing object, you may also add the parameter &noidempotency=1 so the same link with same tag can be used several times (some payment mode may limit the payment to 1 for each different link without this parameter) +SetupStripeToHavePaymentCreatedAutomatically=Setup your Stripe with url %s to have payment created automatically when validated by Stripe. AccountParameter=የመለያ መለኪያዎች UsageParameter=የአጠቃቀም መለኪያዎች InformationToFindParameters=የእርስዎን %s መለያ መረጃ ለማግኘት ያግዙ diff --git a/htdocs/langs/am_ET/supplier_proposal.lang b/htdocs/langs/am_ET/supplier_proposal.lang index ce5bdf0425a..2fcd9311c10 100644 --- a/htdocs/langs/am_ET/supplier_proposal.lang +++ b/htdocs/langs/am_ET/supplier_proposal.lang @@ -1,54 +1,59 @@ # Dolibarr language file - Source file is en_US - supplier_proposal -SupplierProposal=Vendor commercial proposals -supplier_proposalDESC=Manage price requests to suppliers -SupplierProposalNew=New price request -CommRequest=Price request -CommRequests=Price requests -SearchRequest=Find a request -DraftRequests=Draft requests -SupplierProposalsDraft=Draft vendor proposals -LastModifiedRequests=Latest %s modified price requests -RequestsOpened=Open price requests -SupplierProposalArea=Vendor proposals area -SupplierProposalShort=Vendor proposal -SupplierProposals=Vendor proposals -SupplierProposalsShort=Vendor proposals -NewAskPrice=New price request -ShowSupplierProposal=Show price request -AddSupplierProposal=Create a price request -SupplierProposalRefFourn=Vendor ref -SupplierProposalDate=Delivery date -SupplierProposalRefFournNotice=Before closing to "Accepted", think to grasp suppliers references. +SupplierProposal=ሻጭ የንግድ ፕሮፖዛል +supplier_proposalDESC=የዋጋ ጥያቄዎችን ለአቅራቢዎች ያስተዳድሩ +SupplierProposalNew=አዲስ የዋጋ ጥያቄ +CommRequest=የዋጋ ጥያቄ +CommRequests=የዋጋ ጥያቄዎች +SearchRequest=ጥያቄ ይፈልጉ +DraftRequests=ረቂቅ ጥያቄዎች +SupplierProposalsDraft=ረቂቅ የአቅራቢ ሀሳቦች +LastModifiedRequests=የቅርብ ጊዜ %s የተሻሻሉ የዋጋ ጥያቄዎች +RequestsOpened=የዋጋ ጥያቄዎችን ይክፈቱ +SupplierProposalArea=የአቅራቢዎች ፕሮፖዛል አካባቢ +SupplierProposalShort=የአቅራቢ ሀሳብ +SupplierProposals=የአቅራቢ ሀሳቦች +SupplierProposalsShort=የአቅራቢ ሀሳቦች +AskPrice=የዋጋ ጥያቄ +NewAskPrice=አዲስ የዋጋ ጥያቄ +ShowSupplierProposal=የዋጋ ጥያቄን አሳይ +AddSupplierProposal=የዋጋ ጥያቄ ፍጠር +SupplierProposalRefFourn=ሻጭ ማጣቀሻ +SupplierProposalDate=መላኪያ ቀን +SupplierProposalRefFournNotice=ወደ "ተቀባይነት ያለው" ከመዝጋትዎ በፊት የአቅራቢዎችን ማጣቀሻዎች ለመረዳት ያስቡበት። ConfirmValidateAsk=Are you sure you want to validate this price request under name %s? -DeleteAsk=Delete request -ValidateAsk=Validate request -SupplierProposalStatusDraft=Draft (needs to be validated) -SupplierProposalStatusValidated=Validated (request is open) -SupplierProposalStatusClosed=Closed -SupplierProposalStatusSigned=Accepted -SupplierProposalStatusNotSigned=Refused -SupplierProposalStatusDraftShort=Draft -SupplierProposalStatusValidatedShort=Validated -SupplierProposalStatusClosedShort=Closed -SupplierProposalStatusSignedShort=Accepted -SupplierProposalStatusNotSignedShort=Refused -CopyAskFrom=Create a price request by copying an existing request -CreateEmptyAsk=Create blank request +DeleteAsk=ጥያቄ ሰርዝ +ValidateAsk=ጥያቄ አረጋግጥ +SupplierProposalStatusDraft=ረቂቅ (መረጋገጥ አለበት) +SupplierProposalStatusValidated=የተረጋገጠ (ጥያቄው ክፍት ነው) +SupplierProposalStatusClosed=ዝግ +SupplierProposalStatusSigned=ተቀባይነት አግኝቷል +SupplierProposalStatusNotSigned=እምቢ አለ። +SupplierProposalStatusDraftShort=ረቂቅ +SupplierProposalStatusValidatedShort=ተረጋግጧል +SupplierProposalStatusClosedShort=ዝግ +SupplierProposalStatusSignedShort=ተቀባይነት አግኝቷል +SupplierProposalStatusNotSignedShort=እምቢ አለ። +CopyAskFrom=ያለውን ጥያቄ በመቅዳት የዋጋ ጥያቄ ይፍጠሩ +CreateEmptyAsk=ባዶ ጥያቄ ፍጠር ConfirmCloneAsk=Are you sure you want to clone the price request %s? ConfirmReOpenAsk=Are you sure you want to open back the price request %s? -SendAskByMail=Send price request by mail -SendAskRef=Sending the price request %s -SupplierProposalCard=Request card -ConfirmDeleteAsk=Are you sure you want to delete this price request %s? -ActionsOnSupplierProposal=Events on price request -DocModelAuroreDescription=A complete request model (logo...) -CommercialAsk=Price request -DefaultModelSupplierProposalCreate=Default model creation -DefaultModelSupplierProposalToBill=Default template when closing a price request (accepted) -DefaultModelSupplierProposalClosed=Default template when closing a price request (refused) -ListOfSupplierProposals=List of vendor proposal requests -ListSupplierProposalsAssociatedProject=List of vendor proposals associated with project -SupplierProposalsToClose=Vendor proposals to close -SupplierProposalsToProcess=Vendor proposals to process -LastSupplierProposals=Latest %s price requests -AllPriceRequests=All requests +SendAskByMail=የዋጋ ጥያቄን በፖስታ ይላኩ። +SendAskRef=የዋጋ ጥያቄውን በመላክ ላይ %s +SupplierProposalCard=የጥያቄ ካርድ +ConfirmDeleteAsk=እርግጠኛ ነዎት ይህን የዋጋ ጥያቄ %sመሰረዝ ይፈልጋሉ? +ActionsOnSupplierProposal=በዋጋ ጥያቄ ላይ ያሉ ክስተቶች +DocModelAuroreDescription=ለሻጭ ጥቅስ ጥያቄ የተሟላ አብነት (የስፖንጅ አብነት የቆየ ትግበራ) +DocModelZenithDescription=ለሻጭ ጥቅስ ጥያቄ የተሟላ አብነት +CommercialAsk=የዋጋ ጥያቄ +DefaultModelSupplierProposalCreate=ነባሪ ሞዴል መፍጠር +DefaultModelSupplierProposalToBill=የዋጋ ጥያቄን በሚዘጋበት ጊዜ ነባሪ አብነት (ተቀባይነት ያለው) +DefaultModelSupplierProposalClosed=የዋጋ ጥያቄን በሚዘጋበት ጊዜ ነባሪ አብነት (እምቢ) +ListOfSupplierProposals=የአቅራቢዎች ጥያቄ ዝርዝር +ListSupplierProposalsAssociatedProject=ከፕሮጀክት ጋር የተያያዙ የአቅራቢዎች ሀሳቦች ዝርዝር +SupplierProposalsToClose=ለመዝጋት የአቅራቢ ሀሳቦች +SupplierProposalsToProcess=ለማስኬድ የአቅራቢ ሀሳቦች +LastSupplierProposals=የቅርብ ጊዜ %s የዋጋ ጥያቄዎች +AllPriceRequests=ሁሉም ጥያቄዎች +TypeContact_supplier_proposal_external_SHIPPING=ለማድረስ የአቅራቢ ግንኙነት +TypeContact_supplier_proposal_external_BILLING=ለሂሳብ አከፋፈል የአቅራቢ ግንኙነት +TypeContact_supplier_proposal_external_SERVICE=የክትትል ፕሮፖዛል ተወካይ diff --git a/htdocs/langs/am_ET/ticket.lang b/htdocs/langs/am_ET/ticket.lang index 57b1f85bd40..49c9c12e73e 100644 --- a/htdocs/langs/am_ET/ticket.lang +++ b/htdocs/langs/am_ET/ticket.lang @@ -320,7 +320,7 @@ ViewTicket=ትኬት ይመልከቱ ViewMyTicketList=የቲኬቴን ዝርዝር ይመልከቱ ErrorEmailMustExistToCreateTicket=ስህተት፡ የኢሜል አድራሻችን በውሂብ ጎታችን ውስጥ አልተገኘም። TicketNewEmailSubjectAdmin=አዲስ ቲኬት ተፈጥሯል - Ref %s (የህዝብ ትኬት መታወቂያ %s) -TicketNewEmailBodyAdmin=

ትኬት አሁን የተፈጠረው በመታወቂያ #%s ነው፡ መረጃውን ይመልከቱ፡b0679c9a6a6a6d43 > +TicketNewEmailBodyAdmin=

Ticket has just been created with ID #%s, see information:

SeeThisTicketIntomanagementInterface=በአስተዳደር በይነገጽ ውስጥ ትኬት ይመልከቱ TicketPublicInterfaceForbidden=የቲኬቶቹ ይፋዊ በይነገጽ አልነቃም። ErrorEmailOrTrackingInvalid=መታወቂያ ወይም ኢሜይል ለመከታተል መጥፎ ዋጋ diff --git a/htdocs/langs/am_ET/trips.lang b/htdocs/langs/am_ET/trips.lang index 9210ede360c..416d204300e 100644 --- a/htdocs/langs/am_ET/trips.lang +++ b/htdocs/langs/am_ET/trips.lang @@ -1,150 +1,152 @@ # Dolibarr language file - Source file is en_US - trips -ShowExpenseReport=Show expense report -Trips=Expense reports -TripsAndExpenses=Expenses reports -TripsAndExpensesStatistics=Expense reports statistics -TripCard=Expense report card -AddTrip=Create expense report -ListOfTrips=List of expense reports -ListOfFees=List of fees -TypeFees=Types of fees -ShowTrip=Show expense report -NewTrip=New expense report -LastExpenseReports=Latest %s expense reports -AllExpenseReports=All expense reports -CompanyVisited=Company/organization visited -FeesKilometersOrAmout=Amount or kilometers -DeleteTrip=Delete expense report -ConfirmDeleteTrip=Are you sure you want to delete this expense report? -ListTripsAndExpenses=List of expense reports -ListToApprove=Waiting for approval -ExpensesArea=Expense reports area -ClassifyRefunded=Classify 'Refunded' -ExpenseReportWaitingForApproval=A new expense report has been submitted for approval -ExpenseReportWaitingForApprovalMessage=A new expense report has been submitted and is waiting for approval.
- User: %s
- Period: %s
Click here to validate: %s -ExpenseReportWaitingForReApproval=An expense report has been submitted for re-approval -ExpenseReportWaitingForReApprovalMessage=An expense report has been submitted and is waiting for re-approval.
The %s, you refused to approve the expense report for this reason: %s.
A new version has been proposed and waiting for your approval.
- User: %s
- Period: %s
Click here to validate: %s -ExpenseReportApproved=An expense report was approved -ExpenseReportApprovedMessage=The expense report %s was approved.
- User: %s
- Approved by: %s
Click here to show the expense report: %s -ExpenseReportRefused=An expense report was refused -ExpenseReportRefusedMessage=The expense report %s was refused.
- User: %s
- Refused by: %s
- Motive for refusal: %s
Click here to show the expense report: %s -ExpenseReportCanceled=An expense report was canceled -ExpenseReportCanceledMessage=The expense report %s was canceled.
- User: %s
- Canceled by: %s
- Motive for cancellation: %s
Click here to show the expense report: %s -ExpenseReportPaid=An expense report was paid -ExpenseReportPaidMessage=The expense report %s was paid.
- User: %s
- Paid by: %s
Click here to show the expense report: %s -TripId=Id expense report -AnyOtherInThisListCanValidate=Person to be informed for validating the request. -TripSociete=Information company -TripNDF=Informations expense report -PDFStandardExpenseReports=Standard template to generate a PDF document for expense report -ExpenseReportLine=Expense report line -TF_OTHER=Other -TF_TRIP=Transportation -TF_LUNCH=Lunch -TF_METRO=Metro -TF_TRAIN=Train -TF_BUS=Bus -TF_CAR=Car -TF_PEAGE=Toll -TF_ESSENCE=Fuel -TF_HOTEL=Hotel -TF_TAXI=Taxi -EX_KME=Mileage costs -EX_FUE=Fuel CV -EX_HOT=Hotel -EX_PAR=Parking CV -EX_TOL=Toll CV -EX_TAX=Various Taxes -EX_IND=Indemnity transportation subscription -EX_SUM=Maintenance supply -EX_SUO=Office supplies -EX_CAR=Car rental -EX_DOC=Documentation -EX_CUR=Customers receiving -EX_OTR=Other receiving -EX_POS=Postage -EX_CAM=CV maintenance and repair -EX_EMM=Employees meal -EX_GUM=Guests meal -EX_BRE=Breakfast -EX_FUE_VP=Fuel PV -EX_TOL_VP=Toll PV -EX_PAR_VP=Parking PV -EX_CAM_VP=PV maintenance and repair -DefaultCategoryCar=Default transportation mode -DefaultRangeNumber=Default range number -UploadANewFileNow=Upload a new document now -Error_EXPENSEREPORT_ADDON_NotDefined=Error, the rule for expense report numbering ref was not defined into setup of module 'Expense Report' -ErrorDoubleDeclaration=You have declared another expense report into a similar date range. -AucuneLigne=There is no expense report declared yet -ModePaiement=Payment mode -VALIDATOR=User responsible for approval -VALIDOR=Approved by -AUTHOR=Recorded by -AUTHORPAIEMENT=Paid by -REFUSEUR=Denied by -CANCEL_USER=Deleted by -MOTIF_REFUS=Reason -MOTIF_CANCEL=Reason -DATE_REFUS=Deny date -DATE_SAVE=Validation date -DATE_CANCEL=Cancelation date -DATE_PAIEMENT=Payment date -ExpenseReportRef=Ref. expense report -ValidateAndSubmit=Validate and submit for approval -ValidatedWaitingApproval=Validated (waiting for approval) -NOT_AUTHOR=You are not the author of this expense report. Operation cancelled. -ConfirmRefuseTrip=Are you sure you want to deny this expense report? -ValideTrip=Approve expense report -ConfirmValideTrip=Are you sure you want to approve this expense report? -PaidTrip=Pay an expense report -ConfirmPaidTrip=Are you sure you want to change status of this expense report to "Paid"? -ConfirmCancelTrip=Are you sure you want to cancel this expense report? -BrouillonnerTrip=Move back expense report to status "Draft" -ConfirmBrouillonnerTrip=Are you sure you want to move this expense report to status "Draft"? -SaveTrip=Validate expense report -ConfirmSaveTrip=Are you sure you want to validate this expense report? -NoTripsToExportCSV=No expense report to export for this period. -ExpenseReportPayment=Expense report payment -ExpenseReportsToApprove=Expense reports to approve -ExpenseReportsToPay=Expense reports to pay -ConfirmCloneExpenseReport=Are you sure you want to clone this expense report ? -ExpenseReportsIk=Configuration of mileage charges -ExpenseReportsRules=Expense report rules -ExpenseReportIkDesc=You can modify the calculation of kilometers expense by category and range who they are previously defined. d is the distance in kilometers -ExpenseReportRulesDesc=You can define max amount rules for expense reports. These rules will be applied when a new expense is added to an expense report -expenseReportOffset=Offset +AUTHOR=የተመዘገበው በ +AUTHORPAIEMENT=የተከፈለው በ +AddTrip=የወጪ ሪፖርት ይፍጠሩ +AllExpenseReport=ሁሉም ዓይነት የወጪ ሪፖርት +AllExpenseReports=ሁሉም የወጪ ሪፖርቶች +AnyOtherInThisListCanValidate=ጥያቄውን ስለማረጋገጡ የሚነገረው ሰው። +AttachTheNewLineToTheDocument=መስመሩን ከተሰቀለ ሰነድ ጋር ያያይዙት። +AucuneLigne=እስካሁን የተገለጸ የወጪ ሪፖርት የለም። +BrouillonnerTrip=የወጪ ሪፖርትን ወደ "ረቂቅ" ሁኔታ ውሰድ +byEX_DAY=በቀን (በ%s የተገደበ) +byEX_EXP=በመስመር (በ %s የተገደበ) +byEX_MON=በወር (በ%s የተገደበ) +byEX_YEA=በዓመት (በ%s የተገደበ) +CANCEL_USER=ተሰርዟል። +CarCategory=የተሽከርካሪ ምድብ +ClassifyRefunded=«የተመላሽ ገንዘብ»ን መድብ +CompanyVisited=ኩባንያ/ድርጅት ተጎበኘ +ConfirmBrouillonnerTrip=እርግጠኛ ነዎት ይህን የወጪ ሪፖርት ወደ "ረቂቅ" ደረጃ ማዛወር ይፈልጋሉ? +ConfirmCancelTrip=እርግጠኛ ነዎት ይህን የወጪ ሪፖርት መሰረዝ ይፈልጋሉ? +ConfirmCloneExpenseReport=እርግጠኛ ነዎት ይህን የወጪ ሪፖርት መዝጋት ይፈልጋሉ? +ConfirmDeleteTrip=እርግጠኛ ነዎት ይህን የወጪ ሪፖርት መሰረዝ ይፈልጋሉ? +ConfirmPaidTrip=እርግጠኛ ነዎት የዚህን የወጪ ሪፖርት ሁኔታ ወደ "የተከፈለ" መቀየር ይፈልጋሉ? +ConfirmRefuseTrip=እርግጠኛ ነዎት ይህን የወጪ ሪፖርት መካድ ይፈልጋሉ? +ConfirmSaveTrip=እርግጠኛ ነዎት ይህን የወጪ ሪፖርት ማረጋገጥ ይፈልጋሉ? +ConfirmValideTrip=እርግጠኛ ነዎት ይህን የወጪ ሪፖርት ማጽደቅ ይፈልጋሉ? +DATE_CANCEL=የተሰረዘበት ቀን +DATE_PAIEMENT=የክፍያ ቀን +DATE_REFUS=ቀን መካድ +DATE_SAVE=የማረጋገጫ ቀን +DefaultCategoryCar=ነባሪ የመጓጓዣ ሁኔታ +DefaultRangeNumber=ነባሪ ክልል ቁጥር +DeleteTrip=የወጪ ሪፖርትን ሰርዝ +ErrorDoubleDeclaration=ሌላ የወጪ ሪፖርት በተመሳሳይ የቀን ክልል አውጀዋል። +Error_EXPENSEREPORT_ADDON_NotDefined=ስህተት፣ የወጪ ሪፖርት ቁጥር ማጣቀሻ ደንብ በሞጁል 'የወጪ ሪፖርት' ማዋቀር ላይ አልተገለጸም +ExpenseRangeOffset=የተቀነሰው መጠን፡ %s +expenseReportCatDisabled=ምድብ ተሰናክሏል - የc_exp_tax_cat መዝገበ ቃላትን ይመልከቱ expenseReportCoef=Coefficient -expenseReportTotalForFive=Example with d = 5 -expenseReportRangeFromTo=from %d to %d -expenseReportRangeMoreThan=more than %d -expenseReportCoefUndefined=(value not defined) -expenseReportCatDisabled=Category disabled - see the c_exp_tax_cat dictionary -expenseReportRangeDisabled=Range disabled - see the c_exp_tax_range dictionay +expenseReportCoefUndefined=(እሴቱ አልተገለጸም) +expenseReportOffset=ማካካሻ expenseReportPrintExample=offset + (d x coef) = %s -ExpenseReportApplyTo=Apply to -ExpenseReportDomain=Domain to apply -ExpenseReportLimitOn=Limit on -ExpenseReportDateStart=Date start -ExpenseReportDateEnd=Date end -ExpenseReportLimitAmount=Max amount -ExpenseReportRestrictive=Exceeding forbidden -AllExpenseReport=All type of expense report -OnExpense=Expense line -ExpenseReportRuleSave=Expense report rule saved -ExpenseReportRuleErrorOnSave=Error: %s -RangeNum=Range %d -ExpenseReportConstraintViolationError=Max amount exceeded (rule %s): %s is higher than %s (Exceeding forbidden) -byEX_DAY=by day (limitation to %s) -byEX_MON=by month (limitation to %s) -byEX_YEA=by year (limitation to %s) -byEX_EXP=by line (limitation to %s) -ExpenseReportConstraintViolationWarning=Max amount exceeded (rule %s): %s is higher than %s (Exceeding authorized) -nolimitbyEX_DAY=by day (no limitation) -nolimitbyEX_MON=by month (no limitation) -nolimitbyEX_YEA=by year (no limitation) -nolimitbyEX_EXP=by line (no limitation) -CarCategory=Vehicle category -ExpenseRangeOffset=Offset amount: %s -RangeIk=Mileage range -AttachTheNewLineToTheDocument=Attach the line to an uploaded document +expenseReportRangeDisabled=ክልል ተሰናክሏል - የc_exp_tax_ክልል መዝገበ ቃላትን ይመልከቱ +expenseReportRangeFromTo=ከ%d ወደ %d +expenseReportRangeMoreThan=ከ%d በላይ +expenseReportTotalForFive=ምሳሌ በd = 5 +ExpenseReportApplyTo=ተግባራዊ +ExpenseReportApproved=የወጪ ሪፖርት ጸድቋል +ExpenseReportApprovedMessage=The expense report %s was approved.
- User: %s
- Approved by: %s
Click here to show the expense report: %s +ExpenseReportCanceled=የወጪ ሪፖርት ተሰርዟል። +ExpenseReportCanceledMessage=The expense report %s was canceled.
- User: %s
- Canceled by: %s
- Motive for cancellation: %s
Click here to show the expense report: %s +ExpenseReportConstraintViolationError=ከፍተኛው መጠን አልፏል (ደንብ %s): %s ከ%s (%s) ከፍ ያለ ነው። ከመጠን በላይ የተከለከለ) +ExpenseReportConstraintViolationWarning=ከፍተኛው መጠን አልፏል (ደንብ %s): %s ከ %s (%s) ከፍ ያለ ነው። ከተፈቀደው በላይ) +ExpenseReportDateEnd=የቀኑ ማብቂያ +ExpenseReportDateStart=የሚጀምርበት ቀን +ExpenseReportDomain=ለማመልከት ጎራ +ExpenseReportIkDesc=የኪሎሜትር ወጪን ስሌት በምድብ እና ቀደም ሲል በማን እንደተገለፀው ማስተካከል ይችላሉ። d በኪሎሜትር ያለው ርቀት ነው +ExpenseReportLimitAmount=ከፍተኛ መጠን +ExpenseReportLimitOn=ላይ ገድብ +ExpenseReportLine=የወጪ ሪፖርት መስመር +ExpenseReportPaid=የወጪ ሪፖርት ተከፍሏል። +ExpenseReportPaidMessage=The expense report %s was paid.
- User: %s
- Paid by: %s
Click here to show the expense report: %s +ExpenseReportPayment=የወጪ ሪፖርት ክፍያ +ExpenseReportRef=ማጣቀሻ. የወጪ ሪፖርት +ExpenseReportRefused=የወጪ ሪፖርት ውድቅ ተደርጓል +ExpenseReportRefusedMessage=The expense report %s was refused.
- User: %s
- Refused by: %s
- Motive for refusal: %s
Click here to show the expense report: %s +ExpenseReportRestrictive=መብለጥ የተከለከለ +ExpenseReportRuleErrorOnSave=ስህተት፡ %s +ExpenseReportRuleSave=የወጪ ሪፖርት ደንብ ተቀምጧል +ExpenseReportRulesDesc=ለወጪ ሪፖርቶች ከፍተኛ መጠን ደንቦችን መግለፅ ይችላሉ. እነዚህ ደንቦች አዲስ ወጪ በወጪ ሪፖርት ላይ ሲታከል ተግባራዊ ይሆናሉ +ExpenseReportWaitingForApproval=ለማጽደቅ አዲስ የወጪ ሪፖርት ቀርቧል +ExpenseReportWaitingForApprovalMessage=A new expense report has been submitted and is waiting for approval.
- User: %s
- Period: %s
Click here to validate: %s +ExpenseReportWaitingForReApproval=እንደገና ለማጽደቅ የወጪ ሪፖርት ቀርቧል +ExpenseReportWaitingForReApprovalMessage=An expense report has been submitted and is waiting for re-approval.
The %s, you refused to approve the expense report for this reason: %s.
A new version has been proposed and waiting for your approval.
- User: %s
- Period: %s
Click here to validate: %s +ExpenseReportsIk=የማይል ርቀት ክፍያዎችን ማዋቀር +ExpenseReportsRules=የወጪ ሪፖርት ደንቦች +ExpenseReportsToApprove=ለማጽደቅ የወጪ ሪፖርቶች +ExpenseReportsToPay=ለመክፈል የወጪ ሪፖርቶች +ExpensesArea=የወጪ ሪፖርቶች አካባቢ +FeesKilometersOrAmout=መጠን ወይም ኪሎሜትር +LastExpenseReports=የቅርብ ጊዜ የ%s የወጪ ሪፖርቶች +ListOfFees=የክፍያዎች ዝርዝር +ListOfTrips=የወጪ ሪፖርቶች ዝርዝር +ListToApprove=መጽደቅን በመጠበቅ ላይ +ListTripsAndExpenses=የወጪ ሪፖርቶች ዝርዝር +MOTIF_CANCEL=ምክንያት +MOTIF_REFUS=ምክንያት +ModePaiement=የክፍያ ሁነታ +NewTrip=አዲስ የወጪ ሪፖርት +nolimitbyEX_DAY=በቀን (ምንም ገደብ የለም) +nolimitbyEX_EXP=በመስመር (ምንም ገደብ የለም) +nolimitbyEX_MON=በወር (ምንም ገደብ የለም) +nolimitbyEX_YEA=በዓመት (ምንም ገደብ የለም) +NoTripsToExportCSV=ለዚህ ጊዜ ምንም የወጪ ሪፖርት የለም። +NOT_AUTHOR=የዚህ የወጪ ሪፖርት ደራሲ አይደሉም። ክዋኔው ተሰርዟል። +OnExpense=የወጪ መስመር +PDFStandardExpenseReports=ለወጪ ዘገባ የፒዲኤፍ ሰነድ ለማመንጨት መደበኛ አብነት +PaidTrip=የወጪ ሪፖርት ይክፈሉ። +REFUSEUR=ተከልክሏል። +RangeIk=የርቀት ክልል +RangeNum=ክልል %d +SaveTrip=የወጪ ሪፖርትን ያረጋግጡ +ShowExpenseReport=የወጪ ሪፖርት አሳይ +ShowTrip=የወጪ ሪፖርት አሳይ +TripCard=የወጪ ሪፖርት ካርድ +TripId=የመታወቂያ ወጪ ሪፖርት +TripNDF=የመረጃ ወጪ ሪፖርት +TripSociete=የመረጃ ኩባንያ +Trips=የወጪ ሪፖርቶች +TripsAndExpenses=ሪፖርቶችን ያወጣል። +TripsAndExpensesStatistics=የወጪ ዘገባዎች ስታቲስቲክስ +TypeFees=የክፍያ ዓይነቶች +UploadANewFileNow=አሁን አዲስ ሰነድ ስቀል +VALIDATOR=ለማጽደቅ ኃላፊነት ያለው ተጠቃሚ +VALIDOR=ያረጋገጠው ሰው +ValidateAndSubmit=ያረጋግጡ እና ለማጽደቅ ያስገቡ +ValidatedWaitingApproval=የተረጋገጠ (ማጽደቅን በመጠባበቅ ላይ) +ValideTrip=የወጪ ሪፖርትን ማጽደቅ + +## Dictionary +EX_BRE=ቁርስ +EX_CAM=የሲቪ ጥገና እና ጥገና +EX_CAM_VP=የ PV ጥገና እና ጥገና +EX_CAR=የመኪና ኪራይ +EX_CUR=ደንበኞች መቀበል +EX_DOC=ሰነድ +EX_EMM=የሰራተኞች ምግብ +EX_FUE=ነዳጅ ሲቪ +EX_FUE_VP=ነዳጅ ፒ.ቪ +EX_GUM=የእንግዶች ምግብ +EX_HOT=ሆቴል +EX_IND=የካሳ ማጓጓዣ ምዝገባ +EX_KME=ማይል ወጪዎች +EX_OTR=ሌሎች መቀበል +EX_PAR=የመኪና ማቆሚያ CV +EX_PAR_VP=የመኪና ማቆሚያ ፒ.ቪ +EX_POS=ፖስታ +EX_SUM=የጥገና አቅርቦት +EX_SUO=የቢሮ መገልገያ ዕቃዎች +EX_TAX=የተለያዩ ግብሮች +EX_TOL=የክፍያ ሲቪ +EX_TOL_VP=ክፍያ ፒ.ቪ +TF_BUS=አውቶቡስ +TF_CAR=መኪና +TF_ESSENCE=ነዳጅ +TF_HOTEL=ሆቴል +TF_LUNCH=ምሳ +TF_METRO=ሜትሮ +TF_OTHER=ሌላ +TF_PEAGE=ክፍያ +TF_TAXI=ታክሲ +TF_TRAIN=ባቡር +TF_TRIP=መጓጓዣ diff --git a/htdocs/langs/am_ET/users.lang b/htdocs/langs/am_ET/users.lang index b6c7feb7bd2..74199e97c0b 100644 --- a/htdocs/langs/am_ET/users.lang +++ b/htdocs/langs/am_ET/users.lang @@ -1,126 +1,136 @@ # Dolibarr language file - Source file is en_US - users -HRMArea=HRM area -UserCard=User card -GroupCard=Group card -Permission=Permission -Permissions=Permissions -EditPassword=Edit password -SendNewPassword=Regenerate and send password -SendNewPasswordLink=Send link to reset password -ReinitPassword=Regenerate password -PasswordChangedTo=Password changed to: %s -SubjectNewPassword=Your new password for %s -GroupRights=Group permissions -UserRights=User permissions -Credentials=Credentials -UserGUISetup=User Display Setup -DisableUser=Disable -DisableAUser=Disable a user -DeleteUser=Delete -DeleteAUser=Delete a user -EnableAUser=Enable a user -DeleteGroup=Delete -DeleteAGroup=Delete a group -ConfirmDisableUser=Are you sure you want to disable user %s? -ConfirmDeleteUser=Are you sure you want to delete user %s? -ConfirmDeleteGroup=Are you sure you want to delete group %s? -ConfirmEnableUser=Are you sure you want to enable user %s? +HRMArea=HRM አካባቢ +UserCard=የተጠቃሚ ካርድ +GroupCard=የቡድን ካርድ +Permission=ፍቃድ +Permissions=ፈቃዶች +EditPassword=የይለፍ ቃል አርትዕ +SendNewPassword=እንደገና ማመንጨት እና የይለፍ ቃል ላክ +SendNewPasswordLink=የይለፍ ቃል ዳግም ለማስጀመር አገናኝ ይላኩ። +ReinitPassword=የይለፍ ቃል እንደገና ይፍጠሩ +PasswordChangedTo=የይለፍ ቃል ወደ፡ %s ተቀይሯል +SubjectNewPassword=አዲሱ ይለፍ ቃልህ ለ%s +GroupRights=የቡድን ፈቃዶች +UserRights=የተጠቃሚ ፈቃዶች +Credentials=ምስክርነቶች +UserGUISetup=የተጠቃሚ ማሳያ ማዋቀር +DisableUser=አሰናክል +DisableAUser=ተጠቃሚን አሰናክል +DeleteUser=ሰርዝ +DeleteAUser=ተጠቃሚን ሰርዝ +EnableAUser=ተጠቃሚን አንቃ +DeleteGroup=ሰርዝ +DeleteAGroup=ቡድን ሰርዝ +ConfirmDisableUser=እርግጠኛ ነዎት ተጠቃሚን ማሰናከል ይፈልጋሉ %s? +ConfirmDeleteUser=እርግጠኛ ነህ ተጠቃሚ %s? +ConfirmDeleteGroup=እርግጠኛ ነህ %s ቡድንን መሰረዝ ትፈልጋለህ? +ConfirmEnableUser=እርግጠኛ ነህ ተጠቃሚ %sን ማንቃት ትፈልጋለህ? ConfirmReinitPassword=Are you sure you want to generate a new password for user %s? ConfirmSendNewPassword=Are you sure you want to generate and send new password for user %s? -NewUser=New user -CreateUser=Create user -LoginNotDefined=Login is not defined. -NameNotDefined=Name is not defined. -ListOfUsers=List of users -SuperAdministrator=Super Administrator -SuperAdministratorDesc=Global administrator -AdministratorDesc=Administrator -DefaultRights=Default Permissions +NewUser=አዲስ ተጠቃሚ +CreateUser=ተጠቃሚ ፍጠር +LoginNotDefined=መግባት አልተገለጸም። +NameNotDefined=ስም አልተገለጸም። +ListOfUsers=የተጠቃሚዎች ዝርዝር +SuperAdministrator=ባለብዙ ኩባንያ አስተዳዳሪ +SuperAdministratorDesc=የባለብዙ ኩባንያ ስርዓት አስተዳዳሪ (ማዋቀር እና ተጠቃሚዎችን መለወጥ ይችላል) +DefaultRights=ነባሪ ፈቃዶች DefaultRightsDesc=Define here the default permissions that are automatically granted to a new user (to modify permissions for existing users, go to the user card). -DolibarrUsers=Dolibarr users -LastName=Last name -FirstName=First name -ListOfGroups=List of groups -NewGroup=New group -CreateGroup=Create group -RemoveFromGroup=Remove from group -PasswordChangedAndSentTo=Password changed and sent to %s. -PasswordChangeRequest=Request to change password for %s +DolibarrUsers=Dolibarr ተጠቃሚዎች +LastName=የአያት ስም +FirstName=የመጀመሪያ ስም +ListOfGroups=የቡድኖች ዝርዝር +NewGroup=አዲስ ቡድን +CreateGroup=ቡድን ይፍጠሩ +RemoveFromGroup=ከቡድን አስወግድ +PasswordChangedAndSentTo=የይለፍ ቃል ተቀይሮ ወደ %s ተልኳል። +PasswordChangeRequest=ለ%s የይለፍ ቃል ለመቀየር ጠይቅ PasswordChangeRequestSent=Request to change password for %s sent to %s. -IfLoginExistPasswordRequestSent=If this login is a valid account, an email to reset password has been sent. -IfEmailExistPasswordRequestSent=If this email is a valid account, an email to reset password has been sent. -ConfirmPasswordReset=Confirm password reset -MenuUsersAndGroups=Users & Groups -LastGroupsCreated=Latest %s groups created -LastUsersCreated=Latest %s users created -ShowGroup=Show group -ShowUser=Show user -NonAffectedUsers=Non assigned users -UserModified=User modified successfully -PhotoFile=Photo file -ListOfUsersInGroup=List of users in this group -ListOfGroupsForUser=List of groups for this user -LinkToCompanyContact=Link to third party / contact -LinkedToDolibarrMember=Link to member -LinkedToDolibarrUser=Link to user -LinkedToDolibarrThirdParty=Link to third party -CreateDolibarrLogin=Create a user -CreateDolibarrThirdParty=Create a third party -LoginAccountDisableInDolibarr=Account disabled in Dolibarr. -UsePersonalValue=Use personal value -InternalUser=Internal user -ExportDataset_user_1=Users and their properties -DomainUser=Domain user %s -Reactivate=Reactivate -CreateInternalUserDesc=This form allows you to create an internal user in your company/organization. To create an external user (customer, vendor etc. ..), use the button 'Create Dolibarr User' from that third-party's contact card. -InternalExternalDesc=An internal user is a user that is part of your company/organization, or is a partner user outside of your organization that may need to see more data than data related to his company (the permission system will define what he can or can't see or do).
An external user is a customer, vendor or other that must view ONLY data related to himself (Creating an external user for a third-party can be done from the contact record of the third-party).

In both cases, you must grant permissions on the features that the user need. -PermissionInheritedFromAGroup=Permission granted because inherited from one of a user's group. -Inherited=Inherited -UserWillBe=Created user will be -UserWillBeInternalUser=Created user will be an internal user (because not linked to a particular third party) -UserWillBeExternalUser=Created user will be an external user (because linked to a particular third party) -IdPhoneCaller=Id phone caller -NewUserCreated=User %s created -NewUserPassword=Password change for %s -NewPasswordValidated=Your new password have been validated and must be used now to login. -EventUserModified=User %s modified -UserDisabled=User %s disabled -UserEnabled=User %s activated -UserDeleted=User %s removed -NewGroupCreated=Group %s created -GroupModified=Group %s modified -GroupDeleted=Group %s removed -ConfirmCreateContact=Are you sure you want to create a Dolibarr account for this contact? -ConfirmCreateLogin=Are you sure you want to create a Dolibarr account for this member? -ConfirmCreateThirdParty=Are you sure you want to create a third party for this member? -LoginToCreate=Login to create -NameToCreate=Name of third party to create -YourRole=Your roles -YourQuotaOfUsersIsReached=Your quota of active users is reached ! -NbOfUsers=Number of users -NbOfPermissions=Number of permissions -DontDowngradeSuperAdmin=Only a superadmin can downgrade a superadmin -HierarchicalResponsible=Supervisor -HierarchicView=Hierarchical view -UseTypeFieldToChange=Use field Type to change -OpenIDURL=OpenID URL -LoginUsingOpenID=Use OpenID to login -WeeklyHours=Hours worked (per week) -ExpectedWorkedHours=Expected hours worked per week -ColorUser=Color of the user -DisabledInMonoUserMode=Disabled in maintenance mode -UserAccountancyCode=User accounting code -UserLogoff=User logout -UserLogged=User logged -DateOfEmployment=Employment date -DateEmployment=Employment -DateEmploymentstart=Employment Start Date -DateEmploymentEnd=Employment End Date -RangeOfLoginValidity=Access validity date range -CantDisableYourself=You can't disable your own user record -ForceUserExpenseValidator=Force expense report validator -ForceUserHolidayValidator=Force leave request validator -ValidatorIsSupervisorByDefault=By default, the validator is the supervisor of the user. Keep empty to keep this behaviour. -UserPersonalEmail=Personal email -UserPersonalMobile=Personal mobile phone -WarningNotLangOfInterface=Warning, this is the main language the user speak, not the language of the interface he choosed to see. To change the interface language visible by this user, go on tab %s +IfLoginExistPasswordRequestSent=ይህ መግቢያ ትክክለኛ መለያ ከሆነ (ከሚሰራ ኢሜይል ጋር)፣ የይለፍ ቃል ዳግም ለማስጀመር ኢሜይል ተልኳል። +IfEmailExistPasswordRequestSent=ይህ ኢሜይል የሚሰራ መለያ ከሆነ፣ የይለፍ ቃል ዳግም ለማስጀመር ኢሜይል ተልኳል (ምንም ነገር ካልደረሰዎት የአይፈለጌ መልእክት አቃፊዎን ማረጋገጥዎን ያስታውሱ) +ConfirmPasswordReset=የይለፍ ቃል ዳግም ማስጀመርን ያረጋግጡ +MenuUsersAndGroups=ተጠቃሚዎች እና ቡድኖች +LastGroupsCreated=የቅርብ ጊዜ %s ቡድኖች ተፈጥረዋል +LastUsersCreated=የቅርብ ጊዜ %s ተጠቃሚዎች ተፈጥረዋል +ShowGroup=ቡድን አሳይ +ShowUser=ተጠቃሚ አሳይ +NonAffectedUsers=ያልተመደቡ ተጠቃሚዎች +UserModified=ተጠቃሚ በተሳካ ሁኔታ ተስተካክሏል። +PhotoFile=የፎቶ ፋይል +ListOfUsersInGroup=በዚህ ቡድን ውስጥ ያሉ የተጠቃሚዎች ዝርዝር +ListOfGroupsForUser=ለዚህ ተጠቃሚ የቡድኖች ዝርዝር +LinkToCompanyContact=ከሶስተኛ ወገን/እውቂያ ጋር አገናኝ +LinkedToDolibarrMember=ወደ አባል አገናኝ +LinkedToDolibarrUser=ከተጠቃሚው ጋር አገናኝ +LinkedToDolibarrThirdParty=የሶስተኛ ወገን አገናኝ +CreateDolibarrLogin=ተጠቃሚ ፍጠር +CreateDolibarrThirdParty=ሶስተኛ ወገን ይፍጠሩ +LoginAccountDisableInDolibarr=መለያ ዶሊባርር ውስጥ ተሰናክሏል። +PASSWORDInDolibarr=በዶሊባርር ውስጥ የይለፍ ቃል ተስተካክሏል። +UsePersonalValue=የግል ዋጋን ተጠቀም +ExportDataset_user_1=ተጠቃሚዎች እና ንብረቶቻቸው +DomainUser=የጎራ ተጠቃሚ %s +Reactivate=እንደገና አንቃ +CreateInternalUserDesc=ይህ ቅጽ በድርጅትዎ ውስጥ የውስጥ ተጠቃሚ እንዲፈጥሩ ይፈቅድልዎታል። የውጭ ተጠቃሚን ለመፍጠር (ደንበኛ፣ ሻጭ ወዘተ..)፣ ከዚያ የሶስተኛ ወገን የእውቂያ ካርድ 'Dolibarr User ፍጠር' የሚለውን ቁልፍ ተጠቀም። +InternalExternalDesc=የinternal ተጠቃሚ የድርጅትዎ አካል የሆነ ወይም ከድርጅትዎ ውጪ አጋር ተጠቃሚ ነው። ከኩባንያው ጋር ከተያያዙ መረጃዎች የበለጠ መረጃ ማየት ሊያስፈልገው ይችላል (የፍቃድ ስርዓቱ ማየት ወይም ማድረግ የማይችለውን ይገልፃል)
An ውጫዊ ተጠቃሚ ደንበኛ፣ ሻጭ ወይም ሌላ ከራሱ ጋር የተዛመደ መረጃ ማየት ያለበት (ለሶስተኛ ወገን የውጭ ተጠቃሚ መፍጠር ሊሆን ይችላል) የተደረገው ከሶስተኛ ወገን የእውቂያ መዝገብ ነው።

በሁለቱም ሁኔታዎች በባህሪያቱ ላይ ፈቃድ መስጠት አለቦት። ተጠቃሚው ያስፈልገዋል. +PermissionInheritedFromAGroup=ፍቃድ የተሰጠው ከአንድ ተጠቃሚ ቡድን ስለተወረሰ ነው። +Inherited=የተወረሰ +UserWillBe=የተፈጠረ ተጠቃሚ ይሆናል። +UserWillBeInternalUser=የተፈጠረ ተጠቃሚ የውስጥ ተጠቃሚ ይሆናል (ምክንያቱም ከሶስተኛ ወገን ጋር ስላልተገናኘ) +UserWillBeExternalUser=የተፈጠረ ተጠቃሚ ውጫዊ ተጠቃሚ ይሆናል (ምክንያቱም ከሶስተኛ ወገን ጋር የተገናኘ) +IdPhoneCaller=መታወቂያ ስልክ ደዋይ +NewUserCreated=ተጠቃሚ %s ተፈጥሯል +NewUserPassword=የይለፍ ቃል ለውጥ ለ%s +NewPasswordValidated=አዲሱ የይለፍ ቃልዎ የተረጋገጠ ነው እና ለመግባት አሁን ጥቅም ላይ መዋል አለበት። +EventUserModified=ተጠቃሚ %s ተቀይሯል +UserDisabled=ተጠቃሚ %s ተሰናክሏል +UserEnabled=ተጠቃሚ %s ነቅቷል +UserDeleted=ተጠቃሚ %s ተወግዷል +NewGroupCreated=ቡድን %s ተፈጥሯል +GroupModified=ቡድን %s ተቀይሯል +GroupDeleted=ቡድን %s ተወግዷል +ConfirmCreateContact=እርግጠኛ ነዎት ለዚህ እውቂያ የዶሊባርር መለያ መፍጠር ይፈልጋሉ? +ConfirmCreateLogin=እርግጠኛ ነዎት ለዚህ አባል የዶሊባርር መለያ መፍጠር ይፈልጋሉ? +ConfirmCreateThirdParty=እርግጠኛ ነዎት ለዚህ አባል ሶስተኛ ወገን መፍጠር ይፈልጋሉ? +LoginToCreate=ለመፍጠር ይግቡ +NameToCreate=ለመፍጠር የሶስተኛ ወገን ስም +YourRole=የእርስዎ ሚናዎች +YourQuotaOfUsersIsReached=የንቁ ተጠቃሚዎች ኮታዎ ደርሷል! +NbOfUsers=የተጠቃሚዎች ብዛት +NbOfPermissions=የፍቃዶች ብዛት +DontDowngradeSuperAdmin=ሌላ አስተዳዳሪ ብቻ ነው አስተዳዳሪን ዝቅ ማድረግ የሚችለው +HierarchicalResponsible=ተቆጣጣሪ +HierarchicView=ተዋረዳዊ እይታ +UseTypeFieldToChange=ለመቀየር የመስክ አይነትን ተጠቀም +OpenIDURL=ክፍት መታወቂያ URL +LoginUsingOpenID=ለመግባት OpenID ይጠቀሙ +WeeklyHours=የስራ ሰዓታት (በሳምንት) +ExpectedWorkedHours=የሚጠበቁ ሰዓቶች በሳምንት ይሠራሉ +ColorUser=የተጠቃሚው ቀለም +DisabledInMonoUserMode=በጥገና ሁነታ ላይ ተሰናክሏል። +UserAccountancyCode=የተጠቃሚ መለያ ኮድ +UserLogoff=የተጠቃሚ መውጣት፡ %s +UserLogged=ተጠቃሚ ገብቷል፡ %s +UserLoginFailed=የተጠቃሚ መግቢያ አልተሳካም፦ %s +DateOfEmployment=የቅጥር ቀን +DateEmployment=ሥራ +DateEmploymentStart=የቅጥር መጀመሪያ ቀን +DateEmploymentEnd=የቅጥር ማብቂያ ቀን +RangeOfLoginValidity=የሚጸናበት ቀን ክልል ድረስበት +CantDisableYourself=የራስዎን የተጠቃሚ መዝገብ ማሰናከል አይችሉም +ForceUserExpenseValidator=የወጪ ሪፖርት አረጋጋጭን አስገድድ +ForceUserHolidayValidator=የግዳጅ ፈቃድ ጥያቄ አረጋጋጭ +ValidatorIsSupervisorByDefault=በነባሪነት አረጋጋጩ የተጠቃሚው ተቆጣጣሪ ነው። ይህንን ባህሪ ለማቆየት ባዶ ያድርጉት። +UserPersonalEmail=የግል ኢሜይል +UserPersonalMobile=የግል ሞባይል ስልክ +WarningNotLangOfInterface=ማስጠንቀቂያ፣ ይህ ተጠቃሚው የሚናገረው ዋና ቋንቋ እንጂ ለማየት የመረጠው የበይነገጽ ቋንቋ አይደለም። በዚህ ተጠቃሚ የሚታየውን የበይነገጽ ቋንቋ ለመቀየር ወደ ትር ይሂዱ %s +DateLastLogin=የመጨረሻው የመግቢያ ቀን +DatePreviousLogin=የቀደመ መግቢያ ቀን +IPLastLogin=የአይፒ የመጨረሻ መግቢያ +IPPreviousLogin=የአይፒ ቀዳሚ መግቢያ +ShowAllPerms=ሁሉንም የፍቃድ ረድፎች አሳይ +HideAllPerms=ሁሉንም የፍቃድ ረድፎች ደብቅ +UserPublicPageDesc=ለዚህ ተጠቃሚ ምናባዊ ካርድ ማንቃት ይችላሉ። ስማርትፎን ያለው ማንኛውም ሰው እንዲቃኘው እና አድራሻዎን በአድራሻ ደብተር ላይ እንዲያክልበት የተጠቃሚ መገለጫ እና ባር ኮድ ያለው ዩአርኤል ይገኛል። +EnablePublicVirtualCard=የተጠቃሚውን ምናባዊ የንግድ ካርድ አንቃ +UserEnabledDisabled=የተጠቃሚ ሁኔታ ተቀይሯል፡ %s +AlternativeEmailForOAuth2=አማራጭ ኢሜይል ለ OAuth2 መግቢያ diff --git a/htdocs/langs/am_ET/website.lang b/htdocs/langs/am_ET/website.lang index bb110bf8ef2..8f7c3905051 100644 --- a/htdocs/langs/am_ET/website.lang +++ b/htdocs/langs/am_ET/website.lang @@ -32,7 +32,7 @@ AddWebsite=ድር ጣቢያ ያክሉ Webpage=ድረ-ገጽ/መያዣ AddPage=ገጽ/መያዣ ያክሉ PageContainer=ገጽ -PreviewOfSiteNotYetAvailable=የድረ-ገጽህ ቅድመ እይታ %s ገና አይገኝም። መጀመሪያ 'ሙሉ ድህረ ገጽ አብነት አስመጣ' ወይም ልክ 'b0eገጽ/ኮንቴይነር አክል
' +PreviewOfSiteNotYetAvailable=The preview of your website %s is not yet available. You must first 'Import a full website template' or just 'Add a page/container'. RequestedPageHasNoContentYet=የተጠየቀው ገጽ መታወቂያ %s እስካሁን ምንም ይዘት የለውም፣ ወይም የመሸጎጫ ፋይል .tpl.php ተወግዷል። ይህንን ለመፍታት የገጹን ይዘት ያርትዑ። SiteDeleted=ድር ጣቢያ '%s ተሰርዟል PageContent=ገጽ/ኮንቴናየር @@ -48,13 +48,13 @@ VirtualhostDesc=የቨርቹዋል አስተናጋጅ ወይም ጎራ ስም ( SetHereVirtualHost=በApache/NGinx/...
በ ላይCrete የእርስዎ የድር አገልጋይ (Apache, Nginx, ...) የተወሰነ ምናባዊ አስተናጋጅ በ PHP የነቃ እና በ
ላይ ያለው Root directory %s ExampleToUseInApacheVirtualHostConfig=በApache ምናባዊ አስተናጋጅ ማዋቀር ውስጥ ለመጠቀም ምሳሌ፡- YouCanAlsoTestWithPHPS=በPHP ከተከተተ አገልጋይ ጋር ተጠቀም
አካባቢን ማዳበር ትችላለህ።
php -S 0.0.0.0 ን በማሄድ ጣቢያውን በPHP በተካተተ የድር አገልጋይ (PHP 5.5 ያስፈልጋል) መሞከርን እመርጣለሁ። :8080 -t %s -YouCanAlsoDeployToAnotherWHP=የእርስዎን ድረ-ገጽ ከሌላ Dolibarr ማስተናገጃ አቅራቢ ጋር ያሂዱ
ከሆነhttps://saas.dolibarr.org ላይ ማግኘት ትችላለህ -CheckVirtualHostPerms=የቨርቹዋል አስተናጋጅ ተጠቃሚ (ለምሳሌ www-data) %sb0a65d071f6fc9 እንዳለው ያረጋግጡ። ፈቃዶች በፋይሎች ላይ ወደ
%s +YouCanAlsoDeployToAnotherWHP=Run your web site with another Dolibarr Hosting provider
If you don't have a web server like Apache or NGinx available on internet, you can export and import your web site onto another Dolibarr instance provided by another Dolibarr hosting provider that provide full integration with the Website module. You can find a list of some Dolibarr hosting providers on https://saas.dolibarr.org +CheckVirtualHostPerms=Check also that the virtual host user (for example www-data) has %s permissions on files into
%s ReadPerm=አንብብ WritePerm=ጻፍ TestDeployOnWeb=በድር ላይ ሞክር/አሰማር -PreviewSiteServedByWebServer=ቅድመ እይታ %s በአዲስ ትር ውስጥ።

የ %s በውጫዊ የድር አገልጋይ (እንደ Apache, Nginx ያሉ) ይቀርባል. ). ወደ ማውጫው ከመጠቆምዎ በፊት ይህን አገልጋይ መጫን እና ማዋቀር አለብዎት፡
b0ecb2ec87f49fez0 span>
ዩአርኤል በውጫዊ አገልጋይ የቀረበ፡
%s -PreviewSiteServedByDolibarr=ቅድመ እይታ %s በአዲስ ትር ውስጥ።

የ%s በዶሊባርር አገልጋይ ስለሚቀርብ ምንም ተጨማሪ የድር አገልጋይ አያስፈልገውም። (እንደ Apache, Nginx, IIS) መጫን አለበት.
የማይመችው የገጾቹ ዩአርኤሎች ለተጠቃሚ ምቹ አለመሆኑ እና በዶሊባርር መንገድ መጀመራቸው ነው።
ዩአርኤል በ Dolibarr የቀረበ፡


የራስህን ውጫዊ ድር አገልጋይ ለመጠቀም ይህንን ድረ-ገጽ አገልግሉ፣ በድር አገልጋይዎ ላይ ማውጫ ላይ የሚጠቁም ምናባዊ አስተናጋጅ ይፍጠሩ
%s
ከዚያም የዚህን ቨርቹዋል አገልጋይ ስም በዚህ ድህረ ገጽ ባህሪያት ውስጥ አስገባና ጠቅ አድርግ። አገናኝ "ሙከራ/በድሩ ላይ አሰማራ"። +PreviewSiteServedByWebServer=Preview %s in a new tab.

The %s will be served by an external web server (like Apache, Nginx, IIS). You must install and setup this server before to point to directory:
%s
URL served by external server:
%s +PreviewSiteServedByDolibarr=Preview %s in a new tab.

The %s will be served by Dolibarr server so it does not need any extra web server (like Apache, Nginx, IIS) to be installed.
The inconvenient is that the URLs of pages are not user friendly and start with the path of your Dolibarr.
URL served by Dolibarr:
%s

To use your own external web server to serve this web site, create a virtual host on your web server that points on directory
%s
then enter the name of this virtual server in the properties of this website and click on the link "Test/Deploy on the web". VirtualHostUrlNotDefined=በውጫዊ የድር አገልጋይ የሚቀርበው የቨርቹዋል አስተናጋጅ ዩአርኤል አልተገለጸም። NoPageYet=እስካሁን ምንም ገጾች የሉም YouCanCreatePageOrImportTemplate=አዲስ ገጽ መፍጠር ወይም ሙሉ የድር ጣቢያ አብነት ማስመጣት ይችላሉ። @@ -63,8 +63,8 @@ YouCanEditHtmlSourceckeditor=በአርታዒ ውስጥ ያለውን "ምንጭ" YouCanEditHtmlSource=
You can include PHP code into this source using tags <?php ?>. The following global variables are available: $conf, $db, $mysoc, $user, $website, $websitepage, $weblangs, $pagelangs.

You can also include content of another Page/Container with the following syntax:
<?php includeContainer('alias_of_container_to_include'); ?>

You can make a redirect to another Page/Container with the following syntax (Note: do not output any content before a redirect):
<?php redirectToContainer('alias_of_container_to_redirect_to'); ?>

To add a link to another page, use the syntax:
<a href="alias_of_page_to_link_to.php">mylink<a>

To include a link to download a file stored into the documents directory, use the document.php wrapper:
Example, for a file into documents/ecm (need to be logged), syntax is:
<a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext">
For a file into documents/medias (open directory for public access), syntax is:
<a href="/document.php?modulepart=medias&file=[relative_dir/]filename.ext">
For a file shared with a share link (open access using the sharing hash key of file), syntax is:
<a href="/document.php?hashp=publicsharekeyoffile">
YouCanEditHtmlSource1=
To include an image stored into the documents directory, use the viewimage.php wrapper.
Example, for an image into documents/medias (open directory for public access), syntax is:
<img src="/viewimage.php?modulepart=medias&file=[relative_dir/]filename.ext">
YouCanEditHtmlSource2=ከማጋራት አገናኝ ጋር ለተጋራ ምስል (የፋይል ማጋሪያ ሃሽ ቁልፍን በመጠቀም ክፈት መዳረሻ)፣ አገባብ የሚከተለው ነው፡
<img src="/viewimage.php?hashp=12345679012...">
-YouCanEditHtmlSource3=የPHP ነገርን ምስል URL ለማግኘት
< ይጠቀሙ span>img src="<?php print getImagePublicURLOfObject($object, 1, "_small") ?>span class='notranslate'>>
-YouCanEditHtmlSourceMore=
ተጨማሪ የኤችቲኤምኤል ምሳሌዎች ወይም ተለዋዋጭ ኮድ በthe wiki documentationb0e40dc607d.
+YouCanEditHtmlSource3=To get the URL of the image of a PHP object, use
<img src="<?php print getImagePublicURLOfObject($object, 1, "_small") ?>">
+YouCanEditHtmlSourceMore=
More examples of HTML or dynamic code available on
the wiki documentation.
ClonePage=ክሎን ገጽ/መያዣ CloneSite=Clone ጣቢያ SiteAdded=ድህረ ገጽ ታክሏል። @@ -110,7 +110,7 @@ ThisPageIsTranslationOf=ይህ ገጽ/ኮንቴይነር ትርጉም ነው። ThisPageHasTranslationPages=ይህ ገጽ/ኮንቴይነር ትርጉም አለው። NoWebSiteCreateOneFirst=እስካሁን ምንም ድር ጣቢያ አልተፈጠረም። መጀመሪያ አንድ ይፍጠሩ. GoTo=መሄድ -DynamicPHPCodeContainsAForbiddenInstruction=የPHP መመሪያን የያዘ ተለዋዋጭ ፒኤችፒ ኮድ አክለዋል '%sb0a65d071f6fc9z በነባሪነት እንደ ተለዋዋጭ ይዘት የተከለከለ ነው (የተፈቀዱትን ትዕዛዞች ዝርዝር ለመጨመር የተደበቁ አማራጮችን WEBSITE_PHP_ALLOW_xxx ይመልከቱ)። +DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=በድር ጣቢያዎች ውስጥ የPHP ተለዋዋጭ ይዘትን ለመጨመር ወይም ለማርትዕ ፍቃድ የለዎትም። ፍቃድ ይጠይቁ ወይም ኮድ ሳይሻሻል በ php መለያዎች ውስጥ ያስቀምጡ። ReplaceWebsiteContent=የድር ጣቢያ ይዘት ይፈልጉ ወይም ይተኩ DeleteAlsoJs=እንዲሁም ለዚህ ድህረ ገጽ የተለዩ ሁሉም የጃቫ ስክሪፕት ፋይሎች ይሰረዙ? @@ -118,7 +118,7 @@ DeleteAlsoMedias=እንዲሁም ለዚህ ድህረ ገጽ የተለዩ ሁሉ MyWebsitePages=የእኔ ድረ-ገጽ ገፆች SearchReplaceInto=ፍለጋ | ወደ ውስጥ ይተኩ ReplaceString=አዲስ ሕብረቁምፊ -CSSContentTooltipHelp=እዚህ የሲኤስኤስ ይዘት ያስገቡ። ከማመልከቻው CSS ጋር ምንም አይነት ግጭት ለማስቀረት፣ ሁሉንም መግለጫዎች ከ.bodywebsite ክፍል ጋር አስቀድመው ማዘጋጀትዎን ያረጋግጡ። ለምሳሌ፡

#mycssselector, input.myclass:ማንዣበብ { ... }
መሆን አለበት
.bodywebsite #mycssselector, .bodywebsite input.myclass:ማንዣበብ { ... }b0342fb0342f
ማስታወሻ፡ ያለዚህ ቅድመ ቅጥያ ትልቅ ፋይል ካለህ የ .bodywebsite ቅድመ ቅጥያ በሁሉም ቦታ ላይ ለመጨመር 'lessc' ን መጠቀም ትችላለህ። +CSSContentTooltipHelp=Enter here CSS content. To avoid any conflict with the CSS of the application, be sure to prepend all declaration with the .bodywebsite class. For example:

#mycssselector, input.myclass:hover { ... }
must be
.bodywebsite #mycssselector, .bodywebsite input.myclass:hover { ... }

Note: If you have a large file without this prefix, you can use 'lessc' to convert it to append the .bodywebsite prefix everywhere. LinkAndScriptsHereAreNotLoadedInEditor=ማስጠንቀቂያ፡ ይህ ይዘት የሚወጣው ጣቢያ ከአገልጋይ ሲደረስ ብቻ ነው። በአርትዖት ሁነታ ላይ ጥቅም ላይ አይውልም ስለዚህ የጃቫ ስክሪፕት ፋይሎችን በአርትዖት ሁነታ ላይ መጫን ከፈለጉ በቀላሉ 'script src=...' መለያዎን ወደ ገጹ ያክሉት። Dynamiccontent=ተለዋዋጭ ይዘት ያለው ገጽ ናሙና EditInLineOnOff=ሁነታ 'ኢንላይን አርትዕ' %s ነው diff --git a/htdocs/langs/am_ET/withdrawals.lang b/htdocs/langs/am_ET/withdrawals.lang index bda987276b1..5984cc6027b 100644 --- a/htdocs/langs/am_ET/withdrawals.lang +++ b/htdocs/langs/am_ET/withdrawals.lang @@ -1,156 +1,173 @@ # Dolibarr language file - Source file is en_US - withdrawals -CustomersStandingOrdersArea=Payments by Direct debit orders -SuppliersStandingOrdersArea=Payments by Credit transfer -StandingOrdersPayment=Direct debit payment orders -StandingOrderPayment=Direct debit payment order -NewStandingOrder=New direct debit order -NewPaymentByBankTransfer=New payment by credit transfer -StandingOrderToProcess=To process -PaymentByBankTransferReceipts=Credit transfer orders -PaymentByBankTransferLines=Credit transfer order lines -WithdrawalsReceipts=Direct debit orders -WithdrawalReceipt=Direct debit order -BankTransferReceipts=Credit transfer orders -BankTransferReceipt=Credit transfer order -LatestBankTransferReceipts=Latest %s credit transfer orders -LastWithdrawalReceipts=Latest %s direct debit files -WithdrawalsLine=Direct debit order line -CreditTransfer=Credit transfer -CreditTransferLine=Credit transfer line -WithdrawalsLines=Direct debit order lines -CreditTransferLines=Credit transfer lines -RequestStandingOrderToTreat=Requests for direct debit payment order to process -RequestStandingOrderTreated=Requests for direct debit payment order processed -RequestPaymentsByBankTransferToTreat=Requests for credit transfer to process -RequestPaymentsByBankTransferTreated=Requests for credit transfer processed -NotPossibleForThisStatusOfWithdrawReceiptORLine=Not yet possible. Withdraw status must be set to 'credited' before declaring reject on specific lines. -NbOfInvoiceToWithdraw=No. of qualified customer invoices with waiting direct debit order -NbOfInvoiceToWithdrawWithInfo=No. of customer invoice with direct debit payment orders having defined bank account information -NbOfInvoiceToPayByBankTransfer=No. of qualified supplier invoices waiting for a payment by credit transfer -SupplierInvoiceWaitingWithdraw=Vendor invoice waiting for payment by credit transfer -InvoiceWaitingWithdraw=Invoice waiting for direct debit -InvoiceWaitingPaymentByBankTransfer=Invoice waiting for credit transfer -AmountToWithdraw=Amount to withdraw -NoInvoiceToWithdraw=No invoice open for '%s' is waiting. Go on tab '%s' on invoice card to make a request. -NoSupplierInvoiceToWithdraw=No supplier invoice with open 'Direct credit requests' is waiting. Go on tab '%s' on invoice card to make a request. -ResponsibleUser=User Responsible -WithdrawalsSetup=Direct debit payment setup -CreditTransferSetup=Credit transfer setup -WithdrawStatistics=Direct debit payment statistics -CreditTransferStatistics=Credit transfer statistics -Rejects=Rejects -LastWithdrawalReceipt=Latest %s direct debit receipts -MakeWithdrawRequest=Make a direct debit payment request -MakeBankTransferOrder=Make a credit transfer request -WithdrawRequestsDone=%s direct debit payment requests recorded -BankTransferRequestsDone=%s credit transfer requests recorded -ThirdPartyBankCode=Third-party bank code -NoInvoiceCouldBeWithdrawed=No invoice debited successfully. Check that invoices are on companies with a valid IBAN and that IBAN has a UMR (Unique Mandate Reference) with mode %s. -WithdrawalCantBeCreditedTwice=This withdrawal receipt is already marked as credited; this can't be done twice, as this would potentially create duplicate payments and bank entries. -ClassCredited=Classify credited -ClassDebited=Classify debited -ClassCreditedConfirm=Are you sure you want to classify this withdrawal receipt as credited on your bank account? -TransData=Transmission date -TransMetod=Transmission method -Send=Send -Lines=Lines -StandingOrderReject=Issue a rejection -WithdrawsRefused=Direct debit refused -WithdrawalRefused=Withdrawal refused -CreditTransfersRefused=Credit transfers refused -WithdrawalRefusedConfirm=Are you sure you want to enter a withdrawal rejection for society -RefusedData=Date of rejection -RefusedReason=Reason for rejection -RefusedInvoicing=Billing the rejection -NoInvoiceRefused=Do not charge the rejection -InvoiceRefused=Invoice refused (Charge the rejection to customer) -StatusDebitCredit=Status debit/credit -StatusWaiting=Waiting -StatusTrans=Sent -StatusDebited=Debited -StatusCredited=Credited -StatusPaid=Paid -StatusRefused=Refused -StatusMotif0=Unspecified -StatusMotif1=Insufficient funds -StatusMotif2=Request contested -StatusMotif3=No direct debit payment order -StatusMotif4=Sales Order -StatusMotif5=RIB unusable -StatusMotif6=Account without balance -StatusMotif7=Judicial Decision -StatusMotif8=Other reason -CreateForSepaFRST=Create direct debit file (SEPA FRST) -CreateForSepaRCUR=Create direct debit file (SEPA RCUR) -CreateAll=Create direct debit file -CreateFileForPaymentByBankTransfer=Create file for credit transfer -CreateSepaFileForPaymentByBankTransfer=Create credit transfer file (SEPA) -CreateGuichet=Only office -CreateBanque=Only bank -OrderWaiting=Waiting for treatment -NotifyTransmision=Record file transmission of order -NotifyCredit=Record credit of order -NumeroNationalEmetter=National Transmitter Number -WithBankUsingRIB=For bank accounts using RIB -WithBankUsingBANBIC=For bank accounts using IBAN/BIC/SWIFT -BankToReceiveWithdraw=Receiving Bank Account -BankToPayCreditTransfer=Bank Account used as source of payments -CreditDate=Credit on -WithdrawalFileNotCapable=Unable to generate withdrawal receipt file for your country %s (Your country is not supported) -ShowWithdraw=Show Direct Debit Order -IfInvoiceNeedOnWithdrawPaymentWontBeClosed=However, if invoice has at least one direct debit payment order not yet processed, it won't be set as paid to allow prior withdrawal management. -DoStandingOrdersBeforePayments=This tab allows you to request a direct debit payment order. Once done, go into menu Bank->Payment by direct debit to generate and manage the direct debit order. When direct debit order is closed, payment on invoices will be automatically recorded, and invoices closed if remainder to pay is null. -DoCreditTransferBeforePayments=This tab allows you to request a credit transfer order. Once done, go into menu Bank->Payment by credit transfer to generate and manage the credit transfer order. When credit transfer order is closed, payment on invoices will be automatically recorded, and invoices closed if remainder to pay is null. -WithdrawalFile=Debit order file -CreditTransferFile=Credit transfer file -SetToStatusSent=Set to status "File Sent" -ThisWillAlsoAddPaymentOnInvoice=This will also record payments on invoices and will classify them as "Paid" if remain to pay is null -StatisticsByLineStatus=Statistics by status of lines +CustomersStandingOrdersArea=በቀጥታ የዴቢት ትዕዛዞች ክፍያዎች +SuppliersStandingOrdersArea=በክሬዲት ማስተላለፍ ክፍያዎች +StandingOrdersPayment=ቀጥተኛ የዴቢት ክፍያ ትዕዛዞች +StandingOrderPayment=ቀጥታ የዴቢት ክፍያ ማዘዣ +NewStandingOrder=አዲስ የቀጥታ የዴቢት ትእዛዝ +NewPaymentByBankTransfer=በዱቤ ማስተላለፍ አዲስ ክፍያ +StandingOrderToProcess=ለማስኬድ +PaymentByBankTransferReceipts=የብድር ማስተላለፍ ትዕዛዞች +PaymentByBankTransferLines=የክሬዲት ማስተላለፊያ ማዘዣ መስመሮች +WithdrawalsReceipts=ቀጥተኛ የዴቢት ትዕዛዞች +WithdrawalReceipt=ቀጥተኛ የዴቢት ትዕዛዝ +BankTransferReceipts=የብድር ማስተላለፍ ትዕዛዞች +BankTransferReceipt=የዱቤ ማስተላለፍ ትዕዛዝ +LatestBankTransferReceipts=የቅርብ ጊዜ %s የብድር ማስተላለፍ ትዕዛዞች +LastWithdrawalReceipts=የቅርብ ጊዜ %s ቀጥተኛ የዴቢት ፋይሎች +WithdrawalsLine=ቀጥተኛ የዴቢት ትዕዛዝ መስመር +CreditTransfer=የብድር ማስተላለፍ +CreditTransferLine=የብድር ማስተላለፊያ መስመር +WithdrawalsLines=ቀጥተኛ የዴቢት ትዕዛዝ መስመሮች +CreditTransferLines=የብድር ማስተላለፊያ መስመሮች +RequestStandingOrderToTreat=በቀጥታ የዴቢት ክፍያ ለማዘዝ ጥያቄዎች +RequestStandingOrderTreated=የቀጥታ ዴቢት ክፍያ ማዘዣ ተካሄዷል +RequestPaymentsByBankTransferToTreat=ለማስኬድ የብድር ማስተላለፍ ጥያቄዎች +RequestPaymentsByBankTransferTreated=የብድር ማስተላለፍ ጥያቄዎች ተስተናግደዋል። +NotPossibleForThisStatusOfWithdrawReceiptORLine=እስካሁን አይቻልም። በተወሰኑ መስመሮች ላይ ውድቅ ከማድረጉ በፊት የማውጣት ሁኔታ ወደ 'ክሬዲት' መቀናበር አለበት። +NbOfInvoiceToWithdraw=በቀጥታ የዴቢት ትእዛዝ በመጠባበቅ ብቁ የደንበኛ ደረሰኞች ቁጥር +NbOfInvoiceToWithdrawWithInfo=የባንክ ሒሳብ መረጃን የሚገልጽ ቀጥተኛ የዴቢት ክፍያ ትዕዛዞች የደንበኛ ደረሰኝ ቁጥር +NbOfInvoiceToPayByBankTransfer=በክሬዲት ማስተላለፍ ክፍያ የሚጠብቁ ብቁ የአቅራቢዎች ደረሰኞች ቁጥር +SupplierInvoiceWaitingWithdraw=የአቅራቢ ደረሰኝ በክሬዲት ማስተላለፍ ክፍያ በመጠባበቅ ላይ +InvoiceWaitingWithdraw=የክፍያ መጠየቂያ ለቀጥታ ክፍያ በመጠባበቅ ላይ +InvoiceWaitingPaymentByBankTransfer=ደረሰኝ የብድር ማስተላለፍን በመጠባበቅ ላይ +AmountToWithdraw=የሚወጣበት መጠን +AmountToTransfer=ለማስተላለፍ መጠን +NoInvoiceToWithdraw=ለ'%s ምንም ደረሰኝ አልተከፈተም። ጥያቄ ለማቅረብ በክፍያ መጠየቂያ ካርድ ላይ '%s የሚለውን ትር ይሂዱ። +NoSupplierInvoiceToWithdraw=ክፍት '%s ያለው ምንም የአቅራቢ ደረሰኝ አይጠብቅም። ጥያቄ ለማቅረብ በክፍያ መጠየቂያ ካርድ ላይ '%s የሚለውን ትር ይሂዱ። +ResponsibleUser=ተጠያቂ ተጠቃሚ +WithdrawalsSetup=የቀጥታ ዴቢት ክፍያ ማዋቀር +CreditTransferSetup=የብድር ማስተላለፍ ማዋቀር +WithdrawStatistics=ቀጥተኛ የዴቢት ክፍያ ስታቲስቲክስ +CreditTransferStatistics=የብድር ማስተላለፍ ስታቲስቲክስ +Rejects=ውድቅ ያደርጋል +LastWithdrawalReceipt=የቅርብ ጊዜ %s ቀጥተኛ የዴቢት ደረሰኞች +MakeWithdrawRequest=ቀጥታ የዴቢት ክፍያ ጥያቄ ያቅርቡ +MakeWithdrawRequestStripe=በ Stripe በኩል የቀጥታ የዴቢት ክፍያ ጥያቄ ያቅርቡ +MakeBankTransferOrder=የብድር ማስተላለፍ ጥያቄ ያቅርቡ +WithdrawRequestsDone=%s የቀጥታ ዴቢት ክፍያ ጥያቄዎች ተመዝግበዋል +BankTransferRequestsDone=%s የብድር ማስተላለፍ ጥያቄዎች ተመዝግበዋል +ThirdPartyBankCode=የሶስተኛ ወገን የባንክ ኮድ +NoInvoiceCouldBeWithdrawed=No invoice processed successfully. Check that invoices are on companies with a valid IBAN and that IBAN has a UMR (Unique Mandate Reference) with mode %s. +NoInvoiceCouldBeWithdrawedSupplier=ምንም ደረሰኝ በተሳካ ሁኔታ አልተሰራም። ደረሰኞች ትክክለኛ IBAN ባላቸው ኩባንያዎች ላይ መሆናቸውን ያረጋግጡ። +NoSalariesCouldBeWithdrawed=ምንም ደመወዝ በተሳካ ሁኔታ አልተሰራም። ደሞዝ የሚሰራ IBAN ባላቸው ተጠቃሚዎች ላይ መሆኑን ያረጋግጡ። +WithdrawalCantBeCreditedTwice=ይህ የመውጫ ደረሰኝ አስቀድሞ እንደ ክሬዲት ምልክት ተደርጎበታል። ይህ ሁለት ጊዜ ሊሠራ አይችልም፣ ምክንያቱም ይህ የተባዙ ክፍያዎችን እና የባንክ ግቤቶችን ሊፈጥር ይችላል። +ClassCredited=ክሬዲት ይመድቡ +ClassDebited=የተከፈለበትን መድብ +ClassCreditedConfirm=እርግጠኛ ነዎት ይህን የመውጣት ደረሰኝ በባንክ ሂሳብዎ ላይ እንደተመዘገበ መከፋፈል ይፈልጋሉ? +TransData=የማስተላለፍ ቀን +TransMetod=የማስተላለፊያ ዘዴ +Send=ላክ +Lines=መስመሮች +StandingOrderReject=አለመቀበልን ይመዝግቡ +WithdrawsRefused=ቀጥተኛ ክፍያ ውድቅ አደረገ +WithdrawalRefused=መውጣት እምቢ አለ። +CreditTransfersRefused=የዱቤ ዝውውሮች ውድቅ ናቸው። +WithdrawalRefusedConfirm=እርግጠኛ ነዎት ለህብረተሰቡ የመውጣት ውድቅ ለማድረግ ይፈልጋሉ +RefusedData=ውድቅ የተደረገበት ቀን +RefusedReason=ውድቅ የተደረገበት ምክንያት +RefusedInvoicing=ውድቀቱን ማስከፈል +NoInvoiceRefused=ደንበኛው ላለመቀበል ክፍያ አያስከፍሉ +InvoiceRefused=ለደንበኛው እምቢተኝነትን ያስከፍሉ +DirectDebitRefusedInvoicingDesc=ይህ እምቢታ ለደንበኛው መከፈል አለበት ለማለት ባንዲራ ያዘጋጁ +StatusDebitCredit=የሁኔታ ዴቢት/ክሬዲት። +StatusWaiting=በመጠበቅ ላይ +StatusTrans=ተልኳል። +StatusDebited=ተበድሯል። +StatusCredited=ክሬዲት +StatusPaid=የተከፈለ +StatusRefused=እምቢ አለ። +StatusMotif0=አልተገለጸም። +StatusMotif1=በቂ ያልሆነ ገንዘብ +StatusMotif2=ጥያቄ ተከራክሯል። +StatusMotif3=ቀጥተኛ የዴቢት ክፍያ ትዕዛዝ የለም። +StatusMotif4=የሽያጭ ትዕዛዝ +StatusMotif5=RIB ጥቅም ላይ የማይውል +StatusMotif6=ያለ ቀሪ ሂሳብ +StatusMotif7=የፍርድ ውሳኔ +StatusMotif8=ሌላ ምክንያት +CreateForSepaFRST=ቀጥታ ዴቢት ፋይል (SEPA FRST) ይፍጠሩ +CreateForSepaRCUR=ቀጥታ ዴቢት ፋይል (SEPA RCUR) ይፍጠሩ +CreateAll=ቀጥታ ዴቢት ፋይል ይፍጠሩ +CreateFileForPaymentByBankTransfer=ለክሬዲት ማስተላለፍ ፋይል ይፍጠሩ +CreateSepaFileForPaymentByBankTransfer=የብድር ማስተላለፍ ፋይል (SEPA) ይፍጠሩ +CreateGuichet=ቢሮ ብቻ +CreateBanque=ባንክ ብቻ +OrderWaiting=ህክምናን በመጠባበቅ ላይ +NotifyTransmision=የትእዛዝ ፋይል ማስተላለፍን ይመዝግቡ +NotifyCredit=የትዕዛዝ ክሬዲት ይመዝግቡ +NumeroNationalEmetter=ብሔራዊ አስተላላፊ ቁጥር +WithBankUsingRIB=RIB ን በመጠቀም ለባንክ ሂሳቦች +WithBankUsingBANBIC=ለባንክ ሂሳቦች IBAN/BIC/SWIFT በመጠቀም +BankToReceiveWithdraw=የባንክ ሂሳብ መቀበል +BankToPayCreditTransfer=የባንክ ሂሳብ እንደ የክፍያ ምንጭ ሆኖ ያገለግላል +CreditDate=ክሬዲት በ +WithdrawalFileNotCapable=ለሀገርዎ የመውጫ ደረሰኝ ማመንጨት አልተቻለም %s (አገርዎ አይደገፍም) +ShowWithdraw=ቀጥተኛ የዴቢት ትዕዛዝ አሳይ +IfInvoiceNeedOnWithdrawPaymentWontBeClosed=ነገር ግን፣ የክፍያ መጠየቂያ ደረሰኝ ቢያንስ አንድ ቀጥተኛ የዴቢት ክፍያ ትዕዛዝ ገና ካልተሰራ፣ የቅድመ ክፍያ አስተዳደርን ለመፍቀድ እንደተከፈለ አይዋቀርም። +DoStandingOrdersBeforePayments=ይህ ትር በቀጥታ የዴቢት ክፍያ ትዕዛዝ እንዲጠይቁ ያስችልዎታል። አንዴ ከጨረሱ በኋላ ቀጥታ የዴቢት ማዘዣ ፋይል ለማመንጨት እና ለማስተዳደር ወደ ሜኑ "ባንክ->ክፍያ ቀጥታ ዴቢት" መሄድ ይችላሉ። +DoStandingOrdersBeforePayments2=እንዲሁም ጥያቄን በቀጥታ ወደ SEPA የክፍያ ፕሮሰሰር መላክ ይችላሉ እንደ Stripe ፣ ... +DoStandingOrdersBeforePayments3=ጥያቄው ሲዘጋ፣ የክፍያ መጠየቂያ ደረሰኞች በቀጥታ ይመዘገባሉ፣ እና ቀሪ ክፍያ ከተፈጸመ ደረሰኞች ይዘጋሉ። +DoCreditTransferBeforePayments=ይህ ትር የብድር ማዘዋወር ትዕዛዝ እንዲጠይቁ ያስችልዎታል። አንዴ እንደጨረሰ፣ የክሬዲት ማስተላለፍ ማዘዣ ፋይል ለማመንጨት እና ለማስተዳደር ወደ ሜኑ "ባንክ->ክፍያ በክሬዲት ማስተላለፍ" ይሂዱ። +DoCreditTransferBeforePayments3=የክሬዲት ማዘዋወር ትዕዛዝ ሲዘጋ፣ በደረሰኞች ላይ የሚከፈለው ክፍያ በራስ-ሰር ይመዘገባል፣ እና ቀሪ ክፍያ ከተፈጸመ ደረሰኞች ይዘጋሉ። +WithdrawalFile=የዴቢት ትዕዛዝ ፋይል +CreditTransferFile=የብድር ማስተላለፍ ፋይል +SetToStatusSent=ወደ "ፋይል ተልኳል" ሁኔታ አቀናብር +ThisWillAlsoAddPaymentOnInvoice=ይህ ደግሞ ክፍያዎችን በደረሰኞች ላይ ይመዘግባል እና ለመክፈል የሚቀረው ዋጋ ቢስ ከሆነ "የተከፈለ" በማለት ይፈርጃቸዋል. +StatisticsByLineStatus=ስታቲስቲክስ በመስመሮች ሁኔታ RUM=UMR -DateRUM=Mandate signature date -RUMLong=Unique Mandate Reference -RUMWillBeGenerated=If empty, a UMR (Unique Mandate Reference) will be generated once the bank account information is saved. -WithdrawMode=Direct debit mode (FRST or RECUR) -WithdrawRequestAmount=Amount of Direct debit request: -BankTransferAmount=Amount of Credit Transfer request: -WithdrawRequestErrorNilAmount=Unable to create direct debit request for empty amount. -SepaMandate=SEPA Direct Debit Mandate -SepaMandateShort=SEPA Mandate -PleaseReturnMandate=Please return this mandate form by email to %s or by mail to -SEPALegalText=By signing this mandate form, you authorize (A) %s to send instructions to your bank to debit your account and (B) your bank to debit your account in accordance with the instructions from %s. As part of your rights, you are entitled to a refund from your bank under the terms and conditions of your agreement with your bank. Your rights regarding the above mandate are explained in a statement that you can obtain from your bank. -CreditorIdentifier=Creditor Identifier -CreditorName=Creditor Name -SEPAFillForm=(B) Please complete all the fields marked * -SEPAFormYourName=Your name -SEPAFormYourBAN=Your Bank Account Name (IBAN) -SEPAFormYourBIC=Your Bank Identifier Code (BIC) -SEPAFrstOrRecur=Type of payment -ModeRECUR=Recurring payment -ModeFRST=One-off payment -PleaseCheckOne=Please check one only -CreditTransferOrderCreated=Credit transfer order %s created -DirectDebitOrderCreated=Direct debit order %s created -AmountRequested=Amount requested +DateRUM=የግዳጅ ፊርማ ቀን +RUMLong=ልዩ የግዳጅ ማጣቀሻ +RUMWillBeGenerated=ባዶ ከሆነ፣ የባንክ ሂሳቡ መረጃ ከተቀመጠ በኋላ ዩኤምአር (ልዩ የግዴታ ማጣቀሻ) ይፈጠራል። +WithdrawMode=ቀጥተኛ የዴቢት ሁነታ (FRST ወይም RCUR) +WithdrawRequestAmount=የቀጥታ ክፍያ ጥያቄ መጠን፡- +BankTransferAmount=የብድር ማስተላለፍ ጥያቄ መጠን፡- +WithdrawRequestErrorNilAmount=በባዶ መጠን ቀጥተኛ የዴቢት ጥያቄ መፍጠር አልተቻለም። +SepaMandate=SEPA ቀጥተኛ የዴቢት ግዴታ +SepaMandateShort=SEPA ትእዛዝ +PleaseReturnMandate=እባክዎ ይህንን የግዴታ ቅጽ በኢሜል ወደ %s ወይም በፖስታ ይመልሱ +SEPALegalText=ይህን የግዴታ ፎርም በመፈረም (A) %s እና የክፍያ አገልግሎት ሰጪውን ወደ ባንክዎ መለያዎን እንዲያስከፍል መመሪያ እንዲልክ እና (ለ) ባንክዎ መለያዎን እንዲከፍል ፈቃድ ይሰጣሉ። በ%s በተሰጠው መመሪያ መሰረት። እንደ የመብቶችዎ አካል፣ ከባንክዎ ጋር ባደረጉት ስምምነት ውሎች እና ሁኔታዎች ከባንክዎ ገንዘብ ተመላሽ ማድረግ ይችላሉ። ከላይ ያለውን ስልጣን በተመለከተ ያለዎት መብቶች ከባንክዎ ማግኘት በሚችሉት መግለጫ ተብራርተዋል። ስለወደፊቱ ክፍያዎች ከመከሰታቸው እስከ 2 ቀናት ድረስ ማሳወቂያዎችን ለመቀበል ተስማምተሃል። +CreditorIdentifier=አበዳሪ መለያ +CreditorName=የአበዳሪ ስም +SEPAFillForm=(ለ) እባክዎን ምልክት የተደረገባቸውን ሁሉንም መስኮች ያጠናቅቁ። +SEPAFormYourName=የአንተ ስም +SEPAFormYourBAN=የእርስዎ የባንክ ሂሳብ ስም (IBAN) +SEPAFormYourBIC=የእርስዎ የባንክ መለያ ኮድ (BIC) +SEPAFrstOrRecur=የክፍያ ዓይነት +ModeRECUR=ተደጋጋሚ ክፍያ +ModeRCUR=ተደጋጋሚ ክፍያ +ModeFRST=የአንድ ጊዜ ክፍያ +PleaseCheckOne=እባክዎ አንድ ብቻ ያረጋግጡ +CreditTransferOrderCreated=የብድር ማስተላለፍ ትዕዛዝ %s ተፈጥሯል +DirectDebitOrderCreated=ቀጥተኛ የዴቢት ትዕዛዝ %s ተፈጥሯል +AmountRequested=የተጠየቀው መጠን SEPARCUR=SEPA CUR SEPAFRST=SEPA FRST -ExecutionDate=Execution date -CreateForSepa=Create direct debit file -ICS=Creditor Identifier - ICS -END_TO_END="EndToEndId" SEPA XML tag - Unique id assigned per transaction -USTRD="Unstructured" SEPA XML tag -ADDDAYS=Add days to Execution Date -NoDefaultIBANFound=No default IBAN found for this third party +ExecutionDate=የተፈፀመበት ቀን +CreateForSepa=ቀጥታ ዴቢት ፋይል ይፍጠሩ +ICS=አበዳሪ መለያ - አይ.ሲ.ኤስ +IDS=የዲቢተር መለያ +END_TO_END="EndToEndId" SEPA XML መለያ - ልዩ መታወቂያ በአንድ ግብይት የተመደበ +USTRD="ያልተደራጀ" SEPA XML መለያ +ADDDAYS=ወደ አፈፃፀም ቀን ቀናትን ይጨምሩ +NoDefaultIBANFound=ለዚህ ሶስተኛ ወገን ምንም ነባሪ IBAN አልተገኘም። ### Notifications -InfoCreditSubject=Payment of direct debit payment order %s by the bank -InfoCreditMessage=The direct debit payment order %s has been paid by the bank
Data of payment: %s -InfoTransSubject=Transmission of direct debit payment order %s to bank -InfoTransMessage=The direct debit payment order %s has been sent to bank by %s %s.

-InfoTransData=Amount: %s
Method: %s
Date: %s -InfoRejectSubject=Direct debit payment order refused +InfoCreditSubject=የቀጥታ ዴቢት ክፍያ ትዕዛዝ %s በባንኩ መክፈል +InfoCreditMessage=የቀጥታ ዴቢት ክፍያ ትዕዛዝ %s በባንኩ ተከፍሏል
የክፍያ ውሂብ፡ b0ecb2ecz807fe49 +InfoTransSubject=የቀጥታ ዴቢት ክፍያ ትዕዛዝ %s ወደ ባንክ ማስተላለፍ +InfoTransMessage=የቀጥታ ዴቢት ክፍያ ትዕዛዝ %s ወደ ባንክ በ%s b0ecb2ec87f49fez0 ተልኳል. .

+InfoTransData=መጠን፡ %s
ዘዴ፡ %s='span>
ቀን፡ %s +InfoRejectSubject=የቀጥታ ዴቢት ክፍያ ትዕዛዝ ውድቅ አደረገ InfoRejectMessage=Hello,

the direct debit payment order of invoice %s related to the company %s, with an amount of %s has been refused by the bank.

--
%s -ModeWarning=Option for real mode was not set, we stop after this simulation -ErrorCompanyHasDuplicateDefaultBAN=Company with id %s has more than one default bank account. No way to know wich one to use. -ErrorICSmissing=Missing ICS in Bank account %s -TotalAmountOfdirectDebitOrderDiffersFromSumOfLines=Total amount of direct debit order differs from sum of lines -WarningSomeDirectDebitOrdersAlreadyExists=Warning: There is already some pending Direct Debit orders (%s) requested for an amount of %s -WarningSomeCreditTransferAlreadyExists=Warning: There is already some pending Credit Transfer (%s) requested for an amount of %s +ModeWarning=የእውነተኛ ሁነታ አማራጭ አልተዘጋጀም, ከዚህ ማስመሰል በኋላ እናቆማለን +ErrorCompanyHasDuplicateDefaultBAN=መታወቂያ ያለው ኩባንያ %s ከአንድ በላይ ነባሪ የባንክ ሂሳብ አለው። የትኛውን መጠቀም እንዳለቦት ለማወቅ ምንም መንገድ የለም. +ErrorICSmissing=በባንክ አካውንት ውስጥ ICS ይጎድላል %s +TotalAmountOfdirectDebitOrderDiffersFromSumOfLines=አጠቃላይ የቀጥታ ዴቢት ትእዛዝ መጠን ከመስመሮች ድምር ይለያል +WarningSomeDirectDebitOrdersAlreadyExists=ማስጠንቀቂያ፡ ለ%s መጠን የተጠየቁ ቀጥተኛ የዴቢት ትዕዛዞች (%s) ቀድሞውኑ አሉ። +WarningSomeCreditTransferAlreadyExists=ማስጠንቀቂያ፡ አስቀድሞ የተወሰነ የተወሰነ የብድር ማስተላለፍ (%s) የተጠየቀ የ%s +UsedFor=ለ%s ጥቅም ላይ ይውላል +Societe_ribSigned=SEPA ሥልጣን ተፈርሟል +NbOfInvoiceToPayByBankTransferForSalaries=በክሬዲት ማስተላለፍ ክፍያ የሚጠብቀው የደመወዝ ቁጥር +SalaryWaitingWithdraw=በዱቤ ማስተላለፍ ክፍያ በመጠባበቅ ላይ ያሉ ደሞዞች +RefSalary=ደሞዝ +NoSalaryInvoiceToWithdraw='%s የሚጠብቅ ደሞዝ የለም። ጥያቄ ለማቅረብ በደመወዝ ካርድ ላይ '%s ላይ ይሂዱ። +SalaryInvoiceWaitingWithdraw=በዱቤ ማስተላለፍ ክፍያ በመጠባበቅ ላይ ያሉ ደሞዞች diff --git a/htdocs/langs/am_ET/workflow.lang b/htdocs/langs/am_ET/workflow.lang index adfe7f69609..47e5bf6f6c6 100644 --- a/htdocs/langs/am_ET/workflow.lang +++ b/htdocs/langs/am_ET/workflow.lang @@ -1,26 +1,38 @@ # Dolibarr language file - Source file is en_US - workflow -WorkflowSetup=Workflow module setup -WorkflowDesc=This module provides some automatic actions. By default, the workflow is open (you can do things in the order you want) but here you can activate some automatic actions. -ThereIsNoWorkflowToModify=There is no workflow modifications available with the activated modules. +WorkflowSetup=የስራ ፍሰት ሞጁል ማዋቀር +WorkflowDesc=ይህ ሞጁል አንዳንድ አውቶማቲክ ድርጊቶችን ያቀርባል. በነባሪ, የስራ ፍሰቱ ክፍት ነው (በሚፈልጉት ቅደም ተከተል ውስጥ ነገሮችን ማድረግ ይችላሉ) ግን እዚህ አንዳንድ አውቶማቲክ ድርጊቶችን ማግበር ይችላሉ. +ThereIsNoWorkflowToModify=ከነቃ ሞጁሎች ጋር ምንም አይነት የስራ ፍሰት ማሻሻያዎች የሉም። # Autocreate -descWORKFLOW_PROPAL_AUTOCREATE_ORDER=Automatically create a sales order after a commercial proposal is signed (the new order will have same amount as the proposal) -descWORKFLOW_PROPAL_AUTOCREATE_INVOICE=Automatically create a customer invoice after a commercial proposal is signed (the new invoice will have same amount as the proposal) -descWORKFLOW_CONTRACT_AUTOCREATE_INVOICE=Automatically create a customer invoice after a contract is validated -descWORKFLOW_ORDER_AUTOCREATE_INVOICE=Automatically create a customer invoice after a sales order is closed (the new invoice will have same amount as the order) +descWORKFLOW_PROPAL_AUTOCREATE_ORDER=የንግድ ፕሮፖዛል ከተፈረመ በኋላ የሽያጭ ማዘዣን በራስ-ሰር ይፍጠሩ (አዲሱ ትዕዛዝ ከቀረበው ጋር ተመሳሳይ መጠን ይኖረዋል) +descWORKFLOW_PROPAL_AUTOCREATE_INVOICE=የንግድ ፕሮፖዛል ከተፈረመ በኋላ የደንበኛ ደረሰኝ በራስ-ሰር ይፍጠሩ (አዲሱ የክፍያ መጠየቂያ ከቀረበው ጋር ተመሳሳይ መጠን ይኖረዋል) +descWORKFLOW_CONTRACT_AUTOCREATE_INVOICE=ኮንትራቱ ከተረጋገጠ በኋላ የደንበኛ ደረሰኝ በራስ-ሰር ይፍጠሩ +descWORKFLOW_ORDER_AUTOCREATE_INVOICE=የሽያጭ ማዘዣ ከተዘጋ በኋላ የደንበኛ ደረሰኝ በራስ-ሰር ይፍጠሩ (አዲሱ ደረሰኝ ከትዕዛዙ ጋር ተመሳሳይ መጠን ይኖረዋል) +descWORKFLOW_TICKET_CREATE_INTERVENTION=በቲኬት ፈጠራ ላይ በራስ-ሰር ጣልቃ ገብነት ይፍጠሩ። # Autoclassify customer proposal or order -descWORKFLOW_ORDER_CLASSIFY_BILLED_PROPAL=Classify linked source proposal as billed when sales order is set to billed (and if the amount of the order is the same as the total amount of the signed linked proposal) -descWORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL=Classify linked source proposal as billed when customer invoice is validated (and if the amount of the invoice is the same as the total amount of the signed linked proposal) -descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER=Classify linked source sales order as billed when customer invoice is validated (and if the amount of the invoice is the same as the total amount of the linked order) -descWORKFLOW_INVOICE_CLASSIFY_BILLED_ORDER=Classify linked source sales order as billed when customer invoice is set to paid (and if the amount of the invoice is the same as the total amount of the linked order) -descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING=Classify linked source sales order as shipped when a shipment is validated (and if the quantity shipped by all shipments is the same as in the order to update) -descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING_CLOSED=Classify linked source sales order as shipped when a shipment is closed (and if the quantity shipped by all shipments is the same as in the order to update) +descWORKFLOW_ORDER_CLASSIFY_BILLED_PROPAL=የሽያጭ ማዘዣ እንዲከፍል ሲዋቀር የተገናኙትን የምንጭ ሀሳቦችን እንደ ክፍያ መድብ (እና የትዕዛዙ መጠን ከተፈረሙት የተገናኙት ሀሳቦች አጠቃላይ መጠን ጋር ተመሳሳይ ከሆነ) +descWORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL=የደንበኛ ክፍያ መጠየቂያ ደረሰኝ ሲረጋገጥ የተገናኙትን የምንጭ ሀሳቦችን እንደ ክፍያ መድብ (እና የክፍያ መጠየቂያው መጠን ከተፈረሙት የተገናኙት ሀሳቦች አጠቃላይ መጠን ጋር ተመሳሳይ ከሆነ) +descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER=የደንበኛ መጠየቂያ ደረሰኝ ሲረጋገጥ የተገናኘውን የምንጭ ሽያጭ ትዕዛዝ እንደ ደረሰኝ መድብ (እና የክፍያ መጠየቂያው መጠን ከተገናኙት የሽያጭ ትዕዛዞች አጠቃላይ መጠን ጋር ተመሳሳይ ከሆነ)። ለ n ትዕዛዞች የተረጋገጠ 1 ደረሰኝ ካልዎት፣ ይህ ሁሉንም ትዕዛዞች እንዲከፍሉ ሊያደርግ ይችላል። +descWORKFLOW_INVOICE_CLASSIFY_BILLED_ORDER=የተገናኙትን የምንጭ ሽያጭ ትዕዛዞችን የደንበኛ ደረሰኝ እንዲከፈል ሲዋቀር (እና የክፍያ መጠየቂያው መጠን ከተገናኙት የሽያጭ ትዕዛዞች አጠቃላይ መጠን ጋር ተመሳሳይ ከሆነ) እንደ ሂሳቡ መድብ። ለ n ትእዛዝ የሚከፈል 1 ደረሰኝ ካለህ፣ ይህ ሁሉንም ትዕዛዞች እንዲከፍሉ ሊያደርግ ይችላል። +descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING=ማጓጓዣው ሲረጋገጥ የተገናኙትን የምንጭ ሽያጭ ትዕዛዞችን እንደተላከ መድብ (እና በሁሉም ማጓጓዣዎች የተላከው መጠን ለማዘመን ከትእዛዝ ጋር ተመሳሳይ ከሆነ) +descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING_CLOSED=ጭነት ሲዘጋ የተያያዘውን የምንጭ ሽያጭ ትዕዛዝ እንደተላከ መድብ (እና በሁሉም ማጓጓዣዎች የተላከው መጠን ለማዘመን ከትእዛዝ ጋር አንድ አይነት ከሆነ) +# Autoclassify purchase proposal +descWORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL=የተገናኘውን የምንጭ አቅራቢ ፕሮፖዛል የሻጭ መጠየቂያ መጠየቂያ ደረሰኝ ከተረጋገጠ (እና የክፍያ መጠየቂያው መጠን ከተገናኙት ፕሮፖዛሎች አጠቃላይ መጠን ጋር ተመሳሳይ ከሆነ) እንደ ደረሰኝ ይመድቡ። # Autoclassify purchase order -descWORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL=Classify linked source vendor proposal as billed when vendor invoice is validated (and if the amount of the invoice is the same as the total amount of the linked proposal) -descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER=Classify linked source purchase order as billed when vendor invoice is validated (and if the amount of the invoice is the same as the total amount of the linked order) -descWORKFLOW_BILL_ON_RECEPTION=Classify receptions to "billed" when a linked supplier order is validated -# Autoclose intervention -descWORKFLOW_TICKET_CLOSE_INTERVENTION=Close all interventions linked to the ticket when a ticket is closed -AutomaticCreation=Automatic creation -AutomaticClassification=Automatic classification +descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER=የአቅራቢው ደረሰኝ ሲረጋገጥ የተገናኘውን የምንጭ ግዢ ትዕዛዝ እንደደረሰው ይመድቡ (እና የክፍያ መጠየቂያው መጠን ከተገናኙት ትዕዛዞች አጠቃላይ መጠን ጋር ተመሳሳይ ከሆነ) +descWORKFLOW_ORDER_CLASSIFY_RECEIVED_RECEPTION=መቀበያው ሲፀድቅ እንደደረሰው የተገናኘውን የምንጭ ግዢ ትዕዛዝ መድብ (እና በሁሉም ተጋባዦች የተቀበለው መጠን ለማዘመን በግዢ ትዕዛዝ ውስጥ ካለው ጋር ተመሳሳይ ከሆነ) +descWORKFLOW_ORDER_CLASSIFY_RECEIVED_RECEPTION_CLOSED=መስተንግዶ ሲዘጋ የተገናኘውን የምንጭ ግዢ ትዕዛዝ እንደደረሰው መድብ (እና በሁሉም ተቀባዮች የተቀበለው መጠን ለማዘመን በግዢው ትዕዛዝ ላይ ካለው ጋር ተመሳሳይ ከሆነ) # Autoclassify shipment -descWORKFLOW_SHIPPING_CLASSIFY_CLOSED_INVOICE=Classify linked source shipment as closed when customer invoice is validated +descWORKFLOW_SHIPPING_CLASSIFY_CLOSED_INVOICE=የደንበኛ ክፍያ መጠየቂያ ደረሰኝ ሲረጋገጥ የተገናኘውን ምንጭ ጭነት እንደ ዝግ መድብ (እና የክፍያ መጠየቂያው መጠን ከተገናኙት መላኪያዎች አጠቃላይ መጠን ጋር ተመሳሳይ ከሆነ) +descWORKFLOW_SHIPPING_CLASSIFY_BILLED_INVOICE=የደንበኛ ክፍያ መጠየቂያ ደረሰኝ ከተረጋገጠ (እና የክፍያ መጠየቂያው መጠን ከተገናኙት መላኪያዎች አጠቃላይ መጠን ጋር ተመሳሳይ ከሆነ) የተገናኘውን ምንጭ ጭነት እንደ ክፍያ መድብ። +# Autoclassify receptions +descWORKFLOW_RECEPTION_CLASSIFY_CLOSED_INVOICE=የግዢ ክፍያ መጠየቂያ ደረሰኝ ሲረጋገጥ የተገናኙትን የምንጭ መቀበያዎች እንደ ሂሣብ መድብ (እና የክፍያ መጠየቂያው መጠን ከተገናኙት መቀበያዎች አጠቃላይ መጠን ጋር ተመሳሳይ ከሆነ) +descWORKFLOW_RECEPTION_CLASSIFY_BILLED_INVOICE=የግዢ ክፍያ መጠየቂያ ደረሰኝ ሲረጋገጥ የተገናኙትን የምንጭ መቀበያዎች እንደ ሂሣብ መድብ (እና የክፍያ መጠየቂያው መጠን ከተገናኙት መቀበያዎች አጠቃላይ መጠን ጋር ተመሳሳይ ከሆነ) +# Automatically link ticket to contract +descWORKFLOW_TICKET_LINK_CONTRACT=ትኬት በሚፈጥሩበት ጊዜ ሁሉንም የሶስተኛ ወገኖች ተዛማጅ ኮንትራቶችን ያገናኙ +descWORKFLOW_TICKET_USE_PARENT_COMPANY_CONTRACTS=ኮንትራቶችን በሚያገናኙበት ጊዜ, ከወላጆች ኩባንያዎች መካከል ይፈልጉ +# Autoclose intervention +descWORKFLOW_TICKET_CLOSE_INTERVENTION=ትኬቱ ሲዘጋ ከትኬቱ ጋር የተገናኙትን ሁሉንም ጣልቃገብነቶች ዝጋ +AutomaticCreation=ራስ-ሰር መፍጠር +AutomaticClassification=ራስ-ሰር ምደባ +AutomaticClosing=በራስ-ሰር መዝጋት +AutomaticLinking=ራስ-ሰር ማገናኘት diff --git a/htdocs/langs/am_ET/zapier.lang b/htdocs/langs/am_ET/zapier.lang index b4cc4ccba4a..7a617c7c931 100644 --- a/htdocs/langs/am_ET/zapier.lang +++ b/htdocs/langs/am_ET/zapier.lang @@ -13,9 +13,9 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -ModuleZapierForDolibarrName = Zapier for Dolibarr -ModuleZapierForDolibarrDesc = Zapier for Dolibarr module -ZapierForDolibarrSetup=Setup of Zapier for Dolibarr -ZapierDescription=Interface with Zapier -ZapierAbout=About the module Zapier -ZapierSetupPage=There is no need for a setup on Dolibarr side to use Zapier. However, you must generate and publish a package on zapier to be able to use Zapier with Dolibarr. See documentation on this wiki page. +ModuleZapierForDolibarrName = Zapier ለ Dolibarr +ModuleZapierForDolibarrDesc = Zapier ለ Dolibarr ሞጁል +ZapierForDolibarrSetup=የ Zapier ለ Dolibarr ማዋቀር +ZapierDescription=ከ Zapier ጋር በይነገጽ +ZapierAbout=ስለ ሞጁል Zapier +ZapierSetupPage=Zapier ን ለመጠቀም በዶሊባርር በኩል ማዋቀር አያስፈልግም። ሆኖም፣ Zapier with Dolibarr ለመጠቀም በ zapier ላይ ጥቅል ማመንጨት እና ማተም አለቦት። በይህ የዊኪ ገጽ ላይ ያለውን ሰነድ ይመልከቱ። diff --git a/htdocs/langs/ar_EG/errors.lang b/htdocs/langs/ar_EG/errors.lang new file mode 100644 index 00000000000..a2f9be5ee1f --- /dev/null +++ b/htdocs/langs/ar_EG/errors.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - errors +ErrorParameterMustBeEnabledToAllwoThisFeature=Error, parameter %s must be enabled into conf/conf.php<> to allow use of Command Line Interface by the internal job scheduler diff --git a/htdocs/langs/ar_IQ/errors.lang b/htdocs/langs/ar_IQ/errors.lang new file mode 100644 index 00000000000..a2f9be5ee1f --- /dev/null +++ b/htdocs/langs/ar_IQ/errors.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - errors +ErrorParameterMustBeEnabledToAllwoThisFeature=Error, parameter %s must be enabled into conf/conf.php<> to allow use of Command Line Interface by the internal job scheduler diff --git a/htdocs/langs/ar_SA/admin.lang b/htdocs/langs/ar_SA/admin.lang index 168ad0f6618..f22b646ebdc 100644 --- a/htdocs/langs/ar_SA/admin.lang +++ b/htdocs/langs/ar_SA/admin.lang @@ -39,7 +39,7 @@ UnlockNewSessions=إزالة قفل الإتصال YourSession=الجلسة الخاصة بك Sessions=جلسات المستخدمين WebUserGroup=خادم الويب المستخدم / المجموعة -PermissionsOnFiles=أذونات في الملف +PermissionsOnFiles=أذونات في الملف PermissionsOnFilesInWebRoot=Permissions on files in web root directory PermissionsOnFile=أذونات في الملف %s NoSessionFound=يبدو أن تكوين PHP الخاص بك لا يسمح بإدراج الجلسات النشطة. قد يتم حماية الدليل المستخدم لحفظ الجلسات ( %s ) (على سبيل المثال عن طريق أذونات نظام التشغيل أو عن طريق توجيه PHP open_basedir). @@ -78,8 +78,8 @@ ErrorReservedTypeSystemSystemAuto=القيمة 'system' و 'systemauto' لهذا ErrorCodeCantContainZero=الكود لا يمكن أن يحتوي على القيمة 0 DisableJavascript=تعطيل عمليات الجافا و الأجاكس DisableJavascriptNote=ملاحظة: لغرض الاختبار أو التصحيح فقط. لتحسين أداء الشخص المكفوف أو المتصفحات النصية ، قد تفضل استخدام الإعداد في ملف تعريف المستخدم -UseSearchToSelectCompanyTooltip=أيضا إذا كان لديك عدد كبير من الأحزاب الثالثة (> 100 000)، يمكنك زيادة السرعة عن طريق وضع COMPANY_DONOTSEARCH_ANYWHERE ثابت إلى 1 في الإعداد، <أخرى. وبعد ذلك البحث أن يقتصر على بداية السلسلة. -UseSearchToSelectContactTooltip=أيضا إذا كان لديك عدد كبير من الأحزاب الثالثة (> 100 000)، يمكنك زيادة السرعة عن طريق وضع CONTACT_DONOTSEARCH_ANYWHERE ثابت إلى 1 في الإعداد، <أخرى. وبعد ذلك البحث أن يقتصر على بداية السلسلة. +UseSearchToSelectCompanyTooltip=وأيضًا إذا كان لديك عدد كبير من الأطراف الثالثة ( > 100000)، فيمكنك زيادة السرعة عن طريق تعيين COMPANY_DONOTSEARCH_ANYWHERE الثابت على 1 في الإعداد->أخرى. سيقتصر البحث بعد ذلك على بداية السلسلة. +UseSearchToSelectContactTooltip=أيضا إذا كان لديك عدد كبير من الأحزاب الثالثة ( > 100 000 )، يمكنك زيادة السرعة عن طريق وضع CONTACT_DONOTSEARCH_ANYWHERE ثابت إلى 1 في الإعداد، <أخرى. وبعد ذلك البحث أن يقتصر على بداية السلسلة. DelaiedFullListToSelectCompany=انتظر حتى يتم الضغط على مفتاح قبل تحميل محتوى قائمة التحرير والسرد الخاصة بالأطراف الثالثة ،
قد يؤدي ذلك إلى زيادة الأداء إذا كان لديك عدد كبير من الأطراف الثالثة ، ولكنه أقل ملاءمة. DelaiedFullListToSelectContact=انتظر حتى يتم الضغط على مفتاح قبل تحميل محتوى قائمة التحرير والسرد جهات الاتصال.
قد يؤدي هذا إلى زيادة الأداء إذا كان لديك عدد كبير من جهات الاتصال ، ولكنه أقل ملاءمة. NumberOfKeyToSearch=عدد الأحرف لبدء البحث: %s @@ -297,7 +297,7 @@ MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=مضيف SMTP/SMTPS MAIN_MAIL_EMAIL_FROM=البريد الإلكتروني للمرسل لرسائل البريد الإلكتروني التلقائية EMailHelpMsgSPFDKIM=لمنع تصنيف رسائل البريد الإلكتروني Dolibarr كرسائل غير مرغوب فيها، تأكد من أن الخادم مخول بإرسال رسائل بريد إلكتروني بهذه الهوية (عن طريق التحقق من تكوين SPF و DKIM لاسم المجال) MAIN_MAIL_ERRORS_TO=عنوان رسائل البريد الإلكترونية المرجعي لأخطاء الارسال (الحقل "الاخطاء إلى" ) في البريد المرسل -MAIN_MAIL_AUTOCOPY_TO= نسخ (نسخة كربونية) كل رسائل البريد الإلكترونية المرسلة الى +MAIN_MAIL_AUTOCOPY_TO= نسخ (نسخة كربونية) كل رسائل البريد الإلكترونية المرسلة الى MAIN_DISABLE_ALL_MAILS=تعطيل جميع عمليات إرسال البريد الإلكتروني (لأغراض الاختبار أو العروض التوضيحية) MAIN_MAIL_FORCE_SENDTO=إرسال جميع رسائل البريد الإلكترونية الى (بدلا عن المستلم الحقيقي لاغراض التطوير والتجربة) MAIN_MAIL_ENABLED_USER_DEST_SELECT=اقتراح عناوين بريد الموظفين الإلكتروني (إذا كان موجودا) في حقل المستلمين عند ارنشاء رسالة بريد جديدة @@ -509,7 +509,7 @@ WarningPHPMailA=- يزيد استخدام خادم مزود خدمة البري WarningPHPMailB=- لا يسمح لك بعض مزودي خدمة البريد الإلكتروني (مثل Yahoo) بإرسال بريد إلكتروني من خادم آخر غير الخادم الخاص بهم. يستخدم الإعداد الحالي الخاص بك خادم التطبيق لإرسال بريد إلكتروني وليس خادم مزود البريد الإلكتروني الخاص بك ، لذلك سيطلب بعض المستلمين (المتوافق مع بروتوكول DMARC المقيد) ، مزود البريد الإلكتروني الخاص بك ما إذا كان بإمكانهم قبول بريدك الإلكتروني وبعض موفري البريد الإلكتروني (مثل Yahoo) قد تستجيب بـ "لا" لأن الخادم ليس خادمهم ، لذلك قد لا يتم قبول عدد قليل من رسائل البريد الإلكتروني المرسلة للتسليم (كن حذرًا أيضًا من حصة الإرسال لمزود البريد الإلكتروني الخاص بك). WarningPHPMailC=- يعد استخدام خادم SMTP الخاص بموفر خدمة البريد الإلكتروني الخاص بك لإرسال رسائل البريد الإلكتروني أمرًا مثيرًا للاهتمام أيضًا ، لذا سيتم أيضًا حفظ جميع رسائل البريد الإلكتروني المرسلة من التطبيق في دليل "البريد المرسل" الخاص بصندوق البريد الخاص بك. WarningPHPMailD=ولذلك يوصى بتغيير طريقة إرسال رسائل البريد الإلكتروني إلى القيمة "SMTP". -WarningPHPMailDbis=إذا كنت تريد حقًا الاحتفاظ بطريقة "PHP" الافتراضية لإرسال رسائل البريد الإلكتروني، فما عليك سوى تجاهل هذا التحذير، أو إزالته عن طريق %sالنقر هنا%s< /فترة>. +WarningPHPMailDbis=If you really want to keep the default "PHP" method to send emails, just ignore this warning, or remove it by %sclicking here%s. WarningPHPMail2=إذا كان موفر البريد الإلكتروني SMTP بحاجة إلى تقييد عميل البريد الإلكتروني لبعض عناوين IP (نادر جدًا) ، فهذا هو عنوان IP الخاص بوكيل مستخدم البريد (MUA) لتطبيق ERP CRM الخاص بك: %s . WarningPHPMailSPF=إذا كان اسم المجال في عنوان البريد الإلكتروني الخاص بالمرسل محميًا بسجل SPF (اسأل مسجل اسم المجال الخاص بك) ، يجب عليك إضافة عناوين IP التالية في سجل SPF الخاص بـ DNS لمجالك: %s . ActualMailSPFRecordFound=تم العثور على سجل SPF الفعلي (للبريد الإلكتروني %s): %s @@ -674,7 +674,7 @@ Module2900Desc=GeoIP التحويلات Maxmind القدرات Module3200Name=المحفوظات غير القابلة للتغيير Module3200Desc=تمكين سجل غير قابل للتغيير لأحداث العمل. يتم أرشفة الأحداث في الوقت الحقيقي. السجل هو جدول للقراءة فقط للأحداث المتسلسلة التي يمكن تصديرها. قد تكون هذه الوحدة إلزامية لبعض البلدان. Module3300Name=نموذج منشئ -Module3300Desc=أداة RAD (التطوير السريع للتطبيقات - و بدون كود) لمساعدة المطورين أو المستخدمين المتقدمين على إنشاء نموذج/تطبيق. +Module3300Desc=A RAD (Rapid Application Development - low-code and no-code) tool to help developers or advanced users to build their own module/application. Module3400Name=الشبكات الاجتماعية Module3400Desc=قم بتمكين حقول الشبكات الاجتماعية في عناوين وعناوين الأطراف الثالثة (سكايب ، تويتر ، فيسبوك ، ...). Module4000Name=HRM @@ -1197,6 +1197,7 @@ Skin=التصميم DefaultSkin=التصميم الإفتراضي MaxSizeList=الحد الأقصى لطول قائمة DefaultMaxSizeList=افتراضي الطول الاقصى للقوائم +DisplayGrandTotalInList=Display grand total (for all pages) in lists footer DefaultMaxSizeShortList=الطول الأقصى الافتراضي للقوائم القصيرة (أي في بطاقة العميل) MessageOfDay=رسالة اليوم MessageLogin=ادخل صفحة الرسالة @@ -1404,7 +1405,7 @@ PHPModuleLoaded=تم تحميل مكون PHP %s PreloadOPCode=يتم استخدام OPCode مسبقة التحميل AddRefInList=عرض مرجع العميل / البائع. في قوائم التحرير والسرد.
ستظهر الجهات الخارجية بتنسيق اسم "CC12345 - SC45678 - The Big Company corp." بدلاً من "The Big Company Corp". AddVatInList=عرض رقم ضريبة القيمة المضافة للعميل / البائع في قوائم التحرير والسرد. -AddAdressInList=عرض عنوان العميل/المورد في قوائم التحرير والسرد.
ستظهر الجهات الخارجية بتنسيق اسم "The Big شركة corp. - 21 Jump street 123456 Big town - USA" بدلاً من "The Big شركة شركة". +AddAdressInList=Display Customer/Vendor address into combo lists.
Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp". AddEmailPhoneTownInContactList=عرض البريد الإلكتروني لجهة الاتصال (أو الهواتف إذا لم يتم تحديدها) و قائمة معلومات المدينة (اختر قائمة أو combobox)
ستظهر جهات الاتصال مع تنسيق الاسم "Dupond Durand - dupond.durand@example.com - Paris" أو "Dupond Durand - 06 07 59 65 66 - Paris" بدلاً من "Dupond Durand". AskForPreferredShippingMethod=اسأل عن طريقة الشحن المفضلة للأطراف الثالثة. FieldEdition=طبعة من ميدان%s @@ -1705,7 +1706,7 @@ DoNotAutofillButAutoConcat=لا تملأ حقل الإدخال تلقائيًا DoNotUseDescriptionOfProdut=لن يتم تضمين وصف المنتج مطلقًا في وصف سطور المستندات MergePropalProductCard=في تنشيط المنتج / الخدمة المرفقة التبويب ملفات خيار دمج المستند المنتج PDF إلى اقتراح PDF دازور إذا كان المنتج / الخدمة في الاقتراح ViewProductDescInThirdpartyLanguageAbility=عرض أوصاف المنتجات في نماذج بلغة الطرف الثالث (بخلاف ذلك بلغة المستخدم) -UseSearchToSelectProductTooltip=أيضًا إذا كان لديك عدد كبير من المنتجات (> 100000) ، فيمكنك زيادة السرعة عن طريق تعيين PRODUCT_DONOTSEARCH_ANYWHERE ثابتًا إلى 1 في الإعداد-> أخرى. سيقتصر البحث بعد ذلك على بداية السلسلة. +UseSearchToSelectProductTooltip=أيضًا إذا كان لديك عدد كبير من المنتجات ( > 100000 ) ، فيمكنك زيادة السرعة عن طريق تعيين PRODUCT_DONOTSEARCH_ANYWHERE ثابتًا إلى 1 في الإعداد-> أخرى. سيقتصر البحث بعد ذلك على بداية السلسلة. UseSearchToSelectProduct=انتظر حتى تضغط على مفتاح قبل تحميل محتوى قائمة التحرير والسرد للمنتج (قد يؤدي ذلك إلى زيادة الأداء إذا كان لديك عدد كبير من المنتجات ، ولكنه أقل ملاءمة) SetDefaultBarcodeTypeProducts=النوع الافتراضي لاستخدام الباركود للمنتجات SetDefaultBarcodeTypeThirdParties=النوع الافتراضي لاستخدام الباركود لأطراف ثالثة @@ -2153,7 +2154,7 @@ EmailCollectorExampleToCollectAnswersFromExternalEmailSoftwareDesc=امسح دل EmailCollectorExampleToCollectAnswersFromExternalEmailSoftware=مثال على جمع إجابات البريد الإلكتروني المرسلة من برنامج بريد إلكتروني خارجي EmailCollectorExampleToCollectDolibarrAnswersDesc=اجمع كل رسائل البريد الإلكتروني التي تمثل إجابة على رسالة بريد إلكتروني مرسلة من تطبيقك. سيتم تسجيل حدث (يجب تمكين جدول أعمال الوحدة النمطية) مع استجابة البريد الإلكتروني في مكان جيد. على سبيل المثال ، إذا أرسلت عرضًا تجاريًا أو طلبًا أو فاتورة أو رسالة لتذكرة عبر البريد الإلكتروني من التطبيق ، وقام المستلم بالرد على بريدك الإلكتروني ، فسيقوم النظام تلقائيًا بالتقاط الإجابة وإضافتها إلى نظام تخطيط موارد المؤسسات الخاص بك. EmailCollectorExampleToCollectDolibarrAnswers=مثال على جمع جميع الرسائل الداخلية التي تكون إجابات على الرسائل المرسلة من Dolibarr ' -EmailCollectorExampleToCollectLeadsDesc=جمع رسائل البريد الإلكتروني التي تطابق بعض القواعد و قم بإنشاء عميل محتمل تلقائيًا (نموذج < يجب تمكين النطاق class='notranslate'>مشروع
) مع معلومات البريد الإلكتروني. يمكنك استخدام هذا المجمع إذا كنت تريد متابعة عميل محتمل باستخدام نموذج مشروع (1 عميل محتمل = 1 مشروع)، لذلك سيتم إنشاء العملاء المتوقعين تلقائيًا. إذا تم تمكين المجمع Collect_Responses أيضًا، فعندما ترسل بريدًا إلكترونيًا من العملاء المتوقعين أو المقترحات أو أي كائن آخر، فقد ترى أيضًا إجابات عملائك أو شركائك مباشرة على التطبيق.
ملاحظة: في هذا المثال الأولي، يتم إنشاء عنوان عميل محتمل بما في ذلك البريد الإلكتروني. إذا تعذر العثور على الطرف الثالث في قاعدة البيانات (new العميل)، فسيتم إرفاق عميل محتمل بالطرف الثالث باستخدام المعرف 1. +EmailCollectorExampleToCollectLeadsDesc=Collect emails that match some rules and create automatically a lead (Module Project must be enabled) with the email information. You can use this collector if you want to follow your lead using the module Project (1 lead = 1 project), so your leads will be automatically generated. If the collector Collect_Responses is also enabled, when you send an email from your leads, proposals or any other object, you may also see answers of your customers or partners directly on the application.
Note: With this initial example, the title of the lead is generated including the email. If the third party can't be found in database (new customer), the lead will be attached to the third party with ID 1. EmailCollectorExampleToCollectLeads=مثال على جمع العملاء المحتملين EmailCollectorExampleToCollectJobCandidaturesDesc=اجمع رسائل البريد الإلكتروني التي تتقدم إلى عروض العمل (يجب تمكين Module Recruitment). يمكنك إكمال هذا المجمع إذا كنت تريد إنشاء ترشيح تلقائيًا لطلب وظيفة. ملاحظة: مع هذا المثال الأولي ، يتم إنشاء عنوان الترشيح بما في ذلك البريد الإلكتروني. EmailCollectorExampleToCollectJobCandidatures=مثال على جمع ترشيحات الوظائف الواردة عن طريق البريد الإلكتروني @@ -2176,7 +2177,7 @@ CreateCandidature=إنشاء طلب وظيفة FormatZip=الرمز البريدي MainMenuCode=رمز دخول القائمة (mainmenu) ECMAutoTree=عرض شجرة ECM التلقائية -OperationParamDesc=حدد القواعد التي سيتم استخدامها لاستخراج بعض البيانات أو تعيين القيم لاستخدامها في العملية.

مثال لاستخراج شركة الاسم من موضوع البريد الإلكتروني إلى متغير مؤقت:
tmp_var=EXTRACT:SUBJECT:رسالة من شركة< /فترة> ([^\n]*)

أمثلة لتعيين خصائص الكائن المراد إنشاؤه:
objproperty1=SET:قيمة مشفرة ثابتة
objproperty2=SET:__tmp_var__
objproperty3=SETIFEMPTY:قيمة (قيمة) يتم تعيينها فقط إذا لم تكن الخاصية محددة بالفعل)
objproperty4=EXTRACT:HEADER:X-Myheaderkey:\\s*([^\\s]*)
options_myextrafield1=EXTRACT:SUBJECT:([^\n]*)
object.objproperty5=EXTRACT:BODY:شركة الاسم هو\\s([^\\s]*)

استخدام جديد خط لاستخراج أو تعيين العديد من الخصائص. +OperationParamDesc=Define the rules to use to extract some data or set values to use for operation.

Example to extract a company name from email subject into a temporary variable:
tmp_var=EXTRACT:SUBJECT:Message from company ([^\n]*)

Examples to set the properties of an object to create:
objproperty1=SET:a hard coded value
objproperty2=SET:__tmp_var__
objproperty3=SETIFEMPTY:a value (value is set only if property is not already defined)
objproperty4=EXTRACT:HEADER:X-Myheaderkey:\\s*([^\\s]*)
options_myextrafield1=EXTRACT:SUBJECT:([^\n]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a new line to extract or set several properties. OpeningHours=ساعات الافتتاح OpeningHoursDesc=ادخل هنا ساعات الافتتاح لشركتك ResourceSetup=تكوين وحدة الموارد @@ -2243,7 +2244,7 @@ PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME=تضمين الاسم المستعار في THIRDPARTY_ALIAS=اسم الطرف الثالث - الاسم المستعار للطرف الثالث ALIAS_THIRDPARTY=الاسم المستعار لجهة خارجية - اسم الجهة الخارجية PDFIn2Languages=إظهار التسميات في ملف PDF بلغتين مختلفتين (قد لا تعمل هذه الميزة مع بعض اللغات) -PDF_USE_ALSO_LANGUAGE_CODE=اذا كنت ترغب في تكرار بعض النصوص بلغتين مختلفتين في ملفاتك المولدة بصيغة المستندات المتنقلة . يجب عليك ان ان تحدد اللغة الثانية هنا حتى يتسنى للملفات المولدة ان تحتوي على لغتين في نفس الصفحة . اللغة المختارة اثناء توليد المستند واللغة المختارة هنا (فقط بعض قوالب صيغة المستندات المتنقلة تدعم هذه الميزة) . ابق الخيار فارغاً للتوليد بلغة واحدة +PDF_USE_ALSO_LANGUAGE_CODE=اذا كنت ترغب في تكرار بعض النصوص بلغتين مختلفتين في ملفاتك المولدة بصيغة المستندات المتنقلة . يجب عليك ان ان تحدد اللغة الثانية هنا حتى يتسنى للملفات المولدة ان تحتوي على لغتين في نفس الصفحة . اللغة المختارة اثناء توليد المستند واللغة المختارة هنا (فقط بعض قوالب صيغة المستندات المتنقلة تدعم هذه الميزة) . ابق الخيار فارغاً للتوليد بلغة واحدة PDF_USE_A=قم بإنشاء مستندات PDF بتنسيق PDF/A بدلاً من التنسيق الافتراضي PDF FafaIconSocialNetworksDesc=أدخل هنا رمز رمز FontAwesome. إذا كنت لا تعرف ما هو FontAwesome ، فيمكنك استخدام القيمة العامة fa-address-book. RssNote=ملاحظة: كل تعريف لمصدر اخبار مختصرة يوفر بريمج يجب تفعيله ليكون متاحا في لوحة المعلومات @@ -2373,7 +2374,7 @@ CIDLookupURL=يقدم نموذج عنوان URL يمكن استخدامه بوا ScriptIsEmpty=لم يتم كتابة كود برمجي ShowHideTheNRequests=إظهار/إخفاء طلب (طلبات) SQL %s DefinedAPathForAntivirusCommandIntoSetup=حدد مسارًا لبرنامج مكافحة الفيروسات إلى %s -TriggerCodes=أحداث قابله للاثارة +TriggerCodes=أحداث قابله للاثارة TriggerCodeInfo=أدخل هنا رمز (رموز) التشغيل التي يجب أن تنشئ منشورًا لطلب ويب (يُسمح فقط بعنوان URL الخارجي). يمكنك إدخال عدة رموز تشغيل مفصولة بفاصلة. EditableWhenDraftOnly=إذا لم يتم تحديدها، فلا يمكن تعديل القيمة إلا عندما يكون للكائن مسودة حالة CssOnEdit=CSS على صفحات التحرير @@ -2388,7 +2389,7 @@ WarningDisabled=التحذيرات معطلة LimitsAndMitigation=حدود الوصول و التخفيف RecommendMitigationOnURL=It is recommended to activate mitigation on critical URL. This is list of fail2ban rules you can use for the main important URLs. DesktopsOnly=الاجهزة المكتبية فقط -DesktopsAndSmartphones=للموبايل و الاجهزة المكتبية +DesktopsAndSmartphones=للموبايل و الاجهزة المكتبية AllowOnlineSign=السماح بالتوقيع عبر الإنترنت AllowExternalDownload=السماح بالتنزيل الخارجي (بدون تسجيل الدخول، باستخدام رابط مشترك) DeadlineDayVATSubmission=الموعد النهائي لتقديم ضريبة القيمة المضافة في الشهر التالي @@ -2433,3 +2434,12 @@ UrlPublicInterfaceHelpAdmin=It is possible to define an alias to the web server ExportUseForce=Use the parameter -f ExportUseForceHelp=Force to continue the export even when an error is found (Backup may not be reliable) CustomPrompt=Custom prompts +AiDescription=AI (Artificial Intelligence) features +AiDescriptionLong=Provides AI (Artificial Intelligence) features in different part of the application. Need external AI API. +AI_KEY_API_CHATGPT= Key for ChatGPT IA api +AiSetup=AI module setup +AiCustomPrompt=AI customs prompt +AI_CONFIGURATIONS_PROMPT=Custom prompt +ImageGeneration=Image generation +AIPromptForFeatures=AI custom prompts for features +EnterAnIP=Enter an IP address diff --git a/htdocs/langs/ar_SA/boxes.lang b/htdocs/langs/ar_SA/boxes.lang index 7c0b77c215c..d25b4792c25 100644 --- a/htdocs/langs/ar_SA/boxes.lang +++ b/htdocs/langs/ar_SA/boxes.lang @@ -2,7 +2,7 @@ BoxDolibarrStateBoard=إحصائيات عن كائنات الأعمال الرئيسية في قاعدة البيانات BoxLoginInformation=معلومات تسجيل الدخول BoxLastRssInfos=معلومات RSS -BoxLastProducts=أحدث %s منتجات | خدمات +BoxLastProducts=أحدث %s منتجات | خدمات BoxProductsAlertStock=تنبيهات المخزون للمنتجات BoxLastProductsInContract=أحدث %s منتجات | خدمات المتعاقد عليها BoxLastSupplierBills=أحدث فواتير الموردين @@ -24,25 +24,25 @@ BoxFicheInter=أحدث التدخلات BoxCurrentAccounts=ميزان الحسابات المفتوحة BoxTitleMemberNextBirthdays=أعياد الميلاد لهذا الشهر (الأعضاء) BoxTitleMembersByType=الأعضاء حسب النوع والحالة -BoxTitleMembersByTags=أعضاء بواسطة أوسمة و حالة< /فترة> +BoxTitleMembersByTags=Members by tags and status BoxTitleMembersSubscriptionsByYear=اشتراكات الأعضاء حسب السنة BoxTitleLastRssInfos=آخر أخبار %s من %s -BoxTitleLastProducts=المنتجات | الخدمات: آخر %s معدل +BoxTitleLastProducts=المنتجات | الخدمات: آخر %s معدل BoxTitleProductsAlertStock=المنتجات: تنبيه المخزون BoxTitleLastSuppliers=أحدث %s الموردين المسجلين BoxTitleLastModifiedSuppliers=الموردين: آخر %s معدل -BoxTitleLastModifiedCustomers=العملاء: آخر %s تعديل +BoxTitleLastModifiedCustomers=العملاء: آخر %s تعديل BoxTitleLastCustomersOrProspects=أحدث %s عملاء أو فرص BoxTitleLastCustomerBills=أحدث %s تعديل لفواتير العميل BoxTitleLastSupplierBills=آخر %s تعديل لفواتير الموردين -BoxTitleLastModifiedProspects=الفرص: آخر %s تعديل -BoxTitleLastModifiedMembers=أحدث %s أعضاء -BoxTitleLastFicheInter=أحدث %s تدخلات معدلة +BoxTitleLastModifiedProspects=الفرص: آخر %s تعديل +BoxTitleLastModifiedMembers=أحدث %s أعضاء +BoxTitleLastFicheInter=أحدث %s تدخلات معدلة BoxTitleOldestUnpaidCustomerBills=فواتير العميل: أقدم %s غير مدفوعة BoxTitleOldestUnpaidSupplierBills=فواتير الموردين: أقدم %s غير مدفوعة BoxTitleCurrentAccounts=الحسابات المفتوحة: أرصدة BoxTitleSupplierOrdersAwaitingReception=أوامر الموردين في انتظار الاستلام -BoxTitleLastModifiedContacts=جهات الاتصال | العناوين: آخر %s تعديل +BoxTitleLastModifiedContacts=جهات الاتصال | العناوين: آخر %s تعديل BoxMyLastBookmarks=الإشارات المرجعية: أحدث %s BoxOldestExpiredServices=أقدم الخدمات النشطة منتهية الصلاحية BoxOldestActions=أقدم الأحداث للقيام بها @@ -90,11 +90,11 @@ BoxProposalsPerMonth=العروض في الشهر NoTooLowStockProducts=لا توجد منتجات أقل من حد المخزون المنخفض BoxProductDistribution=توزيع المنتجات | الخدمات ForObject=في %s -BoxTitleLastModifiedSupplierBills=فواتير الموردين: آخر %s تعديل -BoxTitleLatestModifiedSupplierOrders=أوامر الموردين: آخر %s تعديل -BoxTitleLastModifiedCustomerBills=فواتير العميل: آخر %s تعديل -BoxTitleLastModifiedCustomerOrders=أوامر المبيعات: آخر %s تعديل -BoxTitleLastModifiedPropals=أحدث %s العروض المعدلة +BoxTitleLastModifiedSupplierBills=فواتير الموردين: آخر %s تعديل +BoxTitleLatestModifiedSupplierOrders=أوامر الموردين: آخر %s تعديل +BoxTitleLastModifiedCustomerBills=فواتير العميل: آخر %s تعديل +BoxTitleLastModifiedCustomerOrders=أوامر المبيعات: آخر %s تعديل +BoxTitleLastModifiedPropals=أحدث %s العروض المعدلة BoxTitleLatestModifiedJobPositions=أحدث وظائف %s المعدلة BoxTitleLatestModifiedCandidatures=أحدث %s تطبيقات العمل المعدلة ForCustomersInvoices=فواتير العملاء @@ -112,7 +112,7 @@ BoxTitleSuspenseAccount=عدد البنود غير المخصصة NumberOfLinesInSuspenseAccount=رقم البند في الحساب المعلق SuspenseAccountNotDefined=لم يتم تعريف الحساب المعلق BoxLastCustomerShipments=آخر شحنات العميل -BoxTitleLastCustomerShipments=أحدث %s شحنات العملاء +BoxTitleLastCustomerShipments=أحدث %s شحنات العملاء BoxTitleLastLeaveRequests=Latest %s modified leave requests NoRecordedShipments=لا توجد شحنة مسجلة للعملاء BoxCustomersOutstandingBillReached=العملاء الذين وصلوا إلى الحد الأقصى المستحق diff --git a/htdocs/langs/ar_SA/errors.lang b/htdocs/langs/ar_SA/errors.lang index 7b6c1859bb2..0f27fd3c067 100644 --- a/htdocs/langs/ar_SA/errors.lang +++ b/htdocs/langs/ar_SA/errors.lang @@ -313,7 +313,7 @@ ErrorTooMuchFileInForm=يوجد عدد كبير جدًا من الملفات ف ErrorSessionInvalidatedAfterPasswordChange=تم إبطال الجلسة بعد تغيير كلمة المرور أو البريد الإلكتروني حالة أو تواريخ الصلاحية. الرجاء إعادة تسجيل الدخول. ErrorExistingPermission = الإذن %s للكائن %s موجود بالفعل ErrorFieldExist=قيمة %s موجودة بالفعل -ErrorEqualModule=نموذج غير صالح في %s +ErrorEqualModule=نموذج غير صالح في %s ErrorFieldValue=قيمة %s غير صحيحة ErrorCoherenceMenu=%s مطلوب عندما %s هو "يسار" ErrorUploadFileDragDrop=حدث خطأ أثناء تحميل الملف (الملفات). @@ -369,11 +369,11 @@ WarningPaypalPaymentNotCompatibleWithStrict=تجعل القيمة "صارمة" WarningThemeForcedTo=تحذير ، تم إجبار السمة على %s بواسطة الثابت المخفي MAIN_FORCETHEME WarningPagesWillBeDeleted=تحذير، سيؤدي هذا أيضًا إلى حذف كافة الصفحات/الحاويات الموجودة بالموقع. يجب عليك تصدير موقع الويب الخاص بك من قبل، حتى يكون لديك نسخة احتياطية لإعادة استيراده لاحقًا. WarningAutoValNotPossibleWhenStockIsDecreasedOnInvoiceVal=يتم تعطيل التحقق التلقائي عند تعيين خيار تقليل المخزون على "التحقق من صحة فاتورة". -WarningModuleNeedRefresh = نموذج %s. لا تنس تمكينه +WarningModuleNeedRefresh = Module %s has been disabled. Don't forget to enable it WarningPermissionAlreadyExist=الأذونات الموجودة لهذا الكائن WarningGoOnAccountancySetupToAddAccounts=إذا كانت هذه القائمة فارغة، فانتقل إلى القائمة %s - %s - %s لتحميل أو إنشاء حسابات لدليل الحساب الخاص بك. WarningCorrectedInvoiceNotFound=لم يتم العثور على فاتورة المصحح -WarningCommentNotFound=يرجى التحقق من موضع بداية التعليقات و لـ %sقسم في الملف %s قبل تقديم الإجراء الخاص بك +WarningCommentNotFound=Please check placement of start and end comments for %s section in file %s before submitting your action WarningAlreadyReverse=لقد انعكست حركة الأسهم بالفعل SwissQrOnlyVIR = لا يمكن إضافة SwissQR فاتورة إلا على الفواتير التي تم تعيينها ليتم دفعها من خلال دفعات تحويل الائتمان. diff --git a/htdocs/langs/ar_SA/exports.lang b/htdocs/langs/ar_SA/exports.lang index 67770acab49..dc12146b78f 100644 --- a/htdocs/langs/ar_SA/exports.lang +++ b/htdocs/langs/ar_SA/exports.lang @@ -94,7 +94,7 @@ NbOfLinesOK=عدد الأسطر مع عدم وجود أخطاء وتحذيرات NbOfLinesImported=عدد خطوط المستوردة بنجاح : %s. DataComeFromNoWhere=قيمة لادخال تأتي من أي مكان في الملف المصدر. DataComeFromFileFieldNb=تأتي القيمة المراد إدراجها من العمود %s في الملف المصدر. -DataComeFromIdFoundFromRef=سيتم استخدام القيمة التي تأتي من الملف المصدر للعثور على معرف الكائن الأصلي المراد استخدامه (وبالتالي فإن الكائن %s الذي يحتوي على المرجع من الملف المصدر يجب أن يكون موجودًا في قاعدة البيانات). +DataComeFromIdFoundFromRef=The value that comes from the source file will be used to find the id of the parent object to use (so the object %s that has the ref. from source file must exist in the database). DataComeFromIdFoundFromCodeId=سيتم استخدام قيمة الكود الذي يأتي من الملف المصدر للعثور على معرف الكائن الأصلي المراد استخدامه (لذا يجب أن يكون الكود من الملف المصدر موجودًا في القاموس %s). لاحظ أنه إذا كنت تعرف المعرف، فيمكنك أيضًا استخدامه في الملف المصدر بدلاً من الكود. يجب أن يعمل الاستيراد في كلتا الحالتين. DataIsInsertedInto=البيانات سوف تأتي من الملف المصدر يتم إدراجها في الحقل التالي : DataIDSourceIsInsertedInto=سيتم إدخال معرف الكائن الأصل ، الذي تم العثور عليه باستخدام البيانات الموجودة في الملف المصدر ، في الحقل التالي: diff --git a/htdocs/langs/ar_SA/main.lang b/htdocs/langs/ar_SA/main.lang index 1452cbeecb1..c334b821d30 100644 --- a/htdocs/langs/ar_SA/main.lang +++ b/htdocs/langs/ar_SA/main.lang @@ -115,7 +115,7 @@ LastConnexion=آخر تسجيل دخول PreviousConnexion=تسجيل الدخول السابق PreviousValue=القيمة السابقه ConnectedOnMultiCompany=متصل بالبيئة -ConnectedSince=متصل منذ +ConnectedSince=متصل منذ AuthenticationMode=وضع المصادقة RequestedUrl=مطلوب URL DatabaseTypeManager=مدير نوع قاعدة البيانات @@ -418,8 +418,10 @@ TotalHT100Short=إجمالي 100%% (غ ش ض) TotalHTShortCurrency=الاجمالى (غ.ش.ض بعملة) TotalTTCShort=الإجمالي (ش.ض) TotalHT=الإجمالي (غ.ش.ض) -TotalHTforthispage=الاجمالي لهذه الصفحة (غ.ش.ض) +TotalHTforthispage=الاجمالي لهذه الصفحة (غ.ش.ض) Totalforthispage=الاجمالي لهذه الصفحة +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=الإجمالي (ش.ض) TotalTTCToYourCredit=الإجمالي (ش.ض) إلى رصيدك TotalVAT=إجمالي الضريبة @@ -484,7 +486,7 @@ ActionRunningNotStarted=للبدأ ActionRunningShort=في تقدم ActionDoneShort=تم الانتهاء ActionUncomplete=غير مكتمل -LatestLinkedEvents=أحدث %s أحداث المرتبطة +LatestLinkedEvents=أحدث %s أحداث المرتبطة CompanyFoundation=الشركة | المؤسسة Accountant=المحاسب ContactsForCompany=اتصالات لهذا الطرف الثالث @@ -575,7 +577,7 @@ NextStep=الخطوة التالية Datas=البيانات None=لا شيء NoneF=لا شيء -NoneOrSeveral=الكل أو لا شيء +NoneOrSeveral=الكل أو لا شيء Late=متأخر LateDesc=يتم تعريف الصنف على أنه متأخر وفقًا لتكوين النظام في القائمة الرئيسية - الإعداد - التنبيهات. NoItemLate=لا يوجد صنف متأخر @@ -647,6 +649,7 @@ ReportName=اسم التقرير ReportPeriod=فترة التقرير ReportDescription=وصف Report=تقرير +Reports=تقارير Keyword=الكلمة الرئيسية Origin=الأصل Legend=عنوان تفسيري @@ -723,9 +726,9 @@ ValueIsValid=القيمة صالحة ValueIsNotValid=القيمة غير صالحة RecordCreatedSuccessfully=تم إنشاء السجل بنجاح RecordModifiedSuccessfully=تم تعديل السجل بنجاح -RecordsModified=تم تعديل %s سجل (سجلات) -RecordsDeleted=تم حذف %s سجل (سجلات) -RecordsGenerated=تم إنشاء %s سجل (سجلات) +RecordsModified=تم تعديل %s سجل (سجلات) +RecordsDeleted=تم حذف %s سجل (سجلات) +RecordsGenerated=تم إنشاء %s سجل (سجلات) ValidatedRecordWhereFound = لقد تم بالفعل التحقق من صحة بعض السجلات المحددة. لم يتم حذف أية سجلات. AutomaticCode=كود تلقائي FeatureDisabled=ميزة معطلة @@ -1047,7 +1050,7 @@ SetRef=تعيين المرجع Select2ResultFoundUseArrows=تم العثور على بعض النتائج. استخدم الأسهم للتحديد. Select2NotFound=لا نتائج لبحثك Select2Enter=أدخل -Select2MoreCharacter=أو أكثر +Select2MoreCharacter=أو أكثر Select2MoreCharacters=أحرف أو أكثر Select2MoreCharactersMore= صيغة البحث:
| OR (أ | ب)
* أي حرف (أ ب *)
^ البداية مع (^ أ ب)
$ النهاية مع ( ab $)
Select2LoadingMoreResults=تحميل المزيد من النتائج ... @@ -1098,7 +1101,7 @@ Deletedraft=حذف المسودة ConfirmMassDraftDeletion=تأكيد الحذف الشامل للمسودة FileSharedViaALink=Public file shared via link SelectAThirdPartyFirst=حدد طرف ثالث أولاً ... -YouAreCurrentlyInSandboxMode=أنت حاليًا في وضع %s "sandbox" +YouAreCurrentlyInSandboxMode=أنت حاليًا في وضع %s "sandbox" Inventory=المخزون AnalyticCode=الكود التحليلي TMenuMRP=تخطيط موارد التصنيع @@ -1151,10 +1154,10 @@ ByStatus=حسب الحالة InformationMessage=معلومات Used=استخدم ASAP=في أقرب وقت ممكن -CREATEInDolibarr=تم إنشاء %s سجل +CREATEInDolibarr=تم إنشاء %s سجل MODIFYInDolibarr=%s سجل معدّل DELETEInDolibarr=%s سجل تم حذفه -VALIDATEInDolibarr=%s سجل تم اعتماده +VALIDATEInDolibarr=%s سجل تم اعتماده APPROVEDInDolibarr=%s سجل تم الموافقة عليه DefaultMailModel=نموذج البريد الافتراضي PublicVendorName=الاسم العام للمورد @@ -1252,7 +1255,7 @@ LinkedFiles=الملفات والمستندات المرتبطة NoLinkFound=لا يوجد روابط مسجلة LinkComplete=تم ربط الملف بنجاح ErrorFileNotLinked=لا يمكن ربط الملف -LinkRemoved= الرابط%sتم إزالتة +LinkRemoved= الرابط%sتم إزالتة ErrorFailedToDeleteLink= فشل في إزالة الرابط ' %s ' ErrorFailedToUpdateLink= فشل تحديث الرابط ' %s ' URLToLink=عنوان URL للربط diff --git a/htdocs/langs/ar_SA/modulebuilder.lang b/htdocs/langs/ar_SA/modulebuilder.lang index c28a37f2af7..0237dcd3d0d 100644 --- a/htdocs/langs/ar_SA/modulebuilder.lang +++ b/htdocs/langs/ar_SA/modulebuilder.lang @@ -6,7 +6,7 @@ EnterNameOfObjectDesc=أدخل اسم الكائن المراد إنشاؤه ب EnterNameOfDictionaryDesc=أدخل اسم القاموس لإنشائه بدون مسافات. استخدم الأحرف الكبيرة لفصل الكلمات (على سبيل المثال: MyDico ...). سيتم إنشاء ملف الفصل ، وكذلك ملف SQL. ModuleBuilderDesc2=المسار الذي يتم فيه إنشاء / تحرير الوحدات (الدليل الأول للوحدات الخارجية المحددة في %s): %s ModuleBuilderDesc3=تم العثور على الوحدات النمطية / القابلة للتحرير: %s -ModuleBuilderDesc4=تم اكتشاف نموذج باعتباره 'نموذج لـ نموذج مُنشئ' عندما الملف %s موجود في جذر نموذج +ModuleBuilderDesc4=A module is detected as a 'module for Module Builer' when the file %s exists in the root of the module directory NewModule=وحدة جديدة NewObjectInModulebuilder=كائن جديد NewDictionary=قاموس جديد diff --git a/htdocs/langs/ar_SA/stocks.lang b/htdocs/langs/ar_SA/stocks.lang index 3ed6f25cc56..74f422001e4 100644 --- a/htdocs/langs/ar_SA/stocks.lang +++ b/htdocs/langs/ar_SA/stocks.lang @@ -282,7 +282,7 @@ ModuleStockTransferName=تحويل المخزون المتقدم ModuleStockTransferDesc=إدارة متقدمة لتحويل المخزون مع إنشاء صحيفة التحويل StockTransferNew=نقل مخزون جديد StockTransferList=قائمة تحويلات المخزون -ConfirmValidateStockTransfer=هل أنت متأكد أنك تريد التحقق من صحة نقل الأسهم هذا باستخدام المرجع %s؟ +ConfirmValidateStockTransfer=Are you sure you want to validate this stocks transfer with the reference %s ? ConfirmDestock=انخفاض المخزون مع التحويل %s ConfirmDestockCancel=إلغاء تخفيض الأسهم بالتحويل %s DestockAllProduct=انخفاض المخزونات diff --git a/htdocs/langs/ar_SA/workflow.lang b/htdocs/langs/ar_SA/workflow.lang index 75c86f5358b..e3bc427972d 100644 --- a/htdocs/langs/ar_SA/workflow.lang +++ b/htdocs/langs/ar_SA/workflow.lang @@ -13,7 +13,7 @@ descWORKFLOW_ORDER_CLASSIFY_BILLED_PROPAL=تصنيف مقترحات المصاد descWORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL=تصنيف مقترحات المصادر المرتبطة على أنها مفوترة عند التحقق من صحة العميل فاتورة (و إذا كان مبلغ فاتورة هو نفس المبلغ الإجمالي للمقترحات المرتبطة الموقعة) descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER=تصنيف مبيعات المصدر المرتبطة طلب على أنها مفوترة عند التحقق من صحة العميل فاتورة ( و إذا كان مبلغ فاتورة هو نفس المبلغ الإجمالي لأوامر المبيعات المرتبطة). إذا كان لديك فاتورة واحد تم التحقق من صحته لعدد n من الطلبات، فقد يؤدي هذا إلى تعيين جميع الطلبات ليتم تحرير فواتير لها أيضًا. descWORKFLOW_INVOICE_CLASSIFY_BILLED_ORDER=تصنيف أوامر المبيعات المصدر المرتبطة على أنها مفوترة عند تعيين العميل فاتورة على مدفوع (و إذا كان مبلغ فاتورة هو نفس المبلغ الإجمالي لأوامر المبيعات المرتبطة). إذا كان لديك مجموعة واحدة فاتورة تم تحرير فاتورة بها لعدد n من الطلبات، فقد يؤدي هذا إلى تعيين جميع الطلبات ليتم تحرير فاتورة بها أيضًا. -descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING=قم بتصنيف أوامر المبيعات المصدر المرتبطة على أنها مشحونة عندما يتم التحقق من صحة الشحنة (و إذا كانت الكمية المشحونة بواسطة جميع الشحنات هي نفسها كما في طلب للتحديث) +descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING=Classify linked source sales orders as shipped when a shipment is validated (and if the quantity shipped by all shipments is the same as in the order to update) descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING_CLOSED=تصنيف أمر مبيعات المصدر المرتبط على أنه مشحون عند إغلاق الشحنة (وإذا كانت الكمية المشحونة بواسطة جميع الشحنات هي نفسها الموجودة في أمر التحديث) # Autoclassify purchase proposal descWORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL=تصنيف اقتراح المصدر المرتبط المورد على أنه تمت فوترته عند التحقق من صحة فاتورة مورد (و إذا مبلغ فاتورة هو نفس المبلغ الإجمالي للمقترحات المرتبطة) diff --git a/htdocs/langs/az_AZ/accountancy.lang b/htdocs/langs/az_AZ/accountancy.lang index 5bc6be391ab..e637154564d 100644 --- a/htdocs/langs/az_AZ/accountancy.lang +++ b/htdocs/langs/az_AZ/accountancy.lang @@ -287,7 +287,7 @@ TotalVente=Vergidən əvvəl ümumi dövriyyə TotalMarge=Ümumi satış marjası DescVentilCustomer=Hesab planından məhsul hesabına bağlı (və ya olmayan) müştəri hesab-faktura xətlərinin siyahısına burada müraciət edin -DescVentilMore=Əksər hallarda, siz əvvəlcədən təyin edilmiş məhsul və ya xidmətlərdən istifadə edirsinizsə və məhsul/xidmət kartında hesabı (hesab planından) təyin edirsinizsə, proqram faktura xətlərinizlə qrafikinizin mühasibat hesabı arasında bütün bəndləri həyata keçirə biləcək. yalnız bir kliklə "%s"b0a65d071f6spanfc90z >. Hesab məhsul/xidmət kartlarında qurulmayıbsa və ya hələ də hesaba bağlı olmayan bəzi xətləriniz varsa, "%s". +DescVentilMore=In most cases, if you use predefined products or services and you set the account (from chart of account) on the product/service card, the application will be able to make all the binding between your invoice lines and the accounting account of your chart of accounts, just in one click with the button "%s". If account was not set on product/service cards or if you still have some lines not bound to an account, you will have to make a manual binding from the menu "%s". DescVentilDoneCustomer=Müştərilərin hesab-faktura sətirlərinin siyahısı və onların hesab planından məhsul hesabı ilə buradan tanış olun DescVentilTodoCustomer=Hesab cədvəlindən məhsul hesabı ilə artıq bağlı olmayan faktura xətlərini bağlayın ChangeAccount=Seçilmiş xətlər üçün məhsul/xidmət hesabını (hesab planından) aşağıdakı hesabla dəyişdirin: @@ -296,7 +296,7 @@ DescVentilSupplier=Hesab planından məhsul hesabına bağlı və ya hələ bağ DescVentilDoneSupplier=Burada satıcı hesab-fakturalarının sətirlərinin siyahısı və onların mühasibat hesabı ilə tanış olun DescVentilTodoExpenseReport=Artıq ödəniş mühasibat hesabı ilə əlaqələndirilməyən xərc hesabatı xətlərini birləşdirin DescVentilExpenseReport=Bir haqq mühasibat hesabına bağlı (və ya olmayan) xərc hesabatı xətlərinin siyahısına burada müraciət edin -DescVentilExpenseReportMore=Xərc hesabatı sətirlərinin növü üzrə mühasibat hesabı qurarsanız, proqram "%s". Əgər haqq-hesab rüsumlar lüğətində qurulmayıbsa və ya hələ də hər hansı hesaba bağlı olmayan bəzi sətirləriniz varsa, ""%s". If account was not set on fees dictionary or if you still have some lines not bound to any account, you will have to make a manual binding from the menu "%s". DescVentilDoneExpenseReport=Xərc hesabatlarının sətirlərinin siyahısı və onların haqlarının uçotu hesabı ilə buradan tanış olun Closure=İllik bağlanma @@ -352,7 +352,7 @@ ACCOUNTING_DISABLE_BINDING_ON_SALES=Satış üzrə mühasibatlıqda məcburi və ACCOUNTING_DISABLE_BINDING_ON_PURCHASES=Satınalmalar üzrə mühasibatlıqda məcburi və köçürməni aradan buraxın (satıcı fakturaları mühasibat uçotunda nəzərə alınmayacaq) ACCOUNTING_DISABLE_BINDING_ON_EXPENSEREPORTS=Xərc hesabatlarında mühasibatlıqda məcburi və köçürməni aradan buraxın (xərc hesabatları mühasibat uçotunda nəzərə alınmayacaq) ACCOUNTING_ENABLE_LETTERING=Mühasibat uçotunda yazı funksiyasını aktivləşdirin -ACCOUNTING_ENABLE_LETTERING_DESC=Bu seçimlər aktiv olduqda, siz hər bir mühasibat qeydində kod təyin edə bilərsiniz ki, müxtəlif uçot hərəkətlərini birlikdə qruplaşdıra biləsiniz. Keçmişdə müxtəlif jurnallar müstəqil idarə olunanda bu xüsusiyyət müxtəlif jurnalların hərəkət xətlərini bir yerdə qruplaşdırmaq üçün lazım idi. Bununla belə, Dolibarr mühasibatlığı ilə belə bir izləmə kodu "%sb09a4b739fz01f adlanır. span>" artıq avtomatik olaraq yadda saxlanılır, ona görə də avtomatik hərf artıq yerinə yetirilib, xəta riski olmadan bu funksiya ümumi istifadə üçün yararsız hala düşüb. Əl ilə yazı funksiyası mühasibatlıqda məlumatların ötürülməsini həyata keçirən kompüter mühərrikinə həqiqətən etibar etməyən son istifadəçilər üçün nəzərdə tutulub. +ACCOUNTING_ENABLE_LETTERING_DESC=When this options is enabled, you can define, on each accounting entry, a code so you can group different accounting movements together. In the past, when different journals was managed independently, this feature was necessary to group movement lines of different journals together. However, with Dolibarr accountancy, such a tracking code, called "%s" is already saved automatically, so an automatic lettering is already done, with no risk of error so this feature has become useless for a common usage. Manual lettering feature is provided for end users that really don't trust the computer engine making the transfer of data in accountancy. EnablingThisFeatureIsNotNecessary=Bu funksiyanı aktivləşdirmək daha ciddi mühasibat uçotu idarəçiliyi üçün lazım deyil. ACCOUNTING_ENABLE_AUTOLETTERING=Mühasibat uçotuna köçürərkən avtomatik hərfləri aktivləşdirin ACCOUNTING_ENABLE_AUTOLETTERING_DESC=Yazı üçün kod avtomatik olaraq yaradılır və artırılır və son istifadəçi tərəfindən seçilmir @@ -360,7 +360,7 @@ ACCOUNTING_LETTERING_NBLETTERS=Hərf kodu yaradan zaman hərflərin sayı (stand ACCOUNTING_LETTERING_NBLETTERS_DESC=Bəzi mühasibat proqramları yalnız iki hərfli kodu qəbul edir. Bu parametr bu aspekti təyin etməyə imkan verir. Hərflərin standart sayı üçdür. OptionsAdvanced=Təkmilləşmiş Seçimlər ACCOUNTING_FORCE_ENABLE_VAT_REVERSE_CHARGE=Təchizatçı alışlarında ƏDV-nin əks ödənişinin idarə edilməsini aktivləşdirin -ACCOUNTING_FORCE_ENABLE_VAT_REVERSE_CHARGE_DESC=Bu seçim aktiv olduqda, tədarükçünün və ya verilmiş satıcı hesab-fakturasının fərqli şəkildə mühasibat uçotuna köçürülməli olduğunu müəyyən edə bilərsiniz: "<"-də müəyyən edilmiş hesab planından 2 verilmiş hesab üzrə mühasibat uçotuna əlavə debet və kredit xətti yaradılacaq. span class='notranslate'>%s" quraşdırma səhifəsi. +ACCOUNTING_FORCE_ENABLE_VAT_REVERSE_CHARGE_DESC=When this option is enabled, you can define that a supplier or a given vendor invoice must be transferred into accountancy differently: A additional debit and a credit line will generated into the accounting on 2 given accounts from the chart of account defined into the "%s" setup page. ## Export NotExportLettering=Fayl yaradarkən hərfləri ixrac etməyin diff --git a/htdocs/langs/az_AZ/admin.lang b/htdocs/langs/az_AZ/admin.lang index 08c24e89172..1e6639bdcf3 100644 --- a/htdocs/langs/az_AZ/admin.lang +++ b/htdocs/langs/az_AZ/admin.lang @@ -106,7 +106,7 @@ NextValueForInvoices=Növbəti dəyər (qaimə-fakturalar) NextValueForCreditNotes=Növbəti dəyər (kredit qeydləri) NextValueForDeposit=Növbəti dəyər (ilkin ödəniş) NextValueForReplacements=Növbəti dəyər (əvəzlər) -MustBeLowerThanPHPLimit=Qeyd: PHP konfiqurasiyanız hazırda %sb09a4b739fz01f faylına yükləmək üçün maksimum fayl ölçüsünü məhdudlaşdırır. span> %s, bu parametrin dəyərindən asılı olmayaraq +MustBeLowerThanPHPLimit=Note: your PHP configuration currently limits the maximum filesize for upload to %s %s, irrespective of the value of this parameter NoMaxSizeByPHPLimit=Qeyd: PHP konfiqurasiyanızda heç bir məhdudiyyət qoyulmayıb MaxSizeForUploadedFiles=Yüklənmiş fayllar üçün maksimum ölçü (hər hansı yükləməyə icazə vermək üçün 0) UseCaptchaCode=Giriş səhifəsində və bəzi ictimai səhifələrdə qrafik kodu (CAPTCHA) istifadə edin @@ -150,7 +150,7 @@ AllWidgetsWereEnabled=Bütün mövcud vidjetlər aktivləşdirilib WidgetAvailable=Vidcet mövcuddur PositionByDefault=Defolt sifariş MenusDesc=Menyu menecerləri iki menyu çubuğunun məzmununu təyin edir (üfüqi və şaquli). -MenusEditorDesc=Menyu redaktoru xüsusi menyu girişlərini təyin etməyə imkan verir. Qeyri-sabitlik və həmişəlik əlçatmaz menyu daxilolmalarının qarşısını almaq üçün ondan ehtiyatla istifadə edin.
Bəzi modullar menyu daxiletmələrini əlavə edir (menyuda Bütün
əsasən). Bu qeydlərdən bəzilərini səhvən silsəniz, modulu söndürərək və yenidən aktivləşdirərək onları bərpa edə bilərsiniz. +MenusEditorDesc=The menu editor allows you to define custom menu entries. Use it carefully to avoid instability and permanently unreachable menu entries.
Some modules add menu entries (in menu All mostly). If you remove some of these entries by mistake, you can restore them disabling and reenabling the module. MenuForUsers=İstifadəçilər üçün menyu LangFile=.lang faylı Language_en_US_es_MX_etc=Dil (en_US, es_MX, ...) @@ -159,7 +159,7 @@ SystemInfo=Sistem məlumatları SystemToolsArea=Sistem alətləri sahəsi SystemToolsAreaDesc=Bu sahə idarəetmə funksiyalarını təmin edir. Lazım olan funksiyanı seçmək üçün menyudan istifadə edin. Purge=Təmizləmə -PurgeAreaDesc=Bu səhifə Dolibarr tərəfindən yaradılan və ya saxlanılan bütün faylları (müvəqqəti fayllar və ya %s
kataloqu). Bu funksiyadan istifadə adətən lazım deyil. O, Dolibarr-ı veb server tərəfindən yaradılan faylları silmək icazəsi təklif etməyən bir provayder tərəfindən yerləşdirilən istifadəçilər üçün həll yolu kimi təqdim olunur. +PurgeAreaDesc=This page allows you to delete all files generated or stored by Dolibarr (temporary files or all files in %s directory). Using this feature is not normally necessary. It is provided as a workaround for users whose Dolibarr is hosted by a provider that does not offer permissions to delete files generated by the web server. PurgeDeleteLogFile=%s daxil olmaqla jurnal fayllarını silin (no Syslog modulu üçün müəyyən edilib) məlumatların itirilməsi riski) PurgeDeleteTemporaryFiles=Bütün log və müvəqqəti faylları silin (məlumatların itirilməsi riski yoxdur). Parametr "tempfilesold", "logfiles" və ya hər ikisi "tempfilesold+logfiles" ola bilər. Qeyd: Müvəqqəti faylların silinməsi yalnız müvəqqəti kataloq 24 saatdan çox əvvəl yaradılıbsa həyata keçirilir. PurgeDeleteTemporaryFilesShort=Günlük və müvəqqəti faylları silin (məlumatların itirilməsi riski yoxdur) @@ -250,8 +250,8 @@ Security=Təhlükəsizlik Passwords=Parollar DoNotStoreClearPassword=Verilənlər bazasında saxlanılan parolları şifrələyin (düz mətn kimi DEYİL). Bu seçimi aktivləşdirmək tövsiyə olunur. MainDbPasswordFileConfEncrypted=conf.php-də saxlanılan verilənlər bazası parolunu şifrələyin. Bu seçimi aktivləşdirmək tövsiyə olunur. -InstrucToEncodePass=Parolun conf.php faylına kodlanması üçün b0342fccz01 sətrini əvəz edin. /span>$dolibarr_main_db_pass="...";b0342fcc0da >by
$dolibarr_main_db_pass="crypted:b0ecb2ec804"; span class='notranslate'>
-InstrucToClearPass=conf.php faylında parolun deşifrə edilməsi (təmizlənməsi) üçün
$dolibarr_main_db_pass="crypted:...";='notranslate >
by
$dolibarr_main_db_pass="late class='notranslate" "; +InstrucToEncodePass=To have password encoded into the conf.php file, replace the line
$dolibarr_main_db_pass="...";
by
$dolibarr_main_db_pass="crypted:%s"; +InstrucToClearPass=To have password decoded (clear) into the conf.php file, replace the line
$dolibarr_main_db_pass="crypted:...";
by
$dolibarr_main_db_pass="%s"; ProtectAndEncryptPdfFiles=Yaradılmış PDF fayllarını qoruyun. Bu, toplu PDF generasiyasını pozduğu üçün TÖVSİYƏ EDİLMİR. ProtectAndEncryptPdfFilesDesc=PDF sənədinin qorunması onu istənilən PDF brauzeri ilə oxumaq və çap etmək üçün əlçatan edir. Bununla belə, redaktə və köçürmə artıq mümkün deyil. Nəzərə alın ki, bu funksiyadan istifadə etməklə qlobal birləşmiş PDF-lərin qurulması işləməz. Feature=Xüsusiyyət @@ -268,8 +268,8 @@ OtherResources=Digər resurslar ExternalResources=Xarici Resurslar SocialNetworks=Sosial şəbəkələr SocialNetworkId=Sosial şəbəkə ID -ForDocumentationSeeWiki=İstifadəçi və ya tərtibatçı sənədləri (Sənəd, Tez-tez verilən suallar...) üçün
Dolibarr Wiki-yə nəzər salın:
%sb0e4080d -ForAnswersSeeForum=Hər hansı digər suallar/kömək üçün Dolibarr forumundan istifadə edə bilərsiniz:
b00fab50ead9320 /span>%s
+ForDocumentationSeeWiki=For user or developer documentation (Doc, FAQs...),
take a look at the Dolibarr Wiki:
%s +ForAnswersSeeForum=For any other questions/help, you can use the Dolibarr forum:
%s HelpCenterDesc1=Dolibarr ilə kömək və dəstək əldə etmək üçün bəzi resurslar buradadır. HelpCenterDesc2=Bu resurslardan bəziləri yalnız ingiliscə dilində əlçatandır. CurrentMenuHandler=Cari menyu işləyicisi @@ -290,8 +290,8 @@ EMailsSetup=E-poçtların quraşdırılması EMailsDesc=Bu səhifə sizə e-poçt göndərilməsi üçün parametrlər və ya seçimlər təyin etməyə imkan verir. EmailSenderProfiles=E-poçt göndərən profilləri EMailsSenderProfileDesc=Bu bölməni boş saxlaya bilərsiniz. Bəzi e-poçtları buraya daxil etsəniz, yeni e-poçt yazdığınız zaman onlar birləşmiş qutuya mümkün göndərənlər siyahısına əlavə olunacaqlar. -MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Portu (php.ini-də defolt dəyər: %sb09a4f73901) -MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (php.ini-də defolt dəyər: %sb09a4f73901) +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: %s) +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: %s) MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Portu MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host MAIN_MAIL_EMAIL_FROM=Avtomatik e-poçtlar üçün e-poçt göndərin @@ -320,7 +320,7 @@ UserEmail=İstifadəçi e-poçtu CompanyEmail=Şirkət E-poçtu FeatureNotAvailableOnLinux=Funksiya Unix kimi sistemlərdə mövcud deyil. Sendmail proqramınızı yerli olaraq yoxlayın. FixOnTransifex=Layihənin onlayn tərcümə platformasında tərcüməni düzəldin -SubmitTranslation=Bu dil üçün tərcümə tamamlanmayıbsa və ya səhvlər tapsanız, langs/%s və dəyişikliyi www.transifex.com/dolibarr-association/dolibarr/ ünvanına göndərin. +SubmitTranslation=If the translation for this language is not complete or you find errors, you can correct this by editing files in directory langs/%s and submit your change to www.transifex.com/dolibarr-association/dolibarr/ SubmitTranslationENUS=Bu dil üçün tərcümə tamamlanmayıbsa və ya səhvlər tapsanız, faylları langs/%s qovluğuna redaktə etməklə düzəldə bilərsiniz. və dəyişdirilmiş faylları dolibarr.org/forum saytında və ya tərtibatçısınızsa, github.com/Dolibarr/dolibarr saytında PR ilə təqdim edin ModuleSetup=Modulun qurulması ModulesSetup=Modullar/Tətbiqlərin qurulması @@ -345,12 +345,12 @@ ThisIsAlternativeProcessToFollow=Bu, əl ilə işləmək üçün alternativ qura StepNb=Addım %s FindPackageFromWebSite=Sizə lazım olan funksiyaları təmin edən paketi tapın (məsələn, rəsmi internet saytında %s). DownloadPackageFromWebSite=Paketi endirin (məsələn, rəsmi internet saytından %s). -UnpackPackageInDolibarrRoot=Paketlənmiş faylları Dolibarr server kataloqunuza açın/açın: %sb09a4f73901 +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into your Dolibarr server directory: %s UnpackPackageInModulesRoot=Xarici modulu yerləşdirmək/quraşdırmaq üçün siz arxiv faylını xarici modullar üçün ayrılmış server kataloquna çıxarmalı/açmalısınız:
%s SetupIsReadyForUse=Modulun yerləşdirilməsi tamamlandı. Bununla belə, səhifə quraşdırma modullarına daxil olaraq tətbiqinizdə modulu aktiv etməli və quraşdırmalısınız: %s. NotExistsDirect=Alternativ kök kataloqu mövcud kataloq üçün müəyyən edilməyib.
InfDirAlt=3-cü versiyadan etibarən alternativ kök kataloqu müəyyən etmək mümkündür. Bu, sizə xüsusi kataloq, plaginlər və fərdi şablonları saxlamağa imkan verir.
Sadəcə Dolibarr-ın kökündə kataloq yaradın (məsələn: xüsusi).
-InfDirExample=
Sonra onu conf.phpb0a65d071f06fc faylında elan edin. class='notranslate'>
$dolibarr_main_url_root_alt='/custom'
$dolibarr_main_document_root_ofda19bz0/'dolibarr_main_alt=s 'notranslate'>
Bu sətirlər "#" ilə şərh olunubsa, onları aktivləşdirmək üçün "#" simvolunu silməklə şərhi ləğv edin. +InfDirExample=
Then declare it in the file conf.php
$dolibarr_main_url_root_alt='/custom'
$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'
If these lines are commented with "#", to enable them, just uncomment by removing the "#" character. YouCanSubmitFile=Modul paketinin .zip faylını buradan yükləyə bilərsiniz: CurrentVersion=Dolibarr cari versiyası CallUpdatePage=Verilənlər bazası strukturunu və datasını yeniləyən səhifəyə baxın: %s. @@ -361,17 +361,17 @@ LastActivationIP=Ən son aktivləşdirmə IP LastActivationVersion=Ən son aktivasiya versiyası UpdateServerOffline=Serveri oflayn olaraq yeniləyin WithCounter=Sayğacı idarə edin -GenericMaskCodes=İstənilən nömrələmə maskasını daxil edə bilərsiniz. Bu maskada aşağıdakı teqlərdən istifadə edilə bilər:
{000000}b09a4b78z1 hər %s-da artırılacaq rəqəmə uyğundur. Sayğacın istədiyiniz uzunluğu qədər sıfır daxil edin. Maska qədər sıfıra sahib olmaq üçün sayğac soldan sıfırlarla tamamlanacaq.
{000000+000} lakin əvvəlki ilə eyni ilk %s-dan başlayaraq + işarəsinin sağındakı rəqəmə uyğun ofset tətbiq edilir.
{000000@x} əvvəlki ilə eyni x ayına çatdıqda sayğac sıfıra sıfırlanır (1 ilə 12 arasında x və ya konfiqurasiyanızda müəyyən edilmiş maliyyə ilinin ilk aylarından istifadə etmək üçün 0 və ya hər ay sıfıra sıfırlamaq üçün 99). Bu seçim istifadə olunursa və x 2 və ya daha yüksəkdirsə, {yy}{mm} və ya {yyyy}{mm} ardıcıllığı da tələb olunur.
{dd} gün (01-31). span class='notranslate'>
{mm} ay (01-12). class='notranslate'>
{yy},
b06a5f451419e80 n simvoldan ibarət üçüncü tərəf növü kodu (bax menyu Əsas səhifə - Quraşdırma - Lüğət - Üçüncü tərəflərin növləri). Bu teqi əlavə etsəniz, sayğac hər bir üçüncü tərəf növü üçün fərqli olacaq.
+GenericMaskCodes=You may enter any numbering mask. In this mask, the following tags can be used:
{000000} corresponds to a number which will be incremented on each %s. Enter as many zeros as the desired length of the counter. The counter will be completed by zeros from the left in order to have as many zeros as the mask.
{000000+000} same as the previous one but an offset corresponding to the number to the right of the + sign is applied starting on the first %s.
{000000@x} same as the previous one but the counter is reset to zero when month x is reached (x between 1 and 12, or 0 to use the early months of fiscal year defined in your configuration, or 99 to reset to zero every month). If this option is used and x is 2 or higher, then the sequence {yy}{mm} or {yyyy}{mm} is also required.
{dd} day (01 to 31).
{mm} month (01 to 12).
{yy}, {yyyy} or {y} year over 2, 4 or 1 numbers.
+GenericMaskCodes2={cccc} the client code on n characters
{cccc000} the client code on n characters is followed by a counter dedicated to the customer. This counter dedicated to customer is reset at same time as the global counter.
{tttt} The code of third party type on n characters (see menu Home - Setup - Dictionary - Types of third parties). If you add this tag, the counter will be different for each type of third party.
GenericMaskCodes3=Maskadakı bütün digər simvollar toxunulmaz qalacaq.
Boşluqlara icazə verilmir.
GenericMaskCodes3EAN=Maskadakı bütün digər simvollar toxunulmaz qalacaq (EAN13-də 13-cü mövqedə * və ya ? istisna olmaqla).
Boşluqlara icazə verilmir.
span>EAN13-də 13-cü mövqedə sonuncu }-dən sonra gələn sonuncu simvol * və ya ? . O, hesablanmış açarla əvəz olunacaq.
GenericMaskCodes4a=Üçüncü tərəf TheCompany-nin 99-cu %s-da nümunə, 31-01-2023:
-GenericMaskCodes4b=31-01-2023 tarixində yaradılmış üçüncü tərəfə aid nümunə:b0342fccfda19b > -GenericMaskCodes4c=31-01-2023 tarixində yaradılmış məhsula dair nümunə:b0342fccfda19b -GenericMaskCodes5=ABC{yy}{mm}-{000000} b0aee833608 verəcək span>ABC2301-000099

b0aee83365837{100z }-ZZZ/{dd}/XXX
0199-ZZZ/31/XXX

IN{yy}{mm}-{0000}-{t} şirkəti IN2301-0099-Ab09a4b739f17f80 verəcək "A_RI" növü üçün kodu olan "Məsuliyyətli Inscripto" +GenericMaskCodes4b=Example on third party created on 2023-01-31:
+GenericMaskCodes4c=Example on product created on 2023-01-31:
+GenericMaskCodes5=ABC{yy}{mm}-{000000} will give ABC2301-000099
{0000+100@1}-ZZZ/{dd}/XXX will give 0199-ZZZ/31/XXX
IN{yy}{mm}-{0000}-{t} will give IN2301-0099-A if the type of company is 'Responsable Inscripto' with code for type that is 'A_RI' GenericNumRefModelDesc=Müəyyən edilmiş maskaya uyğun olaraq fərdiləşdirilə bilən nömrə qaytarır. ServerAvailableOnIPOrPort=Server %s ünvanında, %s -ServerNotAvailableOnIPOrPort=Server %s ünvanında mövcud deyil. ='notranslate'>
%s +ServerNotAvailableOnIPOrPort=Server is not available at address %s on port %s DoTestServerAvailability=Server bağlantısını sınayın DoTestSend=Test göndərilməsi DoTestSendHTML=HTML göndərilməsini sınayın @@ -390,7 +390,7 @@ LanguageFilesCachedIntoShmopSharedMemory=Paylaşılan yaddaşa yüklənmiş .lan LanguageFile=Dil faylı ExamplesWithCurrentSetup=Cari konfiqurasiya ilə nümunələr ListOfDirectories=OpenDocument şablon kataloqlarının siyahısı -ListOfDirectoriesForModelGenODT=OpenDocument formatlı şablon faylları olan qovluqların siyahısı.

Kataloqların tam yolunu bura qoyun.
Eah kataloqu arasında karetin qaytarılması əlavə edin.
GED modulunun kataloqunu əlavə etmək üçün buraya əlavə edin b0aee83365837f >DOL_DATA_ROOT/ecm/yourdirectoryname
.
b0342fccfda Directory in thats/b0342fccfda .odt və ya ods ilə bitməlidir. ='notranslate'>. +ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.

Put here full path of directories.
Add a carriage return between eah directory.
To add a directory of the GED module, add here DOL_DATA_ROOT/ecm/yourdirectoryname.

Files in those directories must end with .odt or .ods. NumberOfModelFilesFound=Bu qovluqlarda tapılan ODT/ODS şablon fayllarının sayı ExampleOfDirectoriesForModelGen=Sintaksis nümunələri:
c:\\myapp\\mydocumentdir\\mysubdir
/home/myapp/mydocumentdir/mysub
DOL_DATA_ROOT/ecm/ecmdir FollowingSubstitutionKeysCanBeUsed=
Odt sənəd şablonlarınızı necə yaratacağınızı bilmək üçün onları həmin kataloqlarda saxlamazdan əvvəl wiki sənədlərini oxuyun: @@ -461,17 +461,17 @@ ComputedFormulaDesc=Dinamik hesablanmış dəyər əldə etmək üçün burada o Computedpersistent=Hesablanmış sahəni saxla ComputedpersistentDesc=Hesablanmış əlavə sahələr verilənlər bazasında saxlanılacaq, lakin dəyər yalnız bu sahənin obyekti dəyişdirildikdə yenidən hesablanacaq. Hesablanmış sahə digər obyektlərdən və ya qlobal məlumatlardan asılıdırsa, bu dəyər yanlış ola bilər! ExtrafieldParamHelpPassword=Bu sahənin boş qalması o deməkdir ki, bu dəyər ŞİFRELƏMƏSİZ saxlanacaq (sahə ekranda sadəcə ulduzlarla gizlənib).

Daxil edin dəyəri geri çevrilən şifrələmə alqoritmi ilə kodlaşdırmaq üçün 'dolcrypt' dəyəri. Təmiz data hələ də bilinə və redaktə edilə bilər, lakin verilənlər bazasında şifrələnir.

'Auto' (və ya 'md5') daxil edin. 'sha256', 'password_hash', ...) defolt parol şifrələmə alqoritmindən (və ya md5, sha256, password_hash...) istifadə etmək üçün geri qaytarıla bilməyən haşlanmış parolu verilənlər bazasında saxlamaq (orijinal dəyəri əldə etmək üçün heç bir yol yoxdur) -ExtrafieldParamHelpselect=Dəyərlərin siyahısı format açarı olan sətirlərdən ibarət olmalıdır, dəyər (burada açar '0' ola bilməz)

:
1,value1
2,value2
,3de span class='notranslate'>
...

Siyahının başqasından asılı olması üçün tamamlayıcı atribut siyahısı:
1,value1|options_parent_list_codeb0aes034:34 parent_key
2,value2|options_parent_list_codeb0ae6437z

Siyahının başqa siyahıdan asılı olması üçün:
1, value1|parent_list_code:parent_keyb0342fccfda1922|val, class='notranslate'>
parent_list_code:parent_key -ExtrafieldParamHelpcheckbox=Dəyərlərin siyahısı format açarı olan sətirlərdən ibarət olmalıdır, dəyər (burada açar '0' ola bilməz)

:
1,value1
2,value2b0342fccfda19bzue3, span class='notranslate'>
... -ExtrafieldParamHelpradio=Dəyərlərin siyahısı format açarı olan sətirlərdən ibarət olmalıdır, dəyər (burada açar '0' ola bilməz)

:
1,value1
2,value2b0342fccfda19bzue3, span class='notranslate'>
... -ExtrafieldParamHelpsellist=Dəyərlərin siyahısı cədvəldən gəlir
Sintaksis: table_name:label_field:id_field::filtersql
Nümunə: c_typent: ::filtersql

- id_field mütləq əsas int açarıdırb0342fccz01> - filtersql SQL şərtidir. Yalnız aktiv dəyəri göstərmək üçün sadə bir test ola bilər (məsələn, aktiv=1)
Siz həmçinin cari obyektin
Filtrdə SEÇİM istifadə etmək üçün inyeksiya əleyhinə mühafizəni keçmək üçün $SEL$ açar sözündən istifadə edin.
əgər əlavə sahələr üzrə filtrasiya etmək istəyirsinizsə extra.fieldcode=... sintaksisindən istifadə edin (burada sahə kodu əlavə sahənin kodudur)

başqa tamamlayıcı atribut siyahısından asılı olaraq siyahı:
c_typent:libelle:id:options_parent_list_codeb0ae64758baclum>film: -ExtrafieldParamHelpchkbxlst=Dəyərlərin siyahısı cədvəldən gəlir
Sintaksis: table_name:label_field:id_field::filtersql
Nümunə: c_typent: ::filtersql

filtr yalnız aktiv dəyəri göstərmək üçün sadə test (məsələn, active=1) ola bilər
Siz həmçinin $ID$ filtrində istifadə edə bilərsiniz cadugər cari obyektin cari identifikatorudur
Filtrdə SEÇİM etmək üçün $SEL$< istifadə edin span class='notranslate'>
əgər əlavə sahələr üzrə filtrasiya etmək istəyirsinizsə extra.fieldcode=... sintaksisindən istifadə edin (burada sahə kodu əlavə sahənin kodudur)

Siyahının başqa bir tamamlayıcı atribut siyahısından asılı olması üçün:
c_typent:libelle:id:options_parent_list_code|parent_column:filter b0342fccfda1981fcz04'translateb0342fccfda19b209b0342fccfda19b29 0 Siyahının başqa siyahıdan asılı olması üçün:
c_typent:libelle:id:parent_list_code|parent_column:filter +ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key +ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... +ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... +ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filtersql
Example: c_typent:libelle:id::filtersql

- id_field is necessarily a primary int key
- filtersql is a SQL condition. It can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter which is the current id of current object
To use a SELECT into the filter use the keyword $SEL$ to bypass anti-injection protection.
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter +ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filtersql
Example: c_typent:libelle:id::filtersql

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parametrlər ObjectName:Classpath
Sintaksis: ObjectName:Classpath olmalıdır ExtrafieldParamHelpSeparator=Sadə ayırıcı üçün boş saxlayın
Dağlanan ayırıcı üçün bunu 1-ə təyin edin (defolt olaraq yeni sessiya üçün açılır, sonra status hər istifadəçi sessiyası üçün saxlanılır)
Bunu yığışdıran ayırıcı üçün 2-yə təyin edin (yeni sessiya üçün defolt olaraq yığışdırılır, sonra status hər istifadəçi seansından əvvəl saxlanılır) LibraryToBuildPDF=PDF yaratmaq üçün istifadə olunan kitabxana LocalTaxDesc=Bəzi ölkələr hər faktura xəttinə iki və ya üç vergi tətbiq edə bilər. Əgər belədirsə, ikinci və üçüncü verginin növünü və onun dərəcəsini seçin. Mümkün növlər bunlardır:
1: yerli vergi ƏDV olmadan məhsul və xidmətlərə tətbiq edilir (yerli vergi vergisiz məbləğə hesablanır)
2: yerli vergi ƏDV daxil olmaqla məhsul və xidmətlərə tətbiq edilir (yerli vergi məbləğə + əsas vergiyə görə hesablanır)
3: yerli vergi ƏDV-siz məhsullara tətbiq edilir (yerli vergi əlavə olunmayan məbləğə görə hesablanır) vergi)
4: yerli vergi ƏDV daxil olmaqla məhsullara tətbiq edilir (yerli vergi məbləğ + əsas ƏDV əsasında hesablanır)
5: yerli vergi ƏDV-siz xidmətlərə tətbiq edilir (yerli vergi vergisiz məbləğə hesablanır)
6: yerli vergi ƏDV daxil olmaqla xidmətlərə tətbiq edilir (yerli vergi məbləğə + vergiyə görə hesablanır) SMS=SMS -LinkToTestClickToDial=İstifadəçi %s
+LinkToTestClickToDial=Enter a phone number to call to show a link to test the ClickToDial url for user %s RefreshPhoneLink=Linki yeniləyin LinkToTest=İstifadəçi %s telefon nömrəsini sınaqdan keçirmək üçün yaradılan kliklənən keçid (click) ) KeepEmptyToUseDefault=Standart dəyəri istifadə etmək üçün boş saxlayın @@ -483,7 +483,7 @@ ExternalModule=Xarici modul InstalledInto=%s qovluğuna quraşdırılıb BarcodeInitForThirdparties=Üçüncü tərəflər üçün kütləvi ştrix kodu işə salın BarcodeInitForProductsOrServices=Kütləvi barkod məhsul və ya xidmətlər üçün işə salın və ya sıfırlayın -CurrentlyNWithoutBarCode=Hazırda %s qeydiniz var. notranslate'>
%s b0ecb49ec olmadan . +CurrentlyNWithoutBarCode=Currently, you have %s record on %s %s without barcode defined. InitEmptyBarCode=%s boş barkodlar üçün başlanğıc dəyəri EraseAllCurrentBarCode=Bütün cari barkod dəyərlərini silin ConfirmEraseAllCurrentBarCode=Bütün cari barkod dəyərlərini silmək istədiyinizə əminsiniz? @@ -518,8 +518,8 @@ DependsOn=Bu modula modul(lar) lazımdır RequiredBy=Bu modul modul(lar) tərəfindən tələb olunur TheKeyIsTheNameOfHtmlField=Bu HTML sahəsinin adıdır. Sahənin açar adını əldə etmək üçün HTML səhifəsinin məzmununu oxumaq üçün texniki bilik tələb olunur. PageUrlForDefaultValues=Siz səhifənin URL-nin nisbi yolunu daxil etməlisiniz. Əgər parametrləri URL-ə daxil etsəniz, baxılan URL-dəki bütün parametrlər burada müəyyən edilmiş dəyərə malik olarsa, bu effektiv olacaq. -PageUrlForDefaultValuesCreate=
Nümunə:
Formanın yeni üçüncü tərəf yaratmaq üçün b0e7843947c06b /span>%s
.
Bura quraşdırılmış xarici modulların URL-i üçün xüsusi kataloq, "xüsusi/" daxil etməyin, belə ki, mymodule/mypage.php kimi yoldan istifadə edin və fərdi deyil /mymodule/mypage.php.
Yalnız url-də bəzi parametrlər olduqda defolt dəyər istəyirsinizsə, %s -PageUrlForDefaultValuesList=
Nümunə:
Üçüncü tərəfləri siyahıya alan səhifə üçün bu b0e7843947c06b0z >%s
.
Fərdi direktoriyaya quraşdırılmış xarici modulların URL-i üçün , "xüsusi/" daxil etməyin, buna görə də mymodule/mypagelist.php kimi bir yoldan istifadə edin, fərdi/mymodule deyil /mypagelist.php.
Yalnız url-də bəzi parametrlər varsa, defolt dəyər istəyirsinizsə, %s +PageUrlForDefaultValuesCreate=
Example:
For the form to create a new third party, it is %s.
For URL of external modules installed into custom directory, do not include the "custom/", so use path like mymodule/mypage.php and not custom/mymodule/mypage.php.
If you want default value only if url has some parameter, you can use %s +PageUrlForDefaultValuesList=
Example:
For the page that lists third parties, it is %s.
For URL of external modules installed into custom directory, do not include the "custom/" so use a path like mymodule/mypagelist.php and not custom/mymodule/mypagelist.php.
If you want default value only if url has some parameter, you can use %s AlsoDefaultValuesAreEffectiveForActionCreate=Həmçinin nəzərə alın ki, forma yaradılması üçün standart dəyərlərin üzərinə yazmaq yalnız düzgün tərtib edilmiş səhifələr üçün işləyir (beləliklə, action=create və ya təqdim... parametri ilə) EnableDefaultValues=Defolt dəyərlərin fərdiləşdirilməsini aktivləşdirin EnableOverwriteTranslation=Tərcümələrin fərdiləşdirilməsinə icazə verin @@ -1197,6 +1197,7 @@ Skin=Dəri mövzusu DefaultSkin=Defolt dəri mövzusu MaxSizeList=Siyahı üçün maksimum uzunluq DefaultMaxSizeList=Siyahılar üçün defolt maksimum uzunluq +DisplayGrandTotalInList=Display grand total (for all pages) in lists footer DefaultMaxSizeShortList=Qısa siyahılar üçün defolt maksimum uzunluq (məsələn, müştəri kartında) MessageOfDay=Günün mesajı MessageLogin=Giriş səhifəsi mesajı @@ -1246,10 +1247,10 @@ Delays_MAIN_DELAY_EXPENSEREPORTS=Təsdiq üçün xərc hesabatı Delays_MAIN_DELAY_HOLIDAYS=Təsdiq etmək üçün sorğuları buraxın SetupDescription1=Dolibarr-dan istifadə etməyə başlamazdan əvvəl bəzi ilkin parametrlər müəyyən edilməli və modullar işə salınmalı/konfiqurasiya edilməlidir. SetupDescription2=Aşağıdakı iki bölmə məcburidir (Quraşdırma menyusundakı ilk iki giriş): -SetupDescription3=%s -> %s

Tətbiqinizin defolt davranışını fərdiləşdirmək üçün istifadə olunan əsas parametrlər (məsələn, ölkə ilə bağlı funksiyalar üçün). -SetupDescription4=
%s -> %s

Bu proqram çoxlu modullar/tətbiqlər toplusudur. Ehtiyaclarınıza uyğun modullar aktiv və konfiqurasiya edilməlidir. Bu modulların aktivləşdirilməsi ilə menyu girişləri görünəcək. +SetupDescription3=
%s -> %s

Basic parameters used to customize the default behavior of your application (e.g for country-related features). +SetupDescription4=%s -> %s

This software is a suite of many modules/applications. The modules related to your needs must be enabled and configured. Menu entries will appears with the activation of these modules. SetupDescription5=Digər Quraşdırma menyu girişləri isteğe bağlı parametrləri idarə edir. -SetupDescriptionLink=%s - %s /span> +SetupDescriptionLink=%s - %s SetupDescription3b=Tətbiqinizin standart davranışını fərdiləşdirmək üçün istifadə olunan əsas parametrlər (məsələn, ölkə ilə bağlı funksiyalar üçün). SetupDescription4b=Bu proqram çoxlu modulların/proqramların dəstidir. Ehtiyaclarınıza uyğun modullar aktivləşdirilməlidir. Bu modulların aktivləşdirilməsi ilə menyu girişləri görünəcək. AuditedSecurityEvents=Yoxlanılan təhlükəsizlik hadisələri @@ -1268,7 +1269,7 @@ BrowserOS=Brauzer OS ListOfSecurityEvents=Dolibarr təhlükəsizlik hadisələrinin siyahısı SecurityEventsPurged=Təhlükəsizlik hadisələri təmizləndi TrackableSecurityEvents=İzlənə bilən təhlükəsizlik hadisələri -LogEventDesc=Xüsusi təhlükəsizlik hadisələri üçün girişi aktiv edin. İdarəçilər %s - %s
. Xəbərdarlıq, bu xüsusiyyət verilənlər bazasında böyük miqdarda məlumat yarada bilər. +LogEventDesc=Enable logging for specific security events. Administrators the log via menu %s - %s. Warning, this feature can generate a large amount of data in the database. AreaForAdminOnly=Quraşdırma parametrləri yalnız administrator istifadəçiləri tərəfindən təyin edilə bilər. SystemInfoDesc=Sistem məlumatı yalnız oxumaq rejimində əldə etdiyiniz və yalnız administratorlar üçün görünən müxtəlif texniki məlumatlardır. SystemAreaForAdminOnly=Bu sahə yalnız administrator istifadəçiləri üçün əlçatandır. Dolibarr istifadəçi icazələri bu məhdudiyyəti dəyişə bilməz. @@ -1281,11 +1282,11 @@ AvailableModules=Mövcud proqramlar/modullar ToActivateModule=Modulları aktivləşdirmək üçün quraşdırma sahəsinə keçin (Ev-> Quraşdırma-> Modullar). SessionTimeOut=Sessiya üçün vaxt bitdi SessionExplanation=Bu nömrə zəmanət verir ki, seans təmizləyicisi Daxili PHP sessiya təmizləyicisi (və başqa heç nə) tərəfindən edilərsə, bu gecikmədən əvvəl sessiya heç vaxt bitməyəcək. Daxili PHP sessiya təmizləyicisi bu gecikmədən sonra sessiyanın bitəcəyinə zəmanət vermir. Bu gecikmədən sonra və sessiya təmizləyicisi işə salındıqda onun müddəti bitəcək, beləliklə hər %s/%s giriş, lakin yalnız digər seanslar tərəfindən edilən giriş zamanı (dəyər 0 olarsa, sessiyanın təmizlənməsi yalnız xarici proses tərəfindən həyata keçirilir) .
Qeyd: xarici seans təmizləmə mexanizmi olan bəzi serverlərdə (debian altında cron, ubuntu ...), sessiyalar xarici quraşdırma ilə müəyyən edilmiş müddətdən sonra məhv edilə bilər, buraya daxil edilən dəyər nə olursa olsun. -SessionsPurgedByExternalSystem=Bu serverdəki sessiyalar xarici mexanizm (debian altında cron, ubuntu ...) tərəfindən təmizlənir, yəqin ki, hər %s saniyə (= parametrin dəyəri session.gc_maxlifetime modulu kimi deaktiv edilib. +TriggerDisabledAsModuleDisabled=Triggers in this file are disabled as module %s is disabled. TriggerAlwaysActive=Aktivləşdirilmiş Dolibarr modulları nə olursa olsun, bu fayldakı tetikler həmişə aktivdir. TriggerActiveAsModuleActive=Bu fayldakı triggerlər modul %s aktiv edildiyi kimi aktivdir. GeneratedPasswordDesc=Avtomatik yaradılan parollar üçün istifadə ediləcək metodu seçin. @@ -1306,7 +1307,7 @@ NoEventOrNoAuditSetup=Heç bir təhlükəsizlik hadisəsi qeydə alınmayıb. "Q NoEventFoundWithCriteria=Bu axtarış meyarları üçün heç bir təhlükəsizlik hadisəsi tapılmadı. SeeLocalSendMailSetup=Yerli sendmail quraşdırmanıza baxın BackupDesc=Dolibarr quraşdırmasının tam ehtiyat nüsxəsi iki addım tələb edir. -BackupDesc2="Sənədlər" kataloqunun məzmununu yedəkləyin (%sb09a4b739f17f80) bütün yüklənmiş və yaradılan faylları ehtiva edir. Bu, həmçinin Addım 1-də yaradılan bütün dump fayllarını əhatə edəcək. Bu əməliyyat bir neçə dəqiqə davam edə bilər. +BackupDesc2=Backup the contents of the "documents" directory (%s) containing all uploaded and generated files. This will also include all the dump files generated in Step 1. This operation may last several minutes. BackupDesc3=Verilənlər bazanızın strukturunu və məzmununu yedəkləyin (%s) dump faylı. Bunun üçün aşağıdakı köməkçidən istifadə edə bilərsiniz. BackupDescX=Arxivləşdirilmiş kataloq təhlükəsiz yerdə saxlanmalıdır. BackupDescY=Yaradılmış dump faylı təhlükəsiz yerdə saxlanmalıdır. @@ -1321,7 +1322,7 @@ PreviousDumpFiles=Mövcud ehtiyat faylları PreviousArchiveFiles=Mövcud arxiv faylları WeekStartOnDay=Həftənin ilk günü RunningUpdateProcessMayBeRequired=Təkmilləşdirmə prosesinin icrası tələb olunur (Proqram versiyası %s Database versiyası %s ilə fərqlənir) -YouMustRunCommandFromCommandLineAfterLoginToUser=%sb09a4b739f1780z istifadəçisi olan qabığa daxil olduqdan sonra bu əmri komanda xəttindən icra etməlisiniz. və ya %s parol. +YouMustRunCommandFromCommandLineAfterLoginToUser=You must run this command from command line after login to a shell with user %s or you must add -W option at end of command line to provide %s password. YourPHPDoesNotHaveSSLSupport=SSL funksiyaları PHP-də mövcud deyil DownloadMoreSkins=Yükləmək üçün daha çox dəri SimpleNumRefModelDesc=%syymm-nnnn formatında istinad nömrəsini qaytarır, burada yy il, mm ay və nnnn sıfırlama olmadan ardıcıl avtomatik artan nömrədir @@ -1371,8 +1372,8 @@ SendmailOptionMayHurtBuggedMTA="PHP poçtu birbaşa" metodundan istifadə edər TranslationSetup=Tərcümənin qurulması TranslationKeySearch=Tərcümə açarı və ya sətrini axtarın TranslationOverwriteKey=Tərcümə sətirinin üzərinə yazın -TranslationDesc=Ekran dilini necə təyin etmək olar:
* Defolt/Systemwide: menyu Ev -> Quraşdırma -> Ekran
* İstifadəçiyə görə: Ekranın yuxarısındakı istifadəçi adına klikləyin və b0e7843907zİstifadəçi Ekranının Quraşdırılması istifadəçi kartındakı tab. -TranslationOverwriteDesc=Siz həmçinin aşağıdakı cədvəli dolduran sətirləri ləğv edə bilərsiniz. "%s" açılan menyudan dilinizi seçin, tərcümə açarı sətirini "%s" və "%s" +TranslationDesc=How to set the display language:
* Default/Systemwide: menu Home -> Setup -> Display
* Per user: Click on the username at the top of the screen and modify the User Display Setup tab on the user card. +TranslationOverwriteDesc=You can also override strings filling the following table. Choose your language from "%s" dropdown, insert the translation key string into "%s" and your new translation into "%s" TranslationOverwriteDesc2=Hansı tərcümə açarından istifadə edəcəyinizi bilmək üçün digər tabdan istifadə edə bilərsiniz TranslationString=Tərcümə sətri CurrentTranslationString=Cari tərcümə sətri @@ -1397,7 +1398,7 @@ SearchOptim=Axtarış optimallaşdırılması YouHaveXObjectUseComboOptim=Verilənlər bazanızda %s %s var. Siz düyməyə basılan hadisədə kombinasiya siyahısının yüklənməsini aktivləşdirmək üçün modulun quraşdırılmasına daxil ola bilərsiniz. YouHaveXObjectUseSearchOptim=Verilənlər bazanızda %s %s var. Siz Ev Quraşdırma-Digər bölməsində %s sabitini 1-ə əlavə edə bilərsiniz. YouHaveXObjectUseSearchOptimDesc=Bu, axtarışı sətirlərin başlanğıcı ilə məhdudlaşdırır ki, bu da verilənlər bazası üçün indekslərdən istifadə etməyə imkan verir və siz dərhal cavab almalısınız. -YouHaveXObjectAndSearchOptimOn=Verilənlər bazasında %s %s var və daimi %s < olaraq ayarlanıb span class='notranslate'>%s
Əsas Quraşdırma-Digər. +YouHaveXObjectAndSearchOptimOn=You have %s %s in the database and constant %s is set to %s in Home-Setup-Other. BrowserIsOK=Siz %s veb brauzerindən istifadə edirsiniz. Bu brauzer təhlükəsizlik və performans baxımından yaxşıdır. BrowserIsKO=Siz %s veb brauzerindən istifadə edirsiniz. Bu brauzer təhlükəsizlik, performans və etibarlılıq baxımından pis seçim kimi tanınır. Firefox, Chrome, Opera və ya Safari istifadə etməyi tövsiyə edirik. PHPModuleLoaded=PHP komponenti %s yükləndi @@ -1663,7 +1664,7 @@ LDAPDescUsers=Bu səhifə Dolibarr istifadəçilərində tapılan hər bir məlu LDAPDescGroups=Bu səhifə Dolibarr qruplarında tapılan hər bir məlumat üçün LDAP ağacında LDAP atributlarının adını müəyyən etməyə imkan verir. LDAPDescMembers=Bu səhifə Dolibarr üzvləri modulunda tapılan hər bir məlumat üçün LDAP ağacında LDAP atributlarının adını müəyyən etməyə imkan verir. LDAPDescMembersTypes=Bu səhifə sizə Dolibarr üzv tiplərində tapılan hər bir məlumat üçün LDAP ağacında LDAP atributlarının adını müəyyən etməyə imkan verir. -LDAPDescValues=Nümunə dəyərlər aşağıdakı yüklənmiş sxemlərlə OpenLDAP üçün nəzərdə tutulub: b0aee3736 core.schema, cosine.schema, inetorgperson.schema). Bu dəyərlərdən və OpenLDAP-dan istifadə edirsinizsə, bütün sxemləri yükləmək üçün LDAP konfiqurasiya faylınızı slapd.conf dəyişdirin. +LDAPDescValues=Example values are designed for OpenLDAP with following loaded schemas: core.schema, cosine.schema, inetorgperson.schema). If you use thoose values and OpenLDAP, modify your LDAP config file slapd.conf to have all thoose schemas loaded. ForANonAnonymousAccess=Doğrulanmış giriş üçün (məsələn, yazma girişi üçün) PerfDolibarr=Performansın qurulması/optimallaşdırılması hesabatı YouMayFindPerfAdviceHere=Bu səhifə performansla bağlı bəzi yoxlamalar və ya məsləhətlər təqdim edir. @@ -1860,7 +1861,7 @@ PastDelayVCalExport=Daha köhnə hadisəni ixrac etməyin SecurityKey = Təhlükəsizlik Açarı ##### ClickToDial ##### ClickToDialSetup=Modul quraşdırmasını yığmaq üçün klikləyin -ClickToDialUrlDesc=Telefon piktoqramına klik edildikdə URL çağırılır. URL-də
__PHONETO__b09a4b739f17f8z olacaq teqlərdən istifadə edə bilərsiniz. zəng ediləcək şəxsin telefon nömrəsi ilə əvəz olundu
__PHONEFROM__b09a4b739f017 zəng edən şəxsin telefon nömrəsi (sizin) ilə əvəz olunacaq
__LOGIN__b09a41703f span> ki, kliklə daxil olan giriş (istifadəçi kartında müəyyən edilir) ilə əvəz olunacaq
__PASS__ bu, klikləmə parolu ilə əvəz olunacaq (istifadəçi kartında müəyyən edilmişdir). +ClickToDialUrlDesc=URL called when a click on phone picto is done. In URL, you can use tags
__PHONETO__ that will be replaced with the phone number of person to call
__PHONEFROM__ that will be replaced with phone number of calling person (yours)
__LOGIN__ that will be replaced with clicktodial login (defined on user card)
__PASS__ that will be replaced with clicktodial password (defined on user card). ClickToDialDesc=Bu modul masa üstü kompüterdən istifadə edərkən telefon nömrələrini kliklənən linklərə dəyişir. Bir klik nömrəyə zəng edəcək. Bu, masaüstünüzdə yumşaq telefondan istifadə edərkən və ya məsələn SIP protokoluna əsaslanan CTI sistemindən istifadə edərkən telefon zəngini başlamaq üçün istifadə edilə bilər. Qeyd: Smartfondan istifadə edərkən telefon nömrələri həmişə kliklənir. ClickToDialUseTelLink=Telefon nömrələrində sadəcə "tel:" linkindən istifadə edin ClickToDialUseTelLinkDesc=Əgər istifadəçilərinizin proqram telefonu və ya proqram interfeysi varsa, brauzerlə eyni kompüterdə quraşdırılıbsa və brauzerinizdə "tel:" ilə başlayan linkə kliklədiyiniz zaman zəng edibsə, bu üsuldan istifadə edin. Əgər sizə "sip:" ilə başlayan linkə və ya tam server həllinə ehtiyacınız varsa (yerli proqram təminatının quraşdırılmasına ehtiyac yoxdur), siz bunu "Xeyr" olaraq təyin etməli və növbəti sahəni doldurmalısınız. @@ -1920,8 +1921,8 @@ IfSetToYesDontForgetPermission=Sıfır olmayan dəyərə təyin edilərsə, ikin GeoIPMaxmindSetup=GeoIP Maxmind modulunun qurulması PathToGeoIPMaxmindCountryDataFile=Ölkəyə tərcümədə Maxmind ip ehtiva edən fayl yolu NoteOnPathLocation=Nəzərə alın ki, ölkəyə olan IP məlumat faylınız PHP-nin oxuya biləcəyi qovluqda olmalıdır (PHP open_basedir quraşdırma və fayl sistemi icazələrini yoxlayın). -YouCanDownloadFreeDatFileTo=Maxmind GeoIP ölkə faylının pulsuz demo versiyasını endirə bilərsiniz b0ecb9fz87 /span>. -YouCanDownloadAdvancedDatFileTo=Siz həmçinin %s. +YouCanDownloadFreeDatFileTo=You can download a free demo version of the Maxmind GeoIP country file at %s. +YouCanDownloadAdvancedDatFileTo=You can also download a more complete version, with updates, of the Maxmind GeoIP country file at %s. TestGeoIPResult=Konversiya IP-nin sınağı -> ölkə ##### Projects ##### ProjectsNumberingModules=Layihələrin nömrələnməsi modulu @@ -1971,7 +1972,7 @@ SomethingMakeInstallFromWebNotPossible=Xarici modulun quraşdırılması aşağ SomethingMakeInstallFromWebNotPossible2=Bu səbəbdən, burada təsvir edilən təkmilləşdirmə prosesi yalnız imtiyazlı istifadəçinin yerinə yetirə biləcəyi əl ilə həyata keçirilən prosesdir. InstallModuleFromWebHasBeenDisabledContactUs=Tətbiqdən xarici modulların və ya dinamik veb-saytların quraşdırılması və ya inkişafı təhlükəsizlik məqsədi ilə hazırda kilidlənib. Bu funksiyanı aktivləşdirmək lazımdırsa, bizimlə əlaqə saxlayın. InstallModuleFromWebHasBeenDisabledByFile=Tətbiqdən xarici modulun quraşdırılması administratorunuz tərəfindən deaktiv edilib. Buna icazə vermək üçün ondan %s faylını silməsini xahiş etməlisiniz. xüsusiyyət. -ConfFileMustContainCustom=Tətbiqdən xarici modul quraşdırmaq və ya qurmaq üçün modul fayllarını %s qovluğunda saxlamaq lazımdır. . Bu kataloqun Dolibarr tərəfindən işlənməsi üçün siz conf/conf.php 2 direktiv sətir əlavə etmək üçün quraşdırmalısınız:
$dolibarr_main_url_root_alt='/custom';b0a106f><09fd ='notranslate'>
$dolibarr_main_document_root_alt='b0ecb2ec87f49'>b0ecb2ec87f49; +ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory %s. To have this directory processed by Dolibarr, you must setup your conf/conf.php to add the 2 directive lines:
$dolibarr_main_url_root_alt='/custom';
$dolibarr_main_document_root_alt='%s/custom'; HighlightLinesOnMouseHover=Siçan hərəkəti üzərindən keçəndə cədvəl xətlərini vurğulayın HighlightLinesColor=Siçan üzərindən keçəndə xəttin rəngini vurğulayın (vurğulanmamaq üçün "ffffff" istifadə edin) HighlightLinesChecked=Yoxlandıqda xəttin rəngini vurğulayın (vurğulanmamaq üçün "ffffff" istifadə edin) @@ -2065,12 +2066,12 @@ DetectionNotPossible=Aşkarlama mümkün deyil UrlToGetKeyToUseAPIs=API istifadə etmək üçün token əldə etmək üçün URL (token alındıqdan sonra verilənlər bazası istifadəçi cədvəlində saxlanılır və hər API çağırışında təqdim edilməlidir) ListOfAvailableAPIs=Mövcud API-lərin siyahısı activateModuleDependNotSatisfied="%s" modulu çatışmayan "%s" modulundan asılıdır, ona görə də " modulu %1$s" düzgün işləməyə bilər. Hər hansı bir sürprizdən təhlükəsiz olmaq istəyirsinizsə, "%2$s" modulunu quraşdırın və ya "%1$s" modulunu deaktiv edin. -CommandIsNotInsideAllowedCommands=Çalışdırmağa çalışdığınız əmr $dolibarr_main_restrict_os_commands parametrində müəyyən edilmiş icazə verilən əmrlər siyahısında deyil. class='notranslate'>
conf.php faylı. +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter $dolibarr_main_restrict_os_commands in the conf.php file. LandingPage=Açılış səhifə SamePriceAlsoForSharedCompanies=Əgər "Vahid qiymət" seçimi ilə çoxşirkətli moduldan istifadə etsəniz, məhsullar mühitlər arasında paylaşıldıqda qiymət bütün şirkətlər üçün eyni olacaq. ModuleEnabledAdminMustCheckRights=Modul aktivləşdirilib. Aktivləşdirilmiş modul(lar) üçün icazələr yalnız admin istifadəçilərə verilib. Lazım gələrsə, digər istifadəçilərə və ya qruplara əl ilə icazələr verməli ola bilərsiniz. UserHasNoPermissions=Bu istifadəçinin müəyyən edilmiş icazələri yoxdur -TypeCdr=Ödəniş müddəti hesab-fakturanın tarixi və günlərlə deltadırsa (delta "%s" sahəsidir)
dırsa, "Yox"dan istifadə edin. span>Deltadan sonra ayın sonuna çatmaq üçün tarix artırılmalıdırsa, "Ayın sonunda" istifadə edin (+ günlərlə "%s" əlavə edin)
Ödəniş tarixinin deltadan sonra ayın ilk N-i olması üçün "Cari/Növbəti"dən istifadə edin (delta "%s" sahəsidir. , N "%s" sahəsində saxlanılır) +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")
Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)
Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s") BaseCurrency=Şirkətin istinad valyutası (bunu dəyişmək üçün şirkətin qurulmasına daxil olun) WarningNoteModuleInvoiceForFrenchLaw=Bu modul %s Fransa qanunlarına uyğundur (Loi Finance 2016). WarningNoteModulePOSForFrenchLaw=Bu modul %s Fransız qanunlarına (Loi Finance 2016) uyğundur, çünki Qaytarılmayan Qeydlər modulu avtomatik aktivləşdirilir. @@ -2114,7 +2115,7 @@ YouCanDeleteFileOnServerWith=Bu faylı serverdə Komanda xətti ilə silə bilə ChartLoaded=Hesab cədvəli yükləndi SocialNetworkSetup=Sosial şəbəkələr modulunun qurulması EnableFeatureFor=%s üçün funksiyaları aktiv edin -VATIsUsedIsOff=Qeyd: Satış Vergisi və ya ƏDV-dən istifadə seçimi %s - %s, buna görə də istifadə edilən Satış vergisi və ya ƏDV satış üçün həmişə 0 olacaq. +VATIsUsedIsOff=Note: The option to use Sales Tax or VAT has been set to Off in the menu %s - %s, so Sales tax or Vat used will always be 0 for sales. SwapSenderAndRecipientOnPDF=PDF sənədlərində göndərici və alıcı ünvanının yerini dəyişdirin FeatureSupportedOnTextFieldsOnly=Xəbərdarlıq, funksiya yalnız mətn sahələrində və birləşmiş siyahılarda dəstəklənir. Həmçinin URL parametri action=create və ya action=edit təyin edilməlidir və ya bu funksiyanı işə salmaq üçün səhifə adı 'new.php' ilə bitməlidir. EmailCollector=E-poçt kollektoru @@ -2262,7 +2263,7 @@ ModuleActivatedMayExposeInformation=Bu PHP genişləndirilməsi həssas məlumat ModuleActivatedDoNotUseInProduction=İnkişaf üçün nəzərdə tutulmuş modul işə salınıb. İstehsal mühitində onu aktivləşdirməyin. CombinationsSeparator=Məhsul birləşmələri üçün ayırıcı xarakter SeeLinkToOnlineDocumentation=Nümunələr üçün yuxarı menyuda onlayn sənədlərə keçidə baxın -SHOW_SUBPRODUCT_REF_IN_PDF=%s
istifadə olunur, PDF-də dəstin alt məhsullarının təfərrüatlarını göstərin. +SHOW_SUBPRODUCT_REF_IN_PDF=If the feature "%s" of module %s is used, show details of subproducts of a kit on PDF. AskThisIDToYourBank=Bu ID-ni əldə etmək üçün bankınızla əlaqə saxlayın AdvancedModeOnly=İcazə yalnız Qabaqcıl icazə rejimində mövcuddur ConfFileIsReadableOrWritableByAnyUsers=conf faylı istənilən istifadəçi tərəfindən oxuna və ya yaza bilər. Yalnız veb server istifadəçisinə və qrupa icazə verin. @@ -2291,7 +2292,7 @@ APIsAreNotEnabled=API modulları aktiv deyil YouShouldSetThisToOff=Bunu 0 və ya söndürməlisiniz InstallAndUpgradeLockedBy=Quraşdırma və təkmilləşdirmələr %s faylı tərəfindən kilidlənib InstallLockedBy=Quraşdırma/Yenidən quraşdırma %s faylı tərəfindən kilidlənib -InstallOfAddonIsNotBlocked=Əlavələrin quraşdırılması kilidlənmir. installmodules.lock faylını b0aee83365837fz qovluğunda yaradın ='notranslate'>%s
xarici əlavələrin/modulların quraşdırılmasını bloklamaq üçün. +InstallOfAddonIsNotBlocked=Installations of addons are not locked. Create a file installmodules.lock into directory %s to block installations of external addons/modules. OldImplementation=Köhnə tətbiq PDF_SHOW_LINK_TO_ONLINE_PAYMENT=Bəzi onlayn ödəniş modulları aktivdirsə (Paypal, Stripe, ...), onlayn ödəniş etmək üçün PDF-ə keçid əlavə edin DashboardDisableGlobal=Açıq obyektlərin bütün baş barmaqlarını qlobal olaraq deaktiv edin @@ -2405,8 +2406,8 @@ NotAvailableByDefaultEnabledOnModuleActivation=Defolt olaraq yaradılmayıb. Yal CSSPage=CSS üslubu Defaultfortype=Defolt DefaultForTypeDesc=Şablon növü üçün yeni e-poçt yaradarkən standart olaraq istifadə edilən şablon -OptionXShouldBeEnabledInModuleY="%s" variantı %s -OptionXIsCorrectlyEnabledInModuleY="%s" variantı %s +OptionXShouldBeEnabledInModuleY=Option "%s" should be enabled into module %s +OptionXIsCorrectlyEnabledInModuleY=Option "%s" is enabled into module %s AllowOnLineSign=On-line imzaya icazə verin AtBottomOfPage=Səhifənin altında FailedAuth=uğursuz autentifikasiyalar @@ -2433,3 +2434,12 @@ UrlPublicInterfaceHelpAdmin=It is possible to define an alias to the web server ExportUseForce=Use the parameter -f ExportUseForceHelp=Force to continue the export even when an error is found (Backup may not be reliable) CustomPrompt=Custom prompts +AiDescription=AI (Artificial Intelligence) features +AiDescriptionLong=Provides AI (Artificial Intelligence) features in different part of the application. Need external AI API. +AI_KEY_API_CHATGPT= Key for ChatGPT IA api +AiSetup=AI module setup +AiCustomPrompt=AI customs prompt +AI_CONFIGURATIONS_PROMPT=Custom prompt +ImageGeneration=Image generation +AIPromptForFeatures=AI custom prompts for features +EnterAnIP=Enter an IP address diff --git a/htdocs/langs/az_AZ/agenda.lang b/htdocs/langs/az_AZ/agenda.lang index cfa125b7152..b144defb2ca 100644 --- a/htdocs/langs/az_AZ/agenda.lang +++ b/htdocs/langs/az_AZ/agenda.lang @@ -137,8 +137,8 @@ DateActionEnd=Bitmə vaxtı AgendaUrlOptions1=Siz həmçinin çıxışı filtrləmək üçün aşağıdakı parametrləri əlavə edə bilərsiniz: AgendaUrlOptions3=logina=%s çıxışı istifadəçinin sahib olduğu əməliyyatlarla məhdudlaşdırmaq %s. AgendaUrlOptionsNotAdmin=logina=!%s hasilatı sahib olmayan fəaliyyətlərlə məhdudlaşdırmaq istifadəçi %s. -AgendaUrlOptions4=logint=%s çıxışı istifadəçinin fəaliyyətinə məhdudlaşdırmaq üçün span class='notranslate'>%s (sahibi və başqaları). -AgendaUrlOptionsProject=project=__PROJECT_ID__, çıxışı f08387 layihəsi ilə əlaqəli əməliyyatlarla məhdudlaşdırmaq __PROJECT_ID__
. +AgendaUrlOptions4=logint=%s to restrict output to actions assigned to user %s (owner and others). +AgendaUrlOptionsProject=project=__PROJECT_ID__ to restrict output to actions linked to project __PROJECT_ID__. AgendaUrlOptionsNotAutoEvent=notactiontype=systemauto avtomatik hadisələri istisna etmək üçün. AgendaUrlOptionsIncludeHolidays=includeholidays=1 bayram günlərini əhatə edəcək. AgendaShowBirthdayEvents=Əlaqələrin ad günləri diff --git a/htdocs/langs/az_AZ/banks.lang b/htdocs/langs/az_AZ/banks.lang index 4943ed498fd..4c8139bfd2c 100644 --- a/htdocs/langs/az_AZ/banks.lang +++ b/htdocs/langs/az_AZ/banks.lang @@ -115,7 +115,7 @@ MenuBankInternalTransfer=Daxili köçürmə TransferDesc=Bir hesabdan digərinə köçürmək üçün daxili köçürmədən istifadə edin, proqram iki qeyd yazacaq: mənbə hesabında debet və hədəf hesabda kredit. Bu əməliyyat üçün eyni məbləğ, etiket və tarix istifadə olunacaq. TransferFrom=From TransferTo=Kimə -TransferFromToDone=%s-dan %s %s qeydə alınıb. +TransferFromToDone=A transfer from %s to %s of %s %s has been recorded. CheckTransmitter=Göndərən ValidateCheckReceipt=Bu çek qəbzi təsdiq edilsin? ConfirmValidateCheckReceipt=Bu çek qəbzini təsdiq üçün təqdim etmək istədiyinizə əminsiniz? Təsdiq edildikdən sonra heç bir dəyişiklik mümkün olmayacaq. diff --git a/htdocs/langs/az_AZ/bills.lang b/htdocs/langs/az_AZ/bills.lang index f855703536e..49b1615b430 100644 --- a/htdocs/langs/az_AZ/bills.lang +++ b/htdocs/langs/az_AZ/bills.lang @@ -188,7 +188,7 @@ SuppliersDraftInvoices=Satıcıların hesab-fakturaları Unpaid=Ödənilməmiş ErrorNoPaymentDefined=Xəta Heç bir ödəniş müəyyən edilməmişdir ConfirmDeleteBill=Bu fakturanı silmək istədiyinizə əminsiniz? -ConfirmValidateBill=Bu fakturanı %s istinadı ilə doğrulamaq istədiyinizə əminsiniz >? +ConfirmValidateBill=Are you sure you want to validate this invoice with the reference %s? ConfirmUnvalidateBill=%s fakturasını qaralama statusuna dəyişmək istədiyinizə əminsiniz ? ConfirmClassifyPaidBill=%s fakturasını ödənişli statusuna dəyişmək istədiyinizə əminsiniz ? ConfirmCancelBill=%s fakturasını ləğv etmək istədiyinizə əminsiniz? @@ -210,14 +210,14 @@ ConfirmClassifyPaidPartiallyReasonDiscountVatDesc=Bəzi ölkələrdə bu seçim ConfirmClassifyPaidPartiallyReasonAvoirDesc=Bütün digərləri uyğun gəlmirsə, bu seçimdən istifadə edin ConfirmClassifyPaidPartiallyReasonBadCustomerDesc=pis müştəri borcunu ödəməkdən imtina edən müştəridir. ConfirmClassifyPaidPartiallyReasonProductReturnedDesc=Bəzi məhsullar geri qaytarıldığı üçün ödəniş tamamlanmadıqda bu seçim istifadə olunur -ConfirmClassifyPaidPartiallyReasonBankChargeDesc=Ödənilməmiş məbləğ vasitəçi bank haqları, birbaşa b0aee3730z-dan çıxılır. >düzgün məbləğ Müştəri tərəfindən ödənilir. +ConfirmClassifyPaidPartiallyReasonBankChargeDesc=The unpaid amount is intermediary bank fees, deducted directly from the correct amount paid by the Customer. ConfirmClassifyPaidPartiallyReasonWithholdingTaxDesc=Ödənilməmiş məbləğ heç vaxt ödənilməyəcək, çünki bu, vergi tutulmasıdır ConfirmClassifyPaidPartiallyReasonOtherDesc=Bütün digərləri uyğun deyilsə, məsələn, aşağıdakı vəziyyətdə bu seçimi istifadə edin:
- ödəniş tamamlanmayıb, çünki bəzi məhsullar geri göndərilib
- endirim unudulmuş olduğu üçün iddia edilən məbləğ çox mühümdür
Bütün hallarda həddindən artıq tələb olunan məbləğ kredit qeydi yaratmaqla mühasibatlıq sistemində düzəldilməlidir. ConfirmClassifyPaidPartiallyReasonBadSupplierDesc=pis təchizatçı ödəməkdən imtina etdiyimiz təchizatçıdır. ConfirmClassifyAbandonReasonOther=Digər ConfirmClassifyAbandonReasonOtherDesc=Bu seçim bütün digər hallarda istifadə olunacaq. Məsələn, əvəzedici faktura yaratmağı planlaşdırdığınız üçün. -ConfirmCustomerPayment=%s %s? -ConfirmSupplierPayment=%s %s? +ConfirmCustomerPayment=Do you confirm this payment input for %s %s? +ConfirmSupplierPayment=Do you confirm this payment input for %s %s? ConfirmValidatePayment=Bu ödənişi təsdiqləmək istədiyinizə əminsiniz? Ödəniş təsdiqləndikdən sonra heç bir dəyişiklik edilə bilməz. ValidateBill=Fakturanı təsdiq edin UnvalidateBill=Fakturanı etibarsız edin @@ -377,7 +377,7 @@ DisabledBecauseReplacedInvoice=Faktura dəyişdirildiyi üçün əməliyyat deak DescTaxAndDividendsArea=Bu sahə xüsusi xərclər üçün edilən bütün ödənişlərin xülasəsini təqdim edir. Burada yalnız müəyyən edilmiş il ərzində ödənişləri olan qeydlər daxil edilir. NbOfPayments=Ödənişlərin sayı SplitDiscount=Endirimi ikiye böl -ConfirmSplitDiscount=%s endirimini bölmək istədiyinizə əminsiniz span class='notranslate'>%s
iki kiçik endirimə çevrilsin? +ConfirmSplitDiscount=Are you sure you want to split this discount of %s %s into two smaller discounts? TypeAmountOfEachNewDiscount=İki hissənin hər biri üçün giriş məbləği: TotalOfTwoDiscountMustEqualsOriginal=İki yeni endirimin cəmi ilkin endirim məbləğinə bərabər olmalıdır. ConfirmRemoveDiscount=Bu endirimi silmək istədiyinizə əminsiniz? @@ -403,7 +403,7 @@ FrequencyPer_d=Hər %s gündən bir FrequencyPer_m=Hər %s aydan bir FrequencyPer_y=Hər %s ildən bir FrequencyUnit=Tezlik vahidi -toolTipFrequency=Nümunələr:
Set 7, Gün verin: hər 7 gündən bir
Set 3, Ay yenisini verin: hər 3 aydan bir faktura +toolTipFrequency=Examples:
Set 7, Day: give a new invoice every 7 days
Set 3, Month: give a new invoice every 3 month NextDateToExecution=Növbəti faktura yaratmaq üçün tarix NextDateToExecutionShort=Növbəti nəsil tarix. DateLastGeneration=Ən son nəslin tarixi @@ -569,9 +569,9 @@ PDFCrabeDescription=Faktura pdf şablon Crabe. Tam faktura şablonu (Sponge şab PDFSpongeDescription=Faktura pdf şablon Sponge. Tam faktura şablonu PDFCrevetteDescription=Faktura pdf şablon Crevette. Vəziyyət fakturaları üçün tam faktura şablonu TerreNumRefModelDesc1=Standart hesab-fakturalar üçün %syymm-nnnn və yy-nin il olduğu kredit qeydləri üçün %syymm-nnnn formatında qaytarın aydır və nnnn fasiləsiz və 0-a qayıtmayan ardıcıl avtomatik artan nömrədir -MarsNumRefModelDesc1=Standart fakturalar üçün %syymm-nnnn, əvəzedici fakturalar üçün %syymm-nnnn, %silkin ödəniş fakturaları üçün yymm-nnnn və yy il, mm ay və nnnn ardıcıl avtomatik olduğu kredit qeydləri üçün %syymm-nnnn fasiləsiz və 0-a qayıtmadan artan nömrə +MarsNumRefModelDesc1=Return number in the format %syymm-nnnn for standard invoices, %syymm-nnnn for replacement invoices, %syymm-nnnn for down payment invoices and %syymm-nnnn for credit notes where yy is year, mm is month and nnnn is a sequential auto-incrementing number with no break and no return to 0 TerreNumRefModelError=$syymm ilə başlayan qanun layihəsi artıq mövcuddur və bu ardıcıllıq modeli ilə uyğun gəlmir. Bu modulu aktivləşdirmək üçün onu silin və ya adını dəyişin. -CactusNumRefModelDesc1=Standart fakturalar üçün %syymm-nnnn, kredit qeydləri üçün %syymm-nnnn və %syymm-nnnn ilkin ödəniş fakturaları üçün burada yy il, mm ay və nnnn fasiləsiz və 0-a qayıtmayan ardıcıl avtomatik artan nömrədir +CactusNumRefModelDesc1=Return number in the format %syymm-nnnn for standard invoices, %syymm-nnnn for credit notes and %syymm-nnnn for down payment invoices where yy is year, mm is month and nnnn is a sequential auto-incrementing number with no break and no return to 0 EarlyClosingReason=Erkən bağlanma səbəbi EarlyClosingComment=Erkən yekun qeyd ##### Types de contacts ##### @@ -613,8 +613,8 @@ TotalSituationInvoice=Ümumi vəziyyət invoiceLineProgressError=Faktura xəttinin gedişatı növbəti faktura xəttindən çox və ya ona bərabər ola bilməz updatePriceNextInvoiceErrorUpdateline=Xəta: faktura xəttində qiyməti yeniləyin: %s ToCreateARecurringInvoice=Bu müqavilə üçün təkrarlanan faktura yaratmaq üçün əvvəlcə bu qaralama fakturanı yaradın, sonra onu faktura şablonuna çevirin və gələcək hesab-fakturaların yaradılması tezliyini müəyyənləşdirin. -ToCreateARecurringInvoiceGene=Gələcək fakturaları müntəzəm və əl ilə yaratmaq üçün %s - b0ecb2ec807f49f49 menyusuna daxil olun. span> - %s. -ToCreateARecurringInvoiceGeneAuto=Əgər belə hesab-fakturaların avtomatik yaradılmasına ehtiyacınız varsa, administratorunuzdan %s
. Qeyd edək ki, hər iki üsul (əllə və avtomatik) təkrarlanma riski olmadan birlikdə istifadə edilə bilər. +ToCreateARecurringInvoiceGene=To generate future invoices regularly and manually, just go on menu %s - %s - %s. +ToCreateARecurringInvoiceGeneAuto=If you need to have such invoices generated automatically, ask your administrator to enable and setup module %s. Note that both methods (manual and automatic) can be used together with no risk of duplication. DeleteRepeatableInvoice=Şablon fakturanı silin ConfirmDeleteRepeatableInvoice=Şablon fakturanı silmək istədiyinizə əminsiniz? CreateOneBillByThird=Üçüncü tərəf üçün bir faktura yaradın (əks halda, hər seçilmiş obyekt üçün bir faktura) diff --git a/htdocs/langs/az_AZ/cashdesk.lang b/htdocs/langs/az_AZ/cashdesk.lang index 79586ae62ba..9c37c192443 100644 --- a/htdocs/langs/az_AZ/cashdesk.lang +++ b/htdocs/langs/az_AZ/cashdesk.lang @@ -97,7 +97,7 @@ ReceiptPrinterMethodDescription=Çox parametrləri olan güclü üsul. Şablonla ByTerminal=Terminalla TakeposNumpadUsePaymentIcon=Numpad-in ödəniş düymələrində mətn əvəzinə ikonadan istifadə edin CashDeskRefNumberingModules=POS satışları üçün nömrələmə modulu -CashDeskGenericMaskCodes6 =
{TN}71f span> etiketi terminal nömrəsini əlavə etmək üçün istifadə olunur +CashDeskGenericMaskCodes6 =
{TN} tag is used to add the terminal number TakeposGroupSameProduct=Eyni məhsulların xətlərini birləşdirin StartAParallelSale=Yeni paralel satışa başlayın SaleStartedAt=Satış %s tarixində başladı @@ -136,7 +136,7 @@ PrintWithoutDetailsLabelDefault=Təfərrüatlar olmadan çapda standart olaraq x PrintWithoutDetails=Təfərrüatlar olmadan çap edin YearNotDefined=İl müəyyən edilməyib TakeposBarcodeRuleToInsertProduct=Məhsul daxil etmək üçün barkod qaydası -TakeposBarcodeRuleToInsertProductDesc=Skan edilmiş barkoddan məhsul arayışı + kəmiyyət çıxarmaq qaydası.
Boşdursa (defolt dəyər), proqram məhsulu tapmaq üçün skan edilmiş tam barkoddan istifadə edəcək.

Müəyyən edilibsə, sintaksis belə olmalıdır:
notranslate ref:NB+qu:NB+qd:NB+digər:NB
haradadır skan edilmiş barkoddan məlumat çıxarmaq üçün istifadə ediləcək simvolların sayı:
refb09a4b78z1f : məhsul arayışı
qu: element (vahidlər) daxil edərkən təyin edin
qdb09a4b739f17f8z>
digərb09a4b739f17f8>ss. +TakeposBarcodeRuleToInsertProductDesc=Rule to extract the product reference + a quantity from a scanned barcode.
If empty (default value), application will use the full barcode scanned to find the product.

If defined, syntax must be:
ref:NB+qu:NB+qd:NB+other:NB
where NB is the number of characters to use to extract data from the scanned barcode with:
ref : product reference
qu : quantity to set when inserting item (units)
qd : quantity to set when inserting item (decimals)
other : others characters AlreadyPrinted=Artıq çap olunub HideCategories=Kateqoriya seçiminin bütün bölməsini gizlədin HideStockOnLine=Onlayn ehtiyatı gizlədin diff --git a/htdocs/langs/az_AZ/companies.lang b/htdocs/langs/az_AZ/companies.lang index 7de663ede6d..84be10890c9 100644 --- a/htdocs/langs/az_AZ/companies.lang +++ b/htdocs/langs/az_AZ/companies.lang @@ -1,107 +1,117 @@ # Dolibarr language file - Source file is en_US - companies -ErrorCompanyNameAlreadyExists=Company name %s already exists. Choose another one. -ErrorSetACountryFirst=Set the country first -SelectThirdParty=Select a third party -ConfirmDeleteCompany=Are you sure you want to delete this company and all related information? -DeleteContact=Delete a contact/address -ConfirmDeleteContact=Are you sure you want to delete this contact and all related information? -MenuNewThirdParty=New Third Party -MenuNewCustomer=New Customer -MenuNewProspect=New Prospect -MenuNewSupplier=New Vendor -MenuNewPrivateIndividual=New private individual -NewCompany=New company (prospect, customer, vendor) -NewThirdParty=New Third Party (prospect, customer, vendor) -CreateDolibarrThirdPartySupplier=Create a third party (vendor) -CreateThirdPartyOnly=Create third party -CreateThirdPartyAndContact=Create a third party + a child contact -ProspectionArea=Prospection area -IdThirdParty=Id third party -IdCompany=Company Id -IdContact=Contact Id -ThirdPartyContacts=Third-party contacts -ThirdPartyContact=Third-party contact/address -Company=Company -CompanyName=Company name -AliasNames=Alias name (commercial, trademark, ...) -AliasNameShort=Alias Name -Companies=Companies -CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price display format in the current language and currency -ThirdPartyName=Third-party name -ThirdPartyEmail=Third-party email -ThirdParty=Third-party -ThirdParties=Third-parties -ThirdPartyProspects=Prospects -ThirdPartyProspectsStats=Prospects -ThirdPartyCustomers=Customers -ThirdPartyCustomersStats=Customers -ThirdPartyCustomersWithIdProf12=Customers with %s or %s -ThirdPartySuppliers=Vendors -ThirdPartyType=Third-party type -Individual=Private individual -ToCreateContactWithSameName=Will automatically create a contact/address with same information as the third party under the third party. In most cases, even if your third party is a physical person, creating a third party alone is enough. -ParentCompany=Parent company -Subsidiaries=Subsidiaries -ReportByMonth=Report per month -ReportByCustomers=Report per customer -ReportByThirdparties=Report per thirdparty -ReportByQuarter=Report per rate -CivilityCode=Civility code -RegisteredOffice=Registered office -Lastname=Last name -Firstname=First name -PostOrFunction=Job position -UserTitle=Title -NatureOfThirdParty=Nature of Third party -NatureOfContact=Nature of Contact -Address=Address -State=State/Province -StateCode=State/Province code -StateShort=State +newSocieteAdded=Əlaqə məlumatlarınız qeydə alınıb. Tezliklə sizinlə əlaqə saxlayacağıq... +ContactUsDesc=Bu forma ilk əlaqə üçün bizə mesaj göndərməyə imkan verir. +ErrorCompanyNameAlreadyExists=Şirkət adı %s artıq mövcuddur. Başqa birini seçin. +ErrorSetACountryFirst=Əvvəlcə ölkəni təyin edin +SelectThirdParty=Üçüncü tərəf seçin +ConfirmDeleteCompany=Bu şirkəti və bütün əlaqəli məlumatları silmək istədiyinizə əminsiniz? +DeleteContact=Kontaktı/ünvanı silin +ConfirmDeleteContact=Bu kontaktı və bütün əlaqəli məlumatları silmək istədiyinizə əminsiniz? +MenuNewThirdParty=Yeni Üçüncü Tərəf +MenuNewCustomer=Yeni müştəri +MenuNewProspect=Yeni Prospekt +MenuNewSupplier=Yeni Satıcı +MenuNewPrivateIndividual=Yeni fərdi şəxs +NewCompany=Yeni şirkət (perspektiv, müştəri, satıcı) +NewThirdParty=Yeni Üçüncü Tərəf (perspektiv, müştəri, satıcı) +CreateDolibarrThirdPartySupplier=Üçüncü tərəf yaradın (satıcı) +CreateThirdPartyOnly=Üçüncü tərəf yaradın +CreateThirdPartyAndContact=Üçüncü tərəf + uşaq kontaktı yaradın +ProspectionArea=Kəşfiyyat sahəsi +IdThirdParty=ID üçüncü tərəf +IdCompany=Şirkət ID +IdContact=Əlaqə nömrəsi +ThirdPartyAddress=Üçüncü tərəf ünvanı +ThirdPartyContacts=Üçüncü tərəf kontaktları +ThirdPartyContact=Üçüncü tərəf əlaqə/ünvanı +Company=Şirkət +CompanyName=Şirkət adı +AliasNames=Alias adı (kommersiya, ticarət nişanı, ...) +AliasNameShort=Alias Adı +Companies=Şirkətlər +CountryIsInEEC=Ölkə Avropa İqtisadi Birliyinin tərkibindədir +PriceFormatInCurrentLanguage=Cari dildə və valyutada qiymət ekran formatı +ThirdPartyName=Üçüncü tərəf adı +ThirdPartyEmail=Üçüncü tərəf e-poçtu +ThirdParty=Üçüncü tərəf +ThirdParties=Üçüncü tərəflər +ThirdPartyProspects=Perspektivlər +ThirdPartyProspectsStats=Perspektivlər +ThirdPartyCustomers=Müştərilər +ThirdPartyCustomersStats=Müştərilər +ThirdPartyCustomersWithIdProf12=%s və ya %s olan müştərilər +ThirdPartySuppliers=Satıcılar +ThirdPartyType=Üçüncü tərəf növü +Individual=Şəxsi fərdi +ToCreateContactWithSameName=Avtomatik olaraq üçüncü tərəf altında üçüncü tərəflə eyni məlumatlarla əlaqə/ünvan yaradacaq. Əksər hallarda, hətta üçüncü tərəfiniz fiziki şəxs olsa belə, yalnız üçüncü tərəf yaratmaq kifayətdir. +ParentCompany=Ana şirkət +Subsidiaries=törəmə şirkətlər +ReportByMonth=Aylıq hesabat +ReportByCustomers=Müştəriyə görə hesabat +ReportByThirdparties=Üçüncü tərəf üçün hesabat +ReportByQuarter=Qiymətə görə hesabat +CivilityCode=Vətəndaşlıq kodu +RegisteredOffice=Qeydiyyatdan keçmiş ofis +Lastname=Soyad +Firstname=Ad +RefEmployee=İşçi arayışı +NationalRegistrationNumber=Milli qeydiyyat nömrəsi +PostOrFunction=İş mövqeyi +UserTitle=Başlıq +NatureOfThirdParty=Üçüncü tərəfin təbiəti +NatureOfContact=Əlaqənin təbiəti +Address=Ünvan +State=Ştat/vilayət +StateId=Dövlət ID +StateCode=Dövlət/vilayət kodu +StateShort=dövlət Region=Region -Region-State=Region - State -Country=Country -CountryCode=Country code -CountryId=Country id -Phone=Phone -PhoneShort=Phone +Region-State=Region - Dövlət +Country=ölkə +CountryCode=Ölkə Kodu +CountryId=Ölkə ID +Phone=Telefon +PhoneShort=Telefon Skype=Skype -Call=Call -Chat=Chat -PhonePro=Bus. phone -PhonePerso=Pers. phone -PhoneMobile=Mobile -No_Email=Refuse bulk emailings -Fax=Fax -Zip=Zip Code -Town=City -Web=Web -Poste= Position -DefaultLang=Default language -VATIsUsed=Sales tax used -VATIsUsedWhenSelling=This defines if this third party includes a sales tax or not when it makes an invoice to its own customers -VATIsNotUsed=Sales tax is not used -CopyAddressFromSoc=Copy address from third-party details -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects -ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor vendor, discounts are not available -PaymentBankAccount=Payment bank account -OverAllProposals=Proposals -OverAllOrders=Orders -OverAllInvoices=Invoices -OverAllSupplierProposals=Price requests +Call=Zəng edin +Chat=Söhbət +PhonePro=avtobus. telefon +PhonePerso=Pers. telefon +PhoneMobile=Mobil +No_Email=Toplu e-poçt göndərişlərindən imtina edin +Fax=Faks +Zip=Poçt kodu +Town=Şəhər +Web=Veb +Poste= Vəzifə +DefaultLang=Defolt dil +VATIsUsed=Satış vergisi istifadə olunur +VATIsUsedWhenSelling=Bu, bu üçüncü tərəfin öz müştərilərinə hesab-faktura təqdim edərkən satış vergisini daxil edib-etmədiyini müəyyən edir +VATIsNotUsed=Satış vergisi istifadə edilmir +VATReverseCharge=ƏDV-nin əks ödənişi +VATReverseChargeByDefault=Defolt olaraq ƏDV-nin əks ödənişi +VATReverseChargeByDefaultDesc=Təchizatçı hesab-fakturasında defolt olaraq ƏDV-nin əks ödənişi istifadə olunur +CopyAddressFromSoc=Ünvanı üçüncü tərəf məlumatlarından kopyalayın +ThirdpartyNotCustomerNotSupplierSoNoRef=Üçüncü tərəf nə müştəri, nə də satıcı, mövcud istinad obyektləri yoxdur +ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Üçüncü tərəf nə müştəri, nə də satıcı, endirimlər mövcud deyil +PaymentBankAccount=Ödəniş bank hesabı +OverAllProposals=Təkliflər +OverAllOrders=Sifarişlər +OverAllInvoices=Fakturalar +OverAllSupplierProposals=Qiymət sorğuları ##### Local Taxes ##### -LocalTax1IsUsed=Use second tax -LocalTax1IsUsedES= RE is used -LocalTax1IsNotUsedES= RE is not used -LocalTax2IsUsed=Use third tax -LocalTax2IsUsedES= IRPF is used -LocalTax2IsNotUsedES= IRPF is not used -WrongCustomerCode=Customer code invalid -WrongSupplierCode=Vendor code invalid -CustomerCodeModel=Customer code model -SupplierCodeModel=Vendor code model -Gencod=Barcode +LocalTax1IsUsed=İkinci vergidən istifadə edin +LocalTax1IsUsedES= RE istifadə olunur +LocalTax1IsNotUsedES= RE istifadə edilmir +LocalTax2IsUsed=Üçüncü vergidən istifadə edin +LocalTax2IsUsedES= IRPF istifadə olunur +LocalTax2IsNotUsedES= IRPF istifadə edilmir +WrongCustomerCode=Müştəri kodu etibarsızdır +WrongSupplierCode=Satıcı kodu etibarsızdır +CustomerCodeModel=Müştəri kodu modeli +SupplierCodeModel=Satıcı kodu modeli +Gencod=Barkod +GencodBuyPrice=Qiymətin barkodu ref ##### Professional ID ##### ProfId1Short=Prof. id 1 ProfId2Short=Prof. id 2 @@ -109,149 +119,165 @@ ProfId3Short=Prof. id 3 ProfId4Short=Prof. id 4 ProfId5Short=Prof. id 5 ProfId6Short=Prof. id 6 -ProfId1=Professional ID 1 -ProfId2=Professional ID 2 -ProfId3=Professional ID 3 -ProfId4=Professional ID 4 -ProfId5=Professional ID 5 -ProfId6=Professional ID 6 -ProfId1AR=Prof Id 1 (CUIT/CUIL) -ProfId2AR=Prof Id 2 (Revenu brutes) +ProfId7Short=Prof. id 7 +ProfId8Short=Prof. id 8 +ProfId9Short=Prof. id 9 +ProfId10Short=Prof. id 10 +ProfId1=Peşəkar ID 1 +ProfId2=Peşəkar şəxsiyyət vəsiqəsi 2 +ProfId3=Peşəkar şəxsiyyət vəsiqəsi 3 +ProfId4=Peşəkar şəxsiyyət vəsiqəsi 4 +ProfId5=Peşəkar şəxsiyyət vəsiqəsi 5 +ProfId6=Peşəkar şəxsiyyət vəsiqəsi 6 +ProfId7=Peşəkar ID 7 +ProfId8=Peşəkar şəxsiyyət vəsiqəsi 8 +ProfId9=Peşəkar ID 9 +ProfId10=Peşəkar ID 10 +ProfId1AR=Prof ID 1 (CUIT/CUIL) +ProfId2AR=Professor Id 2 (Gəlir vəhşiləri) ProfId3AR=- ProfId4AR=- ProfId5AR=- ProfId6AR=- -ProfId1AT=Prof Id 1 (USt.-IdNr) -ProfId2AT=Prof Id 2 (USt.-Nr) -ProfId3AT=Prof Id 3 (Handelsregister-Nr.) +ProfId1AT=Professor Id 1 (USt.-IdNr) +ProfId2AT=Prof ID 2 (ABŞ-Nr) +ProfId3AT=Professor Id 3 (HandelsRegister-Nr.) ProfId4AT=- -ProfId5AT=EORI number +ProfId5AT=EORI nömrəsi ProfId6AT=- -ProfId1AU=Prof Id 1 (ABN) +ProfId1AU=Prof ID 1 (ABN) ProfId2AU=- ProfId3AU=- ProfId4AU=- ProfId5AU=- ProfId6AU=- -ProfId1BE=Prof Id 1 (Professional number) +ProfId1BE=Professor ID 1 (Peşəkar nömrə) ProfId2BE=- ProfId3BE=- ProfId4BE=- -ProfId5BE=EORI number +ProfId5BE=EORI nömrəsi ProfId6BE=- ProfId1BR=- ProfId2BR=IE (Inscricao Estadual) -ProfId3BR=IM (Inscricao Municipal) +ProfId3BR=IM (İnscricao Bələdiyyəsi) ProfId4BR=CPF #ProfId5BR=CNAE #ProfId6BR=INSS -ProfId1CH=UID-Nummer +ProfId1CH=UID-Nömrə ProfId2CH=- -ProfId3CH=Prof Id 1 (Federal number) -ProfId4CH=Prof Id 2 (Commercial Record number) -ProfId5CH=EORI number +ProfId3CH=Prof ID 1 (Federal nömrə) +ProfId4CH=Professor Id 2 (Kommersiya Rekord nömrəsi) +ProfId5CH=EORI nömrəsi ProfId6CH=- -ProfId1CL=Prof Id 1 (R.U.T.) +ProfId1CL=Prof ID 1 (R.U.T.) ProfId2CL=- ProfId3CL=- ProfId4CL=- ProfId5CL=- ProfId6CL=- -ProfId1CM=Id. prof. 1 (Trade Register) -ProfId2CM=Id. prof. 2 (Taxpayer No.) -ProfId3CM=Id. prof. 3 (Decree of creation) -ProfId4CM=- -ProfId5CM=- +ProfId1CM=İd. prof. 1 (Ticarət Reyestri) +ProfId2CM=İd. prof. 2 (Vergi ödəyicisi nömrəsi) +ProfId3CM=İd. prof. 3 (Yaradılış Fərmanı №) +ProfId4CM=İd. prof. 4 (Depozit sertifikatının nömrəsi) +ProfId5CM=İd. prof. 5 (Digərləri) ProfId6CM=- -ProfId1ShortCM=Trade Register -ProfId2ShortCM=Taxpayer No. -ProfId3ShortCM=Decree of creation -ProfId4ShortCM=- -ProfId5ShortCM=- +ProfId1ShortCM=Ticarət reyestri +ProfId2ShortCM=Vergi ödəyicisi nömrəsi +ProfId3ShortCM=Yaradılış fərmanı № +ProfId4ShortCM=Depozit sertifikatının nömrəsi +ProfId5ShortCM=Digərləri ProfId6ShortCM=- -ProfId1CO=Prof Id 1 (R.U.T.) +ProfId1CO=Prof ID 1 (R.U.T.) ProfId2CO=- ProfId3CO=- ProfId4CO=- ProfId5CO=- ProfId6CO=- -ProfId1DE=Prof Id 1 (USt.-IdNr) -ProfId2DE=Prof Id 2 (USt.-Nr) -ProfId3DE=Prof Id 3 (Handelsregister-Nr.) +ProfId1DE=Professor Id 1 (USt.-IdNr) +ProfId2DE=Prof ID 2 (ABŞ-Nr) +ProfId3DE=Professor Id 3 (HandelsRegister-Nr.) ProfId4DE=- -ProfId5DE=EORI number +ProfId5DE=EORI nömrəsi ProfId6DE=- -ProfId1ES=Prof Id 1 (CIF/NIF) -ProfId2ES=Prof Id 2 (Social security number) -ProfId3ES=Prof Id 3 (CNAE) -ProfId4ES=Prof Id 4 (Collegiate number) -ProfId5ES=Prof Id 5 (EORI number) +ProfId1ES=Professor ID 1 (CIF/NIF) +ProfId2ES=Prof ID 2 (Sosial təhlükəsizlik nömrəsi) +ProfId3ES=Professor ID 3 (CNAE) +ProfId4ES=Professor ID 4 (Kollec nömrəsi) +ProfId5ES=Professor ID 5 (EORI nömrəsi) ProfId6ES=- -ProfId1FR=Prof Id 1 (SIREN) -ProfId2FR=Prof Id 2 (SIRET) -ProfId3FR=Prof Id 3 (NAF, old APE) -ProfId4FR=Prof Id 4 (RCS/RM) -ProfId5FR=Prof Id 5 (numéro EORI) +ProfId1FR=Professor ID 1 (SIREN) +ProfId2FR=Professor Id 2 (SIRET) +ProfId3FR=Prof ID 3 (NAF, köhnə APE) +ProfId4FR=Professor ID 4 (RCS/RM) +ProfId5FR=Prof ID 5 (EORI nömrəsi) ProfId6FR=- -ProfId1ShortFR=SIREN +ProfId7FR=- +ProfId8FR=- +ProfId9FR=- +ProfId10FR=- +ProfId1ShortFR=SİREN ProfId2ShortFR=SIRET ProfId3ShortFR=NAF ProfId4ShortFR=RCS ProfId5ShortFR=EORI ProfId6ShortFR=- -ProfId1GB=Registration Number +ProfId7ShortFR=- +ProfId8ShortFR=- +ProfId9ShortFR=- +ProfId10ShortFR=- +ProfId1GB=Qeydiyyat nömrəsi ProfId2GB=- ProfId3GB=SIC ProfId4GB=- ProfId5GB=- ProfId6GB=- -ProfId1HN=Id prof. 1 (RTN) +ProfId1HN=İd prof. 1 (RTN) ProfId2HN=- ProfId3HN=- ProfId4HN=- ProfId5HN=- ProfId6HN=- -ProfId1IN=Prof Id 1 (TIN) -ProfId2IN=Prof Id 2 (PAN) -ProfId3IN=Prof Id 3 (SRVC TAX) -ProfId4IN=Prof Id 4 -ProfId5IN=Prof Id 5 +ProfId1IN=Professor ID 1 (VÖEN) +ProfId2IN=Professor ID 2 (PAN) +ProfId3IN=Prof ID 3 (SRVC TAX) +ProfId4IN=Prof ID 4 +ProfId5IN=Prof ID 5 ProfId6IN=- ProfId1IT=- ProfId2IT=- ProfId3IT=- ProfId4IT=- -ProfId5IT=EORI number +ProfId5IT=EORI nömrəsi ProfId6IT=- -ProfId1LU=Id. prof. 1 (R.C.S. Luxembourg) -ProfId2LU=Id. prof. 2 (Business permit) +ProfId1LU=İd. prof. 1 (R.C.S. Lüksemburq) +ProfId2LU=İd. prof. 2 (Biznes icazəsi) ProfId3LU=- ProfId4LU=- -ProfId5LU=EORI number +ProfId5LU=EORI nömrəsi ProfId6LU=- -ProfId1MA=Id prof. 1 (R.C.) -ProfId2MA=Id prof. 2 (Patente) -ProfId3MA=Id prof. 3 (I.F.) -ProfId4MA=Id prof. 4 (C.N.S.S.) -ProfId5MA=Id prof. 5 (I.C.E.) +ProfId1MA=İd prof. 1 (R.C.) +ProfId2MA=İd prof. 2 (Patent) +ProfId3MA=İd prof. 3 (İ.F.) +ProfId4MA=İd prof. 4 (C.N.S.S.) +ProfId5MA=İd prof. 5 (I.C.E.) ProfId6MA=- -ProfId1MX=Prof Id 1 (R.F.C). -ProfId2MX=Prof Id 2 (R..P. IMSS) -ProfId3MX=Prof Id 3 (Profesional Charter) +ProfId1MX=Professor Id 1 (R.F.C). +ProfId2MX=Professor Id 2 (R..P. IMSS) +ProfId3MX=Prof ID 3 (Peşəkar Nizamnamə) ProfId4MX=- ProfId5MX=- ProfId6MX=- -ProfId1NL=KVK nummer +ProfId1NL=KVK nömrəsi ProfId2NL=- ProfId3NL=- ProfId4NL=Burgerservicenummer (BSN) -ProfId5NL=EORI number +ProfId5NL=EORI nömrəsi ProfId6NL=- -ProfId1PT=Prof Id 1 (NIPC) -ProfId2PT=Prof Id 2 (Social security number) -ProfId3PT=Prof Id 3 (Commercial Record number) -ProfId4PT=Prof Id 4 (Conservatory) -ProfId5PT=Prof Id 5 (EORI number) +ProfId1PT=Professor ID 1 (NIPC) +ProfId2PT=Prof ID 2 (Sosial təhlükəsizlik nömrəsi) +ProfId3PT=Prof ID 3 (Kommersiya Rekord nömrəsi) +ProfId4PT=Professor Id 4 (Konservatoriya) +ProfId5PT=Professor ID 5 (EORI nömrəsi) ProfId6PT=- ProfId1SN=RC ProfId2SN=NINEA @@ -259,237 +285,246 @@ ProfId3SN=- ProfId4SN=- ProfId5SN=- ProfId6SN=- -ProfId1TN=Prof Id 1 (RC) -ProfId2TN=Prof Id 2 (Fiscal matricule) -ProfId3TN=Prof Id 3 (Douane code) -ProfId4TN=Prof Id 4 (BAN) +ProfId1TN=Professor ID 1 (RC) +ProfId2TN=Prof ID 2 (Fiskal matrikul) +ProfId3TN=Prof ID 3 (Douane kodu) +ProfId4TN=Prof ID 4 (BAN) ProfId5TN=- ProfId6TN=- -ProfId1US=Prof Id (FEIN) +ProfId1US=Professor ID (FEIN) ProfId2US=- ProfId3US=- ProfId4US=- ProfId5US=- ProfId6US=- -ProfId1RO=Prof Id 1 (CUI) -ProfId2RO=Prof Id 2 (Nr. Înmatriculare) -ProfId3RO=Prof Id 3 (CAEN) -ProfId4RO=Prof Id 5 (EUID) -ProfId5RO=Prof Id 5 (EORI number) +ProfId1RO=Professor ID 1 (CUI) +ProfId2RO=Professor Id 2 (Nr. Înmatriculare) +ProfId3RO=Professor ID 3 (CAEN) +ProfId4RO=Professor ID 5 (EUID) +ProfId5RO=Professor ID 5 (EORI nömrəsi) ProfId6RO=- -ProfId1RU=Prof Id 1 (OGRN) -ProfId2RU=Prof Id 2 (INN) -ProfId3RU=Prof Id 3 (KPP) -ProfId4RU=Prof Id 4 (OKPO) +ProfId1RU=Prof ID 1 (OGRN) +ProfId2RU=Prof ID 2 (INN) +ProfId3RU=Professor ID 3 (KPP) +ProfId4RU=Professor ID 4 (OKPO) ProfId5RU=- ProfId6RU=- -ProfId1UA=Prof Id 1 (EDRPOU) -ProfId2UA=Prof Id 2 (DRFO) -ProfId3UA=Prof Id 3 (INN) -ProfId4UA=Prof Id 4 (Certificate) -ProfId5UA=Prof Id 5 (RNOKPP) -ProfId6UA=Prof Id 6 (TRDPAU) +ProfId1UA=Professor ID 1 (EDRPOU) +ProfId2UA=Professor ID 2 (DRFO) +ProfId3UA=Prof ID 3 (INN) +ProfId4UA=Prof ID 4 (Sertifikat) +ProfId5UA=Professor ID 5 (RNOKPP) +ProfId6UA=Professor Id 6 (TRDPAU) ProfId1DZ=RC -ProfId2DZ=Art. +ProfId2DZ=İncəsənət. ProfId3DZ=NIF ProfId4DZ=NIS -VATIntra=VAT ID -VATIntraShort=VAT ID -VATIntraSyntaxIsValid=Syntax is valid -VATReturn=VAT return -ProspectCustomer=Prospect / Customer -Prospect=Prospect -CustomerCard=Customer Card -Customer=Customer -CustomerRelativeDiscount=Relative customer discount -SupplierRelativeDiscount=Relative vendor discount -CustomerRelativeDiscountShort=Relative discount -CustomerAbsoluteDiscountShort=Absolute discount -CompanyHasRelativeDiscount=This customer has a default discount of %s%% -CompanyHasNoRelativeDiscount=This customer has no relative discount by default -HasRelativeDiscountFromSupplier=You have a default discount of %s%% from this vendor -HasNoRelativeDiscountFromSupplier=You have no default relative discount from this vendor +VATIntra=ƏDV ID +VATIntraShort=ƏDV ID +VATIntraSyntaxIsValid=Sintaksis etibarlıdır +VATReturn=ƏDV bəyannaməsi +ProspectCustomer=Potensial / Müştəri +Prospect=Prospekt +CustomerCard=Müştəri Kartı +Customer=Müştəri +CustomerRelativeDiscount=Nisbi müştəri endirimi +SupplierRelativeDiscount=Nisbi satıcı endirimi +CustomerRelativeDiscountShort=Nisbi endirim +CustomerAbsoluteDiscountShort=Mütləq endirim +CompanyHasRelativeDiscount=Bu müştərinin defolt endirimi %s%% +CompanyHasNoRelativeDiscount=Bu müştərinin standart olaraq nisbi endirimi yoxdur +HasRelativeDiscountFromSupplier=You have a default discount of %s%% with this vendor +HasNoRelativeDiscountFromSupplier=Bu satıcı ilə standart nisbi endirim yoxdur CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for %s %s CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for %s %s CompanyHasCreditNote=This customer still has credit notes for %s %s -HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this vendor +HasNoAbsoluteDiscountFromSupplier=Bu satıcıdan endirim/kredit yoxdur HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for %s %s from this vendor HasDownPaymentOrCommercialDiscountFromSupplier=You have discounts available (commercial, down payments) for %s %s from this vendor HasCreditNoteFromSupplier=You have credit notes for %s %s from this vendor -CompanyHasNoAbsoluteDiscount=This customer has no discount credit available -CustomerAbsoluteDiscountAllUsers=Absolute customer discounts (granted by all users) -CustomerAbsoluteDiscountMy=Absolute customer discounts (granted by yourself) -SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users) -SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) -DiscountNone=None -Vendor=Vendor -Supplier=Vendor -AddContact=Create contact -AddContactAddress=Create contact/address -EditContact=Edit contact -EditContactAddress=Edit contact/address -Contact=Contact/Address -Contacts=Contacts/Addresses -ContactId=Contact id -ContactsAddresses=Contacts/Addresses -FromContactName=Name: -NoContactDefinedForThirdParty=No contact defined for this third party -NoContactDefined=No contact defined -DefaultContact=Default contact/address -ContactByDefaultFor=Default contact/address for -AddThirdParty=Create third party -DeleteACompany=Delete a company -PersonalInformations=Personal data -AccountancyCode=Accounting account -CustomerCode=Customer Code -SupplierCode=Vendor Code -CustomerCodeShort=Customer Code -SupplierCodeShort=Vendor Code -CustomerCodeDesc=Customer Code, unique for all customers -SupplierCodeDesc=Vendor Code, unique for all vendors -RequiredIfCustomer=Required if third party is a customer or prospect -RequiredIfSupplier=Required if third party is a vendor -ValidityControledByModule=Validity controlled by the module -ThisIsModuleRules=Rules for this module -ProspectToContact=Prospect to contact -CompanyDeleted=Company "%s" deleted from database. -ListOfContacts=List of contacts/addresses -ListOfContactsAddresses=List of contacts/addresses -ListOfThirdParties=List of Third Parties -ShowCompany=Third Party -ShowContact=Contact-Address -ContactsAllShort=All (No filter) -ContactType=Contact type -ContactForOrders=Order's contact -ContactForOrdersOrShipments=Order's or shipment's contact -ContactForProposals=Proposal's contact -ContactForContracts=Contract's contact -ContactForInvoices=Invoice's contact -NoContactForAnyOrder=This contact is not a contact for any order -NoContactForAnyOrderOrShipments=This contact is not a contact for any order or shipment -NoContactForAnyProposal=This contact is not a contact for any commercial proposal -NoContactForAnyContract=This contact is not a contact for any contract -NoContactForAnyInvoice=This contact is not a contact for any invoice -NewContact=New contact -NewContactAddress=New Contact/Address -MyContacts=My contacts -Capital=Capital -CapitalOf=Capital of %s -EditCompany=Edit company -ThisUserIsNot=This user is not a prospect, customer or vendor -VATIntraCheck=Check -VATIntraCheckDesc=The VAT ID must include the country prefix. The link %s uses the European VAT checker service (VIES) which requires internet access from the Dolibarr server. -VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do -VATIntraCheckableOnEUSite=Check the intra-Community VAT ID on the European Commission website -VATIntraManualCheck=You can also check manually on the European Commission website %s -ErrorVATCheckMS_UNAVAILABLE=Check not possible. Check service is not provided by the member state (%s). -NorProspectNorCustomer=Not prospect, nor customer -JuridicalStatus=Business entity type -Workforce=Workforce -Staff=Employees -ProspectLevelShort=Potential -ProspectLevel=Prospect potential -ContactPrivate=Private -ContactPublic=Shared -ContactVisibility=Visibility -ContactOthers=Other -OthersNotLinkedToThirdParty=Others, not linked to a third party -ProspectStatus=Prospect status -PL_NONE=None -PL_UNKNOWN=Unknown -PL_LOW=Low -PL_MEDIUM=Medium -PL_HIGH=High +CompanyHasNoAbsoluteDiscount=Bu müştərinin endirimli krediti yoxdur +CustomerAbsoluteDiscountAllUsers=Mütləq müştəri endirimləri (bütün istifadəçilər tərəfindən verilir) +CustomerAbsoluteDiscountMy=Mütləq müştəri endirimləri (özünüz tərəfindən verilir) +SupplierAbsoluteDiscountAllUsers=Mütləq satıcı endirimləri (bütün istifadəçilər tərəfindən daxil edilir) +SupplierAbsoluteDiscountMy=Mütləq satıcı endirimləri (özünüz daxil edirsiniz) +DiscountNone=Heç biri +Vendor=Satıcı +Supplier=Satıcı +AddContact=Əlaqə yaradın +AddContactAddress=Əlaqə/ünvan yaradın +EditContact=Kontaktı redaktə edin +EditContactAddress=Əlaqəni/ünvanı redaktə edin +Contact=Əlaqə ünvanı +Contacts=Əlaqələr/Ünvanlar +ContactId=Əlaqə id +ContactsAddresses=Əlaqələr/Ünvanlar +FromContactName=Adı: +NoContactDefinedForThirdParty=Bu üçüncü tərəf üçün heç bir əlaqə müəyyən edilməmişdir +NoContactDefined=Kontakt təyin olunmayıb +DefaultContact=Defolt əlaqə/ünvan +ContactByDefaultFor=üçün defolt əlaqə/ünvan +AddThirdParty=Üçüncü tərəf yaradın +DeleteACompany=Şirkəti silin +PersonalInformations=Şəxsi məlumat +AccountancyCode=Mühasibat hesabı +CustomerCode=Müştəri Kodu +SupplierCode=Satıcı kodu +CustomerCodeShort=Müştəri Kodu +SupplierCodeShort=Satıcı kodu +CustomerCodeDesc=Bütün müştərilər üçün unikal olan Müştəri Kodu +SupplierCodeDesc=Satıcı Kodu, bütün satıcılar üçün unikaldır +RequiredIfCustomer=Üçüncü tərəf müştəri və ya perspektivdirsə, tələb olunur +RequiredIfSupplier=Üçüncü tərəf satıcı olduqda tələb olunur +ValidityControledByModule=Etibarlılıq modul tərəfindən idarə olunur +ThisIsModuleRules=Bu modul üçün qaydalar +ProspectToContact=Əlaqə üçün perspektiv +CompanyDeleted="%s" şirkəti verilənlər bazasından silindi. +ListOfContacts=Əlaqələrin/ünvanların siyahısı +ListOfContactsAddresses=Əlaqələrin/ünvanların siyahısı +ListOfThirdParties=Üçüncü Tərəflərin Siyahısı +ShowCompany=Üçüncü Tərəf +ShowContact=Əlaqə ünvanı +ContactsAllShort=Hamısı (filtr yoxdur) +ContactType=Əlaqə rolu +ContactForOrders=Sifarişlə əlaqə +ContactForOrdersOrShipments=Sifarişin və ya göndərişin əlaqəsi +ContactForProposals=Təklifin əlaqəsi +ContactForContracts=Müqavilə ilə əlaqə +ContactForInvoices=Faktura ilə əlaqə +NoContactForAnyOrder=Bu əlaqə hər hansı sifariş üçün əlaqə deyil +NoContactForAnyOrderOrShipments=Bu əlaqə hər hansı bir sifariş və ya göndərmə üçün əlaqə deyil +NoContactForAnyProposal=Bu əlaqə hər hansı kommersiya təklifi üçün əlaqə deyil +NoContactForAnyContract=Bu əlaqə hər hansı bir müqavilə üçün əlaqə deyil +NoContactForAnyInvoice=Bu kontakt hər hansı faktura üçün əlaqə deyil +NewContact=Yeni əlaqə +NewContactAddress=Yeni Əlaqə/Ünvan +MyContacts=Əlaqələrim +Capital=Kapital +CapitalOf=%s-ın paytaxtı +EditCompany=Şirkəti redaktə edin +ThisUserIsNot=Bu istifadəçi perspektiv, müştəri və ya satıcı deyil +VATIntraCheck=Yoxlayın +VATIntraCheckDesc=ƏDV ID-sinə ölkə prefiksi daxil edilməlidir. %s linki Avropa ƏDV yoxlayıcı xidmətindən istifadə edir (VIES) Dolibarr serverindən internetə çıxış tələb edir. +VATIntraCheckURL=https://ec.europa.eu/taxation_customs/vies/#/vat-validation +VATIntraCheckableOnEUSite=Avropa Komissiyasının saytında İcmadaxili ƏDV ID-sini yoxlayın +VATIntraManualCheck=Siz həmçinin Avropa Komissiyasının internet saytında əl ilə yoxlaya bilərsiniz %s +ErrorVATCheckMS_UNAVAILABLE=Yoxlamaq mümkün deyil. Çek xidməti üzv dövlət tərəfindən təmin edilmir (%s). +NorProspectNorCustomer=Nə perspektiv, nə də müştəri +JuridicalStatus=Təsərrüfat subyektinin növü +Workforce=İşçi qüvvəsi +Staff=İşçilər +ProspectLevelShort=Potensial +ProspectLevel=Perspektiv potensialı +ContactPrivate=Şəxsi +ContactPublic=Paylaşıldı +ContactVisibility=Görünüş +ContactOthers=Digər +OthersNotLinkedToThirdParty=Üçüncü tərəflə əlaqəli olmayan digərləri +ProspectStatus=Perspektiv statusu +PL_NONE=Heç biri +PL_UNKNOWN=Naməlum +PL_LOW=Aşağı +PL_MEDIUM=Orta +PL_HIGH=Yüksək TE_UNKNOWN=- -TE_STARTUP=Startup -TE_GROUP=Large company -TE_MEDIUM=Medium company -TE_ADMIN=Governmental -TE_SMALL=Small company -TE_RETAIL=Retailer -TE_WHOLE=Wholesaler -TE_PRIVATE=Private individual -TE_OTHER=Other -StatusProspect-1=Do not contact -StatusProspect0=Never contacted -StatusProspect1=To be contacted -StatusProspect2=Contact in process -StatusProspect3=Contact done -ChangeDoNotContact=Change status to 'Do not contact' -ChangeNeverContacted=Change status to 'Never contacted' -ChangeToContact=Change status to 'To be contacted' -ChangeContactInProcess=Change status to 'Contact in process' -ChangeContactDone=Change status to 'Contact done' -ProspectsByStatus=Prospects by status -NoParentCompany=None -ExportCardToFormat=Export card to format -ContactNotLinkedToCompany=Contact not linked to any third party -DolibarrLogin=Dolibarr login -NoDolibarrAccess=No Dolibarr access -ExportDataset_company_1=Third-parties (companies/foundations/physical people) and their properties -ExportDataset_company_2=Contacts and their properties -ImportDataset_company_1=Third-parties and their properties -ImportDataset_company_2=Third-parties additional contacts/addresses and attributes -ImportDataset_company_3=Third-parties Bank accounts -ImportDataset_company_4=Third-parties Sales representatives (assign sales representatives/users to companies) -PriceLevel=Price Level -PriceLevelLabels=Price Level Labels -DeliveryAddress=Delivery address -AddAddress=Add address -SupplierCategory=Vendor category -JuridicalStatus200=Independent -DeleteFile=Delete file -ConfirmDeleteFile=Are you sure you want to delete this file? -AllocateCommercial=Assigned to sales representative -Organization=Organization -FiscalYearInformation=Fiscal Year -FiscalMonthStart=Starting month of the fiscal year -SocialNetworksInformation=Social networks +TE_STARTUP=Başlamaq +TE_GROUP=Böyük şirkət +TE_MEDIUM=Orta şirkət +TE_ADMIN=Hökumət +TE_SMALL=Kiçik şirkət +TE_RETAIL=Pərakəndə satıcı +TE_WHOLE=Topdan satıcı +TE_PRIVATE=Şəxsi fərdi +TE_OTHER=Digər +StatusProspect-1=Əlaqə saxlamayın +StatusProspect0=Heç vaxt əlaqə saxlamayıb +StatusProspect1=Əlaqə üçün +StatusProspect2=Əlaqə prosesdədir +StatusProspect3=Əlaqə tamamlandı +ChangeDoNotContact=Vəziyyəti "Əlaqə saxlama" olaraq dəyişdirin +ChangeNeverContacted=Vəziyyəti "Heç vaxt əlaqə saxlamadım" olaraq dəyişdirin +ChangeToContact=Vəziyyəti "Əlaqə üçün" olaraq dəyişdirin +ChangeContactInProcess=Vəziyyəti "Əlaqə prosesində" olaraq dəyişdirin +ChangeContactDone=Vəziyyəti "Əlaqə tamamlandı" olaraq dəyişdirin +ProspectsByStatus=Status üzrə perspektivlər +NoParentCompany=Heç biri +ExportCardToFormat=Kartı formata ixrac edin +ContactNotLinkedToCompany=Heç bir üçüncü tərəflə əlaqəsi olmayan əlaqə +DolibarrLogin=Dolibarr giriş +NoDolibarrAccess=Dolibarr girişi yoxdur +ExportDataset_company_1=Üçüncü tərəflər (şirkətlər/fondlar/fiziki şəxslər) və onların xassələri +ExportDataset_company_2=Kontaktlar və onların xüsusiyyətləri +ImportDataset_company_1=Üçüncü tərəflər və onların xassələri +ImportDataset_company_2=Üçüncü tərəflərin əlavə kontaktları/ünvanları və atributları +ImportDataset_company_3=Üçüncü tərəflərin bank hesabları +ImportDataset_company_4=Üçüncü tərəflərin Satış nümayəndələri (şirkətlərə satış nümayəndələri/istifadəçiləri təyin edin) +PriceLevel=Qiymət Səviyyəsi +PriceLevelLabels=Qiymət Səviyyəsi Etiketləri +DeliveryAddress=Çatdırılma ünvanı +AddAddress=Ünvan əlavə edin +SupplierCategory=Satıcı kateqoriyası +JuridicalStatus200=Müstəqil +DeleteFile=Faylı silin +ConfirmDeleteFile=Bu faylı silmək istədiyinizə əminsiniz %s? +AllocateCommercial=Satış nümayəndəsinə həvalə olunub +Organization=Təşkilat +FiscalYearInformation=Büdcə ili, Maliyyə ili +FiscalMonthStart=Maliyyə ilinin başlanğıc ayı +SocialNetworksInformation=Sosial şəbəkələr SocialNetworksFacebookURL=Facebook URL SocialNetworksTwitterURL=Twitter URL SocialNetworksLinkedinURL=Linkedin URL SocialNetworksInstagramURL=Instagram URL SocialNetworksYoutubeURL=Youtube URL SocialNetworksGithubURL=Github URL -YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification. -YouMustCreateContactFirst=To be able to add email notifications, you must first define contacts with valid emails for the third party -ListSuppliersShort=List of Vendors -ListProspectsShort=List of Prospects -ListCustomersShort=List of Customers -ThirdPartiesArea=Third Parties/Contacts -LastModifiedThirdParties=Latest %s Third Parties which were modified -UniqueThirdParties=Total number of Third Parties -InActivity=Open -ActivityCeased=Closed -ThirdPartyIsClosed=Third party is closed -ProductsIntoElements=List of products/services mapped to %s -CurrentOutstandingBill=Current outstanding bill -OutstandingBill=Max. for outstanding bill -OutstandingBillReached=Max. for outstanding bill reached -OrderMinAmount=Minimum amount for order -MonkeyNumRefModelDesc=Return a number in the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequencial auto-incrementing number with no break and no return to 0. -LeopardNumRefModelDesc=The code is free. This code can be modified at any time. -ManagingDirectors=Manager(s) name (CEO, director, president...) -MergeOriginThirdparty=Duplicate third party (third party you want to delete) -MergeThirdparties=Merge third parties -ConfirmMergeThirdparties=Are you sure you want to merge the chosen third party with the current one? All linked objects (invoices, orders, ...) will be moved to the current third party, after which the chosen third party will be deleted. -ThirdpartiesMergeSuccess=Third parties have been merged -SaleRepresentativeLogin=Login of sales representative -SaleRepresentativeFirstname=First name of sales representative -SaleRepresentativeLastname=Last name of sales representative -ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted. -NewCustomerSupplierCodeProposed=Customer or Vendor code already used, a new code is suggested -KeepEmptyIfGenericAddress=Keep this field empty if this address is a generic address +YouMustAssignUserMailFirst=E-poçt bildirişi əlavə edə bilməmişdən əvvəl bu istifadəçi üçün e-poçt yaratmalısınız. +YouMustCreateContactFirst=E-poçt bildirişləri əlavə etmək üçün ilk növbədə üçüncü tərəf üçün etibarlı e-poçtları olan kontaktları təyin etməlisiniz +ListSuppliersShort=Satıcıların siyahısı +ListProspectsShort=Perspektivlərin Siyahısı +ListCustomersShort=Müştərilərin Siyahısı +ThirdPartiesArea=Üçüncü Tərəflər/Əlaqələr +LastModifiedThirdParties=Dəyişdirilmiş ən son %s Üçüncü Tərəflər +UniqueThirdParties=Üçüncü Tərəflərin ümumi sayı +InActivity=Açıq +ActivityCeased=Bağlı +ThirdPartyIsClosed=Üçüncü tərəf bağlıdır +ProductsIntoElements=%s ilə əlaqəli məhsul/xidmətlərin siyahısı +CurrentOutstandingBill=Cari ödənilməmiş qanun layihəsi +OutstandingBill=Maks. ödənilməmiş hesab üçün +OutstandingBillReached=Maks. ödənilməmiş qanun layihəsinə çatdı +OrderMinAmount=Sifariş üçün minimum məbləğ +MonkeyNumRefModelDesc=Müştəri kodu üçün %syymm-nnnn və yy olduğu satıcı kodu üçün %syymm-nnnn formatında nömrə qaytarın il, mm aydır və nnnn fasiləsiz və 0-a qayıtmayan ardıcıl avtomatik artan nömrədir. +LeopardNumRefModelDesc=Kod pulsuzdur. Bu kod istənilən vaxt dəyişdirilə bilər. +ManagingDirectors=Menecer(lər)in adı (baş direktor, direktor, prezident...) +MergeOriginThirdparty=Dublikat üçüncü tərəf (silmək istədiyiniz üçüncü tərəf) +MergeThirdparties=Üçüncü tərəfləri birləşdirin +ConfirmMergeThirdparties=Seçilmiş üçüncü tərəfi indiki tərəflə birləşdirmək istədiyinizə əminsiniz? Bütün əlaqəli obyektlər (qaimə-fakturalar, sifarişlər, ...) cari üçüncü tərəfə köçürüləcək, bundan sonra seçilmiş üçüncü tərəf silinəcək. +ThirdpartiesMergeSuccess=Üçüncü tərəflər birləşdirilib +SaleRepresentativeLogin=Satış nümayəndəsinin girişi +SaleRepresentativeFirstname=Satış nümayəndəsinin adı +SaleRepresentativeLastname=Satış nümayəndəsinin soyadı +ErrorThirdpartiesMerge=Üçüncü tərəfləri silərkən xəta baş verdi. Zəhmət olmasa jurnalı yoxlayın. Dəyişikliklər geri qaytarıldı. +NewCustomerSupplierCodeProposed=Müştəri və ya Satıcı kodu artıq istifadə olunub, yeni kod təklif olunur +KeepEmptyIfGenericAddress=Bu ünvan ümumi ünvandırsa, bu sahəni boş saxlayın #Imports -PaymentTypeCustomer=Payment Type - Customer -PaymentTermsCustomer=Payment Terms - Customer -PaymentTypeSupplier=Payment Type - Vendor -PaymentTermsSupplier=Payment Term - Vendor -PaymentTypeBoth=Payment Type - Customer and Vendor -MulticurrencyUsed=Use Multicurrency -MulticurrencyCurrency=Currency -InEEC=Europe (EEC) -RestOfEurope=Rest of Europe (EEC) -OutOfEurope=Out of Europe (EEC) -CurrentOutstandingBillLate=Current outstanding bill late -BecarefullChangeThirdpartyBeforeAddProductToInvoice=Be carefull, depending on your product price settings, you should change thirdparty before adding product to POS. +PaymentTypeCustomer=Ödəniş növü - Müştəri +PaymentTermsCustomer=Ödəniş şərtləri - Müştəri +PaymentTypeSupplier=Ödəniş növü - Satıcı +PaymentTermsSupplier=Ödəniş müddəti - Satıcı +PaymentTypeBoth=Ödəniş növü - Müştəri və Satıcı +MulticurrencyUsed=Multivalyutadan istifadə edin +MulticurrencyCurrency=Valyuta +InEEC=Avropa (AET) +RestOfEurope=Qalan Avropa (AET) +OutOfEurope=Avropadan kənar (AET) +CurrentOutstandingBillLate=Cari ödənilməmiş qanun layihəsi gecdir +BecarefullChangeThirdpartyBeforeAddProductToInvoice=Ehtiyatlı olun, məhsulun qiymət parametrlərindən asılı olaraq, məhsulu POS-a əlavə etməzdən əvvəl üçüncü tərəfi dəyişdirməlisiniz. +EmailAlreadyExistsPleaseRewriteYourCompanyName=e-poçt artıq mövcuddur, lütfən şirkət adınızı yenidən yazın +TwoRecordsOfCompanyName=bu şirkət üçün birdən çox qeyd var, tərəfdaşlıq sorğunuzu tamamlamaq üçün bizimlə əlaqə saxlayın +CompanySection=Şirkət bölməsi +ShowSocialNetworks=Sosial şəbəkələri göstərin +HideSocialNetworks=Sosial şəbəkələri gizlədin +ExternalSystemID=Xarici sistem identifikatoru +IDOfPaymentInAnExternalSystem=Xarici sistemə ödəniş rejiminin ID-si (Stripe, Paypal, ... kimi) +AADEWebserviceCredentials=AADE Veb Xidməti Etibarnamələri +ThirdPartyMustBeACustomerToCreateBANOnStripe=Stripe tərəfində bank məlumatının yaradılmasına icazə vermək üçün üçüncü tərəf müştəri olmalıdır diff --git a/htdocs/langs/az_AZ/compta.lang b/htdocs/langs/az_AZ/compta.lang index 200ef49d173..2925e30017d 100644 --- a/htdocs/langs/az_AZ/compta.lang +++ b/htdocs/langs/az_AZ/compta.lang @@ -165,20 +165,20 @@ CalcModeEngagement=Məlum qeydə alınmış ödənişlərin təhlili CalcModePayment=Məlum qeydə alınmış ödənişlərin təhlili CalcModeBookkeeping=Mühasibat uçotu cədvəlində jurnallaşdırılmış məlumatların təhlili. CalcModeNoBookKeeping=Onlar hələ Ledger-də uçota alınmasa belə -CalcModeLT1= Rejim %sMüştəri fakturaları üzrə RE - təchizatçı fakturalarıb0ecb2ec87f49fzfz0 ='notranslate'>
-CalcModeLT1Debt=Müştəri fakturalarında %sRE rejimi%s
+CalcModeLT1= Mode %sRE on customer invoices - suppliers invoices%s +CalcModeLT1Debt=Mode %sRE on customer invoices%s CalcModeLT1Rec= Rejim %stəchizatçı fakturaları üzrə RE%s -CalcModeLT2= Rejim %sMüştəri fakturaları üzrə IRPF - təchizatçı fakturalarıb0ecb2ec87f49f +CalcModeLT2= Mode %sIRPF on customer invoices - suppliers invoices%s CalcModeLT2Debt=Rejim %sMüştəri fakturalarında IRPF%s -CalcModeLT2Rec= Rejim %sTəchizatçı fakturaları üzrə IRPF%s='notranslate '> +CalcModeLT2Rec= Mode %sIRPF on suppliers invoices%s AnnualSummaryDueDebtMode=Gəlir və xərclər balansı, illik xülasə AnnualSummaryInputOutputMode=Gəlir və xərclər balansı, illik xülasə AnnualByCompanies=Əvvəlcədən müəyyən edilmiş hesab qrupları üzrə gəlir və xərclərin balansı -AnnualByCompaniesDueDebtMode=Gəlir və xərclər balansı, əvvəlcədən müəyyən edilmiş qruplar üzrə təfərrüat, rejim %sİddialar-Borclar80ec dedi Öhdəlik uçotu. -AnnualByCompaniesInputOutputMode=Gəlir və xərclər balansı, əvvəlcədən müəyyən edilmiş qruplar üzrə təfərrüat, rejim %sGəlir-Xərclər dedi: nağd uçotu. -SeeReportInInputOutputMode=%södənişlərin təhlilinə baxın%s Mühasibat Kitabı cədvəli əsasında hesabat üçün notranslate'> +SeeReportInBookkeepingMode=See %sanalysis of bookkeeping ledger table%s for a report based on Bookkeeping Ledger table RulesAmountWithTaxIncluded=- Göstərilən məbləğlər bütün vergilər daxildir RulesAmountWithTaxExcluded=- Göstərilən fakturaların məbləğləri bütün vergilər istisna olmaqla RulesResultDue=- Buraya bütün hesab-fakturalar, xərclər, ƏDV, ianələr, maaşlar, onların ödənilib-ödənilməməsindən asılı olmayaraq daxildir.
- O, fakturaların hesablaşma tarixinə və ödəmə tarixinə əsaslanır. xərclər və ya vergi ödənişləri. Əmək haqqı üçün müddətin bitmə tarixindən istifadə olunur. diff --git a/htdocs/langs/az_AZ/cron.lang b/htdocs/langs/az_AZ/cron.lang index 4fd2220dea6..1d0d57a5624 100644 --- a/htdocs/langs/az_AZ/cron.lang +++ b/htdocs/langs/az_AZ/cron.lang @@ -1,91 +1,100 @@ # Dolibarr language file - Source file is en_US - cron -# About page -# Right -Permission23101 = Read Scheduled job -Permission23102 = Create/update Scheduled job -Permission23103 = Delete Scheduled job -Permission23104 = Execute Scheduled job +# Permissions +Permission23101 = Planlaşdırılmış işi oxuyun +Permission23102 = Planlaşdırılmış işi yaradın/yeniləyin +Permission23103 = Planlaşdırılmış işi silin +Permission23104 = Planlaşdırılmış işi yerinə yetirin # Admin -CronSetup=Scheduled job management setup -URLToLaunchCronJobs=URL to check and launch qualified cron jobs from a browser -OrToLaunchASpecificJob=Or to check and launch a specific job from a browser -KeyForCronAccess=Security key for URL to launch cron jobs -FileToLaunchCronJobs=Command line to check and launch qualified cron jobs -CronExplainHowToRunUnix=On Unix environment you should use the following crontab entry to run the command line each 5 minutes -CronExplainHowToRunWin=On Microsoft(tm) Windows environment you can use Scheduled Task tools to run the command line each 5 minutes -CronMethodDoesNotExists=Class %s does not contains any method %s -CronMethodNotAllowed=Method %s of class %s is in blacklist of forbidden methods -CronJobDefDesc=Cron job profiles are defined into the module descriptor file. When module is activated, they are loaded and available so you can administer the jobs from the admin tools menu %s. -CronJobProfiles=List of predefined cron job profiles +CronSetup=Planlaşdırılmış işin idarə edilməsinin qurulması +URLToLaunchCronJobs=Brauzerdən ixtisaslı cron işlərini yoxlamaq və işə salmaq üçün URL +OrToLaunchASpecificJob=Və ya brauzerdən müəyyən bir işi yoxlamaq və işə salmaq üçün +KeyForCronAccess=Cron işlərini işə salmaq üçün URL üçün təhlükəsizlik açarı +FileToLaunchCronJobs=Keyfiyyətli cron işlərini yoxlamaq və işə salmaq üçün komanda xətti +CronExplainHowToRunUnix=Unix mühitində hər 5 dəqiqədən bir komanda xəttini işə salmaq üçün aşağıdakı crontab girişindən istifadə etməlisiniz +CronExplainHowToRunWin=Microsoft(tm) Windows mühitində hər 5 dəqiqədən bir əmr xəttini işə salmaq üçün Planlaşdırılmış Tapşırıq alətlərindən istifadə edə bilərsiniz +CronMethodDoesNotExists=%s sinfində heç bir metod yoxdur %s +CronMethodNotAllowed=%s sinfinin %s metodu qadağan olunmuş metodların blok siyahısındadır +CronJobDefDesc=Cron iş profilləri modul deskriptor faylında müəyyən edilir. Modul aktivləşdirildikdə, onlar yüklənir və əlçatan olur ki, siz %s admin alətləri menyusundan işləri idarə edə bilərsiniz. +CronJobProfiles=Əvvəlcədən təyin edilmiş cron iş profillərinin siyahısı # Menu -EnabledAndDisabled=Enabled and disabled +EnabledAndDisabled=Aktiv və qeyri-aktiv # Page list -CronLastOutput=Latest run output -CronLastResult=Latest result code -CronCommand=Command -CronList=Scheduled jobs -CronDelete=Delete scheduled jobs -CronConfirmDelete=Are you sure you want to delete these scheduled jobs? -CronExecute=Launch scheduled job -CronConfirmExecute=Are you sure you want to execute these scheduled jobs now? -CronInfo=Scheduled job module allows to schedule jobs to execute them automatically. Jobs can also be started manually. -CronTask=Job -CronNone=None -CronDtStart=Not before -CronDtEnd=Not after -CronDtNextLaunch=Next execution -CronDtLastLaunch=Start date of latest execution -CronDtLastResult=End date of latest execution -CronFrequency=Frequency -CronClass=Class -CronMethod=Method -CronModule=Module -CronNoJobs=No jobs registered -CronPriority=Priority -CronLabel=Label -CronNbRun=Number of launches -CronMaxRun=Maximum number of launches -CronEach=Every -JobFinished=Job launched and finished -Scheduled=Scheduled +CronLastOutput=Ən son çıxış çıxışı +CronLastResult=Ən son nəticə kodu +CronCommand=Əmr +CronList=Planlaşdırılmış işlər +CronDelete=Planlaşdırılmış işləri silin +CronConfirmDelete=Bu planlaşdırılan işləri silmək istədiyinizə əminsiniz? +CronExecute=İndi işə salın +CronConfirmExecute=Bu planlaşdırılan işləri indi yerinə yetirmək istədiyinizə əminsiniz? +CronInfo=Planlaşdırılmış iş modulu işlərin avtomatik yerinə yetirilməsini planlaşdırmağa imkan verir. İşlərə əl ilə də başlamaq olar. +CronTask=İş +CronNone=Heç biri +CronDtStart=Əvvəl yox +CronDtEnd=Sonra yox +CronDtNextLaunch=Növbəti icra +CronDtLastLaunch=Ən son icranın başlama tarixi +CronDtLastResult=Ən son icranın bitmə tarixi +CronFrequency=Tezlik +CronClass=Sinif +CronMethod=Metod +CronModule=Modul +CronNoJobs=Heç bir iş qeydə alınmayıb +CronPriority=Prioritet +CronLabel=Etiket +CronNbRun=Başlama sayı +CronMaxRun=Maksimum buraxılış sayı +CronEach=Hər +JobFinished=İş başladı və bitdi +Scheduled=Planlaşdırılıb #Page card -CronAdd= Add jobs -CronEvery=Execute job each -CronObject=Instance/Object to create -CronArgs=Parameters -CronSaveSucess=Save successfully -CronNote=Comment -CronFieldMandatory=Fields %s is mandatory -CronErrEndDateStartDt=End date cannot be before start date -StatusAtInstall=Status at module installation -CronStatusActiveBtn=Schedule -CronStatusInactiveBtn=Disable -CronTaskInactive=This job is disabled (not scheduled) -CronId=Id -CronClassFile=Filename with class -CronModuleHelp=Name of Dolibarr module directory (also work with external Dolibarr module).
For example to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for module is
product -CronClassFileHelp=The relative path and file name to load (path is relative to web server root directory).
For example to call the fetch method of Dolibarr Product object htdocs/product/class/product.class.php, the value for class file name is
product/class/product.class.php +CronAdd= İş əlavə edin +CronEvery=Hər bir işi yerinə yetirin +CronObject=Yaratmaq üçün Nümunə/Obyekt +CronArgs=Parametrlər +CronSaveSucess=Uğurla yadda saxlayın +CronNote=Şərh +CronFieldMandatory=%s sahələri məcburidir +CronErrEndDateStartDt=Bitmə tarixi başlanğıc tarixindən əvvəl ola bilməz +StatusAtInstall=Modulun quraşdırılmasında vəziyyət +CronStatusActiveBtn=Planlaşdırmanı aktivləşdirin +CronStatusInactiveBtn=Deaktiv edin +CronTaskInactive=Bu iş deaktiv edilib (planlaşdırılmayıb) +CronId=İd +CronClassFile=Sinif ilə fayl adı +CronModuleHelp=Dolibarr modul kataloqunun adı (həmçinin xarici Dolibarr modulu ilə işləyir).
Məsələn, Dolibarr Məhsul obyektinin /htdocs/məhsulunun gətirmə metoduna zəng etmək üçünb0aacaa80d /class/product.class.php, modul üçün dəyər
məhsul +CronClassFileHelp=Yüklənəcək nisbi yol və fayl adı (yol veb serverin kök kataloquna nisbətəndir).
Məsələn, Dolibarr Məhsul obyektinin gətirmə metoduna zəng etmək üçün htdocs/product/class/product.class.php, sinif fayl adı üçün dəyər
product/class/product/class .class.php CronObjectHelp=The object name to load.
For example to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for class file name is
Product -CronMethodHelp=The object method to launch.
For example to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for method is
fetch -CronArgsHelp=The method arguments.
For example to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for paramters can be
0, ProductRef -CronCommandHelp=The system command line to execute. -CronCreateJob=Create new Scheduled Job +CronMethodHelp=Başlamaq üçün obyekt metodu.
Məsələn, Dolibarr Məhsul obyektinin /htdocs/product/class/product.class.php gətirmə metoduna zəng etmək üçün, metodun dəyəridir.
getch +CronArgsHelp=The method arguments.
For example to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for parameters can be
0, ProductRef +CronCommandHelp=İcra etmək üçün sistem əmr xətti. +CronCreateJob=Yeni Planlaşdırılmış İş yaradın CronFrom=From # Info # Common -CronType=Job type -CronType_method=Call method of a PHP Class -CronType_command=Shell command -CronCannotLoadClass=Cannot load class file %s (to use class %s) -CronCannotLoadObject=Class file %s was loaded, but object %s was not found into it -UseMenuModuleToolsToAddCronJobs=Go into menu "Home - Admin tools - Scheduled jobs" to see and edit scheduled jobs. -JobDisabled=Job disabled -MakeLocalDatabaseDumpShort=Local database backup -MakeLocalDatabaseDump=Create a local database dump. Parameters are: compression ('gz' or 'bz' or 'none'), backup type ('mysql', 'pgsql', 'auto'), 1, 'auto' or filename to build, number of backup files to keep -WarningCronDelayed=Attention, for performance purpose, whatever is next date of execution of enabled jobs, your jobs may be delayed to a maximum of %s hours, before being run. -DATAPOLICYJob=Data cleaner and anonymizer -JobXMustBeEnabled=Job %s must be enabled +CronType=İş Tipi +CronType_method=PHP Sinifinin çağırış metodu +CronType_command=Shell əmri +CronCannotLoadClass=%s sinif faylını yükləmək mümkün deyil (%s sinfindən istifadə etmək üçün) +CronCannotLoadObject=%s sinif faylı yükləndi, lakin %s obyekti onda tapılmadı +UseMenuModuleToolsToAddCronJobs=Planlaşdırılmış işlərə baxmaq və redaktə etmək üçün "Ev - Admin alətləri - Planlaşdırılmış işlər" menyusuna daxil olun. +JobDisabled=İş əlil +MakeLocalDatabaseDumpShort=Yerli verilənlər bazası ehtiyat nüsxəsi +MakeLocalDatabaseDump=Yerli verilənlər bazası zibilini yaradın. Parametrlər bunlardır: sıxılma ('gz' və ya 'bz' və ya 'yox'), ehtiyat nüsxə növü ('mysql', 'pgsql', 'auto'), 1, 'auto' və ya qurmaq üçün fayl adı, saxlanılacaq ehtiyat fayllarının sayı +MakeSendLocalDatabaseDumpShort=Yerli verilənlər bazası ehtiyat nüsxəsini göndərin +MakeSendLocalDatabaseDump=Yerli verilənlər bazası ehtiyat nüsxəsini e-poçtla göndərin. Parametrlər bunlardır: kimdən, mövzu, mesaj, fayl adı (göndərilən faylın adı), filtr (yalnız verilənlər bazasının ehtiyat nüsxəsi üçün "sql") +BackupIsTooLargeSend=Üzr istəyirik, son ehtiyat faylı e-poçtla göndərmək üçün çox böyükdür +CleanUnfinishedCronjobShort=Təmiz yarımçıq cronjob +CleanUnfinishedCronjob=Proses artıq işləməyəndə təmiz cronjob emalda qalıb +WarningCronDelayed=Diqqət, performans məqsədi ilə, aktivləşdirilən işlərin növbəti icra tarixi nə olursa olsun, işləriniz işə salınmazdan əvvəl maksimum %s saat gecikə bilər. +DATAPOLICYJob=Məlumat təmizləyicisi və anonimator +JobXMustBeEnabled=%s işi aktiv edilməlidir +EmailIfError=Səhv barədə xəbərdarlıq üçün e-poçt +JobNotFound=%s işi iş siyahısında tapılmadı (modulu deaktiv etməyə/aktiv etməyə çalışın) +ErrorInBatch=%s işi icra edərkən xəta + # Cron Boxes -LastExecutedScheduledJob=Last executed scheduled job -NextScheduledJobExecute=Next scheduled job to execute -NumberScheduledJobError=Number of scheduled jobs in error +LastExecutedScheduledJob=Son icra olunan planlaşdırılmış iş +NextScheduledJobExecute=İcra etmək üçün növbəti planlaşdırılmış iş +NumberScheduledJobError=Səhvlə planlaşdırılan işlərin sayı +NumberScheduledJobNeverFinished=Planlaşdırılmış işlərin sayı heç vaxt tamamlanmayıb diff --git a/htdocs/langs/az_AZ/errors.lang b/htdocs/langs/az_AZ/errors.lang index b661755a298..f973536bf6d 100644 --- a/htdocs/langs/az_AZ/errors.lang +++ b/htdocs/langs/az_AZ/errors.lang @@ -15,12 +15,12 @@ ErrorGroupAlreadyExists=%s qrupu artıq mövcuddur. ErrorEmailAlreadyExists=%s e-poçtu artıq mövcuddur. ErrorRecordNotFound=Qeyd tapılmadı. ErrorRecordNotFoundShort=Tapılmadı -ErrorFailToCopyFile='%s' faylını' sinfinə kopyalamaq alınmadı ='notranslate'>%s'. -ErrorFailToCopyDir='%s' kataloqunu''a köçürmək alınmadı ='notranslate'>%s'. -ErrorFailToRenameFile='%s' faylının adını dəyişdirmək alınmadı. ='notranslate'>%s'. +ErrorFailToCopyFile=Failed to copy file '%s' into '%s'. +ErrorFailToCopyDir=Failed to copy directory '%s' into '%s'. +ErrorFailToRenameFile=Failed to rename file '%s' into '%s'. ErrorFailToDeleteFile='%s' faylını silmək alınmadı. ErrorFailToCreateFile='%s' faylını yaratmaq alınmadı. -ErrorFailToRenameDir='%s'' qovluğunun adını dəyişmək alınmadı ='notranslate'>%s'. +ErrorFailToRenameDir=Failed to rename directory '%s' into '%s'. ErrorFailToCreateDir='%s' kataloqunu yaratmaq alınmadı. ErrorFailToDeleteDir='%s' kataloqunu silmək alınmadı. ErrorFailToMakeReplacementInto='%s' faylına dəyişiklik etmək alınmadı. @@ -51,7 +51,7 @@ ErrorBadDateFormat='%s' dəyərində yanlış tarix formatı var ErrorWrongDate=Tarix düzgün deyil! ErrorFailedToWriteInDir=%s qovluğuna yazmaq alınmadı ErrorFailedToBuildArchive=%s arxiv faylını qurmaq alınmadı -ErrorFoundBadEmailInFile=Faylda %s sətirləri üçün səhv e-poçt sintaksisi tapıldı (misal sətir %s e-poçtu=b0ecb4980 /span>) +ErrorFoundBadEmailInFile=Found incorrect email syntax for %s lines in file (example line %s with email=%s) ErrorUserCannotBeDelete=İstifadəçi silinə bilməz. Ola bilsin ki, bu, Dolibarr qurumları ilə bağlıdır. ErrorFieldsRequired=Bəzi tələb olunan sahələr boş qalıb. ErrorSubjectIsRequired=E-poçt mövzusu tələb olunur @@ -81,7 +81,7 @@ ErrorNoValueForRadioType=Zəhmət olmasa radio siyahısı üçün dəyəri doldu ErrorBadFormatValueList=Siyahı dəyərində birdən çox vergül ola bilməz: %s, lakin ən azı birinə ehtiyac var: açar, dəyər ErrorFieldCanNotContainSpecialCharacters=%s sahəsində xüsusi simvollar olmamalıdır. ErrorFieldCanNotContainSpecialNorUpperCharacters=%s sahəsində xüsusi simvollar və böyük hərflər olmamalıdır simvol və əlifba sırası ilə başlamalıdır (a-z) -ErrorFieldMustHaveXChar=%s sahəsində ən azı %s simvol. +ErrorFieldMustHaveXChar=The field %s must have at least %s characters. ErrorNoAccountancyModuleLoaded=Heç bir mühasibat modulu aktivləşdirilməyib ErrorExportDuplicateProfil=Bu profil adı bu ixrac dəsti üçün artıq mövcuddur. ErrorLDAPSetupNotComplete=Dolibarr-LDAP uyğunluğu tamamlanmayıb. @@ -94,10 +94,10 @@ ErrorRecordIsUsedCantDelete=Qeydi silmək mümkün deyil. O, artıq istifadə ol ErrorModuleRequireJavascript=Bu funksiyanın işləməsi üçün JavaScript deaktiv edilməməlidir. JavaScript-i aktivləşdirmək/deaktiv etmək üçün Ana səhifə->Quraşdırma->Ekran menyusuna keçin. ErrorPasswordsMustMatch=Hər iki daxil edilmiş parol bir-birinə uyğun olmalıdır ErrorContactEMail=Texniki xəta baş verdi. Zəhmət olmasa, aşağıdakı e-poçt ünvanına administratorla əlaqə saxlayın %s və xətanı təqdim edin. mesajınızda %s kodu və ya ekran nüsxəsini əlavə edin bu səhifə. -ErrorWrongValueForField=Sahə %s: 'translate class='no %s' regex qaydasına uyğun gəlmir b0z838f %s
+ErrorWrongValueForField=Field %s: '%s' does not match regex rule %s ErrorHtmlInjectionForField=Sahə %s: '%s' icazə verilməyən zərərli məlumat ehtiva edir -ErrorFieldValueNotIn=Sahə %s: 'translate class='no %s' 3038f sahəsində tapılan dəyər deyil span>%s %s -ErrorFieldRefNotIn=Sahə %s: 'translate class='no %s' b0aee8735z deyil class='notranslate'>%s mövcud ref +ErrorFieldValueNotIn=Field %s: '%s' is not a value found in field %s of %s +ErrorFieldRefNotIn=Field %s: '%s' is not a %s existing ref ErrorMultipleRecordFoundFromRef=%s üzrə axtarış zamanı bir neçə qeyd tapıldı. Hansı identifikatordan istifadə edəcəyinizi bilmək üçün heç bir yol yoxdur. ErrorsOnXLines=%s xəta tapıldı ErrorFileIsInfectedWithAVirus=Antivirus proqramı faylı təsdiq edə bilmədi (fayl virusla yoluxmuş ola bilər) @@ -219,7 +219,7 @@ ErrorPhpMailDelivery=Çox sayda alıcı istifadə etmədiyinizi və e-poçt məz ErrorUserNotAssignedToTask=İstehlak olunan vaxtı daxil edə bilmək üçün istifadəçi tapşırığa təyin edilməlidir. ErrorTaskAlreadyAssigned=Tapşırıq artıq istifadəçiyə təyin edilib ErrorModuleFileSeemsToHaveAWrongFormat=Modul paketində səhv format var. -ErrorModuleFileSeemsToHaveAWrongFormat2=Modulun zipində ən azı bir məcburi kataloq olmalıdır: %sb0a65d09z06f > və ya %s +ErrorModuleFileSeemsToHaveAWrongFormat2=At least one mandatory directory must exists into zip of module: %s or %s ErrorFilenameDosNotMatchDolibarrPackageRules=Modul paketinin adı (%s) uyğun gəlmir gözlənilən ad sintaksisi: %s ErrorDuplicateTrigger=Xəta, tətik adının dublikatı %s. Artıq %s saytından yüklənib. ErrorNoWarehouseDefined=Xəta, anbar müəyyən edilməmişdir. @@ -263,9 +263,9 @@ ErrorReplaceStringEmpty=Xəta, dəyişdiriləcək sətir boşdur ErrorProductNeedBatchNumber=Xəta, '%s' çoxlu/seriyalı nömrə tələb edir ErrorProductDoesNotNeedBatchNumber=Xəta, '%s' çox şeyi qəbul etmir/ seriya nömrəsi ErrorFailedToReadObject=Xəta, %s tipli obyekti oxumaq alınmadı -ErrorParameterMustBeEnabledToAllwoThisFeature=Xəta, %s parametri conf/conf.php<> əmr xətti interfeysindən daxili iş planlayıcısı tərəfindən istifadəyə icazə verin +ErrorParameterMustBeEnabledToAllwoThisFeature=Error, parameter %s must be enabled into conf/conf.php<> to allow use of Command Line Interface by the internal job scheduler ErrorLoginDateValidity=Xəta, bu giriş etibarlılıq tarix diapazonundan kənardadır -ErrorValueLength=Sahənin uzunluğu '%s'-dən yüksək olmalıdır. span class='notranslate'>%s' +ErrorValueLength=Length of field '%s' must be higher than '%s' ErrorReservedKeyword='%s' sözü qorunmuş açar sözdür ErrorFilenameReserved=%s fayl adı olduğu üçün istifadə edilə bilməz qorunan və qorunan komanda. ErrorNotAvailableWithThisDistribution=Bu paylama ilə mövcud deyil @@ -337,7 +337,7 @@ WarningParamUploadMaxFileSizeHigherThanPostMaxSize=PHP parametriniz upload_max_f WarningPasswordSetWithNoAccount=Bu üzv üçün parol təyin edildi. Bununla belə, heç bir istifadəçi hesabı yaradılmayıb. Beləliklə, bu parol saxlanılır, lakin Dolibarr-a daxil olmaq üçün istifadə edilə bilməz. O, xarici modul/interfeys tərəfindən istifadə oluna bilər, lakin əgər üzv üçün hər hansı bir giriş və ya parol təyin etməyə ehtiyac yoxdursa, siz Üzv modulunun quraşdırılmasından "Hər bir üzv üçün girişi idarə et" seçimini söndürə bilərsiniz. Əgər siz girişi idarə etməlisinizsə, lakin heç bir parola ehtiyacınız yoxdursa, bu xəbərdarlığın qarşısını almaq üçün bu sahəni boş saxlaya bilərsiniz. Qeyd: Üzv bir istifadəçi ilə bağlıdırsa, e-poçt da giriş kimi istifadə edilə bilər. WarningMandatorySetupNotComplete=Əsas parametrləri qurmaq üçün bura klikləyin WarningEnableYourModulesApplications=Modullarınızı və proqramlarınızı aktivləşdirmək üçün bura klikləyin -WarningSafeModeOnCheckExecDir=Xəbərdarlıq, PHP seçimi safe_mode aktivdir, ona görə də əmr php parametri safe_mode_exec_dir. +WarningSafeModeOnCheckExecDir=Warning, PHP option safe_mode is on so command must be stored inside a directory declared by php parameter safe_mode_exec_dir. WarningBookmarkAlreadyExists=Bu başlıq və ya bu hədəf (URL) ilə əlfəcin artıq mövcuddur. WarningPassIsEmpty=Xəbərdarlıq, verilənlər bazası parolu boşdur. Bu təhlükəsizlik boşluğudur. Bunu əks etdirmək üçün verilənlər bazanıza parol əlavə etməli və conf.php faylınızı dəyişdirməlisiniz. WarningConfFileMustBeReadOnly=Xəbərdarlıq, konfiqurasiya faylınız (htdocs/conf/conf.php) veb server tərəfindən üzərinə yazıla bilər. Bu ciddi təhlükəsizlik boşluğudur. Veb server tərəfindən istifadə edilən əməliyyat sistemi istifadəçisi üçün yalnız oxumaq rejimində olmaq üçün fayldakı icazələri dəyişdirin. Diskiniz üçün Windows və FAT formatından istifadə edirsinizsə, bilməlisiniz ki, bu fayl sistemi fayla icazələr əlavə etməyə imkan vermir, ona görə də tamamilə təhlükəsiz ola bilməz. @@ -349,7 +349,7 @@ WarningCloseAlways=Xəbərdarlıq, bağlama, hətta mənbə və hədəf elementl WarningUsingThisBoxSlowDown=Xəbərdarlıq, bu qutudan istifadə edərək qutunu göstərən bütün səhifələri ciddi şəkildə yavaşlatır. WarningClickToDialUserSetupNotComplete=İstifadəçiniz üçün ClickToDial məlumatının quraşdırılması tamamlanmayıb (istifadəçi kartınızdakı ClickToDial nişanına baxın). WarningFeatureDisabledWithDisplayOptimizedForBlindNoJs=Displey quraşdırması kor insanlar və ya mətn brauzerləri üçün optimallaşdırıldıqda funksiya deaktiv edilir. -WarningPaymentDateLowerThanInvoiceDate=Ödəniş tarixi (%s) faktura tarixindən (%s) əvvəldir b0ecb2ec87f49f span>. +WarningPaymentDateLowerThanInvoiceDate=Payment date (%s) is earlier than invoice date (%s) for invoice %s. WarningTooManyDataPleaseUseMoreFilters=Həddindən artıq çox data (%s sətirdən çox). Lütfən, daha çox filtrdən istifadə edin və ya sabit %s dəyərini daha yüksək həddə təyin edin. WarningSomeLinesWithNullHourlyRate=Bəzi vaxtlar bəzi istifadəçilər tərəfindən qeydə alınıb, lakin onların saatlıq tarifləri müəyyən edilməyib. Saatda 0 %s dəyəri istifadə edilib, lakin bu, sərf olunan vaxtın yanlış qiymətləndirilməsi ilə nəticələnə bilər. WarningYourLoginWasModifiedPleaseLogin=Girişiniz dəyişdirildi. Təhlükəsizlik məqsədi ilə növbəti əməliyyatdan əvvəl yeni girişinizlə daxil olmalısınız. diff --git a/htdocs/langs/az_AZ/eventorganization.lang b/htdocs/langs/az_AZ/eventorganization.lang index f26e7a3cb71..c9f052921d3 100644 --- a/htdocs/langs/az_AZ/eventorganization.lang +++ b/htdocs/langs/az_AZ/eventorganization.lang @@ -36,7 +36,7 @@ EventOrganizationSetup=Tədbirin təşkili EventOrganization=Tədbirin təşkili EventOrganizationSetupPage = Tədbir təşkilatının quraşdırma səhifəsi EVENTORGANIZATION_TASK_LABEL = Layihə təsdiq edildikdə avtomatik olaraq yaradılacaq tapşırıqların etiketi -EVENTORGANIZATION_TASK_LABELTooltip = Tədbiri təşkil etmək üçün təsdiq etdiyiniz zaman bəzi tapşırıqlar layihədə avtomatik yaradıla bilər

Məsələn:
Konfranslara Zəng göndər
Konfranslar üçün Zəng göndər
V sinif təklifləri ='notranslate'>
Butlar üçün ərizəni təsdiqləyin
İştirakçılar üçün tədbirə abunəlik açınb0342fccfda19b> xatırladın tədbir haqqında məruzəçilərə
Tədbir haqqında Booth hosterlərinə xatırlatma göndər
İştirakçılara tədbir haqqında xatırlatma göndər +EVENTORGANIZATION_TASK_LABELTooltip = When you validate an event to organize, some tasks can be automatically created in the project

For example:
Send Call for Conferences
Send Call for Booths
Validate suggestions of Conferences
Validate application for Booths
Open subscriptions to the event for attendees
Send a remind of the event to speakers
Send a remind of the event to Booth hosters
Send a remind of the event to attendees EVENTORGANIZATION_TASK_LABELTooltip2=Tapşırıqları avtomatik yaratmağa ehtiyac yoxdursa, boş saxlayın. EVENTORGANIZATION_CATEG_THIRDPARTY_CONF = Kimsə konfrans təklif etdikdə avtomatik olaraq yaradılan üçüncü tərəflərə əlavə ediləcək kateqoriya EVENTORGANIZATION_CATEG_THIRDPARTY_BOOTH = Üçüncü tərəflərə əlavə ediləcək kateqoriya, onlar kabinə təklif etdikdə avtomatik olaraq yaradılır @@ -88,6 +88,7 @@ PriceOfRegistration=Qeydiyyat qiyməti PriceOfRegistrationHelp=Qeydiyyatdan keçmək və ya tədbirdə iştirak etmək üçün ödənilməli qiymət PriceOfBooth=Bir stenddə dayanmaq üçün abunə qiyməti PriceOfBoothHelp=Bir stenddə dayanmaq üçün abunə qiyməti +EventOrganizationICSLinkProject=Link ICS for the event EventOrganizationICSLink=Konfranslar üçün ICS-i əlaqələndirin ConferenceOrBoothInformation=Konfrans və ya Booth məlumatı Attendees=İştirakçılar @@ -127,7 +128,7 @@ PublicAttendeeSubscriptionPage = Yalnız bu tədbirə qeydiyyat üçün açıq l MissingOrBadSecureKey = Təhlükəsizlik açarı yanlışdır və ya yoxdur EvntOrgWelcomeMessage = Bu forma tədbirin yeni iştirakçısı kimi qeydiyyatdan keçməyə imkan verir EvntOrgDuration = Bu konfrans %s tarixində başlayır və %s tarixində bitir. -ConferenceAttendeeFee = Tədbir üçün konfransda iştirak haqqı : '%s' %s-dan b0ecb2ec87f49f-a qədər davam edir >. +ConferenceAttendeeFee = Conference attendee fee for the event : '%s' occurring from %s to %s. BoothLocationFee = Tədbir üçün stend məkanı : '%s' %s-dan %s arasında baş verir EventType = Hadisə növü LabelOfBooth=Stend etiketi diff --git a/htdocs/langs/az_AZ/exports.lang b/htdocs/langs/az_AZ/exports.lang index ff45237b5c6..758fd218eb6 100644 --- a/htdocs/langs/az_AZ/exports.lang +++ b/htdocs/langs/az_AZ/exports.lang @@ -87,15 +87,15 @@ ErrorMissingMandatoryValue=%s sütunundakı mənbə faylında məcburi da TooMuchErrors=Hələ də %s başqa mənbə xətləri var, lakin çıxışda xəta var məhdudlaşdırılıb. TooMuchWarnings=Hələ də %s digər mənbə sətirlərində xəbərdarlıqlar var məhdudlaşdırılıb. EmptyLine=Boş sətir (lağ ediləcək) -CorrectErrorBeforeRunningImport=Siz bütün səhvləri düzəltməlisiniz class'e notranslate'> qəti idxalı icra edir. +CorrectErrorBeforeRunningImport=You must correct all errors before running the definitive import. FileWasImported=Fayl %s nömrəsi ilə import edilib. -YouCanUseImportIdToFindRecord=Siz import_key='%s'
. -NbOfLinesOK=Səhv və xəbərdarlıq olmayan sətirlərin sayı: %simport_key='%s'
. +NbOfLinesOK=Number of lines with no errors and no warnings: %s. NbOfLinesImported=Uğurla idxal edilən sətirlərin sayı: %s. DataComeFromNoWhere=Daxil ediləcək dəyər mənbə faylında heç bir yerdən gəlir. DataComeFromFileFieldNb=Daxil ediləcək dəyər mənbə faylındakı %s sütunundan gəlir. DataComeFromIdFoundFromRef=Mənbə faylından gələn dəyər istifadə olunacaq əsas obyektin id-sini tapmaq üçün istifadə olunacaq (beləliklə obyekt %s mənbə faylından istinad verilənlər bazasında olmalıdır). -DataComeFromIdFoundFromCodeId=Mənbə faylından gələn kodun dəyəri istifadə ediləcək əsas obyektin id-sini tapmaq üçün istifadə olunacaq (buna görə də mənbə fayldan olan kod lüğətdə %s). Qeyd edək ki, id-i bilirsinizsə, kodun yerinə mənbə faylında da istifadə edə bilərsiniz. İdxal hər iki halda işləməlidir. +DataComeFromIdFoundFromCodeId=The value of code that comes from source file will be used to find the id of the parent object to use (so the code from source file must exist in the dictionary %s). Note that if you know the id, you can also use it in the source file instead of the code. Import should work in both cases. DataIsInsertedInto=Mənbə faylından gələn məlumatlar aşağıdakı sahəyə daxil ediləcək: DataIDSourceIsInsertedInto=Mənbə faylındakı məlumatlardan istifadə etməklə tapılan əsas obyektin id-si aşağıdakı sahəyə daxil ediləcək: DataCodeIDSourceIsInsertedInto=Koddan tapılan ana xəttin id-si aşağıdakı sahəyə daxil ediləcək: @@ -103,18 +103,18 @@ SourceRequired=Məlumat dəyəri məcburidir SourceExample=Mümkün məlumat dəyərinin nümunəsi ExampleAnyRefFoundIntoElement=%s elementi üçün hər hansı referans tapıldı ExampleAnyCodeOrIdFoundIntoDictionary=Lüğətdə hər hansı kod (və ya id) tapıldı %s -CSVFormatDesc=Vergüllə Ayrılmış Dəyər fayl formatı (.csv).b0342fccfda19This sahələrin ayırıcı [ %s ] ilə ayrıldığı mətn faylı formatıdır. Ayırıcı sahə məzmununda tapılarsa, sahə dairəvi simvol ilə yuvarlaqlaşdırılır [ %s ]. Dəyirmi simvoldan qaçmaq üçün qaçış simvolu [ %s ]-dır. +CSVFormatDesc=Comma Separated Value file format (.csv).
This is a text file format where fields are separated by a separator [ %s ]. If separator is found inside a field content, field is rounded by round character [ %s ]. Escape character to escape round character is [ %s ]. Excel95FormatDesc=Excel fayl formatı (.xls)
yerlidir Excel 95 formatı (BIFF5). Excel2007FormatDesc=Excel fayl formatı (.xlsx)
yerlidir Excel 2007 formatı (SpreadsheetML). -TsvFormatDesc=Tabdan Ayrılmış Dəyər fayl formatı (.tsv)b0342fccfdaspan>This is sahələrin tabulator [tab] ilə ayrıldığı mətn faylı formatı. +TsvFormatDesc=Tab Separated Value file format (.tsv)
This is a text file format where fields are separated by a tabulator [tab]. ExportFieldAutomaticallyAdded=%s sahəsi avtomatik əlavə edildi. Bu, oxşar sətirlərin dublikat qeyd kimi qəbul edilməsinin qarşısını alacaq (bu sahə əlavə edilməklə, bütün sətirlər öz id-lərinə sahib olacaq və fərqli olacaq). CsvOptions=CSV format seçimləri Separator=Sahə ayırıcı Enclosure=Sətir ayırıcı SpecialCode=Xüsusi kod ExportStringFilter=%% mətndə bir və ya bir neçə simvolu əvəz etməyə imkan verir -ExportDateFilter=YYYY, YYYYMM, YYYAYA: bir il/ay/gün üzrə filtrlər
YYYY+YYYY, YYYYMM+YYYYYMM, YYYYMM+YYYYMMDG: il/ay aralığı üzrə filtrlər span class='notranslate'>
> YYYY, > YYYYMM, > YYYYMMD: bütün sonrakı illər/aylar/günlər üzrə filtrlər
< YYYY, Y YYYYMMG: bütün əvvəlki illər/aylar/günlər üzrə filtrlər -ExportNumericFilter=NNNNN bir dəyər üzrə filtrləyir
NNNNN+NNNNN bir sıra dəyərlər üzərində filtrlər
b08912a07> NNNNN daha yüksək dəyərlərlə filtrləyir +ExportDateFilter=YYYY, YYYYMM, YYYYMMDD: filters by one year/month/day
YYYY+YYYY, YYYYMM+YYYYMM, YYYYMMDD+YYYYMMDD: filters over a range of years/months/days
> YYYY, > YYYYMM, > YYYYMMDD: filters on all following years/months/days
< YYYY, < YYYYMM, < YYYYMMDD: filters on all previous years/months/days +ExportNumericFilter=NNNNN filters by one value
NNNNN+NNNNN filters over a range of values
< NNNNN filters by lower values
> NNNNN filters by higher values ImportFromLine=Sətir nömrəsindən başlayaraq idxal edin EndAtLineNb=Sətir nömrəsində bitir ImportFromToLine=Limit diapazonu (From - To). Məs. başlıq sətirlərini buraxmaq. diff --git a/htdocs/langs/az_AZ/hrm.lang b/htdocs/langs/az_AZ/hrm.lang index 8724bb805a6..3a7704f8ddb 100644 --- a/htdocs/langs/az_AZ/hrm.lang +++ b/htdocs/langs/az_AZ/hrm.lang @@ -2,80 +2,96 @@ # Admin -HRM_EMAIL_EXTERNAL_SERVICE=Email to prevent HRM external service -Establishments=Establishments -Establishment=Establishment -NewEstablishment=New establishment -DeleteEstablishment=Delete establishment -ConfirmDeleteEstablishment=Are you sure you wish to delete this establishment? -OpenEtablishment=Open establishment -CloseEtablishment=Close establishment +HRM_EMAIL_EXTERNAL_SERVICE=HRM xarici xidmətinin qarşısını almaq üçün e-poçt +Establishments=Müəssisələr +Establishment=Müəssisə +NewEstablishment=Yeni müəssisə +DeleteEstablishment=Müəssisəni silin +ConfirmDeleteEstablishment=Bu müəssisəni silmək istədiyinizə əminsiniz? +OpenEtablishment=Açıq müəssisə +CloseEtablishment=Yaxın müəssisə # Dictionary -DictionaryPublicHolidays=Leave - Public holidays -DictionaryDepartment=HRM - Department list -DictionaryFunction=HRM - Job positions +DictionaryPublicHolidays=Tətil - Dövlət tətilləri +DictionaryDepartment=HRM - Təşkilat bölməsi +DictionaryFunction=HRM - İş yerləri # Module -Employees=Employees -Employee=Employee -NewEmployee=New employee -ListOfEmployees=List of employees -HrmSetup=HRM module setup -HRM_MAXRANK=Maximum rank for a skill -HRM_DEFAULT_SKILL_DESCRIPTION=Default description of ranks when skill is created +Employees=İşçilər +Employee=işçi +NewEmployee=Yeni işçi +ListOfEmployees=İşçilərin siyahısı +HrmSetup=HRM modulunun qurulması +SkillsManagement=Bacarıqların idarə edilməsi +HRM_MAXRANK=Bir bacarığı sıralamaq üçün maksimum səviyyə sayı +HRM_DEFAULT_SKILL_DESCRIPTION=Bacarıq yaradılan zaman dərəcələrin defolt təsviri deplacement=Shift -DateEval=Evaluation date -JobCard=Job card -Job=Job -Jobs=Jobs -NewSkill=New Skill -SkillType=Skill type -Skilldets=List of ranks for this skill -Skilldet=Skill level -rank=Rank -ErrNoSkillSelected=No skill selected -ErrSkillAlreadyAdded=This skill is already in the list -SkillHasNoLines=This skill has no lines -skill=Skill -Skills=Skills -SkillCard=Skill card -EmployeeSkillsUpdated=Employee skills have been updated (see "Skills" tab of employee card) -Eval=Evaluation -Evals=Evaluations -NewEval=New evaluation -ValidateEvaluation=Validate evaluation -ConfirmValidateEvaluation=Are you sure you want to validate this evaluation with reference %s? -EvaluationCard=Evaluation card -RequiredRank=Required rank for this job -EmployeeRank=Employee rank for this skill -Position=Position -Positions=Positions -PositionCard=Position card -EmployeesInThisPosition=Employees in this position -group1ToCompare=Usergroup to analyze -group2ToCompare=Second usergroup for comparison -OrJobToCompare=Compare to job skills requirements -difference=Difference -CompetenceAcquiredByOneOrMore=Competence acquired by one or more users but not requested by the second comparator -MaxlevelGreaterThan=Max level greater than the one requested -MaxLevelEqualTo=Max level equal to that demand -MaxLevelLowerThan=Max level lower than that demand -MaxlevelGreaterThanShort=Employee level greater than the one requested -MaxLevelEqualToShort=Employee level equals to that demand -MaxLevelLowerThanShort=Employee level lower than that demand -SkillNotAcquired=Skill not acquired by all users and requested by the second comparator -legend=Legend -TypeSkill=Skill type -AddSkill=Add skills to job -RequiredSkills=Required skills for this job -UserRank=User Rank -SkillList=Skill list -SaveRank=Save rank -knowHow=Know how -HowToBe=How to be -knowledge=Knowledge -AbandonmentComment=Abandonment comment -DateLastEval=Date last evaluation -NoEval=No evaluation done for this employee -HowManyUserWithThisMaxNote=Number of users with this rank -HighestRank=Highest rank -SkillComparison=Skill comparison +DateEval=Qiymətləndirmə tarixi +JobCard=İş kartı +NewJobProfile=Yeni İş Profili +JobProfile=İş profili +JobsProfiles=İş profilləri +NewSkill=Yeni Bacarıq +SkillType=Bacarıq növü +Skilldets=Bu bacarıq üçün dərəcələrin siyahısı +Skilldet=Bacarıq səviyyəsi +rank=Rütbə +ErrNoSkillSelected=Heç bir bacarıq seçilməyib +ErrSkillAlreadyAdded=Bu bacarıq artıq siyahıdadır +SkillHasNoLines=Bu bacarığın heç bir xətti yoxdur +Skill=Bacarıq +Skills=bacarıqlar +SkillCard=Bacarıq kartı +EmployeeSkillsUpdated=İşçilərin bacarıqları yeniləndi (işçi kartının "Bacarıqlar" sekmesine baxın) +Eval=Qiymətləndirmə +Evals=Qiymətləndirmələr +NewEval=Yeni qiymətləndirmə +ValidateEvaluation=Qiymətləndirməni təsdiq edin +ConfirmValidateEvaluation=Are you sure you want to validate this evaluation with the reference %s? +EvaluationCard=Qiymətləndirmə kartı +RequiredRank=İş profili üçün tələb olunan dərəcə +RequiredRankShort=Tələb olunan dərəcə +PositionsWithThisProfile=Bu iş profilləri ilə vəzifələr +EmployeeRank=Bu bacarıq üçün işçi rütbəsi +EmployeeRankShort=İşçi rütbəsi +EmployeePosition=İşçi mövqeyi +EmployeePositions=İşçi mövqeləri +EmployeesInThisPosition=Bu vəzifədə olan işçilər +group1ToCompare=Təhlil etmək üçün istifadəçi qrupu +group2ToCompare=Müqayisə üçün ikinci istifadəçi qrupu +OrJobToCompare=İş profilinin bacarıq tələbləri ilə müqayisə edin +difference=Fərq +CompetenceAcquiredByOneOrMore=Bir və ya bir neçə istifadəçi tərəfindən əldə edilmiş, lakin ikinci müqayisəçi tərəfindən tələb olunmayan səriştə +MaxlevelGreaterThan=İşçilərin səviyyəsi gözlənilən səviyyədən yüksəkdir +MaxLevelEqualTo=İşçi səviyyəsi gözlənilən səviyyəyə bərabərdir +MaxLevelLowerThan=İşçilərin səviyyəsi gözlənilən səviyyədən aşağıdır +MaxlevelGreaterThanShort=Səviyyə gözləniləndən yüksəkdir +MaxLevelEqualToShort=Gözlənilən səviyyəyə bərabər səviyyə +MaxLevelLowerThanShort=Səviyyə gözləniləndən aşağıdır +SkillNotAcquired=Bacarıq bütün istifadəçilər tərəfindən əldə edilmir və ikinci müqayisəçi tərəfindən tələb olunur +legend=Əfsanə +TypeSkill=Bacarıq növü +AddSkill=İş profilinə bacarıqlar əlavə edin +RequiredSkills=Bu iş profili üçün tələb olunan bacarıqlar +UserRank=İstifadəçi dərəcəsi +SkillList=Bacarıqların siyahısı +SaveRank=Rütbəni saxla +TypeKnowHow=Nou-hau +TypeHowToBe=Necə olmaq +TypeKnowledge=Bilik +AbandonmentComment=Tərk etmə şərhi +DateLastEval=Son qiymətləndirmə tarixi +NoEval=Bu işçi üçün heç bir qiymətləndirmə aparılmayıb +HowManyUserWithThisMaxNote=Bu dərəcəyə malik istifadəçilərin sayı +HighestRank=Ən yüksək dərəcə +SkillComparison=Bacarıqların müqayisəsi +ActionsOnJob=Bu iş üzrə hadisələr +VacantPosition=vakansiya +VacantCheckboxHelper=Bu seçimin yoxlanılması doldurulmamış vəzifələri göstərəcək (vakansiya) +SaveAddSkill = Bacarıq(lar) əlavə edildi +SaveLevelSkill = Bacarıq(lar) səviyyəsi saxlanıldı +DeleteSkill = Bacarıq silindi +SkillsExtraFields=Tamamlayıcı atributlar (Bacarıqlar) +JobsExtraFields=Tamamlayıcı atributlar (İş profili) +EvaluationsExtraFields=Tamamlayıcı atributlar (Qiymətləndirmələr) +NeedBusinessTravels=İşgüzar səfərlər lazımdır +NoDescription=təsvirsiz +TheJobProfileHasNoSkillsDefinedFixBefore=Bu işçinin qiymətləndirilən iş profilində müəyyən edilmiş bacarıq yoxdur. Zəhmət olmasa bacarıq(lar) əlavə edin, sonra silin və qiymətləndirməni yenidən başladın. diff --git a/htdocs/langs/az_AZ/install.lang b/htdocs/langs/az_AZ/install.lang index 989f6aa9793..edfe72833b6 100644 --- a/htdocs/langs/az_AZ/install.lang +++ b/htdocs/langs/az_AZ/install.lang @@ -1,219 +1,219 @@ # Dolibarr language file - Source file is en_US - install -InstallEasy=Just follow the instructions step by step. -MiscellaneousChecks=Prerequisites check -ConfFileExists=Configuration file %s exists. -ConfFileDoesNotExistsAndCouldNotBeCreated=Configuration file %s does not exist and could not be created! -ConfFileCouldBeCreated=Configuration file %s could be created. -ConfFileIsNotWritable=Configuration file %s is not writable. Check permissions. For first install, your web server must be able to write into this file during configuration process ("chmod 666" for example on a Unix like OS). -ConfFileIsWritable=Configuration file %s is writable. -ConfFileMustBeAFileNotADir=Configuration file %s must be a file, not a directory. -ConfFileReload=Reloading parameters from configuration file. -PHPSupportPOSTGETOk=This PHP supports variables POST and GET. -PHPSupportPOSTGETKo=It's possible your PHP setup does not support variables POST and/or GET. Check the parameter variables_order in php.ini. -PHPSupportSessions=This PHP supports sessions. -PHPSupport=This PHP supports %s functions. -PHPMemoryOK=Your PHP max session memory is set to %s. This should be enough. +InstallEasy=Sadəcə addım-addım təlimatları izləyin. +MiscellaneousChecks=İlkin şərtlərin yoxlanılması +ConfFileExists=%s konfiqurasiya faylı mövcuddur. +ConfFileDoesNotExistsAndCouldNotBeCreated=%s konfiqurasiya faylı mövcud deyil və yaradıla bilməz! +ConfFileCouldBeCreated=%s konfiqurasiya faylı yaradıla bilər. +ConfFileIsNotWritable=%s konfiqurasiya faylı yazıla bilməz. İcazələri yoxlayın. İlk quraşdırma üçün veb serveriniz konfiqurasiya prosesi zamanı bu fayla yaza bilməlidir (məsələn, Unix kimi OS-də "chmod 666"). +ConfFileIsWritable=%s konfiqurasiya faylı yazıla bilər. +ConfFileMustBeAFileNotADir=Konfiqurasiya faylı %s kataloq deyil, fayl olmalıdır. +ConfFileReload=Parametrlərin konfiqurasiya faylından yenidən yüklənməsi. +NoReadableConfFileSoStartInstall=conf/conf.php konfiqurasiya faylı mövcud deyil və ya oxunaqlı deyil. Onu işə salmağa çalışmaq üçün quraşdırma prosesini icra edəcəyik. +PHPSupportPOSTGETOk=Bu PHP POST və GET dəyişənlərini dəstəkləyir. +PHPSupportPOSTGETKo=Ola bilər ki, PHP quraşdırmanız POST və/və ya GET dəyişənlərini dəstəkləmir. Php.ini-də variables_order parametrini yoxlayın. +PHPSupportSessions=Bu PHP seansları dəstəkləyir. +PHPSupport=Bu PHP %s funksiyalarını dəstəkləyir. +PHPMemoryOK=PHP maksimum sessiya yaddaşınız %s olaraq təyin edilib. Bu kifayət qədər olmalıdır. PHPMemoryTooLow=Your PHP max session memory is set to %s bytes. This is too low. Change your php.ini to set memory_limit parameter to at least %s bytes. -Recheck=Click here for a more detailed test -ErrorPHPDoesNotSupportSessions=Your PHP installation does not support sessions. This feature is required to allow Dolibarr to work. Check your PHP setup and permissions of the sessions directory. -ErrorPHPDoesNotSupportGD=Your PHP installation does not support GD graphical functions. No graphs will be available. -ErrorPHPDoesNotSupportCurl=Your PHP installation does not support Curl. -ErrorPHPDoesNotSupportCalendar=Your PHP installation does not support php calendar extensions. -ErrorPHPDoesNotSupportUTF8=Your PHP installation does not support UTF8 functions. Dolibarr cannot work correctly. Resolve this before installing Dolibarr. -ErrorPHPDoesNotSupportIntl=Your PHP installation does not support Intl functions. -ErrorPHPDoesNotSupportMbstring=Your PHP installation does not support mbstring functions. -ErrorPHPDoesNotSupportxDebug=Your PHP installation does not support extend debug functions. -ErrorPHPDoesNotSupport=Your PHP installation does not support %s functions. -ErrorDirDoesNotExists=Directory %s does not exist. -ErrorGoBackAndCorrectParameters=Go back and check/correct the parameters. -ErrorWrongValueForParameter=You may have typed a wrong value for parameter '%s'. -ErrorFailedToCreateDatabase=Failed to create database '%s'. -ErrorFailedToConnectToDatabase=Failed to connect to database '%s'. -ErrorDatabaseVersionTooLow=Database version (%s) too old. Version %s or higher is required. -ErrorPHPVersionTooLow=PHP version too old. Version %s is required. -ErrorConnectedButDatabaseNotFound=Connection to server successful but database '%s' not found. -ErrorDatabaseAlreadyExists=Database '%s' already exists. -IfDatabaseNotExistsGoBackAndUncheckCreate=If the database does not exist, go back and check option "Create database". -IfDatabaseExistsGoBackAndCheckCreate=If database already exists, go back and uncheck "Create database" option. -WarningBrowserTooOld=Version of browser is too old. Upgrading your browser to a recent version of Firefox, Chrome or Opera is highly recommended. -PHPVersion=PHP Version -License=Using license -ConfigurationFile=Configuration file -WebPagesDirectory=Directory where web pages are stored -DocumentsDirectory=Directory to store uploaded and generated documents -URLRoot=URL Root -ForceHttps=Force secure connections (https) -CheckToForceHttps=Check this option to force secure connections (https).
This requires that the web server is configured with an SSL certificate. -DolibarrDatabase=Dolibarr Database -DatabaseType=Database type -DriverType=Driver type +Recheck=Daha ətraflı test üçün bura klikləyin +ErrorPHPDoesNotSupportSessions=PHP quraşdırmanız sessiyaları dəstəkləmir. Bu xüsusiyyət Dolibarrın işləməsinə icazə vermək üçün tələb olunur. PHP quraşdırmanızı və sessiyalar kataloqunun icazələrini yoxlayın. +ErrorPHPDoesNotSupport=PHP quraşdırmanız %s funksiyalarını dəstəkləmir. +ErrorDirDoesNotExists=%s kataloqu mövcud deyil. +ErrorGoBackAndCorrectParameters=Geri qayıdın və parametrləri yoxlayın/düzgün edin. +ErrorWrongValueForParameter='%s' parametri üçün səhv dəyər yazmısınız. +ErrorFailedToCreateDatabase='%s' verilənlər bazası yaratmaq alınmadı. +ErrorFailedToConnectToDatabase='%s' verilənlər bazasına qoşulmaq alınmadı. +ErrorDatabaseVersionTooLow=Databaza versiyası (%s) çox köhnə. %s və ya daha yüksək versiya tələb olunur. +ErrorPHPVersionTooLow=PHP versiyası çox köhnədir. %s və ya daha yüksək versiya tələb olunur. +ErrorPHPVersionTooHigh=PHP versiyası çox yüksəkdir. %s və ya daha aşağı versiya tələb olunur. +ErrorConnectedButDatabaseNotFound=Serverə qoşulma uğurludur, lakin '%s' verilənlər bazası tapılmadı. +ErrorDatabaseAlreadyExists='%s' verilənlər bazası artıq mövcuddur. +ErrorNoMigrationFilesFoundForParameters=Seçilmiş versiyalar üçün miqrasiya faylı tapılmadı +IfDatabaseNotExistsGoBackAndUncheckCreate=Verilənlər bazası yoxdursa, geri qayıdın və "Verilənlər bazası yarat" seçimini yoxlayın. +IfDatabaseExistsGoBackAndCheckCreate=Əgər verilənlər bazası artıq mövcuddursa, geri qayıdın və "Verilənlər bazası yarat" seçimindən işarəni çıxarın. +WarningBrowserTooOld=Brauzerin versiyası çox köhnədir. Brauzerinizi Firefox, Chrome və ya Opera-nın ən son versiyasına təkmilləşdirmək çox tövsiyə olunur. +PHPVersion=PHP Versiyası +License=Lisenziyadan istifadə +ConfigurationFile=Konfiqurasiya faylı +WebPagesDirectory=Veb səhifələrin saxlandığı qovluq +DocumentsDirectory=Yüklənmiş və yaradılan sənədləri saxlamaq üçün kataloq +URLRoot=URL kökü +ForceHttps=Təhlükəsiz bağlantıları məcbur edin (https) +CheckToForceHttps=Təhlükəsiz bağlantıları (https) məcbur etmək üçün bu seçimi yoxlayın.
Bu, veb serverin SSL sertifikatı ilə konfiqurasiya edilməsini tələb edir. +DolibarrDatabase=Dolibarr verilənlər bazası +DatabaseType=Verilənlər bazası növü +DriverType=Sürücü növü Server=Server -ServerAddressDescription=Name or ip address for the database server. Usually 'localhost' when the database server is hosted on the same server as the web server. -ServerPortDescription=Database server port. Keep empty if unknown. -DatabaseServer=Database server -DatabaseName=Database name -DatabasePrefix=Database table prefix -DatabasePrefixDescription=Database table prefix. If empty, defaults to llx_. -AdminLogin=User account for the Dolibarr database owner. -PasswordAgain=Retype password confirmation -AdminPassword=Password for Dolibarr database owner. -CreateDatabase=Create database -CreateUser=Create user account or grant user account permission on the Dolibarr database -DatabaseSuperUserAccess=Database server - Superuser access -CheckToCreateDatabase=Check the box if the database does not exist yet and so must be created.
In this case, you must also fill in the user name and password for the superuser account at the bottom of this page. -CheckToCreateUser=Check the box if:
the database user account does not yet exist and so must be created, or
if the user account exists but the database does not exist and permissions must be granted.
In this case, you must enter the user account and password and also the superuser account name and password at the bottom of this page. If this box is unchecked, database owner and password must already exist. -DatabaseRootLoginDescription=Superuser account name (to create new databases or new users), mandatory if the database or its owner does not already exist. -KeepEmptyIfNoPassword=Leave empty if superuser has no password (NOT recommended) -SaveConfigurationFile=Saving parameters to -ServerConnection=Server connection -DatabaseCreation=Database creation -CreateDatabaseObjects=Database objects creation -ReferenceDataLoading=Reference data loading -TablesAndPrimaryKeysCreation=Tables and Primary keys creation -CreateTableAndPrimaryKey=Create table %s -CreateOtherKeysForTable=Create foreign keys and indexes for table %s -OtherKeysCreation=Foreign keys and indexes creation -FunctionsCreation=Functions creation -AdminAccountCreation=Administrator login creation -PleaseTypePassword=Please type a password, empty passwords are not allowed! -PleaseTypeALogin=Please type a login! -PasswordsMismatch=Passwords differs, please try again! -SetupEnd=End of setup -SystemIsInstalled=This installation is complete. -SystemIsUpgraded=Dolibarr has been upgraded successfully. -YouNeedToPersonalizeSetup=You need to configure Dolibarr to suit your needs (appearance, features, ...). To do this, please follow the link below: -AdminLoginCreatedSuccessfuly=Dolibarr administrator login '%s' created successfully. -GoToDolibarr=Go to Dolibarr -GoToSetupArea=Go to Dolibarr (setup area) -MigrationNotFinished=The database version is not completely up to date: run the upgrade process again. -GoToUpgradePage=Go to upgrade page again -WithNoSlashAtTheEnd=Without the slash "/" at the end -DirectoryRecommendation=IMPORTANT: You must use a directory that is outside of the web pages (so do not use a subdirectory of previous parameter). -LoginAlreadyExists=Already exists -DolibarrAdminLogin=Dolibarr admin login -AdminLoginAlreadyExists=Dolibarr administrator account '%s' already exists. Go back if you want to create another one. -FailedToCreateAdminLogin=Failed to create Dolibarr administrator account. -WarningRemoveInstallDir=Warning, for security reasons, once the install or upgrade is complete, you should add a file called install.lock into the Dolibarr document directory in order to prevent the accidental/malicious use of the install tools again. -FunctionNotAvailableInThisPHP=Not available in this PHP -ChoosedMigrateScript=Choose migration script -DataMigration=Database migration (data) -DatabaseMigration=Database migration (structure + some data) -ProcessMigrateScript=Script processing -ChooseYourSetupMode=Choose your setup mode and click "Start"... -FreshInstall=Fresh install -FreshInstallDesc=Use this mode if this is your first install. If not, this mode can repair a incomplete previous install. If you want to upgrade your version, choose "Upgrade" mode. -Upgrade=Upgrade -UpgradeDesc=Use this mode if you have replaced old Dolibarr files with files from a newer version. This will upgrade your database and data. -Start=Start -InstallNotAllowed=Setup not allowed by conf.php permissions -YouMustCreateWithPermission=You must create file %s and set write permissions on it for the web server during install process. -CorrectProblemAndReloadPage=Please fix the problem and press F5 to reload the page. -AlreadyDone=Already migrated -DatabaseVersion=Database version -ServerVersion=Database server version -YouMustCreateItAndAllowServerToWrite=You must create this directory and allow for the web server to write into it. -DBSortingCollation=Character sorting order -YouAskDatabaseCreationSoDolibarrNeedToConnect=You selected create database %s, but for this, Dolibarr needs to connect to server %s with super user %s permissions. +ServerAddressDescription=Verilənlər bazası serverinin adı və ya IP ünvanı. Verilənlər bazası serveri veb serverlə eyni serverdə yerləşdirildikdə adətən 'localhost' olur. +ServerPortDescription=Verilənlər bazası server portu. Əgər naməlumdursa, boş saxlayın. +DatabaseServer=Verilənlər bazası serveri +DatabaseName=Verilənlər bazasının adı +DatabasePrefix=Verilənlər bazası cədvəli prefiksi +DatabasePrefixDescription=Verilənlər bazası cədvəli prefiksi. Boşdursa, defolt olaraq llx_. +AdminLogin=Dolibarr verilənlər bazası sahibi üçün istifadəçi hesabı. +AdminPassword=Dolibarr verilənlər bazası sahibi üçün parol. +CreateDatabase=Verilənlər bazası yaradın +CreateUser=Dolibarr verilənlər bazasında istifadəçi hesabı yaradın və ya istifadəçi hesabı icazəsi verin +DatabaseSuperUserAccess=Verilənlər bazası serveri - Super istifadəçi girişi +CheckToCreateDatabase=Əgər verilənlər bazası hələ mövcud deyilsə və buna görə də yaradılmalıdırsa, qutunu işarələyin.
Bu halda, siz həmçinin alt hissədə super istifadəçi hesabı üçün istifadəçi adı və parolu daxil etməlisiniz. bu səhifədən. +CheckToCreateUser=Əgər:
verilənlər bazası istifadəçi hesabı hələ mövcud deyilsə və buna görə yaradılmalıdırsa və ya
əgər istifadəçi hesabı varsa qutunu işarələyin. mövcuddur, lakin verilənlər bazası mövcud deyil və icazələr verilməlidir.
Bu halda, siz istifadəçi hesabı və parolu daxil etməlisiniz və span>həmçinin bu səhifənin altındakı super istifadəçi hesabı adı və parol. Əgər bu qutu işarələnmirsə, verilənlər bazası sahibi və parol artıq mövcud olmalıdır. +DatabaseRootLoginDescription=Superuser hesabının adı (yeni verilənlər bazası və ya yeni istifadəçilər yaratmaq üçün), verilənlər bazası və ya onun sahibi artıq mövcud deyilsə, məcburidir. +KeepEmptyIfNoPassword=Super istifadəçinin parolu yoxdursa, boş buraxın (tövsiyə DEYİL) +SaveConfigurationFile=Parametrlər saxlanılır +ServerConnection=Server bağlantısı +DatabaseCreation=Verilənlər bazasının yaradılması +CreateDatabaseObjects=Verilənlər bazası obyektlərinin yaradılması +ReferenceDataLoading=İstinad məlumatlarının yüklənməsi +TablesAndPrimaryKeysCreation=Cədvəllər və Əsas açarların yaradılması +CreateTableAndPrimaryKey=%s cədvəli yaradın +CreateOtherKeysForTable=%s cədvəli üçün xarici açarlar və indekslər yaradın +OtherKeysCreation=Xarici açarların və indekslərin yaradılması +FunctionsCreation=Funksiyaların yaradılması +AdminAccountCreation=Administrator girişinin yaradılması +PleaseTypePassword=Zəhmət olmasa parol daxil edin, boş parollara icazə verilmir! +PleaseTypeALogin=Zəhmət olmasa giriş daxil edin! +PasswordsMismatch=Parollar fərqlidir, yenidən cəhd edin! +SetupEnd=Quraşdırmanın sonu +SystemIsInstalled=Bu quraşdırma tamamlandı. +SystemIsUpgraded=Dolibarr uğurla təkmilləşdirildi. +YouNeedToPersonalizeSetup=Dolibarr-ı ehtiyaclarınıza uyğunlaşdırmaq üçün konfiqurasiya etməlisiniz (görünüş, xüsusiyyətlər, ...). Bunun üçün aşağıdakı linkə daxil olun: +AdminLoginCreatedSuccessfuly=Dolibarr administrator girişi '%s' uğurla yaradıldı. +GoToDolibarr=Dolibarra gedin +GoToSetupArea=Dolibarr-a gedin (quraşdırma sahəsi) +MigrationNotFinished=Verilənlər bazası versiyası tamamilə yeni deyil: təkmilləşdirmə prosesini yenidən işə salın. +GoToUpgradePage=Yenidən təkmilləşdirmə səhifəsinə keçin +WithNoSlashAtTheEnd=Sonda "/" kəsişməsi olmadan +DirectoryRecommendation=VACİB: Siz veb səhifələrdən kənarda olan kataloqdan istifadə etməlisiniz (ona görə də əvvəlki parametrin alt kataloqundan istifadə etməyin ). +LoginAlreadyExists=Artıq mövcuddur +DolibarrAdminLogin=Dolibarr admin girişi +AdminLoginAlreadyExists=Dolibarr administrator hesabı '%s' artıq mövcuddur. Başqasını yaratmaq istəyirsinizsə, geri qayıdın. +FailedToCreateAdminLogin=Dolibarr administrator hesabı yaratmaq alınmadı. +WarningRemoveInstallDir=Xəbərdarlıq, təhlükəsizlik səbəbi ilə quraşdırma prosesi başa çatdıqdan sonra install.lock adlı fayl əlavə etməlisiniz. Quraşdırma alətlərinin təsadüfi/zərərli istifadəsinin qarşısını almaq üçün Dolibarr sənəd kataloqu. +FunctionNotAvailableInThisPHP=Bu PHP-də mövcud deyil +ChoosedMigrateScript=Miqrasiya skriptini seçin +DataMigration=Verilənlər bazasının miqrasiyası (məlumat) +DatabaseMigration=Verilənlər bazasının miqrasiyası (struktur + bəzi məlumatlar) +ProcessMigrateScript=Skript emalı +ChooseYourSetupMode=Quraşdırma rejiminizi seçin və "Başlat" düyməsini basın... +FreshInstall=Təzə quraşdırma +FreshInstallDesc=Bu ilk quraşdırmanızdırsa, bu rejimi istifadə edin. Əks halda, bu rejim natamam əvvəlki quraşdırmanı təmir edə bilər. Versiyanızı təkmilləşdirmək istəyirsinizsə, "Upgrade" rejimini seçin. +Upgrade=Təkmilləşdirin +UpgradeDesc=Köhnə Dolibarr fayllarını daha yeni versiyanın faylları ilə əvəz etmisinizsə, bu rejimi istifadə edin. Bu, verilənlər bazanızı və məlumatlarınızı təkmilləşdirəcək. +Start=Başlamaq +InstallNotAllowed=conf.php icazələri ilə quraşdırmaya icazə verilmir +YouMustCreateWithPermission=Quraşdırma prosesi zamanı siz %s faylı yaratmalı və veb server üçün ona yazma icazələri təyin etməlisiniz. +CorrectProblemAndReloadPage=Problemi həll edin və səhifəni yenidən yükləmək üçün F5 düyməsini basın. +AlreadyDone=Artıq köçüb +DatabaseVersion=Verilənlər bazası versiyası +ServerVersion=Verilənlər bazası server versiyası +YouMustCreateItAndAllowServerToWrite=Siz bu qovluğu yaratmalı və veb serverin ona yazmasına icazə verməlisiniz. +DBSortingCollation=Xarakterlərin çeşidlənməsi qaydası +YouAskDatabaseCreationSoDolibarrNeedToConnect=Siz verilənlər bazası yaratdınız %s, lakin bunun üçün Dolibar lazımdır super istifadəçi ilə %s serverinə qoşulmaq üçün %s icazələri. YouAskLoginCreationSoDolibarrNeedToConnect=You selected create database user %s, but for this, Dolibarr needs to connect to server %s with super user %s permissions. -BecauseConnectionFailedParametersMayBeWrong=The database connection failed: the host or super user parameters must be wrong. -OrphelinsPaymentsDetectedByMethod=Orphans payment detected by method %s -RemoveItManuallyAndPressF5ToContinue=Remove it manually and press F5 to continue. -FieldRenamed=Field renamed -IfLoginDoesNotExistsCheckCreateUser=If the user does not exist yet, you must check option "Create user" +BecauseConnectionFailedParametersMayBeWrong=Verilənlər bazası bağlantısı uğursuz oldu: host və ya super istifadəçi parametrləri səhv olmalıdır. +OrphelinsPaymentsDetectedByMethod=Yetim ödənişi %s üsulu ilə aşkar edildi +RemoveItManuallyAndPressF5ToContinue=Onu əl ilə çıxarın və davam etmək üçün F5 düyməsini basın. +FieldRenamed=Sahənin adı dəyişdirildi +IfLoginDoesNotExistsCheckCreateUser=İstifadəçi hələ mövcud deyilsə, "İstifadəçi yarat" seçimini yoxlamalısınız. ErrorConnection=Server "%s", database name "%s", login "%s", or database password may be wrong or the PHP client version may be too old compared to the database version. InstallChoiceRecommanded=Recommended choice to install version %s from your current version %s -InstallChoiceSuggested=Install choice suggested by installer. -MigrateIsDoneStepByStep=The targeted version (%s) has a gap of several versions. The install wizard will come back to suggest a further migration once this one is complete. -CheckThatDatabasenameIsCorrect=Check that the database name "%s" is correct. -IfAlreadyExistsCheckOption=If this name is correct and that database does not exist yet, you must check option "Create database". -OpenBaseDir=PHP openbasedir parameter -YouAskToCreateDatabaseSoRootRequired=You checked the box "Create database". For this, you need to provide the login/password of superuser (bottom of form). -YouAskToCreateDatabaseUserSoRootRequired=You checked the box "Create database owner". For this, you need to provide the login/password of superuser (bottom of form). -NextStepMightLastALongTime=The current step may take several minutes. Please wait until the next screen is shown completely before continuing. -MigrationCustomerOrderShipping=Migrate shipping for sales orders storage -MigrationShippingDelivery=Upgrade storage of shipping -MigrationShippingDelivery2=Upgrade storage of shipping 2 -MigrationFinished=Migration finished -LastStepDesc=Last step: Define here the login and password you wish to use to connect to Dolibarr. Do not lose this as it is the master account to administer all other/additional user accounts. -ActivateModule=Activate module %s -ShowEditTechnicalParameters=Click here to show/edit advanced parameters (expert mode) -WarningUpgrade=Warning:\nDid you run a database backup first?\nThis is highly recommended. Loss of data (due to for example bugs in mysql version 5.5.40/41/42/43) may be possible during this process, so it is essential to take a complete dump of your database before starting any migration.\n\nClick OK to start migration process... -ErrorDatabaseVersionForbiddenForMigration=Your database version is %s. It has a critical bug, making data loss possible if you make structural changes in your database, such as is required by the migration process. For his reason, migration will not be allowed until you upgrade your database to a layer (patched) version (list of known buggy versions: %s) -KeepDefaultValuesWamp=You used the Dolibarr setup wizard from DoliWamp, so values proposed here are already optimized. Change them only if you know what you are doing. -KeepDefaultValuesDeb=You used the Dolibarr setup wizard from a Linux package (Ubuntu, Debian, Fedora...), so the values proposed here are already optimized. Only the password of the database owner to create must be entered. Change other parameters only if you know what you are doing. -KeepDefaultValuesMamp=You used the Dolibarr setup wizard from DoliMamp, so the values proposed here are already optimized. Change them only if you know what you are doing. -KeepDefaultValuesProxmox=You used the Dolibarr setup wizard from a Proxmox virtual appliance, so the values proposed here are already optimized. Change them only if you know what you are doing. -UpgradeExternalModule=Run dedicated upgrade process of external module -SetAtLeastOneOptionAsUrlParameter=Set at least one option as a parameter in URL. For example: '...repair.php?standard=confirmed' -NothingToDelete=Nothing to clean/delete -NothingToDo=Nothing to do +InstallChoiceSuggested=Quraşdıran tərəfindən təklif edilən quraşdırma seçimi. +MigrateIsDoneStepByStep=Hədəflənmiş versiyada (%s) bir neçə versiyada boşluq var. Quraşdırma sihirbazı bu tamamlandıqdan sonra növbəti miqrasiya təklif etmək üçün geri qayıdacaq. +CheckThatDatabasenameIsCorrect="%s" verilənlər bazası adının düzgün olduğunu yoxlayın. +IfAlreadyExistsCheckOption=Bu ad düzgündürsə və həmin verilənlər bazası hələ mövcud deyilsə, "Verilənlər bazası yarat" seçimini yoxlamaq lazımdır. +OpenBaseDir=PHP açıq əsaslı parametr +YouAskToCreateDatabaseSoRootRequired="Verilənlər bazası yarat" qutusunu işarələdiniz. Bunun üçün super istifadəçinin giriş/parolunu təqdim etməlisiniz (formanın aşağısında). +YouAskToCreateDatabaseUserSoRootRequired="Verilənlər bazası sahibi yaradın" qutusunu işarələdiniz. Bunun üçün super istifadəçinin giriş/parolunu təqdim etməlisiniz (formanın aşağısında). +NextStepMightLastALongTime=Cari addım bir neçə dəqiqə çəkə bilər. Davam etməzdən əvvəl növbəti ekran tamamilə görünənə qədər gözləyin. +MigrationCustomerOrderShipping=Satış sifarişlərinin saxlanması üçün göndərməni köçürün +MigrationShippingDelivery=Göndərmə anbarını təkmilləşdirin +MigrationShippingDelivery2=Göndərmə anbarını təkmilləşdirin 2 +MigrationFinished=Miqrasiya tamamlandı +LastStepDesc=Son addım: Dolibarr-a qoşulmaq üçün istifadə etmək istədiyiniz giriş və parolu burada müəyyən edin. Bunu itirməyin, çünki o, bütün digər/əlavə istifadəçi hesablarını idarə etmək üçün əsas hesabdır. +ActivateModule=%s modulunu aktivləşdirin +ShowEditTechnicalParameters=Qabaqcıl parametrləri göstərmək/redaktə etmək üçün bura klikləyin (ekspert rejimi) +WarningUpgrade=Xəbərdarlıq:\nƏvvəlcə verilənlər bazası ehtiyat nüsxəsini işlətdinizmi?\nBu çox tövsiyə olunur. Bu proses zamanı məlumat itkisi (məsələn, mysql 5.5.40/41/42/43-dəki səhvlər səbəbindən) mümkün ola bilər, ona görə də hər hansı miqrasiyaya başlamazdan əvvəl verilənlər bazanızın tam zibilini götürmək vacibdir.\n\nMiqrasiya prosesinə başlamaq üçün OK düyməsini klikləyin... +ErrorDatabaseVersionForbiddenForMigration=Verilənlər bazası versiyanız %s-dır. Bu, miqrasiya prosesinin tələb etdiyi kimi, verilənlər bazanızda struktur dəyişiklikləri etsəniz, məlumat itkisini mümkün edən kritik bir səhvə malikdir. Bu səbəbdən, siz verilənlər bazanızı qat (yamaqlanmış) versiyaya təkmilləşdirməyincə miqrasiyaya icazə verilməyəcək (məlum səhv versiyaların siyahısı: %s) +KeepDefaultValuesWamp=Siz DoliWamp-dan Dolibarr quraşdırma sehrbazından istifadə etdiniz, ona görə də burada təklif olunan dəyərlər artıq optimallaşdırılıb. Onları yalnız nə etdiyinizi bildiyiniz halda dəyişdirin. +KeepDefaultValuesDeb=Siz Dolibarr quraşdırma sehrbazını Linux paketindən (Ubuntu, Debian, Fedora...) istifadə etdiniz, buna görə də burada təklif olunan dəyərlər artıq optimallaşdırılıb. Yalnız yaradılacaq verilənlər bazası sahibinin parolu daxil edilməlidir. Digər parametrləri yalnız nə etdiyinizi bildiyiniz halda dəyişdirin. +KeepDefaultValuesMamp=Siz DoliMamp-dan Dolibarr quraşdırma sehrbazından istifadə etdiniz, ona görə də burada təklif olunan dəyərlər artıq optimallaşdırılıb. Onları yalnız nə etdiyinizi bildiyiniz halda dəyişdirin. +KeepDefaultValuesProxmox=Siz Proxmox virtual cihazından Dolibarr quraşdırma sehrbazından istifadə etdiniz, ona görə də burada təklif olunan dəyərlər artıq optimallaşdırılıb. Onları yalnız nə etdiyinizi bildiyiniz halda dəyişdirin. +UpgradeExternalModule=Xarici modulun xüsusi təkmilləşdirmə prosesini işə salın +SetAtLeastOneOptionAsUrlParameter=Ən azı bir seçimi URL-də parametr kimi təyin edin. Məsələn: '...repair.php?standard=confirmed' +NothingToDelete=Təmizləmək/silmək üçün heç nə yoxdur +NothingToDo=Etməli bir şey yoxdur ######### # upgrade -MigrationFixData=Fix for denormalized data -MigrationOrder=Data migration for customer's orders -MigrationSupplierOrder=Data migration for vendor's orders -MigrationProposal=Data migration for commercial proposals -MigrationInvoice=Data migration for customer's invoices -MigrationContract=Data migration for contracts -MigrationSuccessfullUpdate=Upgrade successful -MigrationUpdateFailed=Failed upgrade process -MigrationRelationshipTables=Data migration for relationship tables (%s) -MigrationPaymentsUpdate=Payment data correction -MigrationPaymentsNumberToUpdate=%s payment(s) to update -MigrationProcessPaymentUpdate=Update payment(s) %s -MigrationPaymentsNothingToUpdate=No more things to do -MigrationPaymentsNothingUpdatable=No more payments that can be corrected -MigrationContractsUpdate=Contract data correction -MigrationContractsNumberToUpdate=%s contract(s) to update -MigrationContractsLineCreation=Create contract line for contract ref %s -MigrationContractsNothingToUpdate=No more things to do -MigrationContractsFieldDontExist=Field fk_facture does not exist anymore. Nothing to do. -MigrationContractsEmptyDatesUpdate=Contract empty date correction -MigrationContractsEmptyDatesUpdateSuccess=Contract empty date correction done successfully -MigrationContractsEmptyDatesNothingToUpdate=No contract empty date to correct -MigrationContractsEmptyCreationDatesNothingToUpdate=No contract creation date to correct -MigrationContractsInvalidDatesUpdate=Bad value date contract correction -MigrationContractsInvalidDateFix=Correct contract %s (Contract date=%s, Starting service date min=%s) -MigrationContractsInvalidDatesNumber=%s contracts modified -MigrationContractsInvalidDatesNothingToUpdate=No date with bad value to correct -MigrationContractsIncoherentCreationDateUpdate=Bad value contract creation date correction -MigrationContractsIncoherentCreationDateUpdateSuccess=Bad value contract creation date correction done successfully -MigrationContractsIncoherentCreationDateNothingToUpdate=No bad value for contract creation date to correct -MigrationReopeningContracts=Open contract closed by error -MigrationReopenThisContract=Reopen contract %s -MigrationReopenedContractsNumber=%s contracts modified -MigrationReopeningContractsNothingToUpdate=No closed contract to open -MigrationBankTransfertsUpdate=Update links between bank entry and a bank transfer -MigrationBankTransfertsNothingToUpdate=All links are up to date -MigrationShipmentOrderMatching=Sendings receipt update -MigrationDeliveryOrderMatching=Delivery receipt update -MigrationDeliveryDetail=Delivery update -MigrationStockDetail=Update stock value of products -MigrationMenusDetail=Update dynamic menus tables -MigrationDeliveryAddress=Update delivery address in shipments -MigrationProjectTaskActors=Data migration for table llx_projet_task_actors -MigrationProjectUserResp=Data migration field fk_user_resp of llx_projet to llx_element_contact -MigrationProjectTaskTime=Update time spent in seconds -MigrationActioncommElement=Update data on actions -MigrationPaymentMode=Data migration for payment type -MigrationCategorieAssociation=Migration of categories -MigrationEvents=Migration of events to add event owner into assignment table -MigrationEventsContact=Migration of events to add event contact into assignment table -MigrationRemiseEntity=Update entity field value of llx_societe_remise -MigrationRemiseExceptEntity=Update entity field value of llx_societe_remise_except -MigrationUserRightsEntity=Update entity field value of llx_user_rights -MigrationUserGroupRightsEntity=Update entity field value of llx_usergroup_rights -MigrationUserPhotoPath=Migration of photo paths for users -MigrationFieldsSocialNetworks=Migration of users fields social networks (%s) -MigrationReloadModule=Reload module %s -MigrationResetBlockedLog=Reset module BlockedLog for v7 algorithm -MigrationImportOrExportProfiles=Migration of import or export profiles (%s) -ShowNotAvailableOptions=Show unavailable options -HideNotAvailableOptions=Hide unavailable options -ErrorFoundDuringMigration=Error(s) were reported during the migration process so next step is not available. To ignore errors, you can click here, but the application or some features may not work correctly until the errors are resolved. -YouTryInstallDisabledByDirLock=The application tried to self-upgrade, but the install/upgrade pages have been disabled for security (directory renamed with .lock suffix).
+MigrationFixData=Normallaşdırılmamış məlumatlar üçün düzəliş +MigrationOrder=Müştərinin sifarişləri üçün məlumatların köçürülməsi +MigrationSupplierOrder=Satıcı sifarişləri üçün məlumat köçürməsi +MigrationProposal=Kommersiya təklifləri üçün məlumat miqrasiyası +MigrationInvoice=Müştərinin fakturaları üçün məlumat köçürməsi +MigrationContract=Müqavilələr üçün məlumat miqrasiyası +MigrationSuccessfullUpdate=Təkmilləşdirmə uğurlu oldu +MigrationUpdateFailed=Uğursuz təkmilləşdirmə prosesi +MigrationRelationshipTables=Əlaqə cədvəlləri üçün məlumat miqrasiyası (%s) +MigrationPaymentsUpdate=Ödəniş məlumatlarının korreksiyası +MigrationPaymentsNumberToUpdate=%s yeniləmək üçün ödəniş(lər) +MigrationProcessPaymentUpdate=Ödənişləri yeniləyin %s +MigrationPaymentsNothingToUpdate=Daha görüləsi iş yoxdur +MigrationPaymentsNothingUpdatable=Artıq düzəldilə bilən ödənişlər yoxdur +MigrationContractsUpdate=Müqavilə məlumatlarının korreksiyası +MigrationContractsNumberToUpdate=%s yeniləmək üçün müqavilə(lər) +MigrationContractsLineCreation=Müqavilə ref %s üçün müqavilə xətti yaradın +MigrationContractsNothingToUpdate=Daha görüləsi iş yoxdur +MigrationContractsFieldDontExist=fk_facture sahəsi artıq mövcud deyil. Etməli bir şey yoxdur. +MigrationContractsEmptyDatesUpdate=Müqavilənin boş tarixinin düzəldilməsi +MigrationContractsEmptyDatesUpdateSuccess=Müqavilənin boş tarixi korreksiyası uğurla həyata keçirildi +MigrationContractsEmptyDatesNothingToUpdate=Düzəliş etmək üçün boş tarix yoxdur +MigrationContractsEmptyCreationDatesNothingToUpdate=Düzəliş etmək üçün müqavilənin yaradılması tarixi yoxdur +MigrationContractsInvalidDatesUpdate=Pis dəyər tarixi müqaviləsinin düzəldilməsi +MigrationContractsInvalidDateFix=Düzgün müqavilə %s (Müqavilə tarixi=%s, Xidmətə başlama tarixi min=%s >) +MigrationContractsInvalidDatesNumber=%s müqavilə dəyişdirildi +MigrationContractsInvalidDatesNothingToUpdate=Düzəliş etmək üçün pis dəyəri olan tarix yoxdur +MigrationContractsIncoherentCreationDateUpdate=Pis dəyər müqaviləsinin yaradılması tarixinin düzəldilməsi +MigrationContractsIncoherentCreationDateUpdateSuccess=Pis dəyər müqaviləsinin yaradılması tarixinin korreksiyası uğurla həyata keçirilib +MigrationContractsIncoherentCreationDateNothingToUpdate=Düzəliş etmək üçün müqavilənin yaradılması tarixi üçün pis dəyər yoxdur +MigrationReopeningContracts=Açıq müqavilə xəta ilə bağlandı +MigrationReopenThisContract=Müqaviləni yenidən açın %s +MigrationReopenedContractsNumber=%s müqavilə dəyişdirildi +MigrationReopeningContractsNothingToUpdate=Açmaq üçün qapalı müqavilə yoxdur +MigrationBankTransfertsUpdate=Bank girişi və bank köçürməsi arasındakı əlaqələri yeniləyin +MigrationBankTransfertsNothingToUpdate=Bütün keçidlər aktualdır +MigrationShipmentOrderMatching=Göndərmə qəbzi yeniləməsi +MigrationDeliveryOrderMatching=Çatdırılma qəbzinin yenilənməsi +MigrationDeliveryDetail=Çatdırılma yeniləməsi +MigrationStockDetail=Məhsulların ehtiyat dəyərini yeniləyin +MigrationMenusDetail=Dinamik menyu cədvəllərini yeniləyin +MigrationDeliveryAddress=Göndərmələrdə çatdırılma ünvanını yeniləyin +MigrationProjectTaskActors=llx_projet_task_actors cədvəli üçün məlumat miqrasiyası +MigrationProjectUserResp=llx_projetin fk_user_resp məlumat miqrasiya sahəsi llx_element_contact-a +MigrationProjectTaskTime=Saniyədə sərf olunan vaxtı yeniləyin +MigrationActioncommElement=Fəaliyyətlər haqqında məlumatları yeniləyin +MigrationPaymentMode=Ödəniş növü üçün məlumat miqrasiyası +MigrationCategorieAssociation=Kateqoriyaların miqrasiyası +MigrationEvents=Tədbir sahibini tapşırıq cədvəlinə əlavə etmək üçün hadisələrin köçürülməsi +MigrationEventsContact=Təyinat cədvəlinə hadisə kontaktını əlavə etmək üçün hadisələrin köçürülməsi +MigrationRemiseEntity=llx_societe_remise obyekt sahəsinin dəyərini yeniləyin +MigrationRemiseExceptEntity=llx_societe_remise_except obyekt sahəsinin dəyərini yeniləyin +MigrationUserRightsEntity=llx_user_rights obyekt sahəsinin dəyərini yeniləyin +MigrationUserGroupRightsEntity=llx_usergroup_rights obyekt sahəsinin dəyərini yeniləyin +MigrationUserPhotoPath=İstifadəçilər üçün foto yollarının miqrasiyası +MigrationFieldsSocialNetworks=İstifadəçilərin sosial şəbəkələrdə miqrasiyası (%s) +MigrationReloadModule=Modulu yenidən yükləyin %s +MigrationResetBlockedLog=v7 alqoritmi üçün BlockedLog modulunu sıfırlayın +MigrationImportOrExportProfiles=İdxal və ya ixrac profillərinin miqrasiyası (%s) +ShowNotAvailableOptions=Əlçatan olmayan variantları göstərin +HideNotAvailableOptions=Əlçatan olmayan variantları gizlədin +ErrorFoundDuringMigration=Xəta(lar) miqrasiya prosesi zamanı bildirildi, ona görə də növbəti addım əlçatan deyil. Səhvlərə məhəl qoymamaq üçün buraya klikləyə bilərsiniz, lakin xətalar həll olunana qədər proqram və ya bəzi funksiyalar düzgün işləməyə bilər. . +YouTryInstallDisabledByDirLock=Tətbiq özünü təkmilləşdirməyə çalışdı, lakin quraşdırma/təkmilləşdirmə səhifələri təhlükəsizlik üçün deaktiv edilib (kataloqun adı .lock şəkilçisi ilə dəyişdirilib).
YouTryInstallDisabledByFileLock=The application tried to self-upgrade, but the install/upgrade pages have been disabled for security (by the existence of a lock file install.lock in the dolibarr documents directory).
-ClickHereToGoToApp=Click here to go to your application -ClickOnLinkOrRemoveManualy=If an upgrade is in progress, please wait. If not, click on the following link. If you always see this same page, you must remove/rename the file install.lock in the documents directory. -Loaded=Loaded -FunctionTest=Function test +YouTryUpgradeDisabledByMissingFileUnLock=Tətbiq özünü təkmilləşdirməyə çalışdı, lakin təkmilləşdirmə prosesinə hazırda icazə verilmir.
+ClickHereToGoToApp=Tətbiqinizə getmək üçün bura klikləyin +ClickOnLinkOrRemoveManualy=Təkmilləşdirmə davam edirsə, gözləyin. Əgər yoxsa, aşağıdakı linkə klikləyin. Həmişə eyni səhifəni görürsünüzsə, sənədlər kataloqunda install.lock faylını silməli/adını dəyişdirməlisiniz. +ClickOnLinkOrCreateUnlockFileManualy=Təkmilləşdirmə davam edirsə, gözləyin... Yoxdursa, siz install.lock faylını silməli və ya Dolibarr sənədlər qovluğunda upgrade.unlock faylı yaratmalısınız. +Loaded=Yükləndi +FunctionTest=Funksiya testi +NodoUpgradeAfterDB=Verilənlər bazasını təkmilləşdirdikdən sonra xarici modullar tərəfindən heç bir hərəkət tələb olunmur +NodoUpgradeAfterFiles=Faylların və ya qovluqların təkmilləşdirilməsindən sonra xarici modullar tərəfindən heç bir hərəkət tələb olunmur +MigrationContractLineRank=Rankdan istifadə etmək üçün Müqavilə Xəttini köçürün (və Yenidən Sifarişi aktivləşdirin) diff --git a/htdocs/langs/az_AZ/ldap.lang b/htdocs/langs/az_AZ/ldap.lang index 8b6f0864215..b82818f1e58 100644 --- a/htdocs/langs/az_AZ/ldap.lang +++ b/htdocs/langs/az_AZ/ldap.lang @@ -1,27 +1,33 @@ # Dolibarr language file - Source file is en_US - ldap YouMustChangePassNextLogon=Password for user %s on the domain %s must be changed. -UserMustChangePassNextLogon=User must change password on the domain %s -LDAPInformationsForThisContact=Information in LDAP database for this contact -LDAPInformationsForThisUser=Information in LDAP database for this user -LDAPInformationsForThisGroup=Information in LDAP database for this group -LDAPInformationsForThisMember=Information in LDAP database for this member -LDAPInformationsForThisMemberType=Information in LDAP database for this member type -LDAPAttributes=LDAP attributes -LDAPCard=LDAP card -LDAPRecordNotFound=Record not found in LDAP database -LDAPUsers=Users in LDAP database -LDAPFieldStatus=Status -LDAPFieldFirstSubscriptionDate=First subscription date -LDAPFieldFirstSubscriptionAmount=First subscription amount -LDAPFieldLastSubscriptionDate=Latest subscription date -LDAPFieldLastSubscriptionAmount=Latest subscription amount +UserMustChangePassNextLogon=İstifadəçi %s domenində parolu dəyişməlidir +LDAPInformationsForThisContact=Bu əlaqə üçün LDAP verilənlər bazasında məlumat +LDAPInformationsForThisUser=Bu istifadəçi üçün LDAP verilənlər bazasındakı məlumat +LDAPInformationsForThisGroup=Bu qrup üçün LDAP verilənlər bazasında məlumat +LDAPInformationsForThisMember=Bu üzv üçün LDAP verilənlər bazasında məlumat +LDAPInformationsForThisMemberType=Bu üzv növü üçün LDAP verilənlər bazasındakı məlumat +LDAPAttributes=LDAP atributları +LDAPCard=LDAP kartı +LDAPRecordNotFound=LDAP verilənlər bazasında qeyd tapılmadı +LDAPUsers=LDAP verilənlər bazasındakı istifadəçilər +LDAPFieldStatus=Vəziyyət +LDAPFieldFirstSubscriptionDate=İlk abunə tarixi +LDAPFieldFirstSubscriptionAmount=İlk abunə məbləği +LDAPFieldLastSubscriptionDate=Ən son abunə tarixi +LDAPFieldLastSubscriptionAmount=Ən son abunə məbləği LDAPFieldSkype=Skype id -LDAPFieldSkypeExample=Example: skypeName -UserSynchronized=User synchronized -GroupSynchronized=Group synchronized -MemberSynchronized=Member synchronized -MemberTypeSynchronized=Member type synchronized -ContactSynchronized=Contact synchronized -ForceSynchronize=Force synchronizing Dolibarr -> LDAP -ErrorFailedToReadLDAP=Failed to read LDAP database. Check LDAP module setup and database accessibility. -PasswordOfUserInLDAP=Password of user in LDAP +LDAPFieldSkypeExample=Misal: skypeName +UserSynchronized=İstifadəçi sinxronizasiya edildi +GroupSynchronized=Qrup sinxronlaşdırıldı +MemberSynchronized=Üzv sinxronlaşdırıldı +MemberTypeSynchronized=Sinxronlaşdırılmış üzv növü +ContactSynchronized=Əlaqə sinxronlaşdırıldı +ForceSynchronize=Dolibarr -> LDAP-ı sinxronlaşdırmağa məcbur edin +ErrorFailedToReadLDAP=LDAP verilənlər bazasını oxumaq alınmadı. LDAP modulunun qurulmasını və verilənlər bazası əlçatanlığını yoxlayın. +PasswordOfUserInLDAP=LDAP-da istifadəçi parolu +LDAPPasswordHashType=Parol hash növü +LDAPPasswordHashTypeExample=Serverdə istifadə edilən parol hash növü +SupportedForLDAPExportScriptOnly=Yalnız ldap ixrac skripti tərəfindən dəstəklənir +SupportedForLDAPImportScriptOnly=Yalnız ldap idxal skripti tərəfindən dəstəklənir +LDAPUserAccountControl = userAccountControl yaradılması (aktiv kataloq) +LDAPUserAccountControlExample = 512 Normal Hesab / 546 Normal Hesab + Passwd Yox + Disabled (bax: https://fr.wikipedia.org/wiki/Active_Directory) diff --git a/htdocs/langs/az_AZ/mails.lang b/htdocs/langs/az_AZ/mails.lang index 451663ebb4f..3dc0adcc2da 100644 --- a/htdocs/langs/az_AZ/mails.lang +++ b/htdocs/langs/az_AZ/mails.lang @@ -139,7 +139,7 @@ AddNewNotification=Yeni avtomatik e-poçt bildirişinə abunə olun (hədəf/tə ListOfActiveNotifications=Avtomatik e-poçt bildirişi üçün bütün aktiv abunəliklərin (hədəflər/tədbirlər) siyahısı ListOfNotificationsDone=Göndərilən bütün avtomatik e-poçt bildirişlərinin siyahısı MailSendSetupIs=E-poçt göndərmə konfiqurasiyası '%s' üçün quraşdırılıb. Bu rejim kütləvi e-poçt göndərmək üçün istifadə edilə bilməz. -MailSendSetupIs2='%s' rejimindən istifadə etmək üçün 'b
'. Bu rejimlə siz İnternet Xidmət Provayderiniz tərəfindən təmin edilən SMTP serverinin quraşdırılmasına daxil ola və Kütləvi e-poçt göndərmə funksiyasından istifadə edə bilərsiniz. +MailSendSetupIs2=You must first go, with an admin account, into menu %sHome - Setup - EMails%s to change parameter '%s' to use mode '%s'. With this mode, you can enter setup of the SMTP server provided by your Internet Service Provider and use Mass emailing feature. MailSendSetupIs3=SMTP serverinizi necə quraşdırmaq barədə hər hansı sualınız varsa, %s ünvanına müraciət edə bilərsiniz. YouCanAlsoUseSupervisorKeyword=Siz həmçinin istifadəçinin nəzarətçisinə e-poçt göndərilməsi üçün __SUPERVISOREMAIL__ açar sözünü əlavə edə bilərsiniz (yalnız e-poçt olduqda işləyir) bu nəzarətçi üçün müəyyən edilmişdir) NbOfTargetedContacts=Hədəflənmiş əlaqə e-poçtlarının cari sayı @@ -147,7 +147,7 @@ UseFormatFileEmailToTarget=İdxal edilmiş fayl email;name;firstname;oth UseFormatInputEmailToTarget=email;name;firstname;other formatlı sətir daxil edin MailAdvTargetRecipients=Qəbul edənlər (qabaqcıl seçim) AdvTgtTitle=Üçüncü tərəfləri və ya hədəflənəcək kontaktları/ünvanları əvvəlcədən seçmək üçün daxiletmə sahələrini doldurun -AdvTgtSearchTextHelp=Joker simvol kimi %% istifadə edin. Məsələn, jean, joe, jim kimi bütün elementləri tapmaq üçün daxil edə bilərsiniz. j%%, siz də istifadə edə bilərsiniz ; dəyər üçün ayırıcı kimi və istifadə edin! bu dəyər istisna olmaqla. Məsələn jean;joe;jim%%;!jimo;!jimab07e631701f span> bütün jean, joe-ni hədəf alacaq, jim ilə başlayacaq, lakin jimo ilə deyil, jima ilə başlayan hər şey deyil +AdvTgtSearchTextHelp=Use %% as wildcards. For example to find all item like jean, joe, jim, you can input j%%, you can also use ; as separator for value, and use ! for except this value. For example jean;joe;jim%%;!jimo;!jima%% will target all jean, joe, start with jim but not jimo and not everything that starts with jima AdvTgtSearchIntHelp=int və ya float dəyərini seçmək üçün intervaldan istifadə edin AdvTgtMinVal=Minimum dəyər AdvTgtMaxVal=Maksimum dəyər @@ -182,7 +182,7 @@ IsAnAnswer=İlkin e-poçtun cavabıdır RecordCreatedByEmailCollector=%s e-poçtundan %s E-poçt Kollektoru tərəfindən yaradılmış qeyd DefaultBlacklistMailingStatus=Yeni kontakt yaratarkən '%s' sahəsi üçün defolt dəyər DefaultStatusEmptyMandatory=Boş, lakin məcburidir -WarningLimitSendByDay=XƏBƏRDARLIQ: Nümunənizin quraşdırması və ya müqaviləsi gündə e-məktubların sayını %s
. Daha çox göndərməyə cəhd nümunənizin yavaşlamasına və ya dayandırılmasına səbəb ola bilər. Daha yüksək kvotaya ehtiyacınız olarsa, dəstəyinizlə əlaqə saxlayın. +WarningLimitSendByDay=WARNING: The setup or contract of your instance limits your number of emails per day to %s. Trying to send more may result in having your instance slow down or suspended. Please contact your support if you need a higher quota. NoMoreRecipientToSendTo=E-poçtu göndərmək üçün daha alıcı yoxdur EmailOptedOut=E-poçt sahibi daha bu e-poçt ilə onunla əlaqə saxlamamağı xahiş etdi EvenUnsubscribe=İmtina e-poçtlarını daxil edin diff --git a/htdocs/langs/az_AZ/main.lang b/htdocs/langs/az_AZ/main.lang index fcfa356511c..c60b96bbfba 100644 --- a/htdocs/langs/az_AZ/main.lang +++ b/htdocs/langs/az_AZ/main.lang @@ -9,7 +9,7 @@ DIRECTION=ltr # cid0kr is for Korean # DejaVuSans is for some Eastern languages, some Asian languages and some Arabic languages # freemono is for ru_RU or uk_UA, uz_UZ -# freeserif is for Tamil +# freeserif is for Tamil or Ethiopian FONTFORPDF=DejaVuSans FONTSIZEFORPDF=10 SeparatorDecimal=. @@ -18,8 +18,8 @@ FormatDateShort=%m/%d/%Y FormatDateShortInput=%m/%d/%Y FormatDateShortJava=MM/dd/yyyy FormatDateShortJavaInput=MM/dd/yyyy -FormatDateShortJQuery=MM/dd/yy -FormatDateShortJQueryInput=MM/dd/yy +FormatDateShortJQuery=mm/dd/yy +FormatDateShortJQueryInput=mm/dd/yy FormatHourShortJQuery=HH:MI FormatHourShort=%I:%M %p FormatHourShortDuration=%H:%M @@ -68,7 +68,7 @@ ErrorNoRequestInError=Səhvdə sorğu yoxdur ErrorServiceUnavailableTryLater=Xidmət hazırda mövcud deyil. Biraz sonra yenidən cəhd edin. ErrorDuplicateField=Unikal sahədə dublikat dəyər ErrorSomeErrorWereFoundRollbackIsDone=Bəzi səhvlər tapıldı. Dəyişikliklər geri qaytarıldı. -ErrorConfigParameterNotDefined=%s parametri conf.php. +ErrorConfigParameterNotDefined=Parameter %s is not defined in the Dolibarr config file conf.php. ErrorCantLoadUserFromDolibarrDatabase=Dolibarr verilənlər bazasında %s istifadəçisini tapmaq alınmadı. ErrorNoVATRateDefinedForSellerCountry=Xəta, '%s' ölkəsi üçün ƏDV dərəcələri müəyyən edilməyib. ErrorNoSocialContributionForSellerCountry=Xəta, '%s' ölkəsi üçün sosial/fiskal vergi növü müəyyən edilməyib. @@ -103,7 +103,7 @@ RecordDeleted=Qeyd silindi RecordGenerated=Rekord yaradıldı LevelOfFeature=Xüsusiyyətlərin səviyyəsi NotDefined=Müəyyən edilməyib -DolibarrInHttpAuthenticationSoPasswordUseless=Dolibarr identifikasiyası rejimi %s konfiqurasiya faylında ayarlanıb class='notranslate'>conf.php.
Bu o deməkdir ki, parol verilənlər bazası üçün xaricidir. Dolibarr, buna görə də bu sahəni dəyişdirməyin heç bir təsiri olmaya bilər. +DolibarrInHttpAuthenticationSoPasswordUseless=Dolibarr authentication mode is set to %s in configuration file conf.php.
This means that the password database is external to Dolibarr, so changing this field may have no effect. Administrator=Sistem administratoru AdministratorDesc=Sistem administratoru (istifadəçini, icazələri idarə edə bilər, həm də sistem quraşdırması və modulların konfiqurasiyasını idarə edə bilər) Undefined=Müəyyən edilməmiş @@ -131,7 +131,7 @@ TechnicalID=Texniki ID LineID=Xətt ID NotePublic=Qeyd (ictimai) NotePrivate=Qeyd (şəxsi) -PrecisionUnitIsLimitedToXDecimals=Dolibarr vahid qiymətlərinin dəqiqliyini %sb09a4b739f17f80 ilə məhdudlaşdırmaq üçün qurulub. . +PrecisionUnitIsLimitedToXDecimals=Dolibarr was setup to limit precision of unit prices to %s decimals. DoTest=Test ToFilter=Filtr NoFilter=Filtrsiz @@ -172,7 +172,7 @@ Close=Yaxın CloseAs=Vəziyyəti təyin edin CloseBox=Vidceti idarə panelinizdən silin Confirm=Təsdiq edin -ConfirmSendCardByMail=Siz həqiqətən bu kartın məzmununu poçtla %s? +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to %s? Delete=Sil Remove=Sil Resiliate=Bitirmək @@ -267,7 +267,7 @@ Numero=Nömrə Limit=Limit Limits=Limitlər Logout=Çıxış -NoLogoutProcessWithAuthMode=Doğrulama rejimi ilə tətbiqi ayırma funksiyası yoxdur %sb09a4b739f17f80z +NoLogoutProcessWithAuthMode=No applicative disconnect feature with authentication mode %s Connection=Daxil ol Setup=Qurmaq Alert=Xəbərdarlıq @@ -420,6 +420,8 @@ TotalTTCShort=Cəmi (vergi daxil olmaqla) TotalHT=Cəmi (vergi istisna olmaqla) TotalHTforthispage=Bu səhifə üçün cəmi (vergi istisna olmaqla). Totalforthispage=Bu səhifə üçün cəmi +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=Cəmi (vergi daxil olmaqla) TotalTTCToYourCredit=Kreditinizə cəmi (vergi daxil olmaqla). TotalVAT=Ümumi vergi @@ -502,7 +504,7 @@ Completed=Tamamlandı Running=Davam edir RequestAlreadyDone=Sorğu artıq qeydə alınıb Filter=Filtr -FilterOnInto=Axtarış meyarları '%s=' sahələrində notranslate'>%s +FilterOnInto=Search criteria '%s' into fields %s RemoveFilter=Filtri çıxarın ChartGenerated=Qrafik yaradıldı ChartNotGenerated=Diaqram yaradılmadı @@ -647,6 +649,7 @@ ReportName=Hesabatın adı ReportPeriod=Hesabat dövrü ReportDescription=Təsvir Report=Hesabat +Reports=Reports Keyword=Açar söz Origin=Mənşə Legend=Əfsanə @@ -757,7 +760,7 @@ MenuMembers=Üzvlər MenuAgendaGoogle=Google gündəmi MenuTaxesAndSpecialExpenses=Vergilər | Xüsusi xərclər ThisLimitIsDefinedInSetup=Dolibarr limiti (Menyu ev quraşdırma-security): %s Kb, PHP limiti: %s Kb -ThisLimitIsDefinedInSetupAt=Dolibarr limiti (Menyu %s): %s Kb, PHP limiti (Param b0ecb2ec807f49 >): %s Kb +ThisLimitIsDefinedInSetupAt=Dolibarr limit (Menu %s): %s Kb, PHP limit (Param %s): %s Kb NoFileFound=Heç bir sənəd yüklənməyib CurrentUserLanguage=Cari dil CurrentTheme=Cari mövzu @@ -963,6 +966,7 @@ AutomaticallyCalculated=Avtomatik hesablanır TitleSetToDraft=Qaralamaya qayıdın ConfirmSetToDraft=Qaralama statusuna qayıtmaq istədiyinizə əminsiniz? ImportId=Import id +Event=Event Events=Hadisələr EMailTemplates=E-poçt şablonları FileNotShared=Fayl xarici ictimaiyyətə paylaşılmadı @@ -1048,7 +1052,7 @@ Select2NotFound=Heç bir nəticə tapılmadı Select2Enter=Daxil edin Select2MoreCharacter=və ya daha çox xarakter Select2MoreCharacters=və ya daha çox simvol -Select2MoreCharactersMore=Axtarış sintaksisi:
|b0860dez5034 notranslate'> OR (a|b)
* İstənilən simvol (a*b)
b06010d span>^$b030102d /span> (ab$)
ilə bitir +Select2MoreCharactersMore=Search syntax:
| OR (a|b)
* Any character (a*b)
^ Start with (^ab)
$ End with (ab$)
Select2LoadingMoreResults=Daha çox nəticə yüklənir... Select2SearchInProgress=Axtarış davam edir... SearchIntoThirdparties=Üçüncü tərəflər @@ -1095,7 +1099,7 @@ KeyboardShortcut=Klaviatura qısa yolu AssignedTo=təyin edilmişdir Deletedraft=Qaralamanı silin ConfirmMassDraftDeletion=Kütləvi silmə təsdiqi layihəsi -FileSharedViaALink=Public file shared via link +FileSharedViaALink=Ümumi fayl keçid vasitəsilə paylaşıldı SelectAThirdPartyFirst=Əvvəlcə üçüncü tərəf seçin... YouAreCurrentlyInSandboxMode=Siz hazırda %s "sandbox" rejimindəsiniz Inventory=İnventar @@ -1180,7 +1184,6 @@ ConfirmAffectUserQuestion=İstifadəçiləri %s seçilmiş qeyd(lər)ə təyin e ConfirmSetSupervisorQuestion=Seçilmiş qeyd(lər)ə %s nəzarətçi təyin etmək istədiyinizə əminsiniz? ConfirmUpdatePriceQuestion=%s seçilmiş qeyd(lər)in qiymətini yeniləmək istədiyinizə əminsiniz? CategTypeNotFound=Qeydlərin növü üçün etiket növü tapılmadı -Rate=Qiymətləndirmə SupervisorNotFound=Nəzarətçi tapılmadı CopiedToClipboard=Buferə kopyalandı InformationOnLinkToContract=Bu məbləğ yalnız müqavilənin bütün sətirlərinin cəmidir. Heç bir zaman anlayışı nəzərə alınmır. @@ -1213,6 +1216,7 @@ CanceledHidden=Ləğv edilib gizlədilib CanceledShown=Ləğv göstərildi Terminate=Bitirmək Terminated=Xitam verildi +Position=Position AddLineOnPosition=Mövqeyinə sətir əlavə edin (boşdursa sonunda) ConfirmAllocateCommercial=Satış nümayəndəsinin təsdiqini təyin edin ConfirmAllocateCommercialQuestion=%s seçilmiş qeyd(lər)i təyin etmək istədiyinizə əminsiniz? @@ -1230,6 +1234,7 @@ ExternalUser=Xarici istifadəçi NoSpecificContactAddress=Konkret əlaqə və ya ünvan yoxdur NoSpecificContactAddressBis=Bu tab cari obyekt üçün xüsusi kontaktları və ya ünvanları məcbur etməyə həsr olunub. Yalnız üçüncü şəxs haqqında məlumat kifayət etmədikdə və ya dəqiq olmadıqda obyekt üçün bir və ya bir neçə xüsusi əlaqə və ya ünvan müəyyən etmək istəyirsinizsə, ondan istifadə edin. HideOnVCard=%s gizlədin +ShowOnVCard=Show %s AddToContacts=Əlaqələrimə ünvan əlavə edin LastAccess=Son giriş UploadAnImageToSeeAPhotoHere=Fotoya burada baxmaq üçün %s nişanından şəkil yükləyin @@ -1259,4 +1264,7 @@ AmountSalary=Əmək haqqı məbləği InvoiceSubtype=Faktura alt növü ConfirmMassReverse=Toplu tərs təsdiqləmə ConfirmMassReverseQuestion=%s seçilmiş qeydləri geri qaytarmaq istədiyinizə əminsiniz? - +ElementType=Element type +ElementId=Element Id +Encrypted=Encrypted +Settings=Settings diff --git a/htdocs/langs/az_AZ/modulebuilder.lang b/htdocs/langs/az_AZ/modulebuilder.lang index 4eb020dc9d4..2a698e3ec95 100644 --- a/htdocs/langs/az_AZ/modulebuilder.lang +++ b/htdocs/langs/az_AZ/modulebuilder.lang @@ -91,10 +91,10 @@ ListOfMenusEntries=Menyu girişlərinin siyahısı ListOfDictionariesEntries=Lüğətlərə daxil olanların siyahısı ListOfPermissionsDefined=Müəyyən edilmiş icazələrin siyahısı SeeExamples=Burada nümunələrə baxın -EnabledDesc=Bu sahənin aktiv olması şərt.

Nümunələr:
11 span class='notranslate'>
isModEnabled('anothermodule')
getDolGlobalString('MYMODULE_OPTION')==2 +EnabledDesc=Condition to have this field active.

Examples:
1
isModEnabled('anothermodule')
getDolGlobalString('MYMODULE_OPTION')==2 VisibleDesc=Sahə görünürmü? (Nümunələr: 0=Heç vaxt görünmür, 1=Siyahıda görünür və formalar yaradın/yeniləyin/baxın, 2=Yalnız siyahıda görünür, 3=Yalnız forma yaratdıqda/yenilədikdə/görünürdə görünür (siyahılarda deyil), 4=Siyahılarda görünür və yalnız formanı yeniləmək/baxmaq (yaratmaq deyil), 5=Yalnız siyahıda görünür və formaya baxmaq (yaratmaq deyil, yeniləmək deyil).

Mənfi dəyərdən istifadə o deməkdir ki, sahə standart olaraq siyahıda göstərilmir, lakin baxmaq üçün seçilə bilər). ItCanBeAnExpression=ifadə ola bilər. Nümunə:
preg_match('/public/', $_SERVER['PHP_SELF'])?0:1
$user ->HasRight('bayram', 'bayrami_müəyyən et')?1:5 -DisplayOnPdfDesc=Bu sahəni uyğun PDF sənədlərində göstərin, siz "Mövqe" sahəsi ilə mövqeyi idarə edə bilərsiniz.
Sənəd üçün:
0 = göstərilmir
1 = display

0 = göstərilmir
= sütunda göstərilir
3 = təsvirdən sonra sətir təsviri sütununda göstərilir
4 = təsvirdən sonra təsvir sütununda göstərilir yalnız boş olmasa +DisplayOnPdfDesc=Display this field on compatible PDF documents, you can manage position with "Position" field.
For document :
0 = not displayed
1 = display
2 = display only if not empty

For document lines :
0 = not displayed
1 = displayed in a column
3 = display in line description column after the description
4 = display in description column after the description only if not empty DisplayOnPdf=PDF üzərində IsAMeasureDesc=Cəmi siyahıya daxil etmək üçün sahənin dəyəri toplana bilərmi? (Nümunələr: 1 və ya 0) SearchAllDesc=Sahə sürətli axtarış alətindən axtarış etmək üçün istifadə olunur? (Nümunələr: 1 və ya 0) @@ -111,7 +111,7 @@ TriggerDefDesc=Modulunuzdan kənar biznes hadisəsi (digər modullar tərəfind SeeIDsInUse=Quraşdırmanızda istifadə edilən ID-lərə baxın SeeReservedIDsRangeHere=Qorunan ID-lər sırasına baxın ToolkitForDevelopers=Dolibarr tərtibatçıları üçün alətlər dəsti -TryToUseTheModuleBuilder=SQL və PHP bilikləriniz varsa, doğma modul qurucusu sehrbazından istifadə edə bilərsiniz.
Modulu aktivləşdirin %s yuxarı sağ menyuda.
Xəbərdarlıq: Bu qabaqcıl tərtibatçı funksiyasıdır, edin. span class='notranslate'> istehsal saytınızda sınaqdan keçirin! +TryToUseTheModuleBuilder=If you have knowledge of SQL and PHP, you may use the native module builder wizard.
Enable the module %s and use the wizard by clicking the on the top right menu.
Warning: This is an advanced developer feature, do not experiment on your production site! SeeTopRightMenu=Üst sağ menyuda -a baxın AddLanguageFile=Dil faylı əlavə edin YouCanUseTranslationKey=Burada dil faylında olan tərcümə açarı olan açardan istifadə edə bilərsiniz ("Dillər" sekmesine baxın) @@ -148,7 +148,7 @@ CSSListClass=Siyahı üçün css NotEditable=Redaktə edilə bilməz ForeignKey=Xarici Açar ForeignKeyDesc=Bu sahənin dəyərinin başqa bir cədvəldə mövcud olmasına zəmanət verilməlidir. Buraya dəyərə uyğun sintaksisi daxil edin: tablename.parentfieldtocheck -TypeOfFieldsHelp=Nümunə:
varchar(99)
e-poçt
telefon ='notranslate'>
ip
url
parol
date
datetime
zaman damgası
'1' o deməkdir ki, biz qeyd yaratmaq üçün kombinasiyadan sonra + düyməsi əlavə edirik
'filtr' Universal Filtr sintaksisi şərti, misal: '((status:=:1) AND (fk_user:=:__USER_ID__) AND (obyekt:IN:(__SHARED_ENTITIES__))' +TypeOfFieldsHelp=Example:
varchar(99)
email
phone
ip
url
password
double(24,8)
real
text
html
date
datetime
timestamp
integer
integer:ClassName:relativepath/to/classfile.class.php[:1[:filter]]

'1' means we add a + button after the combo to create the record
'filter' is an Universal Filter syntax condition, example: '((status:=:1) AND (fk_user:=:__USER_ID__) AND (entity:IN:(__SHARED_ENTITIES__))' TypeOfFieldsHelpIntro=Bu sahənin/atributun növüdür. AsciiToHtmlConverter=Ascii-dən HTML-ə çevirici AsciiToPdfConverter=Ascii-dən PDF-ə çevirici @@ -180,7 +180,7 @@ FailedToAddCodeIntoDescriptor=Kodu deskriptora əlavə etmək alınmadı. Faylda DictionariesCreated=Lüğət %s uğurla yaradıldı DictionaryDeleted=Lüğət %s uğurla silindi PropertyModuleUpdated=%s mülkiyyəti uğurla yeniləndi -InfoForApiFile=* İlk dəfə fayl yaratdığınız zaman bütün üsullar hər obyekt üçün yaradılacaq.
* sil üzərinə kliklədiyiniz zaman, sadəcə olaraq seçilmiş obyekt. +InfoForApiFile=* When you generate file for the first time then all methods will be created for each object.
* When you click in remove you just remove all methods for the selected object. SetupFile=Modul quraşdırma səhifəsi EmailingSelectors=Emails selectors EmailingSelectorDesc=Kütləvi e-poçt göndərmə modulu üçün yeni e-poçt hədəf seçicilərini təmin etmək üçün burada sinif fayllarını yarada və redaktə edə bilərsiniz diff --git a/htdocs/langs/az_AZ/mrp.lang b/htdocs/langs/az_AZ/mrp.lang index 74bed0d9186..f7fd1aa6729 100644 --- a/htdocs/langs/az_AZ/mrp.lang +++ b/htdocs/langs/az_AZ/mrp.lang @@ -1,109 +1,138 @@ -Mrp=Manufacturing Orders -MOs=Manufacturing orders -ManufacturingOrder=Manufacturing Order -MRPDescription=Module to manage production and Manufacturing Orders (MO). -MRPArea=MRP Area -MrpSetupPage=Setup of module MRP -MenuBOM=Bills of material -LatestBOMModified=Latest %s Bills of materials modified -LatestMOModified=Latest %s Manufacturing Orders modified -Bom=Bills of Material -BillOfMaterials=Bill of Materials -BillOfMaterialsLines=Bill of Materials lines -BOMsSetup=Setup of module BOM -ListOfBOMs=List of bills of material - BOM -ListOfManufacturingOrders=List of Manufacturing Orders -NewBOM=New bill of materials -ProductBOMHelp=Product to create (or disassemble) with this BOM.
Note: Products with the property 'Nature of product' = 'Raw material' are not visible into this list. -BOMsNumberingModules=BOM numbering templates -BOMsModelModule=BOM document templates -MOsNumberingModules=MO numbering templates -MOsModelModule=MO document templates -FreeLegalTextOnBOMs=Free text on document of BOM -WatermarkOnDraftBOMs=Watermark on draft BOM -FreeLegalTextOnMOs=Free text on document of MO -WatermarkOnDraftMOs=Watermark on draft MO -ConfirmCloneBillOfMaterials=Are you sure you want to clone the bill of materials %s ? -ConfirmCloneMo=Are you sure you want to clone the Manufacturing Order %s ? -ManufacturingEfficiency=Manufacturing efficiency -ConsumptionEfficiency=Consumption efficiency -ValueOfMeansLoss=Value of 0.95 means an average of 5%% of loss during the manufacturing or the disassembly -ValueOfMeansLossForProductProduced=Value of 0.95 means an average of 5%% of loss of produced product -DeleteBillOfMaterials=Delete Bill Of Materials -DeleteMo=Delete Manufacturing Order -ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Materials? -ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order? -MenuMRP=Manufacturing Orders -NewMO=New Manufacturing Order -QtyToProduce=Qty to produce -DateStartPlannedMo=Date start planned -DateEndPlannedMo=Date end planned -KeepEmptyForAsap=Empty means 'As Soon As Possible' -EstimatedDuration=Estimated duration -EstimatedDurationDesc=Estimated duration to manufacture (or disassemble) this product using this BOM +Mrp=İstehsal Sifarişləri +MOs=İstehsal sifarişləri +ManufacturingOrder=İstehsal Sifarişi +MRPDescription=İstehsal və İstehsal Sifarişlərini (MO) idarə etmək üçün modul. +MRPArea=MRP sahəsi +MrpSetupPage=MRP modulunun qurulması +MenuBOM=Material sənədləri +LatestBOMModified=Ən son %s Dəyişdirilmiş material sənədləri +LatestMOModified=Ən son %s İstehsal Sifarişləri dəyişdirildi +Bom=Material sənədləri +BillOfMaterials=Materiallar siyahısı +BillOfMaterialsLines=Materiallar siyahısı xətləri +BOMsSetup=BOM modulunun qurulması +ListOfBOMs=Material sənədləri - BOM +ListOfManufacturingOrders=İstehsal Sifarişləri +NewBOM=Yeni materiallar siyahısı +ProductBOMHelp=Bu BOM ilə yaradılacaq (və ya söküləcək) məhsul.
Qeyd: 'Məhsulun təbiəti' = 'Xammal' xüsusiyyətinə malik məhsullar bu siyahıda görünmür. +BOMsNumberingModules=BOM nömrələmə şablonları +BOMsModelModule=BOM sənəd şablonları +MOsNumberingModules=MO nömrələmə şablonları +MOsModelModule=MO sənəd şablonları +FreeLegalTextOnBOMs=BOM sənədi üzrə pulsuz mətn +WatermarkOnDraftBOMs=BOM layihəsində su nişanı +FreeLegalTextOnMOs=MO sənədi pulsuz mətn +WatermarkOnDraftMOs=MO layihəsində su nişanı +ConfirmCloneBillOfMaterials=%s materiallarını klonlaşdırmaq istədiyinizə əminsiniz? +ConfirmCloneMo=%s İstehsal Sifarişini klonlaşdırmaq istədiyinizə əminsiniz? +ManufacturingEfficiency=İstehsal səmərəliliyi +ConsumptionEfficiency=İstehlak səmərəliliyi +Consumption=İstehlak +ValueOfMeansLoss=0,95 dəyəri istehsal və ya sökülmə zamanı orta hesabla 5%% itki deməkdir +ValueOfMeansLossForProductProduced=0,95 dəyəri istehsal olunan məhsulun orta hesabla 5%% itkisi deməkdir +DeleteBillOfMaterials=Materiallar Hesabını Sil +CancelMo=İstehsal sifarişini ləğv edin +MoCancelConsumedAndProducedLines=İstehlak olunan və istehsal olunan bütün xətləri də ləğv edin (sətirləri və ehtiyat hissələrini silin) +ConfirmCancelMo=Bu İstehsal Sifarişini ləğv etmək istədiyinizə əminsiniz? +DeleteMo=İstehsal sifarişini silin +ConfirmDeleteBillOfMaterials=Bu Material Sənədini silmək istədiyinizə əminsiniz? +ConfirmDeleteMo=Bu İstehsal Sifarişini silmək istədiyinizə əminsiniz? +DeleteMoChild = Bu MO ilə əlaqəli uşaq MO-ları silin %s +MoChildsDeleted = Bütün uşaq MO-lar silindi +MenuMRP=İstehsal Sifarişləri +NewMO=Yeni İstehsal Sifarişi +QtyToProduce=İstehsal ediləcək miqdar +DateStartPlannedMo=Planlaşdırılan başlanğıc tarixi +DateEndPlannedMo=Planlaşdırılan bitmə tarixi +KeepEmptyForAsap=Boş 'mümkün qədər tez' deməkdir +EstimatedDuration=Təxmini müddət +EstimatedDurationDesc=Bu BOM-dan istifadə edərək bu məhsulun istehsalı (və ya sökülməsi) üçün təxmini müddət ConfirmValidateBom=Are you sure you want to validate the BOM with the reference %s (you will be able to use it to build new Manufacturing Orders) -ConfirmCloseBom=Are you sure you want to cancel this BOM (you won't be able to use it to build new Manufacturing Orders anymore) ? -ConfirmReopenBom=Are you sure you want to re-open this BOM (you will be able to use it to build new Manufacturing Orders) -StatusMOProduced=Produced -QtyFrozen=Frozen Qty -QuantityFrozen=Frozen Quantity -QuantityConsumedInvariable=When this flag is set, the quantity consumed is always the value defined and is not relative to the quantity produced. -DisableStockChange=Stock change disabled -DisableStockChangeHelp=When this flag is set, there is no stock change on this product, whatever is the quantity consumed -BomAndBomLines=Bills Of Material and lines -BOMLine=Line of BOM -WarehouseForProduction=Warehouse for production -CreateMO=Create MO -ToConsume=To consume -ToProduce=To produce -ToObtain=To obtain -QtyAlreadyConsumed=Qty already consumed -QtyAlreadyProduced=Qty already produced -QtyRequiredIfNoLoss=Qty required if there is no loss (Manufacturing efficiency is 100%%) -ConsumeOrProduce=Consume or Produce -ConsumeAndProduceAll=Consume and Produce All -Manufactured=Manufactured -TheProductXIsAlreadyTheProductToProduce=The product to add is already the product to produce. -ForAQuantityOf=For a quantity to produce of %s -ForAQuantityToConsumeOf=For a quantity to disassemble of %s -ConfirmValidateMo=Are you sure you want to validate this Manufacturing Order? -ConfirmProductionDesc=By clicking on '%s', you will validate the consumption and/or production for the quantities set. This will also update the stock and record stock movements. -ProductionForRef=Production of %s -AutoCloseMO=Close automatically the Manufacturing Order if quantities to consume and to produce are reached -NoStockChangeOnServices=No stock change on services -ProductQtyToConsumeByMO=Product quantity still to consume by open MO -ProductQtyToProduceByMO=Product quantity still to produce by open MO -AddNewConsumeLines=Add new line to consume -AddNewProduceLines=Add new line to produce -ProductsToConsume=Products to consume -ProductsToProduce=Products to produce -UnitCost=Unit cost -TotalCost=Total cost -BOMTotalCost=The cost to produce this BOM based on cost of each quantity and product to consume (use Cost price if defined, else Average Weighted Price if defined, else the Best purchase price) -GoOnTabProductionToProduceFirst=You must first have started the production to close a Manufacturing Order (See tab '%s'). But you can Cancel it. -ErrorAVirtualProductCantBeUsedIntoABomOrMo=A kit can't be used into a BOM or a MO -Workstation=Workstation -Workstations=Workstations -WorkstationsDescription=Workstations management -WorkstationSetup = Workstations setup -WorkstationSetupPage = Workstations setup page -WorkstationList=Workstation list -WorkstationCreate=Add new workstation -ConfirmEnableWorkstation=Are you sure you want to enable workstation %s ? -EnableAWorkstation=Enable a workstation -ConfirmDisableWorkstation=Are you sure you want to disable workstation %s ? -DisableAWorkstation=Disable a workstation -DeleteWorkstation=Delete -NbOperatorsRequired=Number of operators required -THMOperatorEstimated=Estimated operator THM -THMMachineEstimated=Estimated machine THM -WorkstationType=Workstation type -Human=Human -Machine=Machine -HumanMachine=Human / Machine -WorkstationArea=Workstation area -Machines=Machines -THMEstimatedHelp=This rate makes it possible to define a forecast cost of the item -BOM=Bill Of Materials -CollapseBOMHelp=You can define the default display of the details of the nomenclature in the configuration of the BOM module -MOAndLines=Manufacturing Orders and lines +ConfirmCloseBom=Bu BOM-u ləğv etmək istədiyinizə əminsiniz (daha yeni İstehsal Sifarişləri yaratmaq üçün ondan istifadə edə bilməyəcəksiniz)? +ConfirmReopenBom=Bu BOM-u yenidən açmaq istədiyinizə əminsiniz (onu yeni İstehsal Sifarişləri yaratmaq üçün istifadə edə biləcəksiniz) +StatusMOProduced=İstehsal edilmişdir +QtyFrozen=Dondurulmuş Miqdar +QuantityFrozen=Dondurulmuş Miqdarı +QuantityConsumedInvariable=Bu bayraq qoyulduqda, istehlak edilən kəmiyyət həmişə müəyyən edilmiş dəyərdir və istehsal edilən kəmiyyətə nisbi deyil. +DisableStockChange=Səhm dəyişikliyi deaktiv edilib +DisableStockChangeHelp=Bu bayraq qoyulduqda, istehlak edilən miqdar nə olursa olsun, bu məhsulda heç bir ehtiyat dəyişikliyi yoxdur +BomAndBomLines=Material vərəqələri və xətlər +BOMLine=BOM xətti +WarehouseForProduction=İstehsal üçün anbar +CreateMO=MO yaradın +ToConsume=İstehlak etmək +ToProduce=İstehsal +ToObtain=əldə etmək +QtyAlreadyConsumed=Miqdar artıq istehlak edilmişdir +QtyAlreadyProduced=Miqdar artıq istehsal olunub +QtyAlreadyConsumedShort=İstehlak olunan miqdar +QtyAlreadyProducedShort=Miqdar istehsal olunur +QtyRequiredIfNoLoss=İtki olmadıqda BOM-da müəyyən edilmiş kəmiyyəti istehsal etmək üçün tələb olunan miqdar (istehsal səmərəliliyi 100%% olarsa) +ConsumeOrProduce=İstehlak et və ya istehsal et +ConsumeAndProduceAll=Hamısını istehlak et və istehsal et +Manufactured=İstehsal edilmişdir +TheProductXIsAlreadyTheProductToProduce=Əlavə ediləcək məhsul artıq istehsal olunacaq məhsuldur. +ForAQuantityOf=%s istehsal ediləcək miqdar üçün +ForAQuantityToConsumeOf=%s söküləcək miqdar üçün +ConfirmValidateMo=Bu İstehsal Sifarişini doğrulamaq istədiyinizə əminsiniz? +ConfirmProductionDesc='%s' üzərinə klikləməklə siz təyin edilmiş kəmiyyətlər üçün istehlakı və/yaxud istehsalı təsdiq edəcəksiniz. Bu, həmçinin fondu yeniləyəcək və səhmlərin hərəkətini qeyd edəcək. +ProductionForRef=%s istehsalı +CancelProductionForRef=%s məhsulu üçün məhsul ehtiyatının azalmasının ləğvi +TooltipDeleteAndRevertStockMovement=Xətti silin və fond hərəkətini bərpa edin +AutoCloseMO=İstehlak ediləcək və istehsal ediləcək miqdarlara çatdıqda, İstehsal Sifarişini avtomatik bağlayın +NoStockChangeOnServices=Xidmətlərdə ehtiyat dəyişikliyi yoxdur +ProductQtyToConsumeByMO=Açıq MO ilə hələ də istehlak ediləcək məhsulun miqdarı +ProductQtyToProduceByMO=Hələ açıq MO ilə istehsal ediləcək məhsulun miqdarı +AddNewConsumeLines=İstehlak etmək üçün yeni sətir əlavə edin +AddNewProduceLines=İstehsal etmək üçün yeni xətt əlavə edin +ProductsToConsume=İstehlak ediləcək məhsullar +ProductsToProduce=İstehsal ediləcək məhsullar +UnitCost=Vahid dəyəri +TotalCost=Ümumi xərc +BOMTotalCost=İstehlak ediləcək hər bir kəmiyyətin və məhsulun maya dəyərinə əsaslanan bu BOM-u istehsal etmək üçün xərclər (müəyyən olunarsa Xərc qiymətindən, müəyyən edilərsə, Orta Çəkili Qiymətdən istifadə edin, əks halda Ən Yaxşı alış qiymətini istifadə edin) +BOMTotalCostService=Əgər “İş stansiyası” modulu işə salınıbsa və xətdə defolt olaraq iş stansiyası müəyyən edilibsə, o zaman hesablama “kəmiyyət (saata çevrilmiş) x iş stansiyası ahr”, əks halda “kəmiyyət x xidmətin dəyəri qiyməti”dir. +GoOnTabProductionToProduceFirst=İstehsal Sifarişini bağlamaq üçün əvvəlcə istehsala başlamalısınız ('%s' nişanına baxın). Amma Ləğv edə bilərsiniz. +ErrorAVirtualProductCantBeUsedIntoABomOrMo=Kitdən BOM və ya MO-da istifadə edilə bilməz +Workstation=İş stansiyası +Workstations=İş stansiyaları +WorkstationsDescription=İş stansiyalarının idarə edilməsi +WorkstationSetup = İş stansiyalarının qurulması +WorkstationSetupPage = İş stansiyalarının quraşdırma səhifəsi +WorkstationList=İş stansiyalarının siyahısı +WorkstationCreate=Yeni iş stansiyası əlavə edin +ConfirmEnableWorkstation=%s iş stansiyasını aktivləşdirmək istədiyinizə əminsiniz? +EnableAWorkstation=İş stansiyasını aktivləşdirin +ConfirmDisableWorkstation=%s iş stansiyasını deaktiv etmək istədiyinizə əminsiniz? +DisableAWorkstation=İş stansiyasını söndürün +DeleteWorkstation=Sil +NbOperatorsRequired=Tələb olunan operatorların sayı +THMOperatorEstimated=Təxmini operator THM +THMMachineEstimated=Təxmini maşın THM +WorkstationType=İş stansiyasının növü +DefaultWorkstation=Defolt iş stansiyası +Human=İnsan +Machine=Maşın +HumanMachine=İnsan / Maşın +WorkstationArea=İş yeri sahəsi +Machines=Maşınlar +THMEstimatedHelp=Bu dərəcə obyektin proqnoz dəyərini müəyyən etməyə imkan verir +BOM=Materiallar siyahısı +CollapseBOMHelp=Siz BOM modulunun konfiqurasiyasında nomenklatura təfərrüatlarının standart ekranını təyin edə bilərsiniz +MOAndLines=İstehsal sifarişləri və xətləri +MoChildGenerate=Uşaq Mo yaradın +ParentMo=MO Valideyn +MOChild=MO Uşaq +BomCantAddChildBom=%s nomenklaturası artıq %s nomenklaturasına aparan ağacda mövcuddur. +BOMNetNeeds = BOM Net Ehtiyacları +BOMProductsList=BOM məhsulları +BOMServicesList=BOM xidmətləri +Manufacturing=İstehsalat +Disassemble=Sökmək +ProducedBy=tərəfindən istehsal edilmişdir +QtyTot=Cəmi Miqdar + +QtyCantBeSplit= Kəmiyyət bölünə bilməz +NoRemainQtyToDispatch=Bölünəcək kəmiyyət qalmayıb + +THMOperatorEstimatedHelp=Operatorun bir saat üçün təxmini dəyəri. Bu iş stansiyasından istifadə edərək BOM-un dəyərini qiymətləndirmək üçün istifadə olunacaq. +THMMachineEstimatedHelp=Maşının saatda təxmini dəyəri. Bu iş stansiyasından istifadə edərək BOM-un dəyərini qiymətləndirmək üçün istifadə olunacaq. diff --git a/htdocs/langs/az_AZ/multicurrency.lang b/htdocs/langs/az_AZ/multicurrency.lang index 0c394e074d8..2a329aa893d 100644 --- a/htdocs/langs/az_AZ/multicurrency.lang +++ b/htdocs/langs/az_AZ/multicurrency.lang @@ -7,7 +7,7 @@ multicurrency_syncronize_error=Sinxronizasiya xətası: %s MULTICURRENCY_USE_RATE_ON_DOCUMENT_DATE=Ən son məlum məzənnədən istifadə etmək əvəzinə, valyuta məzənnəsini tapmaq üçün sənədin tarixindən istifadə edin multicurrency_useOriginTx=Bir obyekt digərindən yaradıldıqda, mənbə obyektindən orijinal sürəti saxlayın (əks halda ən son məlum sürətdən istifadə edin) CurrencyLayerAccount=CurrencyLayer API -CurrencyLayerAccount_help_to_synchronize=Bu funksiyadan istifadə etmək üçün %s saytında hesab yaratmalısınız.
b0aee83365837z əldə edin /span>API açarı
.
Pulsuz hesab istifadə edirsinizsə, mənbə valyutası (standart olaraq ABŞ dolları).
Əsas valyutanız ABŞ dolları deyilsə, proqram onu avtomatik olaraq yenidən hesablayacaq.

Siz ayda 1000 sinxronizasiya ilə məhdudlaşırsınız. +CurrencyLayerAccount_help_to_synchronize=You must create an account on website %s to use this functionality.
Get your API key.
If you use a free account, you can't change the source currency (USD by default).
If your main currency is not USD, the application will automatically recalculate it.

You are limited to 1000 synchronizations per month. multicurrency_appId=API açarı multicurrency_appCurrencySource=Mənbə valyutası multicurrency_alternateCurrencySource=Alternativ mənbə valyutası @@ -25,7 +25,7 @@ CreateRate=Dərəcə yaradın FormCreateRate=Qiymətləndirmənin yaradılması FormUpdateRate=Dərəcənin dəyişdirilməsi successRateCreate=%s valyuta məzənnəsi verilənlər bazasına əlavə edildi -ConfirmDeleteLineRate=%s%s valyutası üçün %s məzənnəsini silmək istədiyinizə əminsiniz > tarix? +ConfirmDeleteLineRate=Are you sure you want to remove the %s rate for currency %s on %s date? DeleteLineRate=Təmiz məzənnə successRateDelete=Qiymət silindi errorRateDelete=Qiyməti silərkən xəta diff --git a/htdocs/langs/az_AZ/oauth.lang b/htdocs/langs/az_AZ/oauth.lang index fdf93cdf90b..0a01e8e27c1 100644 --- a/htdocs/langs/az_AZ/oauth.lang +++ b/htdocs/langs/az_AZ/oauth.lang @@ -29,7 +29,7 @@ OAUTH_GOOGLE_SECRET=OAuth Google Gizli OAUTH_GITHUB_NAME=OAuth GitHub xidməti OAUTH_GITHUB_ID=OAuth GitHub İD OAUTH_GITHUB_SECRET=OAuth GitHub sirri -OAUTH_URL_FOR_CREDENTIAL=
bu səhifəyə keçin
? +ConfirmMakeOrder=Are you sure you want to confirm you made this order on %s? GenerateBill=Faktura yaradın ClassifyShipped=Təslim edildi PassedInShippedStatus=təsnif edilir diff --git a/htdocs/langs/az_AZ/other.lang b/htdocs/langs/az_AZ/other.lang index 49ff93dd589..fedb2694e7e 100644 --- a/htdocs/langs/az_AZ/other.lang +++ b/htdocs/langs/az_AZ/other.lang @@ -1,305 +1,340 @@ # Dolibarr language file - Source file is en_US - other -SecurityCode=Security code +SecurityCode=Təhlükəsizlik kodu NumberingShort=N° -Tools=Tools -TMenuTools=Tools -ToolsDesc=All tools not included in other menu entries are grouped here.
All the tools can be accessed via the left menu. -Birthday=Birthday -BirthdayAlertOn=birthday alert active -BirthdayAlertOff=birthday alert inactive -TransKey=Translation of the key TransKey -MonthOfInvoice=Month (number 1-12) of invoice date -TextMonthOfInvoice=Month (text) of invoice date -PreviousMonthOfInvoice=Previous month (number 1-12) of invoice date -TextPreviousMonthOfInvoice=Previous month (text) of invoice date -NextMonthOfInvoice=Following month (number 1-12) of invoice date -TextNextMonthOfInvoice=Following month (text) of invoice date -PreviousMonth=Previous month -CurrentMonth=Current month -ZipFileGeneratedInto=Zip file generated into %s. -DocFileGeneratedInto=Doc file generated into %s. -JumpToLogin=Disconnected. Go to login page... -MessageForm=Message on online payment form -MessageOK=Message on the return page for a validated payment -MessageKO=Message on the return page for a canceled payment -ContentOfDirectoryIsNotEmpty=Content of this directory is not empty. -DeleteAlsoContentRecursively=Check to delete all content recursively +Tools=Alətlər +TMenuTools=Alətlər +ToolsDesc=Digər menyu girişlərinə daxil olmayan bütün alətlər burada qruplaşdırılıb.
Bütün alətlərə sol menyu vasitəsilə daxil olmaq olar. +Birthday=Ad günü +BirthdayAlert=Ad günü xəbərdarlığı +BirthdayAlertOn=ad günü xəbərdarlığı aktivdir +BirthdayAlertOff=ad günü xəbərdarlığı qeyri-aktiv +TransKey=TransKey açarının tərcüməsi +MonthOfInvoice=Faktura tarixinin ayı (nömrə 1-12). +TextMonthOfInvoice=Faktura tarixinin ayı (mətni). +PreviousMonthOfInvoice=Faktura tarixinin əvvəlki ayı (nömrə 1-12). +TextPreviousMonthOfInvoice=Faktura tarixinin əvvəlki ayı (mətni). +NextMonthOfInvoice=Faktura tarixindən sonrakı ay (nömrə 1-12). +TextNextMonthOfInvoice=Faktura tarixinin sonrakı ayı (mətni). +PreviousMonth=Əvvəlki ay +CurrentMonth=Cari ay +ZipFileGeneratedInto=Zip faylı %s-da yaradıldı. +DocFileGeneratedInto=Sənəd faylı %s-da yaradıldı. +JumpToLogin=Bağlantı kəsildi. Giriş səhifəsinə keçin... +MessageForm=Onlayn ödəniş formasında mesaj +MessageOK=Təsdiqlənmiş ödəniş üçün geri qaytarma səhifəsində mesaj +MessageKO=Ləğv edilmiş ödəniş üçün geri qaytarma səhifəsində mesaj +ContentOfDirectoryIsNotEmpty=Bu kataloqun məzmunu boş deyil. +DeleteAlsoContentRecursively=Bütün məzmunu rekursiv silmək üçün yoxlayın PoweredBy=Powered by -YearOfInvoice=Year of invoice date -PreviousYearOfInvoice=Previous year of invoice date -NextYearOfInvoice=Following year of invoice date -DateNextInvoiceBeforeGen=Date of next invoice (before generation) -DateNextInvoiceAfterGen=Date of next invoice (after generation) -GraphInBarsAreLimitedToNMeasures=Grapics are limited to %s measures in 'Bars' mode. The mode 'Lines' was automatically selected instead. -OnlyOneFieldForXAxisIsPossible=Only 1 field is currently possible as X-Axis. Only the first selected field has been selected. -AtLeastOneMeasureIsRequired=At least 1 field for measure is required -AtLeastOneXAxisIsRequired=At least 1 field for X-Axis is required -LatestBlogPosts=Latest Blog Posts -notiftouser=To users -notiftofixedemail=To fixed mail -notiftouserandtofixedemail=To user and fixed mail -Notify_ORDER_VALIDATE=Sales order validated -Notify_ORDER_SENTBYMAIL=Sales order sent by mail -Notify_ORDER_SUPPLIER_SENTBYMAIL=Purchase order sent by email -Notify_ORDER_SUPPLIER_VALIDATE=Purchase order recorded -Notify_ORDER_SUPPLIER_APPROVE=Purchase order approved -Notify_ORDER_SUPPLIER_REFUSE=Purchase order refused -Notify_PROPAL_VALIDATE=Customer proposal validated -Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed -Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused -Notify_PROPAL_SENTBYMAIL=Commercial proposal sent by mail -Notify_WITHDRAW_TRANSMIT=Transmission withdrawal -Notify_WITHDRAW_CREDIT=Credit withdrawal -Notify_WITHDRAW_EMIT=Perform withdrawal -Notify_COMPANY_CREATE=Third party created -Notify_COMPANY_SENTBYMAIL=Mails sent from third party card -Notify_BILL_VALIDATE=Customer invoice validated -Notify_BILL_UNVALIDATE=Customer invoice unvalidated -Notify_BILL_PAYED=Customer invoice paid -Notify_BILL_CANCEL=Customer invoice canceled -Notify_BILL_SENTBYMAIL=Customer invoice sent by mail -Notify_BILL_SUPPLIER_VALIDATE=Vendor invoice validated -Notify_BILL_SUPPLIER_PAYED=Vendor invoice paid -Notify_BILL_SUPPLIER_SENTBYMAIL=Vendor invoice sent by mail -Notify_BILL_SUPPLIER_CANCELED=Vendor invoice cancelled -Notify_CONTRACT_VALIDATE=Contract validated -Notify_FICHINTER_VALIDATE=Intervention validated -Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention -Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail -Notify_SHIPPING_VALIDATE=Shipping validated -Notify_SHIPPING_SENTBYMAIL=Shipping sent by mail -Notify_MEMBER_VALIDATE=Member validated -Notify_MEMBER_MODIFY=Member modified -Notify_MEMBER_SUBSCRIPTION=Member subscribed -Notify_MEMBER_RESILIATE=Member terminated -Notify_MEMBER_DELETE=Member deleted -Notify_PROJECT_CREATE=Project creation -Notify_TASK_CREATE=Task created -Notify_TASK_MODIFY=Task modified -Notify_TASK_DELETE=Task deleted -Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required) -Notify_EXPENSE_REPORT_APPROVE=Expense report approved -Notify_HOLIDAY_VALIDATE=Leave request validated (approval required) -Notify_HOLIDAY_APPROVE=Leave request approved -Notify_ACTION_CREATE=Added action to Agenda -SeeModuleSetup=See setup of module %s -NbOfAttachedFiles=Number of attached files/documents -TotalSizeOfAttachedFiles=Total size of attached files/documents -MaxSize=Maximum size -AttachANewFile=Attach a new file/document -LinkedObject=Linked object -NbOfActiveNotifications=Number of notifications (no. of recipient emails) -PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe lines are separated by a carriage return.\n\n__USER_SIGNATURE__ +YearOfInvoice=Faktura tarixi +PreviousYearOfInvoice=Faktura tarixinin əvvəlki ili +NextYearOfInvoice=Faktura tarixindən sonrakı il +DateNextInvoiceBeforeGen=Növbəti hesab-fakturanın tarixi (generasiyadan əvvəl) +DateNextInvoiceAfterGen=Növbəti faktura tarixi (nəsildən sonra) +GraphInBarsAreLimitedToNMeasures=Qrafiklər 'Barlar' rejimində %s ölçüləri ilə məhdudlaşır. Bunun əvəzinə "Xətlər" rejimi avtomatik seçildi. +OnlyOneFieldForXAxisIsPossible=Hal-hazırda X-Axis olaraq yalnız 1 sahə mümkündür. Yalnız ilk seçilmiş sahə seçilmişdir. +AtLeastOneMeasureIsRequired=Ölçü üçün ən azı 1 sahə tələb olunur +AtLeastOneXAxisIsRequired=X-Axis üçün ən azı 1 sahə tələb olunur +LatestBlogPosts=Ən son Bloq Yazıları +notiftouser=İstifadəçilərə +notiftofixedemail=Sabit poçta +notiftouserandtofixedemail=İstifadəçiyə və sabit poçta +Notify_ORDER_VALIDATE=Satış sifarişi təsdiqləndi +Notify_ORDER_SENTBYMAIL=Satış sifarişi poçtla göndərilir +Notify_ORDER_CLOSE=Satış sifarişi çatdırılır +Notify_ORDER_SUPPLIER_SENTBYMAIL=Satınalma sifarişi e-poçt vasitəsilə göndərilir +Notify_ORDER_SUPPLIER_VALIDATE=Satınalma sifarişi qeydə alınıb +Notify_ORDER_SUPPLIER_APPROVE=Satınalma sifarişi təsdiqləndi +Notify_ORDER_SUPPLIER_SUBMIT=Satınalma sifarişi təqdim edildi +Notify_ORDER_SUPPLIER_REFUSE=Satınalma sifarişi rədd edildi +Notify_PROPAL_VALIDATE=Müştəri təklifi təsdiqləndi +Notify_PROPAL_CLOSE_SIGNED=Müştəri təklifi bağlanıb imzalanıb +Notify_PROPAL_CLOSE_REFUSED=Müştəri təklifi bağlandı rədd edildi +Notify_PROPAL_SENTBYMAIL=Kommersiya təklifi poçtla göndərilir +Notify_WITHDRAW_TRANSMIT=Transmissiyanın çıxarılması +Notify_WITHDRAW_CREDIT=Kreditin çıxarılması +Notify_WITHDRAW_EMIT=Çıxarmağı həyata keçirin +Notify_COMPANY_CREATE=Üçüncü tərəf yaradıldı +Notify_COMPANY_SENTBYMAIL=Üçüncü tərəfin səhifəsindən göndərilən məktublar +Notify_BILL_VALIDATE=Müştəri fakturası təsdiqləndi +Notify_BILL_UNVALIDATE=Müştəri fakturası təsdiqlənməyib +Notify_BILL_PAYED=Müştəri hesab-fakturası ödənildi +Notify_BILL_CANCEL=Müştəri fakturası ləğv edildi +Notify_BILL_SENTBYMAIL=Müştəri fakturası poçtla göndərilir +Notify_BILL_SUPPLIER_VALIDATE=Satıcı fakturası təsdiqləndi +Notify_BILL_SUPPLIER_PAYED=Satıcı fakturası ödənilib +Notify_BILL_SUPPLIER_SENTBYMAIL=Satıcı fakturası poçtla göndərilir +Notify_BILL_SUPPLIER_CANCELED=Satıcı fakturası ləğv edildi +Notify_CONTRACT_VALIDATE=Müqavilə təsdiqləndi +Notify_FICHINTER_VALIDATE=Müdaxilə təsdiqləndi +Notify_FICHINTER_CLOSE=Müdaxilə bağlandı +Notify_FICHINTER_ADD_CONTACT=Müdaxilə əlaqə əlavə edildi +Notify_FICHINTER_SENTBYMAIL=Müdaxilə poçtla göndərildi +Notify_SHIPPING_VALIDATE=Göndərmə təsdiqləndi +Notify_SHIPPING_SENTBYMAIL=Çatdırılma poçtla göndərilir +Notify_MEMBER_VALIDATE=Üzv təsdiqləndi +Notify_MEMBER_MODIFY=Üzv dəyişdirildi +Notify_MEMBER_SUBSCRIPTION=Üzv abunə oldu +Notify_MEMBER_RESILIATE=Üzv ləğv edildi +Notify_MEMBER_DELETE=Üzv silindi +Notify_PROJECT_CREATE=Layihənin yaradılması +Notify_TASK_CREATE=Tapşırıq yaradıldı +Notify_TASK_MODIFY=Tapşırıq dəyişdirildi +Notify_TASK_DELETE=Tapşırıq silindi +Notify_EXPENSE_REPORT_VALIDATE=Xərc hesabatı təsdiqləndi (təsdiq tələb olunur) +Notify_EXPENSE_REPORT_APPROVE=Xərc hesabatı təsdiq edildi +Notify_HOLIDAY_VALIDATE=Sorğunu təsdiqlənmiş buraxın (təsdiq tələb olunur) +Notify_HOLIDAY_APPROVE=Sorğunu təsdiq edilmiş buraxın +Notify_ACTION_CREATE=Gündəliyə fəaliyyət əlavə edildi +SeeModuleSetup=%s modulunun quraşdırılmasına baxın +NbOfAttachedFiles=Əlavə edilmiş faylların/sənədlərin sayı +TotalSizeOfAttachedFiles=Əlavə edilmiş faylların/sənədlərin ümumi ölçüsü +MaxSize=Maksimum ölçü +AttachANewFile=Yeni fayl/sənəd əlavə edin +LinkedObject=Əlaqədar obyekt +NbOfActiveNotifications=Bildirişlərin sayı (alıcı e-poçtlarının sayı) +PredefinedMailTest=__(Salam)__\nBu __EMAIL__ ünvanına göndərilmiş sınaq məktubudur.\nXətlər bir vaqonun geri dönüşü ilə ayrılır.\n\n__USER_SİGNATURE__ PredefinedMailTestHtml=__(Hello)__
This is a test mail sent to __EMAIL__ (the word test must be in bold).
The lines are separated by a carriage return.

__USER_SIGNATURE__ -PredefinedMailContentContract=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find invoice __REF__ attached \n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to remind you that the invoice __REF__ seems to have not been paid. A copy of the invoice is attached as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find commercial proposal __REF__ attached \n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find price request __REF__ attached\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find order __REF__ attached\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find our order __REF__ attached\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find invoice __REF__ attached\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find shipping __REF__ attached\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find intervention __REF__ attached\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n -PredefinedMailContentGeneric=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendActionComm=Event reminder "__EVENT_LABEL__" on __EVENT_DATE__ at __EVENT_TIME__

This is an automatic message, please do not reply. -DemoDesc=Dolibarr is a compact ERP/CRM supporting several business modules. A demo showcasing all modules makes no sense as this scenario never occurs (several hundred available). So, several demo profiles are available. -ChooseYourDemoProfil=Choose the demo profile that best suits your needs... -ChooseYourDemoProfilMore=...or build your own profile
(manual module selection) -DemoFundation=Manage members of a foundation -DemoFundation2=Manage members and bank account of a foundation -DemoCompanyServiceOnly=Company or freelance selling service only -DemoCompanyShopWithCashDesk=Manage a shop with a cash desk -DemoCompanyProductAndStocks=Shop selling products with Point Of Sales -DemoCompanyManufacturing=Company manufacturing products -DemoCompanyAll=Company with multiple activities (all main modules) -CreatedBy=Created by %s -ModifiedBy=Modified by %s -ValidatedBy=Validated by %s -SignedBy=Signed by %s -ClosedBy=Closed by %s -CreatedById=User id who created -ModifiedById=User id who made latest change -ValidatedById=User id who validated -CanceledById=User id who canceled -ClosedById=User id who closed -CreatedByLogin=User login who created -ModifiedByLogin=User login who made latest change -ValidatedByLogin=User login who validated -CanceledByLogin=User login who canceled -ClosedByLogin=User login who closed -FileWasRemoved=File %s was removed -DirWasRemoved=Directory %s was removed -FeatureNotYetAvailable=Feature not yet available in the current version -FeatureNotAvailableOnDevicesWithoutMouse=Feature not available on devices without mouse -FeaturesSupported=Supported features -Width=Width -Height=Height -Depth=Depth -Top=Top -Bottom=Bottom -Left=Left -Right=Right -CalculatedWeight=Calculated weight -CalculatedVolume=Calculated volume -Weight=Weight +PredefinedMailContentContract=__(Salam)__\n\n\n__(Hörmətlə)__\n\n__USER_SİGNATURE__ +PredefinedMailContentSendInvoice=__(Salam)__\n\nZəhmət olmasa __REF__ fakturasını əlavə edin\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Hörmətlə)__\n\n__USER_SİGNATURE__ +PredefinedMailContentSendInvoiceReminder=__(Salam)__\n\nNəzərinizə çatdırmaq istərdik ki, __REF__ hesab-fakturasının ödənilmədiyi görünür. Xatırlatma kimi fakturanın surəti əlavə olunur.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Hörmətlə)__\n\n__USER_SİGNATURE__ +PredefinedMailContentSendProposal=__(Salam)__\n\n__REF__ kommersiya təklifini əlavə edin\n\n\n__(Hörmətlə)__\n\n__USER_SİGNATURE__ +PredefinedMailContentSendSupplierProposal=__(Salam)__\n\nZəhmət olmasa qiymət sorğusunu __REF__ əlavə edin\n\n\n__(Hörmətlə)__\n\n__USER_SİGNATURE__ +PredefinedMailContentSendOrder=__(Salam)__\n\n__REF__ sifarişini əlavə edin\n\n\n__(Hörmətlə)__\n\n__USER_SİGNATURE__ +PredefinedMailContentSendSupplierOrder=__(Salam)__\n\nZəhmət olmasa sifarişimizi __REF__ əlavə edin\n\n\n__(Hörmətlə)__\n\n__USER_SİGNATURE__ +PredefinedMailContentSendSupplierInvoice=__(Salam)__\n\nZəhmət olmasa __REF__ fakturasını əlavə edin\n\n\n__(Hörmətlə)__\n\n__USER_SİGNATURE__ +PredefinedMailContentSendShipping=__(Salam)__\n\nZəhmət olmasa, göndərməni __REF__ əlavə edin\n\n\n__(Hörmətlə)__\n\n__USER_SİGNATURE__ +PredefinedMailContentSendFichInter=__(Salam)__\n\n__REF__ müdaxiləsini əlavə edin\n\n\n__(Hörmətlə)__\n\n__USER_SİGNATURE__ +PredefinedMailContentLink=Ödənişiniz hələ həyata keçirilməyibsə, onu etmək üçün aşağıdakı linkə klikləyə bilərsiniz.\n\n%s\n\n +PredefinedMailContentGeneric=__(Salam)__\n\n\n__(Hörmətlə)__\n\n__USER_SİGNATURE__ +PredefinedMailContentSendActionComm="__EVENT_LABEL__" hadisə xatırladıcısı, __EVENT_DATE__ tarixində __EVENT_TIME__

Bu, avtomatik olaraq təkrar mesaj deyil. +DemoDesc=Dolibarr bir neçə biznes modulunu dəstəkləyən kompakt ERP/CRM-dir. Bütün modulları nümayiş etdirən demo heç bir məna kəsb etmir, çünki bu ssenari heç vaxt baş vermir (bir neçə yüz mövcuddur). Beləliklə, bir neçə demo profil mövcuddur. +ChooseYourDemoProfil=Ehtiyaclarınıza ən uyğun demo profili seçin... +ChooseYourDemoProfilMore=...və ya öz profilinizi yaradın
(əl ilə modul seçimi) +DemoFundation=Bir fondun üzvlərini idarə edin +DemoFundation2=Bir fondun üzvlərini və bank hesabını idarə edin +DemoCompanyServiceOnly=Yalnız şirkət və ya sərbəst satış xidməti +DemoCompanyShopWithCashDesk=Nağd pul qutusu olan bir mağaza idarə edin +DemoCompanyProductAndStocks=Satış nöqtəsi ilə məhsul satan mağazalar +DemoCompanyManufacturing=Şirkət məhsulları istehsal edir +DemoCompanyAll=Çox fəaliyyət göstərən şirkət (bütün əsas modullar) +CreatedBy=Yaradıb: %s +ModifiedBy=%s tərəfindən dəyişdirilib +ValidatedBy=%s tərəfindən təsdiq edilib +SignedBy=%s tərəfindən imzalanıb +ClosedBy=%s tərəfindən bağlanıb +CreatedById=Yaradan istifadəçi identifikatoru +ModifiedById=Ən son dəyişiklik edən istifadəçi identifikatoru +ValidatedById=Doğrulayan istifadəçi identifikatoru +CanceledById=Ləğv edən istifadəçi identifikatoru +ClosedById=Bağlayan istifadəçi identifikatoru +CreatedByLogin=Yaradan istifadəçi girişi +ModifiedByLogin=Ən son dəyişikliyi edən istifadəçi girişi +ValidatedByLogin=Doğrulayan istifadəçi girişi +CanceledByLogin=Ləğv edən istifadəçi girişi +ClosedByLogin=Bağlayan istifadəçi girişi +FileWasRemoved=%s faylı silindi +DirWasRemoved=%s kataloqu silindi +FeatureNotYetAvailable=Xüsusiyyət cari versiyada hələ mövcud deyil +FeatureNotAvailableOnDevicesWithoutMouse=Bu funksiya siçan olmayan cihazlarda mövcud deyil +FeaturesSupported=Dəstəklənən xüsusiyyətlər +Width=Genişlik +Height=Hündürlük +Depth=Dərinlik +Top=Üst +Bottom=Aşağı +Left=Sol +Right=Sağ +CalculatedWeight=Hesablanmış çəki +CalculatedVolume=Hesablanmış həcm +Weight=Çəki WeightUnitton=ton -WeightUnitkg=kg +WeightUnitkg=Kiloqram WeightUnitg=g -WeightUnitmg=mg -WeightUnitpound=pound -WeightUnitounce=ounce -Length=Length +WeightUnitmg=mq +WeightUnitpound=funt +WeightUnitounce=unsiya +Length=Uzunluq LengthUnitm=m LengthUnitdm=dm -LengthUnitcm=cm +LengthUnitcm=santimetr LengthUnitmm=mm -Surface=Area +Surface=Ərazi SurfaceUnitm2=m² SurfaceUnitdm2=dm² -SurfaceUnitcm2=cm² +SurfaceUnitcm2=sm² SurfaceUnitmm2=mm² SurfaceUnitfoot2=ft² SurfaceUnitinch2=in² -Volume=Volume +Volume=Həcmi VolumeUnitm3=m³ VolumeUnitdm3=dm³ (L) -VolumeUnitcm3=cm³ (ml) +VolumeUnitcm3=sm³ (ml) VolumeUnitmm3=mm³ (µl) VolumeUnitfoot3=ft³ VolumeUnitinch3=in³ -VolumeUnitounce=ounce -VolumeUnitlitre=litre -VolumeUnitgallon=gallon +VolumeUnitounce=unsiya +VolumeUnitlitre=litr +VolumeUnitgallon=qallon SizeUnitm=m SizeUnitdm=dm -SizeUnitcm=cm +SizeUnitcm=santimetr SizeUnitmm=mm -SizeUnitinch=inch -SizeUnitfoot=foot -SizeUnitpoint=point -BugTracker=Bug tracker -SendNewPasswordDesc=This form allows you to request a new password. It will be sent to your email address.
Change will become effective once you click on the confirmation link in the email.
Check your inbox. -BackToLoginPage=Back to login page +SizeUnitinch=düym +SizeUnitfoot=ayaq +SizeUnitpoint=nöqtə +BugTracker=Səhv izləyicisi +SendNewPasswordDesc=Bu forma sizə yeni parol tələb etməyə imkan verir. O, e-poçt ünvanınıza göndəriləcək.
Dəyişiklik e-poçtdakı təsdiqləmə linkinə kliklədikdən sonra qüvvəyə minəcək.
Gələnlər qutusunu yoxlayın. +EnterNewPasswordHere=Yeni parolunuzu bura daxil edin +BackToLoginPage=Giriş səhifəsinə qayıt AuthenticationDoesNotAllowSendNewPassword=Authentication mode is %s.
In this mode, Dolibarr can't know nor change your password.
Contact your system administrator if you want to change your password. -EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use this option. +EnableGDLibraryDesc=Bu seçimi istifadə etmək üçün PHP quraşdırmanızda GD kitabxanasını quraşdırın və ya aktivləşdirin. ProfIdShortDesc=Prof Id %s is an information depending on third party country.
For example, for country %s, it's code %s. DolibarrDemo=Dolibarr ERP/CRM demo -StatsByNumberOfUnits=Statistics for sum of qty of products/services -StatsByNumberOfEntities=Statistics for number of referring entities (no. of invoices, or orders...) -NumberOfProposals=Number of proposals -NumberOfCustomerOrders=Number of sales orders -NumberOfCustomerInvoices=Number of customer invoices -NumberOfSupplierProposals=Number of vendor proposals -NumberOfSupplierOrders=Number of purchase orders -NumberOfSupplierInvoices=Number of vendor invoices -NumberOfContracts=Number of contracts -NumberOfMos=Number of manufacturing orders -NumberOfUnitsProposals=Number of units on proposals -NumberOfUnitsCustomerOrders=Number of units on sales orders -NumberOfUnitsCustomerInvoices=Number of units on customer invoices -NumberOfUnitsSupplierProposals=Number of units on vendor proposals -NumberOfUnitsSupplierOrders=Number of units on purchase orders -NumberOfUnitsSupplierInvoices=Number of units on vendor invoices -NumberOfUnitsContracts=Number of units on contracts -NumberOfUnitsMos=Number of units to produce in manufacturing orders -EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. -EMailTextInterventionValidated=The intervention %s has been validated. -EMailTextInvoiceValidated=Invoice %s has been validated. -EMailTextInvoicePayed=Invoice %s has been paid. -EMailTextProposalValidated=Proposal %s has been validated. -EMailTextProposalClosedSigned=Proposal %s has been closed signed. -EMailTextOrderValidated=Order %s has been validated. -EMailTextOrderApproved=Order %s has been approved. -EMailTextOrderValidatedBy=Order %s has been recorded by %s. -EMailTextOrderApprovedBy=Order %s has been approved by %s. -EMailTextOrderRefused=Order %s has been refused. -EMailTextOrderRefusedBy=Order %s has been refused by %s. -EMailTextExpeditionValidated=Shipping %s has been validated. -EMailTextExpenseReportValidated=Expense report %s has been validated. -EMailTextExpenseReportApproved=Expense report %s has been approved. -EMailTextHolidayValidated=Leave request %s has been validated. -EMailTextHolidayApproved=Leave request %s has been approved. -EMailTextActionAdded=The action %s has been added to the Agenda. -ImportedWithSet=Importation data set -DolibarrNotification=Automatic notification -ResizeDesc=Enter new width OR new height. Ratio will be kept during resizing... -NewLength=New width -NewHeight=New height -NewSizeAfterCropping=New size after cropping -DefineNewAreaToPick=Define new area on image to pick (left click on image then drag until you reach the opposite corner) -CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image -ImageEditor=Image editor -YouReceiveMailBecauseOfNotification=You receive this message because your email has been added to list of targets to be informed of particular events into %s software of %s. -YouReceiveMailBecauseOfNotification2=This event is the following: -ThisIsListOfModules=This is a list of modules preselected by this demo profile (only most common modules are visible in this demo). Edit this to have a more personalized demo and click on "Start". -UseAdvancedPerms=Use the advanced permissions of some modules -FileFormat=File format -SelectAColor=Choose a color -AddFiles=Add Files -StartUpload=Start upload -CancelUpload=Cancel upload -FileIsTooBig=Files is too big -PleaseBePatient=Please be patient... -NewPassword=New password -ResetPassword=Reset password -RequestToResetPasswordReceived=A request to change your password has been received. -NewKeyIs=This is your new keys to login -NewKeyWillBe=Your new key to login to software will be -ClickHereToGoTo=Click here to go to %s -YouMustClickToChange=You must however first click on the following link to validate this password change -ConfirmPasswordChange=Confirm password change -ForgetIfNothing=If you didn't request this change, just forget this email. Your credentials are kept safe. -IfAmountHigherThan=If amount higher than %s -SourcesRepository=Repository for sources -Chart=Chart -PassEncoding=Password encoding -PermissionsAdd=Permissions added -PermissionsDelete=Permissions removed -YourPasswordMustHaveAtLeastXChars=Your password must have at least %s chars -PasswordNeedAtLeastXUpperCaseChars=The password need at least %s upper case chars -PasswordNeedAtLeastXDigitChars=The password need at least %s numeric chars -PasswordNeedAtLeastXSpecialChars=The password need at least %s special chars -PasswordNeedNoXConsecutiveChars=The password must not have %s consecutive similar chars -YourPasswordHasBeenReset=Your password has been reset successfully -ApplicantIpAddress=IP address of applicant -SMSSentTo=SMS sent to %s -MissingIds=Missing ids -ThirdPartyCreatedByEmailCollector=Third party created by email collector from email MSGID %s -ContactCreatedByEmailCollector=Contact/address created by email collector from email MSGID %s -ProjectCreatedByEmailCollector=Project created by email collector from email MSGID %s -TicketCreatedByEmailCollector=Ticket created by email collector from email MSGID %s -OpeningHoursFormatDesc=Use a - to separate opening and closing hours.
Use a space to enter different ranges.
Example: 8-12 14-18 -SuffixSessionName=Suffix for session name -LoginWith=Login with %s +StatsByAmount=Məhsulların/xidmətlərin miqdarı haqqında statistik məlumatlar +StatsByAmountProducts=Məhsulların miqdarı ilə bağlı statistika +StatsByAmountServices=Xidmətlərin həcminə dair statistika +StatsByNumberOfUnits=Məhsulların/xidmətlərin cəminin statistikası +StatsByNumberOfUnitsProducts=Məhsulların miqdarının statistikası +StatsByNumberOfUnitsServices=Xidmətlərin məbləği üzrə statistika +StatsByNumberOfEntities=İstinad edən qurumların sayı üzrə statistika (qaimə-fakturaların və ya sifarişlərin sayı...) +NumberOf=%s sayı +NumberOfUnits=%s üzrə vahidlərin sayı +AmountIn=%s-da məbləğ +NumberOfUnitsMos=İstehsal sifarişlərində istehsal ediləcək vahidlərin sayı +EMailTextInterventionAddedContact=Sizə yeni müdaxilə %s təyin edildi. +EMailTextInterventionValidated=%s müdaxiləsi təsdiqləndi. +EMailTextInterventionClosed=%s müdaxiləsi bağlandı. +EMailTextInvoiceValidated=%s faktura təsdiqləndi. +EMailTextInvoicePayed=%s faktura ödənilib. +EMailTextProposalValidated=%s təklifi təsdiqləndi. +EMailTextProposalClosedSigned=%s təklifi imzalanıb. +EMailTextProposalClosedSignedWeb=%s təklifi portal səhifəsində imzalanaraq bağlanıb. +EMailTextProposalClosedRefused=%s təklifi rədd edildi. +EMailTextProposalClosedRefusedWeb=%s təklifi portal səhifəsində rədd edildi. +EMailTextOrderValidated=%s sifarişi doğrulandı. +EMailTextOrderClose=%s sifarişi çatdırıldı. +EMailTextSupplierOrderApprovedBy=%s satınalma sifarişi %s tərəfindən təsdiqlənib. +EMailTextSupplierOrderValidatedBy=%s alış sifarişi %s tərəfindən qeydə alınıb. +EMailTextSupplierOrderSubmittedBy=%s satınalma sifarişi %s tərəfindən təqdim edilib. +EMailTextSupplierOrderRefusedBy=%s satınalma sifarişi %s tərəfindən rədd edildi. +EMailTextExpeditionValidated=%s çatdırılması təsdiqləndi. +EMailTextExpenseReportValidated=Xərc hesabatı %s təsdiqləndi. +EMailTextExpenseReportApproved=Xərc hesabatı %s təsdiq edildi. +EMailTextHolidayValidated=%s sorğusu təsdiqləndi. +EMailTextHolidayApproved=%s sorğusu təsdiqləndi. +EMailTextActionAdded=Fəaliyyət %s Gündəliyə əlavə edildi. +ImportedWithSet=İdxal məlumat dəsti +DolibarrNotification=Avtomatik bildiriş +ResizeDesc=Yeni eni VEYA yeni hündürlük daxil edin. Ölçü dəyişdirilərkən nisbət saxlanılacaq... +NewLength=Yeni eni +NewHeight=Yeni hündürlük +NewSizeAfterCropping=Kəsdikdən sonra yeni ölçü +DefineNewAreaToPick=Şəkildə seçmək üçün yeni sahə təyin edin (şəklin üzərinə sol klikləyin, sonra əks küncə çatana qədər dartın) +CurrentInformationOnImage=Bu alət şəklin ölçüsünü dəyişməyə və ya kəsməyə kömək etmək üçün nəzərdə tutulmuşdur. Bu, cari redaktə edilmiş şəkil haqqında məlumatdır +ImageEditor=Şəkil redaktoru +YouReceiveMailBecauseOfNotification=E-poçtunuz %s proqramının %s proqramında xüsusi hadisələrdən xəbərdar olmaq üçün hədəflər siyahısına əlavə edildiyi üçün bu mesajı aldınız. +YouReceiveMailBecauseOfNotification2=Bu hadisə aşağıdakılardır: +ThisIsListOfModules=Bu, bu demo profili tərəfindən əvvəlcədən seçilmiş modulların siyahısıdır (yalnız ən ümumi modullar bu demoda görünür). Daha fərdiləşdirilmiş demoya sahib olmaq üçün bunu redaktə edin və "Başla" üzərinə klikləyin. +UseAdvancedPerms=Bəzi modulların qabaqcıl icazələrindən istifadə edin +FileFormat=Fayl formatı +SelectAColor=Bir rəng seçin +AddFiles=Faylları əlavə et +StartUpload=Yükləməyə başlayın +CancelUpload=Yükləməni ləğv edin +FileIsTooBig=Fayllar çox böyükdür +PleaseBePatient=Səbr edin... +NewPassword=Yeni şifrə +ResetPassword=Parolu sıfırlamak +RequestToResetPasswordReceived=Parolunuzu dəyişdirmək üçün sorğu qəbul edildi. +NewKeyIs=Bu, daxil olmaq üçün yeni açarlarınızdır +NewKeyWillBe=Proqrama daxil olmaq üçün yeni açarınız olacaq +ClickHereToGoTo=%s səhifəsinə keçmək üçün bura klikləyin +YouMustClickToChange=Bununla belə, bu parol dəyişikliyini təsdiqləmək üçün əvvəlcə aşağıdakı linkə klik etməlisiniz +ConfirmPasswordChange=Parol dəyişikliyini təsdiqləyin +ForgetIfNothing=Bu dəyişikliyi tələb etməmisinizsə, sadəcə bu e-poçtu unutun. Etibarnamələriniz təhlükəsiz saxlanılır. +IfAmountHigherThan=Əgər məbləğ %s-dan yüksəkdirsə +SourcesRepository=Mənbələr üçün anbar +Chart=Qrafik +PassEncoding=Parolun kodlaşdırılması +PermissionsAdd=İcazələr əlavə edildi +PermissionsDelete=İcazələr silindi +YourPasswordMustHaveAtLeastXChars=Parolunuzda ən azı %s simvol olmalıdır +PasswordNeedAtLeastXUpperCaseChars=Parol üçün ən azı %s böyük hərflər olmalıdır +PasswordNeedAtLeastXDigitChars=Parolu ən azı %s rəqəmli simvol lazımdır +PasswordNeedAtLeastXSpecialChars=Parol üçün ən azı %s xüsusi simvol lazımdır +PasswordNeedNoXConsecutiveChars=Parolda %s ardıcıl oxşar simvollar olmamalıdır +YourPasswordHasBeenReset=Parolunuz uğurla sıfırlandı +ApplicantIpAddress=Ərizəçinin IP ünvanı +SMSSentTo=%s ünvanına SMS göndərildi +MissingIds=Çatışmayan idlər +ThirdPartyCreatedByEmailCollector=Üçüncü tərəf e-poçt toplayıcısı tərəfindən MSGID %s e-poçtundan yaradılıb +ContactCreatedByEmailCollector=Əlaqə/ünvan e-poçt kollektoru tərəfindən e-poçt MSGID-dən yaradılmışdır %s +ProjectCreatedByEmailCollector=Layihə e-poçt toplayıcısı tərəfindən MSGID %s e-poçtundan yaradılıb +TicketCreatedByEmailCollector=Bilet e-poçt toplayıcısı tərəfindən MSGID %s e-poçtundan yaradılıb +OpeningHoursFormatDesc=Açılış və bağlanış saatlarını ayırmaq üçün - istifadə edin.
Fərqli diapazonları daxil etmək üçün boşluqdan istifadə edin.
Məsələn: 8-12 14 -18 +SuffixSessionName=Sessiya adı üçün şəkilçi +LoginWith=%s ilə daxil olun ##### Export ##### -ExportsArea=Exports area -AvailableFormats=Available formats -LibraryUsed=Library used -LibraryVersion=Library version -ExportableDatas=Exportable data -NoExportableData=No exportable data (no modules with exportable data loaded, or missing permissions) +ExportsArea=İxrac sahəsi +AvailableFormats=Mövcud formatlar +LibraryUsed=Kitabxanadan istifadə olunub +LibraryVersion=Kitabxana versiyası +ExportableDatas=İxrac edilə bilən məlumatlar +NoExportableData=İxrac edilə bilən məlumat yoxdur (eksport edilə bilən data yüklənmiş modullar yoxdur və ya icazələr yoxdur) ##### External sites ##### -WebsiteSetup=Setup of module website -WEBSITE_PAGEURL=URL of page -WEBSITE_TITLE=Title -WEBSITE_DESCRIPTION=Description -WEBSITE_IMAGE=Image -WEBSITE_IMAGEDesc=Relative path of the image media. You can keep this empty as this is rarely used (it can be used by dynamic content to show a thumbnail in a list of blog posts). Use __WEBSITE_KEY__ in the path if path depends on website name (for example: image/__WEBSITE_KEY__/stories/myimage.png). -WEBSITE_KEYWORDS=Keywords -LinesToImport=Lines to import +WebsiteSetup=Modul veb saytının qurulması +WEBSITE_PAGEURL=Səhifənin URL-i +WEBSITE_TITLE=Başlıq +WEBSITE_DESCRIPTION=Təsvir +WEBSITE_IMAGE=Şəkil +WEBSITE_IMAGEDesc=Təsvir mediasının nisbi yolu. Siz bunu boş saxlaya bilərsiniz, çünki bu, nadir hallarda istifadə olunur (bloq yazılarının siyahısında miniatür göstərmək üçün dinamik məzmun tərəfindən istifadə edilə bilər). Yol veb saytın adından asılıdırsa, yolda __WEBSITE_KEY__ istifadə edin (məsələn: image/__WEBSITE_KEY__/stories/myimage.png). +WEBSITE_KEYWORDS=Açar sözlər +LinesToImport=İdxal ediləcək xətlər -MemoryUsage=Memory usage -RequestDuration=Duration of request -ProductsPerPopularity=Products/Services by popularity -PopuProp=Products/Services by popularity in Proposals -PopuCom=Products/Services by popularity in Orders -ProductStatistics=Products/Services Statistics -NbOfQtyInOrders=Qty in orders -SelectTheTypeOfObjectToAnalyze=Select an object to view its statistics... +MemoryUsage=Yaddaş istifadəsi +RequestDuration=Müraciət müddəti +ProductsServicesPerPopularity=Məhsullar|Xidmətlər populyarlığa görə +ProductsPerPopularity=Populyarlığa görə məhsullar +ServicesPerPopularity=Populyarlığa görə xidmətlər +PopuProp=Məhsullar|Təkliflərdə populyarlığa görə xidmətlər +PopuCom=Məhsullar|Sifarişlərdə populyarlığa görə xidmətlər +ProductStatistics=Məhsullar|Xidmətlər Statistikası +NbOfQtyInOrders=Sifarişlərdə +SelectTheTypeOfObjectToAnalyze=Statistikaya baxmaq üçün obyekt seçin... -ConfirmBtnCommonContent = Are you sure you want to "%s" ? -ConfirmBtnCommonTitle = Confirm your action -CloseDialog = Close +ConfirmBtnCommonContent = "%s" etmək istədiyinizə əminsiniz? +ConfirmBtnCommonTitle = Fəaliyyətinizi təsdiqləyin +CloseDialog = Yaxın +Autofill = Avtomatik doldurma +OrPasteAnURL=və ya URL yapışdırın + +# externalsite +ExternalSiteSetup=Xarici vebsayta keçidi quraşdırın +ExternalSiteURL=HTML iframe məzmununun Xarici Sayt URL-i +ExternalSiteModuleNotComplete=ExternalSite modulu düzgün konfiqurasiya olunmayıb. +ExampleMyMenuEntry=Menyu girişim + +# ftp +FTPClientSetup=FTP və ya SFTP Müştəri modulunun qurulması +NewFTPClient=Yeni FTP/SFTP bağlantısı quraşdırma +FTPArea=FTP/SFTP sahəsi +FTPAreaDesc=Bu ekran FTP və SFTP serverinin görünüşünü göstərir. +SetupOfFTPClientModuleNotComplete=FTP və ya SFTP müştəri modulunun quraşdırılması natamam görünür +FTPFeatureNotSupportedByYourPHP=Sizin PHP FTP və ya SFTP funksiyalarını dəstəkləmir +FailedToConnectToFTPServer=Serverə qoşulmaq alınmadı (server %s, port %s) +FailedToConnectToFTPServerWithCredentials=Müəyyən edilmiş giriş/parol ilə serverə daxil olmaq alınmadı +FTPFailedToRemoveFile=%s faylını silmək alınmadı. +FTPFailedToRemoveDir=%s kataloqunu silmək alınmadı: icazələri yoxlayın və boşdur. +FTPPassiveMode=Passiv rejim +ChooseAFTPEntryIntoMenu=Menyudan FTP/SFTP saytını seçin... +FailedToGetFile=Faylları əldə etmək alınmadı %s +ErrorFTPNodisconnect=FTP/SFTP serverini ayırmaq xətası +FileWasUpload=Fayl %s yükləndi +FTPFailedToUploadFile=%s faylını yükləmək alınmadı. +AddFolder=Qovluq yaradın +FileWasCreateFolder=%s qovluğu yaradıldı +FTPFailedToCreateFolder=%s qovluğunu yaratmaq alınmadı. +SelectADay=Select a day in calendar +SelectANewDate=Select a new date diff --git a/htdocs/langs/az_AZ/partnership.lang b/htdocs/langs/az_AZ/partnership.lang index 019d1dd69b1..7c3b849ed9a 100644 --- a/htdocs/langs/az_AZ/partnership.lang +++ b/htdocs/langs/az_AZ/partnership.lang @@ -91,8 +91,7 @@ CountLastUrlCheckError=Son URL yoxlaması üçün xətaların sayı LastCheckBacklink=Son URL yoxlamasının tarixi NewPartnershipRequest=Yeni tərəfdaşlıq tələbi -NewPartnershipRequestDesc=Bu forma sizə tərəfdaşlıq proqramımızın bir hissəsi olmaq üçün müraciət etməyə imkan verir. Bu formanı doldurmaq üçün köməyə ehtiyacınız varsa, lütfən, e-poçt vasitəsilə əlaqə saxlayın %s span>. +NewPartnershipRequestDesc=This form allows you to request to be part of one of our partnership program. If you need help to fill this form, please contact by email %s. ThisUrlMustContainsAtLeastOneLinkToWebsite=Bu səhifədə aşağıdakı domenlərdən birinə ən azı bir keçid olmalıdır: %s IPOfApplicant=Ərizəçinin IP - diff --git a/htdocs/langs/az_AZ/paypal.lang b/htdocs/langs/az_AZ/paypal.lang index 5eb5f389445..5f64f9ca645 100644 --- a/htdocs/langs/az_AZ/paypal.lang +++ b/htdocs/langs/az_AZ/paypal.lang @@ -1,36 +1,37 @@ # Dolibarr language file - Source file is en_US - paypal -PaypalSetup=PayPal module setup -PaypalDesc=This module allows payment by customers via
PayPal. This can be used for a ad-hoc payment or for a payment related to a Dolibarr object (invoice, order, ...) -PaypalOrCBDoPayment=Pay with PayPal (Card or PayPal) -PaypalDoPayment=Pay with PayPal -PAYPAL_API_SANDBOX=Mode test/sandbox -PAYPAL_API_USER=API username -PAYPAL_API_PASSWORD=API password -PAYPAL_API_SIGNATURE=API signature -PAYPAL_SSLVERSION=Curl SSL Version -PAYPAL_API_INTEGRAL_OR_PAYPALONLY=Offer "integral" payment (Credit card+PayPal) or "PayPal" only -PaypalModeIntegral=Integral -PaypalModeOnlyPaypal=PayPal only -ONLINE_PAYMENT_CSS_URL=Optional URL of CSS stylesheet on online payment page -ThisIsTransactionId=This is id of transaction: %s -PAYPAL_ADD_PAYMENT_URL=Include the PayPal payment url when you send a document by email -NewOnlinePaymentReceived=New online payment received -NewOnlinePaymentFailed=New online payment tried but failed -ONLINE_PAYMENT_SENDEMAIL=Email address for notifications after each payment attempt (for success and fail) -ReturnURLAfterPayment=Return URL after payment -ValidationOfOnlinePaymentFailed=Validation of online payment failed -PaymentSystemConfirmPaymentPageWasCalledButFailed=Payment confirmation page was called by payment system returned an error -SetExpressCheckoutAPICallFailed=SetExpressCheckout API call failed. -DoExpressCheckoutPaymentAPICallFailed=DoExpressCheckoutPayment API call failed. -DetailedErrorMessage=Detailed Error Message -ShortErrorMessage=Short Error Message -ErrorCode=Error Code -ErrorSeverityCode=Error Severity Code -OnlinePaymentSystem=Online payment system -PaypalLiveEnabled=PayPal "live" mode enabled (otherwise test/sandbox mode) -PaypalImportPayment=Import PayPal payments -PostActionAfterPayment=Post actions after payments -ARollbackWasPerformedOnPostActions=A rollback was performed on all Post actions. You must complete post actions manually if they are necessary. -ValidationOfPaymentFailed=Validation of payment has failed -CardOwner=Card holder -PayPalBalance=Paypal credit +PaypalSetup=PayPal modulunun qurulması +PaypalDesc=Bu modul müştərilərə PayPal vasitəsilə ödəniş etməyə imkan verir. Bu, ad-hoc ödəniş və ya Dolibarr obyekti ilə əlaqəli ödəniş üçün istifadə edilə bilər (qaimə, sifariş, ...) +PaypalOrCBDoPayment=PayPal ilə ödəyin (Kart və ya PayPal) +PaypalDoPayment=PayPal ilə ödəyin +PAYPAL_API_SANDBOX=Rejim testi/qum qutusu +PAYPAL_API_USER=API istifadəçi adı +PAYPAL_API_PASSWORD=API parolu +PAYPAL_API_SIGNATURE=API imzası +PAYPAL_SSLVERSION=Curl SSL Versiyası +PAYPAL_API_INTEGRAL_OR_PAYPALONLY=Yalnız "inteqral" ödəniş (Kredit kartı+PayPal) və ya "PayPal" təklif edin +PaypalModeIntegral=İnteqral +PaypalModeOnlyPaypal=Yalnız PayPal +ONLINE_PAYMENT_CSS_URL=Onlayn ödəniş səhifəsində CSS üslub cədvəlinin isteğe bağlı URL-i +ThisIsTransactionId=Bu, tranzaksiya identifikatorudur: %s +PAYPAL_ADD_PAYMENT_URL=Sənədi e-poçtla göndərərkən PayPal ödəniş url-ni daxil edin +NewOnlinePaymentReceived=Yeni onlayn ödəniş alındı +NewOnlinePaymentFailed=Yeni onlayn ödəniş cəhd edildi, lakin alınmadı +ONLINE_PAYMENT_SENDEMAIL=Hər ödəniş cəhdindən sonra bildirişlər üçün e-poçt ünvanı (uğur və uğursuzluq üçün) +ReturnURLAfterPayment=Ödənişdən sonra URL-i qaytarın +ValidationOfOnlinePaymentFailed=Onlayn ödənişin doğrulanması uğursuz oldu +PaymentSystemConfirmPaymentPageWasCalledButFailed=Ödənişin təsdiqi səhifəsi ödəniş sistemi tərəfindən çağırıldı xəta qaytardı +SetExpressCheckoutAPICallFailed=SetExpressCheckout API çağırışı uğursuz oldu. +DoExpressCheckoutPaymentAPICallFailed=DoExpressCheckoutPayment API çağırışı uğursuz oldu. +DetailedErrorMessage=Ətraflı Xəta Mesajı +ShortErrorMessage=Qısa Xəta Mesajı +ErrorCode=Səhv kodu +ErrorSeverityCode=Xətanın Ciddilik Kodu +OnlinePaymentSystem=Onlayn ödəniş sistemi +PaypalLiveEnabled=PayPal "canlı" rejimi aktivdir (əks halda test/sandbox rejimi) +PaypalImportPayment=PayPal ödənişlərini idxal edin +PostActionAfterPayment=Ödənişlərdən sonra hərəkətləri göndərin +ARollbackWasPerformedOnPostActions=Bütün Post əməliyyatlarında geriyə qaytarma həyata keçirilib. Lazım gələrsə, post əməliyyatlarını əl ilə tamamlamalısınız. +ValidationOfPaymentFailed=Ödənişin doğrulanması uğursuz oldu +CardOwner=Kart sahibi +PayPalBalance=Paypal krediti +OnlineSubscriptionPaymentLine=Online subscription recorded on %s
Paid via %s
Originating IP address: %s
Transaction ID: %s diff --git a/htdocs/langs/az_AZ/products.lang b/htdocs/langs/az_AZ/products.lang index 14715670882..8ebcabb8048 100644 --- a/htdocs/langs/az_AZ/products.lang +++ b/htdocs/langs/az_AZ/products.lang @@ -1,413 +1,438 @@ # Dolibarr language file - Source file is en_US - products -ProductRef=Product ref. -ProductLabel=Product label -ProductLabelTranslated=Translated product label -ProductDescription=Product description -ProductDescriptionTranslated=Translated product description -ProductNoteTranslated=Translated product note -ProductServiceCard=Products/Services card -TMenuProducts=Products -TMenuServices=Services -Products=Products -Services=Services -Product=Product -Service=Service -ProductId=Product/service id -Create=Create -Reference=Reference -NewProduct=New product -NewService=New service -ProductVatMassChange=Global VAT Update +ProductRef=Məhsul ref. +ProductLabel=Məhsul etiketi +ProductLabelTranslated=Tərcümə edilmiş məhsul etiketi +ProductDescription=Məhsul təsviri +ProductDescriptionTranslated=Tərcümə edilmiş məhsul təsviri +ProductNoteTranslated=Tərcümə edilmiş məhsul qeydi +ProductServiceCard=Məhsullar/Xidmətlər kartı +TMenuProducts=Məhsullar +TMenuServices=Xidmətlər +Products=Məhsullar +Services=Xidmətlər +Product=Məhsul +Service=Xidmət +ProductId=Məhsul/xidmət id +Create=Yaradın +Reference=İstinad +NewProduct=Yeni məhsul +NewService=Yeni xidmət +ProductVatMassChange=Qlobal ƏDV yeniləməsi ProductVatMassChangeDesc=This tool updates the VAT rate defined on ALL products and services! -MassBarcodeInit=Mass barcode init -MassBarcodeInitDesc=This page can be used to initialize a barcode on objects that does not have barcode defined. Check before that setup of module barcode is complete. -ProductAccountancyBuyCode=Accounting code (purchase) -ProductAccountancyBuyIntraCode=Accounting code (purchase intra-community) -ProductAccountancyBuyExportCode=Accounting code (purchase import) -ProductAccountancySellCode=Accounting code (sale) -ProductAccountancySellIntraCode=Accounting code (sale intra-Community) -ProductAccountancySellExportCode=Accounting code (sale export) -ProductOrService=Product or Service -ProductsAndServices=Products and Services -ProductsOrServices=Products or Services -ProductsPipeServices=Products | Services -ProductsOnSale=Products for sale -ProductsOnPurchase=Products for purchase -ProductsOnSaleOnly=Products for sale only -ProductsOnPurchaseOnly=Products for purchase only -ProductsNotOnSell=Products not for sale and not for purchase -ProductsOnSellAndOnBuy=Products for sale and for purchase -ServicesOnSale=Services for sale -ServicesOnPurchase=Services for purchase -ServicesOnSaleOnly=Services for sale only -ServicesOnPurchaseOnly=Services for purchase only -ServicesNotOnSell=Services not for sale and not for purchase -ServicesOnSellAndOnBuy=Services for sale and for purchase -LastModifiedProductsAndServices=Latest %s products/services which were modified -LastRecordedProducts=Latest %s recorded products -LastRecordedServices=Latest %s recorded services -CardProduct0=Product -CardProduct1=Service -Stock=Stock -MenuStocks=Stocks -Stocks=Stocks and location (warehouse) of products -Movements=Movements -Sell=Sell -Buy=Purchase -OnSell=For sale -OnBuy=For purchase -NotOnSell=Not for sale -ProductStatusOnSell=For sale -ProductStatusNotOnSell=Not for sale -ProductStatusOnSellShort=For sale -ProductStatusNotOnSellShort=Not for sale -ProductStatusOnBuy=For purchase -ProductStatusNotOnBuy=Not for purchase -ProductStatusOnBuyShort=For purchase -ProductStatusNotOnBuyShort=Not for purchase -UpdateVAT=Update vat -UpdateDefaultPrice=Update default price -UpdateLevelPrices=Update prices for each level -AppliedPricesFrom=Applied from -SellingPrice=Selling price -SellingPriceHT=Selling price (excl. tax) -SellingPriceTTC=Selling price (inc. tax) -SellingMinPriceTTC=Minimum Selling price (inc. tax) -CostPriceDescription=This price field (excl. tax) can be used to capture the average amount this product costs to your company. It may be any price you calculate yourself, for example, from the average buying price plus average production and distribution cost. -CostPriceUsage=This value could be used for margin calculation. -ManufacturingPrice=Manufacturing price -SoldAmount=Sold amount -PurchasedAmount=Purchased amount -NewPrice=New price -MinPrice=Min. selling price -EditSellingPriceLabel=Edit selling price label -CantBeLessThanMinPrice=The selling price can't be lower than minimum allowed for this product (%s without tax). This message can also appears if you type a too important discount. -ContractStatusClosed=Closed -ErrorProductAlreadyExists=A product with reference %s already exists. -ErrorProductBadRefOrLabel=Wrong value for reference or label. -ErrorProductClone=There was a problem while trying to clone the product or service. -ErrorPriceCantBeLowerThanMinPrice=Error, price can't be lower than minimum price. -Suppliers=Vendors -SupplierRef=Vendor SKU -ShowProduct=Show product -ShowService=Show service -ProductsAndServicesArea=Product and Services area -ProductsArea=Product area -ServicesArea=Services area -ListOfStockMovements=List of stock movements -BuyingPrice=Buying price -PriceForEachProduct=Products with specific prices -SupplierCard=Vendor card -PriceRemoved=Price removed -BarCode=Barcode -BarcodeType=Barcode type -SetDefaultBarcodeType=Set barcode type -BarcodeValue=Barcode value -NoteNotVisibleOnBill=Note (not visible on invoices, proposals...) -ServiceLimitedDuration=If product is a service with limited duration: -FillWithLastServiceDates=Fill with last service line dates -MultiPricesAbility=Multiple price segments per product/service (each customer is in one price segment) -MultiPricesNumPrices=Number of prices -DefaultPriceType=Base of prices per default (with versus without tax) when adding new sale prices -AssociatedProductsAbility=Enable Kits (set of several products) -VariantsAbility=Enable Variants (variations of products, for example color, size) -AssociatedProducts=Kits -AssociatedProductsNumber=Number of products composing this kit -ParentProductsNumber=Number of parent packaging product -ParentProducts=Parent products -IfZeroItIsNotAVirtualProduct=If 0, this product is not a kit -IfZeroItIsNotUsedByVirtualProduct=If 0, this product is not used by any kit -KeywordFilter=Keyword filter -CategoryFilter=Category filter -ProductToAddSearch=Search product to add -NoMatchFound=No match found -ListOfProductsServices=List of products/services -ProductAssociationList=List of products/services that are component(s) of this kit -ProductParentList=List of kits with this product as a component -ErrorAssociationIsFatherOfThis=One of selected product is parent with current product -DeleteProduct=Delete a product/service -ConfirmDeleteProduct=Are you sure you want to delete this product/service? -ProductDeleted=Product/Service "%s" deleted from database. -ExportDataset_produit_1=Products -ExportDataset_service_1=Services -ImportDataset_produit_1=Products -ImportDataset_service_1=Services -DeleteProductLine=Delete product line -ConfirmDeleteProductLine=Are you sure you want to delete this product line? -ProductSpecial=Special -QtyMin=Min. purchase quantity -PriceQtyMin=Price quantity min. -PriceQtyMinCurrency=Price (currency) for this qty. (no discount) -VATRateForSupplierProduct=VAT Rate (for this vendor/product) -DiscountQtyMin=Discount for this qty. -NoPriceDefinedForThisSupplier=No price/qty defined for this vendor/product -NoSupplierPriceDefinedForThisProduct=No vendor price/qty defined for this product -PredefinedItem=Predefined item -PredefinedProductsToSell=Predefined Product -PredefinedServicesToSell=Predefined Service -PredefinedProductsAndServicesToSell=Predefined products/services to sell -PredefinedProductsToPurchase=Predefined product to purchase -PredefinedServicesToPurchase=Predefined services to purchase -PredefinedProductsAndServicesToPurchase=Predefined products/services to purchase -NotPredefinedProducts=Not predefined products/services -GenerateThumb=Generate thumb -ServiceNb=Service #%s -ListProductServiceByPopularity=List of products/services by popularity -ListProductByPopularity=List of products by popularity -ListServiceByPopularity=List of services by popularity -Finished=Manufactured product -RowMaterial=Raw Material -ConfirmCloneProduct=Are you sure you want to clone product or service %s? -CloneContentProduct=Clone all main information of the product/service -ClonePricesProduct=Clone prices -CloneCategoriesProduct=Clone linked tags/categories -CloneCompositionProduct=Clone virtual products/services -CloneCombinationsProduct=Clone the product variants -ProductIsUsed=This product is used -NewRefForClone=Ref. of new product/service -SellingPrices=Selling prices -BuyingPrices=Buying prices -CustomerPrices=Customer prices -SuppliersPrices=Vendor prices -SuppliersPricesOfProductsOrServices=Vendor prices (of products or services) -CustomCode=Customs|Commodity|HS code -CountryOrigin=Country of origin -RegionStateOrigin=Region of origin -StateOrigin=State|Province of origin -Nature=Nature of product (raw/manufactured) -NatureOfProductShort=Nature of product -NatureOfProductDesc=Raw material or manufactured product -ShortLabel=Short label -Unit=Unit +MassBarcodeInit=Kütləvi barkod girişi +MassBarcodeInitDesc=Bu səhifə barkodu təyin olunmayan obyektlərdə barkodu işə salmaq üçün istifadə edilə bilər. Modul barkodunun quraşdırılması tamamlanmamışdan əvvəl yoxlayın. +ProductAccountancyBuyCode=Mühasibat kodu (satın alma) +ProductAccountancyBuyIntraCode=Mühasibat kodu (icmadaxili satınalma) +ProductAccountancyBuyExportCode=Mühasibat kodu (alış idxalı) +ProductAccountancySellCode=Mühasibat kodu (satış) +ProductAccountancySellIntraCode=Mühasibat kodu (İcmadaxili satış) +ProductAccountancySellExportCode=Mühasibat kodu (satış ixracı) +ProductOrService=Məhsul və ya Xidmət +ProductsAndServices=Məhsullar və Xidmətlər +ProductsOrServices=Məhsullar və ya Xidmətlər +ProductsPipeServices=Məhsullar | Xidmətlər +ProductsOnSale=Satış üçün məhsullar +ProductsOnPurchase=Almaq üçün məhsullar +ProductsOnSaleOnly=Yalnız satış üçün məhsullar +ProductsOnPurchaseOnly=Yalnız alış üçün məhsullar +ProductsNotOnSell=Məhsullar satılmır və alınmır +ProductsOnSellAndOnBuy=Satış və alış üçün məhsullar +ServicesOnSale=Satış üçün xidmətlər +ServicesOnPurchase=Satınalma üçün xidmətlər +ServicesOnSaleOnly=Yalnız satış üçün xidmətlər +ServicesOnPurchaseOnly=Yalnız alış üçün xidmətlər +ServicesNotOnSell=Xidmətlər satılmır və satın alınmır +ServicesOnSellAndOnBuy=Satış və alış üçün xidmətlər +LastModifiedProductsAndServices=Dəyişdirilmiş ən son %s məhsul/xidmətlər +LastRecordedProducts=Ən son %s qeydə alınmış məhsullar +LastRecordedServices=Ən son %s qeydə alınmış xidmətlər +CardProduct0=Məhsul +CardProduct1=Xidmət +Stock=Səhm +MenuStocks=Səhmlər +Stocks=Məhsulların ehtiyatları və yeri (anbarı). +Movements=Hərəkətlər +Sell=Sat +Buy=Alış +OnSell=Satılır +OnBuy=Alış üçün +NotOnSell=Satış üçün deyil +ProductStatusOnSell=Satılır +ProductStatusNotOnSell=Satış üçün deyil +ProductStatusOnSellShort=Satılır +ProductStatusNotOnSellShort=Satış üçün deyil +ProductStatusOnBuy=Alış üçün +ProductStatusNotOnBuy=Alış üçün deyil +ProductStatusOnBuyShort=Alış üçün +ProductStatusNotOnBuyShort=Alış üçün deyil +UpdateVAT=ƏDV-ni yeniləyin +UpdateDefaultPrice=Defolt qiyməti yeniləyin +UpdateLevelPrices=Hər səviyyə üçün qiymətləri yeniləyin +AppliedPricesFrom=Müraciət edilmişdir +SellingPrice=Satış qiyməti +SellingPriceHT=Satış qiyməti (vergi istisna olmaqla) +SellingPriceTTC=Satış qiyməti (vergi daxil) +SellingMinPriceTTC=Minimum Satış qiyməti (vergi daxil olmaqla) +CostPriceDescription=Bu qiymət sahəsi (vergi istisna olmaqla) bu məhsulun şirkətinizə sərf etdiyi orta məbləği tutmaq üçün istifadə edilə bilər. Bu, özünüz hesabladığınız hər hansı qiymət ola bilər, məsələn, orta alış qiymətindən əlavə orta istehsal və paylama dəyərindən. +CostPriceUsage=Bu dəyər marjanın hesablanması üçün istifadə edilə bilər. +ManufacturingPrice=İstehsal qiyməti +SoldAmount=Satılmış məbləğ +PurchasedAmount=Alınan məbləğ +NewPrice=Yeni qiymət +MinPrice=Min. satış qiyməti +MinPriceHT=Min. satış qiyməti (vergi istisna olmaqla) +MinPriceTTC=Min. satış qiyməti (vergi daxil) +EditSellingPriceLabel=Satış qiyməti etiketini redaktə edin +CantBeLessThanMinPrice=Satış qiyməti bu məhsul üçün icazə verilən minimumdan aşağı ola bilməz (vergisiz %s). Əhəmiyyətli endirim yazsanız, bu mesaj da görünə bilər. +CantBeLessThanMinPriceInclTax=Satış qiyməti bu məhsul üçün icazə verilən minimumdan aşağı ola bilməz (vergilər daxil %s). Çox vacib endirim yazsanız, bu mesaj da görünə bilər. +ContractStatusClosed=Bağlı +ErrorProductAlreadyExists=%s istinadlı məhsul artıq mövcuddur. +ErrorProductBadRefOrLabel=İstinad və ya etiket üçün yanlış dəyər. +ErrorProductClone=Məhsul və ya xidməti klonlaşdırmaq istəyərkən problem baş verdi. +ErrorPriceCantBeLowerThanMinPrice=Xəta, qiymət minimum qiymətdən aşağı ola bilməz. +Suppliers=Satıcılar +SupplierRef=Satıcı SKU +ShowProduct=Məhsulu göstərin +ShowService=Xidmət göstərin +ProductsAndServicesArea=Məhsul və Xidmətlər sahəsi +ProductsArea=Məhsul sahəsi +ServicesArea=Xidmətlər sahəsi +ListOfStockMovements=Səhm hərəkətlərinin siyahısı +BuyingPrice=Alış qiyməti +PriceForEachProduct=Xüsusi qiymətlərlə məhsullar +SupplierCard=Satıcı kartı +PriceRemoved=Qiymət silindi +BarCode=Barkod +BarcodeType=Barkod növü +SetDefaultBarcodeType=Barkod növünü təyin edin +BarcodeValue=Barkod dəyəri +NoteNotVisibleOnBill=Qeyd (fakturalarda, təkliflərdə görünmür...) +ServiceLimitedDuration=Məhsul məhdud müddətə malik xidmətdirsə: +FillWithLastServiceDates=Son xidmət xətti tarixləri ilə doldurun +MultiPricesAbility=Məhsul/xidmət üçün bir neçə qiymət seqmenti (hər bir müştəri bir qiymət seqmentindədir) +MultiPricesNumPrices=Qiymətlərin sayı +DefaultPriceType=Yeni satış qiymətləri əlavə edərkən defolt üzrə qiymətlərin bazası (vergisizlə müqayisədə). +AssociatedProductsAbility=Aktivləşdirmə dəstləri (bir neçə məhsul dəsti) +VariantsAbility=Variantları aktivləşdirin (məhsulların varyasyonları, məsələn, rəng, ölçü) +AssociatedProducts=Dəstlər +AssociatedProductsNumber=Bu dəsti təşkil edən məhsulların sayı +ParentProductsNumber=Ana qablaşdırma məhsulunun sayı +ParentProducts=Ana məhsullar +IfZeroItIsNotAVirtualProduct=0 olarsa, bu məhsul dəst deyil +IfZeroItIsNotUsedByVirtualProduct=0 olarsa, bu məhsul heç bir dəst tərəfindən istifadə edilmir +KeywordFilter=Açar söz filtri +CategoryFilter=Kateqoriya filtri +ProductToAddSearch=Əlavə etmək üçün məhsul axtarın +NoMatchFound=Uyğun tapılmadı +ListOfProductsServices=Məhsulların/xidmətlərin siyahısı +ProductAssociationList=Bu dəstin komponent(lər)i olan məhsulların/xidmətlərin siyahısı +ProductParentList=Komponent kimi bu məhsulu olan dəstlərin siyahısı +ErrorAssociationIsFatherOfThis=Seçilmiş məhsullardan biri cari məhsulun anasıdır +DeleteProduct=Məhsulu/xidməti silin +ConfirmDeleteProduct=Bu məhsulu/xidməti silmək istədiyinizə əminsiniz? +ProductDeleted="%s" Məhsul/Xidmət verilənlər bazasından silindi. +ExportDataset_produit_1=Məhsullar +ExportDataset_service_1=Xidmətlər +ImportDataset_produit_1=Məhsullar +ImportDataset_service_1=Xidmətlər +DeleteProductLine=Məhsul xəttini silin +ConfirmDeleteProductLine=Bu məhsul xəttini silmək istədiyinizə əminsiniz? +ProductSpecial=Xüsusi +QtyMin=Min. alış miqdarı +PriceQtyMin=Qiymət miqdarı min. +PriceQtyMinCurrency=Bu qty üçün qiymət (valyuta). +WithoutDiscount=Endirimsiz +VATRateForSupplierProduct=ƏDV dərəcəsi (bu satıcı/məhsul üçün) +DiscountQtyMin=Bu ədədə endirim. +NoPriceDefinedForThisSupplier=Bu satıcı/məhsul üçün qiymət/qty müəyyən edilməyib +NoSupplierPriceDefinedForThisProduct=Bu məhsul üçün heç bir satıcı qiyməti/qty müəyyən edilməyib +PredefinedItem=Əvvəlcədən təyin edilmiş element +PredefinedProductsToSell=Əvvəlcədən təyin edilmiş məhsul +PredefinedServicesToSell=Əvvəlcədən təyin edilmiş xidmət +PredefinedProductsAndServicesToSell=Satış üçün əvvəlcədən təyin edilmiş məhsullar/xidmətlər +PredefinedProductsToPurchase=Almaq üçün əvvəlcədən təyin edilmiş məhsul +PredefinedServicesToPurchase=Satın almaq üçün əvvəlcədən təyin edilmiş xidmətlər +PredefinedProductsAndServicesToPurchase=Almaq üçün əvvəlcədən təyin edilmiş məhsullar/xidmətlər +NotPredefinedProducts=Əvvəlcədən təyin edilmiş məhsullar/xidmətlər deyil +GenerateThumb=Baş barmaq yaradın +ServiceNb=Xidmət #%s +ListProductServiceByPopularity=Populyarlığa görə məhsulların/xidmətlərin siyahısı +ListProductByPopularity=Populyarlığa görə məhsulların siyahısı +ListServiceByPopularity=Populyarlığa görə xidmətlərin siyahısı +Finished=İstehsal olunan məhsul +RowMaterial=Xammal +ConfirmCloneProduct=Məhsul və ya xidməti klonlaşdırmaq istədiyinizə əminsiniz %s? +CloneContentProduct=Məhsulun/xidmətin bütün əsas məlumatlarını klonlayın +ClonePricesProduct=Klon qiymətləri +CloneCategoriesProduct=Əlaqəli teqləri/kateqoriyaları klonlayın +CloneCompositionProduct=Virtual məhsulları/xidmətləri klonlayın +CloneCombinationsProduct=Məhsul variantlarını klonlayın +ProductIsUsed=Bu məhsul istifadə olunur +NewRefForClone=Ref. yeni məhsul/xidmət +SellingPrices=Satış qiymətləri +BuyingPrices=Alış qiymətləri +CustomerPrices=Müştəri qiymətləri +SuppliersPrices=Satıcı qiymətləri +SuppliersPricesOfProductsOrServices=Satıcı qiymətləri (məhsul və ya xidmətlərin) +CustomCode=Gömrük|Əmtəə|HS kodu +CountryOrigin=Mənşə ölkəsi +RegionStateOrigin=Mənşə bölgəsi +StateOrigin=Dövlət|Mənşə əyaləti +Nature=Məhsulun təbiəti (xam/istehsal) +NatureOfProductShort=Məhsulun təbiəti +NatureOfProductDesc=Xammal və ya istehsal olunan məhsul +ShortLabel=Qısa etiket +Unit=Vahid p=u. -set=set -se=set -second=second +set=təyin edin +se=təyin edin +second=ikinci s=s -hour=hour +hour=saat h=h -day=day +day=gün d=d -kilogram=kilogram -kg=Kg -gram=gram +kilogram=kiloqram +kg=Kiloqram +gram=qram g=g -meter=meter +meter=metr m=m lm=lm m2=m² m3=m³ -liter=liter +liter=litr l=L -unitP=Piece +unitP=Hissə unitSET=Set -unitS=Second -unitH=Hour -unitD=Day -unitG=Gram -unitM=Meter -unitLM=Linear meter -unitM2=Square meter -unitM3=Cubic meter -unitL=Liter +unitS=İkinci +unitH=Saat +unitD=Gün +unitL=litr unitT=ton -unitKG=kg -unitG=Gram -unitMG=mg -unitLB=pound -unitOZ=ounce -unitM=Meter +unitKG=Kiloqram +unitG=qram +unitMG=mq +unitLB=funt +unitOZ=unsiya +unitM=Metr +unitLM=Xətti sayğac unitDM=dm -unitCM=cm +unitCM=santimetr unitMM=mm unitFT=ft unitIN=in -unitM2=Square meter +unitM2=Kvadrat metr unitDM2=dm² -unitCM2=cm² +unitCM2=sm² unitMM2=mm² unitFT2=ft² unitIN2=in² -unitM3=Cubic meter +unitM3=kubmetr unitDM3=dm³ -unitCM3=cm³ +unitCM3=sm³ unitMM3=mm³ unitFT3=ft³ unitIN3=in³ -unitOZ3=ounce -unitgallon=gallon -ProductCodeModel=Product ref template -ServiceCodeModel=Service ref template -CurrentProductPrice=Current price -AlwaysUseNewPrice=Always use current price of product/service -AlwaysUseFixedPrice=Use the fixed price -PriceByQuantity=Different prices by quantity -DisablePriceByQty=Disable prices by quantity -PriceByQuantityRange=Quantity range -MultipriceRules=Automatic prices for segment -UseMultipriceRules=Use price segment rules (defined into product module setup) to auto calculate prices of all other segments according to first segment -PercentVariationOver=%% variation over %s -PercentDiscountOver=%% discount over %s -KeepEmptyForAutoCalculation=Keep empty to have this calculated automatically from weight or volume of products -VariantRefExample=Examples: COL, SIZE -VariantLabelExample=Examples: Color, Size +unitOZ3=unsiya +unitgallon=qallon +ProductCodeModel=Məhsul referatı şablonu +ServiceCodeModel=Xidmət referatı şablonu +CurrentProductPrice=Cari qiymət +AlwaysUseNewPrice=Həmişə məhsulun/xidmətin cari qiymətindən istifadə edin +AlwaysUseFixedPrice=Sabit qiymətdən istifadə edin +PriceByQuantity=Kəmiyyətə görə fərqli qiymətlər +DisablePriceByQty=Kəmiyyətə görə qiymətləri söndürün +PriceByQuantityRange=Kəmiyyət diapazonu +MultipriceRules=Seqment üçün avtomatik qiymətlər +UseMultipriceRules=Birinci seqmentə uyğun olaraq bütün digər seqmentlərin qiymətlərini avtomatik hesablamaq üçün qiymət seqmenti qaydalarından (məhsul modulu quraşdırmasında müəyyən edilmiş) istifadə edin +PercentVariationOver=%% variasiya %s üzərində +PercentDiscountOver=%% %s üzərində endirim +KeepEmptyForAutoCalculation=Bunun məhsulların çəkisi və ya həcminə görə avtomatik hesablanması üçün boş saxlayın +VariantRefExample=Nümunələr: COL, SIZE +VariantLabelExample=Nümunələr: Rəng, Ölçü ### composition fabrication -Build=Produce -ProductsMultiPrice=Products and prices for each price segment -ProductsOrServiceMultiPrice=Customer prices (of products or services, multi-prices) -ProductSellByQuarterHT=Products turnover quarterly before tax -ServiceSellByQuarterHT=Services turnover quarterly before tax -Quarter1=1st. Quarter -Quarter2=2nd. Quarter -Quarter3=3rd. Quarter -Quarter4=4th. Quarter -BarCodePrintsheet=Print barcode +Build=istehsal +ProductsMultiPrice=Hər bir qiymət seqmenti üçün məhsullar və qiymətlər +ProductsOrServiceMultiPrice=Müştəri qiymətləri (məhsul və ya xidmətlər, çox qiymətlər) +ProductSellByQuarterHT=Məhsul dövriyyəsi vergidən əvvəl rüblük +ServiceSellByQuarterHT=Xidmətlərin dövriyyəsi vergidən əvvəl rüblük +Quarter1=1-ci Dörddəbir +Quarter2=2-ci. Dörddəbir +Quarter3=3-cü. Dörddəbir +Quarter4=4-cü. Dörddəbir +BarCodePrintsheet=Barkodları çap edin PageToGenerateBarCodeSheets=With this tool, you can print sheets of barcode stickers. Choose format of your sticker page, type of barcode and value of barcode, then click on button %s. -NumberOfStickers=Number of stickers to print on page -PrintsheetForOneBarCode=Print several stickers for one barcode -BuildPageToPrint=Generate page to print -FillBarCodeTypeAndValueManually=Fill barcode type and value manually. -FillBarCodeTypeAndValueFromProduct=Fill barcode type and value from barcode of a product. -FillBarCodeTypeAndValueFromThirdParty=Fill barcode type and value from barcode of a third party. -DefinitionOfBarCodeForProductNotComplete=Definition of type or value of barcode not complete for product %s. -DefinitionOfBarCodeForThirdpartyNotComplete=Definition of type or value of barcode non complete for third party %s. -BarCodeDataForProduct=Barcode information of product %s: -BarCodeDataForThirdparty=Barcode information of third party %s: -ResetBarcodeForAllRecords=Define barcode value for all record (this will also reset barcode value already defined with new values) -PriceByCustomer=Different prices for each customer -PriceCatalogue=A single sell price per product/service -PricingRule=Rules for selling prices -AddCustomerPrice=Add price by customer -ForceUpdateChildPriceSoc=Set same price on customer's subsidiaries -PriceByCustomerLog=Log of previous customer prices -MinimumPriceLimit=Minimum price can't be lower then %s -MinimumRecommendedPrice=Minimum recommended price is: %s -PriceExpressionEditor=Price expression editor -PriceExpressionSelected=Selected price expression -PriceExpressionEditorHelp1="price = 2 + 2" or "2 + 2" for setting the price. Use ; to separate expressions +NumberOfStickers=Səhifədə çap ediləcək stikerlərin sayı +PrintsheetForOneBarCode=Bir barkod üçün bir neçə stiker çap edin +BuildPageToPrint=Çap etmək üçün səhifə yaradın +FillBarCodeTypeAndValueManually=Barkod növünü və dəyərini əl ilə doldurun. +FillBarCodeTypeAndValueFromProduct=Məhsulun barkodundan ştrix kodun növünü və dəyərini doldurun. +FillBarCodeTypeAndValueFromThirdParty=Barkod növünü və dəyərini üçüncü tərəfin barkodundan doldurun. +DefinitionOfBarCodeForProductNotComplete=%s məhsulu üçün barkodun növü və ya dəyərinin tərifi tam deyil. +DefinitionOfBarCodeForThirdpartyNotComplete=Üçüncü tərəf üçün tam olmayan barkodun növü və ya dəyərinin tərifi %s. +BarCodeDataForProduct=%s məhsulunun barkod məlumatı: +BarCodeDataForThirdparty=Üçüncü tərəfin barkod məlumatı %s: +ResetBarcodeForAllRecords=Bütün qeydlər üçün barkod dəyərini təyin edin (bu, həmçinin yeni dəyərlərlə artıq müəyyən edilmiş barkod dəyərini sıfırlayacaq) +PriceByCustomer=Hər bir müştəri üçün fərqli qiymətlər +PriceCatalogue=Məhsul/xidmət üçün vahid satış qiyməti +PricingRule=Qiymətlərin satış qaydaları +AddCustomerPrice=Müştəri tərəfindən qiymət əlavə edin +ForceUpdateChildPriceSoc=Müştərinin törəmə şirkətlərində eyni qiyməti təyin edin +PriceByCustomerLog=Əvvəlki müştəri qiymətlərinin qeydi +MinimumPriceLimit=Minimum qiymət %s qiymətindən aşağı ola bilməz +MinimumRecommendedPrice=Tövsiyə olunan minimum qiymət: %s +PriceExpressionEditor=Qiymət ifadəsi redaktoru +PriceExpressionSelected=Seçilmiş qiymət ifadəsi +PriceExpressionEditorHelp1=Qiyməti təyin etmək üçün "qiymət = 2 + 2" və ya "2 + 2". İstifadə edin; ifadələri ayırmaq PriceExpressionEditorHelp2=You can access ExtraFields with variables like #extrafield_myextrafieldkey# and global variables with #global_mycode# -PriceExpressionEditorHelp3=In both product/service and vendor prices there are these variables available:
#tva_tx# #localtax1_tx# #localtax2_tx# #weight# #length# #surface# #price_min# +PriceExpressionEditorHelp3=Həm məhsul/xidmət, həm də satıcı qiymətlərində bu dəyişənlər mövcuddur:
#tva_tx# #localtax1_tx2# #tx#x çəki# #uzunluq# #səth# #qiymət_min# PriceExpressionEditorHelp4=In product/service price only: #supplier_min_price#
In vendor prices only: #supplier_quantity# and #supplier_tva_tx# -PriceExpressionEditorHelp5=Available global values: -PriceMode=Price mode -PriceNumeric=Number -DefaultPrice=Default price -DefaultPriceLog=Log of previous default prices -ComposedProductIncDecStock=Increase/Decrease stock on parent change -ComposedProduct=Child products -MinSupplierPrice=Minimum buying price -MinCustomerPrice=Minimum selling price -NoDynamicPrice=No dynamic price -DynamicPriceConfiguration=Dynamic price configuration -DynamicPriceDesc=You may define mathematical formulae to calculate Customer or Vendor prices. Such formulas can use all mathematical operators, some constants and variables. You can define here the variables you wish to use. If the variable needs an automatic update, you may define the external URL to allow Dolibarr to update the value automatically. -AddVariable=Add Variable -AddUpdater=Add Updater -GlobalVariables=Global variables -VariableToUpdate=Variable to update -GlobalVariableUpdaters=External updaters for variables -GlobalVariableUpdaterType0=JSON data -GlobalVariableUpdaterHelp0=Parses JSON data from specified URL, VALUE specifies the location of relevant value, -GlobalVariableUpdaterHelpFormat0=Format for request {"URL": "http://example.com/urlofjson", "VALUE": "array1,array2,targetvalue"} -GlobalVariableUpdaterType1=WebService data -GlobalVariableUpdaterHelp1=Parses WebService data from specified URL, NS specifies the namespace, VALUE specifies the location of relevant value, DATA should contain the data to send and METHOD is the calling WS method -GlobalVariableUpdaterHelpFormat1=Format for request is {"URL": "http://example.com/urlofws", "VALUE": "array,targetvalue", "NS": "http://example.com/urlofns", "METHOD": "myWSMethod", "DATA": {"your": "data", "to": "send"}} -UpdateInterval=Update interval (minutes) -LastUpdated=Latest update -CorrectlyUpdated=Correctly updated -PropalMergePdfProductActualFile=Files use to add into PDF Azur are/is -PropalMergePdfProductChooseFile=Select PDF files -IncludingProductWithTag=Including products/services with the tag -DefaultPriceRealPriceMayDependOnCustomer=Default price, real price may depend on customer -WarningSelectOneDocument=Please select at least one document -DefaultUnitToShow=Unit -NbOfQtyInProposals=Qty in proposals -ClinkOnALinkOfColumn=Click on a link of column %s to get a detailed view... -ProductsOrServicesTranslations=Products/Services translations -TranslatedLabel=Translated label -TranslatedDescription=Translated description -TranslatedNote=Translated notes -ProductWeight=Weight for 1 product -ProductVolume=Volume for 1 product -WeightUnits=Weight unit -VolumeUnits=Volume unit -WidthUnits=Width unit -LengthUnits=Length unit -HeightUnits=Height unit -SurfaceUnits=Surface unit -SizeUnits=Size unit -DeleteProductBuyPrice=Delete buying price -ConfirmDeleteProductBuyPrice=Are you sure you want to delete this buying price? -SubProduct=Sub product -ProductSheet=Product sheet -ServiceSheet=Service sheet -PossibleValues=Possible values -GoOnMenuToCreateVairants=Go on menu %s - %s to prepare attribute variants (like colors, size, ...) -UseProductFournDesc=Add a feature to define the product description defined by the vendors (for each vendor reference) in addition to the description for customers -ProductSupplierDescription=Vendor description for the product -UseProductSupplierPackaging=Use packaging on supplier prices (recalculate quantities according to packaging set on supplier price when adding/updating line in supplier documents) -PackagingForThisProduct=Packaging -PackagingForThisProductDesc=On supplier order, you will automaticly order this quantity (or a multiple of this quantity). Cannot be less than minimum buying quantity -QtyRecalculatedWithPackaging=The quantity of the line were recalculated according to supplier packaging +PriceExpressionEditorHelp5=Mövcud qlobal dəyərlər: +PriceMode=Qiymət rejimi +PriceNumeric=Nömrə +DefaultPrice=Defolt qiymət +DefaultPriceLog=Əvvəlki standart qiymətlərin jurnalı +ComposedProductIncDecStock=Valideyn dəyişikliyində ehtiyatı artırın/azalın +ComposedProduct=Uşaq məhsulları +MinSupplierPrice=Minimum alış qiyməti +MinCustomerPrice=Minimum satış qiyməti +NoDynamicPrice=Dinamik qiymət yoxdur +DynamicPriceConfiguration=Dinamik qiymət konfiqurasiyası +DynamicPriceDesc=Müştəri və ya Satıcı qiymətlərini hesablamaq üçün riyazi düsturlar təyin edə bilərsiniz. Belə düsturlar bütün riyazi operatorlardan, bəzi sabitlərdən və dəyişənlərdən istifadə edə bilər. Burada istifadə etmək istədiyiniz dəyişənləri təyin edə bilərsiniz. Dəyişən avtomatik yeniləməyə ehtiyac duyarsa, Dolibarr-a dəyəri avtomatik yeniləməyə icazə vermək üçün xarici URL təyin edə bilərsiniz. +AddVariable=Dəyişən əlavə edin +AddUpdater=Yeniləyici əlavə edin +GlobalVariables=Qlobal dəyişənlər +VariableToUpdate=Yenilənmək üçün dəyişən +GlobalVariableUpdaters=Dəyişənlər üçün xarici yeniləyicilər +GlobalVariableUpdaterType0=JSON məlumatları +GlobalVariableUpdaterHelp0=Müəyyən edilmiş URL-dən JSON məlumatlarını təhlil edir, VALUE müvafiq dəyərin yerini müəyyənləşdirir, +GlobalVariableUpdaterHelpFormat0=Sorğu üçün format {"URL": "http://example.com/urlofjson", "VALUE": "array1,array2,targetvalue"} +GlobalVariableUpdaterType1=Veb Xidməti məlumatları +GlobalVariableUpdaterHelp1=Müəyyən edilmiş URL-dən Veb Xidməti məlumatlarını təhlil edir, NS ad məkanını müəyyən edir, VALUE müvafiq dəyərin yerini müəyyənləşdirir, DATA göndəriləcək məlumatları ehtiva etməlidir və METHOD çağıran WS metodudur +GlobalVariableUpdaterHelpFormat1=Sorğunun formatı {"URL": "http://example.com/urlofws", "VALUE": "massiv,targetvalue", "NS": "http://example.com/urlofns", "METHOD" : "myWSMethod", "DATA": {"sizin": "məlumat", "to": "göndər"}} +UpdateInterval=Yeniləmə intervalı (dəqiqə) +LastUpdated=Ən son yeniləmə +CorrectlyUpdated=Düzgün yeniləndi +PropalMergePdfProductActualFile=Fayllar PDF Azur-a əlavə etmək üçün istifadə olunur +PropalMergePdfProductChooseFile=PDF fayllarını seçin +IncludingProductWithTag=Etiketi olan məhsullar/xidmətlər daxil olmaqla +DefaultPriceRealPriceMayDependOnCustomer=Defolt qiymət, real qiymət müştəridən asılı ola bilər +WarningSelectOneDocument=Ən azı bir sənəd seçin +DefaultUnitToShow=Vahid +NbOfQtyInProposals=Təkliflərdə sayı +ClinkOnALinkOfColumn=Ətraflı görünüş əldə etmək üçün %s sütununun linkinə klikləyin... +ProductsOrServicesTranslations=Məhsulların/Xidmətlərin tərcüməsi +TranslatedLabel=Tərcümə edilmiş etiket +TranslatedDescription=Tərcümə edilmiş təsvir +TranslatedNote=Tərcümə edilmiş qeydlər +ProductWeight=1 məhsul üçün çəki +ProductVolume=1 məhsul üçün həcm +WeightUnits=Çəki vahidi +VolumeUnits=Həcm vahidi +WidthUnits=Genişlik vahidi +LengthUnits=Uzunluq vahidi +HeightUnits=Hündürlük vahidi +SurfaceUnits=Səth vahidi +SizeUnits=Ölçü vahidi +DeleteProductBuyPrice=Alış qiymətini silin +ConfirmDeleteProductBuyPrice=Bu alış qiymətini silmək istədiyinizə əminsiniz? +SubProduct=Alt məhsul +ProductSheet=Məhsul vərəqi +ServiceSheet=Xidmət vərəqi +PossibleValues=Mümkün dəyərlər +GoOnMenuToCreateVairants=Atribut variantları (məsələn, rənglər, ölçü, ...) hazırlamaq üçün %s - %s menyusuna keçin. +UseProductFournDesc=Müştərilər üçün təsvirə əlavə olaraq satıcılar tərəfindən müəyyən edilmiş məhsul təsvirini (hər bir satıcı istinadı üçün) müəyyən etmək üçün xüsusiyyət əlavə edin +ProductSupplierDescription=Məhsul üçün satıcı təsviri +UseProductSupplierPackaging=Kəmiyyətləri bəzi verilmiş qatlara yuvarlaqlaşdırmaq üçün "qablaşdırma" funksiyasından istifadə edin (satıcı sənədlərinə sətir əlavə edərkən/yeniləyərkən, məhsulun alış qiymətlərində daha yüksək çoxluğa uyğun olaraq miqdarları və alış qiymətlərini yenidən hesablayın) +PackagingForThisProduct=Miqdarların qablaşdırılması +PackagingForThisProductDesc=Siz avtomatik olaraq bu miqdarın çoxunu alacaqsınız. +QtyRecalculatedWithPackaging=Xəttin miqdarı təchizatçının qablaşdırmasına uyğun olaraq yenidən hesablanmışdır #Attributes -VariantAttributes=Variant attributes -ProductAttributes=Variant attributes for products -ProductAttributeName=Variant attribute %s -ProductAttribute=Variant attribute -ProductAttributeDeleteDialog=Are you sure you want to delete this attribute? All values will be deleted -ProductAttributeValueDeleteDialog=Are you sure you want to delete the value "%s" with reference "%s" of this attribute? +Attributes=Atributlar +VariantAttributes=Variant atributları +ProductAttributes=Məhsullar üçün müxtəlif atributlar +ProductAttributeName=Variant atributu %s +ProductAttribute=Variant atributu +ProductAttributeDeleteDialog=Bu atributu silmək istədiyinizə əminsiniz? Bütün dəyərlər silinəcək +ProductAttributeValueDeleteDialog=Bu atributun "%s" istinadı ilə "%s" dəyərini silmək istədiyinizə əminsiniz? ProductCombinationDeleteDialog=Are you sure want to delete the variant of the product "%s"? -ProductCombinationAlreadyUsed=There was an error while deleting the variant. Please check it is not being used in any object -ProductCombinations=Variants -PropagateVariant=Propagate variants -HideProductCombinations=Hide products variant in the products selector +ProductCombinationAlreadyUsed=Variant silinərkən xəta baş verdi. Heç bir obyektdə istifadə olunmadığını yoxlayın +ProductCombinations=Variantlar +PropagateVariant=Variantları yaymaq +HideProductCombinations=Məhsul seçimində məhsul variantını gizlədin ProductCombination=Variant -NewProductCombination=New variant -EditProductCombination=Editing variant -NewProductCombinations=New variants -EditProductCombinations=Editing variants -SelectCombination=Select combination -ProductCombinationGenerator=Variants generator -Features=Features -PriceImpact=Price impact -ImpactOnPriceLevel=Impact on price level %s -ApplyToAllPriceImpactLevel= Apply to all levels -ApplyToAllPriceImpactLevelHelp=By clicking here you set the same price impact on all levels -WeightImpact=Weight impact -NewProductAttribute=New attribute -NewProductAttributeValue=New attribute value -ErrorCreatingProductAttributeValue=There was an error while creating the attribute value. It could be because there is already an existing value with that reference -ProductCombinationGeneratorWarning=If you continue, before generating new variants, all previous ones will be DELETED. Already existing ones will be updated with the new values -TooMuchCombinationsWarning=Generating lots of variants may result in high CPU, memory usage and Dolibarr not able to create them. Enabling the option "%s" may help reduce memory usage. -DoNotRemovePreviousCombinations=Do not remove previous variants -UsePercentageVariations=Use percentage variations -PercentageVariation=Percentage variation -ErrorDeletingGeneratedProducts=There was an error while trying to delete existing product variants -NbOfDifferentValues=No. of different values -NbProducts=Number of products -ParentProduct=Parent product -HideChildProducts=Hide variant products -ShowChildProducts=Show variant products -NoEditVariants=Go to Parent product card and edit variants price impact in the variants tab -ConfirmCloneProductCombinations=Would you like to copy all the product variants to the other parent product with the given reference? -CloneDestinationReference=Destination product reference -ErrorCopyProductCombinations=There was an error while copying the product variants -ErrorDestinationProductNotFound=Destination product not found -ErrorProductCombinationNotFound=Product variant not found -ActionAvailableOnVariantProductOnly=Action only available on the variant of product -ProductsPricePerCustomer=Product prices per customers -ProductSupplierExtraFields=Additional Attributes (Supplier Prices) -DeleteLinkedProduct=Delete the child product linked to the combination -AmountUsedToUpdateWAP=Amount to use to update the Weighted Average Price -PMPValue=Weighted average price +NewProductCombination=Yeni variant +EditProductCombination=Redaktə variantı +NewProductCombinations=Yeni variantlar +EditProductCombinations=Variantların redaktə edilməsi +SelectCombination=Kombinasiya seçin +ProductCombinationGenerator=Variantların generatoru +Features=Xüsusiyyətləri +PriceImpact=Qiymət təsiri +ImpactOnPriceLevel=Qiymət səviyyəsinə təsir %s +ApplyToAllPriceImpactLevel= Bütün səviyyələrə müraciət edin +ApplyToAllPriceImpactLevelHelp=Bura klikləməklə siz bütün səviyyələrdə eyni qiymət təsirini təyin etmiş olursunuz +WeightImpact=Çəki təsiri +NewProductAttribute=Yeni atribut +NewProductAttributeValue=Yeni atribut dəyəri +ErrorCreatingProductAttributeValue=Atribut dəyərini yaratarkən xəta baş verdi. Bu, həmin istinadla artıq mövcud dəyər olduğuna görə ola bilər +ProductCombinationGeneratorWarning=Davam etsəniz, yeni variantlar yaratmazdan əvvəl bütün əvvəlkilər SİLİNƏCƏK. Artıq mövcud olanlar yeni dəyərlərlə yenilənəcək +TooMuchCombinationsWarning=Çoxlu variantların yaradılması yüksək CPU, yaddaş istifadəsi və Dolibarrın onları yarada bilməməsi ilə nəticələnə bilər. "%s" seçimini aktivləşdirmək yaddaş istifadəsini azaltmağa kömək edə bilər. +DoNotRemovePreviousCombinations=Əvvəlki variantları silməyin +UsePercentageVariations=Faiz dəyişikliklərindən istifadə edin +PercentageVariation=Faiz dəyişikliyi +ErrorDeletingGeneratedProducts=Mövcud məhsul variantlarını silmək istəyərkən xəta baş verdi +NbOfDifferentValues=Fərqli dəyərlərin sayı +NbProducts=Məhsulların sayı +ParentProduct=Ana məhsul +ParentProductOfVariant=Variantın ana məhsulu +HideChildProducts=Variant məhsulları gizlədin +ShowChildProducts=Variant məhsulları göstərin +NoEditVariants=Əsas məhsul kartına keçin və variantlar tabında variantlar qiymətinə təsirini redaktə edin +ConfirmCloneProductCombinations=Bütün məhsul variantlarını verilmiş istinadla digər əsas məhsula köçürmək istərdinizmi? +CloneDestinationReference=Təyinat məhsulu arayışı +ErrorCopyProductCombinations=Məhsul variantlarını kopyalayarkən xəta baş verdi +ErrorDestinationProductNotFound=Təyinat məhsulu tapılmadı +ErrorProductCombinationNotFound=Məhsul variantı tapılmadı +ActionAvailableOnVariantProductOnly=Fəaliyyət yalnız məhsul variantında mövcuddur +ProductsPricePerCustomer=Müştərilər üçün məhsul qiymətləri +ProductSupplierExtraFields=Əlavə Atributlar (Təchizatçı Qiymətləri) +DeleteLinkedProduct=Kombinasiya ilə əlaqəli uşaq məhsulu silin +AmountUsedToUpdateWAP=Çəkili Orta Qiyməti yeniləmək üçün istifadə ediləcək vahid məbləği +PMPValue=Çəkili orta qiymət PMPValueShort=WAP -mandatoryperiod=Mandatory periods -mandatoryPeriodNeedTobeSet=Note: Period (start and end date) must be defined -mandatoryPeriodNeedTobeSetMsgValidate=A service requires a start and end period -mandatoryHelper=Check this if you want a message to the user when creating / validating an invoice, commercial proposal, sales order without entering a start and end date on lines with this service.
Note that the message is a warning and not a blocking error. -DefaultBOM=Default BOM -DefaultBOMDesc=The default BOM recommended to use to manufacture this product. This field can be set only if nature of product is '%s'. -Rank=Rank -SwitchOnSaleStatus=Switch on sale status -SwitchOnPurchaseStatus=Switch on purchase status -StockMouvementExtraFields= Extra Fields (stock mouvement) +mandatoryperiod=Məcburi dövrlər +mandatoryPeriodNeedTobeSet=Qeyd: Müddət (başlama və bitmə tarixi) müəyyən edilməlidir +mandatoryPeriodNeedTobeSetMsgValidate=Xidmət başlanğıc və bitmə müddəti tələb edir +mandatoryHelper=Bu xidmətlə sətirlərdə başlanğıc və bitmə tarixini daxil etmədən faktura, kommersiya təklifi, satış sifarişi yaratarkən/təsdiq edərkən istifadəçiyə mesaj göndərmək istəyirsinizsə, bunu yoxlayın.
Qeyd edək ki, mesaj xəbərdarlıqdır və bloklama xətası deyil. +DefaultBOM=Defolt BOM +DefaultBOMDesc=Bu məhsulu istehsal etmək üçün istifadə etmək tövsiyə olunan standart BOM. Bu sahə yalnız məhsulun xarakteri "%s" olduqda təyin edilə bilər. +Rank=Rütbə +MergeOriginProduct=Dublikat məhsul (silmək istədiyiniz məhsul) +MergeProducts=Məhsulları birləşdirin +ConfirmMergeProducts=Seçilmiş məhsulu cari ilə birləşdirmək istədiyinizə əminsiniz? Bütün əlaqəli obyektlər (qaimə-fakturalar, sifarişlər, ...) cari məhsula köçürüləcək, bundan sonra seçilmiş məhsul silinəcək. +ProductsMergeSuccess=Məhsullar birləşdirilib +ErrorsProductsMerge=Məhsullarda səhvlər birləşir +SwitchOnSaleStatus=Satış statusunu yandırın +SwitchOnPurchaseStatus=Satınalma statusunu yandırın +UpdatePrice=Müştəri qiymətini artırmaq/azaltmaq +StockMouvementExtraFields= Əlavə Sahələr (səhmlərin hərəkəti) +InventoryExtraFields= Əlavə Sahələr (inventar) +ScanOrTypeOrCopyPasteYourBarCodes=Barkodlarınızı skan edin və ya yazın və ya kopyalayın/yapışdırın +PuttingPricesUpToDate=Qiymətləri cari məlum qiymətlərlə yeniləyin +PuttingDescUpToDate=Cari məlum təsvirlərlə təsvirləri yeniləyin +PMPExpected=Gözlənilən PMP +ExpectedValuation=Gözlənilən Qiymətləndirmə +PMPReal=Real PMP +RealValuation=Real Qiymətləndirmə +ConfirmEditExtrafield = Dəyişdirmək istədiyiniz əlavə sahəni seçin +ConfirmEditExtrafieldQuestion = Bu əlavə sahəni dəyişdirmək istədiyinizə əminsiniz? +ModifyValueExtrafields = Əlavə sahənin dəyərini dəyişdirin +OrProductsWithCategories=Və ya etiketləri/kateqoriyaları olan məhsullar +WarningTransferBatchStockMouvToGlobal = Bu məhsulu seriyadan çıxarmaq istəyirsinizsə, onun bütün seriyalı ehtiyatı qlobal fonda çevriləcək +WarningConvertFromBatchToSerial=Hal-hazırda məhsul üçün 2-yə bərabər və ya daha yüksək kəmiyyətiniz varsa, bu seçimə keçmək hələ də eyni partiyanın müxtəlif obyektləri olan bir məhsula sahib olacağınız deməkdir (unikal seriya nömrəsi istəsəniz). Dublikat inventar və ya bunu düzəltmək üçün əl ilə ehtiyat hərəkəti edilənə qədər qalacaq. +AllowStockMovementVariantParent=Also records stock movements on parent products of variant products +AllowStockMovementVariantParentHelp=By default, a parent of a variant is a virtual product, so no stock is managed for it. By enabling this option, a stock will be managed for parent products and each time a stock quantity is modified for a variant product, the same quantity will be modified for the parent product. You should not need this option, except if you are using variant to manage the same product than parent (but with different descriptions, prices...) +ConfirmSetToDraftInventory=Qaralama statusuna qayıtmaq istədiyinizə əminsiniz?
Hazırda inventarda təyin edilmiş miqdarlar sıfırlanacaq. diff --git a/htdocs/langs/az_AZ/propal.lang b/htdocs/langs/az_AZ/propal.lang index 5658db5f964..2728aa8e471 100644 --- a/htdocs/langs/az_AZ/propal.lang +++ b/htdocs/langs/az_AZ/propal.lang @@ -15,7 +15,7 @@ ValidateProp=Kommersiya təklifini təsdiqləyin CancelPropal=Ləğv et AddProp=Təklif yaradın ConfirmDeleteProp=Bu kommersiya təklifini silmək istədiyinizə əminsiniz? -ConfirmValidateProp=Bu kommersiya təklifini %s adı ilə doğrulamaq istədiyinizə əminsiniz >? +ConfirmValidateProp=Are you sure you want to validate this commercial proposal under name %s? ConfirmCancelPropal=Kommersiya təklifini %s ləğv etmək istədiyinizə əminsiniz? LastPropals=Ən son %s təkliflər LastModifiedProposals=Ən son %s dəyişdirilmiş təkliflər diff --git a/htdocs/langs/az_AZ/receptions.lang b/htdocs/langs/az_AZ/receptions.lang index 7f1a97d16a9..b775a9bbd0e 100644 --- a/htdocs/langs/az_AZ/receptions.lang +++ b/htdocs/langs/az_AZ/receptions.lang @@ -1,54 +1,56 @@ # Dolibarr language file - Source file is en_US - receptions -ReceptionDescription=Vendor reception management (Create reception documents) -ReceptionsSetup=Vendor Reception setup -RefReception=Ref. reception -Reception=Reception -Receptions=Receptions -AllReceptions=All Receptions -Reception=Reception -Receptions=Receptions -ShowReception=Show Receptions -ReceptionsArea=Receptions area -ListOfReceptions=List of receptions -ReceptionMethod=Reception method -LastReceptions=Latest %s receptions -StatisticsOfReceptions=Statistics for receptions -NbOfReceptions=Number of receptions -NumberOfReceptionsByMonth=Number of receptions by month -ReceptionCard=Reception card -NewReception=New reception -CreateReception=Create reception -QtyInOtherReceptions=Qty in other receptions -OtherReceptionsForSameOrder=Other receptions for this order -ReceptionsAndReceivingForSameOrder=Receptions and receipts for this order -ReceptionsToValidate=Receptions to validate -StatusReceptionCanceled=Canceled -StatusReceptionDraft=Draft -StatusReceptionValidated=Validated (products to receive or already received) -StatusReceptionValidatedToReceive=Validated (products to receive) -StatusReceptionValidatedReceived=Validated (products received) -StatusReceptionProcessed=Processed -StatusReceptionDraftShort=Draft -StatusReceptionValidatedShort=Validated -StatusReceptionProcessedShort=Processed -ReceptionSheet=Reception sheet -ConfirmDeleteReception=Are you sure you want to delete this reception? -ConfirmValidateReception=Are you sure you want to validate this reception with reference %s? -ConfirmCancelReception=Are you sure you want to cancel this reception? -StatsOnReceptionsOnlyValidated=Statistics conducted on receptions only validated. Date used is date of validation of reception (planed delivery date is not always known). -SendReceptionByEMail=Send reception by email -SendReceptionRef=Submission of reception %s -ActionsOnReception=Events on reception -ReceptionCreationIsDoneFromOrder=For the moment, creation of a new reception is done from the Purchase Order. -ReceptionLine=Reception line -ProductQtyInReceptionAlreadySent=Product quantity from open sales order already sent -ProductQtyInSuppliersReceptionAlreadyRecevied=Product quantity from open supplier order already received -ValidateOrderFirstBeforeReception=You must first validate the order before being able to make receptions. -ReceptionsNumberingModules=Numbering module for receptions -ReceptionsReceiptModel=Document templates for receptions -NoMorePredefinedProductToDispatch=No more predefined products to dispatch -ReceptionExist=A reception exists -ByingPrice=Bying price -ReceptionBackToDraftInDolibarr=Reception %s back to draft -ReceptionClassifyClosedInDolibarr=Reception %s classified Closed -ReceptionUnClassifyCloseddInDolibarr=Reception %s re-open +ReceptionDescription=Satıcı qəbulunun idarə edilməsi (qəbul sənədlərinin yaradılması) +ReceptionsSetup=Satıcı qəbulunun qurulması +RefReception=Ref. qəbul +Reception=Qəbul +Receptions=Qəbullar +AllReceptions=Bütün Qəbullar +ShowReception=Qəbulları göstərin +ReceptionsArea=Qəbullar sahəsi +ListOfReceptions=Qəbulların siyahısı +ReceptionMethod=Qəbul üsulu +LastReceptions=Ən son %s qəbulları +StatisticsOfReceptions=Qəbullar üçün statistika +NbOfReceptions=Qəbulların sayı +NumberOfReceptionsByMonth=Aylar üzrə qəbulların sayı +ReceptionCard=Qəbul kartı +NewReception=Yeni qəbul +CreateReception=Qəbul yaradın +QtyInOtherReceptions=Digər qəbullarda ədəd +OtherReceptionsForSameOrder=Bu sifariş üçün digər qəbullar +ReceptionsAndReceivingForSameOrder=Bu sifariş üçün qəbullar və qəbzlər +ReceptionsToValidate=Təsdiq etmək üçün qəbullar +StatusReceptionCanceled=Ləğv edildi +StatusReceptionDraft=Qaralama +StatusReceptionValidated=Təsdiqlənmiş (alınacaq və ya artıq alınmış məhsullar) +StatusReceptionValidatedToReceive=Təsdiqlənmiş (qəbul ediləcək məhsullar) +StatusReceptionValidatedReceived=Təsdiq edildi (məhsul qəbul edildi) +StatusReceptionProcessed=Emal edilib +StatusReceptionDraftShort=Qaralama +StatusReceptionValidatedShort=Təsdiqlənmişdir +StatusReceptionProcessedShort=Emal edilib +ReceptionSheet=Qəbul vərəqi +ValidateReception=Qəbulu təsdiqləyin +ConfirmDeleteReception=Bu qəbulu silmək istədiyinizə əminsiniz? +ConfirmValidateReception=Are you sure you want to validate this reception with the reference %s? +ConfirmCancelReception=Bu qəbulu ləğv etmək istədiyinizə əminsiniz? +StatsOnReceptionsOnlyValidated=Yalnız təsdiqlənmiş qəbullar üzrə statistika aparılır. İstifadə olunan tarix qəbulun təsdiqlənməsi tarixidir (planlaşdırılmış çatdırılma tarixi həmişə məlum deyil). +SendReceptionByEMail=E-poçtla qəbulu göndərin +SendReceptionRef=Qəbulun təqdim edilməsi %s +ActionsOnReception=Qəbul zamanı hadisələr +ReceptionCreationIsDoneFromOrder=Hazırda yeni qəbulun yaradılması Satınalma Sifarişindən həyata keçirilir. +ReceptionLine=Qəbul xətti +ProductQtyInReceptionAlreadySent=Açıq satış sifarişindən məhsulun miqdarı artıq göndərilmişdir +ProductQtyInSuppliersReceptionAlreadyRecevied=Açıq təchizatçı sifarişindən məhsulun miqdarı artıq alınmışdır +ValidateOrderFirstBeforeReception=Qəbul etmədən əvvəl sifarişi təsdiqləməlisiniz. +ReceptionsNumberingModules=Qəbullar üçün nömrələmə modulu +ReceptionsReceiptModel=Qəbullar üçün sənəd şablonları +NoMorePredefinedProductToDispatch=Artıq göndəriləcək əvvəlcədən təyin edilmiş məhsullar yoxdur +ReceptionExist=Qəbul var +ReceptionBackToDraftInDolibarr=Qəbul %s qaralamaya qayıdıb +ReceptionClassifyClosedInDolibarr=Qəbul %s təsnif edilib Bağlanıb +ReceptionUnClassifyCloseddInDolibarr=Qəbul %s yenidən açılır +RestoreWithCurrentQtySaved=Kəmiyyətləri ən son saxlanmış dəyərlərlə doldurun +ReceptionsRecorded=Qəbullar qeydə alınıb +ReceptionUpdated=Qəbul uğurla yeniləndi +ReceptionDistribution=Qəbul paylanması diff --git a/htdocs/langs/az_AZ/sendings.lang b/htdocs/langs/az_AZ/sendings.lang index 8f10b1e9404..34149394cf6 100644 --- a/htdocs/langs/az_AZ/sendings.lang +++ b/htdocs/langs/az_AZ/sendings.lang @@ -1,76 +1,86 @@ # Dolibarr language file - Source file is en_US - sendings -RefSending=Ref. shipment -Sending=Shipment -Sendings=Shipments -AllSendings=All Shipments -Shipment=Shipment -Shipments=Shipments -ShowSending=Show Shipments -Receivings=Delivery Receipts -SendingsArea=Shipments area -ListOfSendings=List of shipments -SendingMethod=Shipping method -LastSendings=Latest %s shipments -StatisticsOfSendings=Statistics for shipments -NbOfSendings=Number of shipments -NumberOfShipmentsByMonth=Number of shipments by month -SendingCard=Shipment card -NewSending=New shipment -CreateShipment=Create shipment -QtyShipped=Qty shipped -QtyShippedShort=Qty ship. -QtyPreparedOrShipped=Qty prepared or shipped -QtyToShip=Qty to ship -QtyToReceive=Qty to receive -QtyReceived=Qty received -QtyInOtherShipments=Qty in other shipments -KeepToShip=Remain to ship -KeepToShipShort=Remain -OtherSendingsForSameOrder=Other shipments for this order -SendingsAndReceivingForSameOrder=Shipments and receipts for this order -SendingsToValidate=Shipments to validate -StatusSendingCanceled=Canceled -StatusSendingCanceledShort=Canceled -StatusSendingDraft=Draft -StatusSendingValidated=Validated (products to ship or already shipped) -StatusSendingProcessed=Processed -StatusSendingDraftShort=Draft -StatusSendingValidatedShort=Validated -StatusSendingProcessedShort=Processed -SendingSheet=Shipment sheet -ConfirmDeleteSending=Are you sure you want to delete this shipment? -ConfirmValidateSending=Are you sure you want to validate this shipment with reference %s? -ConfirmCancelSending=Are you sure you want to cancel this shipment? -DocumentModelMerou=Merou A5 model -WarningNoQtyLeftToSend=Warning, no products waiting to be shipped. -StatsOnShipmentsOnlyValidated=Statistics are only for validated shipments. Date used is the date of validation of shipment (planned delivery date is not always known) -DateDeliveryPlanned=Planned date of delivery -RefDeliveryReceipt=Ref delivery receipt -StatusReceipt=Status delivery receipt -DateReceived=Date delivery received -ClassifyReception=Classify reception -SendShippingByEMail=Send shipment by email -SendShippingRef=Submission of shipment %s -ActionsOnShipping=Events on shipment -LinkToTrackYourPackage=Link to track your package -ShipmentCreationIsDoneFromOrder=For the moment, creation of a new shipment is done from the Sales Order record. -ShipmentLine=Shipment line -ProductQtyInCustomersOrdersRunning=Product quantity from open sales orders -ProductQtyInSuppliersOrdersRunning=Product quantity from open purchase orders -ProductQtyInShipmentAlreadySent=Product quantity from open sales order already sent -ProductQtyInSuppliersShipmentAlreadyRecevied=Product quantity from open purchase orders already received -NoProductToShipFoundIntoStock=No product to ship found in warehouse %s. Correct stock or go back to choose another warehouse. -WeightVolShort=Weight/Vol. -ValidateOrderFirstBeforeShipment=You must first validate the order before being able to make shipments. +RefSending=Ref. göndərmə +Sending=Göndərmə +Sendings=Göndərmələr +AllSendings=Bütün Göndərmələr +Shipment=Göndərmə +Shipments=Göndərmələr +ShowSending=Göndərmələri göstərin +Receivings=Çatdırılma Qəbzləri +SendingsArea=Göndərmə sahəsi +ListOfSendings=Göndərmələrin siyahısı +SendingMethod=Göndərmə üsulu +LastSendings=Ən son %s göndərişləri +StatisticsOfSendings=Göndərmə statistikası +NbOfSendings=Göndərmələrin sayı +NumberOfShipmentsByMonth=Aylar üzrə göndərişlərin sayı +SendingCard=Göndərmə kartı +NewSending=Yeni göndəriş +CreateShipment=Göndərmə yaradın +QtyShipped=Miqdar göndərildi +QtyShippedShort=Qty gəmi. +QtyPreparedOrShipped=Miqdar hazırlanmış və ya göndərilmişdir +QtyToShip=Göndərmə miqdarı +QtyToReceive=Qəbul etmək üçün qty +QtyReceived=Qəbul edilən miqdar +QtyInOtherShipments=Digər göndərişlərdə miqdar +KeepToShip=Gəmidə qalın +KeepToShipShort=Qalmaq +OtherSendingsForSameOrder=Bu sifariş üçün digər göndərişlər +SendingsAndReceivingForSameOrder=Bu sifariş üçün göndərişlər və qəbzlər +SendingsToValidate=Doğrulamaq üçün göndərmələr +StatusSendingCanceled=Ləğv edildi +StatusSendingCanceledShort=Ləğv edildi +StatusSendingDraft=Qaralama +StatusSendingValidated=Təsdiqlənmiş (göndəriləcək və ya artıq göndərilmiş məhsullar) +StatusSendingProcessed=Emal edilib +StatusSendingDraftShort=Qaralama +StatusSendingValidatedShort=Təsdiqlənmişdir +StatusSendingProcessedShort=Emal edilib +SendingSheet=Göndərmə vərəqi +ConfirmDeleteSending=Bu göndərişi silmək istədiyinizə əminsiniz? +ConfirmValidateSending=Are you sure you want to validate this shipment with the reference %s? +ConfirmCancelSending=Bu göndərişi ləğv etmək istədiyinizə əminsiniz? +DocumentModelMerou=Merou A5 modeli +WarningNoQtyLeftToSend=Xəbərdarlıq, göndərilməyi gözləyən heç bir məhsul yoxdur. +StatsOnShipmentsOnlyValidated=Statistikalar yalnız təsdiqlənmiş göndərişlər üçündür. İstifadə olunan tarix göndərişin təsdiqlənmə tarixidir (planlaşdırılmış çatdırılma tarixi həmişə məlum deyil) +DateDeliveryPlanned=Planlaşdırılmış çatdırılma tarixi +RefDeliveryReceipt=Ref çatdırılma qəbzi +StatusReceipt=Statusun çatdırılması qəbzi +DateReceived=Qəbul tarixi +ClassifyReception=Qəbul edilənləri təsnif edin +SendShippingByEMail=Göndərməni e-poçtla göndərin +SendShippingRef=Göndərmə %s +ActionsOnShipping=Göndərmə zamanı hadisələr +LinkToTrackYourPackage=Paketinizi izləmək üçün keçid +ShipmentCreationIsDoneFromOrder=Hazırda yeni göndərişin yaradılması Satış Sifarişi qeydindən həyata keçirilir. +ShipmentLine=Göndərmə xətti +ProductQtyInCustomersOrdersRunning=Açıq satış sifarişlərindən məhsulun miqdarı +ProductQtyInSuppliersOrdersRunning=Açıq satınalma sifarişlərindən məhsulun miqdarı +ProductQtyInShipmentAlreadySent=Açıq satış sifarişindən məhsulun miqdarı artıq göndərilmişdir +ProductQtyInSuppliersShipmentAlreadyRecevied=Artıq alınmış açıq alış sifarişlərindən məhsulun miqdarı +NoProductToShipFoundIntoStock=%s anbarında göndəriləcək məhsul tapılmadı. Anbarı düzəldin və ya başqa anbar seçmək üçün geri qayıdın. +WeightVolShort=Çəki/Vol. +ValidateOrderFirstBeforeShipment=Göndərmə həyata keçirməzdən əvvəl ilk növbədə sifarişi təsdiqləməlisiniz. +NoLineGoOnTabToAddSome=Sətir yoxdur, əlavə etmək üçün "%s" tabına keçin # Sending methods # ModelDocument -DocumentModelTyphon=More complete document model for delivery receipts (logo...) -DocumentModelStorm=More complete document model for delivery receipts and extrafields compatibility (logo...) -Error_EXPEDITION_ADDON_NUMBER_NotDefined=Constant EXPEDITION_ADDON_NUMBER not defined -SumOfProductVolumes=Sum of product volumes -SumOfProductWeights=Sum of product weights +DocumentModelTyphon=Çatdırılma qəbzləri üçün daha tam sənəd modeli (loqo...) +DocumentModelStorm=Çatdırılma qəbzləri və əlavə sahələrə uyğunluq üçün daha tam sənəd modeli (loqo...) +Error_EXPEDITION_ADDON_NUMBER_NotDefined=Daimi EXPEDITION_ADDON_NUMBER müəyyən edilməyib +SumOfProductVolumes=Məhsul həcmlərinin cəmi +SumOfProductWeights=Məhsul çəkilərinin cəmi # warehouse details -DetailWarehouseNumber= Warehouse details -DetailWarehouseFormat= W:%s (Qty: %d) +DetailWarehouseNumber= Anbar təfərrüatları +DetailWarehouseFormat= W:%s (Kəmiyyət: %d) +SHIPPING_DISPLAY_STOCK_ENTRY_DATE=Serial nömrəsi və ya partiya üçün göndərişin yaradılması zamanı anbara son giriş tarixini göstərin +CreationOptions=Göndərmənin yaradılması zamanı mövcud seçimlər + +ShipmentDistribution=Göndərmə paylanması + +ErrorTooManyCombinationBatchcode=%s xətti üçün göndəriş yoxdur, çünki çoxlu anbar, məhsul, toplu kod kombinasiyası tapılıb (%s). +ErrorNoCombinationBatchcode=%s sətrini anbar-məhsul lotu/seriya kombinasiyası kimi saxlamaq mümkün olmadı (%s, %s, %s) anbarda tapılmadı. + +ErrorTooMuchShipped=Göndərilən miqdar %s sətri üçün sifariş edilmiş miqdardan çox olmamalıdır. diff --git a/htdocs/langs/az_AZ/stocks.lang b/htdocs/langs/az_AZ/stocks.lang index 7f16c8913b7..36311383982 100644 --- a/htdocs/langs/az_AZ/stocks.lang +++ b/htdocs/langs/az_AZ/stocks.lang @@ -164,14 +164,14 @@ InventoryCode=Hərəkət və ya inventar kodu IsInPackage=Paketdə var WarehouseAllowNegativeTransfer=Səhm mənfi ola bilər qtyToTranferIsNotEnough=Mənbə anbarınızdan kifayət qədər ehtiyatınız yoxdur və quraşdırmanız mənfi ehtiyatlara icazə vermir. -qtyToTranferLotIsNotEnough=Mənbə anbarınızdan bu lot nömrəsi üçün kifayət qədər ehtiyatınız yoxdur və quraşdırmanız mənfi ehtiyatlara icazə vermir ("%s' '%s' anbarında %s-dır. +qtyToTranferLotIsNotEnough=You don't have enough stock, for this lot number, from your source warehouse and your setup does not allow negative stocks (Qty for product '%s' with lot '%s' is %s in warehouse '%s'). ShowWarehouse=Anbarı göstərin MovementCorrectStock=%s məhsulu üçün ehtiyat korreksiyası MovementTransferStock=%s məhsulunun başqa anbara köçürülməsi BatchStockMouvementAddInGlobal=Partiya ehtiyatı qlobal stoka keçir (məhsul artıq partiyadan istifadə etmir) InventoryCodeShort=Inv./Mov. kod NoPendingReceptionOnSupplierOrder=Açıq satınalma sifarişinə görə gözlənilən qəbul yoxdur -ThisSerialAlreadyExistWithDifferentDate=Bu lot/seriya nömrəsi (%s) artıq mövcuddur fərqli yemək və ya satış tarixi (tapıldı %s, lakin siz daxil edin. span class='notranslate'>%s). +ThisSerialAlreadyExistWithDifferentDate=This lot/serial number (%s) already exists but with different eatby or sellby date (found %s but you enter %s). OpenAnyMovement=Açıq (bütün hərəkət) OpenInternal=Açıq (yalnız daxili hərəkət) UseDispatchStatus=Satınalma sifarişinin qəbulu zamanı məhsul xətləri üçün göndərmə statusundan istifadə edin (təsdiq et/imtina et). @@ -253,7 +253,7 @@ DisableStockChangeOfSubProduct=Bu hərəkət zamanı bu Dəstin bütün alt məh ImportFromCSV=Hərəkətin CSV siyahısını idxal edin ChooseFileToImport=Faylı yükləyin, sonra faylı mənbə idxal faylı kimi seçmək üçün %s ikonasına klikləyin... SelectAStockMovementFileToImport=idxal etmək üçün səhm hərəkəti faylını seçin -InfoTemplateImport=Yüklənmiş fayl bu formata malik olmalıdır (* məcburi sahələrdir):
Mənbə Anbarı* | Hədəf Anbarı* | Məhsul* | Kəmiyyət* | Lot/seriya nömrəsi
CSV simvol ayırıcısı "%s" +InfoTemplateImport=Uploaded file needs to have this format (* are mandatory fields):
Source Warehouse* | Target Warehouse* | Product* | Quantity* | Lot/serial number
CSV character separator must be "%s" LabelOfInventoryMovemement=İnventar %s ReOpen=Yenidən açın ConfirmFinish=İnventarın bağlanmasını təsdiq edirsinizmi? Bu, səhmlərinizi inventarınıza daxil etdiyiniz real miqdar qədər yeniləmək üçün bütün səhm hərəkətlərini yaradacaq. @@ -282,7 +282,7 @@ ModuleStockTransferName=Təkmil Səhm Transferi ModuleStockTransferDesc=Köçürmə vərəqinin yaradılması ilə Fond Transferinin qabaqcıl idarə edilməsi StockTransferNew=Yeni səhm köçürməsi StockTransferList=Səhm köçürmələri siyahısı -ConfirmValidateStockTransfer=Bu səhmlərin transferini %s istinadı ilə doğrulamaq istədiyinizə əminsiniz span> ? +ConfirmValidateStockTransfer=Are you sure you want to validate this stocks transfer with the reference %s ? ConfirmDestock=%s transferi ilə ehtiyatların azalması ConfirmDestockCancel=%s transferi ilə səhmlərin azalmasını ləğv edin DestockAllProduct=Səhmlərin azalması diff --git a/htdocs/langs/az_AZ/stripe.lang b/htdocs/langs/az_AZ/stripe.lang index 84493c1a036..7a112707b19 100644 --- a/htdocs/langs/az_AZ/stripe.lang +++ b/htdocs/langs/az_AZ/stripe.lang @@ -22,7 +22,7 @@ ToOfferALinkForOnlinePaymentOnContractLine=Müqavilə xətti üçün %s onlayn ToOfferALinkForOnlinePaymentOnFreeAmount=Mövcud obyekti olmayan istənilən məbləğin %s onlayn ödəniş səhifəsini təklif etmək üçün URL ToOfferALinkForOnlinePaymentOnMemberSubscription=Üzv abunəliyi üçün %s onlayn ödəniş səhifəsi təklif etmək üçün URL ToOfferALinkForOnlinePaymentOnDonation=İanənin ödənilməsi üçün %s onlayn ödəniş səhifəsi təklif etmək üçün URL -YouCanAddTagOnUrl=Siz həmçinin url parametrini &tag=dəyərib0ae64758bac> əlavə edə bilərsiniz class='notranslate'> öz ödəniş şərh teqinizi əlavə etmək üçün həmin URL-lərdən hər hansı birinə (yalnız obyektlə əlaqəli olmayan ödəniş üçün məcburidir).
Mövcud obyekti olmayan ödənişlərin URL-i, siz həmçinin &noidempotency=1 parametrini əlavə edə bilərsiniz, beləliklə eyni teqlə eyni link bir neçə dəfə istifadə oluna bilər (bəzi ödəniş rejimi bu parametr olmadan hər bir fərqli keçid üçün ödənişi 1-ə qədər məhdudlaşdıra bilər) +YouCanAddTagOnUrl=You can also add url parameter &tag=value to any of those URL (mandatory only for payment not linked to an object) to add your own payment comment tag.
For the URL of payments with no existing object, you may also add the parameter &noidempotency=1 so the same link with same tag can be used several times (some payment mode may limit the payment to 1 for each different link without this parameter) SetupStripeToHavePaymentCreatedAutomatically=Ödəniş avtomatik yaradılan zaman %s URL ilə Stripe-i quraşdırın. Stripe tərəfindən təsdiq edilmişdir. AccountParameter=Hesab parametrləri UsageParameter=İstifadə parametrləri diff --git a/htdocs/langs/az_AZ/supplier_proposal.lang b/htdocs/langs/az_AZ/supplier_proposal.lang index ce5bdf0425a..af58dbb7ebd 100644 --- a/htdocs/langs/az_AZ/supplier_proposal.lang +++ b/htdocs/langs/az_AZ/supplier_proposal.lang @@ -1,54 +1,59 @@ # Dolibarr language file - Source file is en_US - supplier_proposal -SupplierProposal=Vendor commercial proposals -supplier_proposalDESC=Manage price requests to suppliers -SupplierProposalNew=New price request -CommRequest=Price request -CommRequests=Price requests -SearchRequest=Find a request -DraftRequests=Draft requests -SupplierProposalsDraft=Draft vendor proposals -LastModifiedRequests=Latest %s modified price requests -RequestsOpened=Open price requests -SupplierProposalArea=Vendor proposals area -SupplierProposalShort=Vendor proposal -SupplierProposals=Vendor proposals -SupplierProposalsShort=Vendor proposals -NewAskPrice=New price request -ShowSupplierProposal=Show price request -AddSupplierProposal=Create a price request -SupplierProposalRefFourn=Vendor ref -SupplierProposalDate=Delivery date -SupplierProposalRefFournNotice=Before closing to "Accepted", think to grasp suppliers references. +SupplierProposal=Satıcı kommersiya təklifləri +supplier_proposalDESC=Təchizatçılara qiymət sorğularını idarə edin +SupplierProposalNew=Yeni qiymət sorğusu +CommRequest=Qiymət sorğusu +CommRequests=Qiymət sorğuları +SearchRequest=Müraciət tapın +DraftRequests=Qaralama sorğular +SupplierProposalsDraft=Satıcı təklifləri layihəsi +LastModifiedRequests=Ən son %s dəyişdirilmiş qiymət sorğuları +RequestsOpened=Açıq qiymət sorğuları +SupplierProposalArea=Satıcı təklifləri sahəsi +SupplierProposalShort=Satıcı təklifi +SupplierProposals=Satıcı təklifləri +SupplierProposalsShort=Satıcı təklifləri +AskPrice=Qiymət sorğusu +NewAskPrice=Yeni qiymət sorğusu +ShowSupplierProposal=Qiymət sorğusunu göstərin +AddSupplierProposal=Qiymət sorğusu yaradın +SupplierProposalRefFourn=Satıcı refer +SupplierProposalDate=Çatdırılma tarixi +SupplierProposalRefFournNotice="Qəbul edildi" bölməsinə keçməzdən əvvəl təchizatçıların istinadlarını başa düşməyi düşünün. ConfirmValidateAsk=Are you sure you want to validate this price request under name %s? -DeleteAsk=Delete request -ValidateAsk=Validate request -SupplierProposalStatusDraft=Draft (needs to be validated) -SupplierProposalStatusValidated=Validated (request is open) -SupplierProposalStatusClosed=Closed -SupplierProposalStatusSigned=Accepted -SupplierProposalStatusNotSigned=Refused -SupplierProposalStatusDraftShort=Draft -SupplierProposalStatusValidatedShort=Validated -SupplierProposalStatusClosedShort=Closed -SupplierProposalStatusSignedShort=Accepted -SupplierProposalStatusNotSignedShort=Refused -CopyAskFrom=Create a price request by copying an existing request -CreateEmptyAsk=Create blank request -ConfirmCloneAsk=Are you sure you want to clone the price request %s? -ConfirmReOpenAsk=Are you sure you want to open back the price request %s? -SendAskByMail=Send price request by mail -SendAskRef=Sending the price request %s -SupplierProposalCard=Request card -ConfirmDeleteAsk=Are you sure you want to delete this price request %s? -ActionsOnSupplierProposal=Events on price request -DocModelAuroreDescription=A complete request model (logo...) -CommercialAsk=Price request -DefaultModelSupplierProposalCreate=Default model creation -DefaultModelSupplierProposalToBill=Default template when closing a price request (accepted) -DefaultModelSupplierProposalClosed=Default template when closing a price request (refused) -ListOfSupplierProposals=List of vendor proposal requests -ListSupplierProposalsAssociatedProject=List of vendor proposals associated with project -SupplierProposalsToClose=Vendor proposals to close -SupplierProposalsToProcess=Vendor proposals to process -LastSupplierProposals=Latest %s price requests -AllPriceRequests=All requests +DeleteAsk=Sorğunu silin +ValidateAsk=Sorğunu təsdiqləyin +SupplierProposalStatusDraft=Qaralama (təsdiq edilməlidir) +SupplierProposalStatusValidated=Təsdiq edildi (sorğu açıqdır) +SupplierProposalStatusClosed=Bağlı +SupplierProposalStatusSigned=Qəbul edildi +SupplierProposalStatusNotSigned=İmtina etdi +SupplierProposalStatusDraftShort=Qaralama +SupplierProposalStatusValidatedShort=Təsdiqlənmişdir +SupplierProposalStatusClosedShort=Bağlı +SupplierProposalStatusSignedShort=Qəbul edildi +SupplierProposalStatusNotSignedShort=İmtina etdi +CopyAskFrom=Mövcud sorğunu kopyalayaraq qiymət sorğusu yaradın +CreateEmptyAsk=Boş sorğu yaradın +ConfirmCloneAsk=Qiymət sorğusunu %s klonlamaq istədiyinizə əminsiniz? +ConfirmReOpenAsk=Qiymət sorğusunu geri açmaq istədiyinizə əminsiniz %s ? +SendAskByMail=Qiymət sorğusunu poçtla göndərin +SendAskRef=Qiymət sorğusu göndərilir %s +SupplierProposalCard=Kart sorğusu +ConfirmDeleteAsk=Bu qiymət sorğusunu silmək istədiyinizə əminsiniz %s? +ActionsOnSupplierProposal=Qiymət tələbi ilə hadisələr +DocModelAuroreDescription=Satıcıdan kotirovka sorğusu üçün tam şablon (Sponge şablonunun köhnə tətbiqi) +DocModelZenithDescription=Satıcıdan kotirovka sorğusu üçün tam şablon +CommercialAsk=Qiymət sorğusu +DefaultModelSupplierProposalCreate=Defolt model yaradılması +DefaultModelSupplierProposalToBill=Qiymət sorğusunu bağlayarkən defolt şablon (qəbul edilir) +DefaultModelSupplierProposalClosed=Qiymət sorğusunu bağlayarkən defolt şablon (imtina edildi) +ListOfSupplierProposals=Satıcı təklif sorğularının siyahısı +ListSupplierProposalsAssociatedProject=Layihə ilə əlaqəli satıcı təkliflərinin siyahısı +SupplierProposalsToClose=Satıcıların bağlanması təklifləri +SupplierProposalsToProcess=Satıcı təkliflərini emal etmək +LastSupplierProposals=Ən son %s qiymət sorğuları +AllPriceRequests=Bütün sorğular +TypeContact_supplier_proposal_external_SHIPPING=Çatdırılma üçün satıcı ilə əlaqə saxlayın +TypeContact_supplier_proposal_external_BILLING=Faturalandırma üçün satıcı əlaqəsi +TypeContact_supplier_proposal_external_SERVICE=Nümayəndə təqib təklifi diff --git a/htdocs/langs/az_AZ/ticket.lang b/htdocs/langs/az_AZ/ticket.lang index a115da15c9d..e1d0d07131e 100644 --- a/htdocs/langs/az_AZ/ticket.lang +++ b/htdocs/langs/az_AZ/ticket.lang @@ -320,7 +320,7 @@ ViewTicket=Biletə baxın ViewMyTicketList=Bilet siyahıma baxın ErrorEmailMustExistToCreateTicket=Xəta: e-poçt ünvanı verilənlər bazamızda tapılmadı TicketNewEmailSubjectAdmin=Yeni bilet yaradıldı - Ref %s (ictimai bilet ID %s) -TicketNewEmailBodyAdmin=

Bilet indicə ID #%s ilə yaradılıb, məlumata baxın:b0679c9a6a6spand430 > +TicketNewEmailBodyAdmin=

Ticket has just been created with ID #%s, see information:

SeeThisTicketIntomanagementInterface=İdarəetmə interfeysində biletə baxın TicketPublicInterfaceForbidden=Biletlər üçün ictimai interfeys aktiv edilmədi ErrorEmailOrTrackingInvalid=İzləmə ID və ya e-poçt üçün pis dəyər diff --git a/htdocs/langs/az_AZ/trips.lang b/htdocs/langs/az_AZ/trips.lang index 9210ede360c..45fdee38665 100644 --- a/htdocs/langs/az_AZ/trips.lang +++ b/htdocs/langs/az_AZ/trips.lang @@ -1,150 +1,152 @@ # Dolibarr language file - Source file is en_US - trips -ShowExpenseReport=Show expense report -Trips=Expense reports -TripsAndExpenses=Expenses reports -TripsAndExpensesStatistics=Expense reports statistics -TripCard=Expense report card -AddTrip=Create expense report -ListOfTrips=List of expense reports -ListOfFees=List of fees -TypeFees=Types of fees -ShowTrip=Show expense report -NewTrip=New expense report -LastExpenseReports=Latest %s expense reports -AllExpenseReports=All expense reports -CompanyVisited=Company/organization visited -FeesKilometersOrAmout=Amount or kilometers -DeleteTrip=Delete expense report -ConfirmDeleteTrip=Are you sure you want to delete this expense report? -ListTripsAndExpenses=List of expense reports -ListToApprove=Waiting for approval -ExpensesArea=Expense reports area -ClassifyRefunded=Classify 'Refunded' -ExpenseReportWaitingForApproval=A new expense report has been submitted for approval -ExpenseReportWaitingForApprovalMessage=A new expense report has been submitted and is waiting for approval.
- User: %s
- Period: %s
Click here to validate: %s -ExpenseReportWaitingForReApproval=An expense report has been submitted for re-approval -ExpenseReportWaitingForReApprovalMessage=An expense report has been submitted and is waiting for re-approval.
The %s, you refused to approve the expense report for this reason: %s.
A new version has been proposed and waiting for your approval.
- User: %s
- Period: %s
Click here to validate: %s -ExpenseReportApproved=An expense report was approved +AUTHOR=tərəfindən qeydə alınıb +AUTHORPAIEMENT=tərəfindən ödənilir +AddTrip=Xərc hesabatı yaradın +AllExpenseReport=Hər növ xərc hesabatı +AllExpenseReports=Bütün xərc hesabatları +AnyOtherInThisListCanValidate=Sorğunun təsdiqlənməsi üçün məlumatlandırılmalı olan şəxs. +AttachTheNewLineToTheDocument=Yüklənmiş sənədə xətti əlavə edin +AucuneLigne=Hələ heç bir xərc hesabatı açıqlanmayıb +BrouillonnerTrip=Xərc hesabatını "Qaralama" statusuna geri köçürün +byEX_DAY=gün üzrə (məhdudiyyət %s) +byEX_EXP=sətir üzrə (%s ilə məhdudiyyət) +byEX_MON=aya görə (məhdudiyyət %s) +byEX_YEA=il üzrə (məhdudiyyət %s) +CANCEL_USER=tərəfindən silindi +CarCategory=Avtomobil kateqoriyası +ClassifyRefunded='Geri qaytarıldı' təsnifatı +CompanyVisited=Şirkət/təşkilat ziyarət edildi +ConfirmBrouillonnerTrip=Bu xərc hesabatını "Qaralama" statusuna köçürmək istədiyinizə əminsiniz? +ConfirmCancelTrip=Bu xərc hesabatını ləğv etmək istədiyinizə əminsiniz? +ConfirmCloneExpenseReport=Bu xərc hesabatını klonlaşdırmaq istədiyinizə əminsiniz? +ConfirmDeleteTrip=Bu xərc hesabatını silmək istədiyinizə əminsiniz? +ConfirmPaidTrip=Bu xərc hesabatının statusunu "Ödənişli" olaraq dəyişmək istədiyinizə əminsiniz? +ConfirmRefuseTrip=Bu xərc hesabatını rədd etmək istədiyinizə əminsiniz? +ConfirmSaveTrip=Bu xərc hesabatını doğrulamaq istədiyinizə əminsiniz? +ConfirmValideTrip=Bu xərc hesabatını təsdiqləmək istədiyinizə əminsiniz? +DATE_CANCEL=Ləğv tarixi +DATE_PAIEMENT=Ödəniş tarixi +DATE_REFUS=Tarixi rədd edin +DATE_SAVE=Doğrulama tarixi +DefaultCategoryCar=Standart nəqliyyat rejimi +DefaultRangeNumber=Defolt diapazon nömrəsi +DeleteTrip=Xərc hesabatını silin +ErrorDoubleDeclaration=Siz oxşar tarix diapazonunda başqa bir xərc hesabatı elan etmisiniz. +Error_EXPENSEREPORT_ADDON_NotDefined=Xəta, xərc hesabatının nömrələnməsi qaydası 'Xərc Hesabatı' modulunun quraşdırılmasında müəyyən edilmədi +ExpenseRangeOffset=Ofset məbləği: %s +expenseReportCatDisabled=Kateqoriya əlil - c_exp_tax_cat lüğətinə baxın +expenseReportCoef=Əmsal +expenseReportCoefUndefined=(dəyər müəyyən edilməyib) +expenseReportOffset=Ofset +expenseReportPrintExample=ofset + (d x əmsal) = %s +expenseReportRangeDisabled=Range disabled - c_exp_tax_range lüğətinə baxın +expenseReportRangeFromTo=%d-dan %d-a +expenseReportRangeMoreThan=%d-dan çox +expenseReportTotalForFive=d = 5 ilə nümunə +ExpenseReportApplyTo=Tətbiq et +ExpenseReportApproved=Xərc hesabatı təsdiq edildi ExpenseReportApprovedMessage=The expense report %s was approved.
- User: %s
- Approved by: %s
Click here to show the expense report: %s -ExpenseReportRefused=An expense report was refused -ExpenseReportRefusedMessage=The expense report %s was refused.
- User: %s
- Refused by: %s
- Motive for refusal: %s
Click here to show the expense report: %s -ExpenseReportCanceled=An expense report was canceled +ExpenseReportCanceled=Xərc hesabatı ləğv edildi ExpenseReportCanceledMessage=The expense report %s was canceled.
- User: %s
- Canceled by: %s
- Motive for cancellation: %s
Click here to show the expense report: %s -ExpenseReportPaid=An expense report was paid +ExpenseReportConstraintViolationError=Maksimum məbləğ keçildi (qayda %s): %s %s-dan yüksəkdir ( Həddindən artıq qadağandır) +ExpenseReportConstraintViolationWarning=Maksimum məbləğ keçildi (qayda %s): %s %s-dan yüksəkdir ( Həddindən artıq icazə verilir) +ExpenseReportDateEnd=Tarixin sonu +ExpenseReportDateStart=Başlama tarixi +ExpenseReportDomain=Müraciət etmək üçün domen +ExpenseReportIkDesc=Siz kilometr xərclərinin hesablanmasını əvvəllər müəyyən edilmiş kateqoriyaya və aralığa görə dəyişə bilərsiniz. d kilometrlərlə olan məsafədir +ExpenseReportLimitAmount=Maksimum məbləğ +ExpenseReportLimitOn=Limit aktivdir +ExpenseReportLine=Xərc hesabatı xətti +ExpenseReportPaid=Xərc hesabatı ödənildi ExpenseReportPaidMessage=The expense report %s was paid.
- User: %s
- Paid by: %s
Click here to show the expense report: %s -TripId=Id expense report -AnyOtherInThisListCanValidate=Person to be informed for validating the request. -TripSociete=Information company -TripNDF=Informations expense report -PDFStandardExpenseReports=Standard template to generate a PDF document for expense report -ExpenseReportLine=Expense report line -TF_OTHER=Other -TF_TRIP=Transportation -TF_LUNCH=Lunch +ExpenseReportPayment=Xərc hesabatı ödənişi +ExpenseReportRef=Ref. xərc hesabatı +ExpenseReportRefused=Xərc hesabatı rədd edildi +ExpenseReportRefusedMessage=Xərc hesabatı %s rədd edildi.
- İstifadəçi: %s
- İmtina edən: %s
- İmtina səbəbi: %s
Xərc hesabatını göstərmək üçün bura klikləyin: %s +ExpenseReportRestrictive=Həddindən artıq qadağandır +ExpenseReportRuleErrorOnSave=Xəta: %s +ExpenseReportRuleSave=Xərc hesabatı qaydası saxlanıldı +ExpenseReportRulesDesc=Xərc hesabatları üçün maksimum məbləğ qaydalarını müəyyən edə bilərsiniz. Xərc hesabatına yeni xərc əlavə edildikdə bu qaydalar tətbiq ediləcək +ExpenseReportWaitingForApproval=Yeni xərc hesabatı təsdiq üçün təqdim edilib +ExpenseReportWaitingForApprovalMessage=A new expense report has been submitted and is waiting for approval.
- User: %s
- Period: %s
Click here to validate: %s +ExpenseReportWaitingForReApproval=Xərc hesabatı yenidən təsdiq üçün təqdim edilib +ExpenseReportWaitingForReApprovalMessage=An expense report has been submitted and is waiting for re-approval.
The %s, you refused to approve the expense report for this reason: %s.
A new version has been proposed and waiting for your approval.
- User: %s
- Period: %s
Click here to validate: %s +ExpenseReportsIk=Yürüş ödənişlərinin konfiqurasiyası +ExpenseReportsRules=Xərc hesabatı qaydaları +ExpenseReportsToApprove=Təsdiq üçün xərc hesabatları +ExpenseReportsToPay=Ödəniləcək xərc hesabatları +ExpensesArea=Xərc hesabatları sahəsi +FeesKilometersOrAmout=Məbləğ və ya kilometr +LastExpenseReports=Ən son %s xərc hesabatları +ListOfFees=Ödənişlərin siyahısı +ListOfTrips=Xərc hesabatlarının siyahısı +ListToApprove=Təsdiq gözləyir +ListTripsAndExpenses=Xərc hesabatlarının siyahısı +MOTIF_CANCEL=Səbəb +MOTIF_REFUS=Səbəb +ModePaiement=Ödəniş rejimi +NewTrip=Yeni xərc hesabatı +nolimitbyEX_DAY=gün (məhdudiyyət yoxdur) +nolimitbyEX_EXP=xətt üzrə (məhdudiyyət yoxdur) +nolimitbyEX_MON=aya görə (məhdudiyyət yoxdur) +nolimitbyEX_YEA=il üzrə (məhdudiyyət yoxdur) +NoTripsToExportCSV=Bu dövr üçün ixrac üçün xərc hesabatı yoxdur. +NOT_AUTHOR=Siz bu xərc hesabatının müəllifi deyilsiniz. Əməliyyat ləğv edildi. +OnExpense=Xərc xətti +PDFStandardExpenseReports=Xərc hesabatı üçün PDF sənədi yaratmaq üçün standart şablon +PaidTrip=Xərc hesabatını ödəyin +REFUSEUR=tərəfindən rədd edildi +RangeIk=Yürüş məsafəsi +RangeNum=Aralıq %d +SaveTrip=Xərc hesabatını təsdiqləyin +ShowExpenseReport=Xərc hesabatını göstərin +ShowTrip=Xərc hesabatını göstərin +TripCard=Xərc hesabat kartı +TripId=Id xərc hesabatı +TripNDF=Məlumat xərcləri hesabatı +TripSociete=İnformasiya şirkəti +Trips=Xərc hesabatları +TripsAndExpenses=Xərclər haqqında hesabat +TripsAndExpensesStatistics=Xərc hesabatlarının statistikası +TypeFees=Ödəniş növləri +UploadANewFileNow=İndi yeni sənəd yükləyin +VALIDATOR=Təsdiq üçün cavabdeh olan istifadəçi +VALIDOR=tərəfindən təsdiq edilmişdir +ValidateAndSubmit=Təsdiq edin və təsdiq üçün təqdim edin +ValidatedWaitingApproval=Təsdiq edildi (təsdiq gözlənilir) +ValideTrip=Xərc hesabatını təsdiqləyin + +## Dictionary +EX_BRE=Səhər yeməyi +EX_CAM=CV-yə qulluq və təmir +EX_CAM_VP=PV-yə qulluq və təmir +EX_CAR=Avtomobil icarəsi +EX_CUR=Müştərilərin qəbulu +EX_DOC=Sənədlər +EX_EMM=İşçilərin yeməyi +EX_FUE=Yanacaq CV +EX_FUE_VP=Yanacaq PV +EX_GUM=Qonaqların yeməyi +EX_HOT=Otel +EX_IND=Təzminatlı nəqliyyat abunəsi +EX_KME=Yürüş xərcləri +EX_OTR=Digər qəbul +EX_PAR=Parkinq CV +EX_PAR_VP=Dayanacaq PV +EX_POS=Poçt +EX_SUM=Baxım təchizatı +EX_SUO=Ofis ləvazimatları +EX_TAX=Müxtəlif Vergilər +EX_TOL=Ödənişli CV +EX_TOL_VP=Ödənişli PV +TF_BUS=avtobus +TF_CAR=Avtomobil +TF_ESSENCE=Yanacaq +TF_HOTEL=Otel +TF_LUNCH=Nahar TF_METRO=Metro -TF_TRAIN=Train -TF_BUS=Bus -TF_CAR=Car -TF_PEAGE=Toll -TF_ESSENCE=Fuel -TF_HOTEL=Hotel -TF_TAXI=Taxi -EX_KME=Mileage costs -EX_FUE=Fuel CV -EX_HOT=Hotel -EX_PAR=Parking CV -EX_TOL=Toll CV -EX_TAX=Various Taxes -EX_IND=Indemnity transportation subscription -EX_SUM=Maintenance supply -EX_SUO=Office supplies -EX_CAR=Car rental -EX_DOC=Documentation -EX_CUR=Customers receiving -EX_OTR=Other receiving -EX_POS=Postage -EX_CAM=CV maintenance and repair -EX_EMM=Employees meal -EX_GUM=Guests meal -EX_BRE=Breakfast -EX_FUE_VP=Fuel PV -EX_TOL_VP=Toll PV -EX_PAR_VP=Parking PV -EX_CAM_VP=PV maintenance and repair -DefaultCategoryCar=Default transportation mode -DefaultRangeNumber=Default range number -UploadANewFileNow=Upload a new document now -Error_EXPENSEREPORT_ADDON_NotDefined=Error, the rule for expense report numbering ref was not defined into setup of module 'Expense Report' -ErrorDoubleDeclaration=You have declared another expense report into a similar date range. -AucuneLigne=There is no expense report declared yet -ModePaiement=Payment mode -VALIDATOR=User responsible for approval -VALIDOR=Approved by -AUTHOR=Recorded by -AUTHORPAIEMENT=Paid by -REFUSEUR=Denied by -CANCEL_USER=Deleted by -MOTIF_REFUS=Reason -MOTIF_CANCEL=Reason -DATE_REFUS=Deny date -DATE_SAVE=Validation date -DATE_CANCEL=Cancelation date -DATE_PAIEMENT=Payment date -ExpenseReportRef=Ref. expense report -ValidateAndSubmit=Validate and submit for approval -ValidatedWaitingApproval=Validated (waiting for approval) -NOT_AUTHOR=You are not the author of this expense report. Operation cancelled. -ConfirmRefuseTrip=Are you sure you want to deny this expense report? -ValideTrip=Approve expense report -ConfirmValideTrip=Are you sure you want to approve this expense report? -PaidTrip=Pay an expense report -ConfirmPaidTrip=Are you sure you want to change status of this expense report to "Paid"? -ConfirmCancelTrip=Are you sure you want to cancel this expense report? -BrouillonnerTrip=Move back expense report to status "Draft" -ConfirmBrouillonnerTrip=Are you sure you want to move this expense report to status "Draft"? -SaveTrip=Validate expense report -ConfirmSaveTrip=Are you sure you want to validate this expense report? -NoTripsToExportCSV=No expense report to export for this period. -ExpenseReportPayment=Expense report payment -ExpenseReportsToApprove=Expense reports to approve -ExpenseReportsToPay=Expense reports to pay -ConfirmCloneExpenseReport=Are you sure you want to clone this expense report ? -ExpenseReportsIk=Configuration of mileage charges -ExpenseReportsRules=Expense report rules -ExpenseReportIkDesc=You can modify the calculation of kilometers expense by category and range who they are previously defined. d is the distance in kilometers -ExpenseReportRulesDesc=You can define max amount rules for expense reports. These rules will be applied when a new expense is added to an expense report -expenseReportOffset=Offset -expenseReportCoef=Coefficient -expenseReportTotalForFive=Example with d = 5 -expenseReportRangeFromTo=from %d to %d -expenseReportRangeMoreThan=more than %d -expenseReportCoefUndefined=(value not defined) -expenseReportCatDisabled=Category disabled - see the c_exp_tax_cat dictionary -expenseReportRangeDisabled=Range disabled - see the c_exp_tax_range dictionay -expenseReportPrintExample=offset + (d x coef) = %s -ExpenseReportApplyTo=Apply to -ExpenseReportDomain=Domain to apply -ExpenseReportLimitOn=Limit on -ExpenseReportDateStart=Date start -ExpenseReportDateEnd=Date end -ExpenseReportLimitAmount=Max amount -ExpenseReportRestrictive=Exceeding forbidden -AllExpenseReport=All type of expense report -OnExpense=Expense line -ExpenseReportRuleSave=Expense report rule saved -ExpenseReportRuleErrorOnSave=Error: %s -RangeNum=Range %d -ExpenseReportConstraintViolationError=Max amount exceeded (rule %s): %s is higher than %s (Exceeding forbidden) -byEX_DAY=by day (limitation to %s) -byEX_MON=by month (limitation to %s) -byEX_YEA=by year (limitation to %s) -byEX_EXP=by line (limitation to %s) -ExpenseReportConstraintViolationWarning=Max amount exceeded (rule %s): %s is higher than %s (Exceeding authorized) -nolimitbyEX_DAY=by day (no limitation) -nolimitbyEX_MON=by month (no limitation) -nolimitbyEX_YEA=by year (no limitation) -nolimitbyEX_EXP=by line (no limitation) -CarCategory=Vehicle category -ExpenseRangeOffset=Offset amount: %s -RangeIk=Mileage range -AttachTheNewLineToTheDocument=Attach the line to an uploaded document +TF_OTHER=Digər +TF_PEAGE=Ödəniş +TF_TAXI=taksi +TF_TRAIN=Qatar +TF_TRIP=Nəqliyyat diff --git a/htdocs/langs/az_AZ/users.lang b/htdocs/langs/az_AZ/users.lang index b6c7feb7bd2..6de42ce55cb 100644 --- a/htdocs/langs/az_AZ/users.lang +++ b/htdocs/langs/az_AZ/users.lang @@ -1,126 +1,136 @@ # Dolibarr language file - Source file is en_US - users -HRMArea=HRM area -UserCard=User card -GroupCard=Group card -Permission=Permission -Permissions=Permissions -EditPassword=Edit password -SendNewPassword=Regenerate and send password -SendNewPasswordLink=Send link to reset password -ReinitPassword=Regenerate password -PasswordChangedTo=Password changed to: %s -SubjectNewPassword=Your new password for %s -GroupRights=Group permissions -UserRights=User permissions -Credentials=Credentials -UserGUISetup=User Display Setup -DisableUser=Disable -DisableAUser=Disable a user -DeleteUser=Delete -DeleteAUser=Delete a user -EnableAUser=Enable a user -DeleteGroup=Delete -DeleteAGroup=Delete a group -ConfirmDisableUser=Are you sure you want to disable user %s? -ConfirmDeleteUser=Are you sure you want to delete user %s? -ConfirmDeleteGroup=Are you sure you want to delete group %s? -ConfirmEnableUser=Are you sure you want to enable user %s? -ConfirmReinitPassword=Are you sure you want to generate a new password for user %s? -ConfirmSendNewPassword=Are you sure you want to generate and send new password for user %s? -NewUser=New user -CreateUser=Create user -LoginNotDefined=Login is not defined. -NameNotDefined=Name is not defined. -ListOfUsers=List of users -SuperAdministrator=Super Administrator -SuperAdministratorDesc=Global administrator -AdministratorDesc=Administrator -DefaultRights=Default Permissions -DefaultRightsDesc=Define here the default permissions that are automatically granted to a new user (to modify permissions for existing users, go to the user card). -DolibarrUsers=Dolibarr users -LastName=Last name -FirstName=First name -ListOfGroups=List of groups -NewGroup=New group -CreateGroup=Create group -RemoveFromGroup=Remove from group -PasswordChangedAndSentTo=Password changed and sent to %s. -PasswordChangeRequest=Request to change password for %s +HRMArea=HRM sahəsi +UserCard=İstifadəçi kartı +GroupCard=Qrup kartı +Permission=İcazə +Permissions=İcazələr +EditPassword=Şifrəni redaktə edin +SendNewPassword=Şifrəni bərpa edin və göndərin +SendNewPasswordLink=Parolun sıfırlanması üçün keçid göndərin +ReinitPassword=Şifrəni bərpa edin +PasswordChangedTo=Parol dəyişdirildi: %s +SubjectNewPassword=%s üçün yeni parolunuz +GroupRights=Qrup icazələri +UserRights=İstifadəçi icazələri +Credentials=Etibarnamələr +UserGUISetup=İstifadəçi Ekran Quraşdırma +DisableUser=Deaktiv edin +DisableAUser=İstifadəçini deaktiv edin +DeleteUser=Sil +DeleteAUser=İstifadəçini silin +EnableAUser=İstifadəçini aktivləşdirin +DeleteGroup=Sil +DeleteAGroup=Qrupu silin +ConfirmDisableUser=%s istifadəçisini deaktiv etmək istədiyinizə əminsiniz? +ConfirmDeleteUser=%s istifadəçisini silmək istədiyinizə əminsiniz? +ConfirmDeleteGroup=%s qrupunu silmək istədiyinizə əminsiniz? +ConfirmEnableUser=%s istifadəçisini aktivləşdirmək istədiyinizə əminsiniz? +ConfirmReinitPassword=İstifadəçi üçün yeni parol yaratmaq istədiyinizə əminsiniz %s? +ConfirmSendNewPassword=İstifadəçi %s üçün yeni parol yaratmaq və göndərmək istədiyinizə əminsiniz span>? +NewUser=Yeni istifadəçi +CreateUser=İstifadəçi yaradın +LoginNotDefined=Giriş müəyyən edilməyib. +NameNotDefined=Ad müəyyən edilməyib. +ListOfUsers=İstifadəçilərin siyahısı +SuperAdministrator=Çox şirkət administratoru +SuperAdministratorDesc=Çox şirkətli sistem administratoru (quraşdırma və istifadəçiləri dəyişə bilər) +DefaultRights=Defolt İcazələr +DefaultRightsDesc=Burada avtomatik olaraq a verilən defolt icazələrini təyin edin. yeni istifadəçi (mövcud istifadəçilər üçün icazələri dəyişdirmək üçün istifadəçi kartına keçin). +DolibarrUsers=Dolibarr istifadəçiləri +LastName=Soyad +FirstName=Ad +ListOfGroups=Qrupların siyahısı +NewGroup=Yeni qrup +CreateGroup=Qrup yaradın +RemoveFromGroup=Qrupdan çıxarın +PasswordChangedAndSentTo=Parol dəyişdirildi və %s ünvanına göndərildi. +PasswordChangeRequest=%s üçün parolun dəyişdirilməsi sorğusu PasswordChangeRequestSent=Request to change password for %s sent to %s. -IfLoginExistPasswordRequestSent=If this login is a valid account, an email to reset password has been sent. -IfEmailExistPasswordRequestSent=If this email is a valid account, an email to reset password has been sent. -ConfirmPasswordReset=Confirm password reset -MenuUsersAndGroups=Users & Groups -LastGroupsCreated=Latest %s groups created -LastUsersCreated=Latest %s users created -ShowGroup=Show group -ShowUser=Show user -NonAffectedUsers=Non assigned users -UserModified=User modified successfully -PhotoFile=Photo file -ListOfUsersInGroup=List of users in this group -ListOfGroupsForUser=List of groups for this user -LinkToCompanyContact=Link to third party / contact -LinkedToDolibarrMember=Link to member -LinkedToDolibarrUser=Link to user -LinkedToDolibarrThirdParty=Link to third party -CreateDolibarrLogin=Create a user -CreateDolibarrThirdParty=Create a third party -LoginAccountDisableInDolibarr=Account disabled in Dolibarr. -UsePersonalValue=Use personal value -InternalUser=Internal user -ExportDataset_user_1=Users and their properties -DomainUser=Domain user %s -Reactivate=Reactivate -CreateInternalUserDesc=This form allows you to create an internal user in your company/organization. To create an external user (customer, vendor etc. ..), use the button 'Create Dolibarr User' from that third-party's contact card. -InternalExternalDesc=An internal user is a user that is part of your company/organization, or is a partner user outside of your organization that may need to see more data than data related to his company (the permission system will define what he can or can't see or do).
An external user is a customer, vendor or other that must view ONLY data related to himself (Creating an external user for a third-party can be done from the contact record of the third-party).

In both cases, you must grant permissions on the features that the user need. -PermissionInheritedFromAGroup=Permission granted because inherited from one of a user's group. -Inherited=Inherited -UserWillBe=Created user will be -UserWillBeInternalUser=Created user will be an internal user (because not linked to a particular third party) -UserWillBeExternalUser=Created user will be an external user (because linked to a particular third party) -IdPhoneCaller=Id phone caller -NewUserCreated=User %s created -NewUserPassword=Password change for %s -NewPasswordValidated=Your new password have been validated and must be used now to login. -EventUserModified=User %s modified -UserDisabled=User %s disabled -UserEnabled=User %s activated -UserDeleted=User %s removed -NewGroupCreated=Group %s created -GroupModified=Group %s modified -GroupDeleted=Group %s removed -ConfirmCreateContact=Are you sure you want to create a Dolibarr account for this contact? -ConfirmCreateLogin=Are you sure you want to create a Dolibarr account for this member? -ConfirmCreateThirdParty=Are you sure you want to create a third party for this member? -LoginToCreate=Login to create -NameToCreate=Name of third party to create -YourRole=Your roles -YourQuotaOfUsersIsReached=Your quota of active users is reached ! -NbOfUsers=Number of users -NbOfPermissions=Number of permissions -DontDowngradeSuperAdmin=Only a superadmin can downgrade a superadmin -HierarchicalResponsible=Supervisor -HierarchicView=Hierarchical view -UseTypeFieldToChange=Use field Type to change +IfLoginExistPasswordRequestSent=Bu giriş etibarlı hesabdırsa (etibarlı e-poçt ilə), parolun sıfırlanması üçün e-poçt göndərilib. +IfEmailExistPasswordRequestSent=Bu e-poçt etibarlı hesabdırsa, parolu sıfırlamaq üçün e-poçt göndərilib (heç nə almasanız, SPAM qovluğunuzu yoxlamağı unutmayın) +ConfirmPasswordReset=Parolun sıfırlanmasını təsdiqləyin +MenuUsersAndGroups=İstifadəçilər və Qruplar +LastGroupsCreated=Ən son %s qruplar yaradıldı +LastUsersCreated=Ən son %s istifadəçi yaradılıb +ShowGroup=Qrupu göstərin +ShowUser=İstifadəçini göstər +NonAffectedUsers=Təyin olunmamış istifadəçilər +UserModified=İstifadəçi uğurla dəyişdirildi +PhotoFile=Foto fayl +ListOfUsersInGroup=Bu qrupdakı istifadəçilərin siyahısı +ListOfGroupsForUser=Bu istifadəçi üçün qrupların siyahısı +LinkToCompanyContact=Üçüncü tərəfə / əlaqəyə keçid +LinkedToDolibarrMember=Üzv üçün keçid +LinkedToDolibarrUser=İstifadəçiyə keçid +LinkedToDolibarrThirdParty=Üçüncü tərəfə keçid +CreateDolibarrLogin=İstifadəçi yaradın +CreateDolibarrThirdParty=Üçüncü tərəf yaradın +LoginAccountDisableInDolibarr=Dolibarr-da hesab deaktiv edilib +PASSWORDInDolibarr=Parol Dolibarr-da dəyişdirildi +UsePersonalValue=Şəxsi dəyərdən istifadə edin +ExportDataset_user_1=İstifadəçilər və onların xüsusiyyətləri +DomainUser=Domen istifadəçisi %s +Reactivate=Yenidən aktivləşdirin +CreateInternalUserDesc=Bu forma sizə şirkətinizdə/təşkilatınızda daxili istifadəçi yaratmağa imkan verir. Xarici istifadəçi (müştəri, satıcı və s.) yaratmaq üçün üçüncü tərəfin əlaqə kartından "Dolibarr İstifadəçisi Yarat" düyməsini istifadə edin. +InternalExternalDesc=daxili istifadəçisi şirkətinizin/təşkilatınızın bir hissəsi olan və ya təşkilatınızdan kənar tərəfdaş istifadəçidir onun şirkəti ilə bağlı datadan daha çox məlumat görməsi tələb oluna bilər (icazə sistemi onun nəyi görə biləcəyini və ya edə bilməyəcəyini və ya edə bilməyəcəyini müəyyən edəcək).
An external istifadəçi YALNIZ özü ilə bağlı dataya baxmalı olan müştəri, satıcı və ya başqasıdır (Üçüncü tərəf üçün xarici istifadəçi yaratmaq mümkün ola bilər üçüncü tərəfin əlaqə qeydindən edilir).

Hər iki halda, siz funksiyalara icazə verməlisiniz. istifadəçi lazımdır. +PermissionInheritedFromAGroup=İstifadəçi qrupundan birindən miras alındığı üçün icazə verildi. +Inherited=miras qalmış +UserWillBe=Yaradılmış istifadəçi olacaq +UserWillBeInternalUser=Yaradılmış istifadəçi daxili istifadəçi olacaq (çünki xüsusi üçüncü tərəflə əlaqəsi yoxdur) +UserWillBeExternalUser=Yaradılmış istifadəçi xarici istifadəçi olacaq (çünki xüsusi üçüncü tərəflə əlaqələndirilir) +IdPhoneCaller=İd telefon zəngi +NewUserCreated=%s adlı istifadəçi yaradıldı +NewUserPassword=%s üçün parol dəyişikliyi +NewPasswordValidated=Yeni parolunuz təsdiqləndi və daxil olmaq üçün indi istifadə edilməlidir. +EventUserModified=İstifadəçi %s dəyişdirildi +UserDisabled=İstifadəçi %s deaktiv edilib +UserEnabled=İstifadəçi %s aktivləşdirildi +UserDeleted=İstifadəçi %s silindi +NewGroupCreated=%s qrupu yaradıldı +GroupModified=%s qrupu dəyişdirildi +GroupDeleted=%s qrupu silindi +ConfirmCreateContact=Bu kontakt üçün Dolibarr hesabı yaratmaq istədiyinizə əminsiniz? +ConfirmCreateLogin=Bu üzv üçün Dolibarr hesabı yaratmaq istədiyinizə əminsiniz? +ConfirmCreateThirdParty=Bu üzv üçün üçüncü tərəf yaratmaq istədiyinizə əminsiniz? +LoginToCreate=Yaratmaq üçün daxil olun +NameToCreate=Yaratmaq üçün üçüncü tərəfin adı +YourRole=Sizin rollarınız +YourQuotaOfUsersIsReached=Aktiv istifadəçilər kvotanıza çatdı! +NbOfUsers=İstifadəçilərin sayı +NbOfPermissions=İcazələrin sayı +DontDowngradeSuperAdmin=Yalnız başqa bir admin bir admini aşağı səviyyəyə endirə bilər +HierarchicalResponsible=Nəzarətçi +HierarchicView=İyerarxik görünüş +UseTypeFieldToChange=Dəyişmək üçün Növ sahəsini istifadə edin OpenIDURL=OpenID URL -LoginUsingOpenID=Use OpenID to login -WeeklyHours=Hours worked (per week) -ExpectedWorkedHours=Expected hours worked per week -ColorUser=Color of the user -DisabledInMonoUserMode=Disabled in maintenance mode -UserAccountancyCode=User accounting code -UserLogoff=User logout -UserLogged=User logged -DateOfEmployment=Employment date -DateEmployment=Employment -DateEmploymentstart=Employment Start Date -DateEmploymentEnd=Employment End Date -RangeOfLoginValidity=Access validity date range -CantDisableYourself=You can't disable your own user record -ForceUserExpenseValidator=Force expense report validator -ForceUserHolidayValidator=Force leave request validator -ValidatorIsSupervisorByDefault=By default, the validator is the supervisor of the user. Keep empty to keep this behaviour. -UserPersonalEmail=Personal email -UserPersonalMobile=Personal mobile phone -WarningNotLangOfInterface=Warning, this is the main language the user speak, not the language of the interface he choosed to see. To change the interface language visible by this user, go on tab %s +LoginUsingOpenID=Daxil olmaq üçün OpenID istifadə edin +WeeklyHours=İş saatları (həftədə) +ExpectedWorkedHours=Həftədə gözlənilən iş saatları +ColorUser=İstifadəçinin rəngi +DisabledInMonoUserMode=Baxım rejimində deaktiv edilib +UserAccountancyCode=İstifadəçinin uçot kodu +UserLogoff=İstifadəçi çıxışı: %s +UserLogged=İstifadəçi daxil olub: %s +UserLoginFailed=İstifadəçi girişi uğursuz oldu: %s +DateOfEmployment=İşə qəbul tarixi +DateEmployment=Məşğulluq +DateEmploymentStart=İşə başlama tarixi +DateEmploymentEnd=İşin bitmə tarixi +RangeOfLoginValidity=Etibarlılıq tarixi aralığına daxil olun +CantDisableYourself=Siz öz istifadəçi qeydinizi söndürə bilməzsiniz +ForceUserExpenseValidator=Məcburi xərc hesabatı təsdiqləyicisi +ForceUserHolidayValidator=Məcburi məzuniyyət sorğusu təsdiqləyicisi +ValidatorIsSupervisorByDefault=Varsayılan olaraq, validator istifadəçinin nəzarətçisidir. Bu davranışı saxlamaq üçün boş saxlayın. +UserPersonalEmail=Şəxsi e-poçt +UserPersonalMobile=Şəxsi mobil telefon +WarningNotLangOfInterface=Xəbərdarlıq, bu istifadəçinin danışdığı əsas dildir, görmək üçün seçdiyi interfeysin dili deyil. Bu istifadəçi tərəfindən görünən interfeys dilini dəyişmək üçün %s sekmesine keçin. +DateLastLogin=Son giriş tarixi +DatePreviousLogin=Əvvəlki giriş tarixi +IPLastLogin=IP son giriş +IPPreviousLogin=IP əvvəlki giriş +ShowAllPerms=Bütün icazə sətirlərini göstərin +HideAllPerms=Bütün icazə sətirlərini gizlədin +UserPublicPageDesc=Bu istifadəçi üçün virtual kartı aktivləşdirə bilərsiniz. Smartfonu olan hər kəsə onu skan etmək və əlaqənizi onun ünvan kitabına əlavə etmək üçün istifadəçi profili və barkod olan url mövcud olacaq. +EnablePublicVirtualCard=İstifadəçinin virtual vizit kartını aktivləşdirin +UserEnabledDisabled=İstifadəçi statusu dəyişdi: %s +AlternativeEmailForOAuth2=OAuth2 girişi üçün Alternativ E-poçt diff --git a/htdocs/langs/az_AZ/website.lang b/htdocs/langs/az_AZ/website.lang index 4b280c8a2eb..ad269bbf4ac 100644 --- a/htdocs/langs/az_AZ/website.lang +++ b/htdocs/langs/az_AZ/website.lang @@ -32,7 +32,7 @@ AddWebsite=Veb sayt əlavə edin Webpage=Veb səhifə/konteyner AddPage=Səhifə/konteyner əlavə edin PageContainer=Səhifə -PreviewOfSiteNotYetAvailable=%s vebsaytınızın önizləməsi hələ mövcud deyil. Siz əvvəlcə 'Tam veb sayt şablonunu idxal edin' və ya sadəcə 'b0e7806z span>Səhifə/konteyner əlavə edin
'. +PreviewOfSiteNotYetAvailable=The preview of your website %s is not yet available. You must first 'Import a full website template' or just 'Add a page/container'. RequestedPageHasNoContentYet=%s id ilə sorğu edilən səhifədə hələ məzmun yoxdur və ya keş faylı .tpl.php silinib. Bunu həll etmək üçün səhifənin məzmununu redaktə edin. SiteDeleted='%s' veb saytı silindi PageContent=Səhifə/Contenair @@ -49,12 +49,12 @@ SetHereVirtualHost=Apache/NGinx/... ilə istifadə edin
Create veb ser ExampleToUseInApacheVirtualHostConfig=Apache virtual host quraşdırmasında istifadə etmək üçün nümunə: YouCanAlsoTestWithPHPS=PHP daxili server ilə istifadə edin
Ətraf mühiti inkişaf etdirə bilərsiniz
php -S 0.0.0.0 işlətməklə saytı PHP daxil edilmiş veb serveri (PHP 5.5 tələb olunur) ilə sınamağa üstünlük verin :8080 -t %s YouCanAlsoDeployToAnotherWHP=Veb saytınızı başqa bir Dolibarr Hosting provayderi ilə idarə edin
internetdə mövcud Apache və ya NGinx kimi veb serveriniz yoxdursa, siz vebsaytınızı Veb-sayt modulu ilə tam inteqrasiyanı təmin edən başqa bir Dolibarr hosting provayderi tərəfindən təqdim edilən başqa bir Dolibarr nümunəsinə ixrac edə və idxal edə bilərsiniz. Siz bəzi Dolibarr hostinq provayderlərinin siyahısını https://saas.dolibarr.org saytında tapa bilərsiniz. -CheckVirtualHostPerms=Virtual host istifadəçisinin (məsələn, www-data) %sb0a65d071f6fc90z olduğunu da yoxlayın.
%s fayl icazələri ='notranslate'>
+CheckVirtualHostPerms=Check also that the virtual host user (for example www-data) has %s permissions on files into
%s ReadPerm=Oxuyun WritePerm=yaz TestDeployOnWeb=Vebdə sınaqdan keçirin/yerləşdirin -PreviewSiteServedByWebServer=Önizləmə %s yeni tabda.

%s xarici veb server (Apache, Nginx kimi) tərəfindən xidmət göstərəcək ). Kataloqa işarə etməzdən əvvəl bu serveri quraşdırıb quraşdırmalısınız:
%s span>
URL xarici server tərəfindən təqdim olunur:
%s -PreviewSiteServedByDolibarr=Önizləmə %s yeni tabda.

%s Dolibarr serveri tərəfindən xidmət göstərəcək, ona görə də əlavə veb serverə ehtiyac yoxdur (Apache, Nginx, IIS kimi) quraşdırılmalıdır.
Əlverişsiz odur ki, səhifələrin URL-ləri istifadəçi dostu deyil və Dolibarr yolunuzla başlayır.
URL Dolibarr tərəfindən təqdim olunur:


Öz xarici veb serverinizdən istifadə etmək üçün bu veb saytına xidmət edin, veb serverinizdə qovluğa işarə edən virtual host yaradın
%s
sonra bu veb-saytın xüsusiyyətlərinə bu virtual serverin adını daxil edin və üzərinə klikləyin "İnternetdə sınaqdan keçirin/yerləşdirin" linki. +PreviewSiteServedByWebServer=Preview %s in a new tab.

The %s will be served by an external web server (like Apache, Nginx, IIS). You must install and setup this server before to point to directory:
%s
URL served by external server:
%s +PreviewSiteServedByDolibarr=Preview %s in a new tab.

The %s will be served by Dolibarr server so it does not need any extra web server (like Apache, Nginx, IIS) to be installed.
The inconvenient is that the URLs of pages are not user friendly and start with the path of your Dolibarr.
URL served by Dolibarr:
%s

To use your own external web server to serve this web site, create a virtual host on your web server that points on directory
%s
then enter the name of this virtual server in the properties of this website and click on the link "Test/Deploy on the web". VirtualHostUrlNotDefined=Xarici veb server tərəfindən xidmət edilən virtual hostun URL-i müəyyən edilməyib NoPageYet=Hələ səhifə yoxdur YouCanCreatePageOrImportTemplate=Siz yeni səhifə yarada və ya tam veb sayt şablonunu idxal edə bilərsiniz @@ -63,8 +63,8 @@ YouCanEditHtmlSourceckeditor=Siz redaktorda "Mənbə" düyməsini istifadə edə YouCanEditHtmlSource=
You can include PHP code into this source using tags <?php ?>. The following global variables are available: $conf, $db, $mysoc, $user, $website, $websitepage, $weblangs, $pagelangs.

You can also include content of another Page/Container with the following syntax:
<?php includeContainer('alias_of_container_to_include'); ?>

You can make a redirect to another Page/Container with the following syntax (Note: do not output any content before a redirect):
<?php redirectToContainer('alias_of_container_to_redirect_to'); ?>

To add a link to another page, use the syntax:
<a href="alias_of_page_to_link_to.php">mylink<a>

To include a link to download a file stored into the documents directory, use the document.php wrapper:
Example, for a file into documents/ecm (need to be logged), syntax is:
<a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext">
For a file into documents/medias (open directory for public access), syntax is:
<a href="/document.php?modulepart=medias&file=[relative_dir/]filename.ext">
For a file shared with a share link (open access using the sharing hash key of file), syntax is:
<a href="/document.php?hashp=publicsharekeyoffile">
YouCanEditHtmlSource1=
To include an image stored into the documents directory, use the viewimage.php wrapper.
Example, for an image into documents/medias (open directory for public access), syntax is:
<img src="/viewimage.php?modulepart=medias&file=[relative_dir/]filename.ext">
YouCanEditHtmlSource2=Paylaşım linki ilə paylaşılan şəkil üçün (faylın paylaşma heş açarından istifadə edərək açıq giriş) sintaksis belədir:
<img src="/viewimage.php?hashp=12345679012..."><?php çap getImagePublicURLOfObject($object, 1, "_small") ?b0012c7dcbe0870 class='notranslate'>>
-YouCanEditHtmlSourceMore=
Daha çox HTML və ya dinamik kod nümunələri viki sənədlərindəb0e40dc6508d əlçatandır >.
+YouCanEditHtmlSource3=To get the URL of the image of a PHP object, use
<img src="<?php print getImagePublicURLOfObject($object, 1, "_small") ?>">
+YouCanEditHtmlSourceMore=
More examples of HTML or dynamic code available on
the wiki documentation.
ClonePage=Səhifəni/konteyneri klonlayın CloneSite=Klon saytı SiteAdded=Veb sayt əlavə edildi diff --git a/htdocs/langs/az_AZ/withdrawals.lang b/htdocs/langs/az_AZ/withdrawals.lang index bda987276b1..d5fa78aa0e1 100644 --- a/htdocs/langs/az_AZ/withdrawals.lang +++ b/htdocs/langs/az_AZ/withdrawals.lang @@ -1,156 +1,173 @@ # Dolibarr language file - Source file is en_US - withdrawals -CustomersStandingOrdersArea=Payments by Direct debit orders -SuppliersStandingOrdersArea=Payments by Credit transfer -StandingOrdersPayment=Direct debit payment orders -StandingOrderPayment=Direct debit payment order -NewStandingOrder=New direct debit order -NewPaymentByBankTransfer=New payment by credit transfer -StandingOrderToProcess=To process -PaymentByBankTransferReceipts=Credit transfer orders -PaymentByBankTransferLines=Credit transfer order lines -WithdrawalsReceipts=Direct debit orders -WithdrawalReceipt=Direct debit order -BankTransferReceipts=Credit transfer orders -BankTransferReceipt=Credit transfer order -LatestBankTransferReceipts=Latest %s credit transfer orders -LastWithdrawalReceipts=Latest %s direct debit files -WithdrawalsLine=Direct debit order line -CreditTransfer=Credit transfer -CreditTransferLine=Credit transfer line -WithdrawalsLines=Direct debit order lines -CreditTransferLines=Credit transfer lines -RequestStandingOrderToTreat=Requests for direct debit payment order to process -RequestStandingOrderTreated=Requests for direct debit payment order processed -RequestPaymentsByBankTransferToTreat=Requests for credit transfer to process -RequestPaymentsByBankTransferTreated=Requests for credit transfer processed -NotPossibleForThisStatusOfWithdrawReceiptORLine=Not yet possible. Withdraw status must be set to 'credited' before declaring reject on specific lines. -NbOfInvoiceToWithdraw=No. of qualified customer invoices with waiting direct debit order -NbOfInvoiceToWithdrawWithInfo=No. of customer invoice with direct debit payment orders having defined bank account information -NbOfInvoiceToPayByBankTransfer=No. of qualified supplier invoices waiting for a payment by credit transfer -SupplierInvoiceWaitingWithdraw=Vendor invoice waiting for payment by credit transfer -InvoiceWaitingWithdraw=Invoice waiting for direct debit -InvoiceWaitingPaymentByBankTransfer=Invoice waiting for credit transfer -AmountToWithdraw=Amount to withdraw -NoInvoiceToWithdraw=No invoice open for '%s' is waiting. Go on tab '%s' on invoice card to make a request. -NoSupplierInvoiceToWithdraw=No supplier invoice with open 'Direct credit requests' is waiting. Go on tab '%s' on invoice card to make a request. -ResponsibleUser=User Responsible -WithdrawalsSetup=Direct debit payment setup -CreditTransferSetup=Credit transfer setup -WithdrawStatistics=Direct debit payment statistics -CreditTransferStatistics=Credit transfer statistics -Rejects=Rejects -LastWithdrawalReceipt=Latest %s direct debit receipts -MakeWithdrawRequest=Make a direct debit payment request -MakeBankTransferOrder=Make a credit transfer request -WithdrawRequestsDone=%s direct debit payment requests recorded -BankTransferRequestsDone=%s credit transfer requests recorded -ThirdPartyBankCode=Third-party bank code -NoInvoiceCouldBeWithdrawed=No invoice debited successfully. Check that invoices are on companies with a valid IBAN and that IBAN has a UMR (Unique Mandate Reference) with mode %s. -WithdrawalCantBeCreditedTwice=This withdrawal receipt is already marked as credited; this can't be done twice, as this would potentially create duplicate payments and bank entries. -ClassCredited=Classify credited -ClassDebited=Classify debited -ClassCreditedConfirm=Are you sure you want to classify this withdrawal receipt as credited on your bank account? -TransData=Transmission date -TransMetod=Transmission method -Send=Send -Lines=Lines -StandingOrderReject=Issue a rejection -WithdrawsRefused=Direct debit refused -WithdrawalRefused=Withdrawal refused -CreditTransfersRefused=Credit transfers refused -WithdrawalRefusedConfirm=Are you sure you want to enter a withdrawal rejection for society -RefusedData=Date of rejection -RefusedReason=Reason for rejection -RefusedInvoicing=Billing the rejection -NoInvoiceRefused=Do not charge the rejection -InvoiceRefused=Invoice refused (Charge the rejection to customer) -StatusDebitCredit=Status debit/credit -StatusWaiting=Waiting -StatusTrans=Sent -StatusDebited=Debited -StatusCredited=Credited -StatusPaid=Paid -StatusRefused=Refused -StatusMotif0=Unspecified -StatusMotif1=Insufficient funds -StatusMotif2=Request contested -StatusMotif3=No direct debit payment order -StatusMotif4=Sales Order -StatusMotif5=RIB unusable -StatusMotif6=Account without balance -StatusMotif7=Judicial Decision -StatusMotif8=Other reason -CreateForSepaFRST=Create direct debit file (SEPA FRST) -CreateForSepaRCUR=Create direct debit file (SEPA RCUR) -CreateAll=Create direct debit file -CreateFileForPaymentByBankTransfer=Create file for credit transfer -CreateSepaFileForPaymentByBankTransfer=Create credit transfer file (SEPA) -CreateGuichet=Only office -CreateBanque=Only bank -OrderWaiting=Waiting for treatment -NotifyTransmision=Record file transmission of order -NotifyCredit=Record credit of order -NumeroNationalEmetter=National Transmitter Number -WithBankUsingRIB=For bank accounts using RIB -WithBankUsingBANBIC=For bank accounts using IBAN/BIC/SWIFT -BankToReceiveWithdraw=Receiving Bank Account -BankToPayCreditTransfer=Bank Account used as source of payments -CreditDate=Credit on -WithdrawalFileNotCapable=Unable to generate withdrawal receipt file for your country %s (Your country is not supported) -ShowWithdraw=Show Direct Debit Order -IfInvoiceNeedOnWithdrawPaymentWontBeClosed=However, if invoice has at least one direct debit payment order not yet processed, it won't be set as paid to allow prior withdrawal management. -DoStandingOrdersBeforePayments=This tab allows you to request a direct debit payment order. Once done, go into menu Bank->Payment by direct debit to generate and manage the direct debit order. When direct debit order is closed, payment on invoices will be automatically recorded, and invoices closed if remainder to pay is null. -DoCreditTransferBeforePayments=This tab allows you to request a credit transfer order. Once done, go into menu Bank->Payment by credit transfer to generate and manage the credit transfer order. When credit transfer order is closed, payment on invoices will be automatically recorded, and invoices closed if remainder to pay is null. -WithdrawalFile=Debit order file -CreditTransferFile=Credit transfer file -SetToStatusSent=Set to status "File Sent" -ThisWillAlsoAddPaymentOnInvoice=This will also record payments on invoices and will classify them as "Paid" if remain to pay is null -StatisticsByLineStatus=Statistics by status of lines +CustomersStandingOrdersArea=Birbaşa debet sifarişləri ilə ödənişlər +SuppliersStandingOrdersArea=Kredit köçürmə yolu ilə ödənişlər +StandingOrdersPayment=Birbaşa debet ödəniş tapşırıqları +StandingOrderPayment=Birbaşa debet ödəniş tapşırığı +NewStandingOrder=Yeni birbaşa debet sifarişi +NewPaymentByBankTransfer=Kredit köçürmə yolu ilə yeni ödəniş +StandingOrderToProcess=Emal etmək +PaymentByBankTransferReceipts=Kredit köçürmə sifarişləri +PaymentByBankTransferLines=Kredit köçürmə sifariş xətləri +WithdrawalsReceipts=Birbaşa debet sifarişləri +WithdrawalReceipt=Birbaşa debet sifarişi +BankTransferReceipts=Kredit köçürmə sifarişləri +BankTransferReceipt=Kredit köçürmə sifarişi +LatestBankTransferReceipts=Ən son %s kredit köçürmə sifarişləri +LastWithdrawalReceipts=Ən son %s birbaşa debet faylları +WithdrawalsLine=Birbaşa debet sifariş xətti +CreditTransfer=Kredit köçürməsi +CreditTransferLine=Kredit köçürmə xətti +WithdrawalsLines=Birbaşa debet sifariş xətləri +CreditTransferLines=Kredit köçürmə xətləri +RequestStandingOrderToTreat=İşləmək üçün birbaşa debet ödəniş tapşırığı üçün sorğular +RequestStandingOrderTreated=Birbaşa debet ödəniş tapşırığı üçün sorğular emal edildi +RequestPaymentsByBankTransferToTreat=Kreditin köçürülməsi üçün sorğuların işlənməsi +RequestPaymentsByBankTransferTreated=Kredit köçürmə sorğularına baxıldı +NotPossibleForThisStatusOfWithdrawReceiptORLine=Hələ mümkün deyil. Xüsusi sətirlərdə rədd elan etməzdən əvvəl geri çəkilmə statusu "kreditə alınmış" olaraq təyin edilməlidir. +NbOfInvoiceToWithdraw=Gözləyən birbaşa debet sifarişi ilə ixtisaslı müştəri hesab-fakturalarının sayı +NbOfInvoiceToWithdrawWithInfo=Müəyyən bank hesabı məlumatları olan birbaşa debet ödəniş tapşırıqları ilə müştəri hesab-fakturasının nömrəsi +NbOfInvoiceToPayByBankTransfer=Kredit köçürməsi ilə ödənişi gözləyən ixtisaslı təchizatçı hesab-fakturalarının sayı +SupplierInvoiceWaitingWithdraw=Kredit köçürmə yolu ilə ödənişi gözləyən satıcı fakturası +InvoiceWaitingWithdraw=Birbaşa debet üçün faktura gözləyir +InvoiceWaitingPaymentByBankTransfer=Kredit köçürməsini gözləyən faktura +AmountToWithdraw=Çıxarılacaq məbləğ +AmountToTransfer=Köçürüləcək məbləğ +NoInvoiceToWithdraw='%s' üçün açıq faktura gözlənmir. Sorğu etmək üçün faktura kartındakı '%s' tabına keçin. +NoSupplierInvoiceToWithdraw=Açıq '%s' olan heç bir təchizatçı fakturası gözləmir. Sorğu etmək üçün faktura kartındakı '%s' tabına keçin. +ResponsibleUser=İstifadəçi Məsuliyyətlidir +WithdrawalsSetup=Birbaşa debet ödənişinin qurulması +CreditTransferSetup=Kredit köçürməsinin qurulması +WithdrawStatistics=Birbaşa debet ödəniş statistikası +CreditTransferStatistics=Kredit köçürmə statistikası +Rejects=Rədd edir +LastWithdrawalReceipt=Ən son %s birbaşa debet qəbzləri +MakeWithdrawRequest=Birbaşa debet ödəniş tələbi edin +MakeWithdrawRequestStripe=Stripe vasitəsilə birbaşa debet ödəniş sorğusu göndərin +MakeBankTransferOrder=Kredit köçürmə sorğusu göndərin +WithdrawRequestsDone=%s birbaşa debet ödəniş sorğuları qeydə alınıb +BankTransferRequestsDone=%s kredit köçürmə sorğusu qeydə alınıb +ThirdPartyBankCode=Üçüncü tərəf bank kodu +NoInvoiceCouldBeWithdrawed=No invoice processed successfully. Check that invoices are on companies with a valid IBAN and that IBAN has a UMR (Unique Mandate Reference) with mode %s. +NoInvoiceCouldBeWithdrawedSupplier=Heç bir faktura uğurla emal edilmədi. Hesab-fakturaların etibarlı IBAN-ı olan şirkətlərdə olduğunu yoxlayın. +NoSalariesCouldBeWithdrawed=Heç bir maaş uğurla işlənməyib. Etibarlı IBAN-ı olan istifadəçilərin əmək haqqının olduğunu yoxlayın. +WithdrawalCantBeCreditedTwice=Bu geri çəkilmə qəbzi artıq kreditləşdirilmiş kimi qeyd olunub; bunu iki dəfə etmək olmaz, çünki bu, potensial olaraq dublikat ödənişlər və bank qeydləri yarada bilər. +ClassCredited=Krediti təsnifləşdirin +ClassDebited=Debeti təsnif edin +ClassCreditedConfirm=Bu geri çəkilmə qəbzini bank hesabınıza daxil olan kimi təsnif etmək istədiyinizə əminsiniz? +TransData=Ötürülmə tarixi +TransMetod=Ötürmə üsulu +Send=Göndər +Lines=Xətlər +StandingOrderReject=Rədd qeyd edin +WithdrawsRefused=Birbaşa debet rədd edildi +WithdrawalRefused=Çıxarma rədd edildi +CreditTransfersRefused=Kredit köçürmələri rədd edildi +WithdrawalRefusedConfirm=Cəmiyyət üçün geri çəkilmə rəddinə daxil olmaq istədiyinizə əminsiniz +RefusedData=Rədd edilmə tarixi +RefusedReason=Rədd edilmə səbəbi +RefusedInvoicing=Rədd edilmənin hesablanması +NoInvoiceRefused=Müştəridən imtinaya görə ödəniş etməyin +InvoiceRefused=Müştəridən imtinaya görə ödəniş edin +DirectDebitRefusedInvoicingDesc=Bu imtinanın müştəridən ödənilməli olduğunu bildirmək üçün bir bayraq qoyun +StatusDebitCredit=Vəziyyət debeti/krediti +StatusWaiting=Gözləyirəm +StatusTrans=Göndərildi +StatusDebited=debet edilmiş +StatusCredited=Kredit +StatusPaid=Ödənişli +StatusRefused=İmtina etdi +StatusMotif0=Dəqiqləşdirilməmiş, naməlum +StatusMotif1=Yetərsiz vəsait +StatusMotif2=Müraciət etiraz edildi +StatusMotif3=Birbaşa debet ödəniş tapşırığı yoxdur +StatusMotif4=Satış Sifarişi +StatusMotif5=RIB yararsızdır +StatusMotif6=Balanssız hesab +StatusMotif7=Məhkəmə qərarı +StatusMotif8=Başqa səbəb +CreateForSepaFRST=Birbaşa debet faylı yaradın (SEPA FRST) +CreateForSepaRCUR=Birbaşa debet faylı yaradın (SEPA RCUR) +CreateAll=Birbaşa debet faylı yaradın +CreateFileForPaymentByBankTransfer=Kredit köçürməsi üçün fayl yaradın +CreateSepaFileForPaymentByBankTransfer=Kredit köçürmə faylı yaradın (SEPA) +CreateGuichet=Yalnız ofis +CreateBanque=Yalnız bank +OrderWaiting=Müalicə gözləyir +NotifyTransmision=Sifariş faylının ötürülməsini qeyd edin +NotifyCredit=Sifarişin kreditini qeyd edin +NumeroNationalEmetter=Milli Transmitter Nömrəsi +WithBankUsingRIB=RIB istifadə edən bank hesabları üçün +WithBankUsingBANBIC=IBAN/BIC/SWIFT istifadə edən bank hesabları üçün +BankToReceiveWithdraw=Bank Hesabının qəbulu +BankToPayCreditTransfer=Ödəniş mənbəyi kimi istifadə edilən bank hesabı +CreditDate=Kredit +WithdrawalFileNotCapable=Ölkəniz üçün geri götürmə qəbzi faylını yaratmaq mümkün deyil %s (Ölkəniz dəstəklənmir) +ShowWithdraw=Birbaşa debit sifarişini göstərin +IfInvoiceNeedOnWithdrawPaymentWontBeClosed=Bununla belə, əgər hesab-fakturada hələ emal olunmamış ən azı bir birbaşa debet ödəniş tapşırığı varsa, o, pulun əvvəlcədən idarə edilməsinə icazə vermək üçün ödənilmiş kimi təyin edilməyəcək. +DoStandingOrdersBeforePayments=Bu tab birbaşa debet ödəniş tapşırığını tələb etməyə imkan verir. Birbaşa debet sifariş faylını yaratmaq və idarə etmək üçün "Bank->Birbaşa debetlə ödəniş" menyusuna daxil ola bilərsiniz. +DoStandingOrdersBeforePayments2=Siz həmçinin Stripe kimi SEPA ödəniş prosessoruna birbaşa sorğu göndərə bilərsiniz. +DoStandingOrdersBeforePayments3=Sorğu bağlandıqda, qaimə-fakturalar üzrə ödəniş avtomatik qeydə alınacaq və ödəniləcək qalıq sıfır olduqda qaimə-fakturalar bağlanacaq. +DoCreditTransferBeforePayments=Bu tab sizə kredit köçürmə sifarişi tələb etməyə imkan verir. Bitdikdən sonra Kredit köçürmə sifarişi faylını yaratmaq və idarə etmək üçün "Bank->Kredit köçürməsi ilə ödəniş" menyusuna daxil olun. +DoCreditTransferBeforePayments3=Kredit köçürmə tapşırığı bağlandıqda, qaimə-fakturalar üzrə ödəniş avtomatik qeydə alınacaq və ödəniləcək qalıq sıfır olduqda qaimə-fakturalar bağlanacaq. +WithdrawalFile=Debet sifariş faylı +CreditTransferFile=Kredit köçürmə faylı +SetToStatusSent="Fayl göndərildi" vəziyyətinə təyin edin +ThisWillAlsoAddPaymentOnInvoice=Bu, həmçinin hesab-fakturalardakı ödənişləri qeyd edəcək və ödəməyə qalsa, onları "Ödənilmiş" kimi təsnif edəcək +StatisticsByLineStatus=Xətlərin statusuna görə statistika RUM=UMR -DateRUM=Mandate signature date -RUMLong=Unique Mandate Reference -RUMWillBeGenerated=If empty, a UMR (Unique Mandate Reference) will be generated once the bank account information is saved. -WithdrawMode=Direct debit mode (FRST or RECUR) -WithdrawRequestAmount=Amount of Direct debit request: -BankTransferAmount=Amount of Credit Transfer request: -WithdrawRequestErrorNilAmount=Unable to create direct debit request for empty amount. -SepaMandate=SEPA Direct Debit Mandate -SepaMandateShort=SEPA Mandate -PleaseReturnMandate=Please return this mandate form by email to %s or by mail to -SEPALegalText=By signing this mandate form, you authorize (A) %s to send instructions to your bank to debit your account and (B) your bank to debit your account in accordance with the instructions from %s. As part of your rights, you are entitled to a refund from your bank under the terms and conditions of your agreement with your bank. Your rights regarding the above mandate are explained in a statement that you can obtain from your bank. -CreditorIdentifier=Creditor Identifier -CreditorName=Creditor Name -SEPAFillForm=(B) Please complete all the fields marked * -SEPAFormYourName=Your name -SEPAFormYourBAN=Your Bank Account Name (IBAN) -SEPAFormYourBIC=Your Bank Identifier Code (BIC) -SEPAFrstOrRecur=Type of payment -ModeRECUR=Recurring payment -ModeFRST=One-off payment -PleaseCheckOne=Please check one only -CreditTransferOrderCreated=Credit transfer order %s created -DirectDebitOrderCreated=Direct debit order %s created -AmountRequested=Amount requested +DateRUM=Mandat imza tarixi +RUMLong=Unikal Mandat Arayışı +RUMWillBeGenerated=Boşdursa, bank hesabı məlumatı saxlandıqdan sonra UMR (Unikal Mandat Arayışı) yaradılacaq. +WithdrawMode=Birbaşa debet rejimi (FRST və ya RCUR) +WithdrawRequestAmount=Birbaşa debet sorğusunun məbləği: +BankTransferAmount=Kredit Köçürmə sorğusunun məbləği: +WithdrawRequestErrorNilAmount=Boş məbləğ üçün birbaşa debet sorğusu yaratmaq mümkün deyil. +SepaMandate=SEPA Birbaşa Debit Mandatı +SepaMandateShort=SEPA Mandatı +PleaseReturnMandate=Lütfən, bu mandat formasını e-poçt vasitəsilə %s və ya poçtla qaytarın +SEPALegalText=Bu mandat formasını imzalamaqla siz (A) %s və onun ödəniş xidməti provayderinə hesabınızdan debet etmək üçün bankınıza təlimatlar göndərmək və (B) banka hesabınızdan debet etmək icazəsi verirsiniz. %s təlimatlarına uyğun olaraq. Hüquqlarınızın bir hissəsi olaraq, bankınızla müqavilənizin şərtlərinə uyğun olaraq, bankınızdan pulunuzu geri almaq hüququnuz var. Yuxarıdakı mandatla bağlı hüquqlarınız bankınızdan əldə edə biləcəyiniz bəyanatda izah olunur. Siz gələcək ödənişlər haqqında bildirişlərin baş verməsindən 2 gün əvvəl almağa razılaşırsınız. +CreditorIdentifier=Kreditor İdentifikatoru +CreditorName=Kreditorun adı +SEPAFillForm=(B) * işarələnmiş bütün sahələri doldurun +SEPAFormYourName=Adınız +SEPAFormYourBAN=Bank Hesabınızın Adı (IBAN) +SEPAFormYourBIC=Bank İdentifikator Kodunuz (BIC) +SEPAFrstOrRecur=Ödəniş növü +ModeRECUR=Təkrarlanan ödəniş +ModeRCUR=Təkrarlanan ödəniş +ModeFRST=Birdəfəlik ödəniş +PleaseCheckOne=Zəhmət olmasa yalnız birini yoxlayın +CreditTransferOrderCreated=%s kredit transfer sifarişi yaradıldı +DirectDebitOrderCreated=Birbaşa debet sifarişi %s yaradıldı +AmountRequested=Tələb olunan məbləğ SEPARCUR=SEPA CUR SEPAFRST=SEPA FRST -ExecutionDate=Execution date -CreateForSepa=Create direct debit file -ICS=Creditor Identifier - ICS -END_TO_END="EndToEndId" SEPA XML tag - Unique id assigned per transaction -USTRD="Unstructured" SEPA XML tag -ADDDAYS=Add days to Execution Date -NoDefaultIBANFound=No default IBAN found for this third party +ExecutionDate=İcra tarixi +CreateForSepa=Birbaşa debet faylı yaradın +ICS=Kreditor İdentifikatoru - ICS +IDS=Debitor İdentifikatoru +END_TO_END="EndToEndId" SEPA XML teqi - Hər əməliyyat üçün təyin edilmiş unikal id +USTRD="Strukturlaşdırılmamış" SEPA XML etiketi +ADDDAYS=İcra tarixinə günlər əlavə edin +NoDefaultIBANFound=Bu üçüncü tərəf üçün heç bir defolt IBAN tapılmadı ### Notifications -InfoCreditSubject=Payment of direct debit payment order %s by the bank -InfoCreditMessage=The direct debit payment order %s has been paid by the bank
Data of payment: %s -InfoTransSubject=Transmission of direct debit payment order %s to bank -InfoTransMessage=The direct debit payment order %s has been sent to bank by %s %s.

-InfoTransData=Amount: %s
Method: %s
Date: %s -InfoRejectSubject=Direct debit payment order refused +InfoCreditSubject=%s birbaşa debet ödəniş tapşırığının bank tərəfindən ödənilməsi +InfoCreditMessage=%s birbaşa debet ödəniş tapşırığı bank tərəfindən ödənilib
Ödəniş datası: b0ecb2ec87f49fz +InfoTransSubject=%s birbaşa debet ödəniş tapşırığının banka ötürülməsi +InfoTransMessage=%s birbaşa debet ödəniş tapşırığı %s %s tərəfindən banka göndərildi .

+InfoTransData=Məbləğ: %s
Metod: %s
Tarix: %s +InfoRejectSubject=Birbaşa debet ödəniş tapşırığından imtina edildi InfoRejectMessage=Hello,

the direct debit payment order of invoice %s related to the company %s, with an amount of %s has been refused by the bank.

--
%s -ModeWarning=Option for real mode was not set, we stop after this simulation -ErrorCompanyHasDuplicateDefaultBAN=Company with id %s has more than one default bank account. No way to know wich one to use. -ErrorICSmissing=Missing ICS in Bank account %s -TotalAmountOfdirectDebitOrderDiffersFromSumOfLines=Total amount of direct debit order differs from sum of lines -WarningSomeDirectDebitOrdersAlreadyExists=Warning: There is already some pending Direct Debit orders (%s) requested for an amount of %s -WarningSomeCreditTransferAlreadyExists=Warning: There is already some pending Credit Transfer (%s) requested for an amount of %s +ModeWarning=Real rejim üçün seçim təyin edilmədi, bu simulyasiyadan sonra dayanırıq +ErrorCompanyHasDuplicateDefaultBAN=İD %s olan şirkətin birdən çox defolt bank hesabı var. Hansı birini istifadə edəcəyinizi bilmək üçün heç bir yol yoxdur. +ErrorICSmissing=Bank hesabında İCS çatışmır %s +TotalAmountOfdirectDebitOrderDiffersFromSumOfLines=Birbaşa debet sifarişinin ümumi məbləği sətirlərin cəmindən fərqlənir +WarningSomeDirectDebitOrdersAlreadyExists=Xəbərdarlıq: %s məbləğində tələb olunan bəzi gözlənilən Birbaşa Debit sifarişləri (%s) var. +WarningSomeCreditTransferAlreadyExists=Xəbərdarlıq: %s məbləğində artıq bir neçə gözlənilən Kredit Transferi (%s) tələb olunub. +UsedFor=%s üçün istifadə olunur +Societe_ribSigned=SEPA mandatı İmzalanıb +NbOfInvoiceToPayByBankTransferForSalaries=Kredit köçürmə yolu ilə ödənişi gözləyən ixtisaslı maaşların sayı +SalaryWaitingWithdraw=Kredit köçürmə yolu ilə ödənilməsini gözləyən maaşlar +RefSalary=Maaş +NoSalaryInvoiceToWithdraw='%s' gözlənilən maaş yoxdur. Sorğu etmək üçün əmək haqqı kartında '%s' sekmesine keçin. +SalaryInvoiceWaitingWithdraw=Kredit köçürmə yolu ilə ödənilməsini gözləyən maaşlar diff --git a/htdocs/langs/bg_BG/admin.lang b/htdocs/langs/bg_BG/admin.lang index b72edebf8bc..87fc95012af 100644 --- a/htdocs/langs/bg_BG/admin.lang +++ b/htdocs/langs/bg_BG/admin.lang @@ -60,7 +60,7 @@ GUISetup=Интерфейс SetupArea=Настройки UploadNewTemplate=Качване на нов(и) шаблон(и) FormToTestFileUploadForm=Формуляр за тестване на качването на файлове (според настройката) -ModuleMustBeEnabled=Модулът/Приложението %sтрябва да е активиран. +ModuleMustBeEnabled=Модулът/Приложението %sтрябва да е активиран. ModuleIsEnabled=Модулът/Приложението %sе активирано IfModuleEnabled=Забележка: Ефективно е само ако модула %s е активиран RemoveLock=Премахнете / преименувайте файла %s, ако съществува, за да разрешите използването на инструмента за инсталиране / актуализиране. @@ -77,7 +77,7 @@ Dictionary=Речници ErrorReservedTypeSystemSystemAuto=Стойностите "system" и "systemauto" за тип са резервирани. Може да използвате "user" като стойност, за да добавите свой собствен запис. ErrorCodeCantContainZero=Кодът не може да съдържа стойност 0 DisableJavascript=Изключване на Java скрипт и Ajax функции -DisableJavascriptNote=Бележка: Само за тестване или отстраняване на грешки. За оптимизиране за незрящи хора или текствои браузъри може да използвате настройките за профила на потребителя. +DisableJavascriptNote=Бележка: Само за тестване или отстраняване на грешки. За оптимизиране за незрящи хора или текствои браузъри може да използвате настройките за профила на потребителя. UseSearchToSelectCompanyTooltip=Също така, ако имате голям брой контрагенти (> 100 000) може да увеличите скоростта като зададете стойност 1 за константата COMPANY_DONOTSEARCH_ANYWHERE в Настройки -> Други настройки. След това търсенето ще бъде ограничено до началото на низ. UseSearchToSelectContactTooltip=Също така, ако имате голям брой контакти (> 100 000) може да увеличите скоростта като зададете стойност 1 за константата CONTACT_DONOTSEARCH_ANYWHERE в Настройки -> Други настройки. След това търсенето ще бъде ограничено до началото на низ. DelaiedFullListToSelectCompany=Изчаква натискането на клавиш, преди да зареди съдържание в списъка с контрагенти.
Това може да увеличи производителността, ако имате голям брой контрагенти, но е по-малко удобно. @@ -106,7 +106,7 @@ NextValueForInvoices=Следваща стойност (фактури) NextValueForCreditNotes=Следваща стойност (кредитни известия) NextValueForDeposit=Следваща стойност (авансови плащания) NextValueForReplacements=Следваща стойност (замествания) -MustBeLowerThanPHPLimit=Забележка: вашата PHP конфигурация в момента ограничава максималния размер на файловете за качване до %s %s, независимо от стойността на този параметър +MustBeLowerThanPHPLimit=Note: your PHP configuration currently limits the maximum filesize for upload to %s %s, irrespective of the value of this parameter NoMaxSizeByPHPLimit=Забележка: Не е зададено ограничение във вашата PHP конфигурация MaxSizeForUploadedFiles=Максимален размер за качени файлове (0 за забрана на качването) UseCaptchaCode=Използвайте графичен код (CAPTCHA) на страницата за вход и някои публични страници @@ -364,7 +364,7 @@ WithCounter=Управление на брояч GenericMaskCodes=Можете да въведете произволна маска за номериране. В тази маска могат да се използват следните тагове:
{000000} съответства на число, което ще се увеличава на всеки %s. Въведете толкова нули, колкото е желаната дължина на брояча. Броячът ще бъде завършен с нули отляво, за да има толкова нули, колкото е маската.
{000000+000} същото като предишното, но отместване, съответстващо на числото отдясно на знака +, се прилага, започвайки от първия %s.
{000000@x} същото като предишното, но броячът се нулира при достигане на месец x (x между 1 и 12 или 0 за използване на първите месеци от фискалната година, дефинирани във вашата конфигурация, или 99 за нулиране всеки месец). Ако се използва тази опция и x е 2 или по-високо, тогава се изисква и последователността {yy}{mm} или {yyyy}{mm}.
{dd} ден (01 до 31).
{mm} месец (01 до 12).
{yy}, {yyyy} или {y} година над 2, 4 или 1 число.
GenericMaskCodes2={cccc} клиентският код на n знака
{cccc000} кода на клиента на n знака е последван от брояч, посветен на Клиент. Този брояч, предназначен за Клиент, се нулира едновременно с глобалния брояч.
{tttt} Кодът от тип трета страна на n знака (вижте менюто Начало - Настройка - Речник - Типове контрагенти). Ако добавите този маркер, броячът ще бъде различен за всеки тип трета страна.
GenericMaskCodes3=Всички други символи в маската ще останат непокътнати.
Не са разрешени интервали.
-GenericMaskCodes3EAN=Всички други знаци в маската ще останат непокътнати (с изключение на * или ? на 13-та позиция в EAN13).
Интервалите не са разрешени.
В EAN13 последният знак след последния } на 13-та позиция трябва да бъде * или ? . Той ще бъде заменен от изчисления ключ.
+GenericMaskCodes3EAN=All other characters in the mask will remain intact (except * or ? in 13th position in EAN13).
Spaces are not allowed.
In EAN13, the last character after the last } in 13th position should be * or ? . It will be replaced by the calculated key.
GenericMaskCodes4a=Пример за 99-ия %s на третата страна TheCompany, с Дата 2023-01-31:
GenericMaskCodes4b=Пример за трета страна, създадена на 31 януари 2023 г.:
GenericMaskCodes4c=Пример за продукт, създаден на 2023-01-31:
@@ -1197,6 +1197,7 @@ Skin=Тема на интерфейса DefaultSkin=Тема по подразбиране MaxSizeList=Максимална дължина за списък DefaultMaxSizeList=Максимална дължина по подразбиране за списъци +DisplayGrandTotalInList=Display grand total (for all pages) in lists footer DefaultMaxSizeShortList=Максимална дължина по подразбиране за кратки списъци (т.е. в карта на клиента) MessageOfDay=Послание на деня MessageLogin=Съобщение в страницата за вход @@ -1860,7 +1861,7 @@ PastDelayVCalExport=Да не се експортират събития по-с SecurityKey = Ключ за защита ##### ClickToDial ##### ClickToDialSetup=Настройка на модула за набиране (ClickToDial) -ClickToDialUrlDesc=URL адресът се извиква при щракване върху снимката на телефона. В URL можете да използвате тагове
__PHONETO__, които ще бъдат заменен с телефонния номер на лицето, на което да се обадите
__PHONEFROM__, който ще бъде заменен с телефонен номер на обаждащото се лице (ваш)
__LOGIN__
, които ще бъдат заменени с данни за влизане чрез кликване (дефинирани в потребителската карта)
__PASS__ , която ще бъде заменена с парола за набиране чрез кликване (дефинирана в потребителската карта). +ClickToDialUrlDesc=URL called when a click on phone picto is done. In URL, you can use tags
__PHONETO__ that will be replaced with the phone number of person to call
__PHONEFROM__ that will be replaced with phone number of calling person (yours)
__LOGIN__ that will be replaced with clicktodial login (defined on user card)
__PASS__ that will be replaced with clicktodial password (defined on user card). ClickToDialDesc=Този модул променя телефонните номера, когато използвате настолен компютър, във връзки, върху които може да се кликне. Щракването ще извика номера. Това може да се използва за стартиране на телефонния разговор, когато използвате софтуерен телефон на вашия работен плот или когато използвате CTI система, базирана на SIP протокол, например. Забележка: Когато използвате смартфон, телефонните номера винаги могат да се кликват. ClickToDialUseTelLink=Просто използвайте връзката "tel:" за телефонни номера ClickToDialUseTelLinkDesc=Използвайте този метод, ако вашите потребители имат софтфон или софтуерен интерфейс, инсталиран на същия компютър като браузъра, и се извиква, когато щракнете върху връзка, започваща с "tel:" във вашия браузър. Ако имате нужда от връзка, която започва с „sip:“ или пълно сървърно решение (няма нужда от локална инсталация на софтуер), трябва да зададете това на „Не“ и да попълните следващото поле. @@ -2433,3 +2434,12 @@ UrlPublicInterfaceHelpAdmin=It is possible to define an alias to the web server ExportUseForce=Use the parameter -f ExportUseForceHelp=Force to continue the export even when an error is found (Backup may not be reliable) CustomPrompt=Custom prompts +AiDescription=AI (Artificial Intelligence) features +AiDescriptionLong=Provides AI (Artificial Intelligence) features in different part of the application. Need external AI API. +AI_KEY_API_CHATGPT= Key for ChatGPT IA api +AiSetup=AI module setup +AiCustomPrompt=AI customs prompt +AI_CONFIGURATIONS_PROMPT=Custom prompt +ImageGeneration=Image generation +AIPromptForFeatures=AI custom prompts for features +EnterAnIP=Enter an IP address diff --git a/htdocs/langs/bg_BG/main.lang b/htdocs/langs/bg_BG/main.lang index 4eea2b8e91c..49c94c74a94 100644 --- a/htdocs/langs/bg_BG/main.lang +++ b/htdocs/langs/bg_BG/main.lang @@ -420,6 +420,8 @@ TotalTTCShort=Общо (с ДДС) TotalHT=Данъчна основа (без ДДС) TotalHTforthispage=Общо (без ДДС) за тази страница Totalforthispage=Общо за тази страница +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=Сума за плащане TotalTTCToYourCredit=Общо (с ДДС) към вашия кредит TotalVAT=Начислен ДДС @@ -647,6 +649,7 @@ ReportName=Име на отчет ReportPeriod=Период на отчет ReportDescription=Описание Report=Отчет +Reports=Отчети Keyword=Ключова дума Origin=Произход Legend=Легенда diff --git a/htdocs/langs/bg_BG/modulebuilder.lang b/htdocs/langs/bg_BG/modulebuilder.lang index eea4ff7d25a..1c4503559d2 100644 --- a/htdocs/langs/bg_BG/modulebuilder.lang +++ b/htdocs/langs/bg_BG/modulebuilder.lang @@ -180,7 +180,7 @@ FailedToAddCodeIntoDescriptor=Неуспешно добавяне на код в DictionariesCreated=Речникът %s е създаден успешно DictionaryDeleted=Речникът %s премахнат успешно PropertyModuleUpdated=Собствеността %s е актуализирана успешно -InfoForApiFile=* Когато генерирате файл за първи път, всички методи ще бъдат създадени за всеки обект.
* Когато щракнете върху remove, вие просто премахвате всички методи за класа избран обект. +InfoForApiFile=* When you generate file for the first time then all methods will be created for each object.
* When you click in remove you just remove all methods for the selected object. SetupFile=Страница за настройка на модула EmailingSelectors=Emails selectors EmailingSelectorDesc=Можете да генерирате и редактирате тук файловете на класа, за да предоставите нови целеви селектори за имейл за модула за масово изпращане по имейл diff --git a/htdocs/langs/bg_BG/website.lang b/htdocs/langs/bg_BG/website.lang index a23c6f140e3..94ea0012d30 100644 --- a/htdocs/langs/bg_BG/website.lang +++ b/htdocs/langs/bg_BG/website.lang @@ -63,7 +63,7 @@ YouCanEditHtmlSourceckeditor=Може да редактирате изходни YouCanEditHtmlSource=
You can include PHP code into this source using tags <?php ?>. The following global variables are available: $conf, $db, $mysoc, $user, $website, $websitepage, $weblangs, $pagelangs.

You can also include content of another Page/Container with the following syntax:
<?php includeContainer('alias_of_container_to_include'); ?>

You can make a redirect to another Page/Container with the following syntax (Note: do not output any content before a redirect):
<?php redirectToContainer('alias_of_container_to_redirect_to'); ?>

To add a link to another page, use the syntax:
<a href="alias_of_page_to_link_to.php">mylink<a>

To include a link to download a file stored into the documents directory, use the document.php wrapper:
Example, for a file into documents/ecm (need to be logged), syntax is:
<a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext">
For a file into documents/medias (open directory for public access), syntax is:
<a href="/document.php?modulepart=medias&file=[relative_dir/]filename.ext">
For a file shared with a share link (open access using the sharing hash key of file), syntax is:
<a href="/document.php?hashp=publicsharekeyoffile">
YouCanEditHtmlSource1=
To include an image stored into the documents directory, use the viewimage.php wrapper.
Example, for an image into documents/medias (open directory for public access), syntax is:
<img src="/viewimage.php?modulepart=medias&file=[relative_dir/]filename.ext">
YouCanEditHtmlSource2=За изображение, споделено с връзка за споделяне (отворен достъп чрез хеш ключа за споделяне на файла), синтаксисът е:
<img src="/viewimage.php?hashp=12345679012...">
-YouCanEditHtmlSource3=За да получите URL адреса на изображението на PHP обект, използвайте
<
img src="<?php print getImagePublicURLOfObject($object, 1, "_small")?>">
+YouCanEditHtmlSource3=To get the URL of the image of a PHP object, use
<img src="<?php print getImagePublicURLOfObject($object, 1, "_small") ?>">
YouCanEditHtmlSourceMore=
Още примери за HTML или динамичен код са налични в документацията на wiki.
ClonePage=Клониране на страница / контейнер CloneSite=Клониране на сайт diff --git a/htdocs/langs/bn_BD/accountancy.lang b/htdocs/langs/bn_BD/accountancy.lang index 1b98c4b323c..0a1637641e7 100644 --- a/htdocs/langs/bn_BD/accountancy.lang +++ b/htdocs/langs/bn_BD/accountancy.lang @@ -335,7 +335,6 @@ CategoryDeleted=অ্যাকাউন্টিং অ্যাকাউন্ AccountingJournals=অ্যাকাউন্টিং জার্নাল AccountingJournal=অ্যাকাউন্টিং জার্নাল NewAccountingJournal=নতুন অ্যাকাউন্টিং জার্নাল -ShowAccountingJournal=অ্যাকাউন্টিং জার্নাল দেখান NatureOfJournal=জার্নালের প্রকৃতি AccountingJournalType1=বিবিধ অপারেশন AccountingJournalType2=বিক্রয় @@ -346,14 +345,14 @@ AccountingJournalType8=ইনভেন্টরি AccountingJournalType9=ধরে রাখা উপার্জন GenerationOfAccountingEntries=অ্যাকাউন্টিং এন্ট্রি প্রজন্ম ErrorAccountingJournalIsAlreadyUse=এই জার্নাল ইতিমধ্যে ব্যবহার করা হয় -AccountingAccountForSalesTaxAreDefinedInto=দ্রষ্টব্য: বিক্রয় করের জন্য অ্যাকাউন্টিং অ্যাকাউন্ট %sমেনুতে সংজ্ঞায়িত করা হয়েছে - %s +AccountingAccountForSalesTaxAreDefinedInto=Note: Accounting account for Sales tax are defined into menu %s - %s NumberOfAccountancyEntries=এন্ট্রি সংখ্যা NumberOfAccountancyMovements=আন্দোলনের সংখ্যা ACCOUNTING_DISABLE_BINDING_ON_SALES=বিক্রয়ের ক্ষেত্রে অ্যাকাউন্টেন্সিতে বাঁধাই এবং স্থানান্তর অক্ষম করুন (কাস্টমার ইনভয়েস অ্যাকাউন্টিংয়ে বিবেচনা করা হবে না) ACCOUNTING_DISABLE_BINDING_ON_PURCHASES=ক্রয়ের ক্ষেত্রে অ্যাকাউন্টেন্সিতে বাঁধাই এবং স্থানান্তর অক্ষম করুন (বিক্রেতার চালান অ্যাকাউন্টিংয়ে বিবেচনায় নেওয়া হবে না) ACCOUNTING_DISABLE_BINDING_ON_EXPENSEREPORTS=ব্যয়ের প্রতিবেদনে হিসাববিজ্ঞানে বাঁধাই এবং স্থানান্তর অক্ষম করুন (ব্যয় প্রতিবেদন অ্যাকাউন্টিংয়ে বিবেচনা করা হবে না) ACCOUNTING_ENABLE_LETTERING=অ্যাকাউন্টিং এ লেটারিং ফাংশন সক্রিয় করুন -ACCOUNTING_ENABLE_LETTERING_DESC=যখন এই বিকল্পগুলি সক্রিয় করা হয়, আপনি প্রতিটি অ্যাকাউন্টিং এন্ট্রিতে একটি কোড সংজ্ঞায়িত করতে পারেন যাতে আপনি বিভিন্ন অ্যাকাউন্টিং আন্দোলনকে একসাথে গোষ্ঠী করতে পারেন। অতীতে, যখন বিভিন্ন জার্নাল স্বাধীনভাবে পরিচালিত হত, তখন এই বৈশিষ্ট্যটি বিভিন্ন জার্নালের আন্দোলনের লাইনগুলিকে একত্রিত করার জন্য প্রয়োজনীয় ছিল। যাইহোক, Dolibarr অ্যাকাউন্টেন্সির সাথে, এই ধরনের একটি ট্র্যাকিং কোড, যাকে বলা হয় "%s span>" ইতিমধ্যেই স্বয়ংক্রিয়ভাবে সংরক্ষিত হয়েছে, তাই একটি স্বয়ংক্রিয় অক্ষর ইতিমধ্যেই সম্পন্ন হয়েছে, ত্রুটির কোনো ঝুঁকি নেই তাই এই বৈশিষ্ট্যটি সাধারণ ব্যবহারের জন্য অকেজো হয়ে পড়েছে। ম্যানুয়াল লেটারিং বৈশিষ্ট্য শেষ ব্যবহারকারীদের জন্য সরবরাহ করা হয়েছে যারা অ্যাকাউন্টেন্সিতে ডেটা স্থানান্তর করার জন্য কম্পিউটার ইঞ্জিনকে সত্যিই বিশ্বাস করেন না। +ACCOUNTING_ENABLE_LETTERING_DESC=When this options is enabled, you can define, on each accounting entry, a code so you can group different accounting movements together. In the past, when different journals was managed independently, this feature was necessary to group movement lines of different journals together. However, with Dolibarr accountancy, such a tracking code, called "%s" is already saved automatically, so an automatic lettering is already done, with no risk of error so this feature has become useless for a common usage. Manual lettering feature is provided for end users that really don't trust the computer engine making the transfer of data in accountancy. EnablingThisFeatureIsNotNecessary=একটি কঠোর অ্যাকাউন্টিং ব্যবস্থাপনার জন্য এই বৈশিষ্ট্যটি সক্ষম করার আর প্রয়োজন নেই৷ ACCOUNTING_ENABLE_AUTOLETTERING=অ্যাকাউন্টিংয়ে স্থানান্তর করার সময় স্বয়ংক্রিয় অক্ষর সক্ষম করুন ACCOUNTING_ENABLE_AUTOLETTERING_DESC=অক্ষরের জন্য কোডটি স্বয়ংক্রিয়ভাবে তৈরি এবং বৃদ্ধি পায় এবং শেষ ব্যবহারকারী দ্বারা নির্বাচিত হয় না @@ -361,7 +360,7 @@ ACCOUNTING_LETTERING_NBLETTERS=লেটারিং কোড তৈরি ক ACCOUNTING_LETTERING_NBLETTERS_DESC=কিছু অ্যাকাউন্টিং সফ্টওয়্যার শুধুমাত্র একটি দুই-অক্ষরের কোড গ্রহণ করে। এই প্যারামিটার আপনাকে এই দিকটি সেট করতে দেয়। অক্ষরের ডিফল্ট সংখ্যা তিনটি। OptionsAdvanced=উন্নত বিকল্প ACCOUNTING_FORCE_ENABLE_VAT_REVERSE_CHARGE=সরবরাহকারী ক্রয়ের উপর ভ্যাট রিভার্স চার্জ পরিচালনা সক্রিয় করুন -ACCOUNTING_FORCE_ENABLE_VAT_REVERSE_CHARGE_DESC=যখন এই বিকল্পটি সক্রিয় থাকে, তখন আপনি সংজ্ঞায়িত করতে পারেন যে একটি সরবরাহকারী বা একটি প্রদত্ত বিক্রেতার চালানকে অবশ্যই অ্যাকাউন্টেন্সিতে স্থানান্তর করতে হবে: একটি অতিরিক্ত ডেবিট এবং একটি ক্রেডিট লাইন 2টি প্রদত্ত অ্যাকাউন্টে অ্যাকাউন্টিংয়ে তৈরি হবে "< এ সংজ্ঞায়িত অ্যাকাউন্টের চার্ট থেকে span class='notranslate'>%s" সেটআপ পৃষ্ঠা৷ +ACCOUNTING_FORCE_ENABLE_VAT_REVERSE_CHARGE_DESC=When this option is enabled, you can define that a supplier or a given vendor invoice must be transferred into accountancy differently: A additional debit and a credit line will generated into the accounting on 2 given accounts from the chart of account defined into the "%s" setup page. ## Export NotExportLettering=ফাইল তৈরি করার সময় অক্ষর রপ্তানি করবেন না diff --git a/htdocs/langs/bn_BD/admin.lang b/htdocs/langs/bn_BD/admin.lang index 0d33cfeaecb..ac09aff54e0 100644 --- a/htdocs/langs/bn_BD/admin.lang +++ b/htdocs/langs/bn_BD/admin.lang @@ -106,7 +106,7 @@ NextValueForInvoices=পরবর্তী মান (চালান) NextValueForCreditNotes=পরবর্তী মান (ক্রেডিট নোট) NextValueForDeposit=পরবর্তী মান (ডাউন পেমেন্ট) NextValueForReplacements=পরবর্তী মান (প্রতিস্থাপন) -MustBeLowerThanPHPLimit=দ্রষ্টব্য: আপনার PHP কনফিগারেশন বর্তমানে %sb09a4b739fz0b09a4b739fz0-এ আপলোড করার জন্য সর্বাধিক ফাইলের আকার সীমাবদ্ধ করে span> %s, এই প্যারামিটারের মান নির্বিশেষে +MustBeLowerThanPHPLimit=Note: your PHP configuration currently limits the maximum filesize for upload to %s %s, irrespective of the value of this parameter NoMaxSizeByPHPLimit=দ্রষ্টব্য: আপনার পিএইচপি কনফিগারেশনে কোন সীমা সেট করা নেই MaxSizeForUploadedFiles=আপলোড করা ফাইলগুলির জন্য সর্বাধিক আকার (0 যেকোন আপলোডের অনুমতি না দেওয়ার জন্য) UseCaptchaCode=লগইন পৃষ্ঠা এবং কিছু পাবলিক পৃষ্ঠায় গ্রাফিকাল কোড (ক্যাপচা) ব্যবহার করুন @@ -150,7 +150,7 @@ AllWidgetsWereEnabled=সমস্ত উপলব্ধ উইজেট সক WidgetAvailable=উইজেট উপলব্ধ PositionByDefault=ডিফল্ট অর্ডার MenusDesc=মেনু পরিচালকরা দুটি মেনু বারের বিষয়বস্তু সেট করে (অনুভূমিক এবং উল্লম্ব)। -MenusEditorDesc=মেনু এডিটর আপনাকে কাস্টম মেনু এন্ট্রি সংজ্ঞায়িত করতে দেয়। অস্থিরতা এবং স্থায়ীভাবে পৌঁছানো যায় না এমন মেনু এন্ট্রি এড়াতে সাবধানে এটি ব্যবহার করুন।
কিছু মডিউল মেনু এন্ট্রি যোগ করে (মেনু সমস্ত
বেশিরভাগই)। আপনি যদি ভুলবশত এই এন্ট্রিগুলির কিছু মুছে ফেলেন, তাহলে আপনি মডিউলটিকে নিষ্ক্রিয় এবং পুনরায় সক্রিয় করে সেগুলি পুনরুদ্ধার করতে পারেন। +MenusEditorDesc=The menu editor allows you to define custom menu entries. Use it carefully to avoid instability and permanently unreachable menu entries.
Some modules add menu entries (in menu All mostly). If you remove some of these entries by mistake, you can restore them disabling and reenabling the module. MenuForUsers=ব্যবহারকারীদের জন্য মেনু LangFile=.lang ফাইল Language_en_US_es_MX_etc=ভাষা (en_US, es_MX, ...) @@ -230,7 +230,7 @@ SeeReportPage=%s এ রিপোর্ট পৃষ্ঠা দেখুন SetOptionTo=%s বিকল্প সেট করুন %s Updated=আপডেট করা হয়েছে AchatTelechargement=কিনুন/ডাউনলোড করুন -GoModuleSetupArea=একটি নতুন মডিউল স্থাপন/ইনস্টল করতে, মডিউল সেটআপ এলাকায় যান: %sb0e40dc6588 +GoModuleSetupArea=একটি নতুন মডিউল স্থাপন/ইনস্টল করতে, মডিউল সেটআপ এলাকায় যান: %sb0e40dc6588 DoliStoreDesc=DoliStore, Dolibarr ERP/CRM বাহ্যিক মডিউলের অফিসিয়াল মার্কেট প্লেস DoliPartnersDesc=কাস্টম-উন্নত মডিউল বা বৈশিষ্ট্যগুলি প্রদানকারী সংস্থাগুলির তালিকা৷
দ্রষ্টব্য: যেহেতু ডলিবার একটি ওপেন সোর্স অ্যাপ্লিকেশন, তাই যে কেউ পিএইচপি প্রোগ্রামিংয়ে অভিজ্ঞদের একটি মডিউল তৈরি করতে সক্ষম হওয়া উচিত। WebSiteDesc=আরো অ্যাড-অন (নন-কোর) মডিউলের জন্য বাহ্যিক ওয়েবসাইট... @@ -250,8 +250,8 @@ Security=নিরাপত্তা Passwords=পাসওয়ার্ড DoNotStoreClearPassword=ডাটাবেসে সংরক্ষিত পাসওয়ার্ড এনক্রিপ্ট করুন (প্লেন-টেক্সট হিসাবে নয়)। এই বিকল্পটি সক্রিয় করার জন্য দৃঢ়ভাবে সুপারিশ করা হয়। MainDbPasswordFileConfEncrypted=conf.php এ সংরক্ষিত ডাটাবেস পাসওয়ার্ড এনক্রিপ্ট করুন। এই বিকল্পটি সক্রিয় করার জন্য দৃঢ়ভাবে সুপারিশ করা হয়। -InstrucToEncodePass=conf.php ফাইলে পাসওয়ার্ড এনকোড করতে, লাইনটি প্রতিস্থাপন করুন b0342fccfda19b /span>$dolibarr_main_db_pass="...";b0342fccfda19 >দ্বারা
$dolibarr_main_db_pass="crypted:b0ecb2ecz87fz" span class='notranslate'>
-InstrucToClearPass=conf.php ফাইলে পাসওয়ার্ড ডিকোড (ক্লিয়ার) করতে, লাইনটি প্রতিস্থাপন করুন
$dolibarr_main_db_pass="crypted:...";$dolibarr_main_db_pass="
দ্বারা ";
+InstrucToEncodePass=To have password encoded into the conf.php file, replace the line
$dolibarr_main_db_pass="...";
by
$dolibarr_main_db_pass="crypted:%s"; +InstrucToClearPass=To have password decoded (clear) into the conf.php file, replace the line
$dolibarr_main_db_pass="crypted:...";
by
$dolibarr_main_db_pass="%s"; ProtectAndEncryptPdfFiles=উত্পন্ন পিডিএফ ফাইল সুরক্ষিত. এটি বাঞ্ছনীয় নয় কারণ এটি বাল্ক পিডিএফ তৈরি করে। ProtectAndEncryptPdfFilesDesc=একটি পিডিএফ ডকুমেন্টের সুরক্ষা এটিকে যেকোনো পিডিএফ ব্রাউজার দিয়ে পড়তে এবং মুদ্রণের জন্য উপলব্ধ রাখে। তবে এডিট ও কপি করা আর সম্ভব নয়। মনে রাখবেন যে এই বৈশিষ্ট্যটি ব্যবহার করার ফলে একটি বিশ্বব্যাপী মার্জড PDF গুলি কাজ করছে না। Feature=বৈশিষ্ট্য @@ -268,7 +268,7 @@ OtherResources=অন্যান্য উৎস ExternalResources=বাহ্যিক সম্পদ SocialNetworks=সামাজিক যোগাযোগ SocialNetworkId=সামাজিক নেটওয়ার্ক আইডি -ForDocumentationSeeWiki=ব্যবহারকারী বা বিকাশকারী ডকুমেন্টেশনের জন্য (ডক, প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী...),
Dolibarr Wiki:
%sb0e40dc658> +ForDocumentationSeeWiki=For user or developer documentation (Doc, FAQs...),
take a look at the Dolibarr Wiki:
%s ForAnswersSeeForum=অন্য কোনো প্রশ্ন/সহায়তার জন্য, আপনি Dolibarr ফোরাম ব্যবহার করতে পারেন:
%s HelpCenterDesc1=Dolibarr-এর সাহায্য এবং সমর্থন পাওয়ার জন্য এখানে কিছু সংস্থান রয়েছে। HelpCenterDesc2=এই সম্পদগুলির মধ্যে কিছু শুধুমাত্র ইংরেজি এ উপলব্ধ। @@ -290,8 +290,8 @@ EMailsSetup=ইমেল সেটআপ EMailsDesc=এই পৃষ্ঠাটি আপনাকে ইমেল পাঠানোর জন্য পরামিতি বা বিকল্প সেট করতে দেয়। EmailSenderProfiles=ইমেল প্রেরকের প্রোফাইল EMailsSenderProfileDesc=আপনি এই বিভাগটি খালি রাখতে পারেন। আপনি এখানে কিছু ইমেল লিখলে, আপনি যখন একটি নতুন ইমেল লিখবেন তখন সেগুলি কম্বোবক্সে সম্ভাব্য প্রেরকদের তালিকায় যোগ করা হবে। -MAIN_MAIL_SMTP_PORT=SMTP/SMTPS পোর্ট (php.ini তে ডিফল্ট মান: %sb09a4b739f17fz0 >>) -MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS হোস্ট (php.ini তে ডিফল্ট মান: %sb09a4b739f17fz0 >>) +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: %s) +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: %s) MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS পোর্ট MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS হোস্ট MAIN_MAIL_EMAIL_FROM=স্বয়ংক্রিয় ইমেলের জন্য প্রেরক ইমেল @@ -345,12 +345,12 @@ ThisIsAlternativeProcessToFollow=এটি ম্যানুয়ালি প StepNb=ধাপ %s FindPackageFromWebSite=আপনার প্রয়োজনীয় বৈশিষ্ট্যগুলি প্রদান করে এমন একটি প্যাকেজ খুঁজুন (উদাহরণস্বরূপ অফিসিয়াল ওয়েব সাইটে %s)। DownloadPackageFromWebSite=প্যাকেজ ডাউনলোড করুন (উদাহরণস্বরূপ অফিসিয়াল ওয়েব সাইট %s থেকে)। -UnpackPackageInDolibarrRoot=আপনার Dolibarr সার্ভার ডিরেক্টরিতে প্যাকেজ করা ফাইলগুলি আনপ্যাক/আনজিপ করুন: %sb09a4b739f8 -UnpackPackageInModulesRoot=একটি বাহ্যিক মডিউল স্থাপন/ইনস্টল করতে, আপনাকে অবশ্যই বহিরাগত মডিউলগুলির জন্য নিবেদিত সার্ভার ডিরেক্টরিতে সংরক্ষণাগার ফাইলটি আনপ্যাক/আনজিপ করতে হবে:
b0aee8365837fz0 >%s
+UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into your Dolibarr server directory: %s +UnpackPackageInModulesRoot=To deploy/install an external module, you must unpack/unzip the archive file into the server directory dedicated to external modules:
%s SetupIsReadyForUse=মডিউল স্থাপনার কাজ শেষ। তবে আপনাকে অবশ্যই পৃষ্ঠা সেটআপ মডিউলগুলিতে গিয়ে আপনার অ্যাপ্লিকেশনে মডিউলটি সক্ষম এবং সেটআপ করতে হবে: %s. NotExistsDirect=বিকল্প রুট ডিরেক্টরি একটি বিদ্যমান ডিরেক্টরিতে সংজ্ঞায়িত করা হয় না৷
InfDirAlt=সংস্করণ 3 থেকে, একটি বিকল্প রুট ডিরেক্টরি সংজ্ঞায়িত করা সম্ভব। এটি আপনাকে একটি ডেডিকেটেড ডিরেক্টরি, প্লাগ-ইন এবং কাস্টম টেমপ্লেটে সঞ্চয় করতে দেয়।
শুধু Dolibarr এর রুটে একটি ডিরেক্টরি তৈরি করুন (যেমন: কাস্টম)।
-InfDirExample=
তারপর ফাইলে এটি ঘোষণা করুন conf.php class='notranslate'>
$dolibarr_main_url_root_alt='/custom'
$dolibarr_main_document_root_alt/span>$dolibarr_main_document_root_alt'//barlib='/classom= 'notranslate'>
যদি এই লাইনগুলিকে "#" দিয়ে কমেন্ট করা হয়, সেগুলিকে সক্রিয় করতে, শুধুমাত্র "#" অক্ষরটি সরিয়ে আনকমেন্ট করুন৷ +InfDirExample=
Then declare it in the file conf.php
$dolibarr_main_url_root_alt='/custom'
$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'
If these lines are commented with "#", to enable them, just uncomment by removing the "#" character. YouCanSubmitFile=আপনি এখান থেকে মডিউল প্যাকেজের .zip ফাইল আপলোড করতে পারেন: CurrentVersion=ডলিবার বর্তমান সংস্করণ CallUpdatePage=ডাটাবেস গঠন এবং ডেটা আপডেট করে এমন পৃষ্ঠায় ব্রাউজ করুন: %s। @@ -362,16 +362,16 @@ LastActivationVersion=সর্বশেষ অ্যাক্টিভেশন UpdateServerOffline=সার্ভার অফলাইনে আপডেট করুন WithCounter=একটি কাউন্টার পরিচালনা করুন GenericMaskCodes=আপনি যেকোন নম্বর মাস্ক লিখতে পারেন। এই মাস্কে, নিম্নলিখিত ট্যাগগুলি ব্যবহার করা যেতে পারে:
{000000}b09a4b739f17f17 একটি সংখ্যার সাথে মিলে যায় যা প্রতিটি %s এ বৃদ্ধি পাবে। কাউন্টারের পছন্দসই দৈর্ঘ্য হিসাবে অনেক শূন্য লিখুন। কাউন্টারটি বাম দিক থেকে শূন্য দ্বারা সম্পন্ন হবে যাতে মুখোশের মতো শূন্য থাকে।
{000000+000} কিন্তু আগেরটির মতোই প্রথম %s থেকে শুরু করে + চিহ্নের ডানদিকের নম্বরের সাথে সম্পর্কিত একটি অফসেট প্রয়োগ করা হয়।
{000000@x} কিন্তু আগেরটির মতোই মাস x এ পৌঁছালে কাউন্টারটি শূন্যে রিসেট করা হয় (x 1 থেকে 12-এর মধ্যে, অথবা আপনার কনফিগারেশনে সংজ্ঞায়িত আর্থিক বছরের প্রথম মাস ব্যবহার করতে 0, অথবা প্রতি মাসে শূন্যে রিসেট করতে 99)। যদি এই বিকল্পটি ব্যবহার করা হয় এবং x 2 বা উচ্চতর হয়, তাহলে ক্রম {yy}{mm} বা {yyyy}{mm}ও প্রয়োজন।
{dd} দিন (01 থেকে 31)।
{mm} মাস (01 থেকে 12)।
{yy}, b0635837fz35 {yyyy}
বা {y} 2, 4 বা 1 সংখ্যার বেশি বছর।
-GenericMaskCodes2={cccc} n অক্ষরে ক্লায়েন্ট কোড
{cccc000}b09a4b739f7>ক্লায়েন্ট কোড অন n অক্ষরের পরে গ্রাহককে উৎসর্গ করা একটি কাউন্টার রয়েছে। গ্রাহকের জন্য নিবেদিত এই কাউন্টারটি গ্লোবাল কাউন্টারের মতো একই সময়ে পুনরায় সেট করা হয়েছে।
b06a5f451419e800 n অক্ষরে তৃতীয় পক্ষের প্রকারের কোড (মেনু হোম - সেটআপ - অভিধান - তৃতীয় পক্ষের প্রকারগুলি দেখুন)। আপনি এই ট্যাগ যোগ করলে, কাউন্টারটি প্রতিটি ধরণের তৃতীয় পক্ষের জন্য আলাদা হবে৷
+GenericMaskCodes2={cccc} the client code on n characters
{cccc000} the client code on n characters is followed by a counter dedicated to the customer. This counter dedicated to customer is reset at same time as the global counter.
{tttt} The code of third party type on n characters (see menu Home - Setup - Dictionary - Types of third parties). If you add this tag, the counter will be different for each type of third party.
GenericMaskCodes3=মাস্কের অন্য সব অক্ষর অক্ষত থাকবে।
স্পেস অনুমোদিত নয়।
GenericMaskCodes3EAN=মুখোশের অন্যান্য সমস্ত অক্ষর অক্ষত থাকবে (ইএএন 13 এ 13তম অবস্থানে * বা? ছাড়া)।
স্পেস অনুমোদিত নয়।
span>EAN13-এ, 13তম অবস্থানে শেষ } এর পরে শেষ অক্ষরটি * বা? . এটি গণনা করা কী দ্বারা প্রতিস্থাপিত হবে৷
GenericMaskCodes4a=তৃতীয় পক্ষের TheCompany-এর 99তম %s উদাহরণ, তারিখ 2023-01-31:
GenericMaskCodes4b=2023-01-31 তারিখে তৈরি তৃতীয় পক্ষের উদাহরণ:
> GenericMaskCodes4c=2023-01-31 তারিখে তৈরি পণ্যের উদাহরণ:
-GenericMaskCodes5=ABC{yy}{mm}-{000000} দেবে b0aee8336580 span>ABC2301-000099

b0aee8365837fz0{0@span>0+1 }-ZZZ/{dd}/XXX
দেবে 0199-ZZZ/31/XXX
IN{yy}{mm}-{0000}-{t} দেবে IN2301-0099-A যদি কোম্পানির প্রকার হয় 'A_RI' টাইপের কোড সহ 'দায়িত্বশীল ইনস্ক্রিপ্টো' +GenericMaskCodes5=ABC{yy}{mm}-{000000} will give ABC2301-000099
{0000+100@1}-ZZZ/{dd}/XXX will give 0199-ZZZ/31/XXX
IN{yy}{mm}-{0000}-{t} will give IN2301-0099-A if the type of company is 'Responsable Inscripto' with code for type that is 'A_RI' GenericNumRefModelDesc=একটি সংজ্ঞায়িত মাস্ক অনুযায়ী একটি কাস্টমাইজযোগ্য সংখ্যা প্রদান করে। -ServerAvailableOnIPOrPort=সার্ভার ঠিকানা %s পোর্টে উপলব্ধ 'notranslate'>
%s -ServerNotAvailableOnIPOrPort=পোর্ট %s ঠিকানায় সার্ভার উপলব্ধ নয় ='notranslate'>%s +ServerAvailableOnIPOrPort=Server is available at address %s on port %s +ServerNotAvailableOnIPOrPort=Server is not available at address %s on port %s DoTestServerAvailability=সার্ভার সংযোগ পরীক্ষা করুন DoTestSend=পরীক্ষা পাঠানো DoTestSendHTML=এইচটিএমএল পাঠানোর পরীক্ষা করুন @@ -390,9 +390,9 @@ LanguageFilesCachedIntoShmopSharedMemory=ফাইল .lang শেয়ার LanguageFile=ভাষা ফাইল ExamplesWithCurrentSetup=বর্তমান কনফিগারেশন সহ উদাহরণ ListOfDirectories=OpenDocument টেমপ্লেট ডিরেক্টরির তালিকা -ListOfDirectoriesForModelGenODT=OpenDocument ফরম্যাট সহ টেমপ্লেট ফাইল ধারণকারী ডিরেক্টরিগুলির তালিকা৷

এখানে ডিরেক্টরিগুলির সম্পূর্ণ পথ রাখুন৷
eah ডিরেক্টরির মধ্যে একটি ক্যারেজ রিটার্ন যোগ করুন।
GED মডিউলের একটি ডিরেক্টরি যোগ করতে, এখানে যোগ করুন b0aee8365837fz0 >DOL_DATA_ROOT/ecm/yourdirectoryname।
b0342fccfda19bzless0>এ পরিচালক .odt অথবা .ods দিয়ে শেষ করতে হবে ='notranslate'>। +ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.

Put here full path of directories.
Add a carriage return between eah directory.
To add a directory of the GED module, add here DOL_DATA_ROOT/ecm/yourdirectoryname.

Files in those directories must end with .odt or .ods. NumberOfModelFilesFound=এই ডিরেক্টরিগুলিতে পাওয়া ODT/ODS টেমপ্লেট ফাইলের সংখ্যা -ExampleOfDirectoriesForModelGen=সিনট্যাক্সের উদাহরণ:
c:\\myapp\\mydocumentdir\\mysubdir
/home/myapp/mydocumentdir/mysubdir 'notranslate'>
DOL_DATA_ROOT/ecm/ecmdir +ExampleOfDirectoriesForModelGen=Examples of syntax:
c:\\myapp\\mydocumentdir\\mysubdir
/home/myapp/mydocumentdir/mysubdir
DOL_DATA_ROOT/ecm/ecmdir FollowingSubstitutionKeysCanBeUsed=
আপনার odt নথি টেমপ্লেটগুলি কীভাবে তৈরি করবেন তা জানতে, সেগুলিকে সেই ডিরেক্টরিগুলিতে সংরক্ষণ করার আগে, উইকি ডকুমেন্টেশন পড়ুন: FullListOnOnlineDocumentation=https://wiki.dolibarr.org/index.php/Create_an_ODT_document_template FirstnameNamePosition=নাম/শেষনামের অবস্থান @@ -461,17 +461,17 @@ ComputedFormulaDesc=ডায়নামিক কম্পিউটেড ম Computedpersistent=কম্পিউটেড ফিল্ড স্টোর করুন ComputedpersistentDesc=গণনা করা অতিরিক্ত ক্ষেত্রগুলি ডাটাবেসে সংরক্ষণ করা হবে, তবে, এই ক্ষেত্রের অবজেক্টটি পরিবর্তিত হলেই মানটি পুনরায় গণনা করা হবে। যদি গণনা করা ক্ষেত্রটি অন্যান্য অবজেক্ট বা গ্লোবাল ডেটার উপর নির্ভর করে তবে এই মানটি ভুল হতে পারে!! ExtrafieldParamHelpPassword=এই ক্ষেত্রটি ফাঁকা রাখার অর্থ হল এই মানটি এনক্রিপশন ছাড়াই সংরক্ষণ করা হবে (ক্ষেত্রটি স্ক্রিনে তারা দিয়ে লুকানো আছে)।

এন্টার করুন একটি বিপরীত এনক্রিপশন অ্যালগরিদমের সাথে মান এনকোড করতে মান 'ডলক্রিপ্ট'। পরিষ্কার ডেটা এখনও জানা এবং সম্পাদনা করা যেতে পারে তবে ডেটাবেসে এনক্রিপ্ট করা হয়৷

'অটো' (বা 'md5' লিখুন, 'sha256', 'password_hash', ...) ডিফল্ট পাসওয়ার্ড এনক্রিপশন অ্যালগরিদম ব্যবহার করতে (বা md5, sha256, password_hash...) ডাটাবেসে নন-রিভার্সিবল হ্যাশড পাসওয়ার্ড সংরক্ষণ করতে (মূল মান পুনরুদ্ধারের কোনো উপায় নেই) -ExtrafieldParamHelpselect=মানগুলির তালিকা অবশ্যই ফর্ম্যাট কী, মান (যেখানে কী '0' হতে পারে না)

সহ লাইন হতে হবে :
1,value1
2,value2
code3,value span class='notranslate'>
...

অন্যের উপর নির্ভর করে তালিকা পেতে পরিপূরক বৈশিষ্ট্য তালিকা:
1,value1|options_parent_list_codeb0ae634>b0ae634 parent_key
2,value2|options_parent_list_codeb0ae64758>

অন্য তালিকার উপর নির্ভর করে তালিকা পেতে:
1, value1|parent_list_code:parent_keyb0342fccfda19bzval, class='notranslate'>parent_list_code:parent_key -ExtrafieldParamHelpcheckbox=মানগুলির তালিকা অবশ্যই ফর্ম্যাট কী, মান সহ লাইন হতে হবে (যেখানে কী '0' হতে পারে না)

উদাহরণস্বরূপ :
1,value1
2,value2
3,value span class='notranslate'>
... -ExtrafieldParamHelpradio=মানগুলির তালিকা অবশ্যই ফর্ম্যাট কী, মান (যেখানে কী '0' হতে পারে না)

সহ লাইন হতে হবে :
1,value1
2,value2
3,value span class='notranslate'>
... -ExtrafieldParamHelpsellist=মানের তালিকাটি একটি টেবিল থেকে আসে
সিনট্যাক্স: table_name:label_field:id_field::filtersql
উদাহরণ: c_tep ::filtersql

- id_field অগত্যা একটি প্রাথমিক int কী
- ফিল্টারএসকিউএল একটি এসকিউএল শর্ত। শুধুমাত্র সক্রিয় মান প্রদর্শন করার জন্য এটি একটি সাধারণ পরীক্ষা (যেমন সক্রিয়=1) হতে পারে
আপনি ফিল্টারে $ID$ ব্যবহার করতে পারেন যা বর্তমান বস্তুর বর্তমান আইডি
ফিল্টারে একটি SELECT ব্যবহার করতে ইনজেকশন-বিরোধী সুরক্ষা বাইপাস করতে $SEL$ কীওয়ার্ডটি ব্যবহার করুন।
যদি আপনি অতিরিক্ত ফিল্ডে ফিল্টার করতে চান সিনট্যাক্স extra.fieldcode=... ব্যবহার করুন (যেখানে ফিল্ড কোড হল এক্সট্রাফিল্ডের কোড)

অন্য একটি পরিপূরক বৈশিষ্ট্যের তালিকার উপর নির্ভর করে তালিকা:
c_typent:libelle:id:options_parent_list_translate'notranslate' |parent_column:filter

অন্য তালিকার উপর নির্ভর করে তালিকা পাওয়ার জন্য:
c_typent:libelle:id:parent_list_codeb0ae64758bac33parent_col: -ExtrafieldParamHelpchkbxlst=মানের তালিকাটি একটি টেবিল থেকে আসে
সিনট্যাক্স: table_name:label_field:id_field::filtersql
উদাহরণ: c_tep ::filtersql

শুধুমাত্র সক্রিয় মান প্রদর্শনের জন্য ফিল্টার একটি সাধারণ পরীক্ষা (যেমন সক্রিয়=1) হতে পারে
আপনি ফিল্টার জাদুকরীতে $ID$ ব্যবহার করতে পারেন এটি বর্তমান বস্তুর বর্তমান আইডি
ফিল্টারে একটি নির্বাচন করতে $SEL$ ব্যবহার করুন span class='notranslate'>
যদি আপনি এক্সট্রাফিল্ডে ফিল্টার করতে চান তাহলে সিনট্যাক্স ব্যবহার করুন extra.fieldcode=... (যেখানে ফিল্ড কোড হল এক্সট্রাফিল্ডের কোড)
>
অন্য একটি পরিপূরক বৈশিষ্ট্যের তালিকার উপর নির্ভর করে তালিকা পেতে:
c_typent:libelle:id:options_parent_list_code|parent_column:filter b0342fccfda19bzc0b0342fccfda19bzc0b024fda19bz অন্য তালিকার উপর নির্ভর করে তালিকা পেতে:
c_typent:libelle:id:parent_list_code|parent_column:filter +ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key +ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... +ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... +ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filtersql
Example: c_typent:libelle:id::filtersql

- id_field is necessarily a primary int key
- filtersql is a SQL condition. It can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter which is the current id of current object
To use a SELECT into the filter use the keyword $SEL$ to bypass anti-injection protection.
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter +ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filtersql
Example: c_typent:libelle:id::filtersql

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=পরামিতি হতে হবে ObjectName:Classpath
সিনট্যাক্স: ObjectName:Classpath ExtrafieldParamHelpSeparator=একটি সাধারণ বিভাজকের জন্য খালি রাখুন
কোলাপসিং সেপারেটরের জন্য এটি 1 এ সেট করুন (নতুন সেশনের জন্য ডিফল্টরূপে খোলা, তারপর প্রতিটি ব্যবহারকারীর সেশনের জন্য স্থিতি রাখা হয়)
কোলাপসিং সেপারেটরের জন্য এটিকে 2 এ সেট করুন (নতুন সেশনের জন্য ডিফল্টরূপে ভেঙে পড়ে, তারপর প্রতিটি ব্যবহারকারীর সেশনের আগে স্থিতি রাখা হয়) LibraryToBuildPDF=পিডিএফ তৈরির জন্য ব্যবহৃত লাইব্রেরি LocalTaxDesc=কিছু দেশ প্রতিটি চালান লাইনে দুই বা তিনটি কর প্রয়োগ করতে পারে। যদি এটি হয়, দ্বিতীয় এবং তৃতীয় করের ধরন এবং তার হার নির্বাচন করুন। সম্ভাব্য প্রকারগুলি হল:
1: ভ্যাট ছাড়া পণ্য এবং পরিষেবার উপর স্থানীয় কর প্রযোজ্য (ট্যাক্স ছাড়াই পরিমাণের উপর স্থানীয় ট্যাক্স গণনা করা হয়)
2: ভ্যাট সহ পণ্য এবং পরিষেবাগুলিতে স্থানীয় কর প্রযোজ্য (স্থানীয় ট্যাক্স পরিমাণ + মূল ট্যাক্সের উপর গণনা করা হয়)
3: ভ্যাট ছাড়া পণ্যের উপর স্থানীয় কর প্রযোজ্য (স্থানীয় ট্যাক্স ব্যতীত পরিমাণের উপর গণনা করা হয় ট্যাক্স)
4: ভ্যাট সহ পণ্যের উপর স্থানীয় কর প্রযোজ্য (স্থানীয় ট্যাক্স পরিমাণ + প্রধান ভ্যাটের উপর গণনা করা হয়)
5: স্থানীয় ভ্যাট ছাড়া পরিষেবাগুলিতে কর প্রযোজ্য (স্থানীয় ট্যাক্স ট্যাক্স ছাড়া পরিমাণের উপর গণনা করা হয়)
6: ভ্যাট সহ পরিষেবাগুলিতে স্থানীয় কর প্রযোজ্য (স্থানীয় ট্যাক্স পরিমাণ + ট্যাক্সের উপর গণনা করা হয়) SMS=খুদেবার্তা -LinkToTestClickToDial=ব্যবহারকারী %s +LinkToTestClickToDial=Enter a phone number to call to show a link to test the ClickToDial url for user %s RefreshPhoneLink=লিঙ্ক রিফ্রেশ করুন LinkToTest=ব্যবহারকারীর জন্য ক্লিকযোগ্য লিঙ্ক তৈরি করা হয়েছে %s (পরীক্ষা করতে ফোন নম্বরে ক্লিক করুন ) KeepEmptyToUseDefault=ডিফল্ট মান ব্যবহার করতে খালি রাখুন @@ -509,7 +509,7 @@ WarningPHPMailA=- ইমেল পরিষেবা প্রদানকার WarningPHPMailB=- কিছু ইমেল পরিষেবা প্রদানকারী (যেমন ইয়াহু) আপনাকে তাদের নিজস্ব সার্ভারের পরিবর্তে অন্য সার্ভার থেকে একটি ইমেল পাঠাতে দেয় না। আপনার বর্তমান সেটআপ ইমেল পাঠানোর জন্য অ্যাপ্লিকেশনের সার্ভার ব্যবহার করে এবং আপনার ইমেল প্রদানকারীর সার্ভার নয়, তাই কিছু প্রাপক (নিষেধাজ্ঞামূলক DMARC প্রোটোকলের সাথে সামঞ্জস্যপূর্ণ), আপনার ইমেল প্রদানকারীকে জিজ্ঞাসা করবে তারা আপনার ইমেল এবং কিছু ইমেল প্রদানকারী গ্রহণ করতে পারে কিনা (ইয়াহুর মতো) "না" উত্তর দিতে পারে কারণ সার্ভারটি তাদের নয়, তাই আপনার পাঠানো কিছু ইমেল বিতরণের জন্য গৃহীত নাও হতে পারে (আপনার ইমেল প্রদানকারীর পাঠানোর কোটা সম্পর্কেও সতর্ক থাকুন)। WarningPHPMailC=- ইমেল পাঠানোর জন্য আপনার নিজস্ব ইমেল পরিষেবা প্রদানকারীর SMTP সার্ভার ব্যবহার করাও আকর্ষণীয় তাই অ্যাপ্লিকেশন থেকে পাঠানো সমস্ত ইমেলগুলি আপনার মেলবক্সের "প্রেরিত" ডিরেক্টরিতেও সংরক্ষিত হবে৷ WarningPHPMailD=তাই ই-মেইল পাঠানোর পদ্ধতিকে "SMTP" মানতে পরিবর্তন করার পরামর্শ দেওয়া হচ্ছে। -WarningPHPMailDbis=আপনি যদি সত্যিই ইমেল পাঠানোর জন্য ডিফল্ট "PHP" পদ্ধতি রাখতে চান, তাহলে এই সতর্কতা উপেক্ষা করুন, অথবা %sএখানে ক্লিক করে %s< এর মাধ্যমে এটি সরিয়ে দিন /span>। +WarningPHPMailDbis=If you really want to keep the default "PHP" method to send emails, just ignore this warning, or remove it by %sclicking here%s. WarningPHPMail2=যদি আপনার ইমেল SMTP প্রদানকারীর ইমেল ক্লায়েন্টকে কিছু আইপি ঠিকানায় সীমাবদ্ধ করতে হয় (খুব বিরল), এটি আপনার ERP CRM অ্যাপ্লিকেশনের জন্য মেল ব্যবহারকারী এজেন্টের (MUA) IP ঠিকানা: %s। WarningPHPMailSPF=যদি আপনার প্রেরকের ইমেল ঠিকানার ডোমেন নামটি একটি SPF রেকর্ড দ্বারা সুরক্ষিত থাকে (আপনার ডোমেন নাম রেজিস্টারকে জিজ্ঞাসা করুন), আপনাকে অবশ্যই আপনার ডোমেনের DNS-এর SPF রেকর্ডে নিম্নলিখিত IPগুলি যোগ করতে হবে: %s। ActualMailSPFRecordFound=প্রকৃত SPF রেকর্ড পাওয়া গেছে (ইমেলের জন্য %s): %s @@ -518,7 +518,7 @@ DependsOn=এই মডিউলটির মডিউল(গুলি) প্ RequiredBy=এই মডিউলটি মডিউল(গুলি) দ্বারা প্রয়োজনীয় TheKeyIsTheNameOfHtmlField=এটি HTML ক্ষেত্রের নাম। একটি ক্ষেত্রের মূল নাম পেতে HTML পৃষ্ঠার বিষয়বস্তু পড়ার জন্য প্রযুক্তিগত জ্ঞান প্রয়োজন। PageUrlForDefaultValues=আপনাকে অবশ্যই পৃষ্ঠা URL এর আপেক্ষিক পাথ লিখতে হবে। আপনি URL-এ প্যারামিটার অন্তর্ভুক্ত করলে, ব্রাউজ করা URL-এর সমস্ত প্যারামিটারের মান এখানে সংজ্ঞায়িত থাকলে এটি কার্যকর হবে। -PageUrlForDefaultValuesCreate=
উদাহরণ:
একটি নতুন তৃতীয় পক্ষ তৈরি করার ফর্মের জন্য, এটি হল b0e7843947c%s

এ ইনস্টল করা বাহ্যিক মডিউলগুলির URL এর জন্য কাস্টম ডিরেক্টরি, "কাস্টম/" অন্তর্ভুক্ত করবেন না, তাই পথ ব্যবহার করুন যেমন mymodule/mypage.php এবং কাস্টম নয় /mymodule/mypage.php.
যদি আপনি ডিফল্ট মান চান শুধুমাত্র যদি url এর কিছু প্যারামিটার থাকে, আপনি %s +PageUrlForDefaultValuesCreate=
Example:
For the form to create a new third party, it is %s.
For URL of external modules installed into custom directory, do not include the "custom/", so use path like mymodule/mypage.php and not custom/mymodule/mypage.php.
If you want default value only if url has some parameter, you can use %s PageUrlForDefaultValuesList=
উদাহরণ:
যে পৃষ্ঠাটি তৃতীয় পক্ষের তালিকা করে, সেটি হল >%s
কাস্টম ডিরেক্টরিতে ইনস্টল করা বাহ্যিক মডিউলগুলির URL এর জন্য , "কাস্টম/" অন্তর্ভুক্ত করবেন না তাই mymodule/mypagelist.php মত একটি পথ ব্যবহার করুন এবং কাস্টম/mymodule নয় /mypagelist.php.
যদি আপনি ডিফল্ট মান চান শুধুমাত্র যদি url এর কিছু প্যারামিটার থাকে, আপনি %s AlsoDefaultValuesAreEffectiveForActionCreate=এছাড়াও মনে রাখবেন যে ফর্ম তৈরির জন্য ডিফল্ট মানগুলি ওভাররাইট করা শুধুমাত্র সঠিকভাবে ডিজাইন করা পৃষ্ঠাগুলির জন্য কাজ করে (তাই প্যারামিটার অ্যাকশন = তৈরি করুন বা উপস্থাপন করুন...) EnableDefaultValues=ডিফল্ট মানগুলির কাস্টমাইজেশন সক্ষম করুন @@ -1197,6 +1197,7 @@ Skin=ত্বকের থিম DefaultSkin=ডিফল্ট স্কিন থিম MaxSizeList=তালিকার জন্য সর্বোচ্চ দৈর্ঘ্য DefaultMaxSizeList=তালিকার জন্য ডিফল্ট সর্বোচ্চ দৈর্ঘ্য +DisplayGrandTotalInList=Display grand total (for all pages) in lists footer DefaultMaxSizeShortList=ছোট তালিকার জন্য ডিফল্ট সর্বোচ্চ দৈর্ঘ্য (যেমন গ্রাহক কার্ডে) MessageOfDay=দিনের বার্তা MessageLogin=লগইন পৃষ্ঠা বার্তা @@ -1249,7 +1250,7 @@ SetupDescription2=নিম্নলিখিত দুটি বিভাগ SetupDescription3=%s -> %sb0e40dc858

আপনার অ্যাপ্লিকেশনের ডিফল্ট আচরণ কাস্টমাইজ করার জন্য ব্যবহৃত মৌলিক প্যারামিটারগুলি (যেমন দেশ-সম্পর্কিত বৈশিষ্ট্যগুলির জন্য)। SetupDescription4=
%s -> %sb0e40dc858

এই সফ্টওয়্যারটি অনেক মডিউল/অ্যাপ্লিকেশনের একটি স্যুট। আপনার প্রয়োজনের সাথে সম্পর্কিত মডিউলগুলি অবশ্যই সক্ষম এবং কনফিগার করা উচিত। এই মডিউলগুলি সক্রিয় করার সাথে মেনু এন্ট্রি প্রদর্শিত হবে। SetupDescription5=অন্যান্য সেটআপ মেনু এন্ট্রি ঐচ্ছিক পরামিতি পরিচালনা করে। -SetupDescriptionLink=
%s - %sb0e40dc +SetupDescriptionLink=%s - %s SetupDescription3b=আপনার অ্যাপ্লিকেশনের ডিফল্ট আচরণ কাস্টমাইজ করতে ব্যবহৃত মৌলিক পরামিতিগুলি (যেমন দেশ-সম্পর্কিত বৈশিষ্ট্যগুলির জন্য)। SetupDescription4b=এই সফ্টওয়্যারটি অনেক মডিউল/অ্যাপ্লিকেশনের একটি স্যুট। আপনার প্রয়োজনের সাথে সম্পর্কিত মডিউলগুলি সক্রিয় করতে হবে। এই মডিউলগুলি সক্রিয় করার সাথে মেনু এন্ট্রি প্রদর্শিত হবে। AuditedSecurityEvents=নিরাপত্তা ঘটনা যা নিরীক্ষিত হয় @@ -1281,7 +1282,7 @@ AvailableModules=উপলব্ধ অ্যাপ/মডিউল ToActivateModule=মডিউল সক্রিয় করতে, সেটআপ এরিয়াতে যান (হোম->সেটআপ->মডিউল)। SessionTimeOut=অধিবেশনের জন্য সময় শেষ SessionExplanation=এই সংখ্যাটি গ্যারান্টি দেয় যে সেশনটি এই বিলম্বের আগে কখনই শেষ হবে না, যদি সেশন ক্লিনারটি অভ্যন্তরীণ PHP সেশন ক্লিনার দ্বারা করা হয় (এবং অন্য কিছু নয়)। অভ্যন্তরীণ PHP সেশন ক্লিনার গ্যারান্টি দেয় না যে এই বিলম্বের পরে সেশনের মেয়াদ শেষ হবে। এই বিলম্বের পরে এবং যখন সেশন ক্লিনার চালানো হবে তখন এটির মেয়াদ শেষ হয়ে যাবে, তাই প্রতিটি %s/%s অ্যাক্সেস, কিন্তু শুধুমাত্র অন্যান্য সেশন দ্বারা করা অ্যাক্সেসের সময় (যদি মান 0 হয়, এর অর্থ হল সেশনটি ক্লিয়ার করা শুধুমাত্র একটি বাহ্যিক প্রক্রিয়া দ্বারা সম্পন্ন হয়) .
দ্রষ্টব্য: একটি বাহ্যিক সেশন ক্লিনিং মেকানিজম সহ কিছু সার্ভারে (ডেবিয়ানের অধীনে ক্রন, উবুন্টু ...), সেশনগুলি একটি বাহ্যিক সেটআপ দ্বারা সংজ্ঞায়িত সময়ের পরে ধ্বংস করা যেতে পারে, এখানে প্রবেশ করা মান কোন ব্যাপার না. -SessionsPurgedByExternalSystem=এই সার্ভারের সেশনগুলি একটি বাহ্যিক প্রক্রিয়া (ডেবিয়ান, উবুন্টুর অধীনে ক্রন ...) দ্বারা পরিষ্কার করা হয়েছে বলে মনে হচ্ছে, সম্ভবত প্রতিটি %s সেকেন্ড (= প্যারামিটারের মান session.gc_maxlifetimeb09a4b739fz8 , তাই এখানে মান পরিবর্তনের কোন প্রভাব নেই। আপনাকে অবশ্যই সার্ভার অ্যাডমিনিস্ট্রেটরকে সেশন বিলম্ব পরিবর্তন করতে বলতে হবে। +SessionsPurgedByExternalSystem=Sessions on this server seems to be cleaned by an external mechanism (cron under debian, ubuntu ...), probably every %s seconds (= value of parameter session.gc_maxlifetime), so changing the value here has no effect. You must ask the server administrator to change session delay. TriggersAvailable=উপলব্ধ ট্রিগার TriggersDesc=ট্রিগার হল এমন ফাইল যা htdocs/core/triggers-এ কপি করা হলে Dolibarr ওয়ার্কফ্লো-এর আচরণ পরিবর্তন করবে। তারা নতুন কর্ম উপলব্ধি করে, ডলিবার ইভেন্টগুলিতে সক্রিয় (নতুন কোম্পানি তৈরি, চালান বৈধতা, ...)। TriggerDisabledByName=এই ফাইলের ট্রিগারগুলি তাদের নামের -NORUN প্রত্যয় দ্বারা অক্ষম করা হয়েছে৷ @@ -1321,7 +1322,7 @@ PreviousDumpFiles=বিদ্যমান ব্যাকআপ ফাইল PreviousArchiveFiles=বিদ্যমান সংরক্ষণাগার ফাইল WeekStartOnDay=সপ্তাহের প্রথম দিন RunningUpdateProcessMayBeRequired=আপগ্রেড প্রক্রিয়া চালানো প্রয়োজন বলে মনে হচ্ছে (প্রোগ্রাম সংস্করণ %s ডেটাবেস সংস্করণ %s থেকে আলাদা) -YouMustRunCommandFromCommandLineAfterLoginToUser=ব্যবহারকারী %s এর সাথে একটি শেলে লগইন করার পরে আপনাকে কমান্ড লাইন থেকে এই কমান্ডটি চালাতে হবে অথবা আপনাকে %s পাসওয়ার্ড। +YouMustRunCommandFromCommandLineAfterLoginToUser=You must run this command from command line after login to a shell with user %s or you must add -W option at end of command line to provide %s password. YourPHPDoesNotHaveSSLSupport=আপনার পিএইচপি-তে SSL ফাংশন উপলব্ধ নয় DownloadMoreSkins=আরো স্কিন ডাউনলোড করতে SimpleNumRefModelDesc=%s yymm-nnnn ফর্ম্যাটে রেফারেন্স নম্বর ফেরত দেয় যেখানে yy হল বছর, mm হল মাস এবং nnnn হল একটি ক্রমিক স্বয়ংক্রিয়-বৃদ্ধি সংখ্যা রিসেট ছাড়াই @@ -1372,7 +1373,7 @@ TranslationSetup=অনুবাদের সেটআপ TranslationKeySearch=একটি অনুবাদ কী বা স্ট্রিং অনুসন্ধান করুন TranslationOverwriteKey=একটি অনুবাদ স্ট্রিং ওভাররাইট করুন TranslationDesc=ডিসপ্লে ভাষা কিভাবে সেট করবেন:
* ডিফল্ট/সিস্টেমওয়াইড: মেনু হোম -> সেটআপ -> ডিসপ্লে
* প্রতি ব্যবহারকারী: স্ক্রিনের শীর্ষে থাকা ব্যবহারকারীর নামটিতে ক্লিক করুন এবং span>ইউজার কার্ডে ইউজার ডিসপ্লে সেটআপ ট্যাব। -TranslationOverwriteDesc=আপনি নিম্নলিখিত সারণী পূরণ করে স্ট্রিং ওভাররাইড করতে পারেন। "%s" ড্রপডাউন থেকে আপনার ভাষা চয়ন করুন, "%s" এ অনুবাদ কী স্ট্রিং ঢোকান এবং "%s" +TranslationOverwriteDesc=You can also override strings filling the following table. Choose your language from "%s" dropdown, insert the translation key string into "%s" and your new translation into "%s" TranslationOverwriteDesc2=কোন অনুবাদ কী ব্যবহার করতে হবে তা জানার জন্য আপনি অন্য ট্যাবটি ব্যবহার করতে পারেন TranslationString=অনুবাদ স্ট্রিং CurrentTranslationString=বর্তমান অনুবাদ স্ট্রিং @@ -1663,7 +1664,7 @@ LDAPDescUsers=এই পৃষ্ঠাটি আপনাকে ডলিবা LDAPDescGroups=এই পৃষ্ঠাটি আপনাকে ডলিবার গ্রুপে পাওয়া প্রতিটি ডেটার জন্য LDAP ট্রিতে LDAP বৈশিষ্ট্যের নাম সংজ্ঞায়িত করতে দেয়। LDAPDescMembers=এই পৃষ্ঠাটি আপনাকে ডলিবার সদস্য মডিউলে পাওয়া প্রতিটি ডেটার জন্য LDAP ট্রিতে LDAP বৈশিষ্ট্যের নাম সংজ্ঞায়িত করতে দেয়। LDAPDescMembersTypes=এই পৃষ্ঠাটি আপনাকে LDAP ট্রিতে LDAP অ্যাট্রিবিউটের নাম সংজ্ঞায়িত করতে দেয় যা Dolibarr সদস্যদের প্রকারে পাওয়া প্রতিটি ডেটার জন্য। -LDAPDescValues=উদাহরণ মানগুলি OpenLDAP-এর জন্য নিম্নলিখিত লোড করা স্কিমাগুলির সাথে ডিজাইন করা হয়েছে: b0aee8365>b0aee83365 core.schema, cosine.schema, inetorgperson.schema
)। আপনি যদি সেই মানগুলি এবং OpenLDAP ব্যবহার করেন, আপনার LDAP কনফিগারেশন ফাইলটি পরিবর্তন করুন slapd.conf এই সমস্ত স্কিমা লোড করতে। +LDAPDescValues=Example values are designed for OpenLDAP with following loaded schemas: core.schema, cosine.schema, inetorgperson.schema). If you use thoose values and OpenLDAP, modify your LDAP config file slapd.conf to have all thoose schemas loaded. ForANonAnonymousAccess=একটি প্রমাণীকৃত অ্যাক্সেসের জন্য (উদাহরণস্বরূপ একটি লেখার অ্যাক্সেসের জন্য) PerfDolibarr=কর্মক্ষমতা সেটআপ/অপ্টিমাইজিং রিপোর্ট YouMayFindPerfAdviceHere=এই পৃষ্ঠাটি কর্মক্ষমতা সম্পর্কিত কিছু চেক বা পরামর্শ প্রদান করে। @@ -1860,7 +1861,7 @@ PastDelayVCalExport=এর চেয়ে পুরানো ইভেন্ট SecurityKey = নিরাপত্তা কী ##### ClickToDial ##### ClickToDialSetup=মডিউল সেটআপ ডায়াল করতে ক্লিক করুন -ClickToDialUrlDesc=ফোন পিক্টোতে ক্লিক করলে URL বলা হয়। URL-এ, আপনি ট্যাগগুলি ব্যবহার করতে পারেন
__PHONETO__ হবে কল করার জন্য ব্যক্তির ফোন নম্বর দিয়ে প্রতিস্থাপিত হয়েছে
__PHONEFROM__ কল করা ব্যক্তির (আপনার) ফোন নম্বর দিয়ে প্রতিস্থাপিত হবে
__LOGIN__b09a4b739f17f span> যা ক্লিকটোডিয়াল লগইন দিয়ে প্রতিস্থাপিত হবে (ব্যবহারকারী কার্ডে সংজ্ঞায়িত)
__PASS__ যা ক্লিকটোডিয়াল পাসওয়ার্ড দিয়ে প্রতিস্থাপিত হবে (ব্যবহারকারী কার্ডে সংজ্ঞায়িত)। +ClickToDialUrlDesc=URL called when a click on phone picto is done. In URL, you can use tags
__PHONETO__ that will be replaced with the phone number of person to call
__PHONEFROM__ that will be replaced with phone number of calling person (yours)
__LOGIN__ that will be replaced with clicktodial login (defined on user card)
__PASS__ that will be replaced with clicktodial password (defined on user card). ClickToDialDesc=এই মডিউলটি একটি ডেস্কটপ কম্পিউটার ব্যবহার করার সময় ফোন নম্বরগুলিকে ক্লিকযোগ্য লিঙ্কগুলিতে পরিবর্তন করে। একটি ক্লিক নম্বরে কল করবে। এটি আপনার ডেস্কটপে একটি নরম ফোন ব্যবহার করার সময় বা উদাহরণস্বরূপ SIP প্রোটোকলের উপর ভিত্তি করে একটি CTI সিস্টেম ব্যবহার করার সময় ফোন কল শুরু করতে ব্যবহার করা যেতে পারে। দ্রষ্টব্য: স্মার্টফোন ব্যবহার করার সময়, ফোন নম্বরগুলি সর্বদা ক্লিকযোগ্য। ClickToDialUseTelLink=ফোন নম্বরগুলিতে শুধুমাত্র একটি লিঙ্ক "টেল:" ব্যবহার করুন৷ ClickToDialUseTelLinkDesc=এই পদ্ধতিটি ব্যবহার করুন যদি আপনার ব্যবহারকারীদের একটি সফ্টফোন বা একটি সফ্টওয়্যার ইন্টারফেস থাকে, ব্রাউজার হিসাবে একই কম্পিউটারে ইনস্টল করা হয় এবং আপনি যখন আপনার ব্রাউজারে "tel:" দিয়ে শুরু হওয়া একটি লিঙ্কে ক্লিক করেন তখন কল করা হয়৷ আপনার যদি "sip:" বা একটি সম্পূর্ণ সার্ভার সমাধান (স্থানীয় সফ্টওয়্যার ইনস্টলেশনের প্রয়োজন নেই) দিয়ে শুরু হয় এমন একটি লিঙ্কের প্রয়োজন হলে, আপনাকে অবশ্যই এটি "না" তে সেট করতে হবে এবং পরবর্তী ক্ষেত্রটি পূরণ করতে হবে। @@ -1920,8 +1921,8 @@ IfSetToYesDontForgetPermission=যদি একটি নন-নাল মান GeoIPMaxmindSetup=জিওআইপি ম্যাক্সমাইন্ড মডিউল সেটআপ PathToGeoIPMaxmindCountryDataFile=ম্যাক্সমাইন্ড আইপি থেকে দেশের অনুবাদ ধারণকারী ফাইলের পথ NoteOnPathLocation=মনে রাখবেন যে আপনার আইপি টু কান্ট্রি ডেটা ফাইলটি আপনার PHP পড়তে পারে এমন একটি ডিরেক্টরির মধ্যে থাকা আবশ্যক (আপনার PHP open_basedir সেটআপ এবং ফাইল সিস্টেমের অনুমতি পরীক্ষা করুন)। -YouCanDownloadFreeDatFileTo=আপনি ম্যাক্সমাইন্ড জিওআইপি কান্ট্রি ফাইলের একটি ফ্রি ডেমো সংস্করণ ডাউনলোড করতে পারেন b0ecb2ecz87f4 /span>। -YouCanDownloadAdvancedDatFileTo=এছাড়াও আপনি আরও সম্পূর্ণ সংস্করণ ডাউনলোড করতে পারেন, আপডেট সহ, %s. +YouCanDownloadFreeDatFileTo=You can download a free demo version of the Maxmind GeoIP country file at %s. +YouCanDownloadAdvancedDatFileTo=You can also download a more complete version, with updates, of the Maxmind GeoIP country file at %s. TestGeoIPResult=একটি রূপান্তর আইপি পরীক্ষা -> দেশ ##### Projects ##### ProjectsNumberingModules=প্রজেক্ট নম্বরিং মডিউল @@ -1971,7 +1972,7 @@ SomethingMakeInstallFromWebNotPossible=নিম্নলিখিত কার SomethingMakeInstallFromWebNotPossible2=এই কারণে, এখানে বর্ণিত আপগ্রেড করার প্রক্রিয়াটি একটি ম্যানুয়াল প্রক্রিয়া শুধুমাত্র একজন বিশেষ সুবিধাপ্রাপ্ত ব্যবহারকারী সম্পাদন করতে পারেন। InstallModuleFromWebHasBeenDisabledContactUs=অ্যাপ্লিকেশন থেকে বাহ্যিক মডিউল বা গতিশীল ওয়েবসাইটগুলির ইনস্টল বা বিকাশ বর্তমানে নিরাপত্তার উদ্দেশ্যে লক করা আছে। আপনি যদি এই বৈশিষ্ট্যটি সক্ষম করতে চান তাহলে অনুগ্রহ করে আমাদের সাথে যোগাযোগ করুন৷ InstallModuleFromWebHasBeenDisabledByFile=অ্যাপ্লিকেশন থেকে বহিরাগত মডিউল ইনস্টল আপনার প্রশাসক দ্বারা নিষ্ক্রিয় করা হয়েছে. এটির অনুমতি দেওয়ার জন্য আপনাকে অবশ্যই তাকে %s ফাইলটি সরাতে বলতে হবে বৈশিষ্ট্য -ConfFileMustContainCustom=অ্যাপ্লিকেশন থেকে একটি বাহ্যিক মডিউল ইনস্টল বা নির্মাণ করার জন্য মডিউল ফাইলগুলিকে %s ডিরেক্টরিতে সংরক্ষণ করতে হবে . Dolibarr দ্বারা এই ডিরেক্টরিটি প্রক্রিয়া করার জন্য, আপনাকে অবশ্যই আপনার conf/conf.php সেটআপ করতে হবে 2টি নির্দেশিক লাইন যোগ করতে:
$dolibarr_main_url_root_alt='/custom';b0a65dc>b0a65d0 ='notranslate'>
$dolibarr_main_document_root_alt='b0ecb2ec87f49fzmto '>
+ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory %s. To have this directory processed by Dolibarr, you must setup your conf/conf.php to add the 2 directive lines:
$dolibarr_main_url_root_alt='/custom';
$dolibarr_main_document_root_alt='%s/custom'; HighlightLinesOnMouseHover=মাউস সরে গেলে টেবিল লাইন হাইলাইট করুন HighlightLinesColor=মাউস অতিক্রম করার সময় লাইনের রঙ হাইলাইট করুন (হাইলাইট না করার জন্য 'ffffff' ব্যবহার করুন) HighlightLinesChecked=যখন এটি চেক করা হয় তখন লাইনের রঙ হাইলাইট করুন (কোন হাইলাইট না করার জন্য 'ffffff' ব্যবহার করুন) @@ -2065,7 +2066,7 @@ DetectionNotPossible=সনাক্তকরণ সম্ভব নয় UrlToGetKeyToUseAPIs=API ব্যবহার করার জন্য টোকেন পেতে Url (একবার টোকেন প্রাপ্ত হলে তা ডাটাবেস ব্যবহারকারী টেবিলে সংরক্ষিত হয় এবং প্রতিটি API কলে অবশ্যই প্রদান করতে হবে) ListOfAvailableAPIs=উপলব্ধ API-এর তালিকা activateModuleDependNotSatisfied=মডিউল "%s" মডিউল "%s" এর উপর নির্ভর করে, এটি অনুপস্থিত, তাই মডিউল " %1$s" সঠিকভাবে কাজ নাও করতে পারে। আপনি যদি কোনো বিস্ময় থেকে নিরাপদ থাকতে চান তাহলে অনুগ্রহ করে "%2$s" মডিউল ইনস্টল করুন বা "%1$s" মডিউলটি নিষ্ক্রিয় করুন -CommandIsNotInsideAllowedCommands=আপনি যে কমান্ডটি চালানোর চেষ্টা করছেন সেটি প্যারামিটারে সংজ্ঞায়িত অনুমোদিত কমান্ডের তালিকায় নেই $dolibarr_main_restrict_os_commands class='notranslate'>
conf.php ফাইল। +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter $dolibarr_main_restrict_os_commands in the conf.php file. LandingPage=অবতরণ পাতা SamePriceAlsoForSharedCompanies=আপনি যদি একটি মাল্টিকোম্পানি মডিউল ব্যবহার করেন, "একক মূল্য" পছন্দের সাথে, পণ্যগুলি পরিবেশের মধ্যে ভাগ করা হলে মূল্যও সমস্ত কোম্পানির জন্য একই হবে ModuleEnabledAdminMustCheckRights=মডিউল সক্রিয় করা হয়েছে. সক্রিয় মডিউল (গুলি) জন্য অনুমতি শুধুমাত্র প্রশাসক ব্যবহারকারীদের দেওয়া হয়েছে. প্রয়োজনে আপনাকে অন্য ব্যবহারকারী বা গোষ্ঠীকে ম্যানুয়ালি অনুমতি দিতে হতে পারে। @@ -2291,7 +2292,7 @@ APIsAreNotEnabled=APIs মডিউল সক্রিয় করা নেই YouShouldSetThisToOff=আপনার এটি 0 বা বন্ধ করা উচিত InstallAndUpgradeLockedBy=%s ফাইল দ্বারা ইনস্টল এবং আপগ্রেডগুলি লক করা আছে InstallLockedBy=%s ফাইল দ্বারা ইনস্টল/পুনঃইনস্টল লক করা আছে -InstallOfAddonIsNotBlocked=অ্যাডঅনগুলির ইনস্টলেশন লক করা হয় না। একটি ফাইল তৈরি করুন installmodules.lock ডিরেক্টরিতে b0aee8365837>%s
বহিরাগত অ্যাডঅন/মডিউলগুলির ইনস্টলেশন ব্লক করতে। +InstallOfAddonIsNotBlocked=Installations of addons are not locked. Create a file installmodules.lock into directory %s to block installations of external addons/modules. OldImplementation=পুরানো বাস্তবায়ন PDF_SHOW_LINK_TO_ONLINE_PAYMENT=যদি কিছু অনলাইন পেমেন্ট মডিউল সক্ষম করা থাকে (পেপাল, স্ট্রাইপ, ...), অনলাইন পেমেন্ট করতে PDF এ একটি লিঙ্ক যোগ করুন DashboardDisableGlobal=বিশ্বব্যাপী খোলা বস্তুর সমস্ত থাম্ব অক্ষম করুন @@ -2405,8 +2406,8 @@ NotAvailableByDefaultEnabledOnModuleActivation=ডিফল্টরূপে CSSPage=CSS শৈলী Defaultfortype=ডিফল্ট DefaultForTypeDesc=টেমপ্লেট প্রকারের জন্য একটি নতুন ইমেল তৈরি করার সময় ডিফল্টরূপে ব্যবহৃত টেমপ্লেট -OptionXShouldBeEnabledInModuleY=বিকল্প "%s" মডিউল %s -OptionXIsCorrectlyEnabledInModuleY=বিকল্প "%s" মডিউল
%s +OptionXShouldBeEnabledInModuleY=Option "%s" should be enabled into module %s +OptionXIsCorrectlyEnabledInModuleY=Option "%s" is enabled into module %s AllowOnLineSign=অন লাইন স্বাক্ষরের অনুমতি দিন AtBottomOfPage=পৃষ্ঠার নীচে FailedAuth=ব্যর্থ প্রমাণীকরণ @@ -2433,3 +2434,12 @@ UrlPublicInterfaceHelpAdmin=It is possible to define an alias to the web server ExportUseForce=Use the parameter -f ExportUseForceHelp=Force to continue the export even when an error is found (Backup may not be reliable) CustomPrompt=Custom prompts +AiDescription=AI (Artificial Intelligence) features +AiDescriptionLong=Provides AI (Artificial Intelligence) features in different part of the application. Need external AI API. +AI_KEY_API_CHATGPT= Key for ChatGPT IA api +AiSetup=AI module setup +AiCustomPrompt=AI customs prompt +AI_CONFIGURATIONS_PROMPT=Custom prompt +ImageGeneration=Image generation +AIPromptForFeatures=AI custom prompts for features +EnterAnIP=Enter an IP address diff --git a/htdocs/langs/bn_BD/agenda.lang b/htdocs/langs/bn_BD/agenda.lang index 5a9cdfe93d2..f4ad6730b96 100644 --- a/htdocs/langs/bn_BD/agenda.lang +++ b/htdocs/langs/bn_BD/agenda.lang @@ -137,8 +137,8 @@ DateActionEnd=শেষ তারিখ AgendaUrlOptions1=আপনি ফিল্টার আউটপুট নিম্নলিখিত পরামিতি যোগ করতে পারেন: AgendaUrlOptions3=logina=%s ব্যবহারকারীর মালিকানাধীন ক্রিয়াকলাপগুলিতে আউটপুট সীমাবদ্ধ করতে %s। AgendaUrlOptionsNotAdmin=logina=!%s আউটপুটকে নিজের নয় এমন ক্রিয়াগুলিতে সীমাবদ্ধ করতে ব্যবহারকারী %s। -AgendaUrlOptions4=logint=%s ব্যবহারকারীকে <অর্পণ করা কর্মগুলিতে আউটপুট সীমাবদ্ধ করতে span class='notranslate'>
%s (মালিক এবং অন্যান্য)। -AgendaUrlOptionsProject=project=__PROJECT_ID__ প্রজেক্টের সাথে লিঙ্ক করা ক্রিয়াকলাপের আউটপুট সীমাবদ্ধ করতে b0aee85>b0aee83333 __PROJECT_ID__
। +AgendaUrlOptions4=logint=%s to restrict output to actions assigned to user %s (owner and others). +AgendaUrlOptionsProject=project=__PROJECT_ID__ to restrict output to actions linked to project __PROJECT_ID__. AgendaUrlOptionsNotAutoEvent=স্বয়ংক্রিয় ইভেন্টগুলি বাদ দিতে notactiontype=systemauto। AgendaUrlOptionsIncludeHolidays=ছুটির ইভেন্টগুলি অন্তর্ভুক্ত করতে includeholidays=1। AgendaShowBirthdayEvents=পরিচিতির জন্মদিন diff --git a/htdocs/langs/bn_BD/bills.lang b/htdocs/langs/bn_BD/bills.lang index 8decc723a30..288561adc9f 100644 --- a/htdocs/langs/bn_BD/bills.lang +++ b/htdocs/langs/bn_BD/bills.lang @@ -188,7 +188,7 @@ SuppliersDraftInvoices=বিক্রেতার খসড়া চালা Unpaid=Unpaid ErrorNoPaymentDefined=ত্রুটি কোন পেমেন্ট সংজ্ঞায়িত করা হয়নি ConfirmDeleteBill=Are you sure you want to delete this invoice? -ConfirmValidateBill=আপনি কি %sরেফারেন্স সহ এই চালানটি যাচাই করতে চান? >? +ConfirmValidateBill=Are you sure you want to validate this invoice with the reference %s? ConfirmUnvalidateBill=Are you sure you want to change invoice %s to draft status? ConfirmClassifyPaidBill=Are you sure you want to change invoice %s to status paid? ConfirmCancelBill=Are you sure you want to cancel invoice %s? @@ -377,7 +377,7 @@ DisabledBecauseReplacedInvoice=Action disabled because invoice has been replaced DescTaxAndDividendsArea=এই এলাকাটি বিশেষ খরচের জন্য করা সমস্ত অর্থপ্রদানের সারাংশ উপস্থাপন করে। শুধুমাত্র নির্দিষ্ট বছরে পেমেন্ট সহ রেকর্ডগুলি এখানে অন্তর্ভুক্ত করা হয়েছে। NbOfPayments=পেমেন্ট সংখ্যা SplitDiscount=Split discount in two -ConfirmSplitDiscount=আপনি কি নিশ্চিত যে আপনি %s এই ছাড়টি ভাগ করতে চান span class='notranslate'>%s দুটি ছোট ডিসকাউন্টে? +ConfirmSplitDiscount=Are you sure you want to split this discount of %s %s into two smaller discounts? TypeAmountOfEachNewDiscount=দুটি অংশের প্রতিটির জন্য ইনপুট পরিমাণ: TotalOfTwoDiscountMustEqualsOriginal=মোট দুটি নতুন ডিসকাউন্ট মূল ছাড়ের পরিমাণের সমান হতে হবে। ConfirmRemoveDiscount=Are you sure you want to remove this discount? @@ -614,7 +614,7 @@ invoiceLineProgressError=Invoice line progress can't be greater than or equal to updatePriceNextInvoiceErrorUpdateline=ত্রুটি: চালান লাইনে মূল্য আপডেট করুন: %s ToCreateARecurringInvoice=To create a recurring invoice for this contract, first create this draft invoice, then convert it into an invoice template and define the frequency for generation of future invoices. ToCreateARecurringInvoiceGene=To generate future invoices regularly and manually, just go on menu %s - %s - %s. -ToCreateARecurringInvoiceGeneAuto=আপনার যদি এই ধরনের চালানগুলি স্বয়ংক্রিয়ভাবে তৈরি করতে হয়, তাহলে আপনার প্রশাসককে %s। নোট করুন যে উভয় পদ্ধতি (ম্যানুয়াল এবং স্বয়ংক্রিয়) একসাথে ব্যবহার করা যেতে পারে নকলের ঝুঁকি ছাড়াই। +ToCreateARecurringInvoiceGeneAuto=If you need to have such invoices generated automatically, ask your administrator to enable and setup module %s. Note that both methods (manual and automatic) can be used together with no risk of duplication. DeleteRepeatableInvoice=Delete template invoice ConfirmDeleteRepeatableInvoice=Are your sure you want to delete the template invoice? CreateOneBillByThird=তৃতীয় পক্ষের প্রতি একটি চালান তৈরি করুন (অন্যথায়, নির্বাচিত বস্তু প্রতি একটি চালান) diff --git a/htdocs/langs/bn_BD/cashdesk.lang b/htdocs/langs/bn_BD/cashdesk.lang index 4e073b36b16..04d4bd64b81 100644 --- a/htdocs/langs/bn_BD/cashdesk.lang +++ b/htdocs/langs/bn_BD/cashdesk.lang @@ -97,7 +97,7 @@ ReceiptPrinterMethodDescription=অনেক পরামিতি সহ শক ByTerminal=টার্মিনাল দ্বারা TakeposNumpadUsePaymentIcon=নমপ্যাডের পেমেন্ট বোতামে টেক্সটের পরিবর্তে আইকন ব্যবহার করুন CashDeskRefNumberingModules=POS বিক্রয়ের জন্য সংখ্যায়ন মডিউল -CashDeskGenericMaskCodes6 =
{TN}b09f870 ট্যাগ ব্যবহার করা হয় +CashDeskGenericMaskCodes6 =
{TN} tag is used to add the terminal number TakeposGroupSameProduct=একই পণ্যের লাইন মার্জ করুন StartAParallelSale=একটি নতুন সমান্তরাল বিক্রয় শুরু করুন SaleStartedAt=%s এ বিক্রি শুরু হয়েছে diff --git a/htdocs/langs/bn_BD/companies.lang b/htdocs/langs/bn_BD/companies.lang index cc96c82e9fb..f332294eab4 100644 --- a/htdocs/langs/bn_BD/companies.lang +++ b/htdocs/langs/bn_BD/companies.lang @@ -335,13 +335,13 @@ CompanyHasRelativeDiscount=এই গ্রাহকের ডিফল্ট CompanyHasNoRelativeDiscount=এই গ্রাহকের ডিফল্টরূপে কোন আপেক্ষিক ডিসকাউন্ট নেই HasRelativeDiscountFromSupplier=আপনার ডিফল্ট ডিসকাউন্ট %s%% এই বিক্রেতার সাথে HasNoRelativeDiscountFromSupplier=এই বিক্রেতার সাথে কোন ডিফল্ট আপেক্ষিক ডিসকাউন্ট -CompanyHasAbsoluteDiscount=এই গ্রাহকের %sb09a4b739f17fz0এর জন্য ডিসকাউন্ট উপলব্ধ (ক্রেডিট নোট বা ডাউন পেমেন্ট) span> %s -CompanyHasDownPaymentOrCommercialDiscount=এই গ্রাহকের %sএর জন্য ডিসকাউন্ট উপলব্ধ (বাণিজ্যিক, ডাউন পেমেন্ট) > %s -CompanyHasCreditNote=এই গ্রাহকের কাছে এখনও %s %s +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for %s %s +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for %s %s +CompanyHasCreditNote=This customer still has credit notes for %s %s HasNoAbsoluteDiscountFromSupplier=এই বিক্রেতা থেকে কোন ডিসকাউন্ট/ক্রেডিট উপলব্ধ -HasAbsoluteDiscountFromSupplier=%sএর জন্য আপনার কাছে ছাড় রয়েছে (ক্রেডিট নোট বা ডাউন পেমেন্ট) > %s এই বিক্রেতার কাছ থেকে -HasDownPaymentOrCommercialDiscountFromSupplier=%sএর জন্য আপনার কাছে ছাড় রয়েছে (বাণিজ্যিক, ডাউন পেমেন্ট) এই বিক্রেতার কাছ থেকে %s -HasCreditNoteFromSupplier=আপনার কাছে %s %s এই বিক্রেতা থেকে +HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for %s %s from this vendor +HasDownPaymentOrCommercialDiscountFromSupplier=You have discounts available (commercial, down payments) for %s %s from this vendor +HasCreditNoteFromSupplier=You have credit notes for %s %s from this vendor CompanyHasNoAbsoluteDiscount=এই গ্রাহকের কোন ডিসকাউন্ট ক্রেডিট উপলব্ধ নেই CustomerAbsoluteDiscountAllUsers=পরম গ্রাহক ডিসকাউন্ট (সমস্ত ব্যবহারকারীদের দ্বারা মঞ্জুর) CustomerAbsoluteDiscountMy=সম্পূর্ণ গ্রাহক ছাড় (নিজের দ্বারা প্রদত্ত) diff --git a/htdocs/langs/bn_BD/compta.lang b/htdocs/langs/bn_BD/compta.lang index 80612e042cc..346be4bd705 100644 --- a/htdocs/langs/bn_BD/compta.lang +++ b/htdocs/langs/bn_BD/compta.lang @@ -158,27 +158,27 @@ ConfirmDeleteVAT=আপনি কি এই ভ্যাট ঘোষণা ম ConfirmDeleteSalary=আপনি কি এই বেতন মুছে ফেলার বিষয়ে নিশ্চিত? ConfirmDeleteVariousPayment=আপনি কি এই বিভিন্ন অর্থপ্রদান মুছে ফেলার বিষয়ে নিশ্চিত? ExportDataset_tax_1=সামাজিক এবং রাজস্ব ট্যাক্স এবং পেমেন্ট -CalcModeVATDebt=মোড %sকমিটমেন্ট অ্যাকাউন্টিং এর উপর ভ্যাট%s। +CalcModeVATDebt=Mode %sVAT on commitment accounting%s. CalcModeVATEngagement=মোড %sআয়-ব্যয়ের উপর ভ্যাট%s. CalcModeDebt=পরিচিত নথিভুক্ত নথি বিশ্লেষণ CalcModeEngagement=পরিচিত নথিভুক্ত পেমেন্ট বিশ্লেষণ CalcModePayment=পরিচিত নথিভুক্ত পেমেন্ট বিশ্লেষণ CalcModeBookkeeping=বুককিপিং লেজার টেবিলে জার্নালাইজ করা ডেটা বিশ্লেষণ। CalcModeNoBookKeeping=এমনকি যদি তারা এখনও লেজারে হিসাব না করে থাকে -CalcModeLT1= মোড %sআরই গ্রাহক চালান - সরবরাহকারীদের চালানb0ecb2ec87f> -CalcModeLT1Debt=মোড %sগ্রাহকের চালানে RE%s -CalcModeLT1Rec= মোড %sসাপ্লায়ার ইনভয়েসে RE%s -CalcModeLT2= মোড %sগ্রাহকের চালানে IRPF - সরবরাহকারীদের চালানb0ecb2ec87f>
-CalcModeLT2Debt=মোড %sগ্রাহকের চালানে IRPF%s +CalcModeLT1= Mode %sRE on customer invoices - suppliers invoices%s +CalcModeLT1Debt=Mode %sRE on customer invoices%s +CalcModeLT1Rec= Mode %sRE on suppliers invoices%s +CalcModeLT2= Mode %sIRPF on customer invoices - suppliers invoices%s +CalcModeLT2Debt=Mode %sIRPF on customer invoices%s CalcModeLT2Rec= মোড %sসাপ্লায়ার ইনভয়েসগুলিতে IRPF%s AnnualSummaryDueDebtMode=আয় এবং ব্যয়ের ভারসাম্য, বার্ষিক সারাংশ AnnualSummaryInputOutputMode=আয় এবং ব্যয়ের ভারসাম্য, বার্ষিক সারাংশ AnnualByCompanies=অ্যাকাউন্টের পূর্বনির্ধারিত গোষ্ঠী দ্বারা আয় এবং ব্যয়ের ভারসাম্য AnnualByCompaniesDueDebtMode=আয় এবং ব্যয়ের ভারসাম্য, পূর্বনির্ধারিত গোষ্ঠীগুলির দ্বারা বিশদ, মোড %sদাবি-ঋণb0ecb2ec880 বলেছে কমিটমেন্ট অ্যাকাউন্টিং। AnnualByCompaniesInputOutputMode=আয় এবং ব্যয়ের ভারসাম্য, পূর্বনির্ধারিত গোষ্ঠী দ্বারা বিশদ, মোড %sআয়-ব্যয়b0ecb2ecz80 বলেছেন নগদ হিসাব। -SeeReportInInputOutputMode=%sপেমেন্টের বিশ্লেষণ দেখুন%sরেকর্ড করা পেমেন্ট এর উপর ভিত্তি করে একটি গণনার জন্য > এমনকি যদি সেগুলি এখনও এল একাউন্টে না থাকে -SeeReportInDueDebtMode=%sলিপিবদ্ধ নথির বিশ্লেষণ দেখুন%s পরিচিত লিপিবদ্ধ নথি একাউন্টে না থাকলেও একটি গণনার জন্য -SeeReportInBookkeepingMode=দেখুন %sখাতা খাতা টেবিলের বিশ্লেষণ%s notranslate'> বুককিপিং লেজার টেবিল ভিত্তিক একটি প্রতিবেদনের জন্য +SeeReportInInputOutputMode=See %sanalysis of payments%s for a calculation based on recorded payments made even if they are not yet accounted in Ledger +SeeReportInDueDebtMode=See %sanalysis of recorded documents%s for a calculation based on known recorded documents even if they are not yet accounted in Ledger +SeeReportInBookkeepingMode=See %sanalysis of bookkeeping ledger table%s for a report based on Bookkeeping Ledger table RulesAmountWithTaxIncluded=- সমস্ত ট্যাক্স সহ দেখানো পরিমাণ RulesAmountWithTaxExcluded=- সমস্ত ট্যাক্স বাদ দিয়ে দেখানো চালানের পরিমাণ RulesResultDue=- এতে সমস্ত ইনভয়েস, খরচ, ভ্যাট, অনুদান, বেতন অন্তর্ভুক্ত থাকে, সেগুলি দেওয়া হোক বা না হোক।
- এটি চালানের বিলিংয়ের তারিখ এবং নির্ধারিত তারিখের উপর ভিত্তি করে খরচ বা ট্যাক্স পেমেন্ট। বেতনের জন্য, মেয়াদ শেষ হওয়ার তারিখ ব্যবহার করা হয়। @@ -213,7 +213,7 @@ LT2ReportByQuarters=হার দ্বারা রিপোর্ট কর 3 LT1ReportByQuartersES=RE হার দ্বারা রিপোর্ট LT2ReportByQuartersES=IRPF হার দ্বারা রিপোর্ট SeeVATReportInInputOutputMode=প্রতিবেদন দেখুন %sভ্যাট সংগ্রহ%s একটি আদর্শ গণনার জন্য -SeeVATReportInDueDebtMode=রিপোর্ট দেখুন %sডেবিটের উপর ভ্যাট%s +SeeVATReportInDueDebtMode=See report %sVAT on debit%s for a calculation with an option on the invoicing RulesVATInServices=- পরিষেবাগুলির জন্য, প্রতিবেদনে অর্থপ্রদানের তারিখের ভিত্তিতে প্রকৃতপক্ষে প্রাপ্ত অর্থপ্রদানের ভ্যাট অন্তর্ভুক্ত থাকে। RulesVATInProducts=- বস্তুগত সম্পদের জন্য, প্রতিবেদনে অর্থপ্রদানের তারিখের ভিত্তিতে ভ্যাট অন্তর্ভুক্ত থাকে। RulesVATDueServices=- পরিষেবার জন্য, প্রতিবেদনে ইনভয়েসের তারিখের উপর ভিত্তি করে বকেয়া ইনভয়েসের ভ্যাট অন্তর্ভুক্ত রয়েছে, পরিশোধ করা হয়েছে বা না করা হয়েছে। diff --git a/htdocs/langs/bn_BD/cron.lang b/htdocs/langs/bn_BD/cron.lang index 447487d2ccb..cb1160976f9 100644 --- a/htdocs/langs/bn_BD/cron.lang +++ b/htdocs/langs/bn_BD/cron.lang @@ -1,6 +1,5 @@ # Dolibarr language file - Source file is en_US - cron -# About page -# Right +# Permissions Permission23101 = নির্ধারিত চাকরি পড়ুন Permission23102 = নির্ধারিত কাজ তৈরি/আপডেট করুন Permission23103 = নির্ধারিত কাজ মুছুন @@ -64,7 +63,7 @@ CronTaskInactive=এই কাজটি অক্ষম (নির্ধার CronId=আইডি CronClassFile=ক্লাস সহ ফাইলের নাম CronModuleHelp=Dolibarr মডিউল ডিরেক্টরির নাম (এছাড়াও বহিরাগত Dolibarr মডিউলের সাথে কাজ করে)।
উদাহরণস্বরূপ ডলিবার প্রোডাক্ট অবজেক্টের আনয়ন পদ্ধতি কল করার জন্য /class/product.class.php, মডিউলের মান হল
পণ্য -CronClassFileHelp=লোড করার জন্য আপেক্ষিক পাথ এবং ফাইলের নাম (পাথটি ওয়েব সার্ভার রুট ডিরেক্টরির সাথে সম্পর্কিত)।
উদাহরণস্বরূপ Dolibarr পণ্য বস্তু htdocs/product/class/product.class.php, ক্লাস ফাইল নামের মান হল
পণ্য/শ্রেণী/পণ্য .class.php +CronClassFileHelp=The relative path and file name to load (path is relative to web server root directory).
For example to call the fetch method of Dolibarr Product object htdocs/product/class/product.class.php, the value for class file name is
product/class/product.class.php CronObjectHelp=লোড করার জন্য বস্তুর নাম।
উদাহরণস্বরূপ ডলিবার প্রোডাক্ট অবজেক্টের আনয়ন পদ্ধতি কল করার জন্য /htdocs/product/class/product.class.php, ক্লাস ফাইল নামের মান হল
পণ্য CronMethodHelp=লঞ্চ করার জন্য অবজেক্ট পদ্ধতি।
উদাহরণস্বরূপ ডলিবার প্রোডাক্ট অবজেক্টের আনয়ন পদ্ধতিকে কল করার জন্য /htdocs/product/class/product.class.php, পদ্ধতির মান হল
আনয়ন CronArgsHelp=পদ্ধতি আর্গুমেন্ট.
উদাহরণস্বরূপ ডলিবার প্রোডাক্ট অবজেক্টের আনয়ন পদ্ধতি কল করার জন্য /htdocs/product/class/product.class.php, প্যারামিটারের মান হতে পারে
0, ProductRef diff --git a/htdocs/langs/bn_BD/errors.lang b/htdocs/langs/bn_BD/errors.lang index 62795943e9e..b033804fb69 100644 --- a/htdocs/langs/bn_BD/errors.lang +++ b/htdocs/langs/bn_BD/errors.lang @@ -81,7 +81,7 @@ ErrorNoValueForRadioType=Please fill value for radio list ErrorBadFormatValueList=The list value cannot have more than one comma: %s, but need at least one: key,value ErrorFieldCanNotContainSpecialCharacters=%s ক্ষেত্রটিতে অবশ্যই বিশেষ অক্ষর থাকবে না। ErrorFieldCanNotContainSpecialNorUpperCharacters=%s বিশেষ অক্ষর থাকা উচিত নয়, বড় হাতের অক্ষরও থাকবে না অক্ষর, এবং একটি বর্ণানুক্রমিক অক্ষর দিয়ে শুরু করতে হবে (a-z) -ErrorFieldMustHaveXChar=%s ক্ষেত্রটিতে কমপক্ষে %s অক্ষর। +ErrorFieldMustHaveXChar=The field %s must have at least %s characters. ErrorNoAccountancyModuleLoaded=No accountancy module activated ErrorExportDuplicateProfil=This profile name already exists for this export set. ErrorLDAPSetupNotComplete=Dolibarr-LDAP matching is not complete. @@ -95,9 +95,9 @@ ErrorModuleRequireJavascript=এই বৈশিষ্ট্যটি কাজ ErrorPasswordsMustMatch=Both typed passwords must match each other ErrorContactEMail=একটি প্রযুক্তিগত ত্রুটি ঘটেছে. অনুগ্রহ করে, নিম্নলিখিত ইমেল %s করার জন্য প্রশাসকের সাথে যোগাযোগ করুন এবং ত্রুটি প্রদান করুন কোড %s আপনার বার্তায়, অথবা এর একটি স্ক্রিন কপি যোগ করুন এই পৃষ্ঠা. ErrorWrongValueForField=ক্ষেত্র %s: ' %s' রেজেক্স নিয়মের সাথে মেলে না %s
-ErrorHtmlInjectionForField=ক্ষেত্র %s: মান '%s' একটি দূষিত ডেটা রয়েছে অনুমোদিত নয় -ErrorFieldValueNotIn=ক্ষেত্র %s: ' %s' b0aee83z5 এর span>%s %s -ErrorFieldRefNotIn=ক্ষেত্র %s: ' %s' একটি b0aee83f>%s বিদ্যমান রেফ +ErrorHtmlInjectionForField=Field %s: The value '%s' contains a malicious data not allowed +ErrorFieldValueNotIn=Field %s: '%s' is not a value found in field %s of %s +ErrorFieldRefNotIn=Field %s: '%s' is not a %s existing ref ErrorMultipleRecordFoundFromRef=রেফ %s থেকে অনুসন্ধান করার সময় বেশ কিছু রেকর্ড পাওয়া গেছে। কোন আইডি ব্যবহার করবেন তা জানার উপায় নেই। ErrorsOnXLines=%s ত্রুটি পাওয়া গেছে ErrorFileIsInfectedWithAVirus=The antivirus program was not able to validate the file (file might be infected by a virus) @@ -219,7 +219,7 @@ ErrorPhpMailDelivery=Check that you don't use a too high number of recipients an ErrorUserNotAssignedToTask=User must be assigned to task to be able to enter time consumed. ErrorTaskAlreadyAssigned=Task already assigned to user ErrorModuleFileSeemsToHaveAWrongFormat=The module package seems to have a wrong format. -ErrorModuleFileSeemsToHaveAWrongFormat2=মডিউলের জিপে অন্তত একটি বাধ্যতামূলক ডিরেক্টরি থাকতে হবে: %sb0a65d071f6fz90 অথবা %s +ErrorModuleFileSeemsToHaveAWrongFormat2=At least one mandatory directory must exists into zip of module: %s or %s ErrorFilenameDosNotMatchDolibarrPackageRules=The name of the module package (%s) does not match expected name syntax: %s ErrorDuplicateTrigger=Error, duplicate trigger name %s. Already loaded from %s. ErrorNoWarehouseDefined=Error, no warehouses defined. @@ -263,9 +263,9 @@ ErrorReplaceStringEmpty=ত্রুটি, প্রতিস্থাপন ErrorProductNeedBatchNumber=ত্রুটি, পণ্য '%s' প্রচুর/ক্রমিক নম্বর প্রয়োজন ErrorProductDoesNotNeedBatchNumber=ত্রুটি, পণ্য '%s' অনেক কিছু গ্রহণ করে না/ ক্রমিক সংখ্যা ErrorFailedToReadObject=ত্রুটি, %s প্রকারের বস্তু পড়তে ব্যর্থ হয়েছে -ErrorParameterMustBeEnabledToAllwoThisFeature=ত্রুটি, প্যারামিটার %s অবশ্যই conf/conf.php<> অভ্যন্তরীণ কাজের সময়সূচী দ্বারা কমান্ড লাইন ইন্টারফেস ব্যবহারের অনুমতি দিতে +ErrorParameterMustBeEnabledToAllwoThisFeature=Error, parameter %s must be enabled into conf/conf.php<> to allow use of Command Line Interface by the internal job scheduler ErrorLoginDateValidity=ত্রুটি, এই লগইনটি বৈধতার তারিখ সীমার বাইরে -ErrorValueLength='%s' ফিল্ডের দৈর্ঘ্য অবশ্যই '< এর থেকে বেশি হতে হবে span class='notranslate'>%s' +ErrorValueLength=Length of field '%s' must be higher than '%s' ErrorReservedKeyword='%s' শব্দটি একটি সংরক্ষিত কীওয়ার্ড ErrorFilenameReserved=ফাইলের নাম %s ব্যবহার করা যাবে না কারণ এটি একটি। সংরক্ষিত এবং সুরক্ষিত কমান্ড। ErrorNotAvailableWithThisDistribution=এই বিতরণের সাথে উপলব্ধ নয় diff --git a/htdocs/langs/bn_BD/eventorganization.lang b/htdocs/langs/bn_BD/eventorganization.lang index ef6bb01e9e1..d288711b697 100644 --- a/htdocs/langs/bn_BD/eventorganization.lang +++ b/htdocs/langs/bn_BD/eventorganization.lang @@ -36,7 +36,7 @@ EventOrganizationSetup=ইভেন্ট অর্গানাইজেশন EventOrganization=ইভেন্ট সংগঠন EventOrganizationSetupPage = ইভেন্ট সংস্থা সেটআপ পৃষ্ঠা EVENTORGANIZATION_TASK_LABEL = প্রোজেক্ট যাচাই করা হলে স্বয়ংক্রিয়ভাবে তৈরি করা কাজের লেবেল -EVENTORGANIZATION_TASK_LABELTooltip = যখন আপনি একটি ইভেন্টকে সংগঠিত করার জন্য যাচাই করেন, তখন কিছু কাজ স্বয়ংক্রিয়ভাবে প্রকল্পে তৈরি হতে পারে

উদাহরণস্বরূপ:
সম্মেলনের জন্য কল পাঠান
বুথের জন্য কল পাঠান
সম্মেলনের প্রস্তাবনা ='notranslate'>
বুথের জন্য আবেদন যাচাই করুন
অতিথিদের জন্য ইভেন্টের সদস্যতা উন্মুক্ত করুন
respandSmin বক্তাদের কাছে ইভেন্টের কথা
বুথ হোস্টার্সকে ইভেন্টের একটি অনুস্মারক পাঠান
অতিথিদের ইভেন্টের একটি অনুস্মারক পাঠান +EVENTORGANIZATION_TASK_LABELTooltip = When you validate an event to organize, some tasks can be automatically created in the project

For example:
Send Call for Conferences
Send Call for Booths
Validate suggestions of Conferences
Validate application for Booths
Open subscriptions to the event for attendees
Send a remind of the event to speakers
Send a remind of the event to Booth hosters
Send a remind of the event to attendees EVENTORGANIZATION_TASK_LABELTooltip2=আপনার যদি স্বয়ংক্রিয়ভাবে কাজ তৈরি করার প্রয়োজন না হয় তবে খালি রাখুন। EVENTORGANIZATION_CATEG_THIRDPARTY_CONF = তৃতীয় পক্ষের সাথে যুক্ত করার জন্য বিভাগ স্বয়ংক্রিয়ভাবে তৈরি হয় যখন কেউ একটি সম্মেলনের পরামর্শ দেয় EVENTORGANIZATION_CATEG_THIRDPARTY_BOOTH = তৃতীয় পক্ষের সাথে যুক্ত করার জন্য বিভাগ স্বয়ংক্রিয়ভাবে তৈরি হয় যখন তারা একটি বুথের পরামর্শ দেয় @@ -88,6 +88,7 @@ PriceOfRegistration=নিবন্ধনের মূল্য PriceOfRegistrationHelp=ইভেন্টে নিবন্ধন বা অংশগ্রহণের জন্য মূল্য দিতে হবে PriceOfBooth=সাবস্ক্রিপশন মূল্য একটি বুথ দাঁড়ানো PriceOfBoothHelp=সাবস্ক্রিপশন মূল্য একটি বুথ দাঁড়ানো +EventOrganizationICSLinkProject=Link ICS for the event EventOrganizationICSLink=সম্মেলনের জন্য আইসিএস লিঙ্ক করুন ConferenceOrBoothInformation=সম্মেলন বা বুথ তথ্য Attendees=উপস্থিতরা diff --git a/htdocs/langs/bn_BD/exports.lang b/htdocs/langs/bn_BD/exports.lang index eef575cb6c9..50fc51b8575 100644 --- a/htdocs/langs/bn_BD/exports.lang +++ b/htdocs/langs/bn_BD/exports.lang @@ -72,7 +72,7 @@ FieldsTarget=Targeted fields FieldTarget=Targeted field FieldSource=Source field NbOfSourceLines=Number of lines in source file -NowClickToTestTheImport=আপনার ফাইলের ফাইল ফরম্যাট (ক্ষেত্র এবং স্ট্রিং ডিলিমিটার) দেখানো বিকল্পগুলির সাথে মেলে এবং আপনি হেডার লাইনটি বাদ দিয়েছেন কিনা তা পরীক্ষা করে দেখুন, অথবা এইগুলি নিম্নলিখিত সিমুলেশনে ত্রুটি হিসাবে ফ্ল্যাগ করা হবে।
একটি চালানোর জন্য "%s" বোতামে ক্লিক করুন ফাইলের গঠন/বিষয়বস্তু পরীক্ষা করুন এবং আমদানি প্রক্রিয়া অনুকরণ করুন।
আপনার ডাটাবেসে কোনো ডেটা পরিবর্তন করা হবে না। +NowClickToTestTheImport=Check that the file format (field and string delimiters) of your file matches the options shown and that you have omitted the header line, or these will be flagged as errors in the following simulation.
Click on the "%s" button to run a check of the file structure/contents and simulate the import process.
No data will be changed in your database. RunSimulateImportFile=আমদানি সিমুলেশন চালান FieldNeedSource=This field requires data from the source file SomeMandatoryFieldHaveNoSource=Some mandatory fields have no source from data file @@ -83,19 +83,19 @@ SelectFormat=Choose this import file format RunImportFile=তথ্য আমদানি NowClickToRunTheImport=আমদানি সিমুলেশন ফলাফল পরীক্ষা করুন. কোনো ত্রুটি সংশোধন করুন এবং পুনরায় পরীক্ষা করুন।
যখন সিমুলেশন কোনো ত্রুটির প্রতিবেদন করে না আপনি ডাটাবেসে ডেটা আমদানি করতে এগিয়ে যেতে পারেন। DataLoadedWithId=এই আমদানি আইডি সহ প্রতিটি ডাটাবেস টেবিলে আমদানি করা ডেটার একটি অতিরিক্ত ক্ষেত্র থাকবে: %s, এই আমদানির সাথে সম্পর্কিত একটি সমস্যা তদন্তের ক্ষেত্রে এটি অনুসন্ধানযোগ্য হওয়ার অনুমতি দিতে৷ -ErrorMissingMandatoryValue=%s কলামের উৎস ফাইলে বাধ্যতামূলক ডেটা খালি। +ErrorMissingMandatoryValue=Mandatory data is empty in the source file in column %s. TooMuchErrors=এখনও %s ত্রুটি সহ অন্যান্য উত্স লাইন আছে কিন্তু আউটপুট আছে সীমিত করা হয়েছে। TooMuchWarnings=এখনও %s সতর্কতা সহ অন্যান্য উত্স লাইন আছে কিন্তু আউটপুট আছে সীমিত করা হয়েছে। EmptyLine=Empty line (will be discarded) -CorrectErrorBeforeRunningImport=আপনাকে অবশ্যই সমস্ত ত্রুটি সংশোধন করতে হবে আগে নিশ্চিত আমদানি চলছে৷ +CorrectErrorBeforeRunningImport=You must correct all errors before running the definitive import. FileWasImported=File was imported with number %s. -YouCanUseImportIdToFindRecord=আপনি import_key='%s'
। +YouCanUseImportIdToFindRecord=You can find all the imported records in your database by filtering on field import_key='%s'. NbOfLinesOK=Number of lines with no errors and no warnings: %s. NbOfLinesImported=Number of lines successfully imported: %s. DataComeFromNoWhere=Value to insert comes from nowhere in source file. DataComeFromFileFieldNb=সন্নিবেশ করার মান উৎস ফাইলে %s থেকে আসে। DataComeFromIdFoundFromRef=সোর্স ফাইল থেকে আসা মানটি ব্যবহার করার জন্য মূল বস্তুর আইডি খুঁজতে ব্যবহার করা হবে (তাই বস্তুটি %s যার রেফ. ফ্রম সোর্স ফাইলটি ডাটাবেসে বিদ্যমান থাকতে হবে)। -DataComeFromIdFoundFromCodeId=সোর্স ফাইল থেকে আসা কোডের মান ব্যবহার করা হবে প্যারেন্ট অবজেক্টের আইডি খুঁজে বের করার জন্য (সুতরাং সোর্স ফাইলের কোডটি ডিকশনারিতে থাকা আবশ্যক %s)। মনে রাখবেন যে আপনি যদি আইডিটি জানেন তবে আপনি কোডের পরিবর্তে সোর্স ফাইলে এটি ব্যবহার করতে পারেন। আমদানি উভয় ক্ষেত্রেই কাজ করা উচিত। +DataComeFromIdFoundFromCodeId=The value of code that comes from source file will be used to find the id of the parent object to use (so the code from source file must exist in the dictionary %s). Note that if you know the id, you can also use it in the source file instead of the code. Import should work in both cases. DataIsInsertedInto=Data coming from source file will be inserted into the following field: DataIDSourceIsInsertedInto=মূল বস্তুর আইডি, যা উৎস ফাইলের ডেটা ব্যবহার করে পাওয়া গেছে, নিম্নলিখিত ক্ষেত্রে সন্নিবেশ করা হবে: DataCodeIDSourceIsInsertedInto=প্যারেন্ট লাইনের আইডি, যা কোড থেকে পাওয়া গেছে, নিম্নলিখিত ক্ষেত্রে ঢোকানো হবে: @@ -113,7 +113,7 @@ Separator=ক্ষেত্র বিভাজক Enclosure=স্ট্রিং ডিলিমিটার SpecialCode=Special code ExportStringFilter=%% allows replacing one or more characters in the text -ExportDateFilter=YYYY, YYYYMM, YYYYMMDD: এক বছর/মাস/দিনের দ্বারা ফিল্টার করুন
YYYY+YYYY, YYYYMM+YYYYMM, YYYYMMDD+YYYYMMDD+YYYYMMDD বছর/মাস/মাস রেঞ্জের বেশি বছর span class='notranslate'>
> YYYY, > YYYYMM, > YYYYMMDD: পরবর্তী সমস্ত বছর/মাস/দিনে ফিল্টার
< YYYY, YYYY+YYYY, YYYYMM+YYYYMM, YYYYMMDD+YYYYMMDD: filters over a range of years/months/days
> YYYY, > YYYYMM, > YYYYMMDD: filters on all following years/months/days
< YYYY, < YYYYMM, < YYYYMMDD: filters on all previous years/months/days ExportNumericFilter=NNNNN filters by one value
NNNNN+NNNNN filters over a range of values
< NNNNN filters by lower values
> NNNNN filters by higher values ImportFromLine=Import starting from line number EndAtLineNb=End at line number diff --git a/htdocs/langs/bn_BD/help.lang b/htdocs/langs/bn_BD/help.lang index da41f13ea48..1a42aa60703 100644 --- a/htdocs/langs/bn_BD/help.lang +++ b/htdocs/langs/bn_BD/help.lang @@ -20,4 +20,4 @@ BackToHelpCenter=অন্যথায়, সহায়তা LinkToGoldMember=আপনি আপনার ভাষার জন্য Dolibarr দ্বারা পূর্বনির্বাচিত একজন প্রশিক্ষককে কল করতে পারেন (%s) তাদের উইজেটে ক্লিক করে (স্থিতি এবং সর্বোচ্চ মূল্য স্বয়ংক্রিয়ভাবে আপডেট হয়): PossibleLanguages=Supported languages SubscribeToFoundation=Dolibarr প্রকল্পে সাহায্য করুন, ফাউন্ডেশনের সদস্যতা নিন -SeeOfficalSupport=আপনার ভাষায় অফিসিয়াল Dolibarr সমর্থনের জন্য:
%s +SeeOfficalSupport=For official Dolibarr support in your language:
%s diff --git a/htdocs/langs/bn_BD/hrm.lang b/htdocs/langs/bn_BD/hrm.lang index b6ec7fd1bce..6bb56282297 100644 --- a/htdocs/langs/bn_BD/hrm.lang +++ b/htdocs/langs/bn_BD/hrm.lang @@ -45,7 +45,7 @@ Eval=মূল্যায়ন Evals=মূল্যায়ন NewEval=নতুন মূল্যায়ন ValidateEvaluation=মূল্যায়ন যাচাই করুন -ConfirmValidateEvaluation=আপনি কি %sরেফারেন্স দিয়ে এই মূল্যায়ন যাচাই করার বিষয়ে নিশ্চিত >? +ConfirmValidateEvaluation=Are you sure you want to validate this evaluation with the reference %s? EvaluationCard=মূল্যায়ন কার্ড RequiredRank=কাজের প্রোফাইলের জন্য প্রয়োজনীয় র‌্যাঙ্ক RequiredRankShort=প্রয়োজনীয় পদমর্যাদা diff --git a/htdocs/langs/bn_BD/install.lang b/htdocs/langs/bn_BD/install.lang index 97ad6c4642d..7aeb6b0ba61 100644 --- a/htdocs/langs/bn_BD/install.lang +++ b/htdocs/langs/bn_BD/install.lang @@ -14,7 +14,7 @@ PHPSupportPOSTGETKo=এটা সম্ভব যে আপনার পিএ PHPSupportSessions=This PHP supports sessions. PHPSupport=এই PHP %s ফাংশন সমর্থন করে। PHPMemoryOK=Your PHP max session memory is set to %s. This should be enough. -PHPMemoryTooLow=আপনার PHP সর্বোচ্চ সেশন মেমরি %s বাইটে সেট করা আছে। এটা খুবই কম। আপনার php.ini মেমোরি সেট করতে পরিবর্তন করুন ='notranslate'> প্যারামিটারে অন্তত %sb091b বাইট। +PHPMemoryTooLow=Your PHP max session memory is set to %s bytes. This is too low. Change your php.ini to set memory_limit parameter to at least %s bytes. Recheck=আরো বিস্তারিত পরীক্ষার জন্য এখানে ক্লিক করুন ErrorPHPDoesNotSupportSessions=আপনার পিএইচপি ইনস্টলেশন সেশন সমর্থন করে না. ডলিবারকে কাজ করার অনুমতি দেওয়ার জন্য এই বৈশিষ্ট্যটি প্রয়োজন। আপনার পিএইচপি সেটআপ এবং সেশন ডিরেক্টরির অনুমতি পরীক্ষা করুন। ErrorPHPDoesNotSupport=আপনার PHP ইনস্টলেশন %s ফাংশন সমর্থন করে না। @@ -115,7 +115,7 @@ OrphelinsPaymentsDetectedByMethod=Orphans payment detected by method %s RemoveItManuallyAndPressF5ToContinue=Remove it manually and press F5 to continue. FieldRenamed=Field renamed IfLoginDoesNotExistsCheckCreateUser=যদি ব্যবহারকারী এখনও বিদ্যমান না থাকে তবে আপনাকে অবশ্যই "ব্যবহারকারী তৈরি করুন" বিকল্পটি চেক করতে হবে -ErrorConnection=সার্ভার "%s", ডাটাবেসের নাম "%s", লগইন "b0aee%s", অথবা ডাটাবেস পাসওয়ার্ড ভুল হতে পারে বা PHP ক্লায়েন্ট সংস্করণ ডাটাবেস সংস্করণের তুলনায় অনেক পুরানো হতে পারে . +ErrorConnection=Server "%s", database name "%s", login "%s", or database password may be wrong or the PHP client version may be too old compared to the database version. InstallChoiceRecommanded=Recommended choice to install version %s from your current version %s InstallChoiceSuggested=Install choice suggested by installer. MigrateIsDoneStepByStep=লক্ষ্যযুক্ত সংস্করণে (%s) বেশ কয়েকটি সংস্করণের ব্যবধান রয়েছে। এটি সম্পূর্ণ হয়ে গেলে ইনস্টল উইজার্ডটি আরও একটি মাইগ্রেশনের পরামর্শ দিতে ফিরে আসবে। diff --git a/htdocs/langs/bn_BD/ldap.lang b/htdocs/langs/bn_BD/ldap.lang index 489a148ba56..a13fd9fbd24 100644 --- a/htdocs/langs/bn_BD/ldap.lang +++ b/htdocs/langs/bn_BD/ldap.lang @@ -1,5 +1,5 @@ # Dolibarr language file - Source file is en_US - ldap -YouMustChangePassNextLogon=%s পরিবর্তন করতে হবে৷ +YouMustChangePassNextLogon=Password for user %s on the domain %s must be changed. UserMustChangePassNextLogon=ব্যবহারকারীকে ডোমেনে পাসওয়ার্ড পরিবর্তন করতে হবে %s LDAPInformationsForThisContact=এই পরিচিতির জন্য LDAP ডাটাবেসে তথ্য LDAPInformationsForThisUser=এই ব্যবহারকারীর জন্য LDAP ডাটাবেসে তথ্য diff --git a/htdocs/langs/bn_BD/mails.lang b/htdocs/langs/bn_BD/mails.lang index e88e25df240..e4ebaaf89cc 100644 --- a/htdocs/langs/bn_BD/mails.lang +++ b/htdocs/langs/bn_BD/mails.lang @@ -147,7 +147,7 @@ UseFormatFileEmailToTarget=আমদানি করা ফাইলে অব UseFormatInputEmailToTarget=বিন্যাস সহ একটি স্ট্রিং লিখুন email;name;firstname;other MailAdvTargetRecipients=প্রাপক (উন্নত নির্বাচন) AdvTgtTitle=লক্ষ্য করার জন্য তৃতীয় পক্ষ বা পরিচিতি/ঠিকানাগুলি পূর্বনির্বাচন করতে ইনপুট ক্ষেত্রগুলি পূরণ করুন -AdvTgtSearchTextHelp=ওয়াইল্ডকার্ড হিসেবে %% ব্যবহার করুন। উদাহরণস্বরূপ জিন, জো, জিম এর মতো সমস্ত আইটেম খুঁজে পেতে, আপনি ইনপুট করতে পারেন j%%, আপনিও ব্যবহার করতে পারেন ; মান জন্য বিভাজক হিসাবে, এবং ব্যবহার করুন! এই মান ছাড়া জন্য. যেমন jean;joe;jim%%;!jimo;!jimab07e63171f5dacz span> সব জিন, জো, জিম দিয়ে শুরু করবে কিন্তু জিমো নয় এবং জিমা দিয়ে শুরু হওয়া সবকিছু নয় +AdvTgtSearchTextHelp=Use %% as wildcards. For example to find all item like jean, joe, jim, you can input j%%, you can also use ; as separator for value, and use ! for except this value. For example jean;joe;jim%%;!jimo;!jima%% will target all jean, joe, start with jim but not jimo and not everything that starts with jima AdvTgtSearchIntHelp=int বা ফ্লোট মান নির্বাচন করতে ব্যবধান ব্যবহার করুন AdvTgtMinVal=সর্বনিম্ন মান AdvTgtMaxVal=সর্বোচ্চ মূল্য @@ -182,7 +182,7 @@ IsAnAnswer=এটি একটি প্রাথমিক ইমেলের RecordCreatedByEmailCollector=ইমেল সংগ্রাহকের দ্বারা তৈরি করা রেকর্ড %s ইমেল থেকে %s DefaultBlacklistMailingStatus=একটি নতুন পরিচিতি তৈরি করার সময় '%s' ক্ষেত্রের ডিফল্ট মান DefaultStatusEmptyMandatory=খালি কিন্তু বাধ্যতামূলক -WarningLimitSendByDay=সতর্কতা: আপনার উদাহরণের সেটআপ বা চুক্তিটি প্রতিদিন আপনার ইমেলের সংখ্যা %s। আরও পাঠানোর চেষ্টা করার ফলে আপনার দৃষ্টান্ত ধীর বা স্থগিত হতে পারে। আপনি একটি উচ্চ কোটা প্রয়োজন হলে আপনার সমর্থনের সাথে যোগাযোগ করুন. +WarningLimitSendByDay=WARNING: The setup or contract of your instance limits your number of emails per day to %s. Trying to send more may result in having your instance slow down or suspended. Please contact your support if you need a higher quota. NoMoreRecipientToSendTo=ইমেল পাঠাতে আর কোন প্রাপক EmailOptedOut=ইমেলের মালিক অনুরোধ করেছেন এই ইমেলের মাধ্যমে তার সাথে আর যোগাযোগ না করার জন্য EvenUnsubscribe=অপ্ট-আউট ইমেলগুলি অন্তর্ভুক্ত করুন৷ diff --git a/htdocs/langs/bn_BD/main.lang b/htdocs/langs/bn_BD/main.lang index f3db4028e10..ed96b5c0f5e 100644 --- a/htdocs/langs/bn_BD/main.lang +++ b/htdocs/langs/bn_BD/main.lang @@ -9,7 +9,7 @@ DIRECTION=ltr # cid0kr is for Korean # DejaVuSans is for some Eastern languages, some Asian languages and some Arabic languages # freemono is for ru_RU or uk_UA, uz_UZ -# freeserif is for Tamil +# freeserif is for Tamil or Ethiopian FONTFORPDF=helvetica FONTSIZEFORPDF=10 SeparatorDecimal=. @@ -68,7 +68,7 @@ ErrorNoRequestInError=ভুল কোন অনুরোধ ErrorServiceUnavailableTryLater=এই মুহূর্তে পরিষেবা উপলব্ধ নেই৷ পরে আবার চেষ্টা করুন. ErrorDuplicateField=একটি অনন্য ক্ষেত্রে ডুপ্লিকেট মান ErrorSomeErrorWereFoundRollbackIsDone=কিছু ত্রুটি পাওয়া গেছে. পরিবর্তনগুলি ফিরিয়ে আনা হয়েছে৷ -ErrorConfigParameterNotDefined=প্যারামিটার %s ডলিবার কনফিগারেশন ফাইলে সংজ্ঞায়িত নয় class='notranslate'>conf.php। +ErrorConfigParameterNotDefined=Parameter %s is not defined in the Dolibarr config file conf.php. ErrorCantLoadUserFromDolibarrDatabase=Dolibarr ডেটাবেসে %s ব্যবহারকারী খুঁজে পাওয়া যায়নি। ErrorNoVATRateDefinedForSellerCountry=ত্রুটি, '%s' দেশের জন্য কোনো ভ্যাট হার সংজ্ঞায়িত করা হয়নি। ErrorNoSocialContributionForSellerCountry=ত্রুটি, '%s' দেশের জন্য কোনো সামাজিক/আর্থিক করের ধরন সংজ্ঞায়িত করা হয়নি। @@ -103,7 +103,7 @@ RecordDeleted=রেকর্ড মুছে ফেলা হয়েছে RecordGenerated=রেকর্ড তৈরি হয়েছে LevelOfFeature=বৈশিষ্ট্যের স্তর NotDefined=সংজ্ঞায়িত নয় -DolibarrInHttpAuthenticationSoPasswordUseless=Dolibarr প্রমাণীকরণ মোড %s কনফিগারেশন ফাইলে সেট করা আছে class='notranslate'>conf.php
এর মানে হল পাসওয়ার্ডের প্রাক্তন ডেটাবেস Dolibarr, তাই এই ক্ষেত্র পরিবর্তন কোন প্রভাব হতে পারে. +DolibarrInHttpAuthenticationSoPasswordUseless=Dolibarr authentication mode is set to %s in configuration file conf.php.
This means that the password database is external to Dolibarr, so changing this field may have no effect. Administrator=সিস্টেম অ্যাডমিনিস্ট্রেটর AdministratorDesc=সিস্টেম অ্যাডমিনিস্ট্রেটর (ব্যবহারকারী, অনুমতি কিন্তু সিস্টেম সেটআপ এবং মডিউল কনফিগারেশন পরিচালনা করতে পারে) Undefined=অনির্ধারিত @@ -131,7 +131,7 @@ TechnicalID=প্রযুক্তিগত আইডি LineID=লাইন আইডি NotePublic=নোট (সর্বজনীন) NotePrivate=নোট (ব্যক্তিগত) -PrecisionUnitIsLimitedToXDecimals=ইউনিটের দামের নির্ভুলতা %sb09a4b739f17f8cimalএ সীমাবদ্ধ করার জন্য Dolibarr সেটআপ করা হয়েছিল . +PrecisionUnitIsLimitedToXDecimals=Dolibarr was setup to limit precision of unit prices to %s decimals. DoTest=পরীক্ষা ToFilter=ছাঁকনি NoFilter=ছাঁকনিবিহীন @@ -172,7 +172,7 @@ Close=বন্ধ CloseAs=স্থিতি সেট করুন CloseBox=আপনার ড্যাশবোর্ড থেকে উইজেট সরান Confirm=নিশ্চিত করুন -ConfirmSendCardByMail=আপনি কি সত্যিই এই কার্ডের বিষয়বস্তু %s< এ মেইলে পাঠাতে চান /span>? +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to %s? Delete=মুছে ফেলা Remove=অপসারণ Resiliate=সমাপ্ত করুন @@ -420,6 +420,8 @@ TotalTTCShort=মোট (inc. ট্যাক্স) TotalHT=মোট (ট্যাক্স বাদে) TotalHTforthispage=এই পৃষ্ঠার জন্য মোট (ট্যাক্স বাদে) Totalforthispage=এই পৃষ্ঠার জন্য মোট +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=মোট (inc. ট্যাক্স) TotalTTCToYourCredit=আপনার ক্রেডিট মোট (inc. ট্যাক্স) TotalVAT=মোট ট্যাক্স @@ -502,7 +504,7 @@ Completed=সম্পন্ন Running=চলমান RequestAlreadyDone=অনুরোধ ইতিমধ্যে রেকর্ড করা হয়েছে Filter=ছাঁকনি -FilterOnInto=মাপদণ্ড '%s' ক্ষেত্রে %s +FilterOnInto=Search criteria '%s' into fields %s RemoveFilter=ফিল্টার সরান ChartGenerated=চার্ট তৈরি হয়েছে ChartNotGenerated=চার্ট তৈরি হয়নি @@ -647,6 +649,7 @@ ReportName=রিপোর্টের নাম ReportPeriod=রিপোর্ট সময়কাল ReportDescription=বর্ণনা Report=রিপোর্ট +Reports=Reports Keyword=কীওয়ার্ড Origin=উৎপত্তি Legend=কিংবদন্তি @@ -963,6 +966,7 @@ AutomaticallyCalculated=স্বয়ংক্রিয়ভাবে গণ TitleSetToDraft=খসড়ায় ফিরে যান ConfirmSetToDraft=আপনি কি খসড়া স্ট্যাটাসে ফিরে যেতে চান? ImportId=আইডি আমদানি করুন +Event=Event Events=ঘটনা EMailTemplates=ইমেল টেমপ্লেট FileNotShared=ফাইল বহিরাগত পাবলিক শেয়ার করা হয় না @@ -1048,7 +1052,7 @@ Select2NotFound=কোন ফলাফল পাওয়া যায়নি Select2Enter=প্রবেশ করুন Select2MoreCharacter=বা আরও চরিত্র Select2MoreCharacters=বা আরও অক্ষর -Select2MoreCharactersMore=অনুসন্ধান সিনট্যাক্স:
'notranslate>'notranslate' |b0860de534daf0 notranslate'>
OR (a|b)
b061d061d /span>* যেকোনো অক্ষর (a*b)
b06aecd0207 span>^ দিয়ে শুরু করুন (^ab)
b03aecd01>b03aecd20 $b061d061d (ab$)
দিয়ে শেষ করুন +Select2MoreCharactersMore=Search syntax:
| OR (a|b)
* Any character (a*b)
^ Start with (^ab)
$ End with (ab$)
Select2LoadingMoreResults=আরও ফলাফল লোড হচ্ছে... Select2SearchInProgress=অনুসন্ধান চলছে... SearchIntoThirdparties=তৃতীয় পক্ষ @@ -1180,7 +1184,6 @@ ConfirmAffectUserQuestion=আপনি কি নিশ্চিত যে আ ConfirmSetSupervisorQuestion=আপনি কি নির্বাচিত রেকর্ড(গুলি) %s সুপারভাইজার সেট করতে চান? ConfirmUpdatePriceQuestion=আপনি কি %s নির্বাচিত রেকর্ড(গুলি) এর মূল্য আপডেট করার বিষয়ে নিশ্চিত? CategTypeNotFound=রেকর্ডের ধরনের জন্য কোন ট্যাগ টাইপ পাওয়া যায়নি -Rate=হার SupervisorNotFound=সুপারভাইজার পাওয়া যায়নি CopiedToClipboard=ক্লিপবোর্ডে কপি করা হয়েছে InformationOnLinkToContract=এই পরিমাণ শুধুমাত্র চুক্তির সমস্ত লাইনের মোট। সময়ের কোন ধারণা বিবেচনায় নেওয়া হয় না। @@ -1213,6 +1216,7 @@ CanceledHidden=বাতিল লুকানো CanceledShown=বাতিল দেখানো হয়েছে Terminate=সমাপ্ত করুন Terminated=সমাপ্ত +Position=Position AddLineOnPosition=অবস্থানে লাইন যোগ করুন (শেষে যদি খালি থাকে) ConfirmAllocateCommercial=বিক্রয় প্রতিনিধি নিশ্চিতকরণ বরাদ্দ করুন ConfirmAllocateCommercialQuestion=আপনি কি %s নির্বাচিত রেকর্ড(গুলি) বরাদ্দ করার বিষয়ে নিশ্চিত? @@ -1230,6 +1234,7 @@ ExternalUser=বহিরাগত ব্যবহারকারী NoSpecificContactAddress=কোনো নির্দিষ্ট যোগাযোগ বা ঠিকানা নেই NoSpecificContactAddressBis=এই ট্যাবটি বর্তমান বস্তুর জন্য নির্দিষ্ট পরিচিতি বা ঠিকানা জোর করার জন্য নিবেদিত। আপনি যদি বস্তুর জন্য এক বা একাধিক নির্দিষ্ট পরিচিতি বা ঠিকানা নির্ধারণ করতে চান তখনই এটি ব্যবহার করুন যখন তৃতীয় পক্ষের তথ্য যথেষ্ট নয় বা সঠিক নয়। HideOnVCard=লুকান %s +ShowOnVCard=Show %s AddToContacts=আমার পরিচিতি ঠিকানা যোগ করুন LastAccess=শেষ অ্যাক্সেস UploadAnImageToSeeAPhotoHere=এখানে একটি ফটো দেখতে %s ট্যাব থেকে একটি ছবি আপলোড করুন @@ -1259,4 +1264,7 @@ AmountSalary=বেতনের পরিমাণ InvoiceSubtype=চালান সাবটাইপ ConfirmMassReverse=বাল্ক বিপরীত নিশ্চিতকরণ ConfirmMassReverseQuestion=আপনি কি %s নির্বাচিত রেকর্ড (গুলি) বিপরীত করতে চান? - +ElementType=Element type +ElementId=Element Id +Encrypted=Encrypted +Settings=Settings diff --git a/htdocs/langs/bn_BD/members.lang b/htdocs/langs/bn_BD/members.lang index a0d245f7cd5..56001a98a3c 100644 --- a/htdocs/langs/bn_BD/members.lang +++ b/htdocs/langs/bn_BD/members.lang @@ -13,7 +13,7 @@ MembersTickets=সদস্যপদ ঠিকানা শীট FundationMembers=ফাউন্ডেশনের সদস্যরা ListOfValidatedPublicMembers=বৈধ পাবলিক সদস্যদের তালিকা ErrorThisMemberIsNotPublic=এই সদস্য সর্বজনীন নয় -ErrorMemberIsAlreadyLinkedToThisThirdParty=অন্য সদস্য (নাম: %s, লগইন: %s) ইতিমধ্যেই একটি তৃতীয় পক্ষের সাথে লিঙ্ক করা আছে %s। প্রথমে এই লিঙ্কটি সরান কারণ একটি তৃতীয় পক্ষ শুধুমাত্র একজন সদস্যের সাথে লিঙ্ক করা যাবে না (এবং এর বিপরীতে)। +ErrorMemberIsAlreadyLinkedToThisThirdParty=Another member (name: %s, login: %s) is already linked to a third party %s. Remove this link first because a third party can't be linked to only a member (and vice versa). ErrorUserPermissionAllowsToLinksToItselfOnly=নিরাপত্তার কারণে, আপনার নয় এমন ব্যবহারকারীর সাথে সদস্যকে লিঙ্ক করতে সক্ষম হওয়ার জন্য আপনাকে অবশ্যই সমস্ত ব্যবহারকারীকে সম্পাদনা করার অনুমতি দিতে হবে। SetLinkToUser=একটি Dolibarr ব্যবহারকারী লিঙ্ক SetLinkToThirdParty=একটি Dolibarr তৃতীয় পক্ষের লিঙ্ক diff --git a/htdocs/langs/bn_BD/modulebuilder.lang b/htdocs/langs/bn_BD/modulebuilder.lang index b0dcfe3f4d9..6dd7ae7c9e5 100644 --- a/htdocs/langs/bn_BD/modulebuilder.lang +++ b/htdocs/langs/bn_BD/modulebuilder.lang @@ -94,7 +94,7 @@ SeeExamples=এখানে উদাহরণ দেখুন EnabledDesc=এই ক্ষেত্রটি সক্রিয় থাকার শর্ত।

উদাহরণ:
1
isModEnabled('anothermodule')
getDolGlobalString('MYMODULE_OPTION')==2 VisibleDesc=মাঠ কি দৃশ্যমান? (উদাহরণ: 0=কখনও দৃশ্যমান নয়, 1=তালিকায় দৃশ্যমান এবং ফর্মগুলি তৈরি/আপডেট/দেখুন, 2=শুধু তালিকায় দৃশ্যমান, 3=শুধুমাত্র তৈরি/আপডেট/দেখার ফর্মে দৃশ্যমান (তালিকায় নয়), 4=তালিকায় দৃশ্যমান এবং শুধুমাত্র ফর্ম আপডেট/দেখুন (তৈরি নয়), 5=তালিকাতে দৃশ্যমান এবং শুধুমাত্র ফর্ম দেখুন (তৈরি নয়, আপডেট নয়)।

একটি নেতিবাচক মান ব্যবহার করার অর্থ হল তালিকায় ডিফল্টভাবে ক্ষেত্র দেখানো হয় না তবে দেখার জন্য নির্বাচন করা যেতে পারে)। ItCanBeAnExpression=এটি একটি অভিব্যক্তি হতে পারে. উদাহরণ:
preg_match('/public/', $_SERVER['PHP_SELF'])?0:1
$user ->অধিকার আছে('ছুটি', 'নির্ধারিত_ছুটির')?1:5 -DisplayOnPdfDesc=সামঞ্জস্যপূর্ণ PDF নথিতে এই ক্ষেত্রটি প্রদর্শন করুন, আপনি "পজিশন" ক্ষেত্রের সাথে অবস্থান পরিচালনা করতে পারেন।
নথির জন্য :

0 = প্রদর্শিত হয় না
1 =
2 = শুধুমাত্র খালি না থাকলে প্রদর্শন করুন

b0e7849434 span>নথি লাইনের জন্য :

0 = প্রদর্শিত হয় না
1 = একটি কলামে প্রদর্শিত হয়
3 = বর্ণনার পরে লাইন বর্ণনা কলামে প্রদর্শিত হয়
4 = বর্ণনার পরে বিবরণ কলামে প্রদর্শন শুধুমাত্র যদি খালি না হয় +DisplayOnPdfDesc=Display this field on compatible PDF documents, you can manage position with "Position" field.
For document :
0 = not displayed
1 = display
2 = display only if not empty

For document lines :
0 = not displayed
1 = displayed in a column
3 = display in line description column after the description
4 = display in description column after the description only if not empty DisplayOnPdf=PDF এ IsAMeasureDesc=তালিকায় মোট পেতে ক্ষেত্রের মান কি কম্পুলেট করা যেতে পারে? (উদাহরণ: 1 বা 0) SearchAllDesc=ক্ষেত্রটি কি দ্রুত অনুসন্ধান সরঞ্জাম থেকে অনুসন্ধান করতে ব্যবহৃত হয়? (উদাহরণ: 1 বা 0) @@ -111,7 +111,7 @@ TriggerDefDesc=আপনার মডিউলের বাহ্যিক এ SeeIDsInUse=আপনার ইনস্টলেশন ব্যবহার করা আইডি দেখুন SeeReservedIDsRangeHere=সংরক্ষিত আইডি পরিসীমা দেখুন ToolkitForDevelopers=ডলিবার ডেভেলপারদের জন্য টুলকিট -TryToUseTheModuleBuilder=আপনার যদি SQL এবং PHP সম্পর্কে জ্ঞান থাকে, আপনি স্থানীয় মডিউল নির্মাতা উইজার্ড ব্যবহার করতে পারেন।
মডিউলটি সক্ষম করুন %s এবং উপরের ডানদিকের মেনুতে।
সতর্কতা: এটি একটি উন্নত ডেভেলপার বৈশিষ্ট্য, করুন no span class='notranslate'> আপনার প্রোডাকশন সাইটে পরীক্ষা! +TryToUseTheModuleBuilder=If you have knowledge of SQL and PHP, you may use the native module builder wizard.
Enable the module %s and use the wizard by clicking the on the top right menu.
Warning: This is an advanced developer feature, do not experiment on your production site! SeeTopRightMenu=উপরের ডানদিকের মেনুতে দেখুন AddLanguageFile=ভাষা ফাইল যোগ করুন YouCanUseTranslationKey=আপনি এখানে একটি কী ব্যবহার করতে পারেন যা ভাষা ফাইলে পাওয়া অনুবাদ কী (ট্যাব "ভাষা" দেখুন) @@ -148,7 +148,7 @@ CSSListClass=তালিকার জন্য CSS NotEditable=সম্পাদনাযোগ্য নয় ForeignKey=বিদেশী চাবি ForeignKeyDesc=যদি এই ক্ষেত্রের মান অবশ্যই অন্য টেবিলে উপস্থিত থাকার নিশ্চয়তা দিতে হবে। এখানে একটি মান মেলে সিনট্যাক্স লিখুন: tablename.parentfieldtocheck -TypeOfFieldsHelp=উদাহরণ:
varchar(99)
ইমেল
ফোন
ip
url
পাসওয়ার্ড
span>ডাবল(24,8)
real
পাঠ্য
html
তারিখ
তারিখের সময়
টাইমস্ট্যাম্প'notranslate'
পূর্ণসংখ্যা
পূর্ণসংখ্যা:ClassName:relativepath/to/classfile.class.php[:1[:filter]]b0342fcc
'1' মানে আমরা রেকর্ড তৈরি করতে কম্বোর পরে একটি + বোতাম যোগ করি
'ফিল্টার' হল একটি ইউনিভার্সাল ফিল্টার সিনট্যাক্স শর্ত, উদাহরণ: '((status:=:1) AND (fk_user:=:__USER_ID__) AND (entity:IN:(__SHARED_ENTITIES__))' +TypeOfFieldsHelp=Example:
varchar(99)
email
phone
ip
url
password
double(24,8)
real
text
html
date
datetime
timestamp
integer
integer:ClassName:relativepath/to/classfile.class.php[:1[:filter]]

'1' means we add a + button after the combo to create the record
'filter' is an Universal Filter syntax condition, example: '((status:=:1) AND (fk_user:=:__USER_ID__) AND (entity:IN:(__SHARED_ENTITIES__))' TypeOfFieldsHelpIntro=এটি হল ক্ষেত্র/বিশিষ্টের ধরন। AsciiToHtmlConverter=Ascii থেকে HTML রূপান্তরকারী AsciiToPdfConverter=Ascii থেকে পিডিএফ কনভার্টার @@ -180,7 +180,7 @@ FailedToAddCodeIntoDescriptor=বর্ণনাকারীতে কোড য DictionariesCreated=অভিধান %s সফলভাবে তৈরি করা হয়েছে DictionaryDeleted=অভিধান %s সফলভাবে সরানো হয়েছে PropertyModuleUpdated=সম্পত্তি %s সফলভাবে আপডেট করা হয়েছে -InfoForApiFile=* আপনি যখন প্রথমবার ফাইল তৈরি করবেন তখন প্রতিটি বস্তুর জন্য সমস্ত পদ্ধতি তৈরি হবে।
* আপনি যখন এ ক্লিক করুন আপনি শুধু নির্বাচিত বস্তু। +InfoForApiFile=* When you generate file for the first time then all methods will be created for each object.
* When you click in remove you just remove all methods for the selected object. SetupFile=মডিউল সেটআপের জন্য পৃষ্ঠা EmailingSelectors=Emails selectors EmailingSelectorDesc=আপনি গণ ইমেল মডিউলের জন্য নতুন ইমেল লক্ষ্য নির্বাচক প্রদান করতে এখানে ক্লাস ফাইলগুলি তৈরি এবং সম্পাদনা করতে পারেন diff --git a/htdocs/langs/bn_BD/mrp.lang b/htdocs/langs/bn_BD/mrp.lang index 7bca27a437b..72a4da627de 100644 --- a/htdocs/langs/bn_BD/mrp.lang +++ b/htdocs/langs/bn_BD/mrp.lang @@ -47,7 +47,7 @@ DateEndPlannedMo=তারিখ শেষ পরিকল্পিত KeepEmptyForAsap=খালি মানে 'যত তাড়াতাড়ি সম্ভব' EstimatedDuration=আনুমানিক সময়কাল EstimatedDurationDesc=এই BOM ব্যবহার করে এই পণ্যটি তৈরি (বা বিচ্ছিন্ন) করার আনুমানিক সময়কাল -ConfirmValidateBom=আপনি কি %sরেফারেন্স সহ BOM যাচাই করতে চান > (আপনি নতুন ম্যানুফ্যাকচারিং অর্ডার তৈরি করতে এটি ব্যবহার করতে সক্ষম হবেন) +ConfirmValidateBom=Are you sure you want to validate the BOM with the reference %s (you will be able to use it to build new Manufacturing Orders) ConfirmCloseBom=আপনি কি এই BOM বাতিল করার বিষয়ে নিশ্চিত (আপনি আর নতুন ম্যানুফ্যাকচারিং অর্ডার তৈরি করতে এটি ব্যবহার করতে পারবেন না)? ConfirmReopenBom=আপনি কি নিশ্চিত যে আপনি এই BOM পুনরায় খুলতে চান (আপনি এটি নতুন উত্পাদন অর্ডার তৈরি করতে ব্যবহার করতে সক্ষম হবেন) StatusMOProduced=উত্পাদিত @@ -136,4 +136,3 @@ NoRemainQtyToDispatch=ভাগ করার জন্য কোন পরিম THMOperatorEstimatedHelp=প্রতি ঘন্টায় অপারেটরের আনুমানিক খরচ। এই ওয়ার্কস্টেশন ব্যবহার করে একটি BOM-এর খরচ অনুমান করতে ব্যবহার করা হবে। THMMachineEstimatedHelp=প্রতি ঘণ্টায় মেশিনের আনুমানিক খরচ। এই ওয়ার্কস্টেশন ব্যবহার করে একটি BOM-এর খরচ অনুমান করতে ব্যবহার করা হবে। - diff --git a/htdocs/langs/bn_BD/multicurrency.lang b/htdocs/langs/bn_BD/multicurrency.lang index 1748addea91..7a1a4405193 100644 --- a/htdocs/langs/bn_BD/multicurrency.lang +++ b/htdocs/langs/bn_BD/multicurrency.lang @@ -7,12 +7,12 @@ multicurrency_syncronize_error=সিঙ্ক্রোনাইজেশন ত MULTICURRENCY_USE_RATE_ON_DOCUMENT_DATE=সর্বশেষ পরিচিত হার ব্যবহার না করে মুদ্রার হার খুঁজতে নথির তারিখ ব্যবহার করুন multicurrency_useOriginTx=যখন একটি বস্তু অন্য থেকে তৈরি করা হয়, উৎস বস্তু থেকে মূল হার রাখুন (অন্যথায় সর্বশেষ পরিচিত হার ব্যবহার করুন) CurrencyLayerAccount=কারেন্সি লেয়ার এপিআই -CurrencyLayerAccount_help_to_synchronize=এই কার্যকারিতা ব্যবহার করতে আপনাকে অবশ্যই %s ওয়েবসাইটে একটি অ্যাকাউন্ট তৈরি করতে হবে।
আপনার পান /span>API কী
আপনি যদি একটি বিনামূল্যের অ্যাকাউন্ট ব্যবহার করেন, তাহলে আপনি উৎস মুদ্রা (ডিফল্টরূপে USD)।
যদি আপনার মূল মুদ্রা ইউএসডি না হয়, অ্যাপ্লিকেশন স্বয়ংক্রিয়ভাবে এটি পুনরায় গণনা করবে।

আপনি প্রতি মাসে 1000 সিঙ্ক্রোনাইজেশনের মধ্যে সীমাবদ্ধ। +CurrencyLayerAccount_help_to_synchronize=You must create an account on website %s to use this functionality.
Get your API key.
If you use a free account, you can't change the source currency (USD by default).
If your main currency is not USD, the application will automatically recalculate it.

You are limited to 1000 synchronizations per month. multicurrency_appId=API কী multicurrency_appCurrencySource=উৎস মুদ্রা multicurrency_alternateCurrencySource=বিকল্প উৎস মুদ্রা CurrenciesUsed=ব্যবহৃত মুদ্রা -CurrenciesUsed_help_to_add=আপনার প্রস্তাব, b0aee8336058b0aee8336587 /span>অর্ডার
ইত্যাদি +CurrenciesUsed_help_to_add=Add the different currencies and rates you need to use on your proposals, orders etc. rate=হার MulticurrencyReceived=প্রাপ্ত, আসল মুদ্রা MulticurrencyRemainderToTake=অবশিষ্ট পরিমাণ, আসল মুদ্রা diff --git a/htdocs/langs/bn_BD/orders.lang b/htdocs/langs/bn_BD/orders.lang index 12e4ea443a8..48b2762e7e0 100644 --- a/htdocs/langs/bn_BD/orders.lang +++ b/htdocs/langs/bn_BD/orders.lang @@ -106,7 +106,7 @@ ConfirmDeleteOrder=আপনি কি এই অর্ডারটি মুছ ConfirmValidateOrder=আপনি কি %s নামে এই অর্ডারটি যাচাই করার বিষয়ে নিশ্চিত? ? ConfirmUnvalidateOrder=আপনি কি নিশ্চিত যে আপনি অর্ডার %s খসড়া স্থিতিতে পুনরুদ্ধার করতে চান ? ConfirmCancelOrder=আপনি কি নিশ্চিত আপনি এই অর্ডার বাতিল করতে চান? -ConfirmMakeOrder=আপনি কি নিশ্চিত করতে চান যে আপনি এই অর্ডারটি %s? +ConfirmMakeOrder=Are you sure you want to confirm you made this order on %s? GenerateBill=চালান তৈরি করুন ClassifyShipped=বিতরিত শ্রেণীবদ্ধ PassedInShippedStatus=শ্রেণীবদ্ধ বিতরণ diff --git a/htdocs/langs/bn_BD/other.lang b/htdocs/langs/bn_BD/other.lang index 34109d13d4c..c7e24d59b25 100644 --- a/htdocs/langs/bn_BD/other.lang +++ b/htdocs/langs/bn_BD/other.lang @@ -94,7 +94,7 @@ AttachANewFile=একটি নতুন ফাইল/নথি সংযুক LinkedObject=লিঙ্কযুক্ত বস্তু NbOfActiveNotifications=বিজ্ঞপ্তির সংখ্যা (প্রাপকের ইমেলের সংখ্যা) PredefinedMailTest=__(হ্যালো)__\nএটি একটি পরীক্ষামূলক মেল যা __EMAIL__ এ পাঠানো হয়েছে৷\nলাইন একটি ক্যারেজ রিটার্ন দ্বারা পৃথক করা হয়.\n\n__USER_SIGNATURE__ -PredefinedMailTestHtml=__(হ্যালো)__
এটি একটি পরীক্ষামেল পাঠানো হয়েছে __EMAIL__ এ (পরীক্ষা শব্দটি অবশ্যই মোটা হতে হবে)।
রেখাগুলি একটি ক্যারেজ রিটার্ন দ্বারা পৃথক করা হয়েছে।

__USER_SIGNATURE__ +PredefinedMailTestHtml=__(Hello)__
This is a test mail sent to __EMAIL__ (the word test must be in bold).
The lines are separated by a carriage return.

__USER_SIGNATURE__ PredefinedMailContentContract=__(হ্যালো)__\n\n\n__(বিনীত)__\n\n__USER_SIGNATURE__ PredefinedMailContentSendInvoice=__(হ্যালো)__\n\nঅনুগ্রহ করে __REF__ সংযুক্ত চালান খুঁজুন\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(বিনীত)__\n\n__USER_SIGNATURE__ PredefinedMailContentSendInvoiceReminder=__(হ্যালো)__\n\nআমরা আপনাকে মনে করিয়ে দিতে চাই যে চালান __REF__ পরিশোধ করা হয়নি বলে মনে হচ্ছে। একটি অনুস্মারক হিসাবে চালানের একটি অনুলিপি সংযুক্ত করা হয়।\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(বিনীত)__\n\n__USER_SIGNATURE__ @@ -189,7 +189,7 @@ EnterNewPasswordHere=এখানে আপনার নতুন পাসও BackToLoginPage=লগইন পৃষ্ঠায় ফিরে যান AuthenticationDoesNotAllowSendNewPassword=প্রমাণীকরণ মোড হল %s
এই মোডে, Dolibarr আপনার পাসওয়ার্ড জানতে বা পরিবর্তন করতে পারে না।
আপনার পাসওয়ার্ড পরিবর্তন করতে চাইলে আপনার সিস্টেম অ্যাডমিনিস্ট্রেটরের সাথে যোগাযোগ করুন। EnableGDLibraryDesc=এই বিকল্পটি ব্যবহার করতে আপনার পিএইচপি ইনস্টলেশনে জিডি লাইব্রেরি ইনস্টল বা সক্ষম করুন। -ProfIdShortDesc=প্রফেসর আইডি %s তৃতীয় পক্ষের দেশের উপর নির্ভর করে একটি তথ্য৷
উদাহরণস্বরূপ, দেশের জন্য %s, এটির কোড %sb09a4b7837fz. +ProfIdShortDesc=Prof Id %s is an information depending on third party country.
For example, for country %s, it's code %s. DolibarrDemo=ডলিবার ইআরপি/সিআরএম ডেমো StatsByAmount=পণ্য/পরিষেবার পরিমাণের পরিসংখ্যান StatsByAmountProducts=পণ্যের পরিমাণের পরিসংখ্যান @@ -336,3 +336,5 @@ FTPFailedToUploadFile=%s ফাইলটি আপলোড করতে AddFolder=ফোল্ডার তৈরি করুন FileWasCreateFolder=ফোল্ডার %s তৈরি করা হয়েছে FTPFailedToCreateFolder=%s ফোল্ডার তৈরি করতে ব্যর্থ হয়েছে৷ +SelectADay=Select a day in calendar +SelectANewDate=Select a new date diff --git a/htdocs/langs/bn_BD/partnership.lang b/htdocs/langs/bn_BD/partnership.lang index 4d00b57e935..0f6963729dd 100644 --- a/htdocs/langs/bn_BD/partnership.lang +++ b/htdocs/langs/bn_BD/partnership.lang @@ -91,8 +91,7 @@ CountLastUrlCheckError=শেষ URL চেকের জন্য ত্রু LastCheckBacklink=শেষ ইউআরএল চেক করার তারিখ NewPartnershipRequest=নতুন অংশীদারিত্বের অনুরোধ -NewPartnershipRequestDesc=এই ফর্মটি আপনাকে আমাদের অংশীদারিত্ব প্রোগ্রামের একটি অংশ হতে অনুরোধ করতে দেয়৷ এই ফর্মটি পূরণ করতে আপনার সাহায্যের প্রয়োজন হলে, অনুগ্রহ করে ইমেলের মাধ্যমে যোগাযোগ করুন %s span> +NewPartnershipRequestDesc=This form allows you to request to be part of one of our partnership program. If you need help to fill this form, please contact by email %s. ThisUrlMustContainsAtLeastOneLinkToWebsite=এই পৃষ্ঠায় নিম্নলিখিত ডোমেনের একটিতে অন্তত একটি লিঙ্ক থাকতে হবে: %s IPOfApplicant=আবেদনকারীর আইপি - diff --git a/htdocs/langs/bn_BD/paypal.lang b/htdocs/langs/bn_BD/paypal.lang index 3e0b0c383d0..33484b1ba6e 100644 --- a/htdocs/langs/bn_BD/paypal.lang +++ b/htdocs/langs/bn_BD/paypal.lang @@ -34,4 +34,4 @@ ARollbackWasPerformedOnPostActions=সমস্ত পোস্ট অ্যা ValidationOfPaymentFailed=অর্থপ্রদানের বৈধতা ব্যর্থ হয়েছে৷ CardOwner=কার্ড হোল্ডার PayPalBalance=পেপ্যাল ক্রেডিট -OnlineSubscriptionPaymentLine=অনলাইন সাবস্ক্রিপশন %s
%s
প্রাথমিক আইপি ঠিকানা: %s
লেনদেন আইডি:
পণ্য এবং পরিষেবা! +ProductVatMassChangeDesc=This tool updates the VAT rate defined on ALL products and services! MassBarcodeInit=ভর বারকোড init MassBarcodeInitDesc=এই পৃষ্ঠাটি এমন বস্তুগুলিতে একটি বারকোড শুরু করতে ব্যবহার করা যেতে পারে যেগুলিতে বারকোড সংজ্ঞায়িত নেই৷ মডিউল বারকোডের সেটআপ সম্পূর্ণ হওয়ার আগে পরীক্ষা করুন। ProductAccountancyBuyCode=অ্যাকাউন্টিং কোড (ক্রয়) @@ -208,11 +208,6 @@ unitSET=সেট unitS=দ্বিতীয় unitH=ঘন্টা unitD=দিন -unitG=ছোলা -unitM=মিটার -unitLM=রৈখিক মিটার -unitM2=বর্গ মিটার -unitM3=ঘন মিটার unitL=লিটার unitT=টন unitKG=কেজি @@ -221,6 +216,7 @@ unitMG=মিলিগ্রাম unitLB=পাউন্ড unitOZ=আউন্স unitM=মিটার +unitLM=রৈখিক মিটার unitDM=dm unitCM=সেমি unitMM=মিমি @@ -361,7 +357,7 @@ ProductAttributeName=বৈকল্পিক বৈশিষ্ট্য %s ProductAttribute=বৈকল্পিক বৈশিষ্ট্য ProductAttributeDeleteDialog=আপনি কি এই বৈশিষ্ট্যটি মুছে ফেলার বিষয়ে নিশ্চিত? সমস্ত মান মুছে ফেলা হবে ProductAttributeValueDeleteDialog=আপনি কি এই অ্যাট্রিবিউটের "%s" রেফারেন্স সহ "%s" মানটি মুছতে চান? -ProductCombinationDeleteDialog=আপনি কি "%sপণ্যের বৈকল্পিকটি মুছে ফেলার বিষয়ে নিশ্চিত? >"? +ProductCombinationDeleteDialog=Are you sure want to delete the variant of the product "%s"? ProductCombinationAlreadyUsed=ভেরিয়েন্টটি মুছে ফেলার সময় একটি ত্রুটি ছিল৷ অনুগ্রহ করে চেক করুন এটি কোন বস্তুতে ব্যবহার করা হচ্ছে না ProductCombinations=বৈকল্পিক PropagateVariant=বৈকল্পিক প্রচার করুন @@ -437,4 +433,6 @@ ModifyValueExtrafields = একটি অতিরিক্ত ক্ষেত OrProductsWithCategories=অথবা ট্যাগ/বিভাগ সহ পণ্য WarningTransferBatchStockMouvToGlobal = আপনি যদি এই পণ্যটিকে ডিসিরিয়ালাইজ করতে চান তবে এর সমস্ত সিরিয়ালাইজড স্টক গ্লোবাল স্টকে রূপান্তরিত হবে WarningConvertFromBatchToSerial=যদি আপনার কাছে বর্তমানে পণ্যটির জন্য 2 এর পরিমাণ বেশি বা সমান থাকে, তাহলে এই পছন্দে স্যুইচ করার অর্থ হল আপনার কাছে একই ব্যাচের বিভিন্ন বস্তু সহ একটি পণ্য থাকবে (যদিও আপনি একটি অনন্য সিরিয়াল নম্বর চান)। এটি ঠিক করার জন্য একটি ইনভেন্টরি বা ম্যানুয়াল স্টক মুভমেন্ট না হওয়া পর্যন্ত ডুপ্লিকেটটি থাকবে। +AllowStockMovementVariantParent=Also records stock movements on parent products of variant products +AllowStockMovementVariantParentHelp=By default, a parent of a variant is a virtual product, so no stock is managed for it. By enabling this option, a stock will be managed for parent products and each time a stock quantity is modified for a variant product, the same quantity will be modified for the parent product. You should not need this option, except if you are using variant to manage the same product than parent (but with different descriptions, prices...) ConfirmSetToDraftInventory=আপনি কি খসড়া স্থিতিতে ফিরে যাওয়ার বিষয়ে নিশ্চিত?
বর্তমানে ইনভেন্টরিতে সেট করা পরিমাণগুলি পুনরায় সেট করা হবে৷ diff --git a/htdocs/langs/bn_BD/receptions.lang b/htdocs/langs/bn_BD/receptions.lang index c2241ca9273..aaab508f722 100644 --- a/htdocs/langs/bn_BD/receptions.lang +++ b/htdocs/langs/bn_BD/receptions.lang @@ -5,8 +5,6 @@ RefReception=রেফ. অভ্যর্থনা Reception=অভ্যর্থনা Receptions=অভ্যর্থনা AllReceptions=সমস্ত অভ্যর্থনা -Reception=অভ্যর্থনা -Receptions=অভ্যর্থনা ShowReception=অভ্যর্থনা দেখান ReceptionsArea=অভ্যর্থনা এলাকা ListOfReceptions=অভ্যর্থনা তালিকা @@ -34,7 +32,7 @@ StatusReceptionProcessedShort=প্রক্রিয়াকৃত ReceptionSheet=অভ্যর্থনা শীট ValidateReception=অভ্যর্থনা যাচাই ConfirmDeleteReception=আপনি কি নিশ্চিত আপনি এই অভ্যর্থনা মুছে দিতে চান? -ConfirmValidateReception=আপনি কি %sরেফারেন্স সহ এই অভ্যর্থনাটি যাচাই করতে চান >? +ConfirmValidateReception=Are you sure you want to validate this reception with the reference %s? ConfirmCancelReception=আপনি কি নিশ্চিত আপনি এই অভ্যর্থনা বাতিল করতে চান? StatsOnReceptionsOnlyValidated=পরিসংখ্যান শুধুমাত্র বৈধ অভ্যর্থনা উপর পরিচালিত. ব্যবহৃত তারিখ হল অভ্যর্থনার বৈধতার তারিখ (পরিকল্পিত ডেলিভারির তারিখ সবসময় জানা যায় না)। SendReceptionByEMail=ইমেল দ্বারা অভ্যর্থনা পাঠান diff --git a/htdocs/langs/bn_BD/sendings.lang b/htdocs/langs/bn_BD/sendings.lang index af13563e4ec..d439eb817a3 100644 --- a/htdocs/langs/bn_BD/sendings.lang +++ b/htdocs/langs/bn_BD/sendings.lang @@ -39,7 +39,7 @@ StatusSendingValidatedShort=Validated StatusSendingProcessedShort=প্রক্রিয়াকৃত SendingSheet=চালান শীট ConfirmDeleteSending=আপনি কি এই চালানটি মুছে ফেলার বিষয়ে নিশ্চিত? -ConfirmValidateSending=আপনি কি নিশ্চিত %sরেফারেন্স সহ এই চালানটি যাচাই করতে চান >? +ConfirmValidateSending=Are you sure you want to validate this shipment with the reference %s? ConfirmCancelSending=আপনি কি নিশ্চিত আপনি এই চালান বাতিল করতে চান? DocumentModelMerou=Merou A5 মডেল WarningNoQtyLeftToSend=সতর্কতা, কোনো পণ্য পাঠানোর অপেক্ষায় নেই। @@ -81,6 +81,6 @@ CreationOptions=চালান তৈরির সময় উপলব্ধ ShipmentDistribution=চালান বিতরণ ErrorTooManyCombinationBatchcode=%s লাইনের জন্য কোনও প্রেরণ নেই কারণ গুদাম, পণ্য, ব্যাচ কোডের অনেকগুলি সংমিশ্রণ পাওয়া গেছে (%s)৷ -ErrorNoCombinationBatchcode=warehouse-product-lot/serial (%s, %s, %s) স্টকে পাওয়া যায়নি৷ +ErrorNoCombinationBatchcode=Could not save the line %s as the combination of warehouse-product-lot/serial (%s, %s, %s) was not found in stock. ErrorTooMuchShipped=পাঠানোর পরিমাণ %s লাইনের জন্য অর্ডার করা পরিমাণের চেয়ে বেশি হওয়া উচিত নয় diff --git a/htdocs/langs/bn_BD/stocks.lang b/htdocs/langs/bn_BD/stocks.lang index 1c290105cba..721f795be1f 100644 --- a/htdocs/langs/bn_BD/stocks.lang +++ b/htdocs/langs/bn_BD/stocks.lang @@ -164,14 +164,14 @@ InventoryCode=মুভমেন্ট বা ইনভেন্টরি কো IsInPackage=প্যাকেজের মধ্যে রয়েছে WarehouseAllowNegativeTransfer=স্টক নেতিবাচক হতে পারে qtyToTranferIsNotEnough=আপনার সোর্স গুদাম থেকে আপনার কাছে পর্যাপ্ত স্টক নেই এবং আপনার সেটআপ নেতিবাচক স্টকের অনুমতি দেয় না। -qtyToTranferLotIsNotEnough=আপনার কাছে পর্যাপ্ত স্টক নেই, এই লট নম্বরের জন্য, আপনার সোর্স গুদাম থেকে এবং আপনার সেটআপ নেতিবাচক স্টক অনুমোদন করে না (পণ্যের জন্য Qty '%s' লট সহ '%s' হল %s গুদাম '%s')। +qtyToTranferLotIsNotEnough=You don't have enough stock, for this lot number, from your source warehouse and your setup does not allow negative stocks (Qty for product '%s' with lot '%s' is %s in warehouse '%s'). ShowWarehouse=গুদাম দেখান MovementCorrectStock=পণ্যের জন্য স্টক সংশোধন %s MovementTransferStock=পণ্য %s অন্য গুদামে স্টক স্থানান্তর BatchStockMouvementAddInGlobal=ব্যাচ স্টক গ্লোবাল স্টকে চলে যায় (পণ্য আর ব্যাচ ব্যবহার করে না) InventoryCodeShort=Inv./Mov. কোড NoPendingReceptionOnSupplierOrder=খোলা ক্রয় আদেশের কারণে কোনো মুলতুবি অভ্যর্থনা -ThisSerialAlreadyExistWithDifferentDate=এই লট/ক্রমিক নম্বর (%s) আগে থেকেই আছে কিন্তু সাথে আছে বিভিন্ন খাবার বা বিক্রির তারিখ (%s পাওয়া গেছে কিন্তু আপনি লিখুন span class='notranslate'>%s)। +ThisSerialAlreadyExistWithDifferentDate=This lot/serial number (%s) already exists but with different eatby or sellby date (found %s but you enter %s). OpenAnyMovement=খোলা (সমস্ত আন্দোলন) OpenInternal=খোলা (শুধুমাত্র অভ্যন্তরীণ আন্দোলন) UseDispatchStatus=ক্রয় অর্ডার রিসেপশনে পণ্য লাইনের জন্য একটি প্রেরণের অবস্থা (অনুমোদন/প্রত্যাখ্যান) ব্যবহার করুন @@ -253,7 +253,7 @@ DisableStockChangeOfSubProduct=এই আন্দোলনের সময় ImportFromCSV=আন্দোলনের CSV তালিকা আমদানি করুন ChooseFileToImport=ফাইল আপলোড করুন তারপর সোর্স ইম্পোর্ট ফাইল হিসাবে ফাইল নির্বাচন করতে %s আইকনে ক্লিক করুন... SelectAStockMovementFileToImport=আমদানি করার জন্য একটি স্টক আন্দোলন ফাইল নির্বাচন করুন -InfoTemplateImport=আপলোড করা ফাইলের এই ফর্ম্যাট থাকা দরকার (* বাধ্যতামূলক ক্ষেত্রগুলি):
উৎস গুদাম* | লক্ষ্য গুদাম* | পণ্য* | পরিমাণ* | লট/ক্রমিক নম্বর
CSV অক্ষর বিভাজক হতে হবে "%s span class='notranslate'>
" +InfoTemplateImport=Uploaded file needs to have this format (* are mandatory fields):
Source Warehouse* | Target Warehouse* | Product* | Quantity* | Lot/serial number
CSV character separator must be "%s" LabelOfInventoryMovemement=ইনভেন্টরি %s ReOpen=আবার খুলুন ConfirmFinish=আপনি জায় বন্ধ নিশ্চিত করুন? আপনি ইনভেন্টরিতে প্রবেশ করা আসল পরিমাণে আপনার স্টক আপডেট করতে এটি সমস্ত স্টক মুভমেন্ট তৈরি করবে। @@ -282,7 +282,7 @@ ModuleStockTransferName=উন্নত স্টক স্থানান্ত ModuleStockTransferDesc=স্টক ট্রান্সফারের উন্নত ব্যবস্থাপনা, ট্রান্সফার শীট জেনারেশন সহ StockTransferNew=নতুন স্টক স্থানান্তর StockTransferList=স্টক স্থানান্তর তালিকা -ConfirmValidateStockTransfer=আপনি কি %sরেফারেন্স সহ এই স্টক স্থানান্তর যাচাই করতে চান? span>? +ConfirmValidateStockTransfer=Are you sure you want to validate this stocks transfer with the reference %s ? ConfirmDestock=স্থানান্তরের সাথে স্টক হ্রাস %s ConfirmDestockCancel=স্থানান্তর %s সহ স্টক হ্রাস বাতিল করুন DestockAllProduct=মজুদ কমে যাওয়া diff --git a/htdocs/langs/bn_BD/stripe.lang b/htdocs/langs/bn_BD/stripe.lang index 000eeb5853c..71cd71d1690 100644 --- a/htdocs/langs/bn_BD/stripe.lang +++ b/htdocs/langs/bn_BD/stripe.lang @@ -22,7 +22,7 @@ ToOfferALinkForOnlinePaymentOnContractLine=একটি চুক্তি ল ToOfferALinkForOnlinePaymentOnFreeAmount=একটি %s যেকোন পরিমাণের অনলাইন পেমেন্ট পেজ অফার করার জন্য URL কোনো বিদ্যমান বস্তু ছাড়াই ToOfferALinkForOnlinePaymentOnMemberSubscription=সদস্য সদস্যতার জন্য একটি %s অনলাইন পেমেন্ট পৃষ্ঠা অফার করার URL ToOfferALinkForOnlinePaymentOnDonation=অনুদানের অর্থ প্রদানের জন্য একটি %s অনলাইন পেমেন্ট পৃষ্ঠা অফার করার URL -YouCanAddTagOnUrl=এছাড়াও আপনি url প্যারামিটার যোগ করতে পারেন &tag=মানb0ae64758bac> class='notranslate'> আপনার নিজস্ব অর্থপ্রদানের মন্তব্য ট্যাগ যোগ করার জন্য সেই URLগুলির যে কোনো একটিতে (শুধুমাত্র অর্থপ্রদানের জন্য বাধ্যতামূলক) কোন বিদ্যমান বস্তু ছাড়া পেমেন্টের URL, আপনি প্যারামিটার যোগ করতে পারেন &noidempotency=1 তাই একই ট্যাগের সাথে একই লিঙ্ক বেশ কয়েকবার ব্যবহার করা যেতে পারে (কিছু পেমেন্ট মোড এই প্যারামিটার ব্যতীত প্রতিটি আলাদা লিঙ্কের জন্য পেমেন্ট 1-এ সীমাবদ্ধ করতে পারে) +YouCanAddTagOnUrl=You can also add url parameter &tag=value to any of those URL (mandatory only for payment not linked to an object) to add your own payment comment tag.
For the URL of payments with no existing object, you may also add the parameter &noidempotency=1 so the same link with same tag can be used several times (some payment mode may limit the payment to 1 for each different link without this parameter) SetupStripeToHavePaymentCreatedAutomatically=স্বয়ংক্রিয়ভাবে পেমেন্ট তৈরি করার জন্য url %s দিয়ে আপনার স্ট্রাইপ সেটআপ করুন স্ট্রাইপ দ্বারা যাচাই করা হয়েছে। AccountParameter=অ্যাকাউন্ট প্যারামিটার UsageParameter=ব্যবহারের পরামিতি diff --git a/htdocs/langs/bn_BD/trips.lang b/htdocs/langs/bn_BD/trips.lang index b2e5129042d..0aa0b21727e 100644 --- a/htdocs/langs/bn_BD/trips.lang +++ b/htdocs/langs/bn_BD/trips.lang @@ -45,9 +45,9 @@ expenseReportRangeMoreThan=%d এর চেয়ে বেশি expenseReportTotalForFive=d = 5 সহ উদাহরণ ExpenseReportApplyTo=আবেদন করতে ExpenseReportApproved=একটি ব্যয় প্রতিবেদন অনুমোদন করা হয় -ExpenseReportApprovedMessage=ব্যয় প্রতিবেদন %s অনুমোদিত হয়েছে।
- ব্যবহারকারী: %s class='notranslate'>
- এর দ্বারা অনুমোদিত: %s
খরচ প্রতিবেদন দেখানোর জন্য এখানে ক্লিক করুন: span class='notranslate'>%s +ExpenseReportApprovedMessage=The expense report %s was approved.
- User: %s
- Approved by: %s
Click here to show the expense report: %s ExpenseReportCanceled=একটি খরচ রিপোর্ট বাতিল করা হয়েছে -ExpenseReportCanceledMessage=ব্যয় প্রতিবেদন %s বাতিল করা হয়েছে।
- ব্যবহারকারী: %s class='notranslate'>
- এর দ্বারা বাতিল করা হয়েছে: %s
- বাতিলের উদ্দেশ্য: %s
ব্যয় প্রতিবেদন দেখানোর জন্য এখানে ক্লিক করুন: %s +ExpenseReportCanceledMessage=The expense report %s was canceled.
- User: %s
- Canceled by: %s
- Motive for cancellation: %s
Click here to show the expense report: %s ExpenseReportConstraintViolationError=সর্বাধিক পরিমাণ ছাড়িয়ে গেছে (নিয়ম %s): %s %s থেকে বেশি ( হারাম ছাড়িয়ে যাওয়া) ExpenseReportConstraintViolationWarning=সর্বাধিক পরিমাণ ছাড়িয়ে গেছে (নিয়ম %s): %s %s থেকে বেশি ( অনুমোদনের চেয়ে বেশি) ExpenseReportDateEnd=তারিখ শেষ @@ -62,13 +62,13 @@ ExpenseReportPaidMessage=খরচের রিপোর্ট %s দেওয ExpenseReportPayment=ব্যয় প্রতিবেদন প্রদান ExpenseReportRef=রেফ. ব্যয় রিপোর্ট ExpenseReportRefused=একটি খরচ রিপোর্ট প্রত্যাখ্যান করা হয়েছে -ExpenseReportRefusedMessage=ব্যয়ের প্রতিবেদন %s প্রত্যাখ্যান করা হয়েছে।
- ব্যবহারকারী: %s class='notranslate'>
- প্রত্যাখ্যান করেছেন: %s
- প্রত্যাখ্যানের উদ্দেশ্য: %s
ব্যয় প্রতিবেদন দেখানোর জন্য এখানে ক্লিক করুন: %s +ExpenseReportRefusedMessage=The expense report %s was refused.
- User: %s
- Refused by: %s
- Motive for refusal: %s
Click here to show the expense report: %s ExpenseReportRestrictive=হারাম ছাড়িয়ে গেছে ExpenseReportRuleErrorOnSave=ত্রুটি: %s ExpenseReportRuleSave=খরচ রিপোর্ট নিয়ম সংরক্ষিত ExpenseReportRulesDesc=আপনি ব্যয় প্রতিবেদনের জন্য সর্বাধিক পরিমাণের নিয়ম নির্ধারণ করতে পারেন। এই নিয়মগুলি প্রয়োগ করা হবে যখন একটি নতুন ব্যয় একটি ব্যয় প্রতিবেদনে যোগ করা হয় ExpenseReportWaitingForApproval=একটি নতুন ব্যয় প্রতিবেদন অনুমোদনের জন্য জমা দেওয়া হয়েছে -ExpenseReportWaitingForApprovalMessage=একটি নতুন ব্যয় প্রতিবেদন জমা দেওয়া হয়েছে এবং অনুমোদনের জন্য অপেক্ষা করছে৷
- ব্যবহারকারী: %s
- সময়কাল: %s
বৈধকরণ করতে এখানে ক্লিক করুন: b0849fz span> +ExpenseReportWaitingForApprovalMessage=A new expense report has been submitted and is waiting for approval.
- User: %s
- Period: %s
Click here to validate: %s ExpenseReportWaitingForReApproval=পুনঃঅনুমোদনের জন্য একটি ব্যয় প্রতিবেদন জমা দেওয়া হয়েছে ExpenseReportWaitingForReApprovalMessage=একটি ব্যয় প্রতিবেদন জমা দেওয়া হয়েছে এবং পুনরায় অনুমোদনের জন্য অপেক্ষা করছে৷
The %s, আপনি এর জন্য ব্যয় প্রতিবেদন অনুমোদন করতে অস্বীকার করেছেন এই কারণে: %s।
একটি নতুন সংস্করণ প্রস্তাব করা হয়েছে এবং আপনার অনুমোদনের জন্য অপেক্ষা করছে।
- ব্যবহারকারী: %s
- সময়কাল: b0ecb2ecb9fz84
প্রমাণিত করতে এখানে ক্লিক করুন: %s ExpenseReportsIk=মাইলেজ চার্জ কনফিগারেশন diff --git a/htdocs/langs/bn_BD/users.lang b/htdocs/langs/bn_BD/users.lang index 53136f447f9..ffd6fb68652 100644 --- a/htdocs/langs/bn_BD/users.lang +++ b/htdocs/langs/bn_BD/users.lang @@ -26,7 +26,7 @@ ConfirmDeleteUser=আপনি কি নিশ্চিত যে আপনি ConfirmDeleteGroup=আপনি কি %s গোষ্ঠী মুছে ফেলার বিষয়ে নিশ্চিত? ConfirmEnableUser=আপনি কি ব্যবহারকারী %s সক্ষম করার বিষয়ে নিশ্চিত? ConfirmReinitPassword=আপনি কি নিশ্চিত যে আপনি ব্যবহারকারীর জন্য একটি নতুন পাসওয়ার্ড তৈরি করতে চান %s? -ConfirmSendNewPassword=আপনি কি নিশ্চিত যে আপনি ব্যবহারকারীর জন্য নতুন পাসওয়ার্ড তৈরি এবং পাঠাতে চান %s
? +ConfirmSendNewPassword=Are you sure you want to generate and send new password for user %s? NewUser=নতুন ব্যবহারকারী CreateUser=ব্যবহারকারী তৈরি করুন LoginNotDefined=লগইন সংজ্ঞায়িত করা হয় না. @@ -45,7 +45,7 @@ CreateGroup=গ্রুপ তৈরি করুন RemoveFromGroup=দল থেকে বহিষ্কার করা PasswordChangedAndSentTo=পাসওয়ার্ড পরিবর্তন করে %s-এ পাঠানো হয়েছে। PasswordChangeRequest=%s-এর পাসওয়ার্ড পরিবর্তন করার অনুরোধ করুন -PasswordChangeRequestSent=%s এর পাসওয়ার্ড পরিবর্তন করার অনুরোধ %s। +PasswordChangeRequestSent=Request to change password for %s sent to %s. IfLoginExistPasswordRequestSent=যদি এই লগইনটি একটি বৈধ অ্যাকাউন্ট হয় (একটি বৈধ ইমেল সহ), পাসওয়ার্ড পুনরায় সেট করার জন্য একটি ইমেল পাঠানো হয়েছে৷ IfEmailExistPasswordRequestSent=যদি এই ইমেলটি একটি বৈধ অ্যাকাউন্ট হয়, তাহলে পাসওয়ার্ড রিসেট করার জন্য একটি ইমেল পাঠানো হয়েছে (আপনি কিছু না পেলে আপনার স্প্যাম ফোল্ডার চেক করতে ভুলবেন না) ConfirmPasswordReset=পাসওয়ার্ড রিসেট নিশ্চিত করুন diff --git a/htdocs/langs/bn_BD/website.lang b/htdocs/langs/bn_BD/website.lang index a33ef7b476f..da2c15414c5 100644 --- a/htdocs/langs/bn_BD/website.lang +++ b/htdocs/langs/bn_BD/website.lang @@ -49,11 +49,11 @@ SetHereVirtualHost=Apache/NGinx এর সাথে ব্যবহার ক ExampleToUseInApacheVirtualHostConfig=Apache ভার্চুয়াল হোস্ট সেটআপে ব্যবহার করার উদাহরণ: YouCanAlsoTestWithPHPS=PHP এম্বেডেড সার্ভারের সাথে ব্যবহার করুন
উন্নত পরিবেশে, আপনি করতে পারেন
php -S 0.0.0.0 চালিয়ে PHP এমবেডেড ওয়েব সার্ভার (PHP 5.5 প্রয়োজনীয়) দিয়ে সাইটটি পরীক্ষা করতে পছন্দ করুন :8080 -t %s YouCanAlsoDeployToAnotherWHP=অন্য Dolibarr হোস্টিং প্রদানকারীর সাথে আপনার ওয়েব সাইট চালান
ইন্টারনেটে Apache বা NGinx-এর মতো কোনো ওয়েব সার্ভার উপলব্ধ নেই, আপনি আপনার ওয়েব সাইটটিকে অন্য Dolibarr হোস্টিং প্রদানকারী দ্বারা প্রদত্ত অন্য Dolibarr উদাহরণে রপ্তানি এবং আমদানি করতে পারেন যা ওয়েবসাইট মডিউলের সাথে সম্পূর্ণ একীকরণ প্রদান করে। আপনি https://saas.dolibarr.org-এ কিছু Dolibarr হোস্টিং প্রদানকারীর একটি তালিকা পেতে পারেন -CheckVirtualHostPerms=ভার্চুয়াল হোস্ট ব্যবহারকারীর (উদাহরণস্বরূপ www-ডেটা) %sb0a65d071f6fcz9 আছে কিনা পরীক্ষা করুন ফাইলগুলিতে
%s
+CheckVirtualHostPerms=Check also that the virtual host user (for example www-data) has %s permissions on files into
%s ReadPerm=পড়ুন WritePerm=লিখুন TestDeployOnWeb=ওয়েবে পরীক্ষা/নিয়োগ করুন -PreviewSiteServedByWebServer=একটি নতুন ট্যাবে %s পূর্বরূপ দেখুন।

%s একটি বহিরাগত ওয়েব সার্ভার (যেমন Apache, NginxIS, Nginx) দ্বারা পরিবেশিত হবে ) ডিরেক্টরিতে নির্দেশ করার আগে আপনাকে অবশ্যই এই সার্ভারটি ইনস্টল এবং সেটআপ করতে হবে:
%s span>
বাহ্যিক সার্ভার দ্বারা পরিবেশিত URL:
%s +PreviewSiteServedByWebServer=Preview %s in a new tab.

The %s will be served by an external web server (like Apache, Nginx, IIS). You must install and setup this server before to point to directory:
%s
URL served by external server:
%s PreviewSiteServedByDolibarr=একটি নতুন ট্যাবে %s পূর্বরূপ দেখুন।

%s Dolibarr সার্ভার দ্বারা পরিবেশন করা হবে তাই এটির কোনো অতিরিক্ত ওয়েব সার্ভারের প্রয়োজন নেই (যেমন Apache, Nginx, IIS) ইনস্টল করতে হবে।
অসুবিধে হল যে পৃষ্ঠাগুলির URLগুলি ব্যবহারকারী বান্ধব নয় এবং আপনার Dolibarr এর পথ দিয়ে শুরু হয়৷


এতে আপনার নিজস্ব বাহ্যিক ওয়েব সার্ভার ব্যবহার করতে এই ওয়েব সাইটটি পরিবেশন করুন, আপনার ওয়েব সার্ভারে একটি ভার্চুয়াল হোস্ট তৈরি করুন যা নির্দেশিকা নির্দেশ করে
%s
তারপর এই ওয়েবসাইটের বৈশিষ্ট্যগুলিতে এই ভার্চুয়াল সার্ভারের নাম লিখুন এবং ক্লিক করুন লিঙ্ক "টেস্ট/ডেপ্লয় অন ওয়েব"। VirtualHostUrlNotDefined=বহিরাগত ওয়েব সার্ভার দ্বারা পরিবেশিত ভার্চুয়াল হোস্টের URL সংজ্ঞায়িত করা হয়নি NoPageYet=এখনো কোনো পৃষ্ঠা নেই @@ -63,7 +63,7 @@ YouCanEditHtmlSourceckeditor=আপনি সম্পাদকের "উৎস YouCanEditHtmlSource=
You can include PHP code into this source using tags <?php ?>. The following global variables are available: $conf, $db, $mysoc, $user, $website, $websitepage, $weblangs, $pagelangs.

You can also include content of another Page/Container with the following syntax:
<?php includeContainer('alias_of_container_to_include'); ?>

You can make a redirect to another Page/Container with the following syntax (Note: do not output any content before a redirect):
<?php redirectToContainer('alias_of_container_to_redirect_to'); ?>

To add a link to another page, use the syntax:
<a href="alias_of_page_to_link_to.php">mylink<a>

To include a link to download a file stored into the documents directory, use the document.php wrapper:
Example, for a file into documents/ecm (need to be logged), syntax is:
<a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext">
For a file into documents/medias (open directory for public access), syntax is:
<a href="/document.php?modulepart=medias&file=[relative_dir/]filename.ext">
For a file shared with a share link (open access using the sharing hash key of file), syntax is:
<a href="/document.php?hashp=publicsharekeyoffile">
YouCanEditHtmlSource1=
To include an image stored into the documents directory, use the viewimage.php wrapper.
Example, for an image into documents/medias (open directory for public access), syntax is:
<img src="/viewimage.php?modulepart=medias&file=[relative_dir/]filename.ext">
YouCanEditHtmlSource2=একটি শেয়ার লিঙ্কের সাথে শেয়ার করা একটি ছবির জন্য (ফাইলের শেয়ারিং হ্যাশ কী ব্যবহার করে খোলা অ্যাক্সেস), সিনট্যাক্স হল:
<img src="/viewimage.php?hashp=12345679012...">016f7f7f7012
-YouCanEditHtmlSource3=একটি PHP বস্তুর ছবির URL পেতে,
< ব্যবহার করুন span>img src="<?php print getImagePublicURLOfObject($object, 1, "_small") ?> class='notranslate'>>
+YouCanEditHtmlSource3=To get the URL of the image of a PHP object, use
<img src="<?php print getImagePublicURLOfObject($object, 1, "_small") ?>">
YouCanEditHtmlSourceMore=
এইচটিএমএল বা ডায়নামিক কোডের আরও উদাহরণ উইকি ডকুমেন্টেশনb0e40dc6587এ উপলব্ধ >।
ClonePage=ক্লোন পৃষ্ঠা/ধারক CloneSite=ক্লোন সাইট @@ -118,7 +118,7 @@ DeleteAlsoMedias=এই ওয়েবসাইটের জন্য নির MyWebsitePages=আমার ওয়েবসাইট পেজ SearchReplaceInto=অনুসন্ধান | মধ্যে প্রতিস্থাপন ReplaceString=নতুন স্ট্রিং -CSSContentTooltipHelp=এখানে CSS কন্টেন্ট লিখুন। অ্যাপ্লিকেশনের CSS-এর সাথে কোনো দ্বন্দ্ব এড়াতে, .bodywebsite ক্লাসের সাথে সমস্ত ঘোষণা আগে-প্রান্তে রাখতে ভুলবেন না। যেমন:

#mycssselector, input.myclass:hover { ...
অবশ্যই
।bodywebsite #mycssselector, .bodywebsite input.myclass:হোভার { ... b0342fccfda19>b0342fccfda19
দ্রষ্টব্য: যদি আপনার কাছে এই উপসর্গ ছাড়া একটি বড় ফাইল থাকে, তাহলে আপনি 'lessc' ব্যবহার করে এটিকে রূপান্তর করতে .bodywebsite উপসর্গটি সর্বত্র যুক্ত করতে পারেন। +CSSContentTooltipHelp=Enter here CSS content. To avoid any conflict with the CSS of the application, be sure to prepend all declaration with the .bodywebsite class. For example:

#mycssselector, input.myclass:hover { ... }
must be
.bodywebsite #mycssselector, .bodywebsite input.myclass:hover { ... }

Note: If you have a large file without this prefix, you can use 'lessc' to convert it to append the .bodywebsite prefix everywhere. LinkAndScriptsHereAreNotLoadedInEditor=সতর্কতা: এই বিষয়বস্তু আউটপুট শুধুমাত্র যখন সাইট একটি সার্ভার থেকে অ্যাক্সেস করা হয়. এটি সম্পাদনা মোডে ব্যবহার করা হয় না তাই যদি আপনাকে জাভাস্ক্রিপ্ট ফাইলগুলিকে সম্পাদনা মোডেও লোড করতে হয়, তাহলে পৃষ্ঠায় আপনার ট্যাগ 'script src=...' যোগ করুন। Dynamiccontent=গতিশীল বিষয়বস্তু সহ একটি পৃষ্ঠার নমুনা EditInLineOnOff=মোড 'ইনলাইন সম্পাদনা' হল %s diff --git a/htdocs/langs/bn_BD/withdrawals.lang b/htdocs/langs/bn_BD/withdrawals.lang index 588766c7ded..827fd3290f1 100644 --- a/htdocs/langs/bn_BD/withdrawals.lang +++ b/htdocs/langs/bn_BD/withdrawals.lang @@ -47,7 +47,7 @@ MakeBankTransferOrder=একটি ক্রেডিট স্থানান WithdrawRequestsDone=%s সরাসরি ডেবিট পেমেন্টের অনুরোধ রেকর্ড করা হয়েছে BankTransferRequestsDone=%s ক্রেডিট ট্রান্সফার অনুরোধ রেকর্ড করা হয়েছে ThirdPartyBankCode=তৃতীয় পক্ষের ব্যাঙ্ক কোড -NoInvoiceCouldBeWithdrawed=কোনো চালান সফলভাবে প্রক্রিয়া করা হয়নি। যাচাই করুন যে চালানগুলি একটি বৈধ IBAN সহ কোম্পানিগুলিতে রয়েছে এবং IBAN এর একটি UMR (অনন্য ম্যান্ডেট রেফারেন্স) মোড রয়েছে %s span class='notranslate'>
। +NoInvoiceCouldBeWithdrawed=No invoice processed successfully. Check that invoices are on companies with a valid IBAN and that IBAN has a UMR (Unique Mandate Reference) with mode %s. NoInvoiceCouldBeWithdrawedSupplier=কোনো চালান সফলভাবে প্রক্রিয়া করা হয়নি। একটি বৈধ IBAN সহ কোম্পানিগুলিতে চালানগুলি আছে কিনা তা পরীক্ষা করুন৷ NoSalariesCouldBeWithdrawed=কোন বেতন সফলভাবে প্রক্রিয়া করা হয়েছে. একটি বৈধ IBAN সহ ব্যবহারকারীদের বেতন আছে কিনা তা পরীক্ষা করুন। WithdrawalCantBeCreditedTwice=এই প্রত্যাহার রসিদ ইতিমধ্যেই ক্রেডিট হিসাবে চিহ্নিত করা হয়েছে; এটি দুবার করা যাবে না, কারণ এটি সম্ভাব্য ডুপ্লিকেট পেমেন্ট এবং ব্যাঙ্ক এন্ট্রি তৈরি করবে। @@ -152,7 +152,7 @@ ADDDAYS=মৃত্যুদন্ডের তারিখে দিন যো NoDefaultIBANFound=এই তৃতীয় পক্ষের জন্য কোনো ডিফল্ট IBAN পাওয়া যায়নি ### Notifications InfoCreditSubject=ব্যাঙ্কের সরাসরি ডেবিট পেমেন্ট অর্ডার %s পেমেন্ট -InfoCreditMessage=সরাসরি ডেবিট পেমেন্ট অর্ডার %s ব্যাঙ্কের দ্বারা দেওয়া হয়েছে
প্রদানের ডেটা: %s +InfoCreditMessage=সরাসরি ডেবিট পেমেন্ট অর্ডার %s ব্যাঙ্কের দ্বারা দেওয়া হয়েছে
প্রদানের ডেটা: %s InfoTransSubject=ব্যাঙ্কে সরাসরি ডেবিট পেমেন্ট অর্ডার %s ট্রান্সমিশন InfoTransMessage=সরাসরি ডেবিট পেমেন্ট অর্ডার %s ব্যাঙ্কে পাঠানো হয়েছে %s %s .

InfoTransData=পরিমাণ: %s
পদ্ধতি: %s
তারিখ: %s @@ -171,4 +171,3 @@ SalaryWaitingWithdraw=ক্রেডিট ট্রান্সফারের RefSalary=বেতন NoSalaryInvoiceToWithdraw='%s'-এর জন্য কোনো বেতন অপেক্ষা করছে না। একটি অনুরোধ করতে বেতন কার্ডে '%s' ট্যাবে যান৷ SalaryInvoiceWaitingWithdraw=ক্রেডিট ট্রান্সফারের মাধ্যমে পেমেন্টের অপেক্ষায় বেতন - diff --git a/htdocs/langs/bn_IN/accountancy.lang b/htdocs/langs/bn_IN/accountancy.lang index 5746cd97be3..c4637b5303f 100644 --- a/htdocs/langs/bn_IN/accountancy.lang +++ b/htdocs/langs/bn_IN/accountancy.lang @@ -335,7 +335,6 @@ CategoryDeleted=অ্যাকাউন্টিং অ্যাকাউন্ AccountingJournals=অ্যাকাউন্টিং জার্নাল AccountingJournal=অ্যাকাউন্টিং জার্নাল NewAccountingJournal=নতুন অ্যাকাউন্টিং জার্নাল -ShowAccountingJournal=অ্যাকাউন্টিং জার্নাল দেখান NatureOfJournal=জার্নালের প্রকৃতি AccountingJournalType1=বিবিধ অপারেশন AccountingJournalType2=বিক্রয় @@ -346,14 +345,14 @@ AccountingJournalType8=ইনভেন্টরি AccountingJournalType9=ধরে রাখা উপার্জন GenerationOfAccountingEntries=অ্যাকাউন্টিং এন্ট্রি প্রজন্ম ErrorAccountingJournalIsAlreadyUse=এই জার্নাল ইতিমধ্যে ব্যবহার করা হয় -AccountingAccountForSalesTaxAreDefinedInto=দ্রষ্টব্য: বিক্রয় করের জন্য অ্যাকাউন্টিং অ্যাকাউন্ট %sমেনুতে সংজ্ঞায়িত করা হয়েছে - %s +AccountingAccountForSalesTaxAreDefinedInto=Note: Accounting account for Sales tax are defined into menu %s - %s NumberOfAccountancyEntries=এন্ট্রি সংখ্যা NumberOfAccountancyMovements=আন্দোলনের সংখ্যা ACCOUNTING_DISABLE_BINDING_ON_SALES=বিক্রয়ের ক্ষেত্রে অ্যাকাউন্টেন্সিতে বাঁধাই এবং স্থানান্তর অক্ষম করুন (কাস্টমার ইনভয়েস অ্যাকাউন্টিংয়ে বিবেচনা করা হবে না) ACCOUNTING_DISABLE_BINDING_ON_PURCHASES=ক্রয়ের ক্ষেত্রে অ্যাকাউন্টেন্সিতে বাঁধাই এবং স্থানান্তর অক্ষম করুন (বিক্রেতার চালান অ্যাকাউন্টিংয়ে বিবেচনায় নেওয়া হবে না) ACCOUNTING_DISABLE_BINDING_ON_EXPENSEREPORTS=ব্যয়ের প্রতিবেদনে হিসাববিজ্ঞানে বাঁধাই এবং স্থানান্তর অক্ষম করুন (ব্যয় প্রতিবেদন অ্যাকাউন্টিংয়ে বিবেচনা করা হবে না) ACCOUNTING_ENABLE_LETTERING=অ্যাকাউন্টিং এ লেটারিং ফাংশন সক্রিয় করুন -ACCOUNTING_ENABLE_LETTERING_DESC=যখন এই বিকল্পগুলি সক্রিয় করা হয়, আপনি প্রতিটি অ্যাকাউন্টিং এন্ট্রিতে একটি কোড সংজ্ঞায়িত করতে পারেন যাতে আপনি বিভিন্ন অ্যাকাউন্টিং আন্দোলনকে একসাথে গোষ্ঠী করতে পারেন। অতীতে, যখন বিভিন্ন জার্নাল স্বাধীনভাবে পরিচালিত হত, তখন এই বৈশিষ্ট্যটি বিভিন্ন জার্নালের আন্দোলনের লাইনগুলিকে একত্রিত করার জন্য প্রয়োজনীয় ছিল। যাইহোক, ডলিবার অ্যাকাউন্টেন্সির সাথে, এই ধরনের একটি ট্র্যাকিং কোড, যাকে বলা হয় "%s span>" ইতিমধ্যেই স্বয়ংক্রিয়ভাবে সংরক্ষিত হয়েছে, তাই একটি স্বয়ংক্রিয় অক্ষর ইতিমধ্যেই সম্পন্ন হয়েছে, ত্রুটির কোনো ঝুঁকি নেই তাই এই বৈশিষ্ট্যটি সাধারণ ব্যবহারের জন্য অকেজো হয়ে পড়েছে। ম্যানুয়াল লেটারিং বৈশিষ্ট্য শেষ ব্যবহারকারীদের জন্য সরবরাহ করা হয়েছে যারা অ্যাকাউন্টেন্সিতে ডেটা স্থানান্তর করার জন্য কম্পিউটার ইঞ্জিনকে সত্যিই বিশ্বাস করেন না। +ACCOUNTING_ENABLE_LETTERING_DESC=When this options is enabled, you can define, on each accounting entry, a code so you can group different accounting movements together. In the past, when different journals was managed independently, this feature was necessary to group movement lines of different journals together. However, with Dolibarr accountancy, such a tracking code, called "%s" is already saved automatically, so an automatic lettering is already done, with no risk of error so this feature has become useless for a common usage. Manual lettering feature is provided for end users that really don't trust the computer engine making the transfer of data in accountancy. EnablingThisFeatureIsNotNecessary=একটি কঠোর অ্যাকাউন্টিং ব্যবস্থাপনার জন্য এই বৈশিষ্ট্যটি সক্ষম করার আর প্রয়োজন নেই৷ ACCOUNTING_ENABLE_AUTOLETTERING=অ্যাকাউন্টিংয়ে স্থানান্তর করার সময় স্বয়ংক্রিয় অক্ষর সক্ষম করুন ACCOUNTING_ENABLE_AUTOLETTERING_DESC=অক্ষরের জন্য কোডটি স্বয়ংক্রিয়ভাবে তৈরি এবং বৃদ্ধি পায় এবং শেষ ব্যবহারকারী দ্বারা নির্বাচিত হয় না @@ -361,7 +360,7 @@ ACCOUNTING_LETTERING_NBLETTERS=লেটারিং কোড তৈরি ক ACCOUNTING_LETTERING_NBLETTERS_DESC=কিছু অ্যাকাউন্টিং সফ্টওয়্যার শুধুমাত্র একটি দুই-অক্ষরের কোড গ্রহণ করে। এই প্যারামিটার আপনাকে এই দিকটি সেট করতে দেয়। অক্ষরের ডিফল্ট সংখ্যা তিনটি। OptionsAdvanced=উন্নত বিকল্প ACCOUNTING_FORCE_ENABLE_VAT_REVERSE_CHARGE=সরবরাহকারী ক্রয়ের উপর ভ্যাট রিভার্স চার্জ পরিচালনা সক্রিয় করুন -ACCOUNTING_FORCE_ENABLE_VAT_REVERSE_CHARGE_DESC=যখন এই বিকল্পটি সক্রিয় থাকে, তখন আপনি সংজ্ঞায়িত করতে পারেন যে একটি সরবরাহকারী বা একটি প্রদত্ত বিক্রেতার চালানকে অবশ্যই অ্যাকাউন্টেন্সিতে স্থানান্তর করতে হবে: একটি অতিরিক্ত ডেবিট এবং একটি ক্রেডিট লাইন 2টি প্রদত্ত অ্যাকাউন্টে অ্যাকাউন্টিংয়ে তৈরি হবে "< এ সংজ্ঞায়িত অ্যাকাউন্টের চার্ট থেকে span class='notranslate'>%s" সেটআপ পৃষ্ঠা৷ +ACCOUNTING_FORCE_ENABLE_VAT_REVERSE_CHARGE_DESC=When this option is enabled, you can define that a supplier or a given vendor invoice must be transferred into accountancy differently: A additional debit and a credit line will generated into the accounting on 2 given accounts from the chart of account defined into the "%s" setup page. ## Export NotExportLettering=ফাইল তৈরি করার সময় অক্ষর রপ্তানি করবেন না diff --git a/htdocs/langs/bn_IN/admin.lang b/htdocs/langs/bn_IN/admin.lang index b92c9c8488f..f42c696134d 100644 --- a/htdocs/langs/bn_IN/admin.lang +++ b/htdocs/langs/bn_IN/admin.lang @@ -106,7 +106,7 @@ NextValueForInvoices=পরবর্তী মান (চালান) NextValueForCreditNotes=পরবর্তী মান (ক্রেডিট নোট) NextValueForDeposit=পরবর্তী মান (ডাউন পেমেন্ট) NextValueForReplacements=পরবর্তী মান (প্রতিস্থাপন) -MustBeLowerThanPHPLimit=দ্রষ্টব্য: আপনার PHP কনফিগারেশন বর্তমানে %sb09a4b739fz0b09a4b739fz0-এ আপলোড করার জন্য সর্বাধিক ফাইলের আকার সীমাবদ্ধ করে span> %s, এই প্যারামিটারের মান নির্বিশেষে +MustBeLowerThanPHPLimit=Note: your PHP configuration currently limits the maximum filesize for upload to %s %s, irrespective of the value of this parameter NoMaxSizeByPHPLimit=দ্রষ্টব্য: আপনার পিএইচপি কনফিগারেশনে কোন সীমা সেট করা নেই MaxSizeForUploadedFiles=আপলোড করা ফাইলগুলির জন্য সর্বাধিক আকার (0 যেকোন আপলোডের অনুমতি না দেওয়ার জন্য) UseCaptchaCode=লগইন পৃষ্ঠা এবং কিছু পাবলিক পৃষ্ঠায় গ্রাফিকাল কোড (ক্যাপচা) ব্যবহার করুন @@ -150,7 +150,7 @@ AllWidgetsWereEnabled=সমস্ত উপলব্ধ উইজেট সক WidgetAvailable=উইজেট উপলব্ধ PositionByDefault=ডিফল্ট অর্ডার MenusDesc=মেনু পরিচালকরা দুটি মেনু বারের বিষয়বস্তু সেট করে (অনুভূমিক এবং উল্লম্ব)। -MenusEditorDesc=মেনু এডিটর আপনাকে কাস্টম মেনু এন্ট্রি সংজ্ঞায়িত করতে দেয়। অস্থিরতা এবং স্থায়ীভাবে পৌঁছানো যায় না এমন মেনু এন্ট্রি এড়াতে সাবধানে এটি ব্যবহার করুন।
কিছু মডিউল মেনু এন্ট্রি যোগ করে (মেনু সমস্ত
বেশিরভাগই)। আপনি যদি ভুলবশত এই এন্ট্রিগুলির কিছু মুছে ফেলেন, তাহলে আপনি মডিউলটিকে নিষ্ক্রিয় এবং পুনরায় সক্রিয় করে সেগুলি পুনরুদ্ধার করতে পারেন। +MenusEditorDesc=The menu editor allows you to define custom menu entries. Use it carefully to avoid instability and permanently unreachable menu entries.
Some modules add menu entries (in menu All mostly). If you remove some of these entries by mistake, you can restore them disabling and reenabling the module. MenuForUsers=ব্যবহারকারীদের জন্য মেনু LangFile=.lang ফাইল Language_en_US_es_MX_etc=ভাষা (en_US, es_MX, ...) @@ -230,7 +230,7 @@ SeeReportPage=%s এ রিপোর্ট পৃষ্ঠা দেখুন SetOptionTo=%s বিকল্প সেট করুন %s Updated=আপডেট করা হয়েছে AchatTelechargement=কিনুন/ডাউনলোড করুন -GoModuleSetupArea=একটি নতুন মডিউল স্থাপন/ইনস্টল করতে, মডিউল সেটআপ এলাকায় যান:
%sb0e40dc6588 +GoModuleSetupArea=একটি নতুন মডিউল স্থাপন/ইনস্টল করতে, মডিউল সেটআপ এলাকায় যান: %sb0e40dc6588 DoliStoreDesc=DoliStore, Dolibarr ERP/CRM বাহ্যিক মডিউলের অফিসিয়াল মার্কেট প্লেস DoliPartnersDesc=কাস্টম-উন্নত মডিউল বা বৈশিষ্ট্যগুলি প্রদানকারী সংস্থাগুলির তালিকা৷
দ্রষ্টব্য: যেহেতু ডলিবার একটি ওপেন সোর্স অ্যাপ্লিকেশন, তাই যে কেউ পিএইচপি প্রোগ্রামিংয়ে অভিজ্ঞদের একটি মডিউল তৈরি করতে সক্ষম হওয়া উচিত। WebSiteDesc=আরো অ্যাড-অন (নন-কোর) মডিউলের জন্য বাহ্যিক ওয়েবসাইট... @@ -250,8 +250,8 @@ Security=নিরাপত্তা Passwords=পাসওয়ার্ড DoNotStoreClearPassword=ডাটাবেসে সংরক্ষিত পাসওয়ার্ড এনক্রিপ্ট করুন (প্লেন-টেক্সট হিসেবে নয়)। এই বিকল্পটি সক্রিয় করার জন্য দৃঢ়ভাবে সুপারিশ করা হয়। MainDbPasswordFileConfEncrypted=conf.php এ সংরক্ষিত ডাটাবেস পাসওয়ার্ড এনক্রিপ্ট করুন। এই বিকল্পটি সক্রিয় করার জন্য দৃঢ়ভাবে সুপারিশ করা হয়। -InstrucToEncodePass=conf.php ফাইলে পাসওয়ার্ড এনকোড করতে, লাইনটি প্রতিস্থাপন করুন b0342fccfda19b /span>$dolibarr_main_db_pass="...";b0342fccfda19 >দ্বারা
$dolibarr_main_db_pass="crypted:b0ecb2ecz87fz" span class='notranslate'>
-InstrucToClearPass=conf.php ফাইলে পাসওয়ার্ড ডিকোড (ক্লিয়ার) করতে, লাইনটি প্রতিস্থাপন করুন
$dolibarr_main_db_pass="crypted:...";$dolibarr_main_db_pass="
দ্বারা ";
+InstrucToEncodePass=To have password encoded into the conf.php file, replace the line
$dolibarr_main_db_pass="...";
by
$dolibarr_main_db_pass="crypted:%s"; +InstrucToClearPass=To have password decoded (clear) into the conf.php file, replace the line
$dolibarr_main_db_pass="crypted:...";
by
$dolibarr_main_db_pass="%s"; ProtectAndEncryptPdfFiles=উত্পন্ন পিডিএফ ফাইল রক্ষা করুন. এটি বাঞ্ছনীয় নয় কারণ এটি বাল্ক পিডিএফ তৈরি করে। ProtectAndEncryptPdfFilesDesc=একটি পিডিএফ ডকুমেন্টের সুরক্ষা এটিকে যেকোনো পিডিএফ ব্রাউজার দিয়ে পড়তে এবং মুদ্রণের জন্য উপলব্ধ রাখে। তবে এডিট ও কপি করা আর সম্ভব নয়। মনে রাখবেন যে এই বৈশিষ্ট্যটি ব্যবহার করার ফলে একটি বিশ্বব্যাপী মার্জড PDF গুলি কাজ করছে না। Feature=বৈশিষ্ট্য @@ -268,7 +268,7 @@ OtherResources=অন্যান্য উৎস ExternalResources=বাহ্যিক সম্পদ SocialNetworks=সামাজিক যোগাযোগ SocialNetworkId=সামাজিক নেটওয়ার্ক আইডি -ForDocumentationSeeWiki=ব্যবহারকারী বা বিকাশকারী ডকুমেন্টেশনের জন্য (ডক, প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী...),
Dolibarr Wiki:
%sb0e40dc658> +ForDocumentationSeeWiki=For user or developer documentation (Doc, FAQs...),
take a look at the Dolibarr Wiki:
%s ForAnswersSeeForum=অন্য কোনো প্রশ্ন/সাহায্যের জন্য, আপনি Dolibarr ফোরাম ব্যবহার করতে পারেন:
%s HelpCenterDesc1=Dolibarr-এর সাহায্য এবং সমর্থন পাওয়ার জন্য এখানে কিছু সংস্থান রয়েছে। HelpCenterDesc2=এই সম্পদগুলির মধ্যে কিছু শুধুমাত্র ইংরেজি এ উপলব্ধ। @@ -290,8 +290,8 @@ EMailsSetup=ইমেল সেটআপ EMailsDesc=এই পৃষ্ঠাটি আপনাকে ইমেল পাঠানোর জন্য পরামিতি বা বিকল্প সেট করতে দেয়। EmailSenderProfiles=ইমেল প্রেরকের প্রোফাইল EMailsSenderProfileDesc=আপনি এই বিভাগটি খালি রাখতে পারেন। আপনি এখানে কিছু ইমেল লিখলে, আপনি যখন একটি নতুন ইমেল লিখবেন তখন সেগুলি কম্বোবক্সে সম্ভাব্য প্রেরকদের তালিকায় যোগ করা হবে। -MAIN_MAIL_SMTP_PORT=SMTP/SMTPS পোর্ট (php.ini তে ডিফল্ট মান: %sb09a4b739f17fz0 >>) -MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS হোস্ট (php.ini-এ ডিফল্ট মান: %sb09a4b739f17fz0 >>) +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: %s) +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: %s) MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS পোর্ট MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS হোস্ট MAIN_MAIL_EMAIL_FROM=স্বয়ংক্রিয় ইমেলের জন্য প্রেরক ইমেল @@ -345,12 +345,12 @@ ThisIsAlternativeProcessToFollow=এটি ম্যানুয়ালি প StepNb=ধাপ %s FindPackageFromWebSite=আপনার প্রয়োজনীয় বৈশিষ্ট্যগুলি প্রদান করে এমন একটি প্যাকেজ খুঁজুন (উদাহরণস্বরূপ অফিসিয়াল ওয়েব সাইটে %s)। DownloadPackageFromWebSite=প্যাকেজ ডাউনলোড করুন (উদাহরণস্বরূপ অফিসিয়াল ওয়েব সাইট %s থেকে)। -UnpackPackageInDolibarrRoot=আপনার Dolibarr সার্ভার ডিরেক্টরিতে প্যাকেজ করা ফাইলগুলি আনপ্যাক/আনজিপ করুন: %sb09a4b739f8 -UnpackPackageInModulesRoot=একটি বাহ্যিক মডিউল স্থাপন/ইনস্টল করতে, আপনাকে অবশ্যই বহিরাগত মডিউলগুলির জন্য নিবেদিত সার্ভার ডিরেক্টরিতে সংরক্ষণাগার ফাইলটি আনপ্যাক/আনজিপ করতে হবে:
b0aee8365837fz0 >%s
+UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into your Dolibarr server directory: %s +UnpackPackageInModulesRoot=To deploy/install an external module, you must unpack/unzip the archive file into the server directory dedicated to external modules:
%s SetupIsReadyForUse=মডিউল স্থাপনার কাজ শেষ। তবে আপনাকে অবশ্যই পৃষ্ঠা সেটআপ মডিউলগুলিতে গিয়ে আপনার অ্যাপ্লিকেশনে মডিউলটি সক্ষম এবং সেটআপ করতে হবে: %s. NotExistsDirect=বিকল্প রুট ডিরেক্টরি একটি বিদ্যমান ডিরেক্টরিতে সংজ্ঞায়িত করা হয় না৷
InfDirAlt=সংস্করণ 3 থেকে, একটি বিকল্প রুট ডিরেক্টরি সংজ্ঞায়িত করা সম্ভব। এটি আপনাকে একটি ডেডিকেটেড ডিরেক্টরি, প্লাগ-ইন এবং কাস্টম টেমপ্লেটে সঞ্চয় করতে দেয়।
শুধু Dolibarr এর রুটে একটি ডিরেক্টরি তৈরি করুন (যেমন: কাস্টম)।
-InfDirExample=
তারপর ফাইলে এটি ঘোষণা করুন conf.php class='notranslate'>
$dolibarr_main_url_root_alt='/custom'
$dolibarr_main_document_root_alt/span>$dolibarr_main_document_root_alt'//barlib='/classom= 'notranslate'>
যদি এই লাইনগুলিকে "#" দিয়ে কমেন্ট করা হয়, সেগুলিকে সক্রিয় করতে, শুধুমাত্র "#" অক্ষরটি সরিয়ে আনকমেন্ট করুন৷ +InfDirExample=
Then declare it in the file conf.php
$dolibarr_main_url_root_alt='/custom'
$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'
If these lines are commented with "#", to enable them, just uncomment by removing the "#" character. YouCanSubmitFile=আপনি এখান থেকে মডিউল প্যাকেজের .zip ফাইল আপলোড করতে পারেন: CurrentVersion=ডলিবার বর্তমান সংস্করণ CallUpdatePage=ডাটাবেস গঠন এবং ডেটা আপডেট করে এমন পৃষ্ঠায় ব্রাউজ করুন: %s। @@ -362,16 +362,16 @@ LastActivationVersion=সর্বশেষ অ্যাক্টিভেশন UpdateServerOffline=সার্ভার অফলাইনে আপডেট করুন WithCounter=একটি কাউন্টার পরিচালনা করুন GenericMaskCodes=আপনি যেকোন নম্বর মাস্ক লিখতে পারেন। এই মাস্কে, নিম্নলিখিত ট্যাগগুলি ব্যবহার করা যেতে পারে:
{000000}b09a4b739f17f17 একটি সংখ্যার সাথে মিলে যায় যা প্রতিটি %s এ বৃদ্ধি পাবে। কাউন্টারের পছন্দসই দৈর্ঘ্য হিসাবে অনেক শূন্য লিখুন। কাউন্টারটি বাম দিক থেকে শূন্য দ্বারা সম্পন্ন হবে যাতে মুখোশের মতো শূন্য থাকে।
{000000+000} কিন্তু আগেরটির মতোই প্রথম %s থেকে শুরু করে + চিহ্নের ডানদিকের নম্বরের সাথে সম্পর্কিত একটি অফসেট প্রয়োগ করা হয়।
{000000@x} কিন্তু আগেরটির মতোই মাস x এ পৌঁছালে কাউন্টারটি শূন্যে রিসেট করা হয় (x 1 থেকে 12-এর মধ্যে, অথবা আপনার কনফিগারেশনে সংজ্ঞায়িত আর্থিক বছরের প্রথম মাস ব্যবহার করতে 0, অথবা প্রতি মাসে শূন্যে রিসেট করতে 99)। যদি এই বিকল্পটি ব্যবহার করা হয় এবং x 2 বা উচ্চতর হয়, তাহলে ক্রম {yy}{mm} বা {yyyy}{mm}ও প্রয়োজন।
{dd} দিন (01 থেকে 31)।
{mm} মাস (01 থেকে 12)।
{yy}, b0635837fz35 {yyyy}
বা {y} 2, 4 বা 1 সংখ্যার বেশি বছর।
-GenericMaskCodes2={cccc} n অক্ষরের উপর ক্লায়েন্ট কোড
{cccc000}b09a4b739f7>ক্লায়েন্ট কোড অন n অক্ষরের পরে গ্রাহককে উৎসর্গ করা একটি কাউন্টার রয়েছে। গ্রাহকের জন্য নিবেদিত এই কাউন্টারটি গ্লোবাল কাউন্টারের মতো একই সময়ে পুনরায় সেট করা হয়েছে।
b06a5f451419e800 n অক্ষরে তৃতীয় পক্ষের প্রকারের কোড (মেনু হোম - সেটআপ - অভিধান - তৃতীয় পক্ষের প্রকারগুলি দেখুন)। আপনি এই ট্যাগ যোগ করলে, কাউন্টারটি প্রতিটি ধরণের তৃতীয় পক্ষের জন্য আলাদা হবে৷
+GenericMaskCodes2={cccc} the client code on n characters
{cccc000} the client code on n characters is followed by a counter dedicated to the customer. This counter dedicated to customer is reset at same time as the global counter.
{tttt} The code of third party type on n characters (see menu Home - Setup - Dictionary - Types of third parties). If you add this tag, the counter will be different for each type of third party.
GenericMaskCodes3=মাস্কের অন্য সব অক্ষর অক্ষত থাকবে।
স্পেস অনুমোদিত নয়।
GenericMaskCodes3EAN=মুখোশের অন্যান্য সমস্ত অক্ষর অক্ষত থাকবে (ইএএন 13 এ 13তম অবস্থানে * বা? ছাড়া)।
স্পেস অনুমোদিত নয়।
span>EAN13-এ, 13তম অবস্থানে শেষ } এর পরে শেষ অক্ষরটি * বা? . এটি গণনা করা কী দ্বারা প্রতিস্থাপিত হবে৷
GenericMaskCodes4a=তৃতীয় পক্ষের TheCompany-এর 99তম %s উদাহরণ, তারিখ 2023-01-31:
GenericMaskCodes4b=2023-01-31 তারিখে তৈরি তৃতীয় পক্ষের উদাহরণ:
> GenericMaskCodes4c=2023-01-31 তারিখে তৈরি পণ্যের উদাহরণ:
-GenericMaskCodes5=ABC{yy}{mm}-{000000} দেবে b0aee8336580 span>ABC2301-000099

b0aee8365837fz0{0@span>0+1 }-ZZZ/{dd}/XXX
দেবে 0199-ZZZ/31/XXX
IN{yy}{mm}-{0000}-{t} দেবে IN2301-0099-A যদি কোম্পানির প্রকার হয় 'A_RI' টাইপের কোড সহ 'দায়িত্বশীল ইনস্ক্রিপ্টো' +GenericMaskCodes5=ABC{yy}{mm}-{000000} will give ABC2301-000099
{0000+100@1}-ZZZ/{dd}/XXX will give 0199-ZZZ/31/XXX
IN{yy}{mm}-{0000}-{t} will give IN2301-0099-A if the type of company is 'Responsable Inscripto' with code for type that is 'A_RI' GenericNumRefModelDesc=একটি সংজ্ঞায়িত মাস্ক অনুযায়ী একটি কাস্টমাইজযোগ্য সংখ্যা প্রদান করে। -ServerAvailableOnIPOrPort=সার্ভার ঠিকানা %s পোর্টে উপলব্ধ 'notranslate'>
%s -ServerNotAvailableOnIPOrPort=পোর্ট %s ঠিকানায় সার্ভার উপলব্ধ নয় ='notranslate'>
%s +ServerAvailableOnIPOrPort=Server is available at address %s on port %s +ServerNotAvailableOnIPOrPort=Server is not available at address %s on port %s DoTestServerAvailability=সার্ভার সংযোগ পরীক্ষা করুন DoTestSend=পরীক্ষা পাঠানো DoTestSendHTML=এইচটিএমএল পাঠানোর পরীক্ষা করুন @@ -390,9 +390,9 @@ LanguageFilesCachedIntoShmopSharedMemory=ফাইল .lang শেয়ার LanguageFile=ভাষা ফাইল ExamplesWithCurrentSetup=বর্তমান কনফিগারেশন সহ উদাহরণ ListOfDirectories=OpenDocument টেমপ্লেট ডিরেক্টরির তালিকা -ListOfDirectoriesForModelGenODT=OpenDocument ফরম্যাট সহ টেমপ্লেট ফাইল ধারণকারী ডিরেক্টরিগুলির তালিকা৷

এখানে ডিরেক্টরিগুলির সম্পূর্ণ পথ রাখুন৷
eah ডিরেক্টরির মধ্যে একটি ক্যারেজ রিটার্ন যোগ করুন।
GED মডিউলের একটি ডিরেক্টরি যোগ করতে, এখানে যোগ করুন b0aee8365837fz0 >DOL_DATA_ROOT/ecm/yourdirectoryname।
b0342fccfda19bzless0>এ পরিচালক .odt অথবা .ods দিয়ে শেষ করতে হবে ='notranslate'>। +ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.

Put here full path of directories.
Add a carriage return between eah directory.
To add a directory of the GED module, add here DOL_DATA_ROOT/ecm/yourdirectoryname.

Files in those directories must end with .odt or .ods. NumberOfModelFilesFound=এই ডিরেক্টরিগুলিতে পাওয়া ODT/ODS টেমপ্লেট ফাইলের সংখ্যা -ExampleOfDirectoriesForModelGen=সিনট্যাক্সের উদাহরণ:
c:\\myapp\\mydocumentdir\\mysubdir
/home/myapp/mydocumentdir/mysubdir 'notranslate'>
DOL_DATA_ROOT/ecm/ecmdir +ExampleOfDirectoriesForModelGen=Examples of syntax:
c:\\myapp\\mydocumentdir\\mysubdir
/home/myapp/mydocumentdir/mysubdir
DOL_DATA_ROOT/ecm/ecmdir FollowingSubstitutionKeysCanBeUsed=
আপনার odt নথি টেমপ্লেটগুলি কীভাবে তৈরি করবেন তা জানতে, সেগুলিকে সেই ডিরেক্টরিগুলিতে সংরক্ষণ করার আগে, উইকি ডকুমেন্টেশন পড়ুন: FullListOnOnlineDocumentation=https://wiki.dolibarr.org/index.php/Create_an_ODT_document_template FirstnameNamePosition=নাম/শেষনামের অবস্থান @@ -461,17 +461,17 @@ ComputedFormulaDesc=ডায়নামিক কম্পিউটেড ম Computedpersistent=কম্পিউটেড ফিল্ড স্টোর করুন ComputedpersistentDesc=গণনা করা অতিরিক্ত ক্ষেত্রগুলি ডাটাবেসে সংরক্ষণ করা হবে, তবে, এই ক্ষেত্রের অবজেক্টটি পরিবর্তিত হলেই মানটি পুনরায় গণনা করা হবে। যদি গণনা করা ক্ষেত্রটি অন্যান্য অবজেক্ট বা গ্লোবাল ডেটার উপর নির্ভর করে তবে এই মানটি ভুল হতে পারে!! ExtrafieldParamHelpPassword=এই ক্ষেত্রটি ফাঁকা রাখার অর্থ হল এই মানটি এনক্রিপশন ছাড়াই সংরক্ষণ করা হবে (ক্ষেত্রটি স্ক্রিনে তারা দিয়ে লুকানো আছে)।

এন্টার করুন একটি বিপরীত এনক্রিপশন অ্যালগরিদমের সাথে মান এনকোড করতে মান 'ডলক্রিপ্ট'। পরিষ্কার ডেটা এখনও জানা এবং সম্পাদনা করা যেতে পারে তবে ডেটাবেসে এনক্রিপ্ট করা হয়৷

'অটো' (বা 'md5' লিখুন, 'sha256', 'password_hash', ...) ডিফল্ট পাসওয়ার্ড এনক্রিপশন অ্যালগরিদম ব্যবহার করতে (বা md5, sha256, password_hash...) ডাটাবেসে নন-রিভার্সিবল হ্যাশড পাসওয়ার্ড সংরক্ষণ করতে (মূল মান পুনরুদ্ধারের কোনো উপায় নেই) -ExtrafieldParamHelpselect=মানগুলির তালিকা অবশ্যই ফর্ম্যাট কী, মান সহ লাইন হতে হবে (যেখানে কী '0' হতে পারে না)

উদাহরণস্বরূপ :
1,value1
2,value2
code3,value span class='notranslate'>
...

অন্যের উপর নির্ভর করে তালিকা পেতে পরিপূরক বৈশিষ্ট্য তালিকা:
1,value1|options_parent_list_codeb0ae634>b0ae634 parent_key
2,value2|options_parent_list_codeb0ae64758>

অন্য তালিকার উপর নির্ভর করে তালিকা পেতে:
1, value1|parent_list_code:parent_keyb0342fccfda19bzval, class='notranslate'>parent_list_code:parent_key -ExtrafieldParamHelpcheckbox=মানগুলির তালিকা অবশ্যই ফর্ম্যাট কী, মান সহ লাইন হতে হবে (যেখানে কী '0' হতে পারে না)

উদাহরণস্বরূপ :
1,value1
2,value2
3,value span class='notranslate'>
... -ExtrafieldParamHelpradio=মানগুলির তালিকা অবশ্যই ফর্ম্যাট কী, মান সহ লাইন হতে হবে (যেখানে কী '0' হতে পারে না)

উদাহরণস্বরূপ :
1,value1
2,value2
3,value span class='notranslate'>
... -ExtrafieldParamHelpsellist=মানের তালিকাটি একটি টেবিল থেকে আসে
সিনট্যাক্স: table_name:label_field:id_field::filtersql
উদাহরণ: c_tep ::filtersql

- id_field অগত্যা একটি প্রাথমিক int কী
- filtersql একটি SQL শর্ত। শুধুমাত্র সক্রিয় মান প্রদর্শন করার জন্য এটি একটি সাধারণ পরীক্ষা (যেমন সক্রিয়=1) হতে পারে
আপনি ফিল্টারে $ID$ ব্যবহার করতে পারেন যা বর্তমান বস্তুর বর্তমান আইডি
ফিল্টারে একটি SELECT ব্যবহার করতে ইনজেকশন-বিরোধী সুরক্ষা বাইপাস করতে $SEL$ কীওয়ার্ডটি ব্যবহার করুন।
যদি আপনি অতিরিক্ত ফিল্ডে ফিল্টার করতে চান সিনট্যাক্স extra.fieldcode=... ব্যবহার করুন (যেখানে ফিল্ড কোড হল এক্সট্রাফিল্ডের কোড)

অন্য একটি পরিপূরক বৈশিষ্ট্যের তালিকার উপর নির্ভর করে তালিকা:
c_typent:libelle:id:options_parent_list_translate'notranslate'
|parent_column:filter

অন্য তালিকার উপর নির্ভর করে তালিকা পাওয়ার জন্য:
c_typent:libelle:id:parent_list_codeb0ae64758bac33parent_col: -ExtrafieldParamHelpchkbxlst=মানের তালিকাটি একটি টেবিল থেকে আসে
সিনট্যাক্স: table_name:label_field:id_field::filtersql
উদাহরণ: c_tep ::filtersql

শুধুমাত্র সক্রিয় মান প্রদর্শনের জন্য ফিল্টার একটি সাধারণ পরীক্ষা (যেমন সক্রিয়=1) হতে পারে
আপনি ফিল্টার জাদুকরীতে $ID$ ব্যবহার করতে পারেন এটি বর্তমান বস্তুর বর্তমান আইডি
ফিল্টারে একটি নির্বাচন করতে $SEL$ ব্যবহার করুন span class='notranslate'>
যদি আপনি এক্সট্রাফিল্ডে ফিল্টার করতে চান তাহলে সিনট্যাক্স ব্যবহার করুন extra.fieldcode=... (যেখানে ফিল্ড কোড হল এক্সট্রাফিল্ডের কোড)
>
অন্য একটি পরিপূরক বৈশিষ্ট্যের তালিকার উপর নির্ভর করে তালিকা পেতে:
c_typent:libelle:id:options_parent_list_code|parent_column:filter b0342fccfda19bzc0b0342fccfda19bzc0b024fda19bz অন্য তালিকার উপর নির্ভর করে তালিকা পেতে:
c_typent:libelle:id:parent_list_code|parent_column:filter +ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key +ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... +ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... +ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filtersql
Example: c_typent:libelle:id::filtersql

- id_field is necessarily a primary int key
- filtersql is a SQL condition. It can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter which is the current id of current object
To use a SELECT into the filter use the keyword $SEL$ to bypass anti-injection protection.
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter +ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filtersql
Example: c_typent:libelle:id::filtersql

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=পরামিতি হতে হবে ObjectName:Classpath
সিনট্যাক্স: ObjectName:Classpath ExtrafieldParamHelpSeparator=একটি সাধারণ বিভাজকের জন্য খালি রাখুন
কোলাপসিং সেপারেটরের জন্য এটি 1 এ সেট করুন (নতুন সেশনের জন্য ডিফল্টরূপে খোলা, তারপর প্রতিটি ব্যবহারকারীর সেশনের জন্য স্থিতি রাখা হয়)
কোলাপসিং সেপারেটরের জন্য এটিকে 2 এ সেট করুন (নতুন সেশনের জন্য ডিফল্টরূপে ভেঙে পড়ে, তারপর প্রতিটি ব্যবহারকারীর সেশনের আগে স্থিতি রাখা হয়) LibraryToBuildPDF=পিডিএফ তৈরির জন্য ব্যবহৃত লাইব্রেরি LocalTaxDesc=কিছু দেশ প্রতিটি চালান লাইনে দুই বা তিনটি কর প্রয়োগ করতে পারে। যদি এটি হয়, দ্বিতীয় এবং তৃতীয় করের ধরন এবং তার হার নির্বাচন করুন। সম্ভাব্য প্রকারগুলি হল:
1: ভ্যাট ছাড়া পণ্য এবং পরিষেবার উপর স্থানীয় কর প্রযোজ্য (ট্যাক্স ছাড়াই পরিমাণের উপর স্থানীয় ট্যাক্স গণনা করা হয়)
2: ভ্যাট সহ পণ্য এবং পরিষেবাগুলিতে স্থানীয় কর প্রযোজ্য (স্থানীয় ট্যাক্স পরিমাণ + মূল ট্যাক্সের উপর গণনা করা হয়)
3: ভ্যাট ছাড়া পণ্যের উপর স্থানীয় কর প্রযোজ্য (স্থানীয় ট্যাক্স ব্যতীত পরিমাণের উপর গণনা করা হয় ট্যাক্স)
4: ভ্যাট সহ পণ্যের উপর স্থানীয় কর প্রযোজ্য (স্থানীয় ট্যাক্স পরিমাণ + প্রধান ভ্যাটের উপর গণনা করা হয়)
5: স্থানীয় ভ্যাট ছাড়া পরিষেবাগুলিতে কর প্রযোজ্য (স্থানীয় ট্যাক্স ট্যাক্স ছাড়া পরিমাণের উপর গণনা করা হয়)
6: ভ্যাট সহ পরিষেবাগুলিতে স্থানীয় কর প্রযোজ্য (স্থানীয় ট্যাক্স পরিমাণ + ট্যাক্সের উপর গণনা করা হয়) SMS=খুদেবার্তা -LinkToTestClickToDial=ব্যবহারকারী %s +LinkToTestClickToDial=Enter a phone number to call to show a link to test the ClickToDial url for user %s RefreshPhoneLink=লিঙ্ক রিফ্রেশ করুন LinkToTest=ব্যবহারকারীর জন্য ক্লিকযোগ্য লিঙ্ক তৈরি করা হয়েছে %s (পরীক্ষা করতে ফোন নম্বরে ক্লিক করুন ) KeepEmptyToUseDefault=ডিফল্ট মান ব্যবহার করতে খালি রাখুন @@ -509,7 +509,7 @@ WarningPHPMailA=- ইমেল পরিষেবা প্রদানকার WarningPHPMailB=- কিছু ইমেল পরিষেবা প্রদানকারী (যেমন ইয়াহু) আপনাকে তাদের নিজস্ব সার্ভারের পরিবর্তে অন্য সার্ভার থেকে একটি ইমেল পাঠাতে দেয় না। আপনার বর্তমান সেটআপ ইমেল পাঠানোর জন্য অ্যাপ্লিকেশনের সার্ভার ব্যবহার করে এবং আপনার ইমেল প্রদানকারীর সার্ভার নয়, তাই কিছু প্রাপক (নিষেধাজ্ঞামূলক DMARC প্রোটোকলের সাথে সামঞ্জস্যপূর্ণ), আপনার ইমেল প্রদানকারীকে জিজ্ঞাসা করবে তারা আপনার ইমেল এবং কিছু ইমেল প্রদানকারী গ্রহণ করতে পারে কিনা (ইয়াহুর মতো) "না" উত্তর দিতে পারে কারণ সার্ভারটি তাদের নয়, তাই আপনার পাঠানো কিছু ইমেল বিতরণের জন্য গৃহীত নাও হতে পারে (আপনার ইমেল প্রদানকারীর পাঠানোর কোটা সম্পর্কেও সতর্ক থাকুন)। WarningPHPMailC=- ইমেল পাঠানোর জন্য আপনার নিজস্ব ইমেল পরিষেবা প্রদানকারীর SMTP সার্ভার ব্যবহার করাও আকর্ষণীয় তাই অ্যাপ্লিকেশন থেকে পাঠানো সমস্ত ইমেলগুলি আপনার মেলবক্সের "প্রেরিত" ডিরেক্টরিতেও সংরক্ষিত হবে৷ WarningPHPMailD=তাই ই-মেইল পাঠানোর পদ্ধতিকে "SMTP" মানতে পরিবর্তন করার পরামর্শ দেওয়া হচ্ছে। -WarningPHPMailDbis=আপনি যদি সত্যিই ইমেল পাঠানোর জন্য ডিফল্ট "PHP" পদ্ধতি রাখতে চান, তাহলে এই সতর্কতা উপেক্ষা করুন, অথবা %sএখানে ক্লিক করে %s< দ্বারা এটি সরিয়ে দিন /span>। +WarningPHPMailDbis=If you really want to keep the default "PHP" method to send emails, just ignore this warning, or remove it by %sclicking here%s. WarningPHPMail2=যদি আপনার ইমেল SMTP প্রদানকারীর ইমেল ক্লায়েন্টকে কিছু আইপি ঠিকানায় সীমাবদ্ধ করতে হয় (খুব বিরল), এটি আপনার ERP CRM অ্যাপ্লিকেশনের জন্য মেল ব্যবহারকারী এজেন্টের (MUA) IP ঠিকানা: %s। WarningPHPMailSPF=যদি আপনার প্রেরকের ইমেল ঠিকানার ডোমেন নামটি একটি SPF রেকর্ড দ্বারা সুরক্ষিত থাকে (আপনার ডোমেন নাম রেজিস্টারকে জিজ্ঞাসা করুন), আপনাকে অবশ্যই আপনার ডোমেনের DNS-এর SPF রেকর্ডে নিম্নলিখিত IPগুলি যোগ করতে হবে: %s। ActualMailSPFRecordFound=প্রকৃত SPF রেকর্ড পাওয়া গেছে (ইমেলের জন্য %s): %s @@ -518,7 +518,7 @@ DependsOn=এই মডিউলটির মডিউল(গুলি) প্ RequiredBy=এই মডিউলটি মডিউল(গুলি) দ্বারা প্রয়োজনীয় TheKeyIsTheNameOfHtmlField=এটি HTML ক্ষেত্রের নাম। একটি ক্ষেত্রের মূল নাম পেতে HTML পৃষ্ঠার বিষয়বস্তু পড়ার জন্য প্রযুক্তিগত জ্ঞান প্রয়োজন। PageUrlForDefaultValues=আপনাকে অবশ্যই পৃষ্ঠা URL এর আপেক্ষিক পাথ লিখতে হবে। আপনি URL-এ প্যারামিটার অন্তর্ভুক্ত করলে, ব্রাউজ করা URL-এর সমস্ত প্যারামিটারের মান এখানে সংজ্ঞায়িত থাকলে এটি কার্যকর হবে। -PageUrlForDefaultValuesCreate=
উদাহরণ:
একটি নতুন তৃতীয় পক্ষ তৈরি করার ফর্মের জন্য, এটি হল b0e7843947c%s

এ ইনস্টল করা বাহ্যিক মডিউলগুলির URL এর জন্য কাস্টম ডিরেক্টরি, "কাস্টম/" অন্তর্ভুক্ত করবেন না, তাই পথ ব্যবহার করুন যেমন mymodule/mypage.php এবং কাস্টম নয় /mymodule/mypage.php.
যদি আপনি ডিফল্ট মান চান শুধুমাত্র যদি url এর কিছু প্যারামিটার থাকে, আপনি %s +PageUrlForDefaultValuesCreate=
Example:
For the form to create a new third party, it is %s.
For URL of external modules installed into custom directory, do not include the "custom/", so use path like mymodule/mypage.php and not custom/mymodule/mypage.php.
If you want default value only if url has some parameter, you can use %s PageUrlForDefaultValuesList=
উদাহরণ:
যে পৃষ্ঠাটি তৃতীয় পক্ষের তালিকা করে, সেটি হল >%s
কাস্টম ডিরেক্টরিতে ইনস্টল করা বাহ্যিক মডিউলগুলির URL এর জন্য , "কাস্টম/" অন্তর্ভুক্ত করবেন না তাই mymodule/mypagelist.php মত একটি পথ ব্যবহার করুন এবং কাস্টম/mymodule নয় /mypagelist.php.
যদি আপনি ডিফল্ট মান চান শুধুমাত্র যদি url এর কিছু প্যারামিটার থাকে, আপনি %s AlsoDefaultValuesAreEffectiveForActionCreate=এছাড়াও মনে রাখবেন যে ফর্ম তৈরির জন্য ডিফল্ট মানগুলি ওভাররাইট করা শুধুমাত্র সঠিকভাবে ডিজাইন করা পৃষ্ঠাগুলির জন্য কাজ করে (তাই প্যারামিটার অ্যাকশন = তৈরি করুন বা উপস্থাপন করুন...) EnableDefaultValues=ডিফল্ট মানগুলির কাস্টমাইজেশন সক্ষম করুন @@ -1197,6 +1197,7 @@ Skin=ত্বকের থিম DefaultSkin=ডিফল্ট স্কিন থিম MaxSizeList=তালিকার জন্য সর্বোচ্চ দৈর্ঘ্য DefaultMaxSizeList=তালিকার জন্য ডিফল্ট সর্বোচ্চ দৈর্ঘ্য +DisplayGrandTotalInList=Display grand total (for all pages) in lists footer DefaultMaxSizeShortList=ছোট তালিকার জন্য ডিফল্ট সর্বোচ্চ দৈর্ঘ্য (যেমন গ্রাহক কার্ডে) MessageOfDay=দিনের বার্তা MessageLogin=লগইন পৃষ্ঠা বার্তা @@ -1249,7 +1250,7 @@ SetupDescription2=নিম্নলিখিত দুটি বিভাগ SetupDescription3=%s -> %sb0e40dc858

আপনার অ্যাপ্লিকেশনের ডিফল্ট আচরণ কাস্টমাইজ করার জন্য ব্যবহৃত মৌলিক প্যারামিটারগুলি (যেমন দেশ-সম্পর্কিত বৈশিষ্ট্যগুলির জন্য)। SetupDescription4=
%s -> %sb0e40dc858

এই সফ্টওয়্যারটি অনেক মডিউল/অ্যাপ্লিকেশনের একটি স্যুট। আপনার প্রয়োজনের সাথে সম্পর্কিত মডিউলগুলি অবশ্যই সক্ষম এবং কনফিগার করা উচিত। এই মডিউলগুলি সক্রিয় করার সাথে মেনু এন্ট্রি প্রদর্শিত হবে। SetupDescription5=অন্যান্য সেটআপ মেনু এন্ট্রি ঐচ্ছিক পরামিতি পরিচালনা করে। -SetupDescriptionLink=
%s - %sb0e40dc +SetupDescriptionLink=%s - %s SetupDescription3b=আপনার অ্যাপ্লিকেশনের ডিফল্ট আচরণ কাস্টমাইজ করতে ব্যবহৃত মৌলিক পরামিতিগুলি (যেমন দেশ-সম্পর্কিত বৈশিষ্ট্যগুলির জন্য)। SetupDescription4b=এই সফ্টওয়্যারটি অনেক মডিউল/অ্যাপ্লিকেশনের একটি স্যুট। আপনার প্রয়োজনের সাথে সম্পর্কিত মডিউলগুলি সক্রিয় করতে হবে। এই মডিউলগুলি সক্রিয় করার সাথে মেনু এন্ট্রি প্রদর্শিত হবে। AuditedSecurityEvents=নিরাপত্তা ঘটনা যা নিরীক্ষিত হয় @@ -1281,7 +1282,7 @@ AvailableModules=উপলব্ধ অ্যাপ/মডিউল ToActivateModule=মডিউল সক্রিয় করতে, সেটআপ এরিয়াতে যান (হোম->সেটআপ->মডিউল)। SessionTimeOut=অধিবেশনের জন্য সময় শেষ SessionExplanation=এই সংখ্যাটি গ্যারান্টি দেয় যে সেশনটি এই বিলম্বের আগে কখনই শেষ হবে না, যদি সেশন ক্লিনারটি অভ্যন্তরীণ PHP সেশন ক্লিনার দ্বারা করা হয় (এবং অন্য কিছু নয়)। অভ্যন্তরীণ PHP সেশন ক্লিনার গ্যারান্টি দেয় না যে এই বিলম্বের পরে সেশনের মেয়াদ শেষ হয়ে যাবে। এই বিলম্বের পরে এবং যখন সেশন ক্লিনার চালানো হবে তখন এটির মেয়াদ শেষ হয়ে যাবে, তাই প্রতিটি %s/%s অ্যাক্সেস, কিন্তু শুধুমাত্র অন্যান্য সেশন দ্বারা করা অ্যাক্সেসের সময় (যদি মান 0 হয়, এর অর্থ হল সেশনটি ক্লিয়ার করা শুধুমাত্র একটি বাহ্যিক প্রক্রিয়া দ্বারা সম্পন্ন হয়) .
দ্রষ্টব্য: একটি বাহ্যিক সেশন ক্লিনিং মেকানিজম সহ কিছু সার্ভারে (ডেবিয়ানের অধীনে ক্রন, উবুন্টু ...), সেশনগুলি একটি বাহ্যিক সেটআপ দ্বারা সংজ্ঞায়িত সময়ের পরে ধ্বংস করা যেতে পারে, এখানে প্রবেশ করা মান কোন ব্যাপার না. -SessionsPurgedByExternalSystem=এই সার্ভারের সেশনগুলি একটি বাহ্যিক প্রক্রিয়া (ডেবিয়ান, উবুন্টুর অধীনে ক্রন ...) দ্বারা পরিষ্কার করা হয়েছে বলে মনে হচ্ছে, সম্ভবত প্রতিটি %s সেকেন্ড (= প্যারামিটারের মান session.gc_maxlifetimeb09a4b739fz8 , তাই এখানে মান পরিবর্তনের কোন প্রভাব নেই। আপনাকে অবশ্যই সার্ভার অ্যাডমিনিস্ট্রেটরকে সেশন বিলম্ব পরিবর্তন করতে বলতে হবে। +SessionsPurgedByExternalSystem=Sessions on this server seems to be cleaned by an external mechanism (cron under debian, ubuntu ...), probably every %s seconds (= value of parameter session.gc_maxlifetime), so changing the value here has no effect. You must ask the server administrator to change session delay. TriggersAvailable=উপলব্ধ ট্রিগার TriggersDesc=ট্রিগার হল এমন ফাইল যা htdocs/core/triggers-এ কপি করা হলে Dolibarr ওয়ার্কফ্লো-এর আচরণ পরিবর্তন করবে। তারা নতুন কর্ম উপলব্ধি করে, ডলিবার ইভেন্টগুলিতে সক্রিয় (নতুন কোম্পানি তৈরি, চালান বৈধতা, ...)। TriggerDisabledByName=এই ফাইলের ট্রিগারগুলি তাদের নামের -NORUN প্রত্যয় দ্বারা অক্ষম করা হয়েছে৷ @@ -1321,7 +1322,7 @@ PreviousDumpFiles=বিদ্যমান ব্যাকআপ ফাইল PreviousArchiveFiles=বিদ্যমান সংরক্ষণাগার ফাইল WeekStartOnDay=সপ্তাহের প্রথম দিন RunningUpdateProcessMayBeRequired=আপগ্রেড প্রক্রিয়া চালানো প্রয়োজন বলে মনে হচ্ছে (প্রোগ্রাম সংস্করণ %s ডেটাবেস সংস্করণ %s থেকে আলাদা) -YouMustRunCommandFromCommandLineAfterLoginToUser=ব্যবহারকারী %s এর সাথে একটি শেলে লগইন করার পরে আপনাকে কমান্ড লাইন থেকে এই কমান্ডটি চালাতে হবে অথবা আপনাকে %s পাসওয়ার্ড। +YouMustRunCommandFromCommandLineAfterLoginToUser=You must run this command from command line after login to a shell with user %s or you must add -W option at end of command line to provide %s password. YourPHPDoesNotHaveSSLSupport=আপনার পিএইচপি-তে SSL ফাংশন উপলব্ধ নয় DownloadMoreSkins=আরো স্কিন ডাউনলোড করতে SimpleNumRefModelDesc=%s yymm-nnnn ফর্ম্যাটে রেফারেন্স নম্বর ফেরত দেয় যেখানে yy হল বছর, mm হল মাস এবং nnnn হল একটি ক্রমিক স্বয়ংক্রিয়-বৃদ্ধি সংখ্যা রিসেট ছাড়াই @@ -1372,7 +1373,7 @@ TranslationSetup=অনুবাদের সেটআপ TranslationKeySearch=একটি অনুবাদ কী বা স্ট্রিং অনুসন্ধান করুন TranslationOverwriteKey=একটি অনুবাদ স্ট্রিং ওভাররাইট করুন TranslationDesc=ডিসপ্লে ভাষা কিভাবে সেট করবেন:
* ডিফল্ট/সিস্টেমওয়াইড: মেনু হোম -> সেটআপ -> ডিসপ্লে
* প্রতি ব্যবহারকারী: স্ক্রিনের শীর্ষে থাকা ব্যবহারকারীর নামটিতে ক্লিক করুন এবং span>ইউজার কার্ডে ইউজার ডিসপ্লে সেটআপ ট্যাব। -TranslationOverwriteDesc=আপনি নিম্নলিখিত সারণী পূরণ করে স্ট্রিং ওভাররাইড করতে পারেন। "%s" ড্রপডাউন থেকে আপনার ভাষা চয়ন করুন, "%s"-এ অনুবাদ কী স্ট্রিং ঢোকান এবং "%s" +TranslationOverwriteDesc=You can also override strings filling the following table. Choose your language from "%s" dropdown, insert the translation key string into "%s" and your new translation into "%s" TranslationOverwriteDesc2=কোন অনুবাদ কী ব্যবহার করতে হবে তা জানার জন্য আপনি অন্য ট্যাবটি ব্যবহার করতে পারেন TranslationString=অনুবাদ স্ট্রিং CurrentTranslationString=বর্তমান অনুবাদ স্ট্রিং @@ -1663,7 +1664,7 @@ LDAPDescUsers=এই পৃষ্ঠাটি আপনাকে ডলিবা LDAPDescGroups=এই পৃষ্ঠাটি আপনাকে ডলিবার গ্রুপে পাওয়া প্রতিটি ডেটার জন্য LDAP ট্রিতে LDAP বৈশিষ্ট্যের নাম সংজ্ঞায়িত করতে দেয়। LDAPDescMembers=এই পৃষ্ঠাটি আপনাকে ডলিবার সদস্য মডিউলে পাওয়া প্রতিটি ডেটার জন্য LDAP ট্রিতে LDAP বৈশিষ্ট্যের নাম সংজ্ঞায়িত করতে দেয়। LDAPDescMembersTypes=এই পৃষ্ঠাটি আপনাকে LDAP ট্রিতে LDAP অ্যাট্রিবিউটের নাম সংজ্ঞায়িত করতে দেয় যা Dolibarr সদস্যদের প্রকারে পাওয়া প্রতিটি ডেটার জন্য। -LDAPDescValues=উদাহরণ মানগুলি OpenLDAP-এর জন্য নিম্নলিখিত লোড করা স্কিমাগুলির সাথে ডিজাইন করা হয়েছে: b0aee8365>b0aee83365 core.schema, cosine.schema, inetorgperson.schema
)। আপনি যদি সেই মানগুলি এবং OpenLDAP ব্যবহার করেন, আপনার LDAP কনফিগারেশন ফাইলটি পরিবর্তন করুন slapd.conf এই সমস্ত স্কিমা লোড করতে। +LDAPDescValues=Example values are designed for OpenLDAP with following loaded schemas: core.schema, cosine.schema, inetorgperson.schema). If you use thoose values and OpenLDAP, modify your LDAP config file slapd.conf to have all thoose schemas loaded. ForANonAnonymousAccess=একটি প্রমাণীকৃত অ্যাক্সেসের জন্য (উদাহরণস্বরূপ একটি লেখার অ্যাক্সেসের জন্য) PerfDolibarr=কর্মক্ষমতা সেটআপ/অপ্টিমাইজিং রিপোর্ট YouMayFindPerfAdviceHere=এই পৃষ্ঠাটি কর্মক্ষমতা সম্পর্কিত কিছু চেক বা পরামর্শ প্রদান করে। @@ -1860,7 +1861,7 @@ PastDelayVCalExport=এর চেয়ে পুরানো ইভেন্ট SecurityKey = নিরাপত্তা কী ##### ClickToDial ##### ClickToDialSetup=মডিউল সেটআপ ডায়াল করতে ক্লিক করুন -ClickToDialUrlDesc=ফোন পিক্টোতে ক্লিক করলে URL বলা হয়। URL-এ, আপনি ট্যাগগুলি ব্যবহার করতে পারেন
__PHONETO__ হবে কল করার জন্য ব্যক্তির ফোন নম্বর দিয়ে প্রতিস্থাপিত হয়েছে
__PHONEFROM__ কল করা ব্যক্তির (আপনার) ফোন নম্বর দিয়ে প্রতিস্থাপিত হবে
__LOGIN__b09a4b739f17f span> যা ক্লিকটোডিয়াল লগইন দিয়ে প্রতিস্থাপিত হবে (ব্যবহারকারী কার্ডে সংজ্ঞায়িত)
__PASS__ যা ক্লিকটোডিয়াল পাসওয়ার্ড দিয়ে প্রতিস্থাপিত হবে (ব্যবহারকারী কার্ডে সংজ্ঞায়িত)। +ClickToDialUrlDesc=URL called when a click on phone picto is done. In URL, you can use tags
__PHONETO__ that will be replaced with the phone number of person to call
__PHONEFROM__ that will be replaced with phone number of calling person (yours)
__LOGIN__ that will be replaced with clicktodial login (defined on user card)
__PASS__ that will be replaced with clicktodial password (defined on user card). ClickToDialDesc=এই মডিউলটি একটি ডেস্কটপ কম্পিউটার ব্যবহার করার সময় ফোন নম্বরগুলিকে ক্লিকযোগ্য লিঙ্কগুলিতে পরিবর্তন করে। একটি ক্লিক নম্বরে কল করবে। এটি আপনার ডেস্কটপে একটি নরম ফোন ব্যবহার করার সময় বা উদাহরণস্বরূপ SIP প্রোটোকলের উপর ভিত্তি করে একটি CTI সিস্টেম ব্যবহার করার সময় ফোন কল শুরু করতে ব্যবহার করা যেতে পারে। দ্রষ্টব্য: স্মার্টফোন ব্যবহার করার সময়, ফোন নম্বরগুলি সর্বদা ক্লিকযোগ্য। ClickToDialUseTelLink=ফোন নম্বরগুলিতে শুধুমাত্র একটি লিঙ্ক "টেল:" ব্যবহার করুন৷ ClickToDialUseTelLinkDesc=এই পদ্ধতিটি ব্যবহার করুন যদি আপনার ব্যবহারকারীদের একটি সফ্টফোন বা একটি সফ্টওয়্যার ইন্টারফেস থাকে, ব্রাউজার হিসাবে একই কম্পিউটারে ইনস্টল করা হয় এবং আপনি যখন আপনার ব্রাউজারে "tel:" দিয়ে শুরু হওয়া একটি লিঙ্কে ক্লিক করেন তখন কল করা হয়৷ আপনার যদি "sip:" বা একটি সম্পূর্ণ সার্ভার সমাধান (স্থানীয় সফ্টওয়্যার ইনস্টলেশনের প্রয়োজন নেই) দিয়ে শুরু হয় এমন একটি লিঙ্কের প্রয়োজন হলে, আপনাকে অবশ্যই এটি "না" তে সেট করতে হবে এবং পরবর্তী ক্ষেত্রটি পূরণ করতে হবে। @@ -1920,8 +1921,8 @@ IfSetToYesDontForgetPermission=যদি একটি নন-নাল মান GeoIPMaxmindSetup=জিওআইপি ম্যাক্সমাইন্ড মডিউল সেটআপ PathToGeoIPMaxmindCountryDataFile=ম্যাক্সমাইন্ড আইপি থেকে দেশের অনুবাদ ধারণকারী ফাইলের পথ NoteOnPathLocation=মনে রাখবেন যে আপনার আইপি টু কান্ট্রি ডেটা ফাইলটি আপনার PHP পড়তে পারে এমন একটি ডিরেক্টরির মধ্যে থাকা আবশ্যক (আপনার PHP open_basedir সেটআপ এবং ফাইল সিস্টেমের অনুমতি পরীক্ষা করুন)। -YouCanDownloadFreeDatFileTo=আপনি ম্যাক্সমাইন্ড জিওআইপি কান্ট্রি ফাইলের একটি ফ্রি ডেমো সংস্করণ ডাউনলোড করতে পারেন b0ecb2ecz87f4 /span>। -YouCanDownloadAdvancedDatFileTo=এছাড়াও আপনি আরও সম্পূর্ণ সংস্করণ ডাউনলোড করতে পারেন, আপডেট সহ, %s. +YouCanDownloadFreeDatFileTo=You can download a free demo version of the Maxmind GeoIP country file at %s. +YouCanDownloadAdvancedDatFileTo=You can also download a more complete version, with updates, of the Maxmind GeoIP country file at %s. TestGeoIPResult=একটি রূপান্তর আইপি পরীক্ষা -> দেশ ##### Projects ##### ProjectsNumberingModules=প্রজেক্ট নম্বরিং মডিউল @@ -1971,7 +1972,7 @@ SomethingMakeInstallFromWebNotPossible=নিম্নলিখিত কার SomethingMakeInstallFromWebNotPossible2=এই কারণে, এখানে বর্ণিত আপগ্রেড করার প্রক্রিয়াটি একটি ম্যানুয়াল প্রক্রিয়া শুধুমাত্র একজন বিশেষ সুবিধাপ্রাপ্ত ব্যবহারকারী সম্পাদন করতে পারেন। InstallModuleFromWebHasBeenDisabledContactUs=অ্যাপ্লিকেশন থেকে বাহ্যিক মডিউল বা গতিশীল ওয়েবসাইটগুলির ইনস্টল বা বিকাশ বর্তমানে নিরাপত্তার উদ্দেশ্যে লক করা আছে। আপনি যদি এই বৈশিষ্ট্যটি সক্ষম করতে চান তাহলে অনুগ্রহ করে আমাদের সাথে যোগাযোগ করুন৷ InstallModuleFromWebHasBeenDisabledByFile=অ্যাপ্লিকেশন থেকে বহিরাগত মডিউল ইনস্টল আপনার প্রশাসক দ্বারা নিষ্ক্রিয় করা হয়েছে. এটির অনুমতি দেওয়ার জন্য আপনাকে অবশ্যই তাকে %s ফাইলটি সরাতে বলতে হবে বৈশিষ্ট্য -ConfFileMustContainCustom=অ্যাপ্লিকেশন থেকে একটি বাহ্যিক মডিউল ইনস্টল বা নির্মাণ করার জন্য মডিউল ফাইলগুলিকে %s ডিরেক্টরিতে সংরক্ষণ করতে হবে . Dolibarr দ্বারা এই ডিরেক্টরিটি প্রক্রিয়া করার জন্য, আপনাকে অবশ্যই আপনার conf/conf.php সেটআপ করতে হবে 2টি নির্দেশিক লাইন যোগ করতে:
$dolibarr_main_url_root_alt='/custom';b0a65dc>b0a65d0 ='notranslate'>
$dolibarr_main_document_root_alt='b0ecb2ec87f49fzmto '>
+ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory %s. To have this directory processed by Dolibarr, you must setup your conf/conf.php to add the 2 directive lines:
$dolibarr_main_url_root_alt='/custom';
$dolibarr_main_document_root_alt='%s/custom'; HighlightLinesOnMouseHover=মাউস সরে গেলে টেবিল লাইন হাইলাইট করুন HighlightLinesColor=মাউস অতিক্রম করার সময় লাইনের রঙ হাইলাইট করুন (হাইলাইট না করার জন্য 'ffffff' ব্যবহার করুন) HighlightLinesChecked=যখন এটি চেক করা হয় তখন লাইনের রঙ হাইলাইট করুন (কোন হাইলাইটের জন্য 'ffffff' ব্যবহার করুন) @@ -2065,7 +2066,7 @@ DetectionNotPossible=সনাক্তকরণ সম্ভব নয় UrlToGetKeyToUseAPIs=API ব্যবহার করার জন্য টোকেন পেতে Url (একবার টোকেন প্রাপ্ত হলে এটি ডাটাবেস ব্যবহারকারী টেবিলে সংরক্ষিত হয় এবং প্রতিটি API কলে অবশ্যই প্রদান করতে হবে) ListOfAvailableAPIs=উপলব্ধ API-এর তালিকা activateModuleDependNotSatisfied=মডিউল "%s" মডিউল "%s" এর উপর নির্ভর করে, এটি অনুপস্থিত, তাই মডিউল " %1$s" সঠিকভাবে কাজ নাও করতে পারে। আপনি যদি কোনো বিস্ময় থেকে নিরাপদ থাকতে চান তাহলে অনুগ্রহ করে "%2$s" মডিউল ইনস্টল করুন বা "%1$s" মডিউলটি নিষ্ক্রিয় করুন -CommandIsNotInsideAllowedCommands=আপনি যে কমান্ডটি চালানোর চেষ্টা করছেন সেটি প্যারামিটারে সংজ্ঞায়িত অনুমোদিত কমান্ডের তালিকায় নেই $dolibarr_main_restrict_os_commands class='notranslate'>
conf.php ফাইল। +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter $dolibarr_main_restrict_os_commands in the conf.php file. LandingPage=অবতরণ পাতা SamePriceAlsoForSharedCompanies=আপনি যদি একটি মাল্টিকোম্পানি মডিউল ব্যবহার করেন, "একক মূল্য" পছন্দের সাথে, পণ্যগুলি পরিবেশের মধ্যে ভাগ করা হলে মূল্যও সমস্ত কোম্পানির জন্য একই হবে ModuleEnabledAdminMustCheckRights=মডিউল সক্রিয় করা হয়েছে. সক্রিয় মডিউল (গুলি) জন্য অনুমতি শুধুমাত্র প্রশাসক ব্যবহারকারীদের দেওয়া হয়েছে. প্রয়োজনে আপনাকে অন্য ব্যবহারকারী বা গোষ্ঠীকে ম্যানুয়ালি অনুমতি দিতে হতে পারে। @@ -2291,7 +2292,7 @@ APIsAreNotEnabled=APIs মডিউল সক্রিয় করা নেই YouShouldSetThisToOff=আপনার এটি 0 বা বন্ধ করা উচিত InstallAndUpgradeLockedBy=%s ফাইল দ্বারা ইনস্টল এবং আপগ্রেডগুলি লক করা আছে InstallLockedBy=%s ফাইল দ্বারা ইনস্টল/পুনঃইনস্টল লক করা আছে -InstallOfAddonIsNotBlocked=অ্যাডঅনগুলির ইনস্টলেশন লক করা হয় না। একটি ফাইল তৈরি করুন installmodules.lock ডিরেক্টরিতে b0aee8365837>%s
বহিরাগত অ্যাডঅন/মডিউলগুলির ইনস্টলেশন ব্লক করতে। +InstallOfAddonIsNotBlocked=Installations of addons are not locked. Create a file installmodules.lock into directory %s to block installations of external addons/modules. OldImplementation=পুরানো বাস্তবায়ন PDF_SHOW_LINK_TO_ONLINE_PAYMENT=যদি কিছু অনলাইন পেমেন্ট মডিউল সক্ষম করা থাকে (পেপাল, স্ট্রাইপ, ...), অনলাইন পেমেন্ট করতে PDF এ একটি লিঙ্ক যোগ করুন DashboardDisableGlobal=বিশ্বব্যাপী খোলা বস্তুর সমস্ত থাম্ব অক্ষম করুন @@ -2405,8 +2406,8 @@ NotAvailableByDefaultEnabledOnModuleActivation=ডিফল্টরূপে CSSPage=CSS শৈলী Defaultfortype=ডিফল্ট DefaultForTypeDesc=টেমপ্লেট প্রকারের জন্য একটি নতুন ইমেল তৈরি করার সময় ডিফল্টরূপে ব্যবহৃত টেমপ্লেট -OptionXShouldBeEnabledInModuleY=বিকল্প "%s" মডিউল %s -OptionXIsCorrectlyEnabledInModuleY=বিকল্প "%s" মডিউল
%s +OptionXShouldBeEnabledInModuleY=Option "%s" should be enabled into module %s +OptionXIsCorrectlyEnabledInModuleY=Option "%s" is enabled into module %s AllowOnLineSign=অন লাইন স্বাক্ষরের অনুমতি দিন AtBottomOfPage=পৃষ্ঠার নীচে FailedAuth=ব্যর্থ প্রমাণীকরণ @@ -2433,3 +2434,12 @@ UrlPublicInterfaceHelpAdmin=It is possible to define an alias to the web server ExportUseForce=Use the parameter -f ExportUseForceHelp=Force to continue the export even when an error is found (Backup may not be reliable) CustomPrompt=Custom prompts +AiDescription=AI (Artificial Intelligence) features +AiDescriptionLong=Provides AI (Artificial Intelligence) features in different part of the application. Need external AI API. +AI_KEY_API_CHATGPT= Key for ChatGPT IA api +AiSetup=AI module setup +AiCustomPrompt=AI customs prompt +AI_CONFIGURATIONS_PROMPT=Custom prompt +ImageGeneration=Image generation +AIPromptForFeatures=AI custom prompts for features +EnterAnIP=Enter an IP address diff --git a/htdocs/langs/bn_IN/agenda.lang b/htdocs/langs/bn_IN/agenda.lang index 428bfe379a1..ebeb135987b 100644 --- a/htdocs/langs/bn_IN/agenda.lang +++ b/htdocs/langs/bn_IN/agenda.lang @@ -137,8 +137,8 @@ DateActionEnd=শেষ তারিখ AgendaUrlOptions1=আপনি ফিল্টার আউটপুট নিম্নলিখিত পরামিতি যোগ করতে পারেন: AgendaUrlOptions3=logina=%s ব্যবহারকারীর মালিকানাধীন ক্রিয়াকলাপগুলিতে আউটপুট সীমাবদ্ধ করতে %s। AgendaUrlOptionsNotAdmin=logina=!%s আউটপুটকে নিজের নয় এমন ক্রিয়াগুলিতে সীমাবদ্ধ করতে ব্যবহারকারী %s। -AgendaUrlOptions4=logint=%s ব্যবহারকারীকে <অর্পণ করা কর্মগুলিতে আউটপুট সীমাবদ্ধ করতে span class='notranslate'>
%s (মালিক এবং অন্যান্য)। -AgendaUrlOptionsProject=project=__PROJECT_ID__ প্রজেক্টের সাথে লিঙ্ক করা ক্রিয়াকলাপের আউটপুট সীমাবদ্ধ করতে b0aee85>b0aee83333 __PROJECT_ID__
। +AgendaUrlOptions4=logint=%s to restrict output to actions assigned to user %s (owner and others). +AgendaUrlOptionsProject=project=__PROJECT_ID__ to restrict output to actions linked to project __PROJECT_ID__. AgendaUrlOptionsNotAutoEvent=স্বয়ংক্রিয় ইভেন্টগুলি বাদ দিতে notactiontype=systemauto। AgendaUrlOptionsIncludeHolidays=ছুটির ইভেন্টগুলি অন্তর্ভুক্ত করতে includeholidays=1। AgendaShowBirthdayEvents=পরিচিতির জন্মদিন diff --git a/htdocs/langs/bn_IN/banks.lang b/htdocs/langs/bn_IN/banks.lang index a32ea9fdad5..cacd3451678 100644 --- a/htdocs/langs/bn_IN/banks.lang +++ b/htdocs/langs/bn_IN/banks.lang @@ -115,7 +115,7 @@ MenuBankInternalTransfer=অভ্যন্তরীণ স্থানান্ TransferDesc=এক অ্যাকাউন্ট থেকে অন্য অ্যাকাউন্টে স্থানান্তর করতে অভ্যন্তরীণ স্থানান্তর ব্যবহার করুন, অ্যাপ্লিকেশন দুটি রেকর্ড লিখবে: উত্স অ্যাকাউন্টে একটি ডেবিট এবং লক্ষ্য অ্যাকাউন্টে একটি ক্রেডিট। এই লেনদেনের জন্য একই পরিমাণ, লেবেল এবং তারিখ ব্যবহার করা হবে। TransferFrom=থেকে TransferTo=প্রতি -TransferFromToDone=%s থেকে %s 'notranslate'>%s %s রেকর্ড করা হয়েছে৷ +TransferFromToDone=A transfer from %s to %s of %s %s has been recorded. CheckTransmitter=প্রেরক ValidateCheckReceipt=এই চেক রসিদ বৈধ? ConfirmValidateCheckReceipt=আপনি কি নিশ্চিত যে আপনি যাচাইকরণের জন্য এই চেকের রসিদ জমা দিতে চান? একবার যাচাই করা হলে কোন পরিবর্তন সম্ভব হবে না। diff --git a/htdocs/langs/bn_IN/bills.lang b/htdocs/langs/bn_IN/bills.lang index c0b60874fc6..bdf02b434fd 100644 --- a/htdocs/langs/bn_IN/bills.lang +++ b/htdocs/langs/bn_IN/bills.lang @@ -377,7 +377,7 @@ DisabledBecauseReplacedInvoice=চালান প্রতিস্থাপন DescTaxAndDividendsArea=এই এলাকাটি বিশেষ খরচের জন্য করা সমস্ত অর্থপ্রদানের সারাংশ উপস্থাপন করে। শুধুমাত্র নির্দিষ্ট বছরে পেমেন্ট সহ রেকর্ডগুলি এখানে অন্তর্ভুক্ত করা হয়েছে। NbOfPayments=পেমেন্ট সংখ্যা SplitDiscount=দুই ভাগে ডিসকাউন্ট বিভক্ত -ConfirmSplitDiscount=আপনি কি নিশ্চিত যে আপনি %s এই ছাড়টি ভাগ করতে চান span class='notranslate'>%s দুটি ছোট ডিসকাউন্টে? +ConfirmSplitDiscount=Are you sure you want to split this discount of %s %s into two smaller discounts? TypeAmountOfEachNewDiscount=দুটি অংশের প্রতিটির জন্য ইনপুট পরিমাণ: TotalOfTwoDiscountMustEqualsOriginal=মোট দুটি নতুন ডিসকাউন্ট মূল ছাড়ের পরিমাণের সমান হতে হবে। ConfirmRemoveDiscount=আপনি কি এই ছাড় সরানোর বিষয়ে নিশ্চিত? @@ -614,7 +614,7 @@ invoiceLineProgressError=ইনভয়েস লাইনের অগ্র updatePriceNextInvoiceErrorUpdateline=ত্রুটি: চালান লাইনে মূল্য আপডেট করুন: %s ToCreateARecurringInvoice=এই চুক্তির জন্য একটি পুনরাবৃত্ত চালান তৈরি করতে, প্রথমে এই ড্রাফ্ট চালানটি তৈরি করুন, তারপর এটিকে একটি চালান টেমপ্লেটে রূপান্তর করুন এবং ভবিষ্যতের চালানগুলির প্রজন্মের জন্য ফ্রিকোয়েন্সি সংজ্ঞায়িত করুন৷ ToCreateARecurringInvoiceGene=নিয়মিত এবং ম্যানুয়ালি ভবিষ্যত চালান তৈরি করতে, শুধু মেনুতে যান %s - b0ecb2ecz80 span> - %s৷ -ToCreateARecurringInvoiceGeneAuto=আপনার যদি এই ধরনের চালানগুলি স্বয়ংক্রিয়ভাবে তৈরি করতে হয়, তাহলে আপনার প্রশাসককে %s। নোট করুন যে উভয় পদ্ধতি (ম্যানুয়াল এবং স্বয়ংক্রিয়) একসাথে ব্যবহার করা যেতে পারে নকলের ঝুঁকি ছাড়াই। +ToCreateARecurringInvoiceGeneAuto=If you need to have such invoices generated automatically, ask your administrator to enable and setup module %s. Note that both methods (manual and automatic) can be used together with no risk of duplication. DeleteRepeatableInvoice=টেমপ্লেট চালান মুছুন ConfirmDeleteRepeatableInvoice=আপনি কি নিশ্চিত আপনি টেমপ্লেট চালান মুছে ফেলতে চান? CreateOneBillByThird=তৃতীয় পক্ষের প্রতি একটি চালান তৈরি করুন (অন্যথায়, নির্বাচিত বস্তু প্রতি একটি চালান) diff --git a/htdocs/langs/bn_IN/cashdesk.lang b/htdocs/langs/bn_IN/cashdesk.lang index 24562c4ed3e..2a6101efd74 100644 --- a/htdocs/langs/bn_IN/cashdesk.lang +++ b/htdocs/langs/bn_IN/cashdesk.lang @@ -97,7 +97,7 @@ ReceiptPrinterMethodDescription=অনেক পরামিতি সহ শক ByTerminal=টার্মিনাল দ্বারা TakeposNumpadUsePaymentIcon=নমপ্যাডের পেমেন্ট বোতামে টেক্সটের পরিবর্তে আইকন ব্যবহার করুন CashDeskRefNumberingModules=POS বিক্রয়ের জন্য সংখ্যায়ন মডিউল -CashDeskGenericMaskCodes6 =
{TN}b09f870 ট্যাগ ব্যবহার করা হয় +CashDeskGenericMaskCodes6 =
{TN} tag is used to add the terminal number TakeposGroupSameProduct=একই পণ্যের লাইন মার্জ করুন StartAParallelSale=একটি নতুন সমান্তরাল বিক্রয় শুরু করুন SaleStartedAt=%s এ বিক্রি শুরু হয়েছে diff --git a/htdocs/langs/bn_IN/companies.lang b/htdocs/langs/bn_IN/companies.lang index f2498552d18..c6badb47fe6 100644 --- a/htdocs/langs/bn_IN/companies.lang +++ b/htdocs/langs/bn_IN/companies.lang @@ -335,13 +335,13 @@ CompanyHasRelativeDiscount=এই গ্রাহকের ডিফল্ট CompanyHasNoRelativeDiscount=এই গ্রাহকের ডিফল্টরূপে কোন আপেক্ষিক ডিসকাউন্ট নেই HasRelativeDiscountFromSupplier=আপনার ডিফল্ট ডিসকাউন্ট %s%% এই বিক্রেতার সাথে HasNoRelativeDiscountFromSupplier=এই বিক্রেতার সাথে কোন ডিফল্ট আপেক্ষিক ডিসকাউন্ট -CompanyHasAbsoluteDiscount=এই গ্রাহকের %sb09a4b739f17fz0এর জন্য ডিসকাউন্ট উপলব্ধ (ক্রেডিট নোট বা ডাউন পেমেন্ট) span> %s -CompanyHasDownPaymentOrCommercialDiscount=এই গ্রাহকের %sএর জন্য ডিসকাউন্ট উপলব্ধ (বাণিজ্যিক, ডাউন পেমেন্ট) > %s -CompanyHasCreditNote=এই গ্রাহকের কাছে এখনও %s %s +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for %s %s +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for %s %s +CompanyHasCreditNote=This customer still has credit notes for %s %s HasNoAbsoluteDiscountFromSupplier=এই বিক্রেতা থেকে কোন ডিসকাউন্ট/ক্রেডিট উপলব্ধ -HasAbsoluteDiscountFromSupplier=%sএর জন্য আপনার কাছে ছাড় রয়েছে (ক্রেডিট নোট বা ডাউন পেমেন্ট) > %s এই বিক্রেতার কাছ থেকে -HasDownPaymentOrCommercialDiscountFromSupplier=%sএর জন্য আপনার কাছে ছাড় রয়েছে (বাণিজ্যিক, ডাউন পেমেন্ট) এই বিক্রেতার কাছ থেকে %s -HasCreditNoteFromSupplier=আপনার কাছে %s %s এই বিক্রেতা থেকে +HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for %s %s from this vendor +HasDownPaymentOrCommercialDiscountFromSupplier=You have discounts available (commercial, down payments) for %s %s from this vendor +HasCreditNoteFromSupplier=You have credit notes for %s %s from this vendor CompanyHasNoAbsoluteDiscount=এই গ্রাহকের কোন ডিসকাউন্ট ক্রেডিট উপলব্ধ নেই CustomerAbsoluteDiscountAllUsers=নিখুঁত গ্রাহক ছাড় (সমস্ত ব্যবহারকারীদের দ্বারা প্রদত্ত) CustomerAbsoluteDiscountMy=সম্পূর্ণ গ্রাহক ছাড় (নিজের দ্বারা প্রদত্ত) diff --git a/htdocs/langs/bn_IN/compta.lang b/htdocs/langs/bn_IN/compta.lang index c99bf141940..3b7ab56d921 100644 --- a/htdocs/langs/bn_IN/compta.lang +++ b/htdocs/langs/bn_IN/compta.lang @@ -158,27 +158,27 @@ ConfirmDeleteVAT=আপনি কি এই ভ্যাট ঘোষণা ম ConfirmDeleteSalary=আপনি কি এই বেতন মুছে ফেলার বিষয়ে নিশ্চিত? ConfirmDeleteVariousPayment=আপনি কি এই বিভিন্ন অর্থপ্রদান মুছে ফেলার বিষয়ে নিশ্চিত? ExportDataset_tax_1=সামাজিক এবং রাজস্ব ট্যাক্স এবং পেমেন্ট -CalcModeVATDebt=মোড %sকমিটমেন্ট অ্যাকাউন্টিংয়ের উপর ভ্যাট%s। +CalcModeVATDebt=Mode %sVAT on commitment accounting%s. CalcModeVATEngagement=মোড %sআয়-ব্যয়ের উপর ভ্যাট%s. CalcModeDebt=পরিচিত নথিভুক্ত নথি বিশ্লেষণ CalcModeEngagement=পরিচিত নথিভুক্ত পেমেন্ট বিশ্লেষণ CalcModePayment=পরিচিত নথিভুক্ত পেমেন্ট বিশ্লেষণ CalcModeBookkeeping=বুককিপিং লেজার টেবিলে জার্নালাইজ করা ডেটা বিশ্লেষণ। CalcModeNoBookKeeping=এমনকি যদি তারা এখনও লেজারে হিসাব না করে থাকে -CalcModeLT1= মোড %sগ্রাহকের চালানের উপর RE - সরবরাহকারীদের চালানb0ecb2ec87f> -CalcModeLT1Debt=মোড %sগ্রাহকের চালানে RE%s -CalcModeLT1Rec= মোড %sসাপ্লায়ার ইনভয়েসে RE%s -CalcModeLT2= মোড %sগ্রাহকের চালানে IRPF - সরবরাহকারীদের চালানb0ecb2ec87f>
-CalcModeLT2Debt=মোড %sগ্রাহকের চালানে IRPF%s +CalcModeLT1= Mode %sRE on customer invoices - suppliers invoices%s +CalcModeLT1Debt=Mode %sRE on customer invoices%s +CalcModeLT1Rec= Mode %sRE on suppliers invoices%s +CalcModeLT2= Mode %sIRPF on customer invoices - suppliers invoices%s +CalcModeLT2Debt=Mode %sIRPF on customer invoices%s CalcModeLT2Rec= মোড %sসাপ্লায়ার ইনভয়েসগুলিতে IRPF%s AnnualSummaryDueDebtMode=আয় এবং ব্যয়ের ভারসাম্য, বার্ষিক সারাংশ AnnualSummaryInputOutputMode=আয় এবং ব্যয়ের ভারসাম্য, বার্ষিক সারাংশ AnnualByCompanies=অ্যাকাউন্টের পূর্বনির্ধারিত গোষ্ঠী দ্বারা আয় এবং ব্যয়ের ভারসাম্য AnnualByCompaniesDueDebtMode=আয় এবং ব্যয়ের ভারসাম্য, পূর্বনির্ধারিত গোষ্ঠী দ্বারা বিশদ, মোড %sদাবি-ঋণb0ecb2ec8080 বলেছে কমিটমেন্ট অ্যাকাউন্টিং। AnnualByCompaniesInputOutputMode=আয় এবং ব্যয়ের ভারসাম্য, পূর্বনির্ধারিত গোষ্ঠী দ্বারা বিশদ, মোড %sআয়-ব্যয়b0ecb2ecz80 বলেছেন নগদ হিসাব। -SeeReportInInputOutputMode=%sপেমেন্টের বিশ্লেষণ দেখুন%sরেকর্ড করা পেমেন্ট এর উপর ভিত্তি করে গণনার জন্য > এমনকি যদি সেগুলি এখনও এল একাউন্টে না থাকে -SeeReportInDueDebtMode=%sলিপিবদ্ধ নথির বিশ্লেষণ দেখুন%s পরিচিত লিপিবদ্ধ নথি একাউন্টে না থাকলেও একটি গণনার জন্য -SeeReportInBookkeepingMode=দেখুন %sখাতা খাতা টেবিলের বিশ্লেষণ%s notranslate'> বুককিপিং লেজার টেবিল ভিত্তিক একটি প্রতিবেদনের জন্য +SeeReportInInputOutputMode=See %sanalysis of payments%s for a calculation based on recorded payments made even if they are not yet accounted in Ledger +SeeReportInDueDebtMode=See %sanalysis of recorded documents%s for a calculation based on known recorded documents even if they are not yet accounted in Ledger +SeeReportInBookkeepingMode=See %sanalysis of bookkeeping ledger table%s for a report based on Bookkeeping Ledger table RulesAmountWithTaxIncluded=- সমস্ত ট্যাক্স সহ দেখানো পরিমাণ RulesAmountWithTaxExcluded=- সমস্ত ট্যাক্স বাদ দিয়ে দেখানো চালানের পরিমাণ RulesResultDue=- এতে সমস্ত ইনভয়েস, খরচ, ভ্যাট, অনুদান, বেতন অন্তর্ভুক্ত থাকে, সেগুলি দেওয়া হোক বা না হোক।
- এটি চালানের বিলিংয়ের তারিখ এবং নির্ধারিত তারিখের উপর ভিত্তি করে খরচ বা ট্যাক্স পেমেন্ট। বেতনের জন্য, মেয়াদ শেষ হওয়ার তারিখ ব্যবহার করা হয়। @@ -213,7 +213,7 @@ LT2ReportByQuarters=হার দ্বারা রিপোর্ট কর 3 LT1ReportByQuartersES=RE হার দ্বারা রিপোর্ট LT2ReportByQuartersES=IRPF হার দ্বারা রিপোর্ট SeeVATReportInInputOutputMode=প্রতিবেদন দেখুন %sভ্যাট সংগ্রহ%s একটি আদর্শ গণনার জন্য -SeeVATReportInDueDebtMode=রিপোর্ট দেখুন %sডেবিটের উপর ভ্যাট%s +SeeVATReportInDueDebtMode=See report %sVAT on debit%s for a calculation with an option on the invoicing RulesVATInServices=- পরিষেবাগুলির জন্য, প্রতিবেদনে অর্থপ্রদানের তারিখের ভিত্তিতে প্রকৃতপক্ষে প্রাপ্ত অর্থপ্রদানের ভ্যাট অন্তর্ভুক্ত থাকে। RulesVATInProducts=- বস্তুগত সম্পদের জন্য, প্রতিবেদনে অর্থপ্রদানের তারিখের ভিত্তিতে ভ্যাট অন্তর্ভুক্ত থাকে। RulesVATDueServices=- পরিষেবার জন্য, প্রতিবেদনে ইনভয়েসের তারিখের উপর ভিত্তি করে, পরিশোধ করা বা না করা বকেয়া চালানের ভ্যাট অন্তর্ভুক্ত রয়েছে। diff --git a/htdocs/langs/bn_IN/cron.lang b/htdocs/langs/bn_IN/cron.lang index 3f03cd9dd5c..59f78a4fac1 100644 --- a/htdocs/langs/bn_IN/cron.lang +++ b/htdocs/langs/bn_IN/cron.lang @@ -1,6 +1,5 @@ # Dolibarr language file - Source file is en_US - cron -# About page -# Right +# Permissions Permission23101 = নির্ধারিত চাকরি পড়ুন Permission23102 = নির্ধারিত কাজ তৈরি/আপডেট করুন Permission23103 = নির্ধারিত কাজ মুছুন @@ -64,7 +63,7 @@ CronTaskInactive=এই কাজটি অক্ষম (নির্ধার CronId=আইডি CronClassFile=ক্লাস সহ ফাইলের নাম CronModuleHelp=Dolibarr মডিউল ডিরেক্টরির নাম (এছাড়াও বহিরাগত Dolibarr মডিউলের সাথে কাজ করে)।
উদাহরণস্বরূপ ডলিবার প্রোডাক্ট অবজেক্টের আনয়ন পদ্ধতি কল করার জন্য /class/product.class.php, মডিউলের মান হল
পণ্য -CronClassFileHelp=লোড করার জন্য আপেক্ষিক পাথ এবং ফাইলের নাম (পাথটি ওয়েব সার্ভার রুট ডিরেক্টরির সাথে সম্পর্কিত)।
উদাহরণস্বরূপ Dolibarr পণ্য বস্তু htdocs/product/class/product.class.php, ক্লাস ফাইল নামের মান হল
পণ্য/শ্রেণী/পণ্য .class.php +CronClassFileHelp=The relative path and file name to load (path is relative to web server root directory).
For example to call the fetch method of Dolibarr Product object htdocs/product/class/product.class.php, the value for class file name is
product/class/product.class.php CronObjectHelp=লোড করার জন্য বস্তুর নাম।
উদাহরণস্বরূপ ডলিবার প্রোডাক্ট অবজেক্টের আনয়ন পদ্ধতি কল করার জন্য /htdocs/product/class/product.class.php, ক্লাস ফাইল নামের মান হল
পণ্য CronMethodHelp=লঞ্চ করার জন্য অবজেক্ট পদ্ধতি।
উদাহরণস্বরূপ ডলিবার প্রোডাক্ট অবজেক্টের আনয়ন পদ্ধতিকে কল করার জন্য /htdocs/product/class/product.class.php, পদ্ধতির মান হল
আনয়ন CronArgsHelp=পদ্ধতি আর্গুমেন্ট.
উদাহরণস্বরূপ ডলিবার প্রোডাক্ট অবজেক্টের আনয়ন পদ্ধতি কল করার জন্য /htdocs/product/class/product.class.php, প্যারামিটারের মান হতে পারে
0, ProductRef diff --git a/htdocs/langs/bn_IN/errors.lang b/htdocs/langs/bn_IN/errors.lang index 73bc9be1499..3ec24e29aae 100644 --- a/htdocs/langs/bn_IN/errors.lang +++ b/htdocs/langs/bn_IN/errors.lang @@ -15,12 +15,12 @@ ErrorGroupAlreadyExists=গ্রুপ %s ইতিমধ্যেই বিদ ErrorEmailAlreadyExists=ইমেল %s ইতিমধ্যেই বিদ্যমান। ErrorRecordNotFound=রেকর্ড পাওয়া যায়নি। ErrorRecordNotFoundShort=পাওয়া যায়নি -ErrorFailToCopyFile='%s' ফাইলটি '%s'। -ErrorFailToCopyDir='%s' '%s'। -ErrorFailToRenameFile='%s' ফাইলের নাম পরিবর্তন করতে ব্যর্থ হয়েছে '%s'। +ErrorFailToCopyFile=Failed to copy file '%s' into '%s'. +ErrorFailToCopyDir=Failed to copy directory '%s' into '%s'. +ErrorFailToRenameFile=Failed to rename file '%s' into '%s'. ErrorFailToDeleteFile='%s' ফাইল সরাতে ব্যর্থ হয়েছে৷ ErrorFailToCreateFile='%s' ফাইল তৈরি করতে ব্যর্থ হয়েছে৷ -ErrorFailToRenameDir='%s'কে '%s'। +ErrorFailToRenameDir=Failed to rename directory '%s' into '%s'. ErrorFailToCreateDir='%s' ডিরেক্টরি তৈরি করতে ব্যর্থ হয়েছে৷ ErrorFailToDeleteDir='%s' ডিরেক্টরি মুছে ফেলতে ব্যর্থ হয়েছে৷ ErrorFailToMakeReplacementInto='%s' ফাইলে প্রতিস্থাপন করতে ব্যর্থ হয়েছে৷ @@ -51,7 +51,7 @@ ErrorBadDateFormat=মান '%s' তারিখের বিন্যাস ErrorWrongDate=তারিখ ঠিক হয়নি! ErrorFailedToWriteInDir=%s ডিরেক্টরিতে লিখতে ব্যর্থ হয়েছে ErrorFailedToBuildArchive=সংরক্ষণাগার ফাইল তৈরি করতে ব্যর্থ %s -ErrorFoundBadEmailInFile=ফাইলে %s লাইনের জন্য ভুল ইমেল সিনট্যাক্স পাওয়া গেছে (উদাহরণ লাইন %s ইমেল=b0ecb2ecz87fb0ecb2ecz87f) +ErrorFoundBadEmailInFile=Found incorrect email syntax for %s lines in file (example line %s with email=%s) ErrorUserCannotBeDelete=ব্যবহারকারী মুছে ফেলা যাবে না. হতে পারে এটি ডলিবার সত্তার সাথে যুক্ত। ErrorFieldsRequired=কিছু প্রয়োজনীয় ক্ষেত্র ফাঁকা রাখা হয়েছে। ErrorSubjectIsRequired=ইমেইল বিষয় প্রয়োজন @@ -81,7 +81,7 @@ ErrorNoValueForRadioType=রেডিও তালিকার জন্য ম ErrorBadFormatValueList=তালিকার মানের একাধিক কমা থাকতে পারে না: %s, কিন্তু অন্তত একটি প্রয়োজন: কী, মান ErrorFieldCanNotContainSpecialCharacters=%s ক্ষেত্রটিতে অবশ্যই বিশেষ অক্ষর থাকবে না। ErrorFieldCanNotContainSpecialNorUpperCharacters=%s বিশেষ অক্ষর থাকা উচিত নয়, বড় হাতের অক্ষরও থাকবে না অক্ষর, এবং একটি বর্ণানুক্রমিক অক্ষর দিয়ে শুরু করতে হবে (a-z) -ErrorFieldMustHaveXChar=%s ক্ষেত্রটিতে কমপক্ষে %s অক্ষর। +ErrorFieldMustHaveXChar=The field %s must have at least %s characters. ErrorNoAccountancyModuleLoaded=কোনো অ্যাকাউন্টেন্সি মডিউল সক্রিয় করা হয়নি ErrorExportDuplicateProfil=এই প্রোফাইল নামটি এই এক্সপোর্ট সেটের জন্য ইতিমধ্যেই বিদ্যমান। ErrorLDAPSetupNotComplete=Dolibarr-LDAP মিল সম্পূর্ণ নয়। @@ -95,9 +95,9 @@ ErrorModuleRequireJavascript=এই বৈশিষ্ট্যটি কাজ ErrorPasswordsMustMatch=উভয় টাইপ করা পাসওয়ার্ড একে অপরের সাথে মিলতে হবে ErrorContactEMail=একটি প্রযুক্তিগত ত্রুটি ঘটেছে. অনুগ্রহ করে, নিম্নলিখিত ইমেল %s করার জন্য প্রশাসকের সাথে যোগাযোগ করুন এবং ত্রুটি প্রদান করুন কোড %s আপনার বার্তায়, অথবা এর একটি স্ক্রিন কপি যোগ করুন এই পৃষ্ঠা. ErrorWrongValueForField=ক্ষেত্র %s: ' %s' রেজেক্স নিয়মের সাথে মেলে না %s
-ErrorHtmlInjectionForField=ক্ষেত্র %s: মান '%s' একটি দূষিত ডেটা রয়েছে অনুমোদিত নয় -ErrorFieldValueNotIn=ক্ষেত্র %s: ' %s' b0aee83z5 এর span>%s %s -ErrorFieldRefNotIn=ক্ষেত্র %s: ' %s' একটি b0aee83f>%s বিদ্যমান রেফ +ErrorHtmlInjectionForField=Field %s: The value '%s' contains a malicious data not allowed +ErrorFieldValueNotIn=Field %s: '%s' is not a value found in field %s of %s +ErrorFieldRefNotIn=Field %s: '%s' is not a %s existing ref ErrorMultipleRecordFoundFromRef=রেফ %s থেকে অনুসন্ধান করার সময় বেশ কিছু রেকর্ড পাওয়া গেছে। কোন আইডি ব্যবহার করবেন তা জানার উপায় নেই। ErrorsOnXLines=%s ত্রুটি পাওয়া গেছে ErrorFileIsInfectedWithAVirus=অ্যান্টিভাইরাস প্রোগ্রাম ফাইলটি যাচাই করতে সক্ষম হয়নি (ফাইলটি ভাইরাস দ্বারা সংক্রমিত হতে পারে) @@ -219,7 +219,7 @@ ErrorPhpMailDelivery=পরীক্ষা করুন যে আপনি খ ErrorUserNotAssignedToTask=ব্যবহারকারীকে অবশ্যই কাজে নিযুক্ত করতে হবে যাতে সময় ব্যয় করা যায়। ErrorTaskAlreadyAssigned=টাস্ক ইতিমধ্যেই ব্যবহারকারীকে বরাদ্দ করা হয়েছে৷ ErrorModuleFileSeemsToHaveAWrongFormat=মডিউল প্যাকেজ একটি ভুল বিন্যাস আছে বলে মনে হচ্ছে. -ErrorModuleFileSeemsToHaveAWrongFormat2=মডিউলের জিপে অন্তত একটি বাধ্যতামূলক ডিরেক্টরি থাকতে হবে: %sb0a65d071f6fz90 অথবা %s +ErrorModuleFileSeemsToHaveAWrongFormat2=At least one mandatory directory must exists into zip of module: %s or %s ErrorFilenameDosNotMatchDolibarrPackageRules=মডিউল প্যাকেজের নাম (%s) মেলে না প্রত্যাশিত নামের সিনট্যাক্স: %s ErrorDuplicateTrigger=ত্রুটি, ডুপ্লিকেট ট্রিগার নাম %s। ইতিমধ্যেই %s থেকে লোড করা হয়েছে৷ ErrorNoWarehouseDefined=ত্রুটি, কোনো গুদাম সংজ্ঞায়িত করা নেই। @@ -263,9 +263,9 @@ ErrorReplaceStringEmpty=ত্রুটি, প্রতিস্থাপন ErrorProductNeedBatchNumber=ত্রুটি, পণ্য '%s' প্রচুর/ক্রমিক নম্বর প্রয়োজন ErrorProductDoesNotNeedBatchNumber=ত্রুটি, পণ্য '%s' অনেক কিছু গ্রহণ করে না/ ক্রমিক সংখ্যা ErrorFailedToReadObject=ত্রুটি, %s প্রকারের বস্তু পড়তে ব্যর্থ হয়েছে -ErrorParameterMustBeEnabledToAllwoThisFeature=ত্রুটি, প্যারামিটার %s অবশ্যই conf/conf.php<> অভ্যন্তরীণ কাজের সময়সূচী দ্বারা কমান্ড লাইন ইন্টারফেস ব্যবহারের অনুমতি দিতে +ErrorParameterMustBeEnabledToAllwoThisFeature=Error, parameter %s must be enabled into conf/conf.php<> to allow use of Command Line Interface by the internal job scheduler ErrorLoginDateValidity=ত্রুটি, এই লগইনটি বৈধতার তারিখ সীমার বাইরে -ErrorValueLength='%s' ফিল্ডের দৈর্ঘ্য অবশ্যই '< এর থেকে বেশি হতে হবে span class='notranslate'>%s' +ErrorValueLength=Length of field '%s' must be higher than '%s' ErrorReservedKeyword='%s' শব্দটি একটি সংরক্ষিত কীওয়ার্ড ErrorFilenameReserved=ফাইলের নাম %s ব্যবহার করা যাবে না কারণ এটি একটি। সংরক্ষিত এবং সুরক্ষিত কমান্ড। ErrorNotAvailableWithThisDistribution=এই বিতরণের সাথে উপলব্ধ নয় @@ -337,7 +337,7 @@ WarningParamUploadMaxFileSizeHigherThanPostMaxSize=আপনার PHP প্য WarningPasswordSetWithNoAccount=এই সদস্যের জন্য একটি পাসওয়ার্ড সেট করা হয়েছে৷ তবে কোনো ব্যবহারকারীর অ্যাকাউন্ট তৈরি হয়নি। তাই এই পাসওয়ার্ড সংরক্ষণ করা হয় কিন্তু Dolibarr লগইন করতে ব্যবহার করা যাবে না. এটি একটি বাহ্যিক মডিউল/ইন্টারফেস দ্বারা ব্যবহার করা যেতে পারে কিন্তু যদি আপনাকে কোনো সদস্যের জন্য কোনো লগইন বা পাসওয়ার্ড নির্ধারণ করতে না হয়, তাহলে আপনি সদস্য মডিউল সেটআপ থেকে "প্রতিটি সদস্যের জন্য একটি লগইন পরিচালনা করুন" বিকল্পটি নিষ্ক্রিয় করতে পারেন৷ আপনার যদি লগইন পরিচালনা করতে হয় কিন্তু কোনো পাসওয়ার্ডের প্রয়োজন না হয়, তাহলে এই সতর্কতা এড়াতে আপনি এই ক্ষেত্রটি খালি রাখতে পারেন। দ্রষ্টব্য: সদস্য যদি ব্যবহারকারীর সাথে সংযুক্ত থাকে তবে ইমেলটি লগইন হিসাবেও ব্যবহার করা যেতে পারে। WarningMandatorySetupNotComplete=প্রধান পরামিতি সেটআপ করতে এখানে ক্লিক করুন WarningEnableYourModulesApplications=আপনার মডিউল এবং অ্যাপ্লিকেশন সক্রিয় করতে এখানে ক্লিক করুন -WarningSafeModeOnCheckExecDir=সতর্কতা, PHP বিকল্প safe_mode চালু আছে তাই php প্যারামিটার safe_mode_exec_dir৷ +WarningSafeModeOnCheckExecDir=Warning, PHP option safe_mode is on so command must be stored inside a directory declared by php parameter safe_mode_exec_dir. WarningBookmarkAlreadyExists=এই শিরোনাম বা এই লক্ষ্য (URL) সহ একটি বুকমার্ক ইতিমধ্যেই বিদ্যমান৷ WarningPassIsEmpty=সতর্কতা, ডাটাবেস পাসওয়ার্ড খালি। এটি একটি নিরাপত্তা গর্ত. আপনার ডাটাবেসে একটি পাসওয়ার্ড যোগ করা উচিত এবং এটি প্রতিফলিত করার জন্য আপনার conf.php ফাইল পরিবর্তন করা উচিত। WarningConfFileMustBeReadOnly=সতর্কতা, আপনার কনফিগার ফাইল (htdocs/conf/conf.php) ওয়েব সার্ভার দ্বারা ওভাররাইট করা যেতে পারে। এটি একটি গুরুতর নিরাপত্তা গর্ত. ওয়েব সার্ভার দ্বারা ব্যবহৃত অপারেটিং সিস্টেম ব্যবহারকারীর জন্য শুধুমাত্র পঠন মোডে ফাইলের অনুমতিগুলি পরিবর্তন করুন৷ আপনি যদি আপনার ডিস্কের জন্য Windows এবং FAT ফর্ম্যাট ব্যবহার করেন, তাহলে আপনাকে অবশ্যই জানতে হবে যে এই ফাইল সিস্টেম ফাইলে অনুমতি যোগ করার অনুমতি দেয় না, তাই সম্পূর্ণ নিরাপদ হতে পারে না। diff --git a/htdocs/langs/bn_IN/eventorganization.lang b/htdocs/langs/bn_IN/eventorganization.lang index 6166f24bfe7..cd5f6ea8379 100644 --- a/htdocs/langs/bn_IN/eventorganization.lang +++ b/htdocs/langs/bn_IN/eventorganization.lang @@ -36,7 +36,7 @@ EventOrganizationSetup=ইভেন্ট অর্গানাইজেশন EventOrganization=ইভেন্ট সংগঠন EventOrganizationSetupPage = ইভেন্ট সংস্থা সেটআপ পৃষ্ঠা EVENTORGANIZATION_TASK_LABEL = প্রোজেক্ট যাচাই করা হলে স্বয়ংক্রিয়ভাবে তৈরি করা কাজের লেবেল -EVENTORGANIZATION_TASK_LABELTooltip = যখন আপনি একটি ইভেন্টকে সংগঠিত করার জন্য যাচাই করেন, তখন কিছু কাজ স্বয়ংক্রিয়ভাবে প্রকল্পে তৈরি হতে পারে

উদাহরণস্বরূপ:
সম্মেলনের জন্য কল পাঠান
বুথের জন্য কল পাঠান
সম্মেলনের প্রস্তাবনা ='notranslate'>
বুথের জন্য আবেদন যাচাই করুন
অতিথিদের জন্য ইভেন্টের সদস্যতা উন্মুক্ত করুন
respandSmin বক্তাদের কাছে ইভেন্টের কথা
বুথ হোস্টার্সকে ইভেন্টের একটি অনুস্মারক পাঠান
অতিথিদের ইভেন্টের একটি অনুস্মারক পাঠান +EVENTORGANIZATION_TASK_LABELTooltip = When you validate an event to organize, some tasks can be automatically created in the project

For example:
Send Call for Conferences
Send Call for Booths
Validate suggestions of Conferences
Validate application for Booths
Open subscriptions to the event for attendees
Send a remind of the event to speakers
Send a remind of the event to Booth hosters
Send a remind of the event to attendees EVENTORGANIZATION_TASK_LABELTooltip2=আপনার যদি স্বয়ংক্রিয়ভাবে কাজ তৈরি করার প্রয়োজন না হয় তবে খালি রাখুন। EVENTORGANIZATION_CATEG_THIRDPARTY_CONF = তৃতীয় পক্ষের সাথে যুক্ত করার জন্য বিভাগ স্বয়ংক্রিয়ভাবে তৈরি হয় যখন কেউ একটি সম্মেলনের পরামর্শ দেয় EVENTORGANIZATION_CATEG_THIRDPARTY_BOOTH = তৃতীয় পক্ষের সাথে যুক্ত করার জন্য বিভাগ স্বয়ংক্রিয়ভাবে তৈরি করা হয় যখন তারা একটি বুথের পরামর্শ দেয় @@ -88,6 +88,7 @@ PriceOfRegistration=নিবন্ধনের মূল্য PriceOfRegistrationHelp=ইভেন্টে নিবন্ধন বা অংশগ্রহণের জন্য মূল্য দিতে হবে PriceOfBooth=সাবস্ক্রিপশন মূল্য একটি বুথ দাঁড়ানো PriceOfBoothHelp=সাবস্ক্রিপশন মূল্য একটি বুথ দাঁড়ানো +EventOrganizationICSLinkProject=Link ICS for the event EventOrganizationICSLink=সম্মেলনের জন্য আইসিএস লিঙ্ক করুন ConferenceOrBoothInformation=সম্মেলন বা বুথ তথ্য Attendees=উপস্থিতরা diff --git a/htdocs/langs/bn_IN/exports.lang b/htdocs/langs/bn_IN/exports.lang index 56ad0259785..00988332004 100644 --- a/htdocs/langs/bn_IN/exports.lang +++ b/htdocs/langs/bn_IN/exports.lang @@ -72,7 +72,7 @@ FieldsTarget=টার্গেটেড ক্ষেত্র FieldTarget=টার্গেটেড ক্ষেত্র FieldSource=উৎস ক্ষেত্র NbOfSourceLines=উৎস ফাইলে লাইনের সংখ্যা -NowClickToTestTheImport=আপনার ফাইলের ফাইল ফরম্যাট (ক্ষেত্র এবং স্ট্রিং ডিলিমিটার) দেখানো বিকল্পগুলির সাথে মেলে এবং আপনি হেডার লাইনটি বাদ দিয়েছেন কিনা তা পরীক্ষা করে দেখুন, অথবা এইগুলি নিম্নলিখিত সিমুলেশনে ত্রুটি হিসাবে ফ্ল্যাগ করা হবে।
একটি চালানোর জন্য "%s" বোতামে ক্লিক করুন ফাইলের গঠন/বিষয়বস্তু পরীক্ষা করুন এবং আমদানি প্রক্রিয়া অনুকরণ করুন।
আপনার ডাটাবেসে কোনো ডেটা পরিবর্তন করা হবে না। +NowClickToTestTheImport=Check that the file format (field and string delimiters) of your file matches the options shown and that you have omitted the header line, or these will be flagged as errors in the following simulation.
Click on the "%s" button to run a check of the file structure/contents and simulate the import process.
No data will be changed in your database. RunSimulateImportFile=আমদানি সিমুলেশন চালান FieldNeedSource=এই ক্ষেত্রের উৎস ফাইল থেকে ডেটা প্রয়োজন SomeMandatoryFieldHaveNoSource=কিছু বাধ্যতামূলক ক্ষেত্র ডেটা ফাইল থেকে কোন উৎস নেই @@ -83,19 +83,19 @@ SelectFormat=এই আমদানি ফাইল বিন্যাস নি RunImportFile=তথ্য আমদানি NowClickToRunTheImport=আমদানি সিমুলেশন ফলাফল পরীক্ষা করুন. কোনো ত্রুটি সংশোধন করুন এবং পুনরায় পরীক্ষা করুন।
যখন সিমুলেশন কোনো ত্রুটির প্রতিবেদন করে না আপনি ডাটাবেসে ডেটা আমদানি করতে এগিয়ে যেতে পারেন। DataLoadedWithId=এই আমদানি আইডি সহ প্রতিটি ডাটাবেস টেবিলে আমদানি করা ডেটার একটি অতিরিক্ত ক্ষেত্র থাকবে: %s, এই আমদানির সাথে সম্পর্কিত একটি সমস্যা তদন্তের ক্ষেত্রে এটি অনুসন্ধানযোগ্য হওয়ার অনুমতি দিতে৷ -ErrorMissingMandatoryValue=%s কলামের উৎস ফাইলে বাধ্যতামূলক ডেটা খালি। +ErrorMissingMandatoryValue=Mandatory data is empty in the source file in column %s. TooMuchErrors=এখনও %s ত্রুটি সহ অন্যান্য উত্স লাইন আছে কিন্তু আউটপুট আছে সীমিত করা হয়েছে। TooMuchWarnings=এখনও %s সতর্কতা সহ অন্যান্য উত্স লাইন আছে কিন্তু আউটপুট আছে সীমিত করা হয়েছে। EmptyLine=খালি লাইন (বাদ দেওয়া হবে) -CorrectErrorBeforeRunningImport=আপনাকে অবশ্যই সমস্ত ত্রুটি সংশোধন করতে হবে আগে notranslate'> নিশ্চিত আমদানি চলছে৷ +CorrectErrorBeforeRunningImport=You must correct all errors before running the definitive import. FileWasImported=%s নম্বর সহ ফাইল আমদানি করা হয়েছে৷ -YouCanUseImportIdToFindRecord=আপনি import_key='%s'
। +YouCanUseImportIdToFindRecord=You can find all the imported records in your database by filtering on field import_key='%s'. NbOfLinesOK=কোনো ত্রুটি এবং কোনো সতর্কতা ছাড়াই লাইনের সংখ্যা: %s NbOfLinesImported=লাইনের সংখ্যা সফলভাবে আমদানি করা হয়েছে: %s। DataComeFromNoWhere=সন্নিবেশ করার মান উৎস ফাইলের কোথাও থেকে আসে। DataComeFromFileFieldNb=সন্নিবেশ করার মান উৎস ফাইলে %s থেকে আসে। DataComeFromIdFoundFromRef=সোর্স ফাইল থেকে আসা মানটি ব্যবহার করার জন্য মূল বস্তুর আইডি খুঁজে পেতে ব্যবহার করা হবে (তাই বস্তুটি %s যার রেফ. ফ্রম সোর্স ফাইলটি ডাটাবেসে বিদ্যমান থাকতে হবে)। -DataComeFromIdFoundFromCodeId=সোর্স ফাইল থেকে আসা কোডের মান ব্যবহার করা হবে প্যারেন্ট অবজেক্টের আইডি খুঁজে বের করার জন্য (সুতরাং সোর্স ফাইলের কোডটি ডিকশনারিতে থাকা আবশ্যক %s)। মনে রাখবেন যে আপনি যদি আইডিটি জানেন তবে আপনি কোডের পরিবর্তে সোর্স ফাইলে এটি ব্যবহার করতে পারেন। আমদানি উভয় ক্ষেত্রেই কাজ করা উচিত। +DataComeFromIdFoundFromCodeId=The value of code that comes from source file will be used to find the id of the parent object to use (so the code from source file must exist in the dictionary %s). Note that if you know the id, you can also use it in the source file instead of the code. Import should work in both cases. DataIsInsertedInto=উৎস ফাইল থেকে আসা ডেটা নিম্নলিখিত ক্ষেত্রে সন্নিবেশ করা হবে: DataIDSourceIsInsertedInto=মূল বস্তুর আইডি, যা উৎস ফাইলের ডেটা ব্যবহার করে পাওয়া গেছে, নিম্নলিখিত ক্ষেত্রে সন্নিবেশ করা হবে: DataCodeIDSourceIsInsertedInto=প্যারেন্ট লাইনের আইডি, যা কোড থেকে পাওয়া গেছে, নিম্নলিখিত ক্ষেত্রে ঢোকানো হবে: @@ -113,8 +113,8 @@ Separator=ক্ষেত্র বিভাজক Enclosure=স্ট্রিং ডিলিমিটার SpecialCode=বিশেষ কোড ExportStringFilter=%% পাঠ্যের এক বা একাধিক অক্ষর প্রতিস্থাপনের অনুমতি দেয় -ExportDateFilter=YYYY, YYYYMM, YYYYMMDD: এক বছর/মাস/দিনের দ্বারা ফিল্টার করুন
YYYY+YYYY, YYYYMM+YYYYMM, YYYYMMDD+YYYYMMDD+YYYYMMDD বছর/মাস/মাস রেঞ্জের বেশি বছর span class='notranslate'>
> YYYY, > YYYYMM, > YYYYMMDD: পরবর্তী সমস্ত বছর/মাস/দিনে ফিল্টার
< YYYY, NNNNN+NNNNN ফিল্টারগুলি বিভিন্ন মানের পরিসরে
> NNNNN উচ্চতর মান দ্বারা ফিল্টার +ExportDateFilter=YYYY, YYYYMM, YYYYMMDD: filters by one year/month/day
YYYY+YYYY, YYYYMM+YYYYMM, YYYYMMDD+YYYYMMDD: filters over a range of years/months/days
> YYYY, > YYYYMM, > YYYYMMDD: filters on all following years/months/days
< YYYY, < YYYYMM, < YYYYMMDD: filters on all previous years/months/days +ExportNumericFilter=NNNNN filters by one value
NNNNN+NNNNN filters over a range of values
< NNNNN filters by lower values
> NNNNN filters by higher values ImportFromLine=লাইন নম্বর থেকে শুরু করে আমদানি EndAtLineNb=লাইন নম্বরে শেষ করুন ImportFromToLine=সীমা পরিসীমা (থেকে - থেকে)। যেমন হেডার লাইন(গুলি) বাদ দিতে। diff --git a/htdocs/langs/bn_IN/install.lang b/htdocs/langs/bn_IN/install.lang index b3c934c7305..710ab364046 100644 --- a/htdocs/langs/bn_IN/install.lang +++ b/htdocs/langs/bn_IN/install.lang @@ -14,7 +14,7 @@ PHPSupportPOSTGETKo=এটা সম্ভব যে আপনার PHP সে PHPSupportSessions=এই পিএইচপি সেশন সমর্থন করে। PHPSupport=এই PHP %s ফাংশন সমর্থন করে। PHPMemoryOK=আপনার PHP সর্বোচ্চ সেশন মেমরি %s এ সেট করা আছে। এই যথেষ্ট হওয়া উচিত. -PHPMemoryTooLow=আপনার PHP সর্বোচ্চ সেশন মেমরি %s বাইটে সেট করা আছে। এটা খুবই কম। আপনার php.ini মেমোরি সেট করতে পরিবর্তন করুন ='notranslate'>
প্যারামিটারে অন্তত %sb091b বাইট। +PHPMemoryTooLow=Your PHP max session memory is set to %s bytes. This is too low. Change your php.ini to set memory_limit parameter to at least %s bytes. Recheck=আরো বিস্তারিত পরীক্ষার জন্য এখানে ক্লিক করুন ErrorPHPDoesNotSupportSessions=আপনার পিএইচপি ইনস্টলেশন সেশন সমর্থন করে না. ডলিবারকে কাজ করার অনুমতি দেওয়ার জন্য এই বৈশিষ্ট্যটি প্রয়োজন। আপনার পিএইচপি সেটআপ এবং সেশন ডিরেক্টরির অনুমতি পরীক্ষা করুন। ErrorPHPDoesNotSupport=আপনার PHP ইনস্টলেশন %s ফাংশন সমর্থন করে না। @@ -115,8 +115,8 @@ OrphelinsPaymentsDetectedByMethod=%s পদ্ধতির মাধ্যমে RemoveItManuallyAndPressF5ToContinue=এটি ম্যানুয়ালি সরান এবং চালিয়ে যেতে F5 টিপুন। FieldRenamed=ক্ষেত্রটির নাম পরিবর্তন করা হয়েছে IfLoginDoesNotExistsCheckCreateUser=যদি ব্যবহারকারী এখনও বিদ্যমান না থাকে তবে আপনাকে অবশ্যই "ব্যবহারকারী তৈরি করুন" বিকল্পটি চেক করতে হবে -ErrorConnection=সার্ভার "%s", ডাটাবেসের নাম "%s", লগইন "b0aee%s", অথবা ডাটাবেস পাসওয়ার্ড ভুল হতে পারে বা PHP ক্লায়েন্ট সংস্করণ ডাটাবেস সংস্করণের তুলনায় অনেক পুরানো হতে পারে . -InstallChoiceRecommanded=আপনার বর্তমান সংস্করণ %s সংস্করণ ইনস্টল করার প্রস্তাবিত পছন্দ class='notranslate'>%s +ErrorConnection=Server "%s", database name "%s", login "%s", or database password may be wrong or the PHP client version may be too old compared to the database version. +InstallChoiceRecommanded=Recommended choice to install version %s from your current version %s InstallChoiceSuggested=ইন্সটলার দ্বারা প্রস্তাবিত ইনস্টল পছন্দ৷ MigrateIsDoneStepByStep=লক্ষ্যযুক্ত সংস্করণে (%s) বেশ কয়েকটি সংস্করণের ব্যবধান রয়েছে। এটি সম্পূর্ণ হয়ে গেলে ইনস্টল উইজার্ডটি আরও একটি মাইগ্রেশনের পরামর্শ দিতে ফিরে আসবে। CheckThatDatabasenameIsCorrect=পরীক্ষা করুন যে ডাটাবেসের নাম "%s" সঠিক। diff --git a/htdocs/langs/bn_IN/ldap.lang b/htdocs/langs/bn_IN/ldap.lang index 12070195724..f876f142287 100644 --- a/htdocs/langs/bn_IN/ldap.lang +++ b/htdocs/langs/bn_IN/ldap.lang @@ -1,5 +1,5 @@ # Dolibarr language file - Source file is en_US - ldap -YouMustChangePassNextLogon=%s পরিবর্তন করতে হবে। +YouMustChangePassNextLogon=Password for user %s on the domain %s must be changed. UserMustChangePassNextLogon=ব্যবহারকারীকে ডোমেনে পাসওয়ার্ড পরিবর্তন করতে হবে %s LDAPInformationsForThisContact=এই পরিচিতির জন্য LDAP ডাটাবেসে তথ্য LDAPInformationsForThisUser=এই ব্যবহারকারীর জন্য LDAP ডাটাবেসে তথ্য diff --git a/htdocs/langs/bn_IN/mails.lang b/htdocs/langs/bn_IN/mails.lang index 98e16fd9b76..8caa8282594 100644 --- a/htdocs/langs/bn_IN/mails.lang +++ b/htdocs/langs/bn_IN/mails.lang @@ -147,7 +147,7 @@ UseFormatFileEmailToTarget=আমদানি করা ফাইলে অব UseFormatInputEmailToTarget=বিন্যাস সহ একটি স্ট্রিং লিখুন email;name;firstname;other MailAdvTargetRecipients=প্রাপক (উন্নত নির্বাচন) AdvTgtTitle=লক্ষ্য করার জন্য তৃতীয় পক্ষ বা পরিচিতি/ঠিকানাগুলি পূর্বনির্বাচন করতে ইনপুট ক্ষেত্রগুলি পূরণ করুন -AdvTgtSearchTextHelp=ওয়াইল্ডকার্ড হিসেবে %% ব্যবহার করুন। উদাহরণস্বরূপ জিন, জো, জিম এর মতো সমস্ত আইটেম খুঁজে পেতে, আপনি ইনপুট করতে পারেন j%%, আপনিও ব্যবহার করতে পারেন ; মান জন্য বিভাজক হিসাবে, এবং ব্যবহার করুন! এই মান ছাড়া জন্য. যেমন jean;joe;jim%%;!jimo;!jimab07e63171f5dacz span> সব জিন, জো, জিম দিয়ে শুরু করবে কিন্তু জিমো নয় এবং জিমা দিয়ে শুরু হওয়া সবকিছু নয় +AdvTgtSearchTextHelp=Use %% as wildcards. For example to find all item like jean, joe, jim, you can input j%%, you can also use ; as separator for value, and use ! for except this value. For example jean;joe;jim%%;!jimo;!jima%% will target all jean, joe, start with jim but not jimo and not everything that starts with jima AdvTgtSearchIntHelp=int বা ফ্লোট মান নির্বাচন করতে ব্যবধান ব্যবহার করুন AdvTgtMinVal=সর্বনিম্ন মান AdvTgtMaxVal=সর্বোচ্চ মূল্য @@ -182,7 +182,7 @@ IsAnAnswer=এটি একটি প্রাথমিক ইমেলের RecordCreatedByEmailCollector=ইমেল সংগ্রাহকের দ্বারা তৈরি করা রেকর্ড %s ইমেল থেকে %s DefaultBlacklistMailingStatus=একটি নতুন পরিচিতি তৈরি করার সময় '%s' ক্ষেত্রের ডিফল্ট মান DefaultStatusEmptyMandatory=খালি কিন্তু বাধ্যতামূলক -WarningLimitSendByDay=সতর্কতা: আপনার উদাহরণের সেটআপ বা চুক্তিটি প্রতিদিন আপনার ইমেলের সংখ্যা %s। আরও পাঠানোর চেষ্টা করার ফলে আপনার দৃষ্টান্ত ধীর বা স্থগিত হতে পারে। আপনি একটি উচ্চ কোটা প্রয়োজন হলে আপনার সমর্থনের সাথে যোগাযোগ করুন. +WarningLimitSendByDay=WARNING: The setup or contract of your instance limits your number of emails per day to %s. Trying to send more may result in having your instance slow down or suspended. Please contact your support if you need a higher quota. NoMoreRecipientToSendTo=ইমেল পাঠাতে আর কোন প্রাপক EmailOptedOut=ইমেলের মালিক অনুরোধ করেছেন এই ইমেলের মাধ্যমে তার সাথে আর যোগাযোগ না করার জন্য EvenUnsubscribe=অপ্ট-আউট ইমেলগুলি অন্তর্ভুক্ত করুন৷ diff --git a/htdocs/langs/bn_IN/main.lang b/htdocs/langs/bn_IN/main.lang index 00dd1046a0f..aff592c229b 100644 --- a/htdocs/langs/bn_IN/main.lang +++ b/htdocs/langs/bn_IN/main.lang @@ -9,7 +9,7 @@ DIRECTION=ltr # cid0kr is for Korean # DejaVuSans is for some Eastern languages, some Asian languages and some Arabic languages # freemono is for ru_RU or uk_UA, uz_UZ -# freeserif is for Tamil +# freeserif is for Tamil or Ethiopian FONTFORPDF=helvetica FONTSIZEFORPDF=10 SeparatorDecimal=. @@ -68,7 +68,7 @@ ErrorNoRequestInError=ভুল কোন অনুরোধ ErrorServiceUnavailableTryLater=এই মুহূর্তে পরিষেবা উপলব্ধ নেই৷ পরে আবার চেষ্টা করুন. ErrorDuplicateField=একটি অনন্য ক্ষেত্রে ডুপ্লিকেট মান ErrorSomeErrorWereFoundRollbackIsDone=কিছু ত্রুটি পাওয়া গেছে. পরিবর্তনগুলি ফিরিয়ে আনা হয়েছে৷ -ErrorConfigParameterNotDefined=প্যারামিটার %s ডলিবার কনফিগারেশন ফাইলে সংজ্ঞায়িত করা হয়নি class='notranslate'>conf.php। +ErrorConfigParameterNotDefined=Parameter %s is not defined in the Dolibarr config file conf.php. ErrorCantLoadUserFromDolibarrDatabase=Dolibarr ডেটাবেসে %s ব্যবহারকারী খুঁজে পাওয়া যায়নি। ErrorNoVATRateDefinedForSellerCountry=ত্রুটি, '%s' দেশের জন্য কোনো ভ্যাট হার সংজ্ঞায়িত করা হয়নি। ErrorNoSocialContributionForSellerCountry=ত্রুটি, '%s' দেশের জন্য কোনো সামাজিক/আর্থিক করের ধরন সংজ্ঞায়িত করা হয়নি। @@ -103,7 +103,7 @@ RecordDeleted=রেকর্ড মুছে ফেলা হয়েছে RecordGenerated=রেকর্ড তৈরি হয়েছে LevelOfFeature=বৈশিষ্ট্যের স্তর NotDefined=সংজ্ঞায়িত নয় -DolibarrInHttpAuthenticationSoPasswordUseless=Dolibarr প্রমাণীকরণ মোড %s কনফিগারেশন ফাইলে সেট করা আছে class='notranslate'>conf.php
এর মানে হল পাসওয়ার্ডের প্রাক্তন ডেটাবেস Dolibarr, তাই এই ক্ষেত্র পরিবর্তন কোন প্রভাব হতে পারে. +DolibarrInHttpAuthenticationSoPasswordUseless=Dolibarr authentication mode is set to %s in configuration file conf.php.
This means that the password database is external to Dolibarr, so changing this field may have no effect. Administrator=সিস্টেম অ্যাডমিনিস্ট্রেটর AdministratorDesc=সিস্টেম অ্যাডমিনিস্ট্রেটর (ব্যবহারকারী, অনুমতি কিন্তু সিস্টেম সেটআপ এবং মডিউল কনফিগারেশন পরিচালনা করতে পারে) Undefined=অনির্ধারিত @@ -131,7 +131,7 @@ TechnicalID=প্রযুক্তিগত আইডি LineID=লাইন আইডি NotePublic=নোট (সর্বজনীন) NotePrivate=নোট (ব্যক্তিগত) -PrecisionUnitIsLimitedToXDecimals=ইউনিটের দামের নির্ভুলতা %sb09a4b739f17f8cimalএ সীমাবদ্ধ করার জন্য Dolibarr সেটআপ করা হয়েছিল . +PrecisionUnitIsLimitedToXDecimals=Dolibarr was setup to limit precision of unit prices to %s decimals. DoTest=পরীক্ষা ToFilter=ছাঁকনি NoFilter=ছাঁকনিবিহীন @@ -172,7 +172,7 @@ Close=বন্ধ CloseAs=স্থিতি সেট করুন CloseBox=আপনার ড্যাশবোর্ড থেকে উইজেট সরান Confirm=নিশ্চিত করুন -ConfirmSendCardByMail=আপনি কি সত্যিই এই কার্ডের বিষয়বস্তু %s< এ মেইলে পাঠাতে চান /span>? +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to %s? Delete=মুছে ফেলা Remove=অপসারণ Resiliate=সমাপ্ত করুন @@ -420,6 +420,8 @@ TotalTTCShort=মোট (inc. ট্যাক্স) TotalHT=মোট (ট্যাক্স বাদে) TotalHTforthispage=এই পৃষ্ঠার জন্য মোট (ট্যাক্স বাদে) Totalforthispage=এই পৃষ্ঠার জন্য মোট +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=মোট (inc. ট্যাক্স) TotalTTCToYourCredit=আপনার ক্রেডিট মোট (inc. ট্যাক্স) TotalVAT=মোট ট্যাক্স @@ -502,7 +504,7 @@ Completed=সম্পন্ন Running=চলমান RequestAlreadyDone=অনুরোধ ইতিমধ্যে রেকর্ড করা হয়েছে Filter=ছাঁকনি -FilterOnInto=মাপদণ্ড '%s' ক্ষেত্রে %s +FilterOnInto=Search criteria '%s' into fields %s RemoveFilter=ফিল্টার সরান ChartGenerated=চার্ট তৈরি হয়েছে ChartNotGenerated=চার্ট তৈরি হয়নি @@ -647,6 +649,7 @@ ReportName=রিপোর্টের নাম ReportPeriod=রিপোর্ট সময়কাল ReportDescription=বর্ণনা Report=রিপোর্ট +Reports=Reports Keyword=কীওয়ার্ড Origin=উৎপত্তি Legend=কিংবদন্তি @@ -963,6 +966,7 @@ AutomaticallyCalculated=স্বয়ংক্রিয়ভাবে গণ TitleSetToDraft=খসড়ায় ফিরে যান ConfirmSetToDraft=আপনি কি খসড়া স্ট্যাটাসে ফিরে যেতে চান? ImportId=আইডি আমদানি করুন +Event=Event Events=ঘটনা EMailTemplates=ইমেল টেমপ্লেট FileNotShared=ফাইল বহিরাগত পাবলিক শেয়ার করা হয় না @@ -1048,7 +1052,7 @@ Select2NotFound=কোন ফলাফল পাওয়া যায়নি Select2Enter=প্রবেশ করুন Select2MoreCharacter=বা আরও চরিত্র Select2MoreCharacters=বা আরও অক্ষর -Select2MoreCharactersMore=অনুসন্ধান সিনট্যাক্স:
'notranslate>'notranslate' |b0860de534daf0 notranslate'>
OR (a|b)
b061d061d /span>* যেকোনো অক্ষর (a*b)
b06aecd0207 span>^ দিয়ে শুরু করুন (^ab)
b03aecd01>b03aecd20 $b061d061d (ab$)
দিয়ে শেষ করুন +Select2MoreCharactersMore=Search syntax:
| OR (a|b)
* Any character (a*b)
^ Start with (^ab)
$ End with (ab$)
Select2LoadingMoreResults=আরও ফলাফল লোড হচ্ছে... Select2SearchInProgress=অনুসন্ধান চলছে... SearchIntoThirdparties=তৃতীয় পক্ষ @@ -1180,7 +1184,6 @@ ConfirmAffectUserQuestion=আপনি কি নিশ্চিত যে আ ConfirmSetSupervisorQuestion=আপনি কি %s নির্বাচিত রেকর্ডে সুপারভাইজার সেট করতে চান? ConfirmUpdatePriceQuestion=আপনি কি %s নির্বাচিত রেকর্ড(গুলি) এর মূল্য আপডেট করার বিষয়ে নিশ্চিত? CategTypeNotFound=রেকর্ডের ধরনের জন্য কোন ট্যাগ টাইপ পাওয়া যায়নি -Rate=হার SupervisorNotFound=সুপারভাইজার পাওয়া যায়নি CopiedToClipboard=ক্লিপবোর্ডে কপি করা হয়েছে InformationOnLinkToContract=এই পরিমাণ শুধুমাত্র চুক্তির সমস্ত লাইনের মোট। সময়ের কোন ধারণা বিবেচনায় নেওয়া হয় না। @@ -1213,6 +1216,7 @@ CanceledHidden=বাতিল লুকানো CanceledShown=বাতিল দেখানো হয়েছে Terminate=সমাপ্ত করুন Terminated=সমাপ্ত +Position=Position AddLineOnPosition=অবস্থানে লাইন যোগ করুন (শেষে যদি খালি থাকে) ConfirmAllocateCommercial=বিক্রয় প্রতিনিধি নিশ্চিতকরণ বরাদ্দ করুন ConfirmAllocateCommercialQuestion=আপনি কি %s নির্বাচিত রেকর্ড(গুলি) বরাদ্দ করার বিষয়ে নিশ্চিত? @@ -1230,6 +1234,7 @@ ExternalUser=বহিরাগত ব্যবহারকারী NoSpecificContactAddress=কোনো নির্দিষ্ট যোগাযোগ বা ঠিকানা নেই NoSpecificContactAddressBis=এই ট্যাবটি বর্তমান বস্তুর জন্য নির্দিষ্ট পরিচিতি বা ঠিকানা জোর করার জন্য নিবেদিত। আপনি যদি বস্তুর জন্য এক বা একাধিক নির্দিষ্ট পরিচিতি বা ঠিকানা নির্ধারণ করতে চান তখনই এটি ব্যবহার করুন যখন তৃতীয় পক্ষের তথ্য যথেষ্ট নয় বা সঠিক নয়। HideOnVCard=লুকান %s +ShowOnVCard=Show %s AddToContacts=আমার পরিচিতি ঠিকানা যোগ করুন LastAccess=শেষ অ্যাক্সেস UploadAnImageToSeeAPhotoHere=এখানে একটি ফটো দেখতে %s ট্যাব থেকে একটি ছবি আপলোড করুন @@ -1259,4 +1264,7 @@ AmountSalary=বেতনের পরিমাণ InvoiceSubtype=চালান সাবটাইপ ConfirmMassReverse=বাল্ক বিপরীত নিশ্চিতকরণ ConfirmMassReverseQuestion=আপনি কি %s নির্বাচিত রেকর্ড(গুলি) বিপরীত করতে চান? - +ElementType=Element type +ElementId=Element Id +Encrypted=Encrypted +Settings=Settings diff --git a/htdocs/langs/bn_IN/members.lang b/htdocs/langs/bn_IN/members.lang index 8d1f1b0bc6b..01eca2e3be9 100644 --- a/htdocs/langs/bn_IN/members.lang +++ b/htdocs/langs/bn_IN/members.lang @@ -13,7 +13,7 @@ MembersTickets=সদস্যপদ ঠিকানা শীট FundationMembers=ফাউন্ডেশনের সদস্যরা ListOfValidatedPublicMembers=বৈধ পাবলিক সদস্যদের তালিকা ErrorThisMemberIsNotPublic=এই সদস্য সর্বজনীন নয় -ErrorMemberIsAlreadyLinkedToThisThirdParty=অন্য সদস্য (নাম: %s, লগইন: %s) ইতিমধ্যেই একটি তৃতীয় পক্ষের সাথে লিঙ্ক করা আছে %s। প্রথমে এই লিঙ্কটি সরান কারণ একটি তৃতীয় পক্ষ শুধুমাত্র একজন সদস্যের সাথে লিঙ্ক করা যাবে না (এবং এর বিপরীতে)। +ErrorMemberIsAlreadyLinkedToThisThirdParty=Another member (name: %s, login: %s) is already linked to a third party %s. Remove this link first because a third party can't be linked to only a member (and vice versa). ErrorUserPermissionAllowsToLinksToItselfOnly=নিরাপত্তার কারণে, আপনার নয় এমন ব্যবহারকারীর সাথে সদস্যকে লিঙ্ক করতে সক্ষম হওয়ার জন্য আপনাকে অবশ্যই সমস্ত ব্যবহারকারীকে সম্পাদনা করার অনুমতি দিতে হবে। SetLinkToUser=একটি Dolibarr ব্যবহারকারী লিঙ্ক SetLinkToThirdParty=একটি Dolibarr তৃতীয় পক্ষের লিঙ্ক diff --git a/htdocs/langs/bn_IN/modulebuilder.lang b/htdocs/langs/bn_IN/modulebuilder.lang index 3bf9d2b5c06..388ba1d614e 100644 --- a/htdocs/langs/bn_IN/modulebuilder.lang +++ b/htdocs/langs/bn_IN/modulebuilder.lang @@ -94,7 +94,7 @@ SeeExamples=এখানে উদাহরণ দেখুন EnabledDesc=এই ক্ষেত্রটি সক্রিয় থাকার শর্ত।

উদাহরণ:
1
isModEnabled('anothermodule')
getDolGlobalString('MYMODULE_OPTION')==2 VisibleDesc=মাঠ কি দৃশ্যমান? (উদাহরণ: 0=কখনও দৃশ্যমান নয়, 1=তালিকায় দৃশ্যমান এবং ফর্মগুলি তৈরি/আপডেট/দেখুন, 2=শুধু তালিকায় দৃশ্যমান, 3=শুধুমাত্র তৈরি/আপডেট/দেখার ফর্মে দৃশ্যমান (তালিকায় নয়), 4=তালিকায় দৃশ্যমান এবং শুধুমাত্র ফর্ম আপডেট/দেখুন (তৈরি নয়), 5=তালিকাতে দৃশ্যমান এবং শুধুমাত্র ফর্ম দেখুন (তৈরি নয়, আপডেট নয়)।

একটি নেতিবাচক মান ব্যবহার করার অর্থ হল তালিকায় ডিফল্টরূপে ক্ষেত্র দেখানো হয় না তবে দেখার জন্য নির্বাচন করা যেতে পারে)। ItCanBeAnExpression=এটি একটি অভিব্যক্তি হতে পারে. উদাহরণ:
preg_match('/public/', $_SERVER['PHP_SELF'])?0:1
$user ->অধিকার আছে('ছুটি', 'নির্ধারিত_ছুটির')?1:5 -DisplayOnPdfDesc=সামঞ্জস্যপূর্ণ PDF নথিতে এই ক্ষেত্রটি প্রদর্শন করুন, আপনি "পজিশন" ক্ষেত্রের সাথে অবস্থান পরিচালনা করতে পারেন।
নথির জন্য :

0 = প্রদর্শিত হয় না
1 =
2 = শুধুমাত্র খালি না থাকলে প্রদর্শন করুন

b0e7849434 span>নথি লাইনের জন্য :

0 = প্রদর্শিত হয় না
1 = একটি কলামে প্রদর্শিত হয়
3 = বর্ণনার পরে লাইন বর্ণনা কলামে প্রদর্শিত হয়
4 = বর্ণনার পরে বিবরণ কলামে প্রদর্শন শুধুমাত্র যদি খালি না হয় +DisplayOnPdfDesc=Display this field on compatible PDF documents, you can manage position with "Position" field.
For document :
0 = not displayed
1 = display
2 = display only if not empty

For document lines :
0 = not displayed
1 = displayed in a column
3 = display in line description column after the description
4 = display in description column after the description only if not empty DisplayOnPdf=PDF এ IsAMeasureDesc=তালিকায় মোট পেতে ক্ষেত্রের মান কি কম্পুলেট করা যেতে পারে? (উদাহরণ: 1 বা 0) SearchAllDesc=ক্ষেত্রটি কি দ্রুত অনুসন্ধান সরঞ্জাম থেকে অনুসন্ধান করতে ব্যবহৃত হয়? (উদাহরণ: 1 বা 0) @@ -111,7 +111,7 @@ TriggerDefDesc=আপনার মডিউলের বাহ্যিক এ SeeIDsInUse=আপনার ইনস্টলেশন ব্যবহার করা আইডি দেখুন SeeReservedIDsRangeHere=সংরক্ষিত আইডি পরিসীমা দেখুন ToolkitForDevelopers=ডলিবার ডেভেলপারদের জন্য টুলকিট -TryToUseTheModuleBuilder=আপনার যদি SQL এবং PHP সম্পর্কে জ্ঞান থাকে, আপনি স্থানীয় মডিউল নির্মাতা উইজার্ড ব্যবহার করতে পারেন।
মডিউলটি সক্ষম করুন %s এবং উপরের ডানদিকের মেনুতে।
সতর্কতা: এটি একটি উন্নত ডেভেলপার বৈশিষ্ট্য, করুন no span class='notranslate'> আপনার প্রোডাকশন সাইটে পরীক্ষা! +TryToUseTheModuleBuilder=If you have knowledge of SQL and PHP, you may use the native module builder wizard.
Enable the module %s and use the wizard by clicking the on the top right menu.
Warning: This is an advanced developer feature, do not experiment on your production site! SeeTopRightMenu=উপরের ডানদিকের মেনুতে দেখুন AddLanguageFile=ভাষা ফাইল যোগ করুন YouCanUseTranslationKey=আপনি এখানে একটি কী ব্যবহার করতে পারেন যা ভাষা ফাইলে পাওয়া অনুবাদ কী (ট্যাব "ভাষা" দেখুন) @@ -148,7 +148,7 @@ CSSListClass=তালিকার জন্য CSS NotEditable=সম্পাদনাযোগ্য নয় ForeignKey=বিদেশী চাবি ForeignKeyDesc=যদি এই ক্ষেত্রের মান অবশ্যই অন্য টেবিলে উপস্থিত থাকার নিশ্চয়তা দিতে হবে। এখানে একটি মান মেলে সিনট্যাক্স লিখুন: tablename.parentfieldtocheck -TypeOfFieldsHelp=উদাহরণ:
varchar(99)
ইমেল
ফোন
ip
url
পাসওয়ার্ড
span>ডাবল(24,8)
real
পাঠ্য
html
তারিখ
তারিখের সময়
টাইমস্ট্যাম্প'notranslate'
পূর্ণসংখ্যা
পূর্ণসংখ্যা:ClassName:relativepath/to/classfile.class.php[:1[:filter]]b0342fcc
'1' মানে আমরা রেকর্ড তৈরি করতে কম্বোর পরে একটি + বোতাম যোগ করি
'ফিল্টার' হল একটি ইউনিভার্সাল ফিল্টার সিনট্যাক্স শর্ত, উদাহরণ: '((status:=:1) AND (fk_user:=:__USER_ID__) AND (entity:IN:(__SHARED_ENTITIES__))' +TypeOfFieldsHelp=Example:
varchar(99)
email
phone
ip
url
password
double(24,8)
real
text
html
date
datetime
timestamp
integer
integer:ClassName:relativepath/to/classfile.class.php[:1[:filter]]

'1' means we add a + button after the combo to create the record
'filter' is an Universal Filter syntax condition, example: '((status:=:1) AND (fk_user:=:__USER_ID__) AND (entity:IN:(__SHARED_ENTITIES__))' TypeOfFieldsHelpIntro=এটি হল ক্ষেত্র/বিশিষ্টের ধরন। AsciiToHtmlConverter=Ascii থেকে HTML রূপান্তরকারী AsciiToPdfConverter=Ascii থেকে পিডিএফ কনভার্টার @@ -180,7 +180,7 @@ FailedToAddCodeIntoDescriptor=বর্ণনাকারীতে কোড য DictionariesCreated=অভিধান %s সফলভাবে তৈরি করা হয়েছে DictionaryDeleted=অভিধান %s সফলভাবে সরানো হয়েছে PropertyModuleUpdated=সম্পত্তি %s সফলভাবে আপডেট করা হয়েছে -InfoForApiFile=* আপনি যখন প্রথমবার ফাইল তৈরি করবেন তখন প্রতিটি বস্তুর জন্য সমস্ত পদ্ধতি তৈরি হবে।
* আপনি যখন এ ক্লিক করুন আপনি শুধু নির্বাচিত বস্তু। +InfoForApiFile=* When you generate file for the first time then all methods will be created for each object.
* When you click in remove you just remove all methods for the selected object. SetupFile=মডিউল সেটআপের জন্য পৃষ্ঠা EmailingSelectors=Emails selectors EmailingSelectorDesc=আপনি গণ ইমেল মডিউলের জন্য নতুন ইমেল লক্ষ্য নির্বাচক প্রদান করতে এখানে ক্লাস ফাইল তৈরি এবং সম্পাদনা করতে পারেন diff --git a/htdocs/langs/bn_IN/mrp.lang b/htdocs/langs/bn_IN/mrp.lang index de15c6b24fe..9147811c7c8 100644 --- a/htdocs/langs/bn_IN/mrp.lang +++ b/htdocs/langs/bn_IN/mrp.lang @@ -47,7 +47,7 @@ DateEndPlannedMo=তারিখ শেষ পরিকল্পিত KeepEmptyForAsap=খালি মানে 'যত তাড়াতাড়ি সম্ভব' EstimatedDuration=আনুমানিক সময়কাল EstimatedDurationDesc=এই BOM ব্যবহার করে এই পণ্যটি তৈরি (বা বিচ্ছিন্ন) করার আনুমানিক সময়কাল -ConfirmValidateBom=আপনি কি %sরেফারেন্স সহ BOM যাচাই করতে চান > (আপনি নতুন ম্যানুফ্যাকচারিং অর্ডার তৈরি করতে এটি ব্যবহার করতে সক্ষম হবেন) +ConfirmValidateBom=Are you sure you want to validate the BOM with the reference %s (you will be able to use it to build new Manufacturing Orders) ConfirmCloseBom=আপনি কি এই BOM বাতিল করার বিষয়ে নিশ্চিত (আপনি আর নতুন ম্যানুফ্যাকচারিং অর্ডার তৈরি করতে এটি ব্যবহার করতে পারবেন না)? ConfirmReopenBom=আপনি কি নিশ্চিত যে আপনি এই BOM পুনরায় খুলতে চান (আপনি এটি নতুন উত্পাদন অর্ডার তৈরি করতে ব্যবহার করতে সক্ষম হবেন) StatusMOProduced=উত্পাদিত @@ -136,4 +136,3 @@ NoRemainQtyToDispatch=ভাগ করার জন্য কোন পরিম THMOperatorEstimatedHelp=প্রতি ঘন্টায় অপারেটরের আনুমানিক খরচ। এই ওয়ার্কস্টেশন ব্যবহার করে একটি BOM-এর খরচ অনুমান করতে ব্যবহার করা হবে। THMMachineEstimatedHelp=প্রতি ঘণ্টায় মেশিনের আনুমানিক খরচ। এই ওয়ার্কস্টেশন ব্যবহার করে একটি BOM-এর খরচ অনুমান করতে ব্যবহার করা হবে। - diff --git a/htdocs/langs/bn_IN/multicurrency.lang b/htdocs/langs/bn_IN/multicurrency.lang index 4b4e5ae98b6..7a1a4405193 100644 --- a/htdocs/langs/bn_IN/multicurrency.lang +++ b/htdocs/langs/bn_IN/multicurrency.lang @@ -7,12 +7,12 @@ multicurrency_syncronize_error=সিঙ্ক্রোনাইজেশন ত MULTICURRENCY_USE_RATE_ON_DOCUMENT_DATE=সর্বশেষ পরিচিত হার ব্যবহার না করে মুদ্রার হার খুঁজতে নথির তারিখ ব্যবহার করুন multicurrency_useOriginTx=যখন একটি বস্তু অন্য থেকে তৈরি করা হয়, উৎস বস্তু থেকে মূল হার রাখুন (অন্যথায় সর্বশেষ পরিচিত হার ব্যবহার করুন) CurrencyLayerAccount=কারেন্সি লেয়ার এপিআই -CurrencyLayerAccount_help_to_synchronize=এই কার্যকারিতা ব্যবহার করতে আপনাকে অবশ্যই %s ওয়েবসাইটে একটি অ্যাকাউন্ট তৈরি করতে হবে।
আপনার পান /span>API কী
আপনি যদি একটি বিনামূল্যের অ্যাকাউন্ট ব্যবহার করেন, তাহলে আপনি উৎস মুদ্রা (ডিফল্টরূপে USD)।
যদি আপনার মূল মুদ্রা ইউএসডি না হয়, অ্যাপ্লিকেশন স্বয়ংক্রিয়ভাবে এটি পুনরায় গণনা করবে।

আপনি প্রতি মাসে 1000টি সিঙ্ক্রোনাইজেশনের মধ্যে সীমাবদ্ধ। +CurrencyLayerAccount_help_to_synchronize=You must create an account on website %s to use this functionality.
Get your API key.
If you use a free account, you can't change the source currency (USD by default).
If your main currency is not USD, the application will automatically recalculate it.

You are limited to 1000 synchronizations per month. multicurrency_appId=API কী multicurrency_appCurrencySource=উৎস মুদ্রা multicurrency_alternateCurrencySource=বিকল্প উৎস মুদ্রা CurrenciesUsed=ব্যবহৃত মুদ্রা -CurrenciesUsed_help_to_add=আপনার প্রস্তাব, b0aee8336058b0aee8336587 /span>অর্ডার
ইত্যাদি +CurrenciesUsed_help_to_add=Add the different currencies and rates you need to use on your proposals, orders etc. rate=হার MulticurrencyReceived=প্রাপ্ত, আসল মুদ্রা MulticurrencyRemainderToTake=অবশিষ্ট পরিমাণ, আসল মুদ্রা diff --git a/htdocs/langs/bn_IN/orders.lang b/htdocs/langs/bn_IN/orders.lang index af8f3c48170..8c0460b9150 100644 --- a/htdocs/langs/bn_IN/orders.lang +++ b/htdocs/langs/bn_IN/orders.lang @@ -106,7 +106,7 @@ ConfirmDeleteOrder=আপনি কি এই অর্ডারটি মুছ ConfirmValidateOrder=আপনি কি %s নামে এই অর্ডারটি যাচাই করার বিষয়ে নিশ্চিত? ? ConfirmUnvalidateOrder=আপনি কি নিশ্চিত যে আপনি অর্ডার %s খসড়া স্থিতিতে পুনরুদ্ধার করতে চান ? ConfirmCancelOrder=আপনি কি নিশ্চিত আপনি এই অর্ডার বাতিল করতে চান? -ConfirmMakeOrder=আপনি কি নিশ্চিত করতে চান যে আপনি এই অর্ডারটি %s? +ConfirmMakeOrder=Are you sure you want to confirm you made this order on %s? GenerateBill=চালান তৈরি করুন ClassifyShipped=বিতরিত শ্রেণীবদ্ধ PassedInShippedStatus=শ্রেণীবদ্ধ বিতরণ diff --git a/htdocs/langs/bn_IN/other.lang b/htdocs/langs/bn_IN/other.lang index 7847d717083..163c73de633 100644 --- a/htdocs/langs/bn_IN/other.lang +++ b/htdocs/langs/bn_IN/other.lang @@ -94,7 +94,7 @@ AttachANewFile=একটি নতুন ফাইল/নথি সংযুক LinkedObject=লিঙ্কযুক্ত বস্তু NbOfActiveNotifications=বিজ্ঞপ্তির সংখ্যা (প্রাপকের ইমেলের সংখ্যা) PredefinedMailTest=__(হ্যালো)__\nএটি একটি পরীক্ষামূলক মেল যা __EMAIL__ এ পাঠানো হয়েছে৷\nলাইন একটি ক্যারেজ রিটার্ন দ্বারা পৃথক করা হয়.\n\n__USER_SIGNATURE__ -PredefinedMailTestHtml=__(হ্যালো)__
এটি একটি পরীক্ষামেল পাঠানো হয়েছে __EMAIL__ এ (পরীক্ষা শব্দটি অবশ্যই মোটা হতে হবে)।
রেখাগুলি একটি ক্যারেজ রিটার্ন দ্বারা পৃথক করা হয়েছে।

__USER_SIGNATURE__ +PredefinedMailTestHtml=__(Hello)__
This is a test mail sent to __EMAIL__ (the word test must be in bold).
The lines are separated by a carriage return.

__USER_SIGNATURE__ PredefinedMailContentContract=__(হ্যালো)__\n\n\n__(বিনীত)__\n\n__USER_SIGNATURE__ PredefinedMailContentSendInvoice=__(হ্যালো)__\n\nঅনুগ্রহ করে __REF__ সংযুক্ত চালান খুঁজুন\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(বিনীত)__\n\n__USER_SIGNATURE__ PredefinedMailContentSendInvoiceReminder=__(হ্যালো)__\n\nআমরা আপনাকে মনে করিয়ে দিতে চাই যে চালান __REF__ পরিশোধ করা হয়নি বলে মনে হচ্ছে। একটি অনুস্মারক হিসাবে চালানের একটি অনুলিপি সংযুক্ত করা হয়।\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(বিনীত)__\n\n__USER_SIGNATURE__ @@ -189,7 +189,7 @@ EnterNewPasswordHere=এখানে আপনার নতুন পাসও BackToLoginPage=লগইন পৃষ্ঠায় ফিরে যান AuthenticationDoesNotAllowSendNewPassword=প্রমাণীকরণ মোড হল %s
এই মোডে, Dolibarr আপনার পাসওয়ার্ড জানতে বা পরিবর্তন করতে পারে না।
আপনার পাসওয়ার্ড পরিবর্তন করতে চাইলে আপনার সিস্টেম অ্যাডমিনিস্ট্রেটরের সাথে যোগাযোগ করুন। EnableGDLibraryDesc=এই বিকল্পটি ব্যবহার করতে আপনার পিএইচপি ইনস্টলেশনে জিডি লাইব্রেরি ইনস্টল বা সক্ষম করুন। -ProfIdShortDesc=প্রফেসর আইডি %s তৃতীয় পক্ষের দেশের উপর নির্ভর করে একটি তথ্য৷
উদাহরণস্বরূপ, দেশের জন্য %s, এটির কোড %sb09a4b7837fz. +ProfIdShortDesc=Prof Id %s is an information depending on third party country.
For example, for country %s, it's code %s. DolibarrDemo=ডলিবার ইআরপি/সিআরএম ডেমো StatsByAmount=পণ্য/পরিষেবার পরিমাণের পরিসংখ্যান StatsByAmountProducts=পণ্যের পরিমাণের পরিসংখ্যান @@ -336,3 +336,5 @@ FTPFailedToUploadFile=%s ফাইলটি আপলোড করতে AddFolder=ফোল্ডার তৈরি করুন FileWasCreateFolder=ফোল্ডার %s তৈরি করা হয়েছে FTPFailedToCreateFolder=%s ফোল্ডার তৈরি করতে ব্যর্থ হয়েছে৷ +SelectADay=Select a day in calendar +SelectANewDate=Select a new date diff --git a/htdocs/langs/bn_IN/partnership.lang b/htdocs/langs/bn_IN/partnership.lang index aa32f78e4c1..17ac3fd6be3 100644 --- a/htdocs/langs/bn_IN/partnership.lang +++ b/htdocs/langs/bn_IN/partnership.lang @@ -91,8 +91,7 @@ CountLastUrlCheckError=শেষ URL চেকের জন্য ত্রু LastCheckBacklink=শেষ ইউআরএল চেক করার তারিখ NewPartnershipRequest=নতুন অংশীদারিত্বের অনুরোধ -NewPartnershipRequestDesc=এই ফর্মটি আপনাকে আমাদের অংশীদারিত্ব প্রোগ্রামের একটি অংশ হতে অনুরোধ করতে দেয়৷ এই ফর্মটি পূরণ করতে আপনার সাহায্যের প্রয়োজন হলে, অনুগ্রহ করে ইমেলের মাধ্যমে যোগাযোগ করুন %s span> +NewPartnershipRequestDesc=This form allows you to request to be part of one of our partnership program. If you need help to fill this form, please contact by email %s. ThisUrlMustContainsAtLeastOneLinkToWebsite=এই পৃষ্ঠায় নিম্নলিখিত ডোমেনের একটিতে অন্তত একটি লিঙ্ক থাকতে হবে: %s IPOfApplicant=আবেদনকারীর আইপি - diff --git a/htdocs/langs/bn_IN/paypal.lang b/htdocs/langs/bn_IN/paypal.lang index 6261a654d0f..8f8d2f83067 100644 --- a/htdocs/langs/bn_IN/paypal.lang +++ b/htdocs/langs/bn_IN/paypal.lang @@ -34,4 +34,4 @@ ARollbackWasPerformedOnPostActions=সমস্ত পোস্ট অ্যা ValidationOfPaymentFailed=অর্থপ্রদানের বৈধতা ব্যর্থ হয়েছে৷ CardOwner=কার্ড হোল্ডার PayPalBalance=পেপ্যাল ক্রেডিট -OnlineSubscriptionPaymentLine=অনলাইন সাবস্ক্রিপশন %s
%s
প্রাথমিক আইপি ঠিকানা: %s
লেনদেন আইডি:
পণ্য এবং পরিষেবা! +ProductVatMassChangeDesc=This tool updates the VAT rate defined on ALL products and services! MassBarcodeInit=ভর বারকোড init MassBarcodeInitDesc=এই পৃষ্ঠাটি এমন বস্তুগুলিতে একটি বারকোড শুরু করতে ব্যবহার করা যেতে পারে যেগুলিতে বারকোড সংজ্ঞায়িত নেই৷ মডিউল বারকোডের সেটআপ সম্পূর্ণ হওয়ার আগে পরীক্ষা করুন। ProductAccountancyBuyCode=অ্যাকাউন্টিং কোড (ক্রয়) @@ -208,11 +208,6 @@ unitSET=সেট unitS=দ্বিতীয় unitH=ঘন্টা unitD=দিন -unitG=ছোলা -unitM=মিটার -unitLM=রৈখিক মিটার -unitM2=বর্গ মিটার -unitM3=ঘন মিটার unitL=লিটার unitT=টন unitKG=কেজি @@ -221,6 +216,7 @@ unitMG=মিলিগ্রাম unitLB=পাউন্ড unitOZ=আউন্স unitM=মিটার +unitLM=রৈখিক মিটার unitDM=dm unitCM=সেমি unitMM=মিমি @@ -361,7 +357,7 @@ ProductAttributeName=বৈকল্পিক বৈশিষ্ট্য %s ProductAttribute=বৈকল্পিক বৈশিষ্ট্য ProductAttributeDeleteDialog=আপনি কি নিশ্চিত আপনি এই বৈশিষ্ট্য মুছে ফেলতে চান? সমস্ত মান মুছে ফেলা হবে ProductAttributeValueDeleteDialog=আপনি কি এই অ্যাট্রিবিউটের "%s" রেফারেন্স সহ "%s" মানটি মুছতে চান? -ProductCombinationDeleteDialog=আপনি কি "%sপণ্যের বৈকল্পিকটি মুছে ফেলার বিষয়ে নিশ্চিত? >"? +ProductCombinationDeleteDialog=Are you sure want to delete the variant of the product "%s"? ProductCombinationAlreadyUsed=ভেরিয়েন্টটি মুছে ফেলার সময় একটি ত্রুটি ছিল৷ অনুগ্রহ করে চেক করুন এটি কোন বস্তুতে ব্যবহার করা হচ্ছে না ProductCombinations=বৈকল্পিক PropagateVariant=বৈকল্পিক প্রচার করুন @@ -437,4 +433,6 @@ ModifyValueExtrafields = একটি অতিরিক্ত ক্ষেত OrProductsWithCategories=অথবা ট্যাগ/বিভাগ সহ পণ্য WarningTransferBatchStockMouvToGlobal = আপনি যদি এই পণ্যটিকে ডিসিরিয়ালাইজ করতে চান তবে এর সমস্ত সিরিয়ালাইজড স্টক গ্লোবাল স্টকে রূপান্তরিত হবে WarningConvertFromBatchToSerial=যদি আপনার কাছে বর্তমানে পণ্যটির জন্য 2 এর পরিমাণ বেশি বা সমান থাকে, তাহলে এই পছন্দে স্যুইচ করার অর্থ হল আপনার কাছে একই ব্যাচের বিভিন্ন বস্তু সহ একটি পণ্য থাকবে (যখন আপনি একটি অনন্য সিরিয়াল নম্বর চান)। এটি ঠিক করার জন্য একটি ইনভেন্টরি বা ম্যানুয়াল স্টক মুভমেন্ট না হওয়া পর্যন্ত ডুপ্লিকেটটি থাকবে। +AllowStockMovementVariantParent=Also records stock movements on parent products of variant products +AllowStockMovementVariantParentHelp=By default, a parent of a variant is a virtual product, so no stock is managed for it. By enabling this option, a stock will be managed for parent products and each time a stock quantity is modified for a variant product, the same quantity will be modified for the parent product. You should not need this option, except if you are using variant to manage the same product than parent (but with different descriptions, prices...) ConfirmSetToDraftInventory=আপনি কি খসড়া স্থিতিতে ফিরে যাওয়ার বিষয়ে নিশ্চিত?
বর্তমানে ইনভেন্টরিতে সেট করা পরিমাণগুলি পুনরায় সেট করা হবে৷ diff --git a/htdocs/langs/bn_IN/receptions.lang b/htdocs/langs/bn_IN/receptions.lang index 1d70bbb8b32..98141045d8a 100644 --- a/htdocs/langs/bn_IN/receptions.lang +++ b/htdocs/langs/bn_IN/receptions.lang @@ -5,8 +5,6 @@ RefReception=রেফ. অভ্যর্থনা Reception=অভ্যর্থনা Receptions=অভ্যর্থনা AllReceptions=সমস্ত অভ্যর্থনা -Reception=অভ্যর্থনা -Receptions=অভ্যর্থনা ShowReception=রিসেপশন দেখান ReceptionsArea=অভ্যর্থনা এলাকা ListOfReceptions=অভ্যর্থনা তালিকা diff --git a/htdocs/langs/bn_IN/sendings.lang b/htdocs/langs/bn_IN/sendings.lang index c8804dad72f..3f81da35824 100644 --- a/htdocs/langs/bn_IN/sendings.lang +++ b/htdocs/langs/bn_IN/sendings.lang @@ -39,7 +39,7 @@ StatusSendingValidatedShort=যাচাই করা হয়েছে StatusSendingProcessedShort=প্রক্রিয়াকৃত SendingSheet=চালান শীট ConfirmDeleteSending=আপনি কি এই চালানটি মুছে ফেলার বিষয়ে নিশ্চিত? -ConfirmValidateSending=Are you sure you want to validate this shipment with the reference %s? +ConfirmValidateSending=আপনি কি নিশ্চিত %sরেফারেন্স সহ এই চালানটি যাচাই করতে চান >? ConfirmCancelSending=আপনি কি নিশ্চিত আপনি এই চালান বাতিল করতে চান? DocumentModelMerou=Merou A5 মডেল WarningNoQtyLeftToSend=সতর্কতা, কোনো পণ্য পাঠানোর অপেক্ষায় নেই। @@ -81,6 +81,6 @@ CreationOptions=চালান তৈরির সময় উপলব্ধ ShipmentDistribution=চালান বিতরণ ErrorTooManyCombinationBatchcode=%s লাইনের জন্য কোনও প্রেরণ নেই কারণ গুদাম, পণ্য, ব্যাচ কোডের অনেকগুলি সংমিশ্রণ পাওয়া গেছে (%s)৷ -ErrorNoCombinationBatchcode=warehouse-product-lot/serial (%s, %s, %s) স্টকে পাওয়া যায়নি৷ +ErrorNoCombinationBatchcode=Could not save the line %s as the combination of warehouse-product-lot/serial (%s, %s, %s) was not found in stock. ErrorTooMuchShipped=%s লাইনের জন্য পাঠানো পরিমাণ অর্ডার করা পরিমাণের চেয়ে বেশি হওয়া উচিত নয় diff --git a/htdocs/langs/bn_IN/stocks.lang b/htdocs/langs/bn_IN/stocks.lang index 72133ff19eb..2e25cc40883 100644 --- a/htdocs/langs/bn_IN/stocks.lang +++ b/htdocs/langs/bn_IN/stocks.lang @@ -164,14 +164,14 @@ InventoryCode=মুভমেন্ট বা ইনভেন্টরি কো IsInPackage=প্যাকেজের মধ্যে রয়েছে WarehouseAllowNegativeTransfer=স্টক নেতিবাচক হতে পারে qtyToTranferIsNotEnough=আপনার সোর্স গুদাম থেকে আপনার কাছে পর্যাপ্ত স্টক নেই এবং আপনার সেটআপ নেতিবাচক স্টকের অনুমতি দেয় না। -qtyToTranferLotIsNotEnough=আপনার কাছে পর্যাপ্ত স্টক নেই, এই লট নম্বরের জন্য, আপনার সোর্স গুদাম থেকে এবং আপনার সেটআপ নেতিবাচক স্টক অনুমোদন করে না (পণ্যের জন্য Qty '%s' লট সহ '%s' হল %s গুদাম '%s')। +qtyToTranferLotIsNotEnough=You don't have enough stock, for this lot number, from your source warehouse and your setup does not allow negative stocks (Qty for product '%s' with lot '%s' is %s in warehouse '%s'). ShowWarehouse=গুদাম দেখান MovementCorrectStock=পণ্যের জন্য স্টক সংশোধন %s MovementTransferStock=পণ্য %s অন্য গুদামে স্টক স্থানান্তর BatchStockMouvementAddInGlobal=ব্যাচ স্টক গ্লোবাল স্টকে চলে যায় (পণ্য আর ব্যাচ ব্যবহার করে না) InventoryCodeShort=Inv./Mov. কোড NoPendingReceptionOnSupplierOrder=খোলা ক্রয় আদেশের কারণে কোনো মুলতুবি অভ্যর্থনা -ThisSerialAlreadyExistWithDifferentDate=এই লট/ক্রমিক নম্বর (%s) আগে থেকেই আছে কিন্তু সাথে আছে বিভিন্ন খাবার বা বিক্রির তারিখ (%s পাওয়া গেছে কিন্তু আপনি লিখুন span class='notranslate'>%s)। +ThisSerialAlreadyExistWithDifferentDate=This lot/serial number (%s) already exists but with different eatby or sellby date (found %s but you enter %s). OpenAnyMovement=খোলা (সমস্ত আন্দোলন) OpenInternal=খোলা (শুধুমাত্র অভ্যন্তরীণ আন্দোলন) UseDispatchStatus=ক্রয় অর্ডার রিসেপশনে পণ্য লাইনের জন্য একটি প্রেরণের অবস্থা (অনুমোদন/প্রত্যাখ্যান) ব্যবহার করুন @@ -253,7 +253,7 @@ DisableStockChangeOfSubProduct=এই আন্দোলনের সময় ImportFromCSV=আন্দোলনের CSV তালিকা আমদানি করুন ChooseFileToImport=ফাইল আপলোড করুন তারপর সোর্স ইম্পোর্ট ফাইল হিসাবে ফাইল নির্বাচন করতে %s আইকনে ক্লিক করুন... SelectAStockMovementFileToImport=আমদানি করার জন্য একটি স্টক আন্দোলন ফাইল নির্বাচন করুন -InfoTemplateImport=আপলোড করা ফাইলের এই ফর্ম্যাট থাকা দরকার (* বাধ্যতামূলক ক্ষেত্রগুলি):
উৎস গুদাম* | লক্ষ্য গুদাম* | পণ্য* | পরিমাণ* | লট/ক্রমিক নম্বর
CSV অক্ষর বিভাজক হতে হবে "%s span class='notranslate'>
" +InfoTemplateImport=Uploaded file needs to have this format (* are mandatory fields):
Source Warehouse* | Target Warehouse* | Product* | Quantity* | Lot/serial number
CSV character separator must be "%s" LabelOfInventoryMovemement=ইনভেন্টরি %s ReOpen=আবার খুলুন ConfirmFinish=আপনি জায় বন্ধ নিশ্চিত করুন? এটি আপনার ইনভেন্টরিতে প্রবেশ করা আসল পরিমাণে আপনার স্টক আপডেট করতে সমস্ত স্টক মুভমেন্ট তৈরি করবে। diff --git a/htdocs/langs/bn_IN/stripe.lang b/htdocs/langs/bn_IN/stripe.lang index e815edfca11..3460a5ac0e9 100644 --- a/htdocs/langs/bn_IN/stripe.lang +++ b/htdocs/langs/bn_IN/stripe.lang @@ -22,7 +22,7 @@ ToOfferALinkForOnlinePaymentOnContractLine=একটি চুক্তি ল ToOfferALinkForOnlinePaymentOnFreeAmount=একটি %s যেকোন পরিমাণের অনলাইন পেমেন্ট পেজ অফার করার জন্য URL কোনো বিদ্যমান বস্তু ছাড়াই ToOfferALinkForOnlinePaymentOnMemberSubscription=সদস্য সদস্যতার জন্য একটি %s অনলাইন পেমেন্ট পৃষ্ঠা অফার করার URL ToOfferALinkForOnlinePaymentOnDonation=অনুদানের অর্থ প্রদানের জন্য একটি %s অনলাইন পেমেন্ট পৃষ্ঠা অফার করার URL -YouCanAddTagOnUrl=এছাড়াও আপনি url প্যারামিটার যোগ করতে পারেন &tag=মানb0ae64758bac> class='notranslate'> আপনার নিজস্ব অর্থপ্রদানের মন্তব্য ট্যাগ যোগ করার জন্য সেই URLগুলির যে কোনো একটিতে (শুধুমাত্র অর্থপ্রদানের জন্য বাধ্যতামূলক) কোন বিদ্যমান বস্তু ছাড়া পেমেন্টের URL, আপনি প্যারামিটার যোগ করতে পারেন &noidempotency=1 তাই একই ট্যাগের সাথে একই লিঙ্ক বেশ কয়েকবার ব্যবহার করা যেতে পারে (কিছু পেমেন্ট মোড এই প্যারামিটার ব্যতীত প্রতিটি আলাদা লিঙ্কের জন্য পেমেন্ট 1-এ সীমাবদ্ধ করতে পারে) +YouCanAddTagOnUrl=You can also add url parameter &tag=value to any of those URL (mandatory only for payment not linked to an object) to add your own payment comment tag.
For the URL of payments with no existing object, you may also add the parameter &noidempotency=1 so the same link with same tag can be used several times (some payment mode may limit the payment to 1 for each different link without this parameter) SetupStripeToHavePaymentCreatedAutomatically=স্বয়ংক্রিয়ভাবে পেমেন্ট তৈরি করার জন্য url %s দিয়ে আপনার স্ট্রাইপ সেটআপ করুন স্ট্রাইপ দ্বারা যাচাই করা হয়েছে। AccountParameter=অ্যাকাউন্ট প্যারামিটার UsageParameter=ব্যবহারের পরামিতি diff --git a/htdocs/langs/bn_IN/trips.lang b/htdocs/langs/bn_IN/trips.lang index 10f130fc157..1ebf236cdc8 100644 --- a/htdocs/langs/bn_IN/trips.lang +++ b/htdocs/langs/bn_IN/trips.lang @@ -45,9 +45,9 @@ expenseReportRangeMoreThan=%d এর চেয়ে বেশি expenseReportTotalForFive=d = 5 সহ উদাহরণ ExpenseReportApplyTo=আবেদন করতে ExpenseReportApproved=একটি ব্যয় রিপোর্ট অনুমোদিত হয় -ExpenseReportApprovedMessage=ব্যয় প্রতিবেদন %s অনুমোদিত হয়েছে।
- ব্যবহারকারী: %s class='notranslate'>
- এর দ্বারা অনুমোদিত: %s
খরচ প্রতিবেদন দেখানোর জন্য এখানে ক্লিক করুন: span class='notranslate'>%s +ExpenseReportApprovedMessage=The expense report %s was approved.
- User: %s
- Approved by: %s
Click here to show the expense report: %s ExpenseReportCanceled=একটি খরচ রিপোর্ট বাতিল করা হয়েছে -ExpenseReportCanceledMessage=ব্যয় প্রতিবেদন %s বাতিল করা হয়েছে।
- ব্যবহারকারী: %s class='notranslate'>
- এর দ্বারা বাতিল করা হয়েছে: %s
- বাতিলের উদ্দেশ্য: %s
ব্যয় প্রতিবেদন দেখানোর জন্য এখানে ক্লিক করুন: %s +ExpenseReportCanceledMessage=The expense report %s was canceled.
- User: %s
- Canceled by: %s
- Motive for cancellation: %s
Click here to show the expense report: %s ExpenseReportConstraintViolationError=সর্বাধিক পরিমাণ ছাড়িয়ে গেছে (নিয়ম %s): %s %s থেকে বেশি ( হারাম ছাড়িয়ে যাওয়া) ExpenseReportConstraintViolationWarning=সর্বাধিক পরিমাণ ছাড়িয়ে গেছে (নিয়ম %s): %s %s থেকে বেশি ( অনুমোদনের চেয়ে বেশি) ExpenseReportDateEnd=তারিখ শেষ @@ -62,13 +62,13 @@ ExpenseReportPaidMessage=খরচের রিপোর্ট %s দেওয ExpenseReportPayment=ব্যয় প্রতিবেদন প্রদান ExpenseReportRef=রেফ. ব্যয় রিপোর্ট ExpenseReportRefused=একটি খরচ রিপোর্ট প্রত্যাখ্যান করা হয়েছে -ExpenseReportRefusedMessage=ব্যয়ের প্রতিবেদন %s প্রত্যাখ্যান করা হয়েছে।
- ব্যবহারকারী: %s class='notranslate'>
- প্রত্যাখ্যান করেছেন: %s
- প্রত্যাখ্যানের উদ্দেশ্য: %s
ব্যয় প্রতিবেদন দেখানোর জন্য এখানে ক্লিক করুন: %s +ExpenseReportRefusedMessage=The expense report %s was refused.
- User: %s
- Refused by: %s
- Motive for refusal: %s
Click here to show the expense report: %s ExpenseReportRestrictive=হারাম ছাড়িয়ে গেছে ExpenseReportRuleErrorOnSave=ত্রুটি: %s ExpenseReportRuleSave=খরচ রিপোর্ট নিয়ম সংরক্ষিত ExpenseReportRulesDesc=আপনি ব্যয় প্রতিবেদনের জন্য সর্বাধিক পরিমাণের নিয়ম নির্ধারণ করতে পারেন। এই নিয়মগুলি প্রয়োগ করা হবে যখন একটি নতুন ব্যয় একটি ব্যয় প্রতিবেদনে যোগ করা হয় ExpenseReportWaitingForApproval=একটি নতুন ব্যয় প্রতিবেদন অনুমোদনের জন্য জমা দেওয়া হয়েছে -ExpenseReportWaitingForApprovalMessage=একটি নতুন ব্যয় প্রতিবেদন জমা দেওয়া হয়েছে এবং অনুমোদনের জন্য অপেক্ষা করছে৷
- ব্যবহারকারী: %s
- সময়কাল: %s
বৈধকরণ করতে এখানে ক্লিক করুন: b0849fz span> +ExpenseReportWaitingForApprovalMessage=A new expense report has been submitted and is waiting for approval.
- User: %s
- Period: %s
Click here to validate: %s ExpenseReportWaitingForReApproval=পুনঃঅনুমোদনের জন্য একটি ব্যয় প্রতিবেদন জমা দেওয়া হয়েছে ExpenseReportWaitingForReApprovalMessage=একটি ব্যয় প্রতিবেদন জমা দেওয়া হয়েছে এবং পুনরায় অনুমোদনের জন্য অপেক্ষা করছে৷
The %s, আপনি এর জন্য ব্যয় প্রতিবেদন অনুমোদন করতে অস্বীকার করেছেন এই কারণে: %s।
একটি নতুন সংস্করণ প্রস্তাব করা হয়েছে এবং আপনার অনুমোদনের জন্য অপেক্ষা করছে।
- ব্যবহারকারী: %s
- সময়কাল: b0ecb2ecb9fz84
প্রমাণিত করতে এখানে ক্লিক করুন: %s ExpenseReportsIk=মাইলেজ চার্জ কনফিগারেশন diff --git a/htdocs/langs/bn_IN/users.lang b/htdocs/langs/bn_IN/users.lang index 21234aca461..25d3716e8a0 100644 --- a/htdocs/langs/bn_IN/users.lang +++ b/htdocs/langs/bn_IN/users.lang @@ -26,7 +26,7 @@ ConfirmDeleteUser=আপনি কি নিশ্চিত যে আপনি ConfirmDeleteGroup=আপনি কি %s গোষ্ঠী মুছে ফেলার বিষয়ে নিশ্চিত? ConfirmEnableUser=আপনি কি ব্যবহারকারী %s সক্ষম করার বিষয়ে নিশ্চিত? ConfirmReinitPassword=আপনি কি নিশ্চিত যে আপনি ব্যবহারকারীর জন্য একটি নতুন পাসওয়ার্ড তৈরি করতে চান %s? -ConfirmSendNewPassword=আপনি কি নিশ্চিত যে আপনি ব্যবহারকারীর জন্য নতুন পাসওয়ার্ড তৈরি এবং পাঠাতে চান %s
? +ConfirmSendNewPassword=Are you sure you want to generate and send new password for user %s? NewUser=নতুন ব্যবহারকারী CreateUser=ব্যবহারকারী তৈরি করুন LoginNotDefined=লগইন সংজ্ঞায়িত করা হয় না. @@ -45,7 +45,7 @@ CreateGroup=গ্রুপ তৈরি করুন RemoveFromGroup=দল থেকে বহিষ্কার করা PasswordChangedAndSentTo=পাসওয়ার্ড পরিবর্তন করে %s-এ পাঠানো হয়েছে। PasswordChangeRequest=%s-এর পাসওয়ার্ড পরিবর্তন করার অনুরোধ করুন -PasswordChangeRequestSent=%s এর পাসওয়ার্ড পরিবর্তন করার অনুরোধ %s। +PasswordChangeRequestSent=Request to change password for %s sent to %s. IfLoginExistPasswordRequestSent=যদি এই লগইনটি একটি বৈধ অ্যাকাউন্ট হয় (একটি বৈধ ইমেল সহ), পাসওয়ার্ড পুনরায় সেট করার জন্য একটি ইমেল পাঠানো হয়েছে৷ IfEmailExistPasswordRequestSent=যদি এই ইমেলটি একটি বৈধ অ্যাকাউন্ট হয়, তাহলে পাসওয়ার্ড রিসেট করার জন্য একটি ইমেল পাঠানো হয়েছে (আপনি কিছু না পেলে আপনার স্প্যাম ফোল্ডার চেক করতে ভুলবেন না) ConfirmPasswordReset=পাসওয়ার্ড রিসেট নিশ্চিত করুন @@ -133,4 +133,4 @@ HideAllPerms=সমস্ত অনুমতি সারি লুকান UserPublicPageDesc=আপনি এই ব্যবহারকারীর জন্য একটি ভার্চুয়াল কার্ড সক্ষম করতে পারেন৷ ব্যবহারকারীর প্রোফাইল এবং একটি বারকোড সহ একটি ইউআরএল উপলব্ধ থাকবে যাতে স্মার্টফোন সহ যে কেউ এটিকে স্ক্যান করতে এবং আপনার পরিচিতিকে এর ঠিকানা বইতে যুক্ত করতে দেয়৷ EnablePublicVirtualCard=ব্যবহারকারীর ভার্চুয়াল ব্যবসা কার্ড সক্রিয় করুন UserEnabledDisabled=ব্যবহারকারীর স্থিতি পরিবর্তিত হয়েছে: %s -AlternativeEmailForOAuth2=Alternative Email for OAuth2 login +AlternativeEmailForOAuth2=OAuth2 লগইনের জন্য বিকল্প ইমেল diff --git a/htdocs/langs/bn_IN/website.lang b/htdocs/langs/bn_IN/website.lang index 004039bc0e3..4dcb5c8d819 100644 --- a/htdocs/langs/bn_IN/website.lang +++ b/htdocs/langs/bn_IN/website.lang @@ -49,11 +49,11 @@ SetHereVirtualHost=Apache/NGinx এর সাথে ব্যবহার ক ExampleToUseInApacheVirtualHostConfig=Apache ভার্চুয়াল হোস্ট সেটআপে ব্যবহার করার উদাহরণ: YouCanAlsoTestWithPHPS=PHP এম্বেডেড সার্ভারের সাথে ব্যবহার করুন
উন্নত পরিবেশে, আপনি করতে পারেন
php -S 0.0.0.0 চালিয়ে PHP এমবেডেড ওয়েব সার্ভার (PHP 5.5 প্রয়োজনীয়) দিয়ে সাইটটি পরীক্ষা করতে পছন্দ করুন :8080 -t %s YouCanAlsoDeployToAnotherWHP=অন্য Dolibarr হোস্টিং প্রদানকারীর সাথে আপনার ওয়েব সাইট চালান
ইন্টারনেটে Apache বা NGinx-এর মতো কোনো ওয়েব সার্ভার উপলব্ধ নেই, আপনি আপনার ওয়েব সাইটটিকে অন্য Dolibarr হোস্টিং প্রদানকারী দ্বারা প্রদত্ত অন্য Dolibarr উদাহরণে রপ্তানি এবং আমদানি করতে পারেন যা ওয়েবসাইট মডিউলের সাথে সম্পূর্ণ একীকরণ প্রদান করে। আপনি https://saas.dolibarr.org-এ কিছু Dolibarr হোস্টিং প্রদানকারীর একটি তালিকা পেতে পারেন -CheckVirtualHostPerms=ভার্চুয়াল হোস্ট ব্যবহারকারীর (উদাহরণস্বরূপ www-ডেটা) %sb0a65d071f6fcz9 আছে কিনা পরীক্ষা করুন ফাইলগুলিতে
%s
+CheckVirtualHostPerms=Check also that the virtual host user (for example www-data) has %s permissions on files into
%s ReadPerm=পড়ুন WritePerm=লিখুন TestDeployOnWeb=ওয়েবে পরীক্ষা/নিয়োগ করুন -PreviewSiteServedByWebServer=একটি নতুন ট্যাবে %s পূর্বরূপ দেখুন।

%s একটি বহিরাগত ওয়েব সার্ভার (যেমন Apache, NginxIS, Nginx) দ্বারা পরিবেশিত হবে ) ডিরেক্টরিতে নির্দেশ করার আগে আপনাকে অবশ্যই এই সার্ভারটি ইনস্টল এবং সেটআপ করতে হবে:
%s span>
বাহ্যিক সার্ভার দ্বারা পরিবেশিত URL:
%s +PreviewSiteServedByWebServer=Preview %s in a new tab.

The %s will be served by an external web server (like Apache, Nginx, IIS). You must install and setup this server before to point to directory:
%s
URL served by external server:
%s PreviewSiteServedByDolibarr=একটি নতুন ট্যাবে %s পূর্বরূপ দেখুন।

%s Dolibarr সার্ভার দ্বারা পরিবেশিত হবে তাই এটির কোনো অতিরিক্ত ওয়েব সার্ভারের প্রয়োজন নেই (যেমন Apache, Nginx, IIS) ইনস্টল করতে হবে।
অসুবিধে হল যে পৃষ্ঠাগুলির URLগুলি ব্যবহারকারী বান্ধব নয় এবং আপনার Dolibarr এর পথ দিয়ে শুরু হয়৷


এতে আপনার নিজস্ব বাহ্যিক ওয়েব সার্ভার ব্যবহার করতে এই ওয়েব সাইটটি পরিবেশন করুন, আপনার ওয়েব সার্ভারে একটি ভার্চুয়াল হোস্ট তৈরি করুন যা নির্দেশিকা নির্দেশ করে
%s
তারপর এই ওয়েবসাইটের বৈশিষ্ট্যগুলিতে এই ভার্চুয়াল সার্ভারের নাম লিখুন এবং ক্লিক করুন লিঙ্ক "টেস্ট/ডেপ্লয় অন ওয়েব"। VirtualHostUrlNotDefined=বহিরাগত ওয়েব সার্ভার দ্বারা পরিবেশিত ভার্চুয়াল হোস্টের URL সংজ্ঞায়িত করা হয়নি NoPageYet=এখনো কোনো পৃষ্ঠা নেই @@ -63,7 +63,7 @@ YouCanEditHtmlSourceckeditor=আপনি সম্পাদকের "উৎস YouCanEditHtmlSource=
You can include PHP code into this source using tags <?php ?>. The following global variables are available: $conf, $db, $mysoc, $user, $website, $websitepage, $weblangs, $pagelangs.

You can also include content of another Page/Container with the following syntax:
<?php includeContainer('alias_of_container_to_include'); ?>

You can make a redirect to another Page/Container with the following syntax (Note: do not output any content before a redirect):
<?php redirectToContainer('alias_of_container_to_redirect_to'); ?>

To add a link to another page, use the syntax:
<a href="alias_of_page_to_link_to.php">mylink<a>

To include a link to download a file stored into the documents directory, use the document.php wrapper:
Example, for a file into documents/ecm (need to be logged), syntax is:
<a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext">
For a file into documents/medias (open directory for public access), syntax is:
<a href="/document.php?modulepart=medias&file=[relative_dir/]filename.ext">
For a file shared with a share link (open access using the sharing hash key of file), syntax is:
<a href="/document.php?hashp=publicsharekeyoffile">
YouCanEditHtmlSource1=
To include an image stored into the documents directory, use the viewimage.php wrapper.
Example, for an image into documents/medias (open directory for public access), syntax is:
<img src="/viewimage.php?modulepart=medias&file=[relative_dir/]filename.ext">
YouCanEditHtmlSource2=একটি শেয়ার লিঙ্কের সাথে শেয়ার করা একটি ছবির জন্য (ফাইলের শেয়ারিং হ্যাশ কী ব্যবহার করে খোলা অ্যাক্সেস), সিনট্যাক্স হল:
<img src="/viewimage.php?hashp=12345679012...">016f7f7f7012
-YouCanEditHtmlSource3=একটি PHP বস্তুর ছবির URL পেতে,
< span>img src="<?php print getImagePublicURLOfObject($object, 1, "_small") ?> class='notranslate'>>
+YouCanEditHtmlSource3=To get the URL of the image of a PHP object, use
<img src="<?php print getImagePublicURLOfObject($object, 1, "_small") ?>">
YouCanEditHtmlSourceMore=
এইচটিএমএল বা ডায়নামিক কোডের আরও উদাহরণ উইকি ডকুমেন্টেশনb0e40dc6587এ উপলব্ধ >।
ClonePage=ক্লোন পৃষ্ঠা/ধারক CloneSite=ক্লোন সাইট @@ -118,7 +118,7 @@ DeleteAlsoMedias=এই ওয়েবসাইটের জন্য নির MyWebsitePages=আমার ওয়েবসাইট পেজ SearchReplaceInto=অনুসন্ধান | মধ্যে প্রতিস্থাপন ReplaceString=নতুন স্ট্রিং -CSSContentTooltipHelp=এখানে CSS কন্টেন্ট লিখুন। অ্যাপ্লিকেশনের CSS-এর সাথে কোনো দ্বন্দ্ব এড়াতে, .bodywebsite ক্লাসের সাথে সমস্ত ঘোষণা আগে-প্রান্তে রাখতে ভুলবেন না। যেমন:

#mycssselector, input.myclass:hover { ...
অবশ্যই
।bodywebsite #mycssselector, .bodywebsite input.myclass:হোভার { ... b0342fccfda19>b0342fccfda19
দ্রষ্টব্য: যদি আপনার কাছে এই উপসর্গ ছাড়া একটি বড় ফাইল থাকে, তাহলে আপনি 'lessc' ব্যবহার করে এটিকে রূপান্তর করতে .bodywebsite উপসর্গটি সর্বত্র যুক্ত করতে পারেন। +CSSContentTooltipHelp=Enter here CSS content. To avoid any conflict with the CSS of the application, be sure to prepend all declaration with the .bodywebsite class. For example:

#mycssselector, input.myclass:hover { ... }
must be
.bodywebsite #mycssselector, .bodywebsite input.myclass:hover { ... }

Note: If you have a large file without this prefix, you can use 'lessc' to convert it to append the .bodywebsite prefix everywhere. LinkAndScriptsHereAreNotLoadedInEditor=সতর্কতা: এই বিষয়বস্তু আউটপুট শুধুমাত্র যখন সাইট একটি সার্ভার থেকে অ্যাক্সেস করা হয়. এটি সম্পাদনা মোডে ব্যবহার করা হয় না তাই যদি আপনাকে জাভাস্ক্রিপ্ট ফাইলগুলিকে সম্পাদনা মোডেও লোড করতে হয়, তাহলে পৃষ্ঠায় আপনার ট্যাগ 'script src=...' যোগ করুন। Dynamiccontent=গতিশীল বিষয়বস্তু সহ একটি পৃষ্ঠার নমুনা EditInLineOnOff=মোড 'ইনলাইন সম্পাদনা' হল %s diff --git a/htdocs/langs/bn_IN/withdrawals.lang b/htdocs/langs/bn_IN/withdrawals.lang index e4dcff5a246..f74ef6f05a8 100644 --- a/htdocs/langs/bn_IN/withdrawals.lang +++ b/htdocs/langs/bn_IN/withdrawals.lang @@ -47,7 +47,7 @@ MakeBankTransferOrder=একটি ক্রেডিট স্থানান WithdrawRequestsDone=%s সরাসরি ডেবিট অর্থপ্রদানের অনুরোধ রেকর্ড করা হয়েছে BankTransferRequestsDone=%s ক্রেডিট ট্রান্সফার অনুরোধ রেকর্ড করা হয়েছে ThirdPartyBankCode=তৃতীয় পক্ষের ব্যাঙ্ক কোড -NoInvoiceCouldBeWithdrawed=কোনো চালান সফলভাবে প্রক্রিয়া করা হয়নি। যাচাই করুন যে চালানগুলি একটি বৈধ IBAN সহ কোম্পানিগুলিতে রয়েছে এবং IBAN এর একটি UMR (অনন্য ম্যান্ডেট রেফারেন্স) মোড %s span class='notranslate'>
। +NoInvoiceCouldBeWithdrawed=No invoice processed successfully. Check that invoices are on companies with a valid IBAN and that IBAN has a UMR (Unique Mandate Reference) with mode %s. NoInvoiceCouldBeWithdrawedSupplier=কোনো চালান সফলভাবে প্রক্রিয়া করা হয়নি। একটি বৈধ IBAN সহ কোম্পানিগুলিতে চালানগুলি রয়েছে তা পরীক্ষা করুন৷ NoSalariesCouldBeWithdrawed=কোন বেতন সফলভাবে প্রক্রিয়া করা হয়েছে. বৈধ IBAN সহ ব্যবহারকারীদের বেতন আছে কিনা তা পরীক্ষা করুন। WithdrawalCantBeCreditedTwice=এই প্রত্যাহার রসিদ ইতিমধ্যেই ক্রেডিট হিসাবে চিহ্নিত করা হয়েছে; এটি দুবার করা যাবে না, কারণ এটি সম্ভাব্য ডুপ্লিকেট পেমেন্ট এবং ব্যাঙ্ক এন্ট্রি তৈরি করবে। @@ -66,9 +66,9 @@ WithdrawalRefusedConfirm=আপনি কি নিশ্চিত যে আপ RefusedData=প্রত্যাখ্যানের তারিখ RefusedReason=প্রত্যাখ্যানের কারণ RefusedInvoicing=প্রত্যাখ্যান বিল করা -NoInvoiceRefused=Do not charge the customer for the refusal -InvoiceRefused=Charge the customer for the refusal -DirectDebitRefusedInvoicingDesc=Set a flag to say this refusal must be charged to the customer +NoInvoiceRefused=প্রত্যাখ্যানের জন্য গ্রাহককে চার্জ করবেন না +InvoiceRefused=প্রত্যাখ্যানের জন্য গ্রাহককে চার্জ করুন +DirectDebitRefusedInvoicingDesc=এই প্রত্যাখ্যানটি গ্রাহকের কাছে চার্জ করা আবশ্যক বলে একটি পতাকা সেট করুন StatusDebitCredit=স্ট্যাটাস ডেবিট/ক্রেডিট StatusWaiting=অপেক্ষা করছে StatusTrans=পাঠানো হয়েছে @@ -152,7 +152,7 @@ ADDDAYS=মৃত্যুদন্ডের তারিখে দিন যো NoDefaultIBANFound=এই তৃতীয় পক্ষের জন্য কোনো ডিফল্ট IBAN পাওয়া যায়নি ### Notifications InfoCreditSubject=ব্যাঙ্কের সরাসরি ডেবিট পেমেন্ট অর্ডার %s পেমেন্ট -InfoCreditMessage=সরাসরি ডেবিট পেমেন্ট অর্ডার %s ব্যাঙ্কের দ্বারা দেওয়া হয়েছে
প্রদানের ডেটা: %s +InfoCreditMessage=সরাসরি ডেবিট পেমেন্ট অর্ডার %s ব্যাঙ্কের দ্বারা দেওয়া হয়েছে
প্রদানের ডেটা: %s InfoTransSubject=সরাসরি ডেবিট পেমেন্ট অর্ডার %s ব্যাঙ্কে ট্রান্সমিশন InfoTransMessage=সরাসরি ডেবিট পেমেন্ট অর্ডার %s ব্যাঙ্কে পাঠানো হয়েছে %s %s .

InfoTransData=পরিমাণ: %s
পদ্ধতি: %s
তারিখ: %s @@ -171,4 +171,3 @@ SalaryWaitingWithdraw=ক্রেডিট ট্রান্সফারের RefSalary=বেতন NoSalaryInvoiceToWithdraw='%s'-এর জন্য কোনো বেতন অপেক্ষা করছে না। একটি অনুরোধ করতে বেতন কার্ডে '%s' ট্যাবে যান৷ SalaryInvoiceWaitingWithdraw=ক্রেডিট ট্রান্সফারের মাধ্যমে পেমেন্টের অপেক্ষায় বেতন - diff --git a/htdocs/langs/bs_BA/accountancy.lang b/htdocs/langs/bs_BA/accountancy.lang index 53ad6a2eef4..7e7b144dee7 100644 --- a/htdocs/langs/bs_BA/accountancy.lang +++ b/htdocs/langs/bs_BA/accountancy.lang @@ -85,7 +85,7 @@ AccountancyAreaDescDonation=KORAK %s: Definirajte zadane računovodstvene račun AccountancyAreaDescSubscription=KORAK %s: Definirajte zadane računovodstvene račune za pretplatu članova. Za ovo koristite unos menija %s. AccountancyAreaDescMisc=KORAK %s: Definirajte obavezne zadane račune i zadane računovodstvene račune za razne transakcije. Za ovo koristite unos menija %s. AccountancyAreaDescLoan=KORAK %s: Definirajte zadane računovodstvene račune za kredite. Za ovo koristite unos menija %s. -AccountancyAreaDescBank=KORAK %s: Definirajte računovodstvene račune i šifru dnevnika za svaku banku b01f882f7e6484z račune. Za ovo koristite unos menija %s. +AccountancyAreaDescBank=STEP %s: Define accounting accounts and journal code for each bank and financial accounts. For this, use the menu entry %s. AccountancyAreaDescProd=KORAK %s: Definirajte računovodstvene račune na vašim proizvodima/uslugama. Za ovo koristite unos menija %s. AccountancyAreaDescBind=KORAK %s: Provjerite vezu između postojećih %s redova i račun je račun gotovo, tako da će aplikacija moći da evidentira transakcije u Ledgeru jednim klikom. Kompletne veze koje nedostaju. Za ovo koristite unos menija %s. @@ -335,7 +335,6 @@ CategoryDeleted=Kategorija za računovodstveni račun je uklonjena AccountingJournals=Računovodstveni časopisi AccountingJournal=Računovodstveni časopis NewAccountingJournal=Novi računovodstveni dnevnik -ShowAccountingJournal=Prikaži računovodstveni dnevnik NatureOfJournal=Priroda časopisa AccountingJournalType1=Razne operacije AccountingJournalType2=Prodaja @@ -353,7 +352,7 @@ ACCOUNTING_DISABLE_BINDING_ON_SALES=Onemogućite uvezivanje i prijenos u računo ACCOUNTING_DISABLE_BINDING_ON_PURCHASES=Onemogućite uvezivanje i prijenos u računovodstvu na kupovini (fakture dobavljača neće se uzeti u obzir u računovodstvu) ACCOUNTING_DISABLE_BINDING_ON_EXPENSEREPORTS=Onemogućite uvezivanje i prijenos u računovodstvu na izvještajima o troškovima (izvještaji o troškovima neće se uzeti u obzir u računovodstvu) ACCOUNTING_ENABLE_LETTERING=Omogućite funkciju slova u računovodstvu -ACCOUNTING_ENABLE_LETTERING_DESC=Kada je ova opcija omogućena, možete definirati, na svakom knjigovodstvenom unosu, šifru tako da možete zajedno grupirati različita računovodstvena kretanja. U prošlosti, kada se različitim časopisima upravljalo nezavisno, ova karakteristika je bila neophodna za grupisanje linija kretanja različitih časopisa zajedno. Međutim, kod Dolibarr računovodstva, takav kod za praćenje, nazvan "%sb09a4b739f17f8z span>" je već automatski sačuvan, tako da je automatsko ispisivanje već urađeno, bez rizika od greške, tako da je ova funkcija postala beskorisna za uobičajenu upotrebu. Funkcija ručnog pisanja slova je predviđena za krajnje korisnike koji zaista nemaju povjerenja u kompjuterski mehanizam koji vrši prijenos podataka u računovodstvu. +ACCOUNTING_ENABLE_LETTERING_DESC=When this options is enabled, you can define, on each accounting entry, a code so you can group different accounting movements together. In the past, when different journals was managed independently, this feature was necessary to group movement lines of different journals together. However, with Dolibarr accountancy, such a tracking code, called "%s" is already saved automatically, so an automatic lettering is already done, with no risk of error so this feature has become useless for a common usage. Manual lettering feature is provided for end users that really don't trust the computer engine making the transfer of data in accountancy. EnablingThisFeatureIsNotNecessary=Omogućavanje ove funkcije više nije potrebno za rigorozno računovodstveno upravljanje. ACCOUNTING_ENABLE_AUTOLETTERING=Omogućite automatsko pisanje slova prilikom prelaska na računovodstvo ACCOUNTING_ENABLE_AUTOLETTERING_DESC=Kôd za natpis se automatski generira i inkrementirano i nije izabrao krajnji korisnik diff --git a/htdocs/langs/bs_BA/admin.lang b/htdocs/langs/bs_BA/admin.lang index d25ff99fb5c..13cc4c7b8be 100644 --- a/htdocs/langs/bs_BA/admin.lang +++ b/htdocs/langs/bs_BA/admin.lang @@ -106,7 +106,7 @@ NextValueForInvoices=Sljedeća vrijednost (fakture) NextValueForCreditNotes=Sljedeća vrijednost (KO) NextValueForDeposit=Sljedeća vrijednost (kapara) NextValueForReplacements=Slijedeća vrijednost (zamjene) -MustBeLowerThanPHPLimit=Napomena: vaša PHP konfiguracija trenutno ograničava maksimalnu veličinu datoteke za otpremanje na %s span> %s, bez obzira na vrijednost ovog parametra +MustBeLowerThanPHPLimit=Note: your PHP configuration currently limits the maximum filesize for upload to %s %s, irrespective of the value of this parameter NoMaxSizeByPHPLimit=Napomena: U vašoj PHP konfiguraciji nije postavljeno ograničenje MaxSizeForUploadedFiles=Maksimalna veličina za otpremljene fajlove (0 da zabrani bilo kakvo otpremanje) UseCaptchaCode=Koristite grafički kod (CAPTCHA) na stranici za prijavu i nekim javnim stranicama @@ -221,8 +221,8 @@ ModulesDevelopDesc=Također možete razviti vlastiti modul ili pronaći partnera DOLISTOREdescriptionLong=Umjesto da uključite
www.dolistore.com web stranicu kako biste pronašli vanjski modul, možete koristiti ovaj ugrađeni alat koji izvršit će pretragu na vanjskom tržištu umjesto vas (možda je spor, potreban vam je pristup internetu)... FreeModule=Besplatno CompatibleUpTo=Kompatibilan s verzijom %s -NotCompatible=Čini se da ovaj modul nije kompatibilan s vašim Dolibarr %s (Min %s - Max b0ecb2ec87f49 raspon>). -CompatibleAfterUpdate=Ovaj modul zahtijeva ažuriranje vašeg Dolibarra %s (Min %s - Max %s >). +NotCompatible=This module does not seem compatible with your Dolibarr %s (Min %s - Max %s). +CompatibleAfterUpdate=This module requires an update to your Dolibarr %s (Min %s - Max %s). SeeInMarkerPlace=Vidi u Market place SeeSetupOfModule=Pogledajte postavljanje modula %s SeeSetupPage=Pogledajte stranicu za postavljanje na %s @@ -250,7 +250,7 @@ Security=Sigurnost Passwords=Lozinke DoNotStoreClearPassword=Šifrirajte lozinke pohranjene u bazi podataka (NE kao običan tekst). Preporučuje se aktiviranje ove opcije. MainDbPasswordFileConfEncrypted=Šifrirajte lozinku baze podataka pohranjenu u conf.php. Preporučuje se aktiviranje ove opcije. -InstrucToEncodePass=Za šifriranje lozinke u datoteku conf.php, zamijenite redak b0342fccfda19bz /span>$dolibarr_main_db_pass="...";b0392bzcfda >od
$dolibarr_main_db_pass="crypted:b0ecb2ec87f49"; span class='notranslate'> +InstrucToEncodePass=To have password encoded into the conf.php file, replace the line
$dolibarr_main_db_pass="...";
by
$dolibarr_main_db_pass="crypted:%s"; InstrucToClearPass=Da bi lozinka bila dekodirana (obrisana) u datoteku conf.php, zamijenite redak
$dolibarr_main_db_pass="crypted:...";'
od
$dolibarr_main_db_pass="fccfda19bz0$dolibarr_main_db_pass="fccfda19bz0fccfda19bz0
"; ProtectAndEncryptPdfFiles=Zaštitite generirane PDF datoteke. Ovo se NE preporučuje jer prekida masovno generiranje PDF-a. ProtectAndEncryptPdfFilesDesc=Zaštita PDF dokumenta čini ga dostupnim za čitanje i štampanja u bilo kojem PDF pretraživaču. Međutim, uređivanje i kopiranja više nije moguće. Imajte na umu da korištenje ove funkcije čini da izgradnja globalnih spojenih PDF-ova ne funkcionira. @@ -269,7 +269,7 @@ ExternalResources=Eksterni resursi SocialNetworks=Društvene mreže SocialNetworkId=ID društvene mreže ForDocumentationSeeWiki=Za dokumentaciju za korisnike ili programere (Doc, FAQ...),
pogledajte Dolibarr Wiki:
%sb0e40dccz05 -ForAnswersSeeForum=Za sva druga pitanja/pomoć možete koristiti Dolibarr forum:
/span>%s +ForAnswersSeeForum=For any other questions/help, you can use the Dolibarr forum:
%s HelpCenterDesc1=Evo nekih resursa za dobijanje pomoći i podrške za Dolibarr. HelpCenterDesc2=Neki od ovih resursa dostupni su samo na engleskom. CurrentMenuHandler=Trenutni rukovalac menijem @@ -290,8 +290,8 @@ EMailsSetup=Podešavanje e-pošte EMailsDesc=Ova stranica vam omogućava da postavite parametre ili opcije za slanje e-pošte. EmailSenderProfiles=Profili pošiljaoca e-pošte EMailsSenderProfileDesc=Ovaj odjeljak možete ostaviti praznim. Ako ovdje unesete neke e-mailove, oni će biti dodati na listu mogućih pošiljatelja u kombobox kada napišete novu e-poštu. -MAIN_MAIL_SMTP_PORT=SMTP/SMTPS port (zadana vrijednost u php.ini: %sb09a4b739f17f8f8 >) -MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (podrazumevana vrijednost u php.ini: %sb09a4b839f17f17f >) +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: %s) +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: %s) MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS port MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host MAIN_MAIL_EMAIL_FROM=E-pošta pošiljaoca za automatske e-poruke @@ -345,12 +345,12 @@ ThisIsAlternativeProcessToFollow=Ovo je alternativno podešavanje za ručnu obra StepNb=Korak %s FindPackageFromWebSite=Pronađite paket koji pruža funkcije koje su vam potrebne (na primjer na službenoj web stranici %s). DownloadPackageFromWebSite=Preuzmite paket (na primjer sa službene web stranice %s). -UnpackPackageInDolibarrRoot=Raspakirajte/raspakujte upakovane datoteke u direktorij vašeg Dolibarr servera: %sb09a4b839f17f17f > +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into your Dolibarr server directory: %s UnpackPackageInModulesRoot=Da biste postavili/instalirali eksterni modul, morate raspakirati/raspakovati arhivsku datoteku u serverski direktorij posvećen vanjskim modulima:
%s SetupIsReadyForUse=Postavljanje modula je završeno. Međutim, morate omogućiti i postavljanje modula u vašoj aplikaciji tako što ćete otići na stranicu za podešavanje modula: %s. NotExistsDirect=Alternativni korijenski direktorij nije definiran u postojećem direktoriju.
InfDirAlt=Od verzije 3, moguće je definirati alternativni korijenski direktorij. Ovo vam omogućava da pohranite, u namjenski direktorij, dodatke i prilagođene šablone.
Samo kreirajte direktorij u korijenu od Dolibarra (npr. prilagođeno).
-InfDirExample=
Zatim ga deklarirajte u datoteci conf.php class='notranslate'>
$dolibarr_main_url_root_alt='/custom'
$dolibarr_main_document_rootth_alt/of/docs
$dolibarr_main_document_rootth_alt/of/dot='/palibarr 'notranslate'>
Ako su ovi redovi komentarisani sa "#", da biste ih omogućili, samo dekomentirajte uklanjanjem znaka "#". +InfDirExample=
Then declare it in the file conf.php
$dolibarr_main_url_root_alt='/custom'
$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'
If these lines are commented with "#", to enable them, just uncomment by removing the "#" character. YouCanSubmitFile=Ovdje možete učitati .zip datoteku modul paketa: CurrentVersion=Dolibarr trenutna verzija CallUpdatePage=Dođite do stranice koja ažurira strukturu baze podataka i podaci: %s. @@ -361,14 +361,14 @@ LastActivationIP=Najnovija IP adresa za aktivaciju LastActivationVersion=Najnovija verzija za aktivaciju UpdateServerOffline=Ažurirajte server van mreže WithCounter=Upravljajte šalterom -GenericMaskCodes=Možete uneti bilo koju masku za numerisanje. U ovoj maski se mogu koristiti sljedeće oznake:
{000000}b09a4b739f17f17 /span> odgovara broju koji će biti povećan na svakom %s. Unesite onoliko nula koliko je željena dužina brojača. Brojač će biti upotpunjen nulama s lijeve strane kako bi imali onoliko nula koliko je maska.
{000000+000}, ali isto kao i prethodni pomak koji odgovara broju desno od znaka + primjenjuje se počevši od prvog %s.
{000000@x} isto kao i prethodni brojač se resetuje na nulu kada se dostigne mesec x (x između 1 i 12, ili 0 da se koriste prvi meseci fiskalne godine definisane u vašoj konfiguraciji, ili 99 da se vrati na nula svakog mjeseca). Ako se koristi ova opcija i x je 2 ili više, tada je potreban niz {yy}{mm} ili {yyyy}{mm}.
{dd} dan (01 do 31). span class='notranslate'>
{mm} mjesec (01 do 12).
{yy},
-GenericMaskCodes2={cccc} klijentski kod na n znakova
{cccc000}b09a7b7839f kod klijenta na n znakova slijedi brojač posvećen kupcu. Ovaj brojač posvećen kupcu se resetuje u isto vreme kada i globalni brojač.
{tttt} Kôd tipa treće strane na n znakova (pogledajte meni Početna - Podešavanje - Rečnik - Tipovi trećih strana). Ako dodate ovu oznaku, brojač će biti drugačiji za svaku vrstu treće strane.
+GenericMaskCodes=You may enter any numbering mask. In this mask, the following tags can be used:
{000000} corresponds to a number which will be incremented on each %s. Enter as many zeros as the desired length of the counter. The counter will be completed by zeros from the left in order to have as many zeros as the mask.
{000000+000} same as the previous one but an offset corresponding to the number to the right of the + sign is applied starting on the first %s.
{000000@x} same as the previous one but the counter is reset to zero when month x is reached (x between 1 and 12, or 0 to use the early months of fiscal year defined in your configuration, or 99 to reset to zero every month). If this option is used and x is 2 or higher, then the sequence {yy}{mm} or {yyyy}{mm} is also required.
{dd} day (01 to 31).
{mm} month (01 to 12).
{yy}, {yyyy} or {y} year over 2, 4 or 1 numbers.
+GenericMaskCodes2={cccc} the client code on n characters
{cccc000} the client code on n characters is followed by a counter dedicated to the customer. This counter dedicated to customer is reset at same time as the global counter.
{tttt} The code of third party type on n characters (see menu Home - Setup - Dictionary - Types of third parties). If you add this tag, the counter will be different for each type of third party.
GenericMaskCodes3=Svi ostali znakovi u maski će ostati netaknuti.
Razmaci nisu dozvoljeni.
GenericMaskCodes3EAN=Svi ostali znakovi u maski će ostati netaknuti (osim * ili ? na 13. poziciji u EAN13).
Razmaci nisu dozvoljeni.
span>U EAN13, posljednji znak nakon posljednjeg } na 13. poziciji treba biti * ili ? . Bit će zamijenjen izračunatim ključem.
GenericMaskCodes4a=Primjer na 99. %s treće strane TheCompany, sa datumom 31.01.2023:
-GenericMaskCodes4b=Primjer treće strane kreiran 31.01.2023:
> +GenericMaskCodes4b=Example on third party created on 2023-01-31:
GenericMaskCodes4c=Primjer proizvoda kreiranog 31.01.2023:
-GenericMaskCodes5=ABC{yy}{mm}-{000000} će dati b0aee833365 span>ABC2301-000099

b0aee83365837{000@0000 }-ZZZ/{dd}/XXX
će dati 0199-ZZZ/31/XXX
IN{yy}{mm}-{0000}-{t} će dati IN2301-0099-A tip kompanije 'Responsable Inscripto' sa kodom za tip koji je 'A_RI' +GenericMaskCodes5=ABC{yy}{mm}-{000000} will give ABC2301-000099
{0000+100@1}-ZZZ/{dd}/XXX will give 0199-ZZZ/31/XXX
IN{yy}{mm}-{0000}-{t} will give IN2301-0099-A if the type of company is 'Responsable Inscripto' with code for type that is 'A_RI' GenericNumRefModelDesc=Vraća prilagodljivi broj prema definiranoj maski. ServerAvailableOnIPOrPort=Server je dostupan na adresi %s na portu %s ServerNotAvailableOnIPOrPort=Server nije dostupan na adresi %s na portu %s @@ -390,7 +390,7 @@ LanguageFilesCachedIntoShmopSharedMemory=Fajlovi .lang učitani u dijeljenu memo LanguageFile=Jezički fajl ExamplesWithCurrentSetup=Primjeri sa trenutnom konfiguracijom ListOfDirectories=Lista direktorija OpenDocument predložaka -ListOfDirectoriesForModelGenODT=Lista direktorija koji sadrže datoteke šablona u OpenDocument formatu.

Ovdje stavite punu putanju direktorija.
Dodajte povratnu kartu između eah direktorija.
Da dodate direktorij GED modula, dodajte ovdje b0aee83365837f >DOL_DATA_ROOT/ecm/yourdirectoryname.
b0342fccfda19b te direktorije mora završiti sa .odt ili .ods. ='notranslate'>. +ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.

Put here full path of directories.
Add a carriage return between eah directory.
To add a directory of the GED module, add here DOL_DATA_ROOT/ecm/yourdirectoryname.

Files in those directories must end with .odt or .ods. NumberOfModelFilesFound=Broj ODT/ODS datoteka predložaka pronađenih u ovim direktorijima ExampleOfDirectoriesForModelGen=Primjeri sintakse:
c:\\myapp\\mydocumentdir\\mysubdir
/home/myapp/mydocumentdir/mysubdir
DOL_DATA_ROOT/ecm/ecmdir FollowingSubstitutionKeysCanBeUsed=
Da biste znali kako kreirati svoje odt šablone dokumenata, prije nego što ih pohranite u te direktorije, pročitajte wiki dokumentaciju: @@ -460,11 +460,11 @@ ComputedFormula=Izračunato polje ComputedFormulaDesc=Ovdje možete unijeti formulu koristeći druga svojstva objekta ili bilo koje PHP kodiranje da biste dobili dinamičku izračunatu vrijednost. Možete koristiti bilo koju PHP kompatibilnu formulu uključujući "?" operator uvjeta, i sljedeći globalni objekat: $db, $conf, $langs, $mysoc, $user, $objectoffield .
UPOZORENJE
UPOZORENJEb01cf607f67 : Ako su vam potrebna svojstva objekta koji nije učitan, samo dohvatite sebi objekat u svoju formulu kao u drugom primjeru.
Upotreba izračunatog polja znači da možete' t unesite sebi bilo koju vrijednost iz interfejsa. Također, ako postoji sintaksička greška, formula može ništa vratiti.

Primjer formule:
$objectoffield->id < 10 ? round($objectoffield->id / 2, 2): ($objectoffield->id + 2 * $user->id) * ( int) substr($mysoc->zip, 1, 2)

Primjer za ponovno učitavanje objekta
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetchNoCompute($objectoffield->id) > 0 ? $reloadedobj->array_options['options_extrafieldkey'] * >capital / 5: '-1')

Drugi primjer formule za prisilno učitavanje objekta i njegov nadređeni objekat:
(($reloadedobj = novi zadatak($db)) && ($reloadedobj->fetchNoCompute-($objectoffield) ) > 0) && ($secondloadedobj = novi projekat($db)) && ($secondloadedobj->fetchNoCompute($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Nadređeni projekat nije pronađen' Computedpersistent=Spremite izračunato polje ComputedpersistentDesc=Izračunata dodatna polja će biti pohranjena u bazi podataka, međutim, vrijednost će biti ponovo izračunata samo kada se promijeni objekt ovog polja. Ako izračunato polje ovisi o drugim objektima ili globalnim podacima, ova vrijednost može biti pogrešna!! -ExtrafieldParamHelpPassword=Ako ovo polje ostavite praznim, znači da će ova vrijednost biti pohranjena BEZ šifriranja (polje je samo skriveno sa zvijezdama na ekranu).

Unesite vrijednost 'dolcrypt' za kodiranje vrijednosti pomoću reverzibilnog algoritma šifriranja. Čisti podaci se i dalje mogu znati i uređivati, ali su šifrirani u bazi podataka.

span>Unesite 'auto' (ili 'md5', 'sha256', 'password_hash', ...) da koristite zadani algoritam šifriranja lozinke (ili md5, sha256, password_hash...) za spremanje nepovratne heširane lozinke u baza podataka (nema načina da se povrati originalna vrijednost) -ExtrafieldParamHelpselect=Lista vrijednosti mora biti redova s ključem formata, vrijednosti (gdje ključ ne može biti '0')

na primjer :
1,value1
2,value2
3code span class='notranslate'>
...

Da bi lista zavisila od drugog komplementarna lista atributa:
1,value1|options_parent_list_codeb0bac34z08b0ae6475
parent_key
2,value2|options_parent_list_codeb0ae64758>b0ae64758bacy: class='notranslate'>

Da bi lista zavisila od druge liste:
1, value1|parent_list_code:parent_key
2,bz0
2 class='notranslate'>
parent_list_code:parent_key -ExtrafieldParamHelpcheckbox=Lista vrijednosti mora biti redova s ključem formata, vrijednosti (gdje ključ ne može biti '0')

na primjer :
1,value1
2,value2b0342fccfda19bzval03, span class='notranslate'>
... -ExtrafieldParamHelpradio=Lista vrijednosti mora biti redova s ključem formata, vrijednosti (gdje ključ ne može biti '0')

na primjer :
1,value1
2,value2b0342fccfda19bzval03, span class='notranslate'>
... -ExtrafieldParamHelpsellist=Lista vrijednosti dolazi iz tabele
Sintaksa: table_name:label_field:id_field::filtersql
Primjer: c_typent:libelle: ::filtersql

- id_field je nužno primarni int ključ
- filtersql je SQL uvjet. To može biti jednostavan test (npr. active=1) za prikaz samo aktivne vrijednosti
Možete koristiti i $ID$ u filteru koji je trenutni ID trenutnog objekta
Da biste koristili SELECT u filteru, koristite ključnu riječ $SEL$ da biste zaobišli zaštitu protiv ubrizgavanja.
ako želite filtrirati po ekstrapoljima koristite sintaksu extra.fieldcode=... (gdje je kod polja kod extrafield)

Da biste imali lista u zavisnosti od druge komplementarne liste atributa:
c_typent:libelle:id:options_parent_list_code |parent_column:filter

Da bi lista zavisila od druge liste:
c_typent:libelle:id:parent_list_codem +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored WITHOUT encryption (field is just hidden with stars on screen).

Enter value 'dolcrypt' to encode value with a reversible encryption algorithm. Clear data can still be known and edited but is encrypted into database.

Enter 'auto' (or 'md5', 'sha256', 'password_hash', ...) to use the default password encryption algorithm (or md5, sha256, password_hash...) to save the non reversible hashed password into database (no way to retrieve original value) +ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key +ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... +ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... +ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filtersql
Example: c_typent:libelle:id::filtersql

- id_field is necessarily a primary int key
- filtersql is a SQL condition. It can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter which is the current id of current object
To use a SELECT into the filter use the keyword $SEL$ to bypass anti-injection protection.
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=Lista vrijednosti dolazi iz tabele
Sintaksa: table_name:label_field:id_field::filtersql
Primjer: c_typent:libelle: ::filtersql

filter može biti jednostavan test (npr. active=1) za prikaz samo aktivne vrijednosti
Također možete koristiti $ID$ u filteru koji je trenutni id trenutnog objekta
Da izvršite SELECT u filteru koristite $SEL$
ako želite filtrirati po extrafields koristite sintaksu extra.fieldcode=... (gdje je kod polja kod extrafield)

Da bi lista zavisila od druge komplementarne liste atributa:
c_typent:libelle:id:options_parent_list_code|parent_column:filter
fccfda19bz0
fccfda19bz0Da bi lista zavisila od druge liste:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parametri moraju biti ObjectName:Classpath
Sintaksa: ObjectName:Classpath ExtrafieldParamHelpSeparator=Ostavite prazno za jednostavan separator
Postavite ovo na 1 za separator koji se sažima (otvoreno prema zadanim postavkama za novu sesiju, tada se status čuva za svaku korisničku sesiju)
Postavite ovo na 2 za sažimajući separator (sažeto prema zadanim postavkama za novu sesiju, tada se status čuva za svaku korisničku sesiju) @@ -518,7 +518,7 @@ DependsOn=Ovaj modul treba modul(e) RequiredBy=Ovaj modul je potreban za modul(i) TheKeyIsTheNameOfHtmlField=Ovo je naziv HTML polja. Za čitanje sadržaja HTML stranice potrebno je tehničko znanje da biste dobili ključno ime polja. PageUrlForDefaultValues=Morate unijeti relativnu putanju URL-a stranice. Ako u URL uključite parametre, to će biti efektivno ako svi parametri u pregledanom URL-u imaju vrijednost definiranu ovdje. -PageUrlForDefaultValuesCreate=
Primjer:
Za obrazac za kreiranje nove treće strane, to je /span>%s.
Za URL vanjskih modula instaliranih u prilagođeni direktorij, nemojte uključivati "custom/", pa koristite putanju kao što je mymodule/mypage.php i ne custom/mymodule/mypage.php.
Ako želite zadanu vrijednost samo ako url ima neki parametar, možete koristiti %s +PageUrlForDefaultValuesCreate=
Example:
For the form to create a new third party, it is %s.
For URL of external modules installed into custom directory, do not include the "custom/", so use path like mymodule/mypage.php and not custom/mymodule/mypage.php.
If you want default value only if url has some parameter, you can use %s PageUrlForDefaultValuesList=
Primjer:
Za stranicu koja navodi treće strane, to je >%s.
Za URL vanjskih modula instaliranih u prilagođeni direktorij , nemojte uključivati "custom/" pa koristite putanju kao što je mymodule/mypagelist.php i ne custom/mymodule/mypagelist.php.
Ako želite zadanu vrijednost samo ako url ima neki parametar, možete koristiti %s AlsoDefaultValuesAreEffectiveForActionCreate=Također imajte na umu da prepisivanje zadanih vrijednosti za kreiranje obrasca radi samo za stranice koje su ispravno dizajnirane (pa s parametrom action=create ili presen...) EnableDefaultValues=Omogućite prilagođavanje zadanih vrijednosti @@ -1118,7 +1118,7 @@ BackToModuleList=Povratak na listu modula BackToDictionaryList=Povratak na listu rječnika TypeOfRevenueStamp=Vrsta porezne marke VATManagement=Upravljanje porezom na promet -VATIsUsedDesc=Prema zadanim postavkama kada kreirate izglede, fakture, narudžbe itd. Stopa poreza na promet slijedi aktivno standardno pravilo:
Ako prodavac ne podliježe porezu na promet, tada je porez na promet zadano 0 . Kraj pravila.
Ako je (zemlja prodavca = zemlja kupca), tada je porez na promet prema zadanim postavkama jednak porezu na promet proizvoda u zemlji prodavca. Kraj pravila.
Ako su prodavac i kupac obojica u Evropskoj zajednici b01f882f7e6484 /span> roba su proizvodi vezani za transport (prevoz, otprema, avio kompanija), zadani PDV je 0. Ovo pravilo zavisi od zemlje prodavca - konsultujte se sa svojim računovođom. Kupac treba da plati PDV carinarnici u svojoj zemlji i, a ne prodavcu. Kraj pravila.
Ako su prodavac i kupac obojica u Evropskoj zajednici b01f882f7e6484 /span> kupac nije kompanija (sa registrovanim PDV brojem unutar Zajednice) tada je PDV zadana stopa PDV-a u zemlji prodavca. Kraj pravila.
Ako su prodavac i kupac obojica u Evropskoj zajednici b01f882f7e6484 /span> kupac je kompanija (sa registrovanim PDV brojem unutar zajednice), tada je PDV po defaultu 0. Kraj pravila.
U svakom drugom slučaju predložena zadana vrijednost je porez na promet=0. Kraj vladavine. +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sales Tax rate follows the active standard rule:
If the seller is not subject to Sales tax, then Sales tax defaults to 0. End of rule.
If the (seller's country = buyer's country), then the Sales tax by default equals the Sales tax of the product in the seller's country. End of rule.
If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default VAT is 0. This rule is dependent on the seller's country - please consult with your accountant. The VAT should be paid by the buyer to the customs office in their country and not to the seller. End of rule.
If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community VAT number) then the VAT defaults to the VAT rate of the seller's country. End of rule.
If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community VAT number), then the VAT is 0 by default. End of rule.
In any other case the proposed default is Sales tax=0. End of rule. VATIsNotUsedDesc=Podrazumevano je predloženi porez na promet 0 koji se može koristiti za slučajeve kao što su udruženja, pojedinci ili male kompanije. VATIsUsedExampleFR=U Francuskoj, to znači kompanije ili organizacije koje imaju stvarni fiskalni sistem (pojednostavljeni realni ili normalni real). Sistem u kojem se deklarira PDV. VATIsNotUsedExampleFR=U Francuskoj, to znači udruženja koja nisu prijavljena poreza na promet ili kompanije, organizacije ili slobodne profesije koje su odabrale fiskalni sistem mikro preduzeća (porez na promet u franšizi) i su platile franšizu za prodaju poreza bez ikakve prijave poreza na promet. Ovaj izbor će prikazati referencu "Neprimenjivi porez na promet - art-293B CGI" na fakturama. @@ -1197,6 +1197,7 @@ Skin=Tema kože DefaultSkin=Zadana tema kože MaxSizeList=Maksimalna dužina liste DefaultMaxSizeList=Zadana maksimalna dužina za liste +DisplayGrandTotalInList=Display grand total (for all pages) in lists footer DefaultMaxSizeShortList=Zadana maksimalna dužina za kratke liste (tj. u korisničkoj kartici) MessageOfDay=Poruka dana MessageLogin=Poruka stranice za prijavu @@ -1249,7 +1250,7 @@ SetupDescription2=Sljedeća dva odjeljka su obavezna (dva prva unosa u izborniku SetupDescription3=%s -> %sb0e870cz80e47dcz

Osnovni parametri koji se koriste za prilagođavanje zadanog ponašanja vaše aplikacije (npr. za funkcije vezane za zemlju). SetupDescription4=
%s -> %sb0e870cz80e47dcz

Ovaj softver je paket mnogih modula/aplikacija. Moduli koji se odnose na vaše potrebe moraju biti omogućeni i konfigurirani. Unosi u meni će se pojaviti sa aktivacijom ovih modula. SetupDescription5=Drugi unosi menija za podešavanje upravljaju opcionim parametrima. -SetupDescriptionLink=
%s - %sb0e87dcczb0e87dccz /span> +SetupDescriptionLink=%s - %s SetupDescription3b=Osnovni parametri koji se koriste za prilagođavanje zadanog ponašanja vaše aplikacije (npr. za funkcije vezane za zemlju). SetupDescription4b=Ovaj softver je skup mnogih modula/aplikacija. Moduli koji se odnose na vaše potrebe moraju biti aktivirani. Unosi u meni će se pojaviti sa aktivacijom ovih modula. AuditedSecurityEvents=Sigurnosni događaji koji se revidiraju @@ -1281,7 +1282,7 @@ AvailableModules=Dostupne aplikacije/moduli ToActivateModule=Da biste aktivirali module, idite na Područje za podešavanje (Home->Setup->Modules). SessionTimeOut=Tajm aut za sesiju SessionExplanation=Ovaj broj garantuje da sesija nikada neće isteći prije ovog kašnjenja, ako čišćenje sesije vrši interni čistač PHP sesije (i ništa drugo). Interni čistač PHP sesije ne garantuje da će sesija isteći nakon ovog kašnjenja. Isteći će nakon ovog kašnjenja, i kada se pokrene čistač sesije, tako da svaki %s/%s pristup, ali samo tokom pristupa koji su napravile druge sesije (ako je vrijednost 0, znači brisanje sesije vrši samo vanjski proces).
Napomena: na nekim serverima s vanjskim mehanizmom za čišćenje sesije (cron pod debianom, ubuntu...), sesije može se uništiti nakon perioda definiranog vanjskim podešavanjem, bez obzira koja je vrijednost unesena ovdje. -SessionsPurgedByExternalSystem=Čini se da su sesije na ovom serveru očišćene vanjskim mehanizmom (cron pod debianom, ubuntu...), vjerovatno svaki %s sekundi (= vrijednost parametra session.gc_maxlifetimeb09a17b73z) , tako da promjena vrijednosti ovdje nema efekta. Morate zamoliti administratora servera da promijeni kašnjenje sesije. +SessionsPurgedByExternalSystem=Sessions on this server seems to be cleaned by an external mechanism (cron under debian, ubuntu ...), probably every %s seconds (= value of parameter session.gc_maxlifetime), so changing the value here has no effect. You must ask the server administrator to change session delay. TriggersAvailable=Dostupni okidači TriggersDesc=Okidači su datoteke koje će modificirati ponašanje Dolibarr toka posla nakon kopiranja u direktorij htdocs/core/triggers. Realizuju nove akcije, aktivirane na Dolibarr događajima (kreiranje nove kompanije, validacija računa,...). TriggerDisabledByName=Okidači u ovoj datoteci su onemogućeni sufiksom -NORUN u njihovom nazivu. @@ -1307,7 +1308,7 @@ NoEventFoundWithCriteria=Nije pronađen nijedan sigurnosni događaj za ovaj krit SeeLocalSendMailSetup=Pogledajte vaše lokalne postavke sendmaila BackupDesc=potpuna sigurnosna kopija Dolibarr instalacije zahtijeva dva koraka. BackupDesc2=Napravite sigurnosnu kopiju sadržaja direktorija "dokumenti" (%s) koji sadrži sve učitane i datoteke. Ovo će također uključiti sve dump datoteke generirane u koraku 1. Ova operacija može trajati nekoliko minuta. -BackupDesc3=Napravite sigurnosnu kopiju strukture i sadržaja vaše baze podataka (%s) u dump datoteku. Za to možete koristiti sljedećeg pomoćnika. +BackupDesc3=Backup the structure and contents of your database (%s) into a dump file. For this, you can use the following assistant. BackupDescX=Arhivirani direktorij treba biti pohranjen na sigurnom mjestu. BackupDescY=Generirani dump fajl treba da bude pohranjen na bezbednom mestu. BackupPHPWarning=Sigurnosna kopija se ne može garantirati ovom metodom. Prethodni se preporučuje. @@ -1479,7 +1480,7 @@ ProposalsNumberingModules=Modeli numeriranja komercijalnih prijedloga ProposalsPDFModules=Modeli dokumenata komercijalnih prijedloga SuggestedPaymentModesIfNotDefinedInProposal=Predloženi način plaćanja na prijedlogu prema zadanim postavkama ako nije definiran u prijedlogu FreeLegalTextOnProposal=Slobodan tekst o komercijalnim prijedlozima -WatermarkOnDraftProposal=Vodeni žig na nacrte komercijalnih prijedloga (ništa, ako je prazno) +WatermarkOnDraftProposal=Vodeni žig na nacrte komercijalnih prijedloga (ništa, ako je prazno) BANK_ASK_PAYMENT_BANK_DURING_PROPOSAL=Zatražite odredište bankovnog računa ponude ##### SupplierProposal ##### SupplierProposalSetup=Podešavanje modula za zahtjeve dobavljača @@ -1497,7 +1498,7 @@ OrdersSetup=Podešavanje upravljanja prodajnim nalozima OrdersNumberingModules=Modeli numerisanja narudžbi OrdersModelModule=Naručite modele dokumenata FreeLegalTextOnOrders=Besplatan tekst za narudžbe -WatermarkOnDraftOrders=Vodeni žig na nacrte naloga (ništa, ako je prazno) +WatermarkOnDraftOrders=Vodeni žig na nacrte naloga (ništa, ako je prazno) ShippableOrderIconInList=Dodajte ikonu u listu narudžbi koja označava da li se narudžba može isporučiti BANK_ASK_PAYMENT_BANK_DURING_ORDER=Zatražite odredište bankovnog računa za narudžbu ##### Interventions ##### @@ -1505,7 +1506,7 @@ InterventionsSetup=Postavljanje modula za intervencije FreeLegalTextOnInterventions=Slobodan tekst na dokumentima intervencije FicheinterNumberingModules=Modeli interventnog numeriranja TemplatePDFInterventions=Modeli dokumenata interventnih kartica -WatermarkOnDraftInterventionCards=Vodeni žig na nacrte kartica za intervencije (ništa, ako je prazno) +WatermarkOnDraftInterventionCards=Vodeni žig na nacrte kartica za intervencije (ništa, ako je prazno) ##### Contracts ##### ContractsSetup=Podešavanje modula Ugovori/Pretplate ContractsNumberingModules=Moduli numeracije ugovora @@ -1663,7 +1664,7 @@ LDAPDescUsers=Ova stranica vam omogućava da definirate naziv LDAP atributa u LD LDAPDescGroups=Ova stranica vam omogućava da definirate ime LDAP atributa u LDAP stablu za svaki podatak koji se nalazi na Dolibarr grupama. LDAPDescMembers=Ova stranica vam omogućava da definirate ime LDAP atributa u LDAP stablu za svaki podatak koji se nalazi u modulu članova Dolibarr. LDAPDescMembersTypes=Ova stranica vam omogućava da definirate ime LDAP atributa u LDAP stablu za svaki podatak koji se nalazi na tipovima članova Dolibarr. -LDAPDescValues=Primjer vrijednosti su dizajnirane za OpenLDAP sa sljedećim učitanim shemama: b0aee3733658 core.schema, cosine.schema, inetorgperson.schema). Ako koristite te vrijednosti i OpenLDAP, izmijenite svoju LDAP konfiguracijsku datoteku slapd.confb0344f0344 /span>Imajte na umu da mnogi web hosting provajderi ne pružaju takav keš server. +MemcachedNotAvailable=No applicative cache found. You can enhance performance by installing a cache server Memcached and a module able to use this cache server.
More information here http://wiki.dolibarr.org/index.php/Module_MemCached_EN.
Note that a lot of web hosting provider does not provide such cache server. MemcachedModuleAvailableButNotSetup=Modul memcached za aplikativnu keš memoriju je pronađen, ali postavljanje modula nije završeno. MemcachedAvailableAndSetup=Modul memcached namijenjen za korištenje memcached servera je omogućen. OPCodeCache=OPCode cache @@ -1860,7 +1861,7 @@ PastDelayVCalExport=Nemojte izvoziti događaj stariji od SecurityKey = Sigurnosni ključ ##### ClickToDial ##### ClickToDialSetup=Kliknite za podešavanje modula za biranje -ClickToDialUrlDesc=URL se poziva kada se klikne na sliku telefona. U URL-u možete koristiti oznake
__PHONETO__ koje će biti zamijenjen sa brojem telefona osobe koju treba pozvati
__PHONEFROM__b09a4b739f17f da bit će zamijenjen brojem telefona osobe koja poziva (vaš)
__LOGIN__b09a4b78z01 span> koji će biti zamijenjen klikom za prijavu (definirano na korisničkoj kartici)
__PASS__ koja će biti zamijenjena lozinkom za biranje klikom (definiranom na korisničkoj kartici). +ClickToDialUrlDesc=URL called when a click on phone picto is done. In URL, you can use tags
__PHONETO__ that will be replaced with the phone number of person to call
__PHONEFROM__ that will be replaced with phone number of calling person (yours)
__LOGIN__ that will be replaced with clicktodial login (defined on user card)
__PASS__ that will be replaced with clicktodial password (defined on user card). ClickToDialDesc=Ovaj modul mijenja telefonske brojeve, kada koristite desktop računar, u linkove na koje se može kliknuti. Klik će pozvati broj. Ovo se može koristiti za pokretanje telefonskog poziva kada koristite softverski telefon na vašem desktopu ili kada koristite CTI sistem baziran na SIP protokolu, na primjer. Napomena: Kada koristite pametni telefon, telefonski brojevi se uvijek mogu kliknuti. ClickToDialUseTelLink=Koristite samo link "tel:" na brojevima telefona ClickToDialUseTelLinkDesc=Koristite ovu metodu ako vaši korisnici imaju softverski telefon ili softverski interfejs, instaliran na istom računaru kao i pretraživač, i pozvan kada kliknete na link koji počinje sa "tel:" u vaš pretraživač. Ako vam je potrebna veza koja počinje sa "sip:" ili potpuno serversko rješenje (nema potrebe za instalacijom lokalnog softvera), ovo morate postaviti na "Ne" i ispunite sljedeći polje. @@ -1920,7 +1921,7 @@ IfSetToYesDontForgetPermission=Ako je postavljena na vrijednost koja nije null, GeoIPMaxmindSetup=Podešavanje GeoIP Maxmind modula PathToGeoIPMaxmindCountryDataFile=Put do datoteke koja sadrži Maxmind ip u prijevod zemlje NoteOnPathLocation=Imajte na umu da vaša datoteka sa podacima o IP-u i državi mora biti unutar direktorija koji vaš PHP može čitati (Provjerite dopuštenja vašeg PHP open_basedir podešavanja i). -YouCanDownloadFreeDatFileTo=Možete preuzeti besplatnu demo verziju datoteke zemlje Maxmind GeoIP na b0ecb2ecz87fb0ecb2ecz87f /span>. +YouCanDownloadFreeDatFileTo=You can download a free demo version of the Maxmind GeoIP country file at %s. YouCanDownloadAdvancedDatFileTo=Također možete preuzeti više kompletnu verziju, sa ažuriranjima, Maxmind GeoIP zemlje na %s. TestGeoIPResult=Test IP konverzije -> zemlja ##### Projects ##### @@ -1971,7 +1972,7 @@ SomethingMakeInstallFromWebNotPossible=Instalacija eksternog modula nije moguća SomethingMakeInstallFromWebNotPossible2=Iz tog razloga, proces za nadogradnju opisan ovdje je ručni proces koji samo privilegirani korisnik može izvršiti. InstallModuleFromWebHasBeenDisabledContactUs=Instalacija ili razvoj vanjskih modula ili dinamičkih web stranica iz aplikacije je trenutno zaključan iz sigurnosnih razloga. Molimo kontaktirajte nas ako trebate omogućiti ovu funkciju. InstallModuleFromWebHasBeenDisabledByFile=Vaš administrator je onemogućio instalaciju eksternog modula iz aplikacije. Morate ga zamoliti da ukloni datoteku %s kako bi ovo dozvolio karakteristika. -ConfFileMustContainCustom=Instaliranje ili izgradnja eksternog modula iz aplikacije mora spremiti datoteke modula u direktorij %s . Da bi Dolibarr obradio ovaj direktorij, morate postaviti svoj conf/conf.php da dodate 2 linije direktive:
$dolibarr_main_url_root_alt='/custom';b0a65fc07>b0a65fc07 ='notranslate'>
$dolibarr_main_document_root_alt='b0ecb2ec87f49f49fz0'; '> +ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory %s. To have this directory processed by Dolibarr, you must setup your conf/conf.php to add the 2 directive lines:
$dolibarr_main_url_root_alt='/custom';
$dolibarr_main_document_root_alt='%s/custom'; HighlightLinesOnMouseHover=Označite linije tabele kada pređete mišem HighlightLinesColor=Označite boju linije kada miš prijeđe (koristite 'ffffff' za bez isticanja) HighlightLinesChecked=Istaknite boju linije kada je označena (koristite 'ffffff' da nema isticanja) @@ -2065,7 +2066,7 @@ DetectionNotPossible=Detekcija nije moguća UrlToGetKeyToUseAPIs=Url za dobivanje tokena za korištenje API-ja (kada je token primljen, pohranjuje se u korisničku tablicu baze podataka i mora biti naveden pri svakom API pozivu) ListOfAvailableAPIs=Lista dostupnih API-ja activateModuleDependNotSatisfied=Modul "%s" zavisi od modula "%s", koji nedostaje, pa modul " %1$s" možda neće raditi ispravno. Molimo instalirajte modul "%2$s" ili onemogućite modul "%1$s" ako želite biti sigurni od bilo kakvog iznenađenja -CommandIsNotInsideAllowedCommands=Naredba koju pokušavate pokrenuti nije na listi dozvoljenih komandi definiranih u parametru $dolibarr_main_restrict_os_commands u class='notranslate'>
conf.php fajl. +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter $dolibarr_main_restrict_os_commands in the conf.php file. LandingPage=Landing page SamePriceAlsoForSharedCompanies=Ako koristite modul za više kompanija, uz izbor "Jedinstvena cijena", cijena će također biti ista za sve kompanije ako se proizvodi dijele između okruženja ModuleEnabledAdminMustCheckRights=Modul je aktiviran. Dozvole za aktivirani modul(e) su date samo administratorskim korisnicima. Možda ćete morati ručno dodijeliti dozvole drugim korisnicima ili grupama ako je potrebno. @@ -2262,7 +2263,7 @@ ModuleActivatedMayExposeInformation=Ova PHP ekstenzija može otkriti osjetljive ModuleActivatedDoNotUseInProduction=Omogućen je modul dizajniran za razvoj. Nemojte ga omogućiti u proizvodnom okruženju. CombinationsSeparator=Znak za razdvajanje za kombinacije proizvoda SeeLinkToOnlineDocumentation=Za primjere pogledajte vezu do online dokumentacije u gornjem meniju -SHOW_SUBPRODUCT_REF_IN_PDF=Ako je karakteristika "%s" modula %s
, prikaži detalje podproizvoda kompleta u PDF-u. +SHOW_SUBPRODUCT_REF_IN_PDF=If the feature "%s" of module %s is used, show details of subproducts of a kit on PDF. AskThisIDToYourBank=Kontaktirajte svoju banku da dobijete ovaj ID AdvancedModeOnly=Dozvola je dostupna samo u naprednom načinu rada ConfFileIsReadableOrWritableByAnyUsers=Konf datoteku može čitati ili pisati bilo koji korisnik. Dajte dozvolu samo grupi korisnika i web servera. @@ -2291,7 +2292,7 @@ APIsAreNotEnabled=API moduli nisu omogućeni YouShouldSetThisToOff=Trebali biste ovo postaviti na 0 ili isključeno InstallAndUpgradeLockedBy=Instaliranje i nadogradnje je zaključano datotekom %s InstallLockedBy=Instalacija/ponovna instalacija je zaključana datotekom %s -InstallOfAddonIsNotBlocked=Instalacije dodataka nisu zaključane. Kreirajte datoteku installmodules.lock u direktorij ='notranslate'>%s za blokiranje instalacije vanjskih dodataka/modula. +InstallOfAddonIsNotBlocked=Installations of addons are not locked. Create a file installmodules.lock into directory %s to block installations of external addons/modules. OldImplementation=Stara implementacija PDF_SHOW_LINK_TO_ONLINE_PAYMENT=Ako su neki moduli za online plaćanje omogućeni (Paypal, Stripe, ...), dodajte link na PDF da izvršite online plaćanje DashboardDisableGlobal=Onemogućite globalno sve palčeve otvorenih objekata @@ -2433,3 +2434,12 @@ UrlPublicInterfaceHelpAdmin=It is possible to define an alias to the web server ExportUseForce=Use the parameter -f ExportUseForceHelp=Force to continue the export even when an error is found (Backup may not be reliable) CustomPrompt=Custom prompts +AiDescription=AI (Artificial Intelligence) features +AiDescriptionLong=Provides AI (Artificial Intelligence) features in different part of the application. Need external AI API. +AI_KEY_API_CHATGPT= Key for ChatGPT IA api +AiSetup=AI module setup +AiCustomPrompt=AI customs prompt +AI_CONFIGURATIONS_PROMPT=Custom prompt +ImageGeneration=Image generation +AIPromptForFeatures=AI custom prompts for features +EnterAnIP=Enter an IP address diff --git a/htdocs/langs/bs_BA/agenda.lang b/htdocs/langs/bs_BA/agenda.lang index 54b0bae0351..f4e3beddeb5 100644 --- a/htdocs/langs/bs_BA/agenda.lang +++ b/htdocs/langs/bs_BA/agenda.lang @@ -137,8 +137,8 @@ DateActionEnd=Datum završetka AgendaUrlOptions1=Također možete dodati sljedeće parametre za filtriranje prikazanog: AgendaUrlOptions3=logina=%s za ograničavanje izlaza na radnje u vlasništvu korisnika %s. AgendaUrlOptionsNotAdmin=logina=!%s za ograničavanje izlaza na radnje koje nisu u vlasništvu korisnik %s. -AgendaUrlOptions4=logint=%s za ograničavanje izlaza na radnje koje su dodijeljene korisniku span class='notranslate'>
%s (vlasnik ostali). -AgendaUrlOptionsProject=project=__PROJECT_ID__ za ograničavanje izlaza na radnje povezane s projektom 36aee88736aee87 __PROJECT_ID__. +AgendaUrlOptions4=logint=%s to restrict output to actions assigned to user %s (owner and others). +AgendaUrlOptionsProject=project=__PROJECT_ID__ to restrict output to actions linked to project __PROJECT_ID__. AgendaUrlOptionsNotAutoEvent=notactiontype=systemauto da isključite automatske događaje. AgendaUrlOptionsIncludeHolidays=includeholidays=1 da uključi događaje praznika. AgendaShowBirthdayEvents=Rođendani kontakata diff --git a/htdocs/langs/bs_BA/bills.lang b/htdocs/langs/bs_BA/bills.lang index c3ef4c4c281..b4312fa54f3 100644 --- a/htdocs/langs/bs_BA/bills.lang +++ b/htdocs/langs/bs_BA/bills.lang @@ -516,7 +516,7 @@ PaymentByTransferOnThisBankAccount=Plaćanje transferom na sljedeći bankovni ra VATIsNotUsedForInvoice=* Nije primjenjiv PDV art-293B CGI VATIsNotUsedForInvoiceAsso=* Neprimjenjiv PDV art-261-7 CGI LawApplicationPart1=Primjenom zakon 80.335 of 12/05/80 -LawApplicationPart2=roba ostaju vlasništvo od +LawApplicationPart2=roba ostaju vlasništvo od LawApplicationPart3=prodavac do pune isplate LawApplicationPart4=njihove vrijednosti. LimitedLiabilityCompanyCapital=d.o.o. s kapitalom @@ -568,7 +568,7 @@ YouMustCreateStandardInvoiceFirstDesc=Prvo morate kreirati standardnu fakturu i PDFCrabeDescription=PDF predložak fakture Crabe. Kompletan predložak fakture (stara implementacija predloška Spužva) PDFSpongeDescription=PDF predložak fakture Spužva. Kompletan predložak fakture PDFCrevetteDescription=PDF šablon Crevette za račune. Kompletan šablon za situiranje privremenih situacija -TerreNumRefModelDesc1=Vrati broj u formatu %syymm-nnnn za standardne fakture i b0ecb2ec87f49 yymm-nnnn za kreditne zapise gdje je yy godina, mm je mjesec i nnnn je sekvencijalni broj koji se automatski povećava bez prekida i > nema povratka na 0 +TerreNumRefModelDesc1=Return number in the format %syymm-nnnn for standard invoices and %syymm-nnnn for credit notes where yy is year, mm is month and nnnn is a sequential auto-incrementing number with no break and no return to 0 MarsNumRefModelDesc1=Povratni broj u formatu %syymm-nnnn za standardne fakture, %syymm-nnnn za zamjenske fakture, %syymm-nnnn za fakture avansa i %sza kredit nije ymm-nn gdje je nny godina, mm je mjesec i nnnn je sekvencijalni broj koji se automatski povećava bez prekida i bez povratka na 0 TerreNumRefModelError=Račun z začetkom $syymm že obstaja in ni kompatibilen s tem modelom zaporedja. Odstranite ga ali ga preimenujte za aktiviranje tega modula. CactusNumRefModelDesc1=Povratni broj u formatu %syymm-nnnn za standardne fakture, %syymm-nnnn za kreditne zapise i %syymm-nnnn za fakture avansa gdje je yy godina, mm mjesec b01f882f7e6484z jenn sekvencijalni broj koji se automatski povećava bez prekida i bez povratka na 0 @@ -613,7 +613,7 @@ TotalSituationInvoice=Ukupna situacija invoiceLineProgressError=Red prethodno fakturisanog ne može biti veće ili jednako sljedećem redu u fakturi updatePriceNextInvoiceErrorUpdateline=Greška: ažuriranje cijene na liniji fakture: %s ToCreateARecurringInvoice=Da biste kreirali ponavljajuću fakturu za ovaj ugovor, prvo kreirajte ovaj nacrt fakture, a zatim ga pretvorite u predložak fakture i definirajte učestalost generiranja budućih faktura. -ToCreateARecurringInvoiceGene=Da biste buduće fakture redovno generirali i ručno, samo idite na meni b0ecb2ec87f49fz - %s - %s. +ToCreateARecurringInvoiceGene=To generate future invoices regularly and manually, just go on menu %s - %s - %s. ToCreateARecurringInvoiceGeneAuto=Ako trebate imati takve fakture automatski generirane, zamolite svog administratora da omogući i modul za podešavanje %s. Imajte na umu da se obje metode (ručni i automatski) mogu koristiti zajedno bez rizika od dupliranja. DeleteRepeatableInvoice=Obriši šablon fakture ConfirmDeleteRepeatableInvoice=Jeste li sigurni da želite izbrisati predložak fakture? diff --git a/htdocs/langs/bs_BA/companies.lang b/htdocs/langs/bs_BA/companies.lang index d97b5328f14..45c923df0cf 100644 --- a/htdocs/langs/bs_BA/companies.lang +++ b/htdocs/langs/bs_BA/companies.lang @@ -1,17 +1,19 @@ # Dolibarr language file - Source file is en_US - companies +newSocieteAdded=Vaši kontakt podaci su zabilježeni. Javit ćemo vam se uskoro... +ContactUsDesc=Ovaj obrazac vam omogućava da nam pošaljete poruku za prvi kontakt. ErrorCompanyNameAlreadyExists=Ime kompanije %s već postoji. Izaberite neko drugo. ErrorSetACountryFirst=Odberite prvo zemlju SelectThirdParty=Odaberite subjekt -ConfirmDeleteCompany=Are you sure you want to delete this company and all related information? +ConfirmDeleteCompany=Jeste li sigurni da želite izbrisati ovu kompaniju i sve povezane informacije? DeleteContact=Obrisati kontakt/uslugu -ConfirmDeleteContact=Are you sure you want to delete this contact and all related information? -MenuNewThirdParty=New Third Party -MenuNewCustomer=New Customer +ConfirmDeleteContact=Jeste li sigurni da želite izbrisati ovaj kontakt i sve povezane informacije? +MenuNewThirdParty=Nova treća strana +MenuNewCustomer=Nova mušterija MenuNewProspect=New Prospect MenuNewSupplier=New Vendor MenuNewPrivateIndividual=Novo fizičko lice NewCompany=Nova kompanija (mogući klijent, kupac, prodavač) -NewThirdParty=New Third Party (prospect, customer, vendor) +NewThirdParty=Nova treća strana (potencijal, kupac, dobavljač) CreateDolibarrThirdPartySupplier=Napravi subjekt (prodavač) CreateThirdPartyOnly=Napravi novi subjekt CreateThirdPartyAndContact=Napravi subjekt + podređeni kontakt @@ -19,76 +21,79 @@ ProspectionArea=Područje za moguće kupce IdThirdParty=ID subjekta IdCompany=ID kompanije IdContact=ID kontakta -ThirdPartyAddress=Third-party address -ThirdPartyContacts=Third-party contacts -ThirdPartyContact=Third-party contact/address +ThirdPartyAddress=Adresa treće strane +ThirdPartyContacts=Kontakti treće strane +ThirdPartyContact=Kontakt/adresa treće strane Company=Kompanija CompanyName=Ime kompanije AliasNames=Nadimak (komercijalni, trgovačkim, ...) AliasNameShort=Alias Name Companies=Kompanije -CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price display format in the current language and currency -ThirdPartyName=Third-party name -ThirdPartyEmail=Third-party email -ThirdParty=Third-party -ThirdParties=Third-parties +CountryIsInEEC=Država je unutar Evropske ekonomske zajednice +PriceFormatInCurrentLanguage=Format prikaza cijene u trenutnoj valuti i jezika +ThirdPartyName=Ime treće strane +ThirdPartyEmail=E-pošta treće strane +ThirdParty=Treća stranka +ThirdParties=Treće strane ThirdPartyProspects=Mogući klijenti ThirdPartyProspectsStats=Mogući klijenti ThirdPartyCustomers=Kupci ThirdPartyCustomersStats=Kupci ThirdPartyCustomersWithIdProf12=Kupci sa %s ili %s ThirdPartySuppliers=Prodavači -ThirdPartyType=Third-party type +ThirdPartyType=Tip treće strane Individual=Fizičko lice -ToCreateContactWithSameName=Will automatically create a contact/address with same information as the third party under the third party. In most cases, even if your third party is a physical person, creating a third party alone is enough. +ToCreateContactWithSameName=Automatski će kreirati kontakt/adresu sa istim informacijama kao i treća strana u okviru treće strane. U većini slučajeva, čak i ako je vaša treća strana fizička osoba, dovoljno je samo kreiranje treće strane. ParentCompany=Matična kompanija Subsidiaries=Podružnice -ReportByMonth=Report per month -ReportByCustomers=Report per customer -ReportByThirdparties=Report per thirdparty -ReportByQuarter=Report per rate +ReportByMonth=Izvještaj mjesečno +ReportByCustomers=Izvještaj po kupcu +ReportByThirdparties=Izvještaj po trećoj strani +ReportByQuarter=Izvještaj po stopi CivilityCode=Pravila ponašanja RegisteredOffice=Registrovan ured Lastname=Prezime Firstname=Ime -RefEmployee=Employee reference -NationalRegistrationNumber=National registration number +RefEmployee=Referenca za zaposlene +NationalRegistrationNumber=Nacionalni registarski broj PostOrFunction=Pozicija UserTitle=Titula NatureOfThirdParty=Vrsta treće strane -NatureOfContact=Nature of Contact +NatureOfContact=Priroda kontakta Address=Adresa State=Država/Provincija -StateId=State ID -StateCode=State/Province code +StateId=Državni ID +StateCode=Šifra države/pokrajine StateShort=Pokrajina Region=Region Region-State=Regija - Zemlja Country=Država CountryCode=Šifra države -CountryId=Country ID +CountryId=ID zemlje Phone=Telefon PhoneShort=Telefon Skype=Skajp Call=Pozovi Chat=Chat -PhonePro=Bus. phone +PhonePro=Autobus. telefon PhonePerso=Privatni telefon PhoneMobile=Mobitel -No_Email=Refuse bulk emailings +No_Email=Odbijte masovne slanje e-pošte Fax=Fax Zip=Poštanski broj Town=Grad Web=Web Poste= Pozicija -DefaultLang=Default language -VATIsUsed=Sales tax used -VATIsUsedWhenSelling=This defines if this third party includes a sales tax or not when it makes an invoice to its own customers +DefaultLang=Zadani jezik +VATIsUsed=Korišten porez na promet +VATIsUsedWhenSelling=Ovo definira da li ova treća strana uključuje porez na promet ili ne kada ispostavlja fakturu vlastitim kupcima VATIsNotUsed=Porez na promet nije obračunat -CopyAddressFromSoc=Copy address from third-party details -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects -ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor vendor, discounts are not available +VATReverseCharge=Povrat PDV-a +VATReverseChargeByDefault=Obrnuti PDV po defaultu +VATReverseChargeByDefaultDesc=Na fakturi dobavljača, po defaultu se koristi povrat PDV-a +CopyAddressFromSoc=Kopirajte adresu iz podataka treće strane +ThirdpartyNotCustomerNotSupplierSoNoRef=Treća strana ni kupac ni prodavac, nema dostupnih referentnih objekata +ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Treća strana ni kupac ni prodavac, popusti nisu dostupni PaymentBankAccount=Bankovni račun za plaćanje OverAllProposals=Prijedlozi OverAllOrders=Narudžbe @@ -105,8 +110,8 @@ WrongCustomerCode=Nevažeća šifra kupca WrongSupplierCode=Nevažeća šifra prodavača CustomerCodeModel=Model šifre kupca SupplierCodeModel=Model šifre prodavača -Gencod=Barcode -GencodBuyPrice=Barcode of price ref +Gencod=Barkod +GencodBuyPrice=Bar kod cijene ref ##### Professional ID ##### ProfId1Short=ID broj 1 ProfId2Short=ID broj 2 @@ -114,12 +119,20 @@ ProfId3Short=ID broj 3 ProfId4Short=ID broj 4 ProfId5Short=ID broj 5 ProfId6Short=ID broj 6 +ProfId7Short=Prof. id 7 +ProfId8Short=Prof. id 8 +ProfId9Short=Prof. id 9 +ProfId10Short=Prof. id 10 ProfId1=Profesionalni ID 1 ProfId2=Profesionalni ID 2 ProfId3=Profesionalni ID 3 ProfId4=Profesionalni ID 4 ProfId5=Profesionalni ID 5 ProfId6=Profesionalni ID 6 +ProfId7=Profesionalni ID 7 +ProfId8=Profesionalni ID 8 +ProfId9=Profesionalni ID 9 +ProfId10=Profesionalni ID 10 ProfId1AR=Prof Id 1 (CUIT / CUIL) ProfId2AR=Prof Id 2 (Revenu brutes) ProfId3AR=- @@ -130,7 +143,7 @@ ProfId1AT=Prof Id 1 (USt.-Id br.) ProfId2AT=Prof Id 2 (USt.-br.) ProfId3AT=Prof Id 3 (br. trgovačkog registra) ProfId4AT=- -ProfId5AT=EORI number +ProfId5AT=EORI broj ProfId6AT=- ProfId1AU=Prof Id 1 (ABN) ProfId2AU=- @@ -142,7 +155,7 @@ ProfId1BE=Prof Id 1 (Professional number) ProfId2BE=- ProfId3BE=- ProfId4BE=- -ProfId5BE=EORI number +ProfId5BE=EORI broj ProfId6BE=- ProfId1BR=- ProfId2BR=IE (Inscricao Estadual) @@ -150,11 +163,11 @@ ProfId3BR=IM (Inscricao Municipal) ProfId4BR=CPF #ProfId5BR=CNAE #ProfId6BR=INSS -ProfId1CH=UID-Nummer +ProfId1CH=UID-broj ProfId2CH=- ProfId3CH=Prof Id 1 (Federalni broj) ProfId4CH=Prof Id 2 (Broj komercijalnog zapisa) -ProfId5CH=EORI number +ProfId5CH=EORI broj ProfId6CH=- ProfId1CL=Prof Id 1 (R.U.T.) ProfId2CL=- @@ -162,16 +175,16 @@ ProfId3CL=- ProfId4CL=- ProfId5CL=- ProfId6CL=- -ProfId1CM=Id. prof. 1 (Trade Register) -ProfId2CM=Id. prof. 2 (Taxpayer No.) -ProfId3CM=Id. prof. 3 (No. of creation decree) -ProfId4CM=Id. prof. 4 (Deposit certificate No.) -ProfId5CM=Id. prof. 5 (Others) +ProfId1CM=Id. prof. 1 (Trgovski registar) +ProfId2CM=Id. prof. 2 (br. poreskog obveznika) +ProfId3CM=Id. prof. 3 (Br. dekreta o stvaranju) +ProfId4CM=Id. prof. 4 (Br. potvrde o depozitu) +ProfId5CM=Id. prof. 5 (Ostali) ProfId6CM=- -ProfId1ShortCM=Trade Register -ProfId2ShortCM=Taxpayer No. -ProfId3ShortCM=No. of creation decree -ProfId4ShortCM=Deposit certificate No. +ProfId1ShortCM=Trgovački registar +ProfId2ShortCM=Poreski obveznik br. +ProfId3ShortCM=Broj dekreta o stvaranju +ProfId4ShortCM=br. potvrde o depozitu ProfId5ShortCM=Drugi ProfId6ShortCM=- ProfId1CO=Prof Id 1 (R.U.T.) @@ -184,26 +197,34 @@ ProfId1DE=Prof Id 1 (USt.-Id br.) ProfId2DE=Prof Id 2 (USt.-br.) ProfId3DE=Prof Id 3 (br. trgovačkog registra) ProfId4DE=- -ProfId5DE=EORI number +ProfId5DE=EORI broj ProfId6DE=- ProfId1ES=Prof Id 1 (CIF/NIF) ProfId2ES=Prof Id 2 (broj socijalnog osiguranja) ProfId3ES=Prof Id 3 (CNAE) ProfId4ES=Prof Id 4 (broj udruženja) -ProfId5ES=Prof Id 5 (EORI number) +ProfId5ES=Prof Id 5 (EORI broj) ProfId6ES=- ProfId1FR=Prof Id 1 (SIREN) ProfId2FR=Prof Id 2 (SIRET) ProfId3FR=Prof Id 3 (NAF, stari APE) ProfId4FR=Prof Id 4 (RCS/RM) -ProfId5FR=Prof Id 5 (numéro EORI) +ProfId5FR=Prof Id 5 (broj EORI) ProfId6FR=- +ProfId7FR=- +ProfId8FR=- +ProfId9FR=- +ProfId10FR=- ProfId1ShortFR=SIREN ProfId2ShortFR=SIRET ProfId3ShortFR=NAF ProfId4ShortFR=RCS ProfId5ShortFR=EORI ProfId6ShortFR=- +ProfId7ShortFR=- +ProfId8ShortFR=- +ProfId9ShortFR=- +ProfId10ShortFR=- ProfId1GB=Registracijski broj ProfId2GB=- ProfId3GB=SIC @@ -226,13 +247,13 @@ ProfId1IT=- ProfId2IT=- ProfId3IT=- ProfId4IT=- -ProfId5IT=EORI number +ProfId5IT=EORI broj ProfId6IT=- ProfId1LU=Id. prof. 1 (R.C.S. Luksemburg) ProfId2LU=Id. prof. 2 (dozvola za rad) ProfId3LU=- ProfId4LU=- -ProfId5LU=EORI number +ProfId5LU=EORI broj ProfId6LU=- ProfId1MA=Id prof. 1 (R.C.) ProfId2MA=Id prof. 2 (Patent) @@ -242,7 +263,7 @@ ProfId5MA=Id prof. 5 (I.C.E.) ProfId6MA=- ProfId1MX=Prof Id 1 (R.F.C). ProfId2MX=Prof Id 2 (R..P. IMSS) -ProfId3MX=Prof Id 3 (profesionalna povelja) +ProfId3MX=Prof Id 3 (Profesionalna povelja) ProfId4MX=- ProfId5MX=- ProfId6MX=- @@ -250,13 +271,13 @@ ProfId1NL=KVK broj ProfId2NL=- ProfId3NL=- ProfId4NL=Broj usluga građanima (BSN) -ProfId5NL=EORI number +ProfId5NL=EORI broj ProfId6NL=- ProfId1PT=Prof Id 1 (NIPC) ProfId2PT=Prof Id 2 (broj socijalnog osiguranja) ProfId3PT=Prof Id 3 (broj komercijalnog zapisa) ProfId4PT=Prof Id 4 (konzervator) -ProfId5PT=Prof Id 5 (EORI number) +ProfId5PT=Prof Id 5 (EORI broj) ProfId6PT=- ProfId1SN=RC ProfId2SN=NINEA @@ -280,7 +301,7 @@ ProfId1RO=Prof Id 1 (CUI) ProfId2RO=Prof Id 2 (Nr. Înmatriculare) ProfId3RO=Prof Id 3 (CAEN) ProfId4RO=Prof Id 5 (EUID) -ProfId5RO=Prof Id 5 (EORI number) +ProfId5RO=Prof Id 5 (EORI broj) ProfId6RO=- ProfId1RU=Prof Id 1 (OGRN) ProfId2RU=Prof Id 2 (INN) @@ -291,15 +312,15 @@ ProfId6RU=- ProfId1UA=Prof Id 1 (EDRPOU) ProfId2UA=Prof Id 2 (DRFO) ProfId3UA=Prof Id 3 (INN) -ProfId4UA=Prof Id 4 (Certificate) +ProfId4UA=Prof Id 4 (Sertifikat) ProfId5UA=Prof Id 5 (RNOKPP) ProfId6UA=Prof Id 6 (TRDPAU) ProfId1DZ=RC ProfId2DZ=Art. ProfId3DZ=NIF ProfId4DZ=NIS -VATIntra=VAT ID -VATIntraShort=VAT ID +VATIntra=PDV ID +VATIntraShort=PDV ID VATIntraSyntaxIsValid=Sintaksa je nevažeća VATReturn=Povrat PDV ProspectCustomer=Mogući klijent / Kupac @@ -312,15 +333,15 @@ CustomerRelativeDiscountShort=Relativni popust CustomerAbsoluteDiscountShort=Fiksni popust CompanyHasRelativeDiscount=Ovaj kupca ima defaultni popust od %s%% CompanyHasNoRelativeDiscount=Ovaj kupac nema relativnog popusta po defaultu -HasRelativeDiscountFromSupplier=You have a default discount of %s%% from this vendor -HasNoRelativeDiscountFromSupplier=You have no default relative discount from this vendor +HasRelativeDiscountFromSupplier=Imate zadani popust od %s%% kod ovog dobavljača +HasNoRelativeDiscountFromSupplier=Nema zadanog relativnog popusta kod ovog dobavljača CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for %s %s CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for %s %s CompanyHasCreditNote=Ovaj kupac i dalje ima knjižno odobrenje za %s %s -HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this vendor +HasNoAbsoluteDiscountFromSupplier=Nema popusta/kredita kod ovog prodavca HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for %s %s from this vendor HasDownPaymentOrCommercialDiscountFromSupplier=You have discounts available (commercial, down payments) for %s %s from this vendor -HasCreditNoteFromSupplier=You have credit notes for %s %s from this vendor +HasCreditNoteFromSupplier=Imate kreditne bilješke za %s %s od ovog dobavljača CompanyHasNoAbsoluteDiscount=Ovaj kupac nema zasluga za popust CustomerAbsoluteDiscountAllUsers=Apsolutni popusti kupcima (odobreni od svih korisnika) CustomerAbsoluteDiscountMy=Apsolutni popusti kupcima (koje ste vi odobrili) @@ -333,7 +354,7 @@ AddContact=Napravi kontakt AddContactAddress=Napravi kontakt/adresu EditContact=Uredi kontakt EditContactAddress=Uredi kontakt/adresu -Contact=Contact/Address +Contact=Kontakt adresa Contacts=Kontakti/Adrese ContactId=Id kontakta ContactsAddresses=Kontakti/Adrese @@ -341,30 +362,30 @@ FromContactName=Naziv: NoContactDefinedForThirdParty=Nema definiranih kontakata za ovaj subjekt NoContactDefined=Nijedan kontakt definiran DefaultContact=Defaultni kontakt/adresa -ContactByDefaultFor=Default contact/address for +ContactByDefaultFor=Zadani kontakt/adresa za AddThirdParty=Napravi novi subjekt DeleteACompany=Obrisati kompaniju PersonalInformations=Osobni podaci AccountancyCode=Računovodstveni račun CustomerCode=Customer Code -SupplierCode=Vendor Code +SupplierCode=Šifra dobavljača CustomerCodeShort=Customer Code -SupplierCodeShort=Vendor Code -CustomerCodeDesc=Customer Code, unique for all customers -SupplierCodeDesc=Vendor Code, unique for all vendors +SupplierCodeShort=Šifra dobavljača +CustomerCodeDesc=Korisnički kod, jedinstven za sve kupce +SupplierCodeDesc=Šifra dobavljača, jedinstvena za sve dobavljače RequiredIfCustomer=Potrebno ako je subjekt kupac ili mogući klijent RequiredIfSupplier=Potrebno ako je subjekt prodavač -ValidityControledByModule=Validity controlled by the module -ThisIsModuleRules=Rules for this module +ValidityControledByModule=Valjanost kontrolira modul +ThisIsModuleRules=Pravila za ovaj modul ProspectToContact=Mogući klijent za kontaktirati CompanyDeleted=Kompanija"%s" obrisana iz baze podataka ListOfContacts=Lista kontakta/adresa ListOfContactsAddresses=Lista kontakta/adresa -ListOfThirdParties=List of Third Parties -ShowCompany=Third Party -ShowContact=Contact-Address +ListOfThirdParties=Lista trećih strana +ShowCompany=Treća stranka +ShowContact=Kontakt adresa ContactsAllShort=Svi (bez filtera) -ContactType=Contact role +ContactType=Kontakt uloga ContactForOrders=Kontakt narudžbe ContactForOrdersOrShipments=Kontakt za narudžbu ili slanje ContactForProposals=Kontakt prijedloga @@ -376,21 +397,21 @@ NoContactForAnyProposal=Ovaj kontakt nije kontakt za bilo koji poslovni prijedlo NoContactForAnyContract=Ovaj kontakt nije kontakt za bilo koji ugovor NoContactForAnyInvoice=Ovaj kontakt nije kontakt za bilo koju fakturu NewContact=Novi kontakt -NewContactAddress=New Contact/Address +NewContactAddress=Novi kontakt/adresa MyContacts=Moji kontakti Capital=Kapital CapitalOf=Kapital od %s EditCompany=Uredi kompaniju -ThisUserIsNot=This user is not a prospect, customer or vendor +ThisUserIsNot=Ovaj korisnik nije potencijalni klijent, kupac ili prodavac VATIntraCheck=Provjeri -VATIntraCheckDesc=The VAT ID must include the country prefix. The link %s uses the European VAT checker service (VIES) which requires internet access from the Dolibarr server. -VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do -VATIntraCheckableOnEUSite=Check the intra-Community VAT ID on the European Commission website -VATIntraManualCheck=You can also check manually on the European Commission website %s +VATIntraCheckDesc=PDV ID mora sadržavati prefiks zemlje. Veza %s koristi evropsku uslugu provjere PDV-a (VIES) koji zahtijeva pristup internetu sa Dolibarr servera. +VATIntraCheckURL=https://ec.europa.eu/taxation_customs/vies/#/vat-validation +VATIntraCheckableOnEUSite=Provjerite ID za PDV unutar Zajednice na web stranici Evropske komisije +VATIntraManualCheck=Također možete ručno provjeriti na web stranici Evropske komisije %s ErrorVATCheckMS_UNAVAILABLE=Provjera nije moguća. Servis za provjeru nije naveden od stran države članice (%s). -NorProspectNorCustomer=Not prospect, nor customer -JuridicalStatus=Business entity type -Workforce=Workforce +NorProspectNorCustomer=Ne potencijalni klijenti, niti kupac +JuridicalStatus=Tip poslovnog subjekta +Workforce=Radna snaga Staff=Employees ProspectLevelShort=Potencijal ProspectLevel=Potencijal mogućeg klijenta @@ -412,7 +433,7 @@ TE_MEDIUM=Srednja kompanija TE_ADMIN=Državna kompanija TE_SMALL=Mala kompanija TE_RETAIL=Maloprodaja -TE_WHOLE=Wholesaler +TE_WHOLE=Veletrgovac TE_PRIVATE=Fizičko lice TE_OTHER=Ostalo StatusProspect-1=Ne kontaktirati @@ -431,70 +452,79 @@ ExportCardToFormat=Izvod podataka u formatu ContactNotLinkedToCompany=Kontakt nije povezan sa nekim od subjekata DolibarrLogin=Dolibarr login NoDolibarrAccess=Nema Dolibarr pristupa -ExportDataset_company_1=Third-parties (companies/foundations/physical people) and their properties -ExportDataset_company_2=Contacts and their properties -ImportDataset_company_1=Third-parties and their properties -ImportDataset_company_2=Third-parties additional contacts/addresses and attributes -ImportDataset_company_3=Third-parties Bank accounts -ImportDataset_company_4=Third-parties Sales representatives (assign sales representatives/users to companies) +ExportDataset_company_1=Treće strane (kompanije/fondacije/fizičke osobe) i njihova svojstva +ExportDataset_company_2=Kontakti i njihova svojstva +ImportDataset_company_1=Svojstva trećih strana i +ImportDataset_company_2=Dodatni kontakti/adrese trećih strana i atributi +ImportDataset_company_3=Bankovni računi trećih strana +ImportDataset_company_4=Predstavnici prodaje trećih strana (dodijelite prodajne predstavnike/korisnike kompanijama) PriceLevel=Price Level -PriceLevelLabels=Price Level Labels +PriceLevelLabels=Oznake nivoa cijena DeliveryAddress=Adresa za dostavu AddAddress=Dodaj adresu SupplierCategory=Kategorija prodavača JuridicalStatus200=Nezavisni DeleteFile=Obriši fajl -ConfirmDeleteFile=Jeste li sigurni da želite obrisati ovaj fajl? +ConfirmDeleteFile=Jeste li sigurni da želite izbrisati ovaj fajl %s? AllocateCommercial=Dodijeljen predstavniku prodaje Organization=Organizacija -FiscalYearInformation=Fiscal Year +FiscalYearInformation=Fiskalna godina FiscalMonthStart=Početni mjesec fiskalne godine -SocialNetworksInformation=Social networks +SocialNetworksInformation=Društvene mreže SocialNetworksFacebookURL=Facebook URL SocialNetworksTwitterURL=Twitter URL SocialNetworksLinkedinURL=Linkedin URL SocialNetworksInstagramURL=Instagram URL SocialNetworksYoutubeURL=Youtube URL SocialNetworksGithubURL=Github URL -YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification. +YouMustAssignUserMailFirst=Morate kreirati e-poštu za ovog korisnika prije nego što budete mogli dodati obavještenje putem e-pošte. YouMustCreateContactFirst=Da bi mogli dodati e-mail obavještenja, prvo morate definirati kontakte s važećom e-poštom za subjekte -ListSuppliersShort=List of Vendors +ListSuppliersShort=Lista dobavljača ListProspectsShort=List of Prospects -ListCustomersShort=List of Customers -ThirdPartiesArea=Third Parties/Contacts -LastModifiedThirdParties=Latest %s Third Parties which were modified -UniqueThirdParties=Total number of Third Parties +ListCustomersShort=Lista kupaca +ThirdPartiesArea=Treće strane/Kontakti +LastModifiedThirdParties=Najnovije %s Treće strane koje su izmijenjene +UniqueThirdParties=Ukupan broj trećih strana InActivity=Otvori ActivityCeased=Zatvoreno ThirdPartyIsClosed=Subjekat je zatvoren -ProductsIntoElements=List of products/services mapped to %s +ProductsIntoElements=Lista proizvoda/usluga mapiranih na %s CurrentOutstandingBill=Trenutni neplaćeni račun OutstandingBill=Max. za neplaćeni račun OutstandingBillReached=Dostignut maksimum za neplaćene račune OrderMinAmount=Najmanja količina za naručiti -MonkeyNumRefModelDesc=Return a number in the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequencial auto-incrementing number with no break and no return to 0. +MonkeyNumRefModelDesc=Return a number in the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequential auto-incrementing number with no break and no return to 0. LeopardNumRefModelDesc=Ova šifra je slobodna. Ova šifra se može mijenjati bilo kad. ManagingDirectors=Ime menadžer(a) (CEO, direktor, predsjednik...) MergeOriginThirdparty=Umnoži subjekta (subjekt kojeg želite obrisati) MergeThirdparties=Spoji subjekte -ConfirmMergeThirdparties=Are you sure you want to merge the chosen third party with the current one? All linked objects (invoices, orders, ...) will be moved to the current third party, after which the chosen third party will be deleted. +ConfirmMergeThirdparties=Jeste li sigurni da želite spojiti odabranu treću stranu sa trenutnom? Svi povezani objekti (fakture, narudžbe,...) bit će premješteni na trenutnu treću stranu, nakon čega će odabrana treća strana biti izbrisana. ThirdpartiesMergeSuccess=Treće strane su spojene SaleRepresentativeLogin=Pristup za predstavnika prodaje SaleRepresentativeFirstname=Ime predstavnika prodaje SaleRepresentativeLastname=Prezime predstavnika prodaje ErrorThirdpartiesMerge=Nastala je greška pri brisanju treće strane. Molimo vas da provjerite zapisnik. Izmjene su vraćene. -NewCustomerSupplierCodeProposed=Customer or Vendor code already used, a new code is suggested -KeepEmptyIfGenericAddress=Keep this field empty if this address is a generic address +NewCustomerSupplierCodeProposed=Šifra kupca ili dobavljača je već korištena, predlaže se novi kod +KeepEmptyIfGenericAddress=Ostavite ovo polje praznim ako je ova adresa generička adresa #Imports -PaymentTypeCustomer=Payment Type - Customer -PaymentTermsCustomer=Payment Terms - Customer -PaymentTypeSupplier=Payment Type - Vendor -PaymentTermsSupplier=Payment Term - Vendor -PaymentTypeBoth=Payment Type - Customer and Vendor -MulticurrencyUsed=Use Multicurrency +PaymentTypeCustomer=Vrsta plaćanja - Kupac +PaymentTermsCustomer=Uslovi plaćanja - Kupac +PaymentTypeSupplier=Vrsta plaćanja - Dobavljač +PaymentTermsSupplier=Rok plaćanja - Dobavljač +PaymentTypeBoth=Vrsta plaćanja - Kupac i Dobavljač +MulticurrencyUsed=Koristite Multicurrency MulticurrencyCurrency=valuta -InEEC=Europe (EEC) -RestOfEurope=Rest of Europe (EEC) -OutOfEurope=Out of Europe (EEC) -CurrentOutstandingBillLate=Current outstanding bill late -BecarefullChangeThirdpartyBeforeAddProductToInvoice=Be carefull, depending on your product price settings, you should change thirdparty before adding product to POS. +InEEC=Evropa (EEZ) +RestOfEurope=Ostatak Evrope (EEZ) +OutOfEurope=van Evrope (EEZ) +CurrentOutstandingBillLate=Trenutni neizmireni račun kasni +BecarefullChangeThirdpartyBeforeAddProductToInvoice=Budite oprezni, ovisno o postavkama cijene vašeg proizvoda, trebali biste promijeniti treću stranu prije dodavanja proizvoda na POS. +EmailAlreadyExistsPleaseRewriteYourCompanyName=e-pošta već postoji, molimo prepišite naziv vaše kompanije +TwoRecordsOfCompanyName=postoji više od jednog zapisa za ovu kompaniju, kontaktirajte nas da dovršimo vaš zahtjev za partnerstvo +CompanySection=Odjel kompanije +ShowSocialNetworks=Pokažite društvene mreže +HideSocialNetworks=Sakrij društvene mreže +ExternalSystemID=ID eksternog sistema +IDOfPaymentInAnExternalSystem=ID načina plaćanja u eksterni sistem (kao što je Stripe, Paypal, ...) +AADEWebserviceCredentials=AADE Webservice Credentials +ThirdPartyMustBeACustomerToCreateBANOnStripe=Treća strana mora biti klijent da bi dozvolila kreiranje svojih bankovnih podataka na strani Stripea diff --git a/htdocs/langs/bs_BA/compta.lang b/htdocs/langs/bs_BA/compta.lang index 1fd00c7e697..d412f3b90db 100644 --- a/htdocs/langs/bs_BA/compta.lang +++ b/htdocs/langs/bs_BA/compta.lang @@ -174,8 +174,8 @@ CalcModeLT2Rec= Mode %sIRPF on suppliers invoices%s AnnualSummaryDueDebtMode=Balance of income and expenses, annual summary AnnualSummaryInputOutputMode=Balance of income and expenses, annual summary AnnualByCompanies=Stanje prihoda i rashodi, po unaprijed definiranim grupama računa -AnnualByCompaniesDueDebtMode=Bilans prihoda i troškovi, detalji po unaprijed definiranim grupama, način rada b0ecb2ec87f49fz Potraživanja-Dugovi%s rekao je Commitment account notranslate'>. -AnnualByCompaniesInputOutputMode=Bilans prihoda i troškovi, detalji po unaprijed definiranim grupama, način rada b0ecb2ec87f49fz Prihodi-Rashodi%s rekao je class='račun gotovine notranslate'>. +AnnualByCompaniesDueDebtMode=Balance of income and expenses, detail by predefined groups, mode %sClaims-Debts%s said Commitment accounting. +AnnualByCompaniesInputOutputMode=Balance of income and expenses, detail by predefined groups, mode %sIncomes-Expenses%s said cash accounting. SeeReportInInputOutputMode=Pogledajte %sanalizu plaćanja%s za kalkulaciju zasnovanu na zabilježenim uplatama čak i ako još nisu evidentirane na računu SeeReportInDueDebtMode=Pogledajte %sanalizu snimljenih dokumenata%s za izračun zasnovan na poznatim snimljenim dokumentima čak i ako još nisu evidentirani na L računu SeeReportInBookkeepingMode=Pogledajte %sanalizu tablice knjigovodstvene knjige%s za izvještaj zasnovan na tabelu knjigovodstvene knjige diff --git a/htdocs/langs/bs_BA/cron.lang b/htdocs/langs/bs_BA/cron.lang index 72a16031cab..55f21979c71 100644 --- a/htdocs/langs/bs_BA/cron.lang +++ b/htdocs/langs/bs_BA/cron.lang @@ -1,22 +1,21 @@ # Dolibarr language file - Source file is en_US - cron -# About page -# Right +# Permissions Permission23101 = Read Scheduled job Permission23102 = Create/update Scheduled job Permission23103 = Delete Scheduled job Permission23104 = Execute Scheduled job # Admin CronSetup=Scheduled job management setup -URLToLaunchCronJobs=URL to check and launch qualified cron jobs from a browser -OrToLaunchASpecificJob=Or to check and launch a specific job from a browser +URLToLaunchCronJobs=URL za provjeru i pokrenite kvalifikovane cron poslove iz preglednika +OrToLaunchASpecificJob=Ili da provjerite i pokrenite određeni posao iz preglednika KeyForCronAccess=Sigurnosni ključ za URL za pokretanje cron poslova -FileToLaunchCronJobs=Command line to check and launch qualified cron jobs +FileToLaunchCronJobs=Komandna linija za provjeru i pokretanje kvalifikovanih cron poslova CronExplainHowToRunUnix=On Unix environment you should use the following crontab entry to run the command line each 5 minutes -CronExplainHowToRunWin=On Microsoft(tm) Windows environment you can use Scheduled Task tools to run the command line each 5 minutes -CronMethodDoesNotExists=Class %s does not contain any method %s -CronMethodNotAllowed=Method %s of class %s is in blacklist of forbidden methods -CronJobDefDesc=Cron job profiles are defined into the module descriptor file. When module is activated, they are loaded and available so you can administer the jobs from the admin tools menu %s. -CronJobProfiles=List of predefined cron job profiles +CronExplainHowToRunWin=U Microsoft(tm) Windows okruženju možete koristiti alate za planirani zadatak za pokretanje komandne linije svakih 5 minuta +CronMethodDoesNotExists=Klasa %s ne sadrži nijednu metodu %s +CronMethodNotAllowed=Metoda %s klase %s je na listi zabranjenih metoda +CronJobDefDesc=Cron profili poslova definirani su u datoteci deskriptora modula. Kada je modul aktiviran, oni su učitani i dostupni tako da možete administrirati poslove iz menija administratorskih alata %s. +CronJobProfiles=Lista unaprijed definiranih cron profila poslova # Menu EnabledAndDisabled=Enabled and disabled # Page list @@ -26,7 +25,7 @@ CronCommand=Komanda CronList=Scheduled jobs CronDelete=Delete scheduled jobs CronConfirmDelete=Are you sure you want to delete these scheduled jobs? -CronExecute=Launch now +CronExecute=Pokreni sada CronConfirmExecute=Are you sure you want to execute these scheduled jobs now? CronInfo=Scheduled job module allows to schedule jobs to execute them automatically. Jobs can also be started manually. CronTask=Job @@ -43,11 +42,11 @@ CronModule=Modul CronNoJobs=Nema registrovanih poslova CronPriority=Prioritet CronLabel=Oznaka -CronNbRun=Number of launches -CronMaxRun=Maximum number of launches +CronNbRun=Broj lansiranja +CronMaxRun=Maksimalan broj lansiranja CronEach=Every JobFinished=Job launched and finished -Scheduled=Scheduled +Scheduled=Zakazano #Page card CronAdd= Dodaj posao CronEvery=Execute job each @@ -57,44 +56,45 @@ CronSaveSucess=Save successfully CronNote=Komentar CronFieldMandatory=Polja %s su obavezna CronErrEndDateStartDt=Datum završetka ne može biti prije datuma početka -StatusAtInstall=Status at module installation -CronStatusActiveBtn=Enable scheduling +StatusAtInstall=Status pri instalaciji modula +CronStatusActiveBtn=Omogući zakazivanje CronStatusInactiveBtn=Iskljući -CronTaskInactive=This job is disabled (not scheduled) +CronTaskInactive=Ovaj posao je onemogućen (nije zakazan) CronId=ID CronClassFile=Filename with class -CronModuleHelp=Name of Dolibarr module directory (also work with external Dolibarr module).
For example to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for module is
product -CronClassFileHelp=The relative path and file name to load (path is relative to web server root directory).
For example to call the fetch method of Dolibarr Product object htdocs/product/class/product.class.php, the value for class file name is
product/class/product.class.php -CronObjectHelp=The object name to load.
For example to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for class file name is
Product -CronMethodHelp=The object method to launch.
For example to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for method is
fetch -CronArgsHelp=The method arguments.
For example to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for paramters can be
0, ProductRef +CronModuleHelp=Naziv direktorija Dolibarr modula (također radi s vanjskim Dolibarr modulom).
Na primjer za pozivanje metode dohvaćanja objekta Dolibarr Product /htdocs/productb0aaa478fdca /class/product.class.php, vrijednost za modul je
product +CronClassFileHelp=Relativna putanja i ime datoteke za učitavanje (putnja je relativna na korijenski direktorij web servera).
Na primjer za pozivanje metode dohvaćanja objekta Dolibarr Product htdocs/product/class/product.class.php, vrijednost za naziv datoteke klase je
proizvod/klasa/proizvod .class.php +CronObjectHelp=Ime objekta za učitavanje.
Na primjer, za pozivanje metode dohvaćanja objekta Dolibarr Product /htdocs/product/class/product.class.php, vrijednost za naziv datoteke klase je
Proizvod +CronMethodHelp=Metoda objekta za pokretanje.
Na primjer za pozivanje metode dohvaćanja objekta Dolibarr Product /htdocs/product/class/product.class.php, vrijednost za metodu je
fetch +CronArgsHelp=Argumenti metode.
Na primjer, za pozivanje metode dohvaćanja objekta Dolibarr Product /htdocs/product/class/product.class.php, vrijednost za parametre može biti
0, ProductRef CronCommandHelp=Sistemska komanda za izvršenje CronCreateJob=Create new Scheduled Job CronFrom=Od # Info # Common CronType=Job type -CronType_method=Call method of a PHP Class +CronType_method=Metod poziva PHP klase CronType_command=Shell komanda -CronCannotLoadClass=Cannot load class file %s (to use class %s) -CronCannotLoadObject=Class file %s was loaded, but object %s was not found into it +CronCannotLoadClass=Nije moguće učitati datoteku klase %s (za korištenje klase %s) +CronCannotLoadObject=Datoteka klase %s je učitana, ali objekat %s nije pronađen u njoj UseMenuModuleToolsToAddCronJobs=Go into menu "Home - Admin tools - Scheduled jobs" to see and edit scheduled jobs. JobDisabled=Job disabled MakeLocalDatabaseDumpShort=Local database backup -MakeLocalDatabaseDump=Create a local database dump. Parameters are: compression ('gz' or 'bz' or 'none'), backup type ('mysql', 'pgsql', 'auto'), 1, 'auto' or filename to build, number of backup files to keep -MakeSendLocalDatabaseDumpShort=Send local database backup -MakeSendLocalDatabaseDump=Send local database backup by email. Parameters are: to, from, subject, message, filename (Name of file sent), filter ('sql' for backup of database only) -BackupIsTooLargeSend=Sorry, last backup file is too large to be send by email -CleanUnfinishedCronjobShort=Clean unfinished cronjob -CleanUnfinishedCronjob=Clean cronjob stuck in processing when the process is no longer running +MakeLocalDatabaseDump=Kreirajte lokalni dump baze podataka. Parametri su: kompresija ('gz' ili 'bz' ili 'none'), vrsta sigurnosne kopije ('mysql', 'pgsql', 'auto'), 1, 'auto' ili naziv datoteke za izradu, broj rezervnih datoteka koje treba zadržati +MakeSendLocalDatabaseDumpShort=Pošaljite sigurnosnu kopiju lokalne baze podataka +MakeSendLocalDatabaseDump=Pošaljite sigurnosnu kopiju lokalne baze podataka putem e-pošte. Parametri su: do, od, predmet, poruka, naziv datoteke (ime poslane datoteke), filter ('sql' samo za sigurnosnu kopiju baze podataka) +BackupIsTooLargeSend=Žao nam je, posljednja sigurnosna kopija je prevelika za slanje e-poštom +CleanUnfinishedCronjobShort=Čisti nedovršeni cronjob +CleanUnfinishedCronjob=Clean cronjob zaglavljen u obradi kada proces više ne radi WarningCronDelayed=Attention, for performance purpose, whatever is next date of execution of enabled jobs, your jobs may be delayed to a maximum of %s hours, before being run. -DATAPOLICYJob=Data cleaner and anonymizer -JobXMustBeEnabled=Job %s must be enabled -EmailIfError=Email for warning on error -ErrorInBatch=Error when running the job %s +DATAPOLICYJob=Anonimizator za čišćenje podataka i +JobXMustBeEnabled=Posao %s mora biti omogućen +EmailIfError=E-mail za upozorenje o grešci +JobNotFound=Posao %s nije pronađen na listi poslova (pokušajte onemogućiti/omogućiti modul) +ErrorInBatch=Greška prilikom pokretanja posla %s # Cron Boxes -LastExecutedScheduledJob=Last executed scheduled job -NextScheduledJobExecute=Next scheduled job to execute -NumberScheduledJobError=Number of scheduled jobs in error -NumberScheduledJobNeverFinished=Number of scheduled jobs never finished +LastExecutedScheduledJob=Posljednji izvršeni zakazani posao +NextScheduledJobExecute=Sljedeći planirani posao za izvršenje +NumberScheduledJobError=Broj zakazanih poslova u grešci +NumberScheduledJobNeverFinished=Broj zakazanih poslova nikada nije završen diff --git a/htdocs/langs/bs_BA/errors.lang b/htdocs/langs/bs_BA/errors.lang index b6a5208fd0b..d38396b26b9 100644 --- a/htdocs/langs/bs_BA/errors.lang +++ b/htdocs/langs/bs_BA/errors.lang @@ -93,11 +93,11 @@ ErrorRecordHasAtLeastOneChildOfType=Objekt %s ima najmanje jedno dijete tipa %s ErrorRecordIsUsedCantDelete=Nije moguće izbrisati zapis. Već je korišten ili uključen u drugi objekt. ErrorModuleRequireJavascript=JavaScript ne smije biti onemogućen da bi ova funkcija radila. Da omogućite/onemogućite JavaScript, idite na meni Početna->Podešavanje->Prikaz. ErrorPasswordsMustMatch=Both typed passwords must match each other -ErrorContactEMail=Došlo je do tehničke greške. Molimo kontaktirajte administratora na sljedeći e-mail %s i navedite šifru greške %sf09f77b09 span> u svoju poruku ili dodajte ekransku kopiju ove stranice. -ErrorWrongValueForField=Polje %s: 'notranslate' %s' se ne podudara s pravilom redovnog izraza 36aee83b0aee8 %s +ErrorContactEMail=A technical error occurred. Please, contact administrator to following email %s and provide the error code %s in your message, or add a screen copy of this page. +ErrorWrongValueForField=Field %s: '%s' does not match regex rule %s ErrorHtmlInjectionForField=Polje %s: vrijednost '%s' sadrži zlonamjerne podatke koji nisu dozvoljeni -ErrorFieldValueNotIn=Polje %s: 'notranslate' %s' nije vrijednost pronađena u polju b0z0837 span>%s
od %s -ErrorFieldRefNotIn=Polje %s: 'notranslate' %s' nije b0ae83f7365 class='notranslate'>%s postojeća ref. +ErrorFieldValueNotIn=Field %s: '%s' is not a value found in field %s of %s +ErrorFieldRefNotIn=Field %s: '%s' is not a %s existing ref ErrorMultipleRecordFoundFromRef=Nekoliko zapisa pronađeno je pretraživanjem iz ref %s. Nema načina da znate koji ID koristiti. ErrorsOnXLines=%s pronađene greške ErrorFileIsInfectedWithAVirus=The antivirus program was not able to validate the file (file might be infected by a virus) @@ -219,7 +219,7 @@ ErrorPhpMailDelivery=Check that you don't use a too high number of recipients an ErrorUserNotAssignedToTask=User must be assigned to task to be able to enter time consumed. ErrorTaskAlreadyAssigned=Task already assigned to user ErrorModuleFileSeemsToHaveAWrongFormat=The module package seems to have a wrong format. -ErrorModuleFileSeemsToHaveAWrongFormat2=Najmanje jedan obavezni direktorij mora postojati u zip modulu: %s > ili %s +ErrorModuleFileSeemsToHaveAWrongFormat2=At least one mandatory directory must exists into zip of module: %s or %s ErrorFilenameDosNotMatchDolibarrPackageRules=The name of the module package (%s) does not match expected name syntax: %s ErrorDuplicateTrigger=Error, duplicate trigger name %s. Already loaded from %s. ErrorNoWarehouseDefined=Error, no warehouses defined. @@ -263,9 +263,9 @@ ErrorReplaceStringEmpty=Greška, niz za zamjenu je prazan ErrorProductNeedBatchNumber=Greška, proizvodu '%s' potreban je broj/serijski broj ErrorProductDoesNotNeedBatchNumber=Greška, proizvod '%s' ne prihvata lot/ serijski broj ErrorFailedToReadObject=Greška, nije uspjelo čitanje objekta tipa %s -ErrorParameterMustBeEnabledToAllwoThisFeature=Greška, parametar %s mora biti omogućen u class 'notranslate'>conf/conf.php<> za omogućavanje upotrebe sučelja komandne linije od strane internog planera poslova +ErrorParameterMustBeEnabledToAllwoThisFeature=Error, parameter %s must be enabled into conf/conf.php<> to allow use of Command Line Interface by the internal job scheduler ErrorLoginDateValidity=Greška, ova prijava je izvan raspona datuma valjanosti -ErrorValueLength=Dužina polja '%s< mora biti veća od' span class='notranslate'>%s' +ErrorValueLength=Length of field '%s' must be higher than '%s' ErrorReservedKeyword=Riječ '%s' je rezervirana ključna riječ ErrorFilenameReserved=Ime datoteke %s se ne može koristiti jer je rezervirana i zaštićena naredba. ErrorNotAvailableWithThisDistribution=Nije dostupno sa ovom distribucijom @@ -373,7 +373,7 @@ WarningModuleNeedRefresh = Modul %s je onemogućen. Ne zaboravite to omog WarningPermissionAlreadyExist=Postojeće dozvole za ovaj objekt WarningGoOnAccountancySetupToAddAccounts=Ako je ova lista prazna, idite u meni %s - %s - %s da učitate ili kreirate račune za vaš kontni plan. WarningCorrectedInvoiceNotFound=Ispravljena faktura nije pronađena -WarningCommentNotFound=Molimo provjerite položaj početnih i krajnjih komentara za %s
odjeljak u datoteci %sb09f4b>b09f17 span> prije podnošenja radnje +WarningCommentNotFound=Please check placement of start and end comments for %s section in file %s before submitting your action WarningAlreadyReverse=Kretanje dionica je već obrnuto SwissQrOnlyVIR = SwissQR faktura se može dodati samo na fakture postavljene da se plaćaju plaćanjem kreditnim transferom. diff --git a/htdocs/langs/bs_BA/eventorganization.lang b/htdocs/langs/bs_BA/eventorganization.lang index c1cbea0ee3c..d1c5a575527 100644 --- a/htdocs/langs/bs_BA/eventorganization.lang +++ b/htdocs/langs/bs_BA/eventorganization.lang @@ -36,7 +36,7 @@ EventOrganizationSetup=Podešavanje organizacije događaja EventOrganization=Organizacija događaja EventOrganizationSetupPage = Stranica za podešavanje organizacije događaja EVENTORGANIZATION_TASK_LABEL = Oznaka zadataka za automatsko kreiranje kada se projekat validira -EVENTORGANIZATION_TASK_LABELTooltip = Kada potvrdite događaj za organizaciju, neki zadaci se mogu automatski kreirati u projektu

Na primjer:
Pošalji poziv za konferencije
Pošalji poziv za štandove
prijedlozi Conferences of Conferences ='notranslate'>
Provjeri prijavu za štandove
Otvori pretplatu na događaj za učesnike
a podsjetimo o događaju govornicima
Pošalji podsjetnik na događaj domaćinima Bootha
Pošalji podsjetnik na događaj učesnicima +EVENTORGANIZATION_TASK_LABELTooltip = When you validate an event to organize, some tasks can be automatically created in the project

For example:
Send Call for Conferences
Send Call for Booths
Validate suggestions of Conferences
Validate application for Booths
Open subscriptions to the event for attendees
Send a remind of the event to speakers
Send a remind of the event to Booth hosters
Send a remind of the event to attendees EVENTORGANIZATION_TASK_LABELTooltip2=Ostavite prazno ako ne trebate automatski kreirati zadatke. EVENTORGANIZATION_CATEG_THIRDPARTY_CONF = Kategorija za dodavanje trećim stranama automatski kreirana kada neko predloži konferenciju EVENTORGANIZATION_CATEG_THIRDPARTY_BOOTH = Kategorija za dodavanje trećim stranama se automatski kreira kada predlože štand @@ -88,6 +88,7 @@ PriceOfRegistration=Cijena registracije PriceOfRegistrationHelp=Cijena koju treba platiti za registraciju ili učešće na događaju PriceOfBooth=Cijena pretplate za štand PriceOfBoothHelp=Cijena pretplate za štand +EventOrganizationICSLinkProject=Link ICS for the event EventOrganizationICSLink=Link ICS za konferencije ConferenceOrBoothInformation=Informacije o konferenciji ili štandu Attendees=Polaznici @@ -127,7 +128,7 @@ PublicAttendeeSubscriptionPage = Javni link za registraciju samo na ovaj događa MissingOrBadSecureKey = Sigurnosni ključ je nevažeći ili nedostaje EvntOrgWelcomeMessage = Ovaj obrazac vam omogućava da se registrujete kao novi učesnik događaja EvntOrgDuration = Ova konferencija počinje %s i završava se %s. -ConferenceAttendeeFee = Naknada za učesnike konferencije za događaj : '%s' koja se javlja od %s do %s >. +ConferenceAttendeeFee = Conference attendee fee for the event : '%s' occurring from %s to %s. BoothLocationFee = Lokacija štanda za događaj : '%s' koji se javlja od %s do %s EventType = Vrsta događaja LabelOfBooth=Oznaka štanda diff --git a/htdocs/langs/bs_BA/exports.lang b/htdocs/langs/bs_BA/exports.lang index 638a3f750f9..837bc2b30e1 100644 --- a/htdocs/langs/bs_BA/exports.lang +++ b/htdocs/langs/bs_BA/exports.lang @@ -72,7 +72,7 @@ FieldsTarget=Targeted fields FieldTarget=Targeted field FieldSource=Source field NbOfSourceLines=Number of lines in source file -NowClickToTestTheImport=Provjerite da li format datoteke (polje i graničnici nizova) vaše datoteke odgovara opcijama prikazanim i da ste izostavili red zaglavlja , ili će one biti označene kao greške u sljedećoj simulaciji.
Kliknite na "%s" dugme za pokretanje provjere strukture datoteke/sadržaja i
Nikakvi podaci neće biti promijenjeni u vašoj bazi podataka. +NowClickToTestTheImport=Check that the file format (field and string delimiters) of your file matches the options shown and that you have omitted the header line, or these will be flagged as errors in the following simulation.
Click on the "%s" button to run a check of the file structure/contents and simulate the import process.
No data will be changed in your database. RunSimulateImportFile=Pokrenite simulaciju uvoza FieldNeedSource=This field requires data from the source file SomeMandatoryFieldHaveNoSource=Some mandatory fields have no source from data file @@ -87,7 +87,7 @@ ErrorMissingMandatoryValue=Obavezni podaci su prazni u izvornoj datoteci u kolon TooMuchErrors=Još uvijek postoje %s drugi izvorni redovi s greškama, ali izlaz ima bila ograničena. TooMuchWarnings=Još uvijek postoje %s druge izvorne linije s upozorenjima, ali izlaz ima bila ograničena. EmptyLine=Empty line (will be discarded) -CorrectErrorBeforeRunningImport=Vi morate ispraviti sve greške izvodi definitivni uvoz. +CorrectErrorBeforeRunningImport=You must correct all errors before running the definitive import. FileWasImported=File was imported with number %s. YouCanUseImportIdToFindRecord=Možete pronaći sve uvezene zapise u vašoj bazi podataka filtriranjem u polju import_key='%s'. NbOfLinesOK=Number of lines with no errors and no warnings: %s. @@ -95,7 +95,7 @@ NbOfLinesImported=Number of lines successfully imported: %s. DataComeFromNoWhere=Value to insert comes from nowhere in source file. DataComeFromFileFieldNb=Vrijednost za umetanje dolazi iz stupca %s u izvornoj datoteci. DataComeFromIdFoundFromRef=Vrijednost koja dolazi iz izvorne datoteke koristit će se za pronalaženje ID-a nadređenog objekta koji će se koristiti (dakle objekt %s koji ima referencu iz izvorne datoteke mora postojati u bazi podataka). -DataComeFromIdFoundFromCodeId=Vrijednost koda koji dolazi iz izvorne datoteke koristit će se za pronalaženje ID-a nadređenog objekta koji će se koristiti (tako da kod iz izvorne datoteke mora postojati u rječniku %s). Imajte na umu da ako znate ID, možete ga koristiti i u izvornoj datoteci umjesto u kodu. Uvoz bi trebao funkcionirati u oba slučaja. +DataComeFromIdFoundFromCodeId=The value of code that comes from source file will be used to find the id of the parent object to use (so the code from source file must exist in the dictionary %s). Note that if you know the id, you can also use it in the source file instead of the code. Import should work in both cases. DataIsInsertedInto=Data coming from source file will be inserted into the following field: DataIDSourceIsInsertedInto=ID nadređenog objekta, koji je pronađen pomoću podataka u izvornoj datoteci, bit će umetnut u sljedeće polje: DataCodeIDSourceIsInsertedInto=ID roditeljske linije, koji je pronađen iz koda, bit će umetnut u sljedeće polje: @@ -103,7 +103,7 @@ SourceRequired=Data value is mandatory SourceExample=Example of possible data value ExampleAnyRefFoundIntoElement=Any ref found for element %s ExampleAnyCodeOrIdFoundIntoDictionary=Any code (or id) found into dictionary %s -CSVFormatDesc=Vrijednost odvojena zarezima format datoteke (.csv).
je format tekstualne datoteke u kojoj su polja odvojena separatorom [ %s ]. Ako se separator pronađe unutar sadržaja polja, polje se zaokružuje okruglim znakom [ %s ]. Izlazni znak za izbjegavanje okruglog znaka je [ %s ]. +CSVFormatDesc=Comma Separated Value file format (.csv).
This is a text file format where fields are separated by a separator [ %s ]. If separator is found inside a field content, field is rounded by round character [ %s ]. Escape character to escape round character is [ %s ]. Excel95FormatDesc=Excel format datoteke (.xls)
Ovo je native Excel 95 format (BIFF5). Excel2007FormatDesc=Excel format datoteke (.xlsx)
je nativni Excel 2007 format (SpreadsheetML). TsvFormatDesc=Tab Separated Value file format (.tsv)
This is a text file format where fields are separated by a tabulator [tab]. @@ -113,7 +113,7 @@ Separator=separator polja Enclosure=Razgraničenje nizova SpecialCode=Special code ExportStringFilter=%% allows replacing one or more characters in the text -ExportDateFilter=GGGG, GGGGMM, GGGGMMDD: filtrira po jednu godinu/mjesec/dan
GGGG+GGGG, GGGGMM+GGGGMM, GGGGMMDD+GGGGMMDD: filteri u rasponu godina/mjeseca u rasponu od/ span class='notranslate'>
> GGGG, > GGGGMM, > GGGGMMDD: filteri za sve naredne godine/mjesece/dane
< GGGG, < GGGMM GGGGMMDD: filteri za sve prethodne godine/mjesece/dane +ExportDateFilter=YYYY, YYYYMM, YYYYMMDD: filters by one year/month/day
YYYY+YYYY, YYYYMM+YYYYMM, YYYYMMDD+YYYYMMDD: filters over a range of years/months/days
> YYYY, > YYYYMM, > YYYYMMDD: filters on all following years/months/days
< YYYY, < YYYYMM, < YYYYMMDD: filters on all previous years/months/days ExportNumericFilter=NNNNN filters by one value
NNNNN+NNNNN filters over a range of values
< NNNNN filters by lower values
> NNNNN filters by higher values ImportFromLine=Import starting from line number EndAtLineNb=End at line number diff --git a/htdocs/langs/bs_BA/install.lang b/htdocs/langs/bs_BA/install.lang index ad77b76a54f..6d99d0092ca 100644 --- a/htdocs/langs/bs_BA/install.lang +++ b/htdocs/langs/bs_BA/install.lang @@ -2,36 +2,36 @@ InstallEasy=Pratite instrukcije korak po korak. MiscellaneousChecks=Provjera preduvjeta ConfFileExists=Konfiguracijska datoteka%s postoji. -ConfFileDoesNotExistsAndCouldNotBeCreated=Configuration file %s does not exist and could not be created! +ConfFileDoesNotExistsAndCouldNotBeCreated=Konfiguracijski fajl %s ne postoji i nije bilo moguće kreirati! ConfFileCouldBeCreated=Konfiguracijska datoteka %s se može napraviti. -ConfFileIsNotWritable=Configuration file %s is not writable. Check permissions. For first install, your web server must be able to write into this file during configuration process ("chmod 666" for example on a Unix like OS). +ConfFileIsNotWritable=U konfiguracijski fajl %s nije moguće pisati. Provjerite dozvole. Za prvu instalaciju, vaš web server mora biti u mogućnosti da upiše u ovu datoteku tokom procesa konfiguracije ("chmod 666" na primjer na Unix-u poput OS-a). ConfFileIsWritable=Konfiguracijska datoteka %s je slobodna za pisanje. -ConfFileMustBeAFileNotADir=Configuration file %s must be a file, not a directory. -ConfFileReload=Reloading parameters from configuration file. -NoReadableConfFileSoStartInstall=The configuration file conf/conf.php does not exists or is not readable. We will run the installation process to try to initialize it. +ConfFileMustBeAFileNotADir=Konfiguracijski fajl %s mora biti datoteka, a ne direktorij. +ConfFileReload=Ponovno učitavanje parametara iz konfiguracijske datoteke. +NoReadableConfFileSoStartInstall=Konfiguracijski fajl conf/conf.php ne postoji ili nije čitljiv. Pokrenut ćemo proces instalacije kako bismo ga pokušali inicijalizirati. PHPSupportPOSTGETOk=Ovaj PHP podržava varijable POST i GET. -PHPSupportPOSTGETKo=It's possible your PHP setup does not support variables POST and/or GET. Check the parameter variables_order in php.ini. +PHPSupportPOSTGETKo=Moguće je da vaša PHP postavka ne podržava varijable POST i/ili GET. Provjerite parametar variables_order u php.ini. PHPSupportSessions=Ovaj PHP podržava sesije. -PHPSupport=This PHP supports %s functions. +PHPSupport=Ovaj PHP podržava funkcije %s. PHPMemoryOK=Vaša maksimalna memorija za PHP sesiju je postavljena na %s. To bi trebalo biti dovoljno. PHPMemoryTooLow=Your PHP max session memory is set to %s bytes. This is too low. Change your php.ini to set memory_limit parameter to at least %s bytes. -Recheck=Click here for a more detailed test -ErrorPHPDoesNotSupportSessions=Your PHP installation does not support sessions. This feature is required to allow Dolibarr to work. Check your PHP setup and permissions of the sessions directory. -ErrorPHPDoesNotSupport=Your PHP installation does not support %s functions. +Recheck=Kliknite ovdje za detaljniji test +ErrorPHPDoesNotSupportSessions=Vaša PHP instalacija ne podržava sesije. Ova funkcija je potrebna da bi se Dolibarr omogućio da radi. Provjerite vaše PHP postavke i dozvole za direktorij sesija. +ErrorPHPDoesNotSupport=Vaša PHP instalacija ne podržava funkcije %s. ErrorDirDoesNotExists=Direktorij %s ne postoji. -ErrorGoBackAndCorrectParameters=Go back and check/correct the parameters. +ErrorGoBackAndCorrectParameters=Vratite se i provjerite/ispravite parametre. ErrorWrongValueForParameter=You may have typed a wrong value for parameter '%s'. ErrorFailedToCreateDatabase=Failed to create database '%s'. ErrorFailedToConnectToDatabase=Failed to connect to database '%s'. ErrorDatabaseVersionTooLow=Database version (%s) too old. Version %s or higher is required. -ErrorPHPVersionTooLow=PHP version too old. Version %s or higher is required. -ErrorPHPVersionTooHigh=PHP version too high. Version %s or lower is required. -ErrorConnectedButDatabaseNotFound=Connection to server successful but database '%s' not found. +ErrorPHPVersionTooLow=PHP verzija prestara. Potrebna je verzija %s ili novija. +ErrorPHPVersionTooHigh=PHP verzija previsoka. Potrebna je verzija %s ili niža. +ErrorConnectedButDatabaseNotFound=Veza sa serverom uspješna, ali baza podataka '%s' nije pronađena. ErrorDatabaseAlreadyExists=Database '%s' already exists. -ErrorNoMigrationFilesFoundForParameters=No migration file found for the selected versions -IfDatabaseNotExistsGoBackAndUncheckCreate=If the database does not exist, go back and check option "Create database". +ErrorNoMigrationFilesFoundForParameters=Nije pronađena datoteka za migraciju za odabrane verzije +IfDatabaseNotExistsGoBackAndUncheckCreate=Ako baza podataka ne postoji, vratite se i u opciju "Kreiraj bazu podataka". IfDatabaseExistsGoBackAndCheckCreate=If database already exists, go back and uncheck "Create database" option. -WarningBrowserTooOld=Version of browser is too old. Upgrading your browser to a recent version of Firefox, Chrome or Opera is highly recommended. +WarningBrowserTooOld=Verzija pretraživača je prestara. Toplo se preporučuje nadogradnja vašeg pretraživača na najnoviju verziju Firefoxa, Chromea ili Opera. PHPVersion=PHP Version License=Using license ConfigurationFile=Configuration file @@ -44,23 +44,22 @@ DolibarrDatabase=Dolibarr Database DatabaseType=Database type DriverType=Driver type Server=Server -ServerAddressDescription=Name or ip address for the database server. Usually 'localhost' when the database server is hosted on the same server as the web server. +ServerAddressDescription=Ime ili IP adresa za server baze podataka. Obično 'localhost' kada se server baze podataka nalazi na istom serveru kao i web server. ServerPortDescription=Database server port. Keep empty if unknown. DatabaseServer=Database server DatabaseName=Database name -DatabasePrefix=Database table prefix -DatabasePrefixDescription=Database table prefix. If empty, defaults to llx_. -AdminLogin=User account for the Dolibarr database owner. -PasswordAgain=Retype password confirmation +DatabasePrefix=Prefiks tabele baze podataka +DatabasePrefixDescription=Prefiks tabele baze podataka. Ako je prazno, podrazumevano je llx_. +AdminLogin=Korisnički nalog za vlasnika Dolibarr baze podataka. AdminPassword=Password for Dolibarr database owner. CreateDatabase=Create database -CreateUser=Create user account or grant user account permission on the Dolibarr database +CreateUser=Kreirajte korisnički račun ili dodijelite dozvolu korisničkom računu na Dolibarr bazi podataka DatabaseSuperUserAccess=Database server - Superuser access -CheckToCreateDatabase=Check the box if the database does not exist yet and so must be created.
In this case, you must also fill in the user name and password for the superuser account at the bottom of this page. -CheckToCreateUser=Check the box if:
the database user account does not yet exist and so must be created, or
if the user account exists but the database does not exist and permissions must be granted.
In this case, you must enter the user account and password and also the superuser account name and password at the bottom of this page. If this box is unchecked, database owner and password must already exist. -DatabaseRootLoginDescription=Superuser account name (to create new databases or new users), mandatory if the database or its owner does not already exist. -KeepEmptyIfNoPassword=Leave empty if superuser has no password (NOT recommended) -SaveConfigurationFile=Saving parameters to +CheckToCreateDatabase=Označite kvadratić ako baza podataka još ne postoji i pa mora biti kreirana.
U ovom slučaju, također morate popuniti korisničko ime i lozinka za nalog superkorisnika na dnu ove stranice. +CheckToCreateUser=Označite okvir ako:
korisnički račun baze podataka još ne postoji i pa mora biti kreiran, ili
ako korisnički račun postoji, ali baza podataka ne postoji i dozvole se moraju odobriti.
U ovom slučaju, morate unijeti i lozinku i također ime naloga superkorisnika i lozinku na dnu ove stranice. Ako ovo polje nije označeno, lozinka vlasnika baze podataka i već mora postojati. +DatabaseRootLoginDescription=Ime naloga superkorisnika (za kreiranje novih baza podataka ili novih korisnika), obavezno ako baza podataka ili njen vlasnik već ne postoji. +KeepEmptyIfNoPassword=Ostavite prazno ako superkorisnik nema lozinku (NE preporučuje se) +SaveConfigurationFile=Pohranjivanje parametara u ServerConnection=Server connection DatabaseCreation=Database creation CreateDatabaseObjects=Database objects creation @@ -71,9 +70,9 @@ CreateOtherKeysForTable=Create foreign keys and indexes for table %s OtherKeysCreation=Foreign keys and indexes creation FunctionsCreation=Functions creation AdminAccountCreation=Administrator login creation -PleaseTypePassword=Please type a password, empty passwords are not allowed! -PleaseTypeALogin=Please type a login! -PasswordsMismatch=Passwords differs, please try again! +PleaseTypePassword=Unesite lozinku, prazne lozinke nisu dozvoljene! +PleaseTypeALogin=Molimo unesite prijavu! +PasswordsMismatch=Lozinke se razlikuju, pokušajte ponovo! SetupEnd=End of setup SystemIsInstalled=This installation is complete. SystemIsUpgraded=Dolibarr has been upgraded successfully. @@ -81,77 +80,77 @@ YouNeedToPersonalizeSetup=You need to configure Dolibarr to suit your needs (app AdminLoginCreatedSuccessfuly=Dolibarr administrator login '%s' created successfully. GoToDolibarr=Go to Dolibarr GoToSetupArea=Go to Dolibarr (setup area) -MigrationNotFinished=The database version is not completely up to date: run the upgrade process again. +MigrationNotFinished=Verzija baze podataka nije potpuno ažurirana: ponovo pokrenite proces nadogradnje. GoToUpgradePage=Go to upgrade page again WithNoSlashAtTheEnd=Without the slash "/" at the end -DirectoryRecommendation=IMPORTANT: You must use a directory that is outside of the web pages (so do not use a subdirectory of previous parameter). +DirectoryRecommendation=VAŽNO: Morate koristiti direktorij koji je izvan web stranica (zato nemojte koristiti poddirektorij prethodnog parametra ). LoginAlreadyExists=Already exists DolibarrAdminLogin=Dolibarr admin login -AdminLoginAlreadyExists=Dolibarr administrator account '%s' already exists. Go back if you want to create another one. +AdminLoginAlreadyExists=Dolibarr administratorski račun '%s' već postoji. Vratite se ako želite da kreirate još jednu. FailedToCreateAdminLogin=Failed to create Dolibarr administrator account. -WarningRemoveInstallDir=Warning, for security reasons, once the install or upgrade is complete, you should add a file called install.lock into the Dolibarr document directory in order to prevent the accidental/malicious use of the install tools again. -FunctionNotAvailableInThisPHP=Not available in this PHP +WarningRemoveInstallDir=Upozorenje, iz sigurnosnih razloga, kada se proces instalacije završi, morate dodati datoteku pod nazivom install.lock u Dolibarr direktorij dokumenata kako bi se spriječilo ponovno slučajno/zlonamjerno korištenje instalacionih alata. +FunctionNotAvailableInThisPHP=Nije dostupno u ovom PHP-u ChoosedMigrateScript=Choose migration script -DataMigration=Database migration (data) -DatabaseMigration=Database migration (structure + some data) +DataMigration=Migracija baze podataka (podaci) +DatabaseMigration=Migracija baze podataka (struktura + neki podaci) ProcessMigrateScript=Script processing ChooseYourSetupMode=Choose your setup mode and click "Start"... FreshInstall=Fresh install -FreshInstallDesc=Use this mode if this is your first install. If not, this mode can repair a incomplete previous install. If you want to upgrade your version, choose "Upgrade" mode. +FreshInstallDesc=Koristite ovaj način ako vam je ovo prva instalacija. Ako nije, ovaj način rada može popraviti nepotpunu prethodnu instalaciju. Ako želite nadograditi svoju verziju, odaberite način "Nadogradnja". Upgrade=Upgrade UpgradeDesc=Use this mode if you have replaced old Dolibarr files with files from a newer version. This will upgrade your database and data. Start=Start InstallNotAllowed=Setup not allowed by conf.php permissions YouMustCreateWithPermission=You must create file %s and set write permissions on it for the web server during install process. -CorrectProblemAndReloadPage=Please fix the problem and press F5 to reload the page. +CorrectProblemAndReloadPage=Molimo riješite problem i pritisnite F5 da ponovo učitate stranicu. AlreadyDone=Already migrated DatabaseVersion=Database version ServerVersion=Database server version YouMustCreateItAndAllowServerToWrite=You must create this directory and allow for the web server to write into it. DBSortingCollation=Character sorting order -YouAskDatabaseCreationSoDolibarrNeedToConnect=You selected create database %s, but for this, Dolibarr needs to connect to server %s with super user %s permissions. -YouAskLoginCreationSoDolibarrNeedToConnect=You selected create database user %s, but for this, Dolibarr needs to connect to server %s with super user %s permissions. -BecauseConnectionFailedParametersMayBeWrong=The database connection failed: the host or super user parameters must be wrong. +YouAskDatabaseCreationSoDolibarrNeedToConnect=Izabrali ste kreiranje baze podataka %s, ali za to je potreban Dolibarr za povezivanje na server %s sa super korisnikom %s dozvole. +YouAskLoginCreationSoDolibarrNeedToConnect=Izabrali ste kreiranje baze podataka korisnika %s, ali za ovo, Dolibar treba se povezati na server %s sa super korisnikom %s dozvole. +BecauseConnectionFailedParametersMayBeWrong=Povezivanje baze podataka nije uspjelo: parametri hosta ili super korisnika moraju biti pogrešni. OrphelinsPaymentsDetectedByMethod=Orphans payment detected by method %s RemoveItManuallyAndPressF5ToContinue=Remove it manually and press F5 to continue. FieldRenamed=Field renamed -IfLoginDoesNotExistsCheckCreateUser=If the user does not exist yet, you must check option "Create user" -ErrorConnection=Server "%s", database name "%s", login "%s", or database password may be wrong or the PHP client version may be too old compared to the database version. +IfLoginDoesNotExistsCheckCreateUser=Ako korisnik još ne postoji, morate označiti opciju "Kreiraj korisnika" +ErrorConnection=Server "%s", naziv baze podataka "%s", login "f3z05 span>%s
", ili lozinka baze podataka može biti pogrešna ili verzija PHP klijenta može biti prestara u odnosu na verziju baze podataka . InstallChoiceRecommanded=Recommended choice to install version %s from your current version %s InstallChoiceSuggested=Install choice suggested by installer. -MigrateIsDoneStepByStep=The targeted version (%s) has a gap of several versions. The install wizard will come back to suggest a further migration once this one is complete. -CheckThatDatabasenameIsCorrect=Check that the database name "%s" is correct. +MigrateIsDoneStepByStep=Ciljana verzija (%s) ima prazninu od nekoliko verzija. Čarobnjak za instalaciju će se vratiti i predložiti daljnju migraciju kada se ova završi. +CheckThatDatabasenameIsCorrect=Provjerite je li naziv baze podataka "%s" ispravan. IfAlreadyExistsCheckOption=If this name is correct and that database does not exist yet, you must check option "Create database". OpenBaseDir=PHP openbasedir parameter -YouAskToCreateDatabaseSoRootRequired=You checked the box "Create database". For this, you need to provide the login/password of superuser (bottom of form). -YouAskToCreateDatabaseUserSoRootRequired=You checked the box "Create database owner". For this, you need to provide the login/password of superuser (bottom of form). -NextStepMightLastALongTime=The current step may take several minutes. Please wait until the next screen is shown completely before continuing. -MigrationCustomerOrderShipping=Migrate shipping for sales orders storage +YouAskToCreateDatabaseSoRootRequired=Označili ste polje "Kreiraj bazu podataka". Za ovo, potrebno je da unesete login/lozinku superkorisnika (na dnu obrasca). +YouAskToCreateDatabaseUserSoRootRequired=Označili ste polje "Kreiraj vlasnika baze podataka". Za ovo, potrebno je da unesete login/lozinku superkorisnika (na dnu obrasca). +NextStepMightLastALongTime=Trenutni korak može potrajati nekoliko minuta. Molimo pričekajte da se sljedeći ekran u potpunosti prikaže prije nego što nastavite. +MigrationCustomerOrderShipping=Migrirajte otpremu za skladištenje prodajnih naloga MigrationShippingDelivery=Upgrade storage of shipping MigrationShippingDelivery2=Upgrade storage of shipping 2 MigrationFinished=Migration finished -LastStepDesc=Last step: Define here the login and password you wish to use to connect to Dolibarr. Do not lose this as it is the master account to administer all other/additional user accounts. +LastStepDesc=Posljednji korak: Definirajte ovdje i lozinku za prijavu koristite za povezivanje na Dolibarr. Nemojte izgubiti ovo jer je to glavni račun za administraciju svih drugih/dodatnih korisničkih računa. ActivateModule=Activate module %s ShowEditTechnicalParameters=Click here to show/edit advanced parameters (expert mode) -WarningUpgrade=Warning:\nDid you run a database backup first?\nThis is highly recommended. Loss of data (due to for example bugs in mysql version 5.5.40/41/42/43) may be possible during this process, so it is essential to take a complete dump of your database before starting any migration.\n\nClick OK to start migration process... -ErrorDatabaseVersionForbiddenForMigration=Your database version is %s. It has a critical bug, making data loss possible if you make structural changes in your database, such as is required by the migration process. For his reason, migration will not be allowed until you upgrade your database to a layer (patched) version (list of known buggy versions: %s) -KeepDefaultValuesWamp=You used the Dolibarr setup wizard from DoliWamp, so values proposed here are already optimized. Change them only if you know what you are doing. -KeepDefaultValuesDeb=You used the Dolibarr setup wizard from a Linux package (Ubuntu, Debian, Fedora...), so the values proposed here are already optimized. Only the password of the database owner to create must be entered. Change other parameters only if you know what you are doing. -KeepDefaultValuesMamp=You used the Dolibarr setup wizard from DoliMamp, so the values proposed here are already optimized. Change them only if you know what you are doing. -KeepDefaultValuesProxmox=You used the Dolibarr setup wizard from a Proxmox virtual appliance, so the values proposed here are already optimized. Change them only if you know what you are doing. -UpgradeExternalModule=Run dedicated upgrade process of external module -SetAtLeastOneOptionAsUrlParameter=Set at least one option as a parameter in URL. For example: '...repair.php?standard=confirmed' +WarningUpgrade=Upozorenje:\nJeste li prvo pokrenuli sigurnosnu kopiju baze podataka?\nOvo se jako preporučuje. Gubitak podataka (zbog na primjer grešaka u mysql verziji 5.5.40/41/42/43) može biti moguć tokom ovog procesa, tako da je bitno da napravite potpuni dump vaše baze podataka prije početka bilo kakve migracije.\n\nKliknite OK da započnete proces migracije... +ErrorDatabaseVersionForbiddenForMigration=Verzija vaše baze podataka je %s. Ima kritičnu grešku koja omogućava gubitak podataka ako izvršite strukturne promjene u vašoj bazi podataka, kao što je potrebno za proces migracije. Iz njegovog razloga, migracija neće biti dozvoljena dok ne nadogradite svoju bazu podataka na verziju sloja (zakrpljenu) (lista poznatih verzija s greškama: %s) +KeepDefaultValuesWamp=Koristili ste Dolibarr čarobnjak za podešavanje iz DoliWamp-a, tako da su vrijednosti koje su ovdje predložene već optimizirane. Promijenite ih samo ako znate šta radite. +KeepDefaultValuesDeb=Koristili ste Dolibarr čarobnjak za postavljanje iz Linux paketa (Ubuntu, Debian, Fedora...), tako da su vrijednosti koje su ovdje predložene već optimizirane. Mora se unijeti samo lozinka vlasnika baze podataka koju treba kreirati. Ostale parametre mijenjajte samo ako znate šta radite. +KeepDefaultValuesMamp=Koristili ste Dolibarr čarobnjak za podešavanje iz DoliMamp-a, tako da su vrijednosti koje su ovdje predložene već optimizirane. Promijenite ih samo ako znate šta radite. +KeepDefaultValuesProxmox=Koristili ste Dolibarr čarobnjak za podešavanje sa Proxmox virtuelnog uređaja, tako da su vrednosti koje su ovde predložene već optimizovane. Promijenite ih samo ako znate šta radite. +UpgradeExternalModule=Pokrenite namjenski proces nadogradnje vanjskog modula +SetAtLeastOneOptionAsUrlParameter=Postavite barem jednu opciju kao parametar u URL-u. Na primjer: '...repair.php?standard=confirmed' NothingToDelete=Ništa za čišćenje/brisanje -NothingToDo=Nothing to do +NothingToDo=Ništa za raditi ######### # upgrade MigrationFixData=Fix for denormalized data MigrationOrder=Data migration for customer's orders -MigrationSupplierOrder=Data migration for vendor's orders +MigrationSupplierOrder=Migracija podataka za narudžbe dobavljača MigrationProposal=Data migration for commercial proposals MigrationInvoice=Data migration for customer's invoices MigrationContract=Data migration for contracts -MigrationSuccessfullUpdate=Upgrade successful +MigrationSuccessfullUpdate=Nadogradnja uspjela MigrationUpdateFailed=Failed upgrade process MigrationRelationshipTables=Data migration for relationship tables (%s) MigrationPaymentsUpdate=Payment data correction @@ -163,9 +162,9 @@ MigrationContractsUpdate=Contract data correction MigrationContractsNumberToUpdate=%s contract(s) to update MigrationContractsLineCreation=Create contract line for contract ref %s MigrationContractsNothingToUpdate=No more things to do -MigrationContractsFieldDontExist=Field fk_facture does not exist anymore. Nothing to do. +MigrationContractsFieldDontExist=Polje fk_facture više ne postoji. Ništa za raditi. MigrationContractsEmptyDatesUpdate=Contract empty date correction -MigrationContractsEmptyDatesUpdateSuccess=Contract empty date correction done successfully +MigrationContractsEmptyDatesUpdateSuccess=Ispravka datuma praznog ugovora je uspješno obavljena MigrationContractsEmptyDatesNothingToUpdate=No contract empty date to correct MigrationContractsEmptyCreationDatesNothingToUpdate=No contract creation date to correct MigrationContractsInvalidDatesUpdate=Bad value date contract correction @@ -187,29 +186,34 @@ MigrationDeliveryDetail=Delivery update MigrationStockDetail=Update stock value of products MigrationMenusDetail=Update dynamic menus tables MigrationDeliveryAddress=Update delivery address in shipments -MigrationProjectTaskActors=Data migration for table llx_projet_task_actors +MigrationProjectTaskActors=Migracija podataka za tablicu llx_projet_task_actors MigrationProjectUserResp=Data migration field fk_user_resp of llx_projet to llx_element_contact MigrationProjectTaskTime=Update time spent in seconds MigrationActioncommElement=Update data on actions -MigrationPaymentMode=Data migration for payment type +MigrationPaymentMode=Migracija podataka za vrstu plaćanja MigrationCategorieAssociation=Migration of categories -MigrationEvents=Migration of events to add event owner into assignment table -MigrationEventsContact=Migration of events to add event contact into assignment table +MigrationEvents=Migracija događaja za dodavanje vlasnika događaja u tabelu dodjele +MigrationEventsContact=Migracija događaja za dodavanje kontakta događaja u tabelu dodjele MigrationRemiseEntity=Update entity field value of llx_societe_remise MigrationRemiseExceptEntity=Update entity field value of llx_societe_remise_except -MigrationUserRightsEntity=Update entity field value of llx_user_rights -MigrationUserGroupRightsEntity=Update entity field value of llx_usergroup_rights -MigrationUserPhotoPath=Migration of photo paths for users -MigrationFieldsSocialNetworks=Migration of users fields social networks (%s) +MigrationUserRightsEntity=Ažurirajte vrijednost polja entiteta llx_user_rights +MigrationUserGroupRightsEntity=Ažurirajte vrijednost polja entiteta llx_usergroup_rights +MigrationUserPhotoPath=Migracija foto staza za korisnike +MigrationFieldsSocialNetworks=Migracija korisničkih polja društvenih mreža (%s) MigrationReloadModule=Reload module %s -MigrationResetBlockedLog=Reset module BlockedLog for v7 algorithm -MigrationImportOrExportProfiles=Migration of import or export profiles (%s) -ShowNotAvailableOptions=Show unavailable options -HideNotAvailableOptions=Hide unavailable options -ErrorFoundDuringMigration=Error(s) were reported during the migration process so next step is not available. To ignore errors, you can click here, but the application or some features may not work correctly until the errors are resolved. -YouTryInstallDisabledByDirLock=The application tried to self-upgrade, but the install/upgrade pages have been disabled for security (directory renamed with .lock suffix).
-YouTryInstallDisabledByFileLock=The application tried to self-upgrade, but the install/upgrade pages have been disabled for security (by the existence of a lock file install.lock in the dolibarr documents directory).
-ClickHereToGoToApp=Click here to go to your application -ClickOnLinkOrRemoveManualy=If an upgrade is in progress, please wait. If not, click on the following link. If you always see this same page, you must remove/rename the file install.lock in the documents directory. -Loaded=Loaded -FunctionTest=Function test +MigrationResetBlockedLog=Resetujte modul BlockedLog za algoritam v7 +MigrationImportOrExportProfiles=Migracija uvoznih ili izvoznih profila (%s) +ShowNotAvailableOptions=Prikaži nedostupne opcije +HideNotAvailableOptions=Sakrij nedostupne opcije +ErrorFoundDuringMigration=Greške su prijavljene tokom procesa migracije tako da sljedeći korak nije dostupan. Da zanemarite greške, možete kliknuti ovdje, ali aplikacija ili neke funkcije možda neće raditi ispravno dok se greške ne riješe . +YouTryInstallDisabledByDirLock=Aplikacija je pokušala samostalno nadograditi, ali stranice za instalaciju/nadogradnju su onemogućene radi sigurnosti (direktorij je preimenovan sa sufiksom .lock).
+YouTryInstallDisabledByFileLock=Aplikacija je pokušala samonadograditi, ali stranice za instalaciju/nadogradnju su onemogućene radi sigurnosti (postojanjem datoteke zaključavanja install.lock u direktoriju dolibarr dokumenata).
+YouTryUpgradeDisabledByMissingFileUnLock=Aplikacija je pokušala samostalno nadograditi, ali proces nadogradnje trenutno nije dozvoljen.
+ClickHereToGoToApp=Kliknite ovdje da odete na svoju aplikaciju +ClickOnLinkOrRemoveManualy=Ako je nadogradnja u toku, pričekajte. Ako ne, kliknite na sljedeću vezu. Ako uvijek vidite istu stranicu, morate ukloniti/preimenovati datoteku install.lock u direktoriju dokumenata. +ClickOnLinkOrCreateUnlockFileManualy=Ako je nadogradnja u toku, pričekajte... Ako nije, morate ukloniti datoteku install.lock ili kreirati datoteku upgrade.unlock u direktoriju Dolibarr dokumenata. +Loaded=Napunjeno +FunctionTest=Funkcionalni test +NodoUpgradeAfterDB=Eksterni moduli ne zahtijevaju nikakvu radnju nakon nadogradnje baze podataka +NodoUpgradeAfterFiles=Eksterni moduli ne zahtijevaju nikakvu radnju nakon nadogradnje datoteka ili direktorija +MigrationContractLineRank=Premjesti liniju ugovora da koristi rang (i omogući promjenu redoslijeda) diff --git a/htdocs/langs/bs_BA/mails.lang b/htdocs/langs/bs_BA/mails.lang index 4f76997f4fd..90a73dd167c 100644 --- a/htdocs/langs/bs_BA/mails.lang +++ b/htdocs/langs/bs_BA/mails.lang @@ -147,7 +147,7 @@ UseFormatFileEmailToTarget=Imported file must have format email;name;fir UseFormatInputEmailToTarget=Enter a string with format email;name;firstname;other MailAdvTargetRecipients=Recipients (advanced selection) AdvTgtTitle=Popunite polja za unos kako biste unaprijed odabrali treće strane ili kontakte/adrese za ciljanje -AdvTgtSearchTextHelp=Koristite %% kao zamjenske znakove. Na primjer, da pronađete sve stavke kao što je jean, joe, jim, možete unijeti j%%, također možete koristiti ; kao separator vrijednosti, i koristite ! za osim ove vrijednosti. Na primjer jean;joe;jim%%;!jimo;!jima%% span> će ciljati sve jean, joe, počni sa jim, ali ne i jimo i ne sve što počinje sa jima +AdvTgtSearchTextHelp=Use %% as wildcards. For example to find all item like jean, joe, jim, you can input j%%, you can also use ; as separator for value, and use ! for except this value. For example jean;joe;jim%%;!jimo;!jima%% will target all jean, joe, start with jim but not jimo and not everything that starts with jima AdvTgtSearchIntHelp=Use interval to select int or float value AdvTgtMinVal=Minimum value AdvTgtMaxVal=Maximum value diff --git a/htdocs/langs/bs_BA/main.lang b/htdocs/langs/bs_BA/main.lang index 0ef57b6d13a..42444e703bb 100644 --- a/htdocs/langs/bs_BA/main.lang +++ b/htdocs/langs/bs_BA/main.lang @@ -68,7 +68,7 @@ ErrorNoRequestInError=Nema greške u zahtjevu ErrorServiceUnavailableTryLater=Usluga trenutno nije dostupna. Pokušajte ponovo kasnije. ErrorDuplicateField=Duplicirana vrijednost u unikatnom polju ErrorSomeErrorWereFoundRollbackIsDone=Pronađene su neke greške. Promjene su vraćene. -ErrorConfigParameterNotDefined=Parametar %s nije definiran u conf.php. +ErrorConfigParameterNotDefined=Parameter %s is not defined in the Dolibarr config file conf.php. ErrorCantLoadUserFromDolibarrDatabase=Neuspjelo traženje korisnika %s u Dolibarr bazi podataka. ErrorNoVATRateDefinedForSellerCountry=Greška, nije definirana PDV stopa za državu '%s'. ErrorNoSocialContributionForSellerCountry=Greška, nisu definirane vrste doprinosa i poreza za državu '%s'. @@ -420,6 +420,8 @@ TotalTTCShort=Ukupno (uklj. PDV) TotalHT=Ukupno (bez poreza) TotalHTforthispage=Ukupno (bez poreza) za ovu stranicu Totalforthispage=Ukupno za ovu stranicu +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=Ukupno (uklj. PDV) TotalTTCToYourCredit=Ukupno (uklj. PDV) u vašu korist TotalVAT=Ukupan porez @@ -647,6 +649,7 @@ ReportName=Naziv izvještaja ReportPeriod=Period izvještaja ReportDescription=Opis Report=Izvještaj +Reports=Reports Keyword=Ključna riječ Origin=Porijeklo Legend=Objašnjenje diff --git a/htdocs/langs/bs_BA/modulebuilder.lang b/htdocs/langs/bs_BA/modulebuilder.lang index 6d5412f7807..81101a4f8a9 100644 --- a/htdocs/langs/bs_BA/modulebuilder.lang +++ b/htdocs/langs/bs_BA/modulebuilder.lang @@ -94,7 +94,7 @@ SeeExamples=Pogledajte primjere ovdje EnabledDesc=Uslov da ovo polje bude aktivno.

Primjeri:
1
isModEnabled('anothermodule')
getDolGlobalString('MYMODULE_OPTION')==2 VisibleDesc=Je li polje vidljivo? (Primjeri: 0=Nikad vidljivo, 1=Vidljivo na listi i kreiranje/ažuriranje/pregled obrazaca, 2=Vidljivo samo na listi, 3=Vidljivo na obrascu za kreiranje/ažuriranje/pregled samo (ne na listama), 4=Vidljivo na listama i samo ažuriranje/pregled obrasca (ne kreiranje), 5=Vidljivo na listi i samo za prikaz (ne kreirajte, ne ažurirajte).

Upotreba negativne vrijednosti znači da polje nije prikazano podrazumevano na listi, ali se može izabrati za pregled). ItCanBeAnExpression=To može biti izraz. Primjer:
preg_match('/public/', $_SERVER['PHP_SELF'])?0:1
$user ->hasRight('odmor', 'define_holiday')?1:5 -DisplayOnPdfDesc=Prikažite ovo polje na kompatibilnim PDF dokumentima, možete upravljati pozicijom pomoću polja "Pozicija".
Za dokument :
0 = nije prikazano
1 = display
2 = prikaz samo ako nije prazan

b0e7843947b0e7843947 span>Za redove dokumenta :

0 = nije prikazano
1 = prikazano u koloni
3 = prikaz u stupcu opisa reda nakon opisa
4 = prikaz u stupcu opisa nakon opisa samo ako nije prazan +DisplayOnPdfDesc=Display this field on compatible PDF documents, you can manage position with "Position" field.
For document :
0 = not displayed
1 = display
2 = display only if not empty

For document lines :
0 = not displayed
1 = displayed in a column
3 = display in line description column after the description
4 = display in description column after the description only if not empty DisplayOnPdf=Na PDF IsAMeasureDesc=Može li se vrijednost polja kumulirati da se ukupan iznos dobije na listi? (Primjeri: 1 ili 0) SearchAllDesc=Koristi li se polje za pretraživanje iz alata za brzo pretraživanje? (Primjeri: 1 ili 0) @@ -111,7 +111,7 @@ TriggerDefDesc=Definirajte u datoteci okidača kod koji želite da izvršite kad SeeIDsInUse=Pogledajte ID-ove koji se koriste u vašoj instalaciji SeeReservedIDsRangeHere=Pogledajte raspon rezerviranih ID-ova ToolkitForDevelopers=Komplet alata za Dolibarr programere -TryToUseTheModuleBuilder=Ako poznajete SQL i PHP, možete koristiti čarobnjaka za izradu izvornih modula.
Omogućite modul %s b01f6482 koristi the4 čarobnjaka klikom na u gornjem desnom meniju.
Warning : Ovo je napredna razvojna funkcija, ne eksperimentirajte na vašoj proizvodnoj lokaciji! +TryToUseTheModuleBuilder=If you have knowledge of SQL and PHP, you may use the native module builder wizard.
Enable the module %s and use the wizard by clicking the on the top right menu.
Warning: This is an advanced developer feature, do not experiment on your production site! SeeTopRightMenu=Pogledajte u gornjem desnom meniju AddLanguageFile=Dodajte jezički fajl YouCanUseTranslationKey=Ovdje možete koristiti ključ koji je ključ za prijevod koji se nalazi u jezičnoj datoteci (pogledajte karticu "Jezici") @@ -148,7 +148,7 @@ CSSListClass=CSS za listu NotEditable=Nije moguće uređivati ForeignKey=Strani ključ ForeignKeyDesc=Ako vrijednost ovog polja mora biti zajamčena da postoji u drugoj tabeli. Ovdje unesite sintaksu koja odgovara vrijednosti: ime tablice.parentfieldtocheck -TypeOfFieldsHelp=Primjer:
varchar(99)
e-pošta
telefon
ip
url
passwordb03b92fcz1 span>double(24,8)
real
text
html
date
datetime
timestampinteger
integer:ClassName:relativepath/to/classfile.class.php[:1[:filter]]fda149bzcc'1' znači da dodajemo + dugme nakon kombinacije da kreiramo zapis
'filter' je Uvjet sintakse univerzalnog filtera, primjer: '((status:=:1) i (fk_user:=:__USER_ID__) i( entitet:IN:(__SHARED_ENTITIES__))' +TypeOfFieldsHelp=Example:
varchar(99)
email
phone
ip
url
password
double(24,8)
real
text
html
date
datetime
timestamp
integer
integer:ClassName:relativepath/to/classfile.class.php[:1[:filter]]

'1' means we add a + button after the combo to create the record
'filter' is an Universal Filter syntax condition, example: '((status:=:1) AND (fk_user:=:__USER_ID__) AND (entity:IN:(__SHARED_ENTITIES__))' TypeOfFieldsHelpIntro=Ovo je tip polja/atributa. AsciiToHtmlConverter=Ascii u HTML konverter AsciiToPdfConverter=Ascii u PDF konverter @@ -180,7 +180,7 @@ FailedToAddCodeIntoDescriptor=Dodavanje koda u deskriptor nije uspjelo. Provjeri DictionariesCreated=Rječnik %s uspješno kreiran DictionaryDeleted=Rječnik %s je uspješno uklonjen PropertyModuleUpdated=Svojstvo %s je uspješno ažurirano -InfoForApiFile=* Kada generirate datoteku po prvi put, sve metode će biti kreirane za svaki objekt.
* Kada kliknete na ukloni samo uklanjate sve metode za klasu odabrani objekat. +InfoForApiFile=* When you generate file for the first time then all methods will be created for each object.
* When you click in remove you just remove all methods for the selected object. SetupFile=Stranica za podešavanje modula EmailingSelectors=Emails selectors EmailingSelectorDesc=Možete generirati i ovdje urediti datoteke klasa kako biste pružili nove birače cilja e-pošte za modul masovnog slanja e-pošte diff --git a/htdocs/langs/bs_BA/multicurrency.lang b/htdocs/langs/bs_BA/multicurrency.lang index 28bb0659cee..506ccaa61f1 100644 --- a/htdocs/langs/bs_BA/multicurrency.lang +++ b/htdocs/langs/bs_BA/multicurrency.lang @@ -7,7 +7,7 @@ multicurrency_syncronize_error=Greška pri sinhronizaciji: %s MULTICURRENCY_USE_RATE_ON_DOCUMENT_DATE=Koristite datum dokumenta da pronađete kurs valute, umesto da koristite najnoviji poznati kurs multicurrency_useOriginTx=Kada je objekt kreiran od drugog, zadržite izvornu stopu od izvornog objekta (inače koristite najnoviju poznatu stopu) CurrencyLayerAccount=CurrencyLayer API -CurrencyLayerAccount_help_to_synchronize=Morate kreirati račun na web stranici %s da biste koristili ovu funkciju.
Nabavite svoj /span>API ključ.
Ako koristite besplatni račun, ne možete promijeniti izvorna valuta (USD prema zadanim postavkama).
Ako vaša glavna valuta nije USD, aplikacija će ga automatski ponovo izračunati.

Ograničeni ste na 1000 sinhronizacija mjesečno. +CurrencyLayerAccount_help_to_synchronize=You must create an account on website %s to use this functionality.
Get your API key.
If you use a free account, you can't change the source currency (USD by default).
If your main currency is not USD, the application will automatically recalculate it.

You are limited to 1000 synchronizations per month. multicurrency_appId=API ključ multicurrency_appCurrencySource=Izvorna valuta multicurrency_alternateCurrencySource=Alternativni izvor valute diff --git a/htdocs/langs/bs_BA/other.lang b/htdocs/langs/bs_BA/other.lang index dd9a1a47906..16a4708694b 100644 --- a/htdocs/langs/bs_BA/other.lang +++ b/htdocs/langs/bs_BA/other.lang @@ -1,163 +1,165 @@ # Dolibarr language file - Source file is en_US - other -SecurityCode=Security code -NumberingShort=N° +SecurityCode=Sigurnosni kod +NumberingShort=br Tools=Tools TMenuTools=Tools -ToolsDesc=All tools not included in other menu entries are grouped here.
All the tools can be accessed via the left menu. -Birthday=Birthday -BirthdayAlertOn=birthday alert active -BirthdayAlertOff=birthday alert inactive -TransKey=Translation of the key TransKey -MonthOfInvoice=Month (number 1-12) of invoice date -TextMonthOfInvoice=Month (text) of invoice date -PreviousMonthOfInvoice=Previous month (number 1-12) of invoice date -TextPreviousMonthOfInvoice=Previous month (text) of invoice date -NextMonthOfInvoice=Following month (number 1-12) of invoice date -TextNextMonthOfInvoice=Following month (text) of invoice date -PreviousMonth=Previous month -CurrentMonth=Current month -ZipFileGeneratedInto=Zip file generated into %s. -DocFileGeneratedInto=Doc file generated into %s. -JumpToLogin=Disconnected. Go to login page... -MessageForm=Message on online payment form -MessageOK=Message on the return page for a validated payment -MessageKO=Message on the return page for a canceled payment -ContentOfDirectoryIsNotEmpty=Content of this directory is not empty. -DeleteAlsoContentRecursively=Check to delete all content recursively +ToolsDesc=Svi alati koji nisu uključeni u druge stavke menija su grupirani ovdje.
Svim alatima se može pristupiti preko lijevog menija. +Birthday=Rođendan +BirthdayAlert=Upozorenje za rođendan +BirthdayAlertOn=rođendansko upozorenje aktivno +BirthdayAlertOff=rođendansko upozorenje neaktivno +TransKey=Prevod ključa TransKey +MonthOfInvoice=Mjesec (broj 1-12) od datuma fakture +TextMonthOfInvoice=Mjesec (tekst) datuma fakture +PreviousMonthOfInvoice=Prethodni mjesec (broj 1-12) datuma fakture +TextPreviousMonthOfInvoice=Prethodni mjesec (tekst) datuma fakture +NextMonthOfInvoice=Sledeći mesec (broj 1-12) od datuma fakture +TextNextMonthOfInvoice=Sljedeći mjesec (tekst) datuma fakture +PreviousMonth=Prethodni mjesec +CurrentMonth=Tekući mjesec +ZipFileGeneratedInto=Zip datoteka generirana u %s. +DocFileGeneratedInto=Datoteka dokumenta generirana u %s. +JumpToLogin=Disconnected. Idi na stranicu za prijavu... +MessageForm=Poruka na obrascu za online plaćanje +MessageOK=Poruka na povratnoj stranici za validirano plaćanje +MessageKO=Poruka na povratnoj stranici za poništenu uplatu +ContentOfDirectoryIsNotEmpty=Sadržaj ovog imenika nije prazan. +DeleteAlsoContentRecursively=Označite da izbrišete sav sadržaj rekurzivno PoweredBy=Powered by -YearOfInvoice=Year of invoice date -PreviousYearOfInvoice=Previous year of invoice date -NextYearOfInvoice=Following year of invoice date -DateNextInvoiceBeforeGen=Date of next invoice (before generation) -DateNextInvoiceAfterGen=Date of next invoice (after generation) -GraphInBarsAreLimitedToNMeasures=Grapics are limited to %s measures in 'Bars' mode. The mode 'Lines' was automatically selected instead. -OnlyOneFieldForXAxisIsPossible=Only 1 field is currently possible as X-Axis. Only the first selected field has been selected. -AtLeastOneMeasureIsRequired=At least 1 field for measure is required -AtLeastOneXAxisIsRequired=At least 1 field for X-Axis is required -LatestBlogPosts=Latest Blog Posts -notiftouser=To users -notiftofixedemail=To fixed mail -notiftouserandtofixedemail=To user and fixed mail -Notify_ORDER_VALIDATE=Sales order validated -Notify_ORDER_SENTBYMAIL=Sales order sent by mail -Notify_ORDER_SUPPLIER_SENTBYMAIL=Purchase order sent by email -Notify_ORDER_SUPPLIER_VALIDATE=Purchase order recorded -Notify_ORDER_SUPPLIER_APPROVE=Purchase order approved -Notify_ORDER_SUPPLIER_REFUSE=Purchase order refused -Notify_PROPAL_VALIDATE=Customer proposal validated -Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed -Notify_PROPAL_CLOSE_SIGNED_WEB=Customer proposal closed signed on portal page -Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused -Notify_PROPAL_CLOSE_REFUSED_WEB=Customer proposal closed refused on portal page -Notify_PROPAL_SENTBYMAIL=Commercial proposal sent by mail -Notify_WITHDRAW_TRANSMIT=Transmission withdrawal -Notify_WITHDRAW_CREDIT=Credit withdrawal -Notify_WITHDRAW_EMIT=Perform withdrawal +YearOfInvoice=Godina datuma fakture +PreviousYearOfInvoice=Prethodna godina datuma fakture +NextYearOfInvoice=Naredna godina datuma fakture +DateNextInvoiceBeforeGen=Datum sljedeće fakture (prije generiranja) +DateNextInvoiceAfterGen=Datum sljedeće fakture (nakon generiranja) +GraphInBarsAreLimitedToNMeasures=Grafika je ograničena na %s mjere u 'Bars' modu. Umjesto toga, automatski je odabran mod 'Linije'. +OnlyOneFieldForXAxisIsPossible=Samo 1 polje je trenutno moguće kao X-osa. Odabrano je samo prvo odabrano polje. +AtLeastOneMeasureIsRequired=Potrebno je najmanje 1 polje za mjeru +AtLeastOneXAxisIsRequired=Potrebno je najmanje 1 polje za X-os +LatestBlogPosts=Najnoviji postovi na blogu +notiftouser=Za korisnike +notiftofixedemail=Na fiksnu poštu +notiftouserandtofixedemail=Za korisnika i fiksna pošta +Notify_ORDER_VALIDATE=Prodajni nalog potvrđen +Notify_ORDER_SENTBYMAIL=Prodajni nalog poslat poštom +Notify_ORDER_CLOSE=Prodajni nalog isporučen +Notify_ORDER_SUPPLIER_SENTBYMAIL=Narudžbenica poslana e-poštom +Notify_ORDER_SUPPLIER_VALIDATE=Narudžbenica je snimljena +Notify_ORDER_SUPPLIER_APPROVE=Narudžbenica odobrena +Notify_ORDER_SUPPLIER_SUBMIT=Narudžbenica dostavljena +Notify_ORDER_SUPPLIER_REFUSE=Narudžbenica odbijena +Notify_PROPAL_VALIDATE=Potvrđen prijedlog kupca +Notify_PROPAL_CLOSE_SIGNED=Prijedlog klijenta zatvoren potpisan +Notify_PROPAL_CLOSE_REFUSED=Prijedlog korisnika zatvoren je odbijen +Notify_PROPAL_SENTBYMAIL=Komercijalni prijedlog poslat poštom +Notify_WITHDRAW_TRANSMIT=Povlačenje prijenosa +Notify_WITHDRAW_CREDIT=Povlačenje kredita +Notify_WITHDRAW_EMIT=Izvršite povlačenje Notify_COMPANY_CREATE=Treća stranka kreirana -Notify_COMPANY_SENTBYMAIL=Mails sent from third party card -Notify_BILL_VALIDATE=Customer invoice validated -Notify_BILL_UNVALIDATE=Customer invoice unvalidated -Notify_BILL_PAYED=Customer invoice paid -Notify_BILL_CANCEL=Customer invoice canceled -Notify_BILL_SENTBYMAIL=Customer invoice sent by mail -Notify_BILL_SUPPLIER_VALIDATE=Vendor invoice validated -Notify_BILL_SUPPLIER_PAYED=Vendor invoice paid -Notify_BILL_SUPPLIER_SENTBYMAIL=Vendor invoice sent by mail -Notify_BILL_SUPPLIER_CANCELED=Vendor invoice cancelled -Notify_CONTRACT_VALIDATE=Contract validated -Notify_FICHINTER_VALIDATE=Intervention validated -Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention -Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail -Notify_SHIPPING_VALIDATE=Shipping validated -Notify_SHIPPING_SENTBYMAIL=Shipping sent by mail -Notify_MEMBER_VALIDATE=Member validated -Notify_MEMBER_MODIFY=Member modified -Notify_MEMBER_SUBSCRIPTION=Member subscribed -Notify_MEMBER_RESILIATE=Member terminated -Notify_MEMBER_DELETE=Member deleted -Notify_PROJECT_CREATE=Project creation -Notify_TASK_CREATE=Task created -Notify_TASK_MODIFY=Task modified -Notify_TASK_DELETE=Task deleted -Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required) -Notify_EXPENSE_REPORT_APPROVE=Expense report approved -Notify_HOLIDAY_VALIDATE=Leave request validated (approval required) -Notify_HOLIDAY_APPROVE=Leave request approved -Notify_ACTION_CREATE=Added action to Agenda -SeeModuleSetup=See setup of module %s -NbOfAttachedFiles=Number of attached files/documents -TotalSizeOfAttachedFiles=Total size of attached files/documents -MaxSize=Maximum size -AttachANewFile=Attach a new file/document -LinkedObject=Linked object -NbOfActiveNotifications=Number of notifications (no. of recipient emails) -PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe lines are separated by a carriage return.\n\n__USER_SIGNATURE__ +Notify_COMPANY_SENTBYMAIL=Pošta poslana sa stranice treće strane +Notify_BILL_VALIDATE=Validirana faktura kupca +Notify_BILL_UNVALIDATE=Faktura kupca nije validirana +Notify_BILL_PAYED=Plaćena faktura kupca +Notify_BILL_CANCEL=Račun kupca je poništen +Notify_BILL_SENTBYMAIL=Račun kupcu poslat poštom +Notify_BILL_SUPPLIER_VALIDATE=Provjerena faktura dobavljača +Notify_BILL_SUPPLIER_PAYED=Plaćena faktura dobavljača +Notify_BILL_SUPPLIER_SENTBYMAIL=Račun dobavljača poslat poštom +Notify_BILL_SUPPLIER_CANCELED=Faktura dobavljača je poništena +Notify_CONTRACT_VALIDATE=Ugovor validiran +Notify_FICHINTER_VALIDATE=Intervencija potvrđena +Notify_FICHINTER_CLOSE=Intervencija zatvorena +Notify_FICHINTER_ADD_CONTACT=Dodan kontakt u Intervenciju +Notify_FICHINTER_SENTBYMAIL=Intervencija poslata poštom +Notify_SHIPPING_VALIDATE=Dostava validirana +Notify_SHIPPING_SENTBYMAIL=Dostava poslana poštom +Notify_MEMBER_VALIDATE=Član potvrđen +Notify_MEMBER_MODIFY=Član izmijenjen +Notify_MEMBER_SUBSCRIPTION=Član je pretplaćen +Notify_MEMBER_RESILIATE=Član prekinut +Notify_MEMBER_DELETE=Član je izbrisan +Notify_PROJECT_CREATE=Kreiranje projekta +Notify_TASK_CREATE=Zadatak kreiran +Notify_TASK_MODIFY=Zadatak izmijenjen +Notify_TASK_DELETE=Zadatak je izbrisan +Notify_EXPENSE_REPORT_VALIDATE=Potvrđen izvještaj o troškovima (potrebno je odobrenje) +Notify_EXPENSE_REPORT_APPROVE=Izvještaj o troškovima odobren +Notify_HOLIDAY_VALIDATE=Ostavite zahtjev potvrđenim (potrebno je odobrenje) +Notify_HOLIDAY_APPROVE=Ostavite zahtjev odobren +Notify_ACTION_CREATE=Dodata akcija dnevnom redu +SeeModuleSetup=Pogledajte postavljanje modula %s +NbOfAttachedFiles=Broj priloženih fajlova/dokumenata +TotalSizeOfAttachedFiles=Ukupna veličina priloženih datoteka/dokumenata +MaxSize=Maksimalna veličina +AttachANewFile=Priložite novi fajl/dokument +LinkedObject=Povezani objekt +NbOfActiveNotifications=Broj obavještenja (br. mejlova primaoca) +PredefinedMailTest=__(Zdravo)__\nOvo je probna poruka poslana na __EMAIL__.\nLinije su razdvojene povratnom linijom.\n\n__USER_SIGNATURE__ PredefinedMailTestHtml=__(Hello)__
This is a test mail sent to __EMAIL__ (the word test must be in bold).
The lines are separated by a carriage return.

__USER_SIGNATURE__ -PredefinedMailContentContract=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find invoice __REF__ attached \n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to remind you that the invoice __REF__ seems to have not been paid. A copy of the invoice is attached as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find commercial proposal __REF__ attached \n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find price request __REF__ attached\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find order __REF__ attached\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find our order __REF__ attached\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find invoice __REF__ attached\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find shipping __REF__ attached\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find intervention __REF__ attached\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n -PredefinedMailContentGeneric=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendActionComm=Event reminder "__EVENT_LABEL__" on __EVENT_DATE__ at __EVENT_TIME__

This is an automatic message, please do not reply. -DemoDesc=Dolibarr is a compact ERP/CRM supporting several business modules. A demo showcasing all modules makes no sense as this scenario never occurs (several hundred available). So, several demo profiles are available. -ChooseYourDemoProfil=Choose the demo profile that best suits your needs... -ChooseYourDemoProfilMore=...or build your own profile
(manual module selection) -DemoFundation=Manage members of a foundation -DemoFundation2=Manage members and bank account of a foundation -DemoCompanyServiceOnly=Company or freelance selling service only -DemoCompanyShopWithCashDesk=Manage a shop with a cash box -DemoCompanyProductAndStocks=Shop selling products with Point Of Sales -DemoCompanyManufacturing=Company manufacturing products -DemoCompanyAll=Company with multiple activities (all main modules) -CreatedBy=Created by %s -ModifiedBy=Modified by %s -ValidatedBy=Validated by %s -SignedBy=Signed by %s -ClosedBy=Closed by %s -CreatedById=User id who created -ModifiedById=User id who made latest change -ValidatedById=User id who validated -CanceledById=User id who canceled -ClosedById=User id who closed -CreatedByLogin=User login who created -ModifiedByLogin=User login who made latest change -ValidatedByLogin=User login who validated -CanceledByLogin=User login who canceled -ClosedByLogin=User login who closed -FileWasRemoved=File %s was removed -DirWasRemoved=Directory %s was removed -FeatureNotYetAvailable=Feature not yet available in the current version -FeatureNotAvailableOnDevicesWithoutMouse=Feature not available on devices without mouse -FeaturesSupported=Supported features -Width=Width -Height=Height -Depth=Depth +PredefinedMailContentContract=__(Zdravo)__\n\n\n__(S poštovanjem)__\n\n__USER_SIGNATURE__ +PredefinedMailContentSendInvoice=__(Zdravo)__\n\nU prilogu možete pronaći fakturu __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(S poštovanjem)__\n\n__USER_SIGNATURE__ +PredefinedMailContentSendInvoiceReminder=__(Zdravo)__\n\nPodsjećamo, čini se da faktura __REF__ nije plaćena. Kopija računa je priložena kao podsjetnik.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(S poštovanjem)__\n\n__USER_SIGNATURE__ +PredefinedMailContentSendProposal=__(Zdravo)__\n\nU prilogu možete pronaći komercijalni prijedlog __REF__\n\n\n__(S poštovanjem)__\n\n__USER_SIGNATURE__ +PredefinedMailContentSendSupplierProposal=__(Zdravo)__\n\nU prilogu potražite zahtjev za cijenu __REF__\n\n\n__(S poštovanjem)__\n\n__USER_SIGNATURE__ +PredefinedMailContentSendOrder=__(Zdravo)__\n\nU prilogu možete pronaći narudžbu __REF__\n\n\n__(S poštovanjem)__\n\n__USER_SIGNATURE__ +PredefinedMailContentSendSupplierOrder=__(Zdravo)__\n\nU prilogu možete pronaći našu narudžbu __REF__\n\n\n__(S poštovanjem)__\n\n__USER_SIGNATURE__ +PredefinedMailContentSendSupplierInvoice=__(Zdravo)__\n\nU prilogu možete pronaći fakturu __REF__\n\n\n__(S poštovanjem)__\n\n__USER_SIGNATURE__ +PredefinedMailContentSendShipping=__(Zdravo)__\n\nPriložena je isporuka __REF__\n\n\n__(S poštovanjem)__\n\n__USER_SIGNATURE__ +PredefinedMailContentSendFichInter=__(Zdravo)__\n\nU prilogu potražite intervenciju __REF__\n\n\n__(S poštovanjem)__\n\n__USER_SIGNATURE__ +PredefinedMailContentLink=Možete kliknuti na link ispod da izvršite uplatu ako to već nije obavljeno.\n\n%s\n\n +PredefinedMailContentGeneric=__(Zdravo)__\n\n\n__(S poštovanjem)__\n\n__USER_SIGNATURE__ +PredefinedMailContentSendActionComm=Podsjetnik na događaj "__EVENT_LABEL__" __EVENT_DATE__ u __EVENT_TIME__

Ovo nije automatska poruka, molimo vas da +DemoDesc=Dolibarr je kompaktni ERP/CRM koji podržava nekoliko poslovnih modula. Demo koji prikazuje sve module nema smisla jer se ovaj scenario nikada ne dešava (dostupno je nekoliko stotina). Dakle, dostupno je nekoliko demo profila. +ChooseYourDemoProfil=Odaberite demo profil koji najbolje odgovara vašim potrebama... +ChooseYourDemoProfilMore=...ili napravite vlastiti profil
(ručni odabir modula) +DemoFundation=Upravljajte članovima fondacije +DemoFundation2=Upravljajte članovima i bankovnim računom fondacije +DemoCompanyServiceOnly=Samo kompanija ili samostalna prodajna usluga +DemoCompanyShopWithCashDesk=Upravljajte trgovinom s kasom +DemoCompanyProductAndStocks=Kupujte u prodaji proizvoda na prodajnom mjestu +DemoCompanyManufacturing=Kompanija koja proizvodi proizvode +DemoCompanyAll=Kompanija sa više delatnosti (svi glavni moduli) +CreatedBy=Kreirao %s +ModifiedBy=Izmijenio %s +ValidatedBy=Potvrdio %s +SignedBy=Potpisao %s +ClosedBy=Zatvorio %s +CreatedById=ID korisnika koji je kreirao +ModifiedById=Korisnički ID koji je izvršio posljednju promjenu +ValidatedById=Korisnički ID koji je potvrdio +CanceledById=ID korisnika koji je otkazao +ClosedById=Korisnički ID koji je zatvoren +CreatedByLogin=Prijava korisnika koji je kreirao +ModifiedByLogin=Prijava korisnika koji je napravio posljednju promjenu +ValidatedByLogin=Prijava korisnika koji je potvrdio +CanceledByLogin=Prijava korisnika koji je otkazao +ClosedByLogin=Prijava korisnika koji je zatvorio +FileWasRemoved=Fajl %s je uklonjen +DirWasRemoved=Direktorij %s je uklonjen +FeatureNotYetAvailable=Funkcija još nije dostupna u trenutnoj verziji +FeatureNotAvailableOnDevicesWithoutMouse=Funkcija nije dostupna na uređajima bez miša +FeaturesSupported=Podržane funkcije +Width=Širina +Height=Visina +Depth=Dubina Top=Top -Bottom=Bottom -Left=Left -Right=Right -CalculatedWeight=Calculated weight -CalculatedVolume=Calculated volume -Weight=Weight -WeightUnitton=ton +Bottom=Dno +Left=lijevo +Right=U redu +CalculatedWeight=Izračunata težina +CalculatedVolume=Izračunata zapremina +Weight=Težina +WeightUnitton=tona WeightUnitkg=kg WeightUnitg=g WeightUnitmg=mg -WeightUnitpound=pound -WeightUnitounce=ounce -Length=Length +WeightUnitpound=funta +WeightUnitounce=unca +Length=Dužina LengthUnitm=m LengthUnitdm=dm LengthUnitcm=cm LengthUnitmm=mm -Surface=Area +Surface=Područje SurfaceUnitm2=m² SurfaceUnitdm2=dm² SurfaceUnitcm2=cm² @@ -171,169 +173,168 @@ VolumeUnitcm3=cm³ (ml) VolumeUnitmm3=mm³ (µl) VolumeUnitfoot3=ft³ VolumeUnitinch3=in³ -VolumeUnitounce=ounce -VolumeUnitlitre=litre -VolumeUnitgallon=gallon +VolumeUnitounce=unca +VolumeUnitlitre=litar +VolumeUnitgallon=galon SizeUnitm=m SizeUnitdm=dm SizeUnitcm=cm SizeUnitmm=mm SizeUnitinch=inch -SizeUnitfoot=foot -SizeUnitpoint=point -BugTracker=Bug tracker -SendNewPasswordDesc=This form allows you to request a new password. It will be sent to your email address.
Change will become effective once you click on the confirmation link in the email.
Check your inbox. -EnterNewPasswordHere=Enter your new password here -BackToLoginPage=Back to login page -AuthenticationDoesNotAllowSendNewPassword=Authentication mode is %s.
In this mode, Dolibarr can't know nor change your password.
Contact your system administrator if you want to change your password. -EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use this option. +SizeUnitfoot=stopalo +SizeUnitpoint=tačka +BugTracker=Praćenje grešaka +SendNewPasswordDesc=Ovaj obrazac vam omogućava da zatražite novu lozinku. Bit će poslana na vašu adresu e-pošte.
Promjena će stupiti na snagu kada kliknete na vezu za potvrdu u e-poruci.
Provjerite inbox. +EnterNewPasswordHere=Unesite svoju novu lozinku ovdje +BackToLoginPage=Povratak na stranicu za prijavu +AuthenticationDoesNotAllowSendNewPassword=Način provjere autentičnosti je %s.
U ovom načinu rada, Dolibarr ne može znati niti promijeniti vašu lozinku.
Kontaktirajte administratora vašeg sistema ako želite promijeniti lozinku. +EnableGDLibraryDesc=Instalirajte ili omogućite GD biblioteku na vašoj PHP instalaciji da biste koristili ovu opciju. ProfIdShortDesc=Prof Id %s is an information depending on third party country.
For example, for country %s, it's code %s. DolibarrDemo=Dolibarr ERP/CRM demo -StatsByNumberOfUnits=Statistics for sum of qty of products/services -StatsByNumberOfEntities=Statistics for number of referring entities (no. of invoices, or orders...) -NumberOfProposals=Number of proposals -NumberOfCustomerOrders=Number of sales orders -NumberOfCustomerInvoices=Number of customer invoices -NumberOfSupplierProposals=Number of vendor proposals -NumberOfSupplierOrders=Number of purchase orders -NumberOfSupplierInvoices=Number of vendor invoices -NumberOfContracts=Number of contracts -NumberOfMos=Number of manufacturing orders -NumberOfUnitsProposals=Number of units on proposals -NumberOfUnitsCustomerOrders=Number of units on sales orders -NumberOfUnitsCustomerInvoices=Number of units on customer invoices -NumberOfUnitsSupplierProposals=Number of units on vendor proposals -NumberOfUnitsSupplierOrders=Number of units on purchase orders -NumberOfUnitsSupplierInvoices=Number of units on vendor invoices -NumberOfUnitsContracts=Number of units on contracts -NumberOfUnitsMos=Number of units to produce in manufacturing orders -EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. -EMailTextInterventionValidated=The intervention %s has been validated. -EMailTextInvoiceValidated=Invoice %s has been validated. -EMailTextInvoicePayed=Invoice %s has been paid. -EMailTextProposalValidated=Proposal %s has been validated. -EMailTextProposalClosedSigned=Proposal %s has been closed signed. -EMailTextProposalClosedSignedWeb=Proposal %s has been closed signed on portal page. -EMailTextProposalClosedRefused=Proposal %s has been closed refused. -EMailTextProposalClosedRefusedWeb=Proposal %s has been closed refuse on portal page. -EMailTextOrderValidated=Order %s has been validated. -EMailTextOrderApproved=Order %s has been approved. -EMailTextOrderValidatedBy=Order %s has been recorded by %s. -EMailTextOrderApprovedBy=Order %s has been approved by %s. -EMailTextOrderRefused=Order %s has been refused. -EMailTextOrderRefusedBy=Order %s has been refused by %s. -EMailTextExpeditionValidated=Shipping %s has been validated. -EMailTextExpenseReportValidated=Expense report %s has been validated. -EMailTextExpenseReportApproved=Expense report %s has been approved. -EMailTextHolidayValidated=Leave request %s has been validated. -EMailTextHolidayApproved=Leave request %s has been approved. -EMailTextActionAdded=The action %s has been added to the Agenda. -ImportedWithSet=Importation data set -DolibarrNotification=Automatic notification -ResizeDesc=Enter new width OR new height. Ratio will be kept during resizing... -NewLength=New width -NewHeight=New height -NewSizeAfterCropping=New size after cropping -DefineNewAreaToPick=Define new area on image to pick (left click on image then drag until you reach the opposite corner) -CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image -ImageEditor=Image editor -YouReceiveMailBecauseOfNotification=You receive this message because your email has been added to list of targets to be informed of particular events into %s software of %s. -YouReceiveMailBecauseOfNotification2=This event is the following: -ThisIsListOfModules=This is a list of modules preselected by this demo profile (only most common modules are visible in this demo). Edit this to have a more personalized demo and click on "Start". -UseAdvancedPerms=Use the advanced permissions of some modules -FileFormat=File format -SelectAColor=Choose a color -AddFiles=Add Files +StatsByAmount=Statistika količine proizvoda/usluga +StatsByAmountProducts=Statistika količine proizvoda +StatsByAmountServices=Statistika o količini usluga +StatsByNumberOfUnits=Statistika za zbir količine proizvoda/usluga +StatsByNumberOfUnitsProducts=Statistika za sumu količine proizvoda +StatsByNumberOfUnitsServices=Statistika za zbir količine usluga +StatsByNumberOfEntities=Statistika za broj referentnih subjekata (br. faktura, odnosno narudžbi...) +NumberOf=Broj %s +NumberOfUnits=Broj jedinica na %s +AmountIn=Iznos u %s +NumberOfUnitsMos=Broj jedinica za proizvodnju u proizvodnim narudžbama +EMailTextInterventionAddedContact=Nova intervencija %s vam je dodijeljena. +EMailTextInterventionValidated=Intervencija %s je potvrđena. +EMailTextInterventionClosed=Intervencija %s je zatvorena. +EMailTextInvoiceValidated=Faktura %s je potvrđena. +EMailTextInvoicePayed=Faktura %s je plaćena. +EMailTextProposalValidated=Prijedlog %s je potvrđen. +EMailTextProposalClosedSigned=Prijedlog %s je zatvoren i potpisan. +EMailTextProposalClosedSignedWeb=Prijedlog %s je zatvoren potpisan na stranici portala. +EMailTextProposalClosedRefused=Odbijen je prijedlog %s. +EMailTextProposalClosedRefusedWeb=Prijedlog %s je zatvoren i odbija se na stranici portala. +EMailTextOrderValidated=Narudžba %s je potvrđena. +EMailTextOrderClose=Narudžba %s je isporučena. +EMailTextSupplierOrderApprovedBy=Narudžbenicu %s odobrio je %s. +EMailTextSupplierOrderValidatedBy=Narudžbenicu %s snimio je %s. +EMailTextSupplierOrderSubmittedBy=Narudžbenicu %s je poslao %s. +EMailTextSupplierOrderRefusedBy=Narudžbenicu %s je odbio %s. +EMailTextExpeditionValidated=Dostava %s je potvrđena. +EMailTextExpenseReportValidated=Izvještaj o troškovima %s je potvrđen. +EMailTextExpenseReportApproved=Izvještaj o troškovima %s je odobren. +EMailTextHolidayValidated=Zahtjev za napuštanje %s je potvrđen. +EMailTextHolidayApproved=Zahtjev za napuštanje %s je odobren. +EMailTextActionAdded=Akcija %s je dodana na dnevni red. +ImportedWithSet=Skup podataka za uvoz +DolibarrNotification=Automatsko obavještenje +ResizeDesc=Unesite novu širinu ILI novu visinu. Omjer će se zadržati tokom promjene veličine... +NewLength=Nova širina +NewHeight=Nova visina +NewSizeAfterCropping=Nova veličina nakon obrezivanja +DefineNewAreaToPick=Definirajte novo područje na slici za odabir (lijevim klikom na sliku pa povucite dok ne dođete do suprotnog ugla) +CurrentInformationOnImage=Ovaj alat je dizajniran da vam pomogne da promijenite veličinu ili izrežete sliku. Ovo su informacije o trenutno uređenoj slici +ImageEditor=Editor slika +YouReceiveMailBecauseOfNotification=Ovu poruku ste primili jer je vaša e-pošta dodana na listu ciljeva za obavještavanje o određenim događajima u %s softveru %s. +YouReceiveMailBecauseOfNotification2=Ovaj događaj je sljedeći: +ThisIsListOfModules=Ovo je lista modula unapred odabranih ovim demo profilom (samo najčešći moduli su vidljivi u ovoj demonstraciji). Uredite ovo da biste imali personaliziraniji demo i kliknite na "Start". +UseAdvancedPerms=Koristite napredne dozvole nekih modula +FileFormat=Format datoteke +SelectAColor=Odaberite boju +AddFiles=Dodaj fajlove StartUpload=Start upload -CancelUpload=Cancel upload -FileIsTooBig=Files is too big -PleaseBePatient=Please be patient... -NewPassword=New password -ResetPassword=Reset password -RequestToResetPasswordReceived=A request to change your password has been received. -NewKeyIs=This is your new keys to login -NewKeyWillBe=Your new key to login to software will be -ClickHereToGoTo=Click here to go to %s -YouMustClickToChange=You must however first click on the following link to validate this password change -ConfirmPasswordChange=Confirm password change -ForgetIfNothing=If you didn't request this change, just forget this email. Your credentials are kept safe. -IfAmountHigherThan=If amount higher than %s -SourcesRepository=Repository for sources -Chart=Chart -PassEncoding=Password encoding -PermissionsAdd=Permissions added -PermissionsDelete=Permissions removed -YourPasswordMustHaveAtLeastXChars=Your password must have at least %s chars -PasswordNeedAtLeastXUpperCaseChars=The password need at least %s upper case chars -PasswordNeedAtLeastXDigitChars=The password need at least %s numeric chars -PasswordNeedAtLeastXSpecialChars=The password need at least %s special chars -PasswordNeedNoXConsecutiveChars=The password must not have %s consecutive similar chars -YourPasswordHasBeenReset=Your password has been reset successfully -ApplicantIpAddress=IP address of applicant -SMSSentTo=SMS sent to %s -MissingIds=Missing ids -ThirdPartyCreatedByEmailCollector=Third party created by email collector from email MSGID %s -ContactCreatedByEmailCollector=Contact/address created by email collector from email MSGID %s -ProjectCreatedByEmailCollector=Project created by email collector from email MSGID %s -TicketCreatedByEmailCollector=Ticket created by email collector from email MSGID %s -OpeningHoursFormatDesc=Use a - to separate opening and closing hours.
Use a space to enter different ranges.
Example: 8-12 14-18 -SuffixSessionName=Suffix for session name -LoginWith=Login with %s +CancelUpload=Otkaži otpremanje +FileIsTooBig=Fajlovi su preveliki +PleaseBePatient=Molimo budite strpljivi... +NewPassword=Nova šifra +ResetPassword=Reset lozinke +RequestToResetPasswordReceived=Primljen je zahtjev za promjenu vaše lozinke. +NewKeyIs=Ovo su vaši novi ključevi za prijavu +NewKeyWillBe=Vaš novi ključ za prijavu na softver će biti +ClickHereToGoTo=Kliknite ovdje da odete na %s +YouMustClickToChange=Međutim, prvo morate kliknuti na sljedeću vezu da potvrdite ovu promjenu lozinke +ConfirmPasswordChange=Potvrdite promjenu lozinke +ForgetIfNothing=Ako niste zatražili ovu promjenu, zaboravite ovu e-poštu. Vaši akreditivi se čuvaju. +IfAmountHigherThan=Ako je iznos veći od %s +SourcesRepository=Repozitorijum za izvore +Chart=Grafikon +PassEncoding=Šifriranje lozinke +PermissionsAdd=Dozvole su dodane +PermissionsDelete=Dozvole su uklonjene +YourPasswordMustHaveAtLeastXChars=Vaša lozinka mora imati najmanje %s znakova +PasswordNeedAtLeastXUpperCaseChars=Za lozinku je potrebno najmanje %s velika slova +PasswordNeedAtLeastXDigitChars=Za lozinku je potrebno najmanje %s numeričke znakove +PasswordNeedAtLeastXSpecialChars=Lozinka treba najmanje %s posebne znakove +PasswordNeedNoXConsecutiveChars=Lozinka ne smije imati %s uzastopne slične znakove +YourPasswordHasBeenReset=Vaša lozinka je uspješno resetirana +ApplicantIpAddress=IP adresa podnosioca zahteva +SMSSentTo=SMS poslan na %s +MissingIds=Nedostaju id +ThirdPartyCreatedByEmailCollector=Treća strana kreirana od strane sakupljača e-pošte iz e-pošte MSGID %s +ContactCreatedByEmailCollector=Kontakt/adresa kreirana od strane sakupljača e-pošte iz e-pošte MSGID %s +ProjectCreatedByEmailCollector=Projekat kreiran od strane sakupljača e-pošte iz e-pošte MSGID %s +TicketCreatedByEmailCollector=Ulaznicu kreirao sakupljač e-pošte iz e-pošte MSGID %s +OpeningHoursFormatDesc=Koristite - da odvojite radno vrijeme i.
Koristite razmak za unos različitih raspona.
Primjer: 8-12 14-18 +SuffixSessionName=Sufiks za naziv sesije +LoginWith=Prijavite se sa %s ##### Export ##### ExportsArea=Exports area AvailableFormats=Available formats -LibraryUsed=Library used -LibraryVersion=Library version -ExportableDatas=Exportable data -NoExportableData=No exportable data (no modules with exportable data loaded, or missing permissions) +LibraryUsed=Biblioteka korištena +LibraryVersion=Bibliotečka verzija +ExportableDatas=Podaci za izvoz +NoExportableData=Nema podataka za izvoz (nema modula sa učitanim podacima za izvoz ili nedostaju dozvole) ##### External sites ##### -WebsiteSetup=Setup of module website -WEBSITE_PAGEURL=URL of page +WebsiteSetup=Postavljanje web stranice modula +WEBSITE_PAGEURL=URL stranice WEBSITE_TITLE=Titula WEBSITE_DESCRIPTION=Opis -WEBSITE_IMAGE=Image -WEBSITE_IMAGEDesc=Relative path of the image media. You can keep this empty as this is rarely used (it can be used by dynamic content to show a thumbnail in a list of blog posts). Use __WEBSITE_KEY__ in the path if path depends on website name (for example: image/__WEBSITE_KEY__/stories/myimage.png). -WEBSITE_KEYWORDS=Keywords +WEBSITE_IMAGE=Slika +WEBSITE_IMAGEDesc=Relativni put medija slike. Ovo možete ostaviti praznim jer se rijetko koristi (može ga koristiti dinamički sadržaj za prikaz sličice na listi blog postova). Koristite __WEBSITE_KEY__ u putanji ako putanja zavisi od naziva web stranice (na primjer: image/__WEBSITE_KEY__/stories/myimage.png). +WEBSITE_KEYWORDS=Ključne riječi LinesToImport=Linija za uvoz -MemoryUsage=Memory usage -RequestDuration=Duration of request -ProductsPerPopularity=Products/Services by popularity -PopuProp=Products/Services by popularity in Proposals -PopuCom=Products/Services by popularity in Orders -ProductStatistics=Products/Services Statistics -NbOfQtyInOrders=Qty in orders -SelectTheTypeOfObjectToAnalyze=Select an object to view its statistics... +MemoryUsage=Upotreba memorije +RequestDuration=Trajanje zahtjeva +ProductsServicesPerPopularity=Proizvodi|Usluge prema popularnosti +ProductsPerPopularity=Proizvodi po popularnosti +ServicesPerPopularity=Usluge po popularnosti +PopuProp=Proizvodi|Usluge prema popularnosti u Predlozima +PopuCom=Proizvodi|Usluge prema popularnosti u Narudžbama +ProductStatistics=Proizvodi|Usluge Statistika +NbOfQtyInOrders=Količina u narudžbama +SelectTheTypeOfObjectToAnalyze=Odaberite objekat da vidite njegovu statistiku... -ConfirmBtnCommonContent = Are you sure you want to "%s" ? -ConfirmBtnCommonTitle = Confirm your action +ConfirmBtnCommonContent = Jeste li sigurni da želite "%s" ? +ConfirmBtnCommonTitle = Potvrdite svoju akciju CloseDialog = Close Autofill = Autofill +OrPasteAnURL=ili Zalijepite URL # externalsite ExternalSiteSetup=Podesi link za eksterni web sajt -ExternalSiteURL=External Site URL of HTML iframe content +ExternalSiteURL=URL vanjske web lokacije HTML iframe sadržaja ExternalSiteModuleNotComplete=Modul ExternalSite nije konfigurisan kako treba. ExampleMyMenuEntry=My menu entry # ftp -FTPClientSetup=FTP or SFTP Client module setup -NewFTPClient=New FTP/SFTP connection setup -FTPArea=FTP/SFTP Area -FTPAreaDesc=This screen shows a view of an FTP et SFTP server. -SetupOfFTPClientModuleNotComplete=The setup of the FTP or SFTP client module seems to be incomplete -FTPFeatureNotSupportedByYourPHP=Your PHP does not support FTP or SFTP functions -FailedToConnectToFTPServer=Failed to connect to server (server %s, port %s) -FailedToConnectToFTPServerWithCredentials=Failed to login to server with defined login/password +FTPClientSetup=Podešavanje modula FTP ili SFTP klijenta +NewFTPClient=Novo podešavanje FTP/SFTP veze +FTPArea=FTP/SFTP područje +FTPAreaDesc=Ovaj ekran prikazuje prikaz FTP i SFTP servera. +SetupOfFTPClientModuleNotComplete=Čini se da je podešavanje FTP ili SFTP klijentskog modula nepotpuno +FTPFeatureNotSupportedByYourPHP=Vaš PHP ne podržava FTP ili SFTP funkcije +FailedToConnectToFTPServer=Povezivanje sa serverom nije uspjelo (server %s, port %s) +FailedToConnectToFTPServerWithCredentials=Neuspješno se prijaviti na server sa definiranom prijavom/lozinkom FTPFailedToRemoveFile=Neuspjelo uklanjanje fajla %s. FTPFailedToRemoveDir=Failed to remove directory %s: check permissions and that the directory is empty. FTPPassiveMode=Pasivni način -ChooseAFTPEntryIntoMenu=Choose a FTP/SFTP site from the menu... +ChooseAFTPEntryIntoMenu=Izaberite FTP/SFTP lokaciju iz menija... FailedToGetFile=Failed to get files %s -ErrorFTPNodisconnect=Error to disconnect FTP/SFTP server -FileWasUpload=File %s was uploaded -FTPFailedToUploadFile=Failed to upload the file %s. -AddFolder=Create folder -FileWasCreateFolder=Folder %s has been created -FTPFailedToCreateFolder=Failed to create folder %s. +ErrorFTPNodisconnect=Greška prilikom prekida veze sa FTP/SFTP serverom +FileWasUpload=Datoteka %s je učitana +FTPFailedToUploadFile=Prijenos datoteke %s nije uspio. +AddFolder=Kreirajte folder +FileWasCreateFolder=Kreirana je fascikla %s +FTPFailedToCreateFolder=Kreiranje foldera %s nije uspjelo. +SelectADay=Select a day in calendar +SelectANewDate=Select a new date diff --git a/htdocs/langs/bs_BA/partnership.lang b/htdocs/langs/bs_BA/partnership.lang index 46a06496664..a29eda71c99 100644 --- a/htdocs/langs/bs_BA/partnership.lang +++ b/htdocs/langs/bs_BA/partnership.lang @@ -91,8 +91,7 @@ CountLastUrlCheckError=Broj grešaka za posljednju provjeru URL-a LastCheckBacklink=Datum posljednje provjere URL-a NewPartnershipRequest=Novi zahtjev za partnerstvo -NewPartnershipRequestDesc=Ovaj obrazac vam omogućava da zatražite da budete dio jednog od naših partnerskih programa. Ako vam je potrebna pomoć da ispunite ovaj obrazac, kontaktirajte putem e-pošte %s span>. +NewPartnershipRequestDesc=This form allows you to request to be part of one of our partnership program. If you need help to fill this form, please contact by email %s. ThisUrlMustContainsAtLeastOneLinkToWebsite=Ova stranica mora sadržavati barem jedan link na jednu od sljedećih domena: %s IPOfApplicant=IP podnosioca zahtjeva - diff --git a/htdocs/langs/bs_BA/products.lang b/htdocs/langs/bs_BA/products.lang index 932be6bcd38..56a19a63cd3 100644 --- a/htdocs/langs/bs_BA/products.lang +++ b/htdocs/langs/bs_BA/products.lang @@ -18,7 +18,7 @@ Reference=Referenca NewProduct=Novi proizvod NewService=Nova usluga ProductVatMassChange=Globalno ažuriranje PDV-a -ProductVatMassChangeDesc=Ovaj alat ažurira stopu PDV-a definiranu na SVE class='notranslate'> proizvodi i usluge! +ProductVatMassChangeDesc=This tool updates the VAT rate defined on ALL products and services! MassBarcodeInit=Masovni barkod init MassBarcodeInitDesc=Ova stranica se može koristiti za inicijalizaciju barkoda na objektima koji nemaju definiran bar kod. Provjerite prije nego što je postavljanje barkoda modula završeno. ProductAccountancyBuyCode=Knjigovodstvena šifra (kupovina) @@ -208,11 +208,6 @@ unitSET=Set unitS=Sekunda unitH=Sat unitD=Dan -unitG=Gram -unitM=Meter -unitLM=Linearni metar -unitM2=Kvadratnom metru -unitM3=Kubni metar unitL=Litara unitT=tona unitKG=kg @@ -221,6 +216,7 @@ unitMG=mg unitLB=funta unitOZ=unca unitM=Meter +unitLM=Linearni metar unitDM=dm unitCM=cm unitMM=mm @@ -289,9 +285,9 @@ MinimumRecommendedPrice=Minimalna preporučena cijena je: %s PriceExpressionEditor=Urednik izraza cijene PriceExpressionSelected=Odabrani izraz cijene PriceExpressionEditorHelp1="cijena = 2 + 2" ili "2 + 2" za postavljanje cijene. Koristite ; da razdvoje izraze -PriceExpressionEditorHelp2=ExtraFields možete pristupiti s varijablama kao što je #extrafield_myextrafieldkey# b07ef8>b07e684 varijable sa #global_mycode# -PriceExpressionEditorHelp3=U obje cijene proizvoda/usluge i dostupne su ove varijable:
span>#tva_tx# #localtax1_tx# #localtax2_tx# #weight# #length# #surface# #price_min# -PriceExpressionEditorHelp4=Samo u cijeni proizvoda/usluge: #supplier_min_price#b0342fccfda19b samo prodajne cijene: #supplier_quantity# i #supplier_tva_tx##extrafield_myextrafieldkey# and global variables with #global_mycode# +PriceExpressionEditorHelp3=In both product/service and vendor prices there are these variables available:
#tva_tx# #localtax1_tx# #localtax2_tx# #weight# #length# #surface# #price_min# +PriceExpressionEditorHelp4=In product/service price only: #supplier_min_price#
In vendor prices only: #supplier_quantity# and #supplier_tva_tx# PriceExpressionEditorHelp5=Dostupne globalne vrijednosti: PriceMode=Režim cijena PriceNumeric=Broj @@ -437,4 +433,6 @@ ModifyValueExtrafields = Izmijenite vrijednost ekstrapolja OrProductsWithCategories=Ili proizvodi sa oznakama/kategorijama WarningTransferBatchStockMouvToGlobal = Ako želite deserijalizirati ovaj proizvod, sva njegova serijalizirana zaliha će biti transformirana u globalnu zalihu WarningConvertFromBatchToSerial=Ako trenutno imate količinu veću ili jednaku 2 za proizvod, prelazak na ovaj izbor znači da ćete i dalje imati proizvod s različitim objektima iste serije (dok želite jedinstveni serijski broj). Duplikat će ostati dok se ne izvrši inventar ili ručno kretanje zaliha da se to popravi. +AllowStockMovementVariantParent=Also records stock movements on parent products of variant products +AllowStockMovementVariantParentHelp=By default, a parent of a variant is a virtual product, so no stock is managed for it. By enabling this option, a stock will be managed for parent products and each time a stock quantity is modified for a variant product, the same quantity will be modified for the parent product. You should not need this option, except if you are using variant to manage the same product than parent (but with different descriptions, prices...) ConfirmSetToDraftInventory=Jeste li sigurni da se želite vratiti na status Nacrta?
Količine koje su trenutno postavljene u inventaru će biti resetirane. diff --git a/htdocs/langs/bs_BA/stocks.lang b/htdocs/langs/bs_BA/stocks.lang index c3cf306cee5..681fb05fa41 100644 --- a/htdocs/langs/bs_BA/stocks.lang +++ b/htdocs/langs/bs_BA/stocks.lang @@ -171,7 +171,7 @@ MovementTransferStock=Prijenos zaliha proizvoda %s u drugo skladište BatchStockMouvementAddInGlobal=Zalihe serije prelaze u globalne zalihe (proizvod više ne koristi seriju) InventoryCodeShort=Inv./Mov. kod NoPendingReceptionOnSupplierOrder=Nema prijema na čekanju zbog otvorene narudžbenice -ThisSerialAlreadyExistWithDifferentDate=Ova serija/serijski broj (%s) već postoji, ali sa različit datum jedenja ili prodaje (pronađen %s ali vi unesete <
span class='notranslate'>
%s). +ThisSerialAlreadyExistWithDifferentDate=This lot/serial number (%s) already exists but with different eatby or sellby date (found %s but you enter %s). OpenAnyMovement=Otvoreno (svi pokreti) OpenInternal=Otvoreno (samo unutrašnje kretanje) UseDispatchStatus=Koristite status otpreme (odobri/odbijem) za linije proizvoda prilikom prijema narudžbenice @@ -282,7 +282,7 @@ ModuleStockTransferName=Napredni prijenos zaliha ModuleStockTransferDesc=Napredno upravljanje prijenosom zaliha, sa generiranjem prijenosnog lista StockTransferNew=Novi prijenos zaliha StockTransferList=Lista prijenosa dionica -ConfirmValidateStockTransfer=Jeste li sigurni da želite potvrditi ovaj prijenos dionica s referencom %s ? +ConfirmValidateStockTransfer=Are you sure you want to validate this stocks transfer with the reference %s ? ConfirmDestock=Smanjenje zaliha s prijenosom %s ConfirmDestockCancel=Otkažite smanjenje zaliha s prijenosom %s DestockAllProduct=Smanjenje zaliha diff --git a/htdocs/langs/bs_BA/stripe.lang b/htdocs/langs/bs_BA/stripe.lang index 76d0e32544e..f80a1710397 100644 --- a/htdocs/langs/bs_BA/stripe.lang +++ b/htdocs/langs/bs_BA/stripe.lang @@ -22,7 +22,7 @@ ToOfferALinkForOnlinePaymentOnContractLine=URL za ponudu %s stranice za online p ToOfferALinkForOnlinePaymentOnFreeAmount=URL za ponudu %s stranice za online plaćanje bilo kojeg iznosa bez postojećeg objekta ToOfferALinkForOnlinePaymentOnMemberSubscription=URL za ponudu %s stranice za online plaćanje za pretplatu člana ToOfferALinkForOnlinePaymentOnDonation=URL za ponudu %s stranice za online plaćanje za uplatu donacije -YouCanAddTagOnUrl=Također možete dodati url parametar &tag=value class='notranslate'> na bilo koji od tih URL-ova (obavezno samo za plaćanje koje nije povezano sa objektom) da dodate svoju oznaku komentara o plaćanju.
Za URL plaćanja bez postojećeg objekta, možete dodati i parametar &noidempotency=1 tako da isti link sa istom oznakom može se koristiti nekoliko puta (neki način plaćanja može ograničiti plaćanje na 1 za svaki različiti link bez ovog parametra) +YouCanAddTagOnUrl=You can also add url parameter &tag=value to any of those URL (mandatory only for payment not linked to an object) to add your own payment comment tag.
For the URL of payments with no existing object, you may also add the parameter &noidempotency=1 so the same link with same tag can be used several times (some payment mode may limit the payment to 1 for each different link without this parameter) SetupStripeToHavePaymentCreatedAutomatically=Postavite svoj Stripe s url %s da se plaćanje automatski kreira potvrdio Stripe. AccountParameter=Parametri računa UsageParameter=Parametri upotrebe diff --git a/htdocs/langs/bs_BA/ticket.lang b/htdocs/langs/bs_BA/ticket.lang index bc38a099385..efed5adb95d 100644 --- a/htdocs/langs/bs_BA/ticket.lang +++ b/htdocs/langs/bs_BA/ticket.lang @@ -320,7 +320,7 @@ ViewTicket=Pogledaj kartu ViewMyTicketList=Pogledaj moju listu karata ErrorEmailMustExistToCreateTicket=Greška: adresa e-pošte nije pronađena u našoj bazi podataka TicketNewEmailSubjectAdmin=Nova karta kreirana - Ref %s (ID javne karte %s) -TicketNewEmailBodyAdmin=

Ulaznica je upravo kreirana sa ID-om #%s, pogledajte informacije:

> +TicketNewEmailBodyAdmin=

Ticket has just been created with ID #%s, see information:

SeeThisTicketIntomanagementInterface=Pogledajte kartu u interfejsu upravljanja TicketPublicInterfaceForbidden=Javni interfejs za karte nije bio omogućen ErrorEmailOrTrackingInvalid=Loša vrijednost za ID praćenja ili e-poštu diff --git a/htdocs/langs/bs_BA/trips.lang b/htdocs/langs/bs_BA/trips.lang index 638772c81cd..941d821a3a1 100644 --- a/htdocs/langs/bs_BA/trips.lang +++ b/htdocs/langs/bs_BA/trips.lang @@ -1,150 +1,152 @@ # Dolibarr language file - Source file is en_US - trips -ShowExpenseReport=Show expense report -Trips=Izvještaj o troškovima -TripsAndExpenses=Expenses reports -TripsAndExpensesStatistics=Expense reports statistics -TripCard=Expense report card -AddTrip=Create expense report -ListOfTrips=List of expense reports -ListOfFees=Lista naknada -TypeFees=Types of fees -ShowTrip=Show expense report -NewTrip=New expense report -LastExpenseReports=Latest %s expense reports -AllExpenseReports=All expense reports -CompanyVisited=Company/organization visited -FeesKilometersOrAmout=Iznos ili kilometri -DeleteTrip=Delete expense report -ConfirmDeleteTrip=Are you sure you want to delete this expense report? -ListTripsAndExpenses=List of expense reports -ListToApprove=Waiting for approval -ExpensesArea=Expense reports area -ClassifyRefunded=Classify 'Refunded' -ExpenseReportWaitingForApproval=A new expense report has been submitted for approval -ExpenseReportWaitingForApprovalMessage=A new expense report has been submitted and is waiting for approval.
- User: %s
- Period: %s
Click here to validate: %s -ExpenseReportWaitingForReApproval=An expense report has been submitted for re-approval +AUTHOR=Snimio +AUTHORPAIEMENT=Platio +AddTrip=Kreirajte izvještaj o troškovima +AllExpenseReport=Sve vrste izvještaja o troškovima +AllExpenseReports=Svi izvještaji o troškovima +AnyOtherInThisListCanValidate=Osoba koju treba obavijestiti za validaciju zahtjeva. +AttachTheNewLineToTheDocument=Pričvrstite liniju na učitani dokument +AucuneLigne=Još uvijek nije objavljen izvještaj o troškovima +BrouillonnerTrip=Vrati izvještaj o troškovima u status "Nacrt" +byEX_DAY=po danu (ograničenje na %s) +byEX_EXP=po redu (ograničenje na %s) +byEX_MON=po mjesecu (ograničenje na %s) +byEX_YEA=po godini (ograničenje na %s) +CANCEL_USER=Izbrisao/la +CarCategory=Kategorija vozila +ClassifyRefunded=Razvrstaj 'Vraćeno' +CompanyVisited=Posjećena kompanija/organizacija +ConfirmBrouillonnerTrip=Jeste li sigurni da želite premjestiti ovaj izvještaj o troškovima u status "Nacrt"? +ConfirmCancelTrip=Jeste li sigurni da želite otkazati ovaj izvještaj o troškovima? +ConfirmCloneExpenseReport=Jeste li sigurni da želite klonirati ovaj izvještaj o troškovima? +ConfirmDeleteTrip=Jeste li sigurni da želite izbrisati ovaj izvještaj o troškovima? +ConfirmPaidTrip=Jeste li sigurni da želite promijeniti status ovog izvještaja o troškovima u "Plaćeno"? +ConfirmRefuseTrip=Jeste li sigurni da želite odbiti ovaj izvještaj o troškovima? +ConfirmSaveTrip=Jeste li sigurni da želite potvrditi ovaj izvještaj o troškovima? +ConfirmValideTrip=Jeste li sigurni da želite odobriti ovaj izvještaj o troškovima? +DATE_CANCEL=Datum otkazivanja +DATE_PAIEMENT=Datum uplate +DATE_REFUS=Odbiti datum +DATE_SAVE=Datum potvrde +DefaultCategoryCar=Zadani način transporta +DefaultRangeNumber=Zadani broj opsega +DeleteTrip=Izbriši izvještaj o troškovima +ErrorDoubleDeclaration=Deklarirali ste još jedan izvještaj o troškovima u sličnom rasponu datuma. +Error_EXPENSEREPORT_ADDON_NotDefined=Greška, pravilo za numeraciju izvještaja o troškovima ref nije definirano u podešavanju modula 'Izvještaj o troškovima' +ExpenseRangeOffset=Iznos pomaka: %s +expenseReportCatDisabled=Kategorija onemogućena - pogledajte c_exp_tax_cat rječnik +expenseReportCoef=Koeficijent +expenseReportCoefUndefined=(vrijednost nije definirana) +expenseReportOffset=Offset +expenseReportPrintExample=pomak + (d x koef) = %s +expenseReportRangeDisabled=Opseg onemogućen - pogledajte rječnik c_exp_tax_range +expenseReportRangeFromTo=od %d do %d +expenseReportRangeMoreThan=više od %d +expenseReportTotalForFive=Primjer sa d = 5 +ExpenseReportApplyTo=Prijavite se na +ExpenseReportApproved=Izvještaj o troškovima je odobren +ExpenseReportApprovedMessage=Izvještaj o troškovima %s je odobren.
- Korisnik: %s
- Odobrio: %s
Kliknite ovdje za prikaz izvještaja o troškovima: %s +ExpenseReportCanceled=Izvještaj o troškovima je poništen +ExpenseReportCanceledMessage=Izvještaj o troškovima %s je otkazan.
- Korisnik: %s
- Otkazao: %s
- Motiv za otkazivanje: %s
Kliknite ovdje za prikaz izvještaja o troškovima: %s +ExpenseReportConstraintViolationError=Maksimalni iznos je prekoračen (pravilo %s): %s je veći od %s ( Prekoračenje zabranjeno) +ExpenseReportConstraintViolationWarning=Maksimalni iznos je prekoračen (pravilo %s): %s je veći od %s ( Prekoračenje ovlaštenja) +ExpenseReportDateEnd=Kraj datuma +ExpenseReportDateStart=Datum početka +ExpenseReportDomain=Domena za prijavu +ExpenseReportIkDesc=Možete modificirati obračun troškova kilometara prema kategorijama i rasponu koji su prethodno definirani. d je udaljenost u kilometrima +ExpenseReportLimitAmount=Maksimalni iznos +ExpenseReportLimitOn=Ograničenje uključeno +ExpenseReportLine=Red izvještaja o troškovima +ExpenseReportPaid=Izvještaj o troškovima je plaćen +ExpenseReportPaidMessage=Izvještaj o troškovima %s je plaćen.
- Korisnik: %s
- Platio: %s
Kliknite ovdje za prikaz izvještaja o troškovima: %s +ExpenseReportPayment=Plaćanje izvještaja o troškovima +ExpenseReportRef=Ref. izvještaj o troškovima +ExpenseReportRefused=Izvještaj o troškovima je odbijen +ExpenseReportRefusedMessage=Izvještaj o troškovima %s je odbijen.
- Korisnik: %s
- Odbio: %s
- Motiv za odbijanje: %s
Kliknite ovdje za prikaz izvještaja o troškovima: %s +ExpenseReportRestrictive=Prekoračenje zabranjeno +ExpenseReportRuleErrorOnSave=Greška: %s +ExpenseReportRuleSave=Pravilo izvještaja o troškovima je sačuvano +ExpenseReportRulesDesc=Možete definirati pravila maksimalnog iznosa za izvještaje o troškovima. Ova pravila će se primjenjivati kada se izvještaju o troškovima doda novi trošak +ExpenseReportWaitingForApproval=Novi izvještaj o troškovima je dostavljen na odobrenje +ExpenseReportWaitingForApprovalMessage=Novi izvještaj o troškovima je dostavljen i čeka odobrenje.
- Korisnik: b0ecb2ec87f49fz
- Period: %s
Kliknite ovdje za potvrdu : %s +ExpenseReportWaitingForReApproval=Izvještaj o troškovima je dostavljen na ponovno odobrenje ExpenseReportWaitingForReApprovalMessage=An expense report has been submitted and is waiting for re-approval.
The %s, you refused to approve the expense report for this reason: %s.
A new version has been proposed and waiting for your approval.
- User: %s
- Period: %s
Click here to validate: %s -ExpenseReportApproved=An expense report was approved -ExpenseReportApprovedMessage=The expense report %s was approved.
- User: %s
- Approved by: %s
Click here to show the expense report: %s -ExpenseReportRefused=An expense report was refused -ExpenseReportRefusedMessage=The expense report %s was refused.
- User: %s
- Refused by: %s
- Motive for refusal: %s
Click here to show the expense report: %s -ExpenseReportCanceled=An expense report was canceled -ExpenseReportCanceledMessage=The expense report %s was canceled.
- User: %s
- Canceled by: %s
- Motive for cancellation: %s
Click here to show the expense report: %s -ExpenseReportPaid=An expense report was paid -ExpenseReportPaidMessage=The expense report %s was paid.
- User: %s
- Paid by: %s
Click here to show the expense report: %s -TripId=Id expense report -AnyOtherInThisListCanValidate=Person to be informed for validating the request. -TripSociete=Information company -TripNDF=Informations expense report -PDFStandardExpenseReports=Standard template to generate a PDF document for expense report -ExpenseReportLine=Expense report line -TF_OTHER=Ostalo -TF_TRIP=Transportation +ExpenseReportsIk=Konfiguracija naknade za kilometražu +ExpenseReportsRules=Pravila izvještaja o troškovima +ExpenseReportsToApprove=Izvještaji o troškovima za odobrenje +ExpenseReportsToPay=Izvještaji o troškovima za plaćanje +ExpensesArea=Područje izvještaja o troškovima +FeesKilometersOrAmout=Iznos ili kilometri +LastExpenseReports=Najnoviji %s izvještaji o troškovima +ListOfFees=Lista naknada +ListOfTrips=Spisak izveštaja o troškovima +ListToApprove=Čekajući na odobrenje +ListTripsAndExpenses=Spisak izveštaja o troškovima +MOTIF_CANCEL=Razlog +MOTIF_REFUS=Razlog +ModePaiement=Način plaćanja +NewTrip=Novi izvještaj o troškovima +nolimitbyEX_DAY=po danu (bez ograničenja) +nolimitbyEX_EXP=po liniji (bez ograničenja) +nolimitbyEX_MON=po mjesecu (bez ograničenja) +nolimitbyEX_YEA=po godini (bez ograničenja) +NoTripsToExportCSV=Nema izvještaja o troškovima za izvoz za ovaj period. +NOT_AUTHOR=Vi niste autor ovog izvještaja o troškovima. Operacija je otkazana. +OnExpense=Troškovna linija +PDFStandardExpenseReports=Standardni predložak za generiranje PDF dokumenta za izvještaj o troškovima +PaidTrip=Plati izvještaj o troškovima +REFUSEUR=Denied by +RangeIk=Raspon kilometara +RangeNum=Raspon %d +SaveTrip=Potvrdite izvještaj o troškovima +ShowExpenseReport=Prikaži izvještaj o troškovima +ShowTrip=Prikaži izvještaj o troškovima +TripCard=Izvještaj o troškovima +TripId=Izvještaj o ličnim troškovima +TripNDF=Izvještaj o troškovima informacija +TripSociete=Informaciona kompanija +Trips=Izvještaj o troškovima +TripsAndExpenses=Izvještaji o troškovima +TripsAndExpensesStatistics=Statistički izvještaji o troškovima +TypeFees=Vrste naknada +UploadANewFileNow=Učitajte novi dokument sada +VALIDATOR=Korisnik odgovoran za odobrenje +VALIDOR=Odobrio +ValidateAndSubmit=Potvrdite i slanje na odobrenje +ValidatedWaitingApproval=Potvrđeno (čeka se odobrenje) +ValideTrip=Odobravanje izvještaja o troškovima + +## Dictionary +EX_BRE=Doručak +EX_CAM=CV održavanje i popravka +EX_CAM_VP=PV održavanje i popravak +EX_CAR=Rentakar +EX_CUR=Kupci primaju +EX_DOC=Dokumentacija +EX_EMM=Obrok za zaposlene +EX_FUE=Fuel CV +EX_FUE_VP=Fuel PV +EX_GUM=Obrok za goste +EX_HOT=Hotel +EX_IND=Odštetna pretplata za prevoz +EX_KME=Troškovi kilometraže +EX_OTR=Drugo primanje +EX_PAR=Parking CV +EX_PAR_VP=Parking PV +EX_POS=Poštarina +EX_SUM=Opskrba za održavanje +EX_SUO=Kancelarijski materijal +EX_TAX=Razni porezi +EX_TOL=Toll CV +EX_TOL_VP=Toll PV +TF_BUS=Autobus +TF_CAR=Auto +TF_ESSENCE=Gorivo +TF_HOTEL=Hotel TF_LUNCH=Ručak TF_METRO=Metro -TF_TRAIN=Train -TF_BUS=Bus -TF_CAR=Car -TF_PEAGE=Toll -TF_ESSENCE=Fuel -TF_HOTEL=Hotel -TF_TAXI=Taxi -EX_KME=Mileage costs -EX_FUE=Fuel CV -EX_HOT=Hotel -EX_PAR=Parking CV -EX_TOL=Toll CV -EX_TAX=Various Taxes -EX_IND=Indemnity transportation subscription -EX_SUM=Maintenance supply -EX_SUO=Office supplies -EX_CAR=Car rental -EX_DOC=Documentation -EX_CUR=Customers receiving -EX_OTR=Other receiving -EX_POS=Postage -EX_CAM=CV maintenance and repair -EX_EMM=Employees meal -EX_GUM=Guests meal -EX_BRE=Breakfast -EX_FUE_VP=Fuel PV -EX_TOL_VP=Toll PV -EX_PAR_VP=Parking PV -EX_CAM_VP=PV maintenance and repair -DefaultCategoryCar=Default transportation mode -DefaultRangeNumber=Default range number -UploadANewFileNow=Upload a new document now -Error_EXPENSEREPORT_ADDON_NotDefined=Error, the rule for expense report numbering ref was not defined into setup of module 'Expense Report' -ErrorDoubleDeclaration=You have declared another expense report into a similar date range. -AucuneLigne=There is no expense report declared yet -ModePaiement=Payment mode -VALIDATOR=User responsible for approval -VALIDOR=Odobrio -AUTHOR=Recorded by -AUTHORPAIEMENT=Paid by -REFUSEUR=Denied by -CANCEL_USER=Deleted by -MOTIF_REFUS=Razlog -MOTIF_CANCEL=Razlog -DATE_REFUS=Deny date -DATE_SAVE=Datum potvrde -DATE_CANCEL=Cancelation date -DATE_PAIEMENT=Datum uplate -ExpenseReportRef=Ref. expense report -ValidateAndSubmit=Validate and submit for approval -ValidatedWaitingApproval=Validated (waiting for approval) -NOT_AUTHOR=You are not the author of this expense report. Operation cancelled. -ConfirmRefuseTrip=Are you sure you want to deny this expense report? -ValideTrip=Approve expense report -ConfirmValideTrip=Are you sure you want to approve this expense report? -PaidTrip=Pay an expense report -ConfirmPaidTrip=Are you sure you want to change status of this expense report to "Paid"? -ConfirmCancelTrip=Are you sure you want to cancel this expense report? -BrouillonnerTrip=Move back expense report to status "Draft" -ConfirmBrouillonnerTrip=Are you sure you want to move this expense report to status "Draft"? -SaveTrip=Validate expense report -ConfirmSaveTrip=Are you sure you want to validate this expense report? -NoTripsToExportCSV=No expense report to export for this period. -ExpenseReportPayment=Expense report payment -ExpenseReportsToApprove=Expense reports to approve -ExpenseReportsToPay=Expense reports to pay -ConfirmCloneExpenseReport=Are you sure you want to clone this expense report ? -ExpenseReportsIk=Configuration of mileage charges -ExpenseReportsRules=Expense report rules -ExpenseReportIkDesc=You can modify the calculation of kilometers expense by category and range who they are previously defined. d is the distance in kilometers -ExpenseReportRulesDesc=You can define max amount rules for expense reports. These rules will be applied when a new expense is added to an expense report -expenseReportOffset=Offset -expenseReportCoef=Coefficient -expenseReportTotalForFive=Example with d = 5 -expenseReportRangeFromTo=from %d to %d -expenseReportRangeMoreThan=more than %d -expenseReportCoefUndefined=(value not defined) -expenseReportCatDisabled=Category disabled - see the c_exp_tax_cat dictionary -expenseReportRangeDisabled=Range disabled - see the c_exp_tax_range dictionay -expenseReportPrintExample=offset + (d x coef) = %s -ExpenseReportApplyTo=Apply to -ExpenseReportDomain=Domain to apply -ExpenseReportLimitOn=Limit on -ExpenseReportDateStart=Date start -ExpenseReportDateEnd=Date end -ExpenseReportLimitAmount=Max amount -ExpenseReportRestrictive=Exceeding forbidden -AllExpenseReport=All type of expense report -OnExpense=Expense line -ExpenseReportRuleSave=Expense report rule saved -ExpenseReportRuleErrorOnSave=Error: %s -RangeNum=Range %d -ExpenseReportConstraintViolationError=Max amount exceeded (rule %s): %s is higher than %s (Exceeding forbidden) -byEX_DAY=by day (limitation to %s) -byEX_MON=by month (limitation to %s) -byEX_YEA=by year (limitation to %s) -byEX_EXP=by line (limitation to %s) -ExpenseReportConstraintViolationWarning=Max amount exceeded (rule %s): %s is higher than %s (Exceeding authorized) -nolimitbyEX_DAY=by day (no limitation) -nolimitbyEX_MON=by month (no limitation) -nolimitbyEX_YEA=by year (no limitation) -nolimitbyEX_EXP=by line (no limitation) -CarCategory=Vehicle category -ExpenseRangeOffset=Offset amount: %s -RangeIk=Mileage range -AttachTheNewLineToTheDocument=Attach the line to an uploaded document +TF_OTHER=Ostalo +TF_PEAGE=Putarina +TF_TAXI=Taksi +TF_TRAIN=Voz +TF_TRIP=Prijevoz diff --git a/htdocs/langs/bs_BA/website.lang b/htdocs/langs/bs_BA/website.lang index 2e3f8b8a6c5..d9901a18f88 100644 --- a/htdocs/langs/bs_BA/website.lang +++ b/htdocs/langs/bs_BA/website.lang @@ -32,7 +32,7 @@ AddWebsite=Dodaj web stranicu Webpage=Web stranica/kontejner AddPage=Dodajte stranicu/kontejner PageContainer=Stranica -PreviewOfSiteNotYetAvailable=Pregled vaše web stranice %s još nije dostupan. Prvo morate 'uvesti cijeli predložak web stranice' ili samo 'b0e7843947cDodajte stranicu/kontejner
'. +PreviewOfSiteNotYetAvailable=The preview of your website %s is not yet available. You must first 'Import a full website template' or just 'Add a page/container'. RequestedPageHasNoContentYet=Zatražena stranica sa ID-om %s još nema sadržaja ili je keš datoteka .tpl.php uklonjena. Uredite sadržaj stranice da to riješite. SiteDeleted=Web stranica '%s' je izbrisana PageContent=Page/Contenair @@ -49,11 +49,11 @@ SetHereVirtualHost=Koristite sa Apache/NGinx/...
Kreirajte na vaš web ExampleToUseInApacheVirtualHostConfig=Primjer za korištenje u Apache postavci virtualnog hosta: YouCanAlsoTestWithPHPS=Koristite sa PHP ugrađenim serverom
U razvojnom okruženju možete radije testirajte web lokaciju sa PHP ugrađenim web serverom (potreban je PHP 5.5) pokretanjem
php -S 0.0.0.0 :8080 -t %s YouCanAlsoDeployToAnotherWHP=Pokrenite svoju web stranicu s drugim Dolibarr hosting provajderom
vas nemate web server kao što je Apache ili NGinx dostupan na internetu, možete izvesti i svoju web stranicu u drugu Dolibarr instancu koju pruža drugi Dolibarr hosting provajder koji pruža potpunu integraciju sa modul Website. Spisak nekih Dolibarr hosting provajdera možete pronaći na https://saas.dolibarr.org -CheckVirtualHostPerms=Provjerite također da li korisnik virtualnog hosta (na primjer www-data) ima %s dozvole za datoteke u
%s
+CheckVirtualHostPerms=Check also that the virtual host user (for example www-data) has %s permissions on files into
%s ReadPerm=Pročitaj WritePerm=Pisati TestDeployOnWeb=Testirajte / implementirajte na webu -PreviewSiteServedByWebServer=Pregled %s na novoj kartici.

%s će služiti vanjski web server (kao što je Apache, Nginx, IIS ). Morate instalirati i postaviti ovaj server prije nego što ukažete na direktorij:
>%s
URL poslužuje vanjski server:
%sb0a65d09z0f>b0a65d09z071 +PreviewSiteServedByWebServer=Preview %s in a new tab.

The %s will be served by an external web server (like Apache, Nginx, IIS). You must install and setup this server before to point to directory:
%s
URL served by external server:
%s PreviewSiteServedByDolibarr=Pregled %s na novoj kartici.

%s će služiti Dolibarr server tako da mu ne treba nikakav dodatni web server (kao Apache, Nginx, IIS) za instaliranje.
Nezgodno je to što URL-ovi stranica nisu prilagođeni korisniku i počnite s putanjom vašeg Dolibarra.
URL koju poslužuje Dolibarr:
b0e7843947c06bz span>%s

b031492zcc Da biste koristili vlastiti vanjski web server za posluživanje ove web stranice, kreirajte virtualni host na svom web serveru koji pokazuje na direktorij
%s
unesite ovo ime19bz0 virtuelni server u svojstvima ove web stranice i kliknite na vezu "Test/Deploy on the web". VirtualHostUrlNotDefined=URL virtuelnog hosta kojeg opslužuje vanjski web server nije definiran NoPageYet=Još nema stranica @@ -63,7 +63,7 @@ YouCanEditHtmlSourceckeditor=Možete uređivati HTML izvorni kod koristeći dugm YouCanEditHtmlSource=
You can include PHP code into this source using tags <?php ?>. The following global variables are available: $conf, $db, $mysoc, $user, $website, $websitepage, $weblangs, $pagelangs.

You can also include content of another Page/Container with the following syntax:
<?php includeContainer('alias_of_container_to_include'); ?>

You can make a redirect to another Page/Container with the following syntax (Note: do not output any content before a redirect):
<?php redirectToContainer('alias_of_container_to_redirect_to'); ?>

To add a link to another page, use the syntax:
<a href="alias_of_page_to_link_to.php">mylink<a>

To include a link to download a file stored into the documents directory, use the document.php wrapper:
Example, for a file into documents/ecm (need to be logged), syntax is:
<a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext">
For a file into documents/medias (open directory for public access), syntax is:
<a href="/document.php?modulepart=medias&file=[relative_dir/]filename.ext">
For a file shared with a share link (open access using the sharing hash key of file), syntax is:
<a href="/document.php?hashp=publicsharekeyoffile">
YouCanEditHtmlSource1=
To include an image stored into the documents directory, use the viewimage.php wrapper.
Example, for an image into documents/medias (open directory for public access), syntax is:
<img src="/viewimage.php?modulepart=medias&file=[relative_dir/]filename.ext">
YouCanEditHtmlSource2=Za sliku koja se dijeli s vezom za dijeljenje (otvoreni pristup koristeći hash ključ za dijeljenje datoteke), sintaksa je:
<img src="/viewimage.php?hashp=12345679012...">0af665dc71f09
-YouCanEditHtmlSource3=Da biste dobili URL slike PHP objekta, koristite
< span>img src="<?php print getImagePublicURLOfObject($object, 1, "_small") ?>" class='notranslate'>>
+YouCanEditHtmlSource3=To get the URL of the image of a PHP object, use
<img src="<?php print getImagePublicURLOfObject($object, 1, "_small") ?>">
YouCanEditHtmlSourceMore=
Više primjera HTML ili dinamičkog koda dostupno je na wiki dokumentacijib0e40dc6087 >.
ClonePage=Kloniraj stranicu/kontejner CloneSite=Clone site @@ -118,7 +118,7 @@ DeleteAlsoMedias=Izbrisati i sve medijske datoteke specifične za ovu web strani MyWebsitePages=Moje web stranice SearchReplaceInto=Pretraga | Zamijenite u ReplaceString=New string -CSSContentTooltipHelp=Ovdje unesite CSS sadržaj. Da biste izbjegli bilo kakav sukob sa CSS-om aplikacije, obavezno dodajte sve deklaracije klasom .bodywebsite. Na primjer:

#mycssselector, input.myclass:hover { ... }
mora biti
.bodywebsite #mycssselector, .bodywebsite input.myclass:hover { ... }b0342fccfda19b
Napomena: Ako imate veliki fajl bez ovog prefiksa, možete koristiti 'lessc' da ga konvertujete da biste svuda dodali prefiks .bodywebsite. +CSSContentTooltipHelp=Enter here CSS content. To avoid any conflict with the CSS of the application, be sure to prepend all declaration with the .bodywebsite class. For example:

#mycssselector, input.myclass:hover { ... }
must be
.bodywebsite #mycssselector, .bodywebsite input.myclass:hover { ... }

Note: If you have a large file without this prefix, you can use 'lessc' to convert it to append the .bodywebsite prefix everywhere. LinkAndScriptsHereAreNotLoadedInEditor=Upozorenje: Ovaj sadržaj se izlazi samo kada se sajtu pristupa sa servera. Ne koristi se u režimu za uređivanje, tako da ako treba da učitate JavaScript fajlove iu režimu za uređivanje, samo dodajte svoju oznaku 'script src=...' na stranicu. Dynamiccontent=Uzorak stranice sa dinamičkim sadržajem EditInLineOnOff=Način rada 'Edit inline' je %s diff --git a/htdocs/langs/ca_ES/accountancy.lang b/htdocs/langs/ca_ES/accountancy.lang index 41e566c5bdb..88dd54e65cc 100644 --- a/htdocs/langs/ca_ES/accountancy.lang +++ b/htdocs/langs/ca_ES/accountancy.lang @@ -423,7 +423,7 @@ SaleLocal=Venda local SaleExport=Venda d’exportació SaleEEC=Venda en CEE SaleEECWithVAT=Venda a la CEE amb un IVA que no és nul, per la qual cosa suposem que NO es tracta d’una venda intracomunitària i el compte suggerit és el compte estàndard del producte. -SaleEECWithoutVATNumber=sale a EEC sense VAT però el VAT ID de Third party no està definit. Recorrem a account per a standard sales. Podeu arreglar el VAT ID del Third party o canviar el Third party span class='notranslate'>product
account suggerit per a l'enllaç si cal. +SaleEECWithoutVATNumber=Sale in EEC with no VAT but the VAT ID of third party is not defined. We fall back on the account for standard sales. You can fix the VAT ID of the third party, or change the product account suggested for binding if needed. ForbiddenTransactionAlreadyExported=Prohibit: la transacció ha estat validada i/o exportada. ForbiddenTransactionAlreadyValidated=Prohibit: la transacció s'ha validat. ## Dictionary diff --git a/htdocs/langs/ca_ES/admin.lang b/htdocs/langs/ca_ES/admin.lang index ff3abe75c8b..0dbee7a5bcc 100644 --- a/htdocs/langs/ca_ES/admin.lang +++ b/htdocs/langs/ca_ES/admin.lang @@ -106,7 +106,7 @@ NextValueForInvoices=Valor següent (factures) NextValueForCreditNotes=Valor següent (notes de crèdit) NextValueForDeposit=Següent valor (pagament inicial) NextValueForReplacements=Valor següent (substitucions) -MustBeLowerThanPHPLimit=Nota: actualment la vostra configuració de PHP limita la mida màxima dels fitxers per pujar a %s
span> %s, independentment del valor d'aquest paràmetre +MustBeLowerThanPHPLimit=Note: your PHP configuration currently limits the maximum filesize for upload to %s %s, irrespective of the value of this parameter NoMaxSizeByPHPLimit=Nota: No s'estableix cap límit a la configuració de PHP MaxSizeForUploadedFiles=Mida màxima per als fitxers penjats (0 per no permetre cap càrrega) UseCaptchaCode=Utilitzeu codi gràfic (CAPTCHA) a la pàgina d'inici de sessió i algunes pàgines públiques @@ -163,7 +163,7 @@ PurgeAreaDesc=Aquesta pàgina us permet suprimir tots els fitxers generats o emm PurgeDeleteLogFile=Suprimeix fitxers de registre, inclosos %s definit per al mòdul Syslog (no risc de perdre dades) PurgeDeleteTemporaryFiles=Suprimeix tots els fitxers de registre i temporals (sense risc de perdre dades). El paràmetre pot ser "tempfilesold", "logfiles" o tots dos "tempfilesold+logfiles". Nota: L'eliminació dels fitxers temporals només es fa si el directori temporal es va crear fa més de 24 hores. PurgeDeleteTemporaryFilesShort=Suprimeix els fitxers de registre i temporals (sense risc de perdre dades) -PurgeDeleteAllFilesInDocumentsDir=Suprimeix tots els fitxers del directori: %s.
Això suprimirà tots els documents generats relacionats amb elements (tercers, factures, etc.), fitxers penjats al mòdul ECM, abocadors de còpia de seguretat de bases de dades i fitxers temporals. +PurgeDeleteAllFilesInDocumentsDir=Delete all files in directory: %s.
This will delete all generated documents related to elements (third parties, invoices etc...), files uploaded into the ECM module, database backup dumps and temporary files. PurgeRunNow=Purga ara PurgeNothingToDelete=No hi ha cap directori ni fitxers per esborrar. PurgeNDirectoriesDeleted=%s fitxers o directoris suprimits. @@ -250,8 +250,8 @@ Security=Seguretat Passwords=Contrasenyes DoNotStoreClearPassword=Xifra les contrasenyes emmagatzemades a la base de dades (NO com a text sense format). És molt recomanable activar aquesta opció. MainDbPasswordFileConfEncrypted=Xifra la contrasenya de la base de dades emmagatzemada a conf.php. És molt recomanable activar aquesta opció. -InstrucToEncodePass=Per tenir la contrasenya codificada al fitxer conf.php, substituïu la línia
/span>$dolibarr_main_db_pass="...";b0342fccfdaper
$dolibarr_main_db_pass="crypted:%s; span class='notranslate'>
-InstrucToClearPass=Per descodificar (esborrar) la contrasenya al fitxer conf.php, substituïu la línia
$dolibarr_main_db_pass="crypted:..."; >
per
$dolibarr_main_db_pass="b0f4f4span2'>$dolibarr_main_db_pass="z7 "; +InstrucToEncodePass=To have password encoded into the conf.php file, replace the line
$dolibarr_main_db_pass="...";
by
$dolibarr_main_db_pass="crypted:%s"; +InstrucToClearPass=To have password decoded (clear) into the conf.php file, replace the line
$dolibarr_main_db_pass="crypted:...";
by
$dolibarr_main_db_pass="%s"; ProtectAndEncryptPdfFiles=Protegiu els fitxers PDF generats. Això NO es recomana perquè trenca la generació massiva de PDF. ProtectAndEncryptPdfFilesDesc=La protecció d'un document PDF el manté disponible per llegir i imprimir amb qualsevol navegador PDF. Tanmateix, l'edició i la còpia ja no són possibles. Tingueu en compte que l'ús d'aquesta funció fa que la creació d'un PDF global combinat no funcioni. Feature=Característica @@ -268,7 +268,7 @@ OtherResources=Altres recursos ExternalResources=Recursos externs SocialNetworks=Xarxes socials SocialNetworkId=Identificador de la xarxa social -ForDocumentationSeeWiki=Per a la documentació de l'usuari o del desenvolupador (Doc, PMF...),
fegeu una ullada a la wiki de Dolibarr:
%sb0e40d8dc658%sb0e40d8dc658 +ForDocumentationSeeWiki=For user or developer documentation (Doc, FAQs...),
take a look at the Dolibarr Wiki:
%s ForAnswersSeeForum=Per a qualsevol altra pregunta/ajuda, podeu utilitzar el fòrum de Dolibarr:
%s HelpCenterDesc1=Aquí teniu alguns recursos per obtenir ajuda i suport amb Dolibarr. HelpCenterDesc2=Alguns d'aquests recursos només estan disponibles a anglès. @@ -290,8 +290,8 @@ EMailsSetup=Configuració de correus electrònics EMailsDesc=Aquesta pàgina us permet establir paràmetres o opcions per a l'enviament de correu electrònic. EmailSenderProfiles=Perfils de remitents de correus electrònics EMailsSenderProfileDesc=Podeu mantenir aquesta secció buida. Si introduïu alguns correus electrònics aquí, s'afegiran a la llista de possibles remitents al quadre combinat quan escriviu un correu electrònic nou. -MAIN_MAIL_SMTP_PORT=Port SMTP/SMTPS (valor predeterminat a php.ini: %sb09a4b739f17f8) >) -MAIN_MAIL_SMTP_SERVER=Amfitrió SMTP/SMTPS (valor per defecte a php.ini: %sb09a4b739f17f8) >) +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: %s) +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: %s) MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=Port SMTP/SMTPS MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=Amfitrió SMTP/SMTPS MAIN_MAIL_EMAIL_FROM=Correu electrònic del remitent per a correus electrònics automàtics @@ -345,12 +345,12 @@ ThisIsAlternativeProcessToFollow=Aquesta és una configuració alternativa per p StepNb=Pas %s FindPackageFromWebSite=Trobeu un paquet que proporcioni les funcions que necessiteu (per exemple, al lloc web oficial %s). DownloadPackageFromWebSite=Baixeu el paquet (per exemple, des del lloc web oficial %s). -UnpackPackageInDolibarrRoot=Descomprimiu/descomprimiu els fitxers empaquetats al directori del vostre servidor Dolibarr: %sb09a4b739f17f > +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into your Dolibarr server directory: %s UnpackPackageInModulesRoot=Per implementar/instal·lar un mòdul extern, heu de descomprimir/descomprimir el fitxer d'arxiu al directori del servidor dedicat als mòduls externs:
%s SetupIsReadyForUse=S'ha acabat el desplegament del mòdul. Tanmateix, heu d'habilitar i configurar el mòdul a la vostra aplicació anant als mòduls de configuració de la pàgina: %s. NotExistsDirect=El directori arrel alternatiu no està definit per a un directori existent.
InfDirAlt=Des de la versió 3, és possible definir un directori arrel alternatiu. Això us permet emmagatzemar, en un directori dedicat, connectors i plantilles personalitzades.
Creeu només un directori a l'arrel de Dolibarr (per exemple: personalitzat).
-InfDirExample=
A continuació, declara-ho al fitxer conf.php class='notranslate'>
$dolibarr_main_url_root_alt='/custom'
$dolibarr_main_document_root_alt='/path/of'/dolibar='custom/h/dolibar= 'notranslate'>
Si aquestes línies es comenten amb "#", per activar-les, només cal que elimineu el comentari eliminant el caràcter "#". +InfDirExample=
Then declare it in the file conf.php
$dolibarr_main_url_root_alt='/custom'
$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'
If these lines are commented with "#", to enable them, just uncomment by removing the "#" character. YouCanSubmitFile=Podeu carregar el fitxer .zip del paquet del mòdul des d'aquí: CurrentVersion=Dolibarr versió actual CallUpdatePage=Navegueu fins a la pàgina que actualitza l'estructura i les dades de la base de dades: %s. @@ -361,14 +361,14 @@ LastActivationIP=Última IP d'activació LastActivationVersion=Última versió d'activació UpdateServerOffline=Actualitza el servidor fora de línia WithCounter=Gestionar un comptador -GenericMaskCodes=Podeu introduir qualsevol màscara de numeració. En aquesta màscara, es poden utilitzar les etiquetes següents:
{000000}b09a4b739f17f8 /span> correspon a un número que s'incrementarà a cada %s. Introduïu tants zeros com la longitud desitjada del comptador. El comptador es completarà amb zeros des de l'esquerra per tal de tenir tants zeros com la màscara.
{000000+000} igual que l'anterior s'aplica un desplaçament corresponent al número a la dreta del signe + a partir del primer %s.
{000000@x} igual que l'anterior el comptador es reinicia a zero quan s'arriba al mes x (x entre 1 i 12, o 0 per utilitzar els primers mesos de l'any fiscal definits a la vostra configuració, o 99 per restablir a zero cada mes). Si s'utilitza aquesta opció i x és 2 o superior, també es requereix la seqüència {aa}{mm} o {aaaa}{mm}.
{dd} dia (de l'1 al 31).
{mm} mes (de l'1 al 12).
{yy}, b36ae3736ae37 {yyyy}
o {y} any més de 2, 4 o 1 números.
-GenericMaskCodes2={cccc} el codi de client en n caràcters
{cccc000}b09a4b7390 el codi client{cccc000}b09a4b7390> en n caràcters va seguit d'un comptador dedicat al client. Aquest comptador dedicat al client es restableix al mateix temps que el comptador global.
{tttt} El codi del tipus de tercer en n caràcters (vegeu el menú Inici - Configuració - Diccionari - Tipus de tercers). Si afegiu aquesta etiqueta, el comptador serà diferent per a cada tipus de tercers.
+GenericMaskCodes=You may enter any numbering mask. In this mask, the following tags can be used:
{000000} corresponds to a number which will be incremented on each %s. Enter as many zeros as the desired length of the counter. The counter will be completed by zeros from the left in order to have as many zeros as the mask.
{000000+000} same as the previous one but an offset corresponding to the number to the right of the + sign is applied starting on the first %s.
{000000@x} same as the previous one but the counter is reset to zero when month x is reached (x between 1 and 12, or 0 to use the early months of fiscal year defined in your configuration, or 99 to reset to zero every month). If this option is used and x is 2 or higher, then the sequence {yy}{mm} or {yyyy}{mm} is also required.
{dd} day (01 to 31).
{mm} month (01 to 12).
{yy}, {yyyy} or {y} year over 2, 4 or 1 numbers.
+GenericMaskCodes2={cccc} the client code on n characters
{cccc000} the client code on n characters is followed by a counter dedicated to the customer. This counter dedicated to customer is reset at same time as the global counter.
{tttt} The code of third party type on n characters (see menu Home - Setup - Dictionary - Types of third parties). If you add this tag, the counter will be different for each type of third party.
GenericMaskCodes3=Tots els altres caràcters de la màscara romandran intactes.
No es permeten espais.
GenericMaskCodes3EAN=Tots els altres caràcters de la màscara es mantindran intactes (excepte * o ? a la 13a posició de l'EAN13).
No es permeten espais.
span>A EAN13, l'últim caràcter després de l'últim } a la 13a posició hauria de ser * o ? . Se substituirà per la clau calculada.
GenericMaskCodes4a=Exemple del 99è %s del tercer TheCompany, amb data 2023-01-31:
GenericMaskCodes4b=Exemple de tercers creat el 2023-01-31:
> GenericMaskCodes4c=Exemple del producte creat el 31/01/2023:
-GenericMaskCodes5=ABC{yy}{mm}-{000000} donarà b0aee837fz0 span>ABC2301-000099

@00+1{0@019bz0 }-ZZZ/{dd}/XXX donarà 0199-ZZZ/31/XXX
IN{yy}{mm}-{0000}-{t} donarà IN2301-0099-A si el tipus d'empresa "Responsable Inscripto" amb codi per al tipus que és "A_RI" +GenericMaskCodes5=ABC{yy}{mm}-{000000} will give ABC2301-000099
{0000+100@1}-ZZZ/{dd}/XXX will give 0199-ZZZ/31/XXX
IN{yy}{mm}-{0000}-{t} will give IN2301-0099-A if the type of company is 'Responsable Inscripto' with code for type that is 'A_RI' GenericNumRefModelDesc=Retorna un número personalitzable segons una màscara definida. ServerAvailableOnIPOrPort=El servidor està disponible a l'adreça %s al port %s ServerNotAvailableOnIPOrPort=El servidor no està disponible a l'adreça %s al port %s @@ -390,7 +390,7 @@ LanguageFilesCachedIntoShmopSharedMemory=Fitxers .lang carregats a la memòria c LanguageFile=Fitxer d'idiomes ExamplesWithCurrentSetup=Exemples amb la configuració actual ListOfDirectories=Llista de directoris de plantilles d'OpenDocument -ListOfDirectoriesForModelGenODT=Llista de directoris que contenen fitxers de plantilles amb format OpenDocument.

Indiqueu aquí el camí complet dels directoris.
Afegiu un retorn de carro entre cada directori.
Per afegir un directori del mòdul GED, afegiu aquí >DOL_DATA_ROOT/ecm/yourdirectoryname.
b0342fccfda19>
en aquests directorisb ha d'acabar amb .odt o <.ods ='notranslate'>
. +ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.

Put here full path of directories.
Add a carriage return between eah directory.
To add a directory of the GED module, add here DOL_DATA_ROOT/ecm/yourdirectoryname.

Files in those directories must end with .odt or .ods. NumberOfModelFilesFound=Nombre de fitxers de plantilla ODT/ODS trobats en aquests directoris ExampleOfDirectoriesForModelGen=Exemples de sintaxi:
c:\\myapp\\mydocumentdir\\mysubdir
/home/myapp/mydocumentdir/mysubdir
DOL_DATA_ROOT/ecm/ecmdir FollowingSubstitutionKeysCanBeUsed=
Per saber com crear les plantilles de documents odt, abans d'emmagatzemar-les en aquests directoris, llegiu la documentació wiki: @@ -461,11 +461,11 @@ ComputedFormulaDesc=Podeu introduir aquí una fórmula utilitzant altres propiet Computedpersistent=Emmagatzema el camp calculat ComputedpersistentDesc=Els camps addicionals calculats s'emmagatzemaran a la base de dades, però el valor només es tornarà a calcular quan es canviï l'objecte d'aquest camp. Si el camp calculat depèn d'altres objectes o dades globals, aquest valor pot ser incorrecte!! ExtrafieldParamHelpPassword=Si deixeu aquest camp en blanc, vol dir que aquest valor s'emmagatzemarà SENSE xifratge (el camp només s'amaga amb estrelles a la pantalla).

Introduïu valor 'dolcrypt' per codificar el valor amb un algorisme de xifratge reversible. Les dades esborrades encara es poden conèixer i editar, però s'encripten a la base de dades.

Introduïu "auto" (o "md5", 'sha256', 'password_hash', ...) per utilitzar l'algorisme de xifratge de contrasenya predeterminat (o md5, sha256, password_hash...) per desar la contrasenya hash no reversible a la base de dades (no hi ha manera de recuperar el valor original) -ExtrafieldParamHelpselect=La llista de valors ha de ser línies amb clau de format, valor (on la clau no pot ser '0')

, per exemple :
1,value1
2,value2
code3,value3 span class='notranslate'>
...

Per tal que la llista depengui d'un altre llista d'atributs complementària:
1,value1|options_parent_list_codeb0ae64758ba>c3:3z0ba> parent_key
2,value2|options_parent_list_codeb0ae64758parent_key
3:3 class='notranslate'>

Per tal que la llista depengui d'una altra llista:
1, value1|parent_list_code:parent_key
2,value class='notranslate'>
parent_list_code:parent_key -ExtrafieldParamHelpcheckbox=La llista de valors ha de ser línies amb clau de format, valor (on la clau no pot ser '0')

, per exemple :
1,value1
2,value2
3,value3 span class='notranslate'>
... -ExtrafieldParamHelpradio=La llista de valors ha de ser línies amb clau de format, valor (on la clau no pot ser '0')

, per exemple :
1,value1
2,value2
3,value3 span class='notranslate'>
... +ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key +ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... +ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... ExtrafieldParamHelpsellist=La llista de valors prové d'una taula
Sintaxi: table_name:label_field:id_field::filtersql
Exemple: c_typent:libelle: ::filtersql

- id_field és necessàriament una clau int primària
- filtersql és una condició SQL. Pot ser una prova senzilla (per exemple, active=1) per mostrar només el valor actiu
També podeu utilitzar $ID$ al filtre, que és l'identificador actual de l'objecte actual
Per utilitzar SELECT al filtre, utilitzeu la paraula clau $SEL$ per evitar la protecció anti-injecció.
si voleu filtrar els camps addicionals utilitzeu la sintaxi extra.fieldcode=... (on el codi del camp és el codi del camp extra)

Per tenir el llista en funció d'una altra llista d'atributs complementaris:
c_typent:libelle:id:options_parent_list_code |parent_column:filter

Per tal que la llista depengui d'una altra llista:
c_typent:libelle:id:parent_list_code:filter_column>| -ExtrafieldParamHelpchkbxlst=La llista de valors prové d'una taula
Sintaxi: table_name:label_field:id_field::filtersql
Exemple: c_typent:libelle: ::filtersql

el filtre pot ser una prova senzilla (per exemple, active=1) per mostrar només el valor actiu
També podeu utilitzar $ID$ al filtre, que és l'identificador actual de l'objecte actual
Per fer un SELECT al filtre, utilitzeu $SEL$
si voleu filtrar sobre camps extra, utilitzeu la sintaxi extra.fieldcode=... (on el codi del camp és el codi del camp extra)

Per tal que la llista depengui d'una altra llista d'atributs complementaris:
c_typent:libelle:id:options_parent_list_code|parent_column:filter
19bz0notranslate'90fcz0 Per tal que la llista depengui d'una altra llista:
c_typent:libelle:id:parent_list_code|parent_column:filter +ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filtersql
Example: c_typent:libelle:id::filtersql

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Els paràmetres han de ser ObjectName:Classpath
Sintaxi: ObjectName:Classpath ExtrafieldParamHelpSeparator=Manteniu-lo buit per a un separador simple
Definiu-lo a 1 per a un separador que es replega (obert per defecte per a una sessió nova, llavors l'estat es manté per a cada sessió d'usuari)
Definiu-ho a 2 per a un separador que es replega (es replega de manera predeterminada per a una sessió nova, llavors l'estat es manté abans de cada sessió d'usuari) LibraryToBuildPDF=Biblioteca utilitzada per a la generació de PDF @@ -633,7 +633,7 @@ Module600Long=Tingueu en compte que aquest mòdul està dedicat a enviar correus Module610Name=Variants de producte Module610Desc=Permet la creació de variants de producte en funció dels atributs (color, mida, etc.) Module650Name=Llistats de materials (BOM) -Module650Desc=module per definir les vostres factures de Materials (BOM). Es pot utilitzar per a Manufacturing Resource Planificació de la module= 'notranslate'>Manufacturing Comandes (MO) +Module650Desc=Module to define your Bills Of Materials (BOM). Can be used for Manufacturing Resource Planning by the module Manufacturing Orders (MO) Module660Name=Manufacturing Resource Planificació (MRP) Module660Desc=module per gestionar Manufacturing (MO) Module700Name=Donacions @@ -1197,6 +1197,7 @@ Skin=Tema visual DefaultSkin=Tema visual predeterminat MaxSizeList=Longitud màxima per llistats DefaultMaxSizeList=Longitud màxima per defecte per a les llistes +DisplayGrandTotalInList=Display grand total (for all pages) in lists footer DefaultMaxSizeShortList=Longitud màxima per defecte en llistes curtes (per exemple, en la fitxa de client) MessageOfDay=Missatge del dia MessageLogin=Missatge en la pàgina d'inici de sessió @@ -2290,7 +2291,7 @@ DatabasePasswordNotObfuscated=La contrasenya de la base de dades NO està ofusca APIsAreNotEnabled=Els mòduls API no estan habilitats YouShouldSetThisToOff=Hauríeu d'establir-lo a 0 o desactivar-lo InstallAndUpgradeLockedBy=La instal·lació i les actualitzacions estan bloquejades pel fitxer %s -InstallLockedBy=La instal·lació/reinstal·lació està bloquejada pel fitxer %s +InstallLockedBy=La instal·lació/reinstal·lació està bloquejada pel fitxer %s InstallOfAddonIsNotBlocked=Les instal·lacions de mòduls no estan bloquejades. Creeu un arxiu installmodules.lock dins del directori %s per a bloquejar instal·lacions de mòduls externs. OldImplementation=Implementació antiga PDF_SHOW_LINK_TO_ONLINE_PAYMENT=Si alguns mòduls de pagament en línia estan habilitats (Paypal, Stripe, ...), afegiu un enllaç al PDF per a fer el pagament en línia @@ -2405,8 +2406,8 @@ NotAvailableByDefaultEnabledOnModuleActivation=No creat per defecte. Creat nomé CSSPage=Estil CSS Defaultfortype=Defecte DefaultForTypeDesc=Plantilla utilitzada per defecte quan es crea un correu electrònic nou per al tipus de plantilla -OptionXShouldBeEnabledInModuleY=L'opció «%s» s'ha d'habilitar al mòdul %s -OptionXIsCorrectlyEnabledInModuleY=L'opció «%s» està habilitada al mòdul %s +OptionXShouldBeEnabledInModuleY=L'opció «%s» s'ha d'habilitar al mòdul %s +OptionXIsCorrectlyEnabledInModuleY=L'opció «%s» està habilitada al mòdul %s AllowOnLineSign=Permet signatura en línia AtBottomOfPage=A la part inferior de la pàgina FailedAuth=autenticacions fallides @@ -2433,3 +2434,12 @@ UrlPublicInterfaceHelpAdmin=És possible definir un àlies al servidor web i aix ExportUseForce=Use the parameter -f ExportUseForceHelp=Force to continue the export even when an error is found (Backup may not be reliable) CustomPrompt=Custom prompts +AiDescription=AI (Artificial Intelligence) features +AiDescriptionLong=Provides AI (Artificial Intelligence) features in different part of the application. Need external AI API. +AI_KEY_API_CHATGPT= Key for ChatGPT IA api +AiSetup=AI module setup +AiCustomPrompt=AI customs prompt +AI_CONFIGURATIONS_PROMPT=Custom prompt +ImageGeneration=Image generation +AIPromptForFeatures=AI custom prompts for features +EnterAnIP=Enter an IP address diff --git a/htdocs/langs/ca_ES/bills.lang b/htdocs/langs/ca_ES/bills.lang index 98bf4eb16b9..7b1292395b7 100644 --- a/htdocs/langs/ca_ES/bills.lang +++ b/htdocs/langs/ca_ES/bills.lang @@ -174,9 +174,9 @@ FoundXQualifiedRecurringInvoiceTemplate=%s plantilles recurrents de factura qual NotARecurringInvoiceTemplate=No és una plantilla de factura recurrent NewBill=Factura nova LastBills=Últimes %s factures -LatestTemplateInvoices=Últimes %s plantilles de factura -LatestCustomerTemplateInvoices=Últimes %s plantilles de factures de client -LatestSupplierTemplateInvoices=Últimes %s plantilles de factures de proveïdor +LatestTemplateInvoices=Últimes %s plantilles de factura +LatestCustomerTemplateInvoices=Últimes %s plantilles de factures de client +LatestSupplierTemplateInvoices=Últimes %s plantilles de factures de proveïdor LastCustomersBills=Últimes %s factures de client LastSuppliersBills=Últimes %s factures de proveïdor AllBills=Totes les factures @@ -188,7 +188,7 @@ SuppliersDraftInvoices=Esborrany de factures de Proveïdor Unpaid=Pendents ErrorNoPaymentDefined=Error No s'ha definit el pagament ConfirmDeleteBill=Vols eliminar aquesta factura? -ConfirmValidateBill=Esteu segur que voleu validar aquesta factura amb la referència %s
>? +ConfirmValidateBill=Are you sure you want to validate this invoice with the reference %s? ConfirmUnvalidateBill=Està segur de voler tornar la factura %s a l'estat esborrany? ConfirmClassifyPaidBill=Està segur de voler classificar la factura %s com pagada? ConfirmCancelBill=Està segur de voler anul·lar la factura %s? diff --git a/htdocs/langs/ca_ES/compta.lang b/htdocs/langs/ca_ES/compta.lang index b6309e3a625..724d51e1587 100644 --- a/htdocs/langs/ca_ES/compta.lang +++ b/htdocs/langs/ca_ES/compta.lang @@ -254,7 +254,7 @@ CalculationMode=Mode de càlcul AccountancyJournal=Diari de codi de comptable ACCOUNTING_VAT_SOLD_ACCOUNT=Compte (del pla comptable) que s'utilitzarà com a compte predeterminat per a l'IVA a les vendes (utilitzat si no està definit a la configuració del diccionari d'IVA) ACCOUNTING_VAT_BUY_ACCOUNT=Compte (del pla comptable) que s'utilitzarà com a compte predeterminat per a l'IVA a les compres (utilitzat si no està definit a la configuració del diccionari d'IVA) -ACCOUNTING_REVENUESTAMP_SOLD_ACCOUNT=account (del gràfic de account) que s'utilitzarà per al timbre d'ingressos a sales /span> +ACCOUNTING_REVENUESTAMP_SOLD_ACCOUNT=Account (from the Chart Of Account) to be used for the revenue stamp on sales ACCOUNTING_REVENUESTAMP_BUY_ACCOUNT=account (del gràfic de account) que s'utilitzarà per al segell d'ingressos de les compres ACCOUNTING_VAT_PAY_ACCOUNT=Compte (del pla comptable) que s'utilitzarà com a compte predeterminat per a pagar l'IVA ACCOUNTING_VAT_BUY_REVERSE_CHARGES_CREDIT=Compte (del pla comptable) que s'utilitzarà com a compte predeterminat per a l'IVA en compres per a càrrecs inversos (crèdit) diff --git a/htdocs/langs/ca_ES/errors.lang b/htdocs/langs/ca_ES/errors.lang index fb14f50df24..3ee4dbc45da 100644 --- a/htdocs/langs/ca_ES/errors.lang +++ b/htdocs/langs/ca_ES/errors.lang @@ -134,7 +134,7 @@ ErrorLoginDoesNotExists=El compte d'usuari de %s no s'ha trobat. ErrorLoginHasNoEmail=Aquest usuari no té e-mail. Impossible continuar. ErrorBadValueForCode=Valor incorrecte per codi de seguretat. Torna a intentar-ho amb un nou valor... ErrorBothFieldCantBeNegative=Els camps %s i %s no poden ser negatius -ErrorFieldCantBeNegativeOnInvoice=Field %sb071%sb0a6fc0a65 span> Cannot sigui negatiu en aquest tipus de invoice. Si necessiteu afegir un descompte line, només cal create primer el descompte (de Field /span> '%s' a la targeta third-party) and aplica-la a el invoice. +ErrorFieldCantBeNegativeOnInvoice=Field %s cannot be negative on this type of invoice. If you need to add a discount line, just create the discount first (from field '%s' in third-party card) and apply it to the invoice. ErrorLinesCantBeNegativeForOneVATRate=El total de línies (net d’impostos) no pot ser negatiu per a un tipus d’IVA determinat no nul (s’ha trobat un total negatiu per a l’IVA %s %%). ErrorLinesCantBeNegativeOnDeposits=Les línies no poden ser negatives en un dipòsit. Si ho feu, podreu tenir problemes quan necessiteu consumir el dipòsit a la factura final ErrorQtyForCustomerInvoiceCantBeNegative=La quantitat a les línies de factures a client no poden ser negatives @@ -323,7 +323,7 @@ ErrorTheUrlOfYourDolInstanceDoesNotMatchURLIntoOAuthSetup=Error: l'URL de la vos ErrorMenuExistValue=Ja existeix un menú amb aquest títol o URL ErrorSVGFilesNotAllowedAsLinksWithout=Els fitxers SVG no es permeten com a enllaços externs sense l'opció %s ErrorTypeMenu=Impossible afegir un altre menú per al mateix mòdul a la barra de navegació, encara no es gestiona -ErrorObjectNotFound = El object %sb3z0%sb3z914b7 /span> no s'ha trobat, Check el vostre URL +ErrorObjectNotFound = The object %s is not found, please check your url ErrorCountryCodeMustBe2Char=El codi del país ha de ser una cadena de 2 caràcters ErrorABatchShouldNotContainsSpaces=Un número de lot o de sèrie no hauria de contenir espais diff --git a/htdocs/langs/ca_ES/ldap.lang b/htdocs/langs/ca_ES/ldap.lang index ea122ee2993..6854411ca26 100644 --- a/htdocs/langs/ca_ES/ldap.lang +++ b/htdocs/langs/ca_ES/ldap.lang @@ -29,3 +29,5 @@ LDAPPasswordHashType=Tipus hash de contrasenya LDAPPasswordHashTypeExample=Tipus d'hash de contrasenya utilitzat al servidor SupportedForLDAPExportScriptOnly=Només és compatible amb un script d'exportació ldap SupportedForLDAPImportScriptOnly=Només és compatible amb un script d'importació ldap +LDAPUserAccountControl = userAccountControl en la creació (directory actiu) +LDAPUserAccountControlExample = 512 Normal Account / 546 Normal Account + No Passwd + Disabled (see : https://fr.wikipedia.org/wiki/Active_Directory) diff --git a/htdocs/langs/ca_ES/main.lang b/htdocs/langs/ca_ES/main.lang index 668e31b0f39..22fcf6589da 100644 --- a/htdocs/langs/ca_ES/main.lang +++ b/htdocs/langs/ca_ES/main.lang @@ -169,7 +169,7 @@ RemoveLink=Elimina enllaç AddToDraft=Afegeix a esborrany Update=Actualitza Close=Tancar -CloseAs=Indica l'estat +CloseAs=Indica l'estat CloseBox=Elimineu el giny del vostre tauler Confirm=Confirmar ConfirmSendCardByMail=Realment voleu enviar el contingut d'aquesta fitxa per correu a %s? @@ -420,6 +420,8 @@ TotalTTCShort=Total TotalHT=Total (sense IVA) TotalHTforthispage=Total (sense IVA) d'aquesta pàgina Totalforthispage=Total per aquesta pàgina +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=Total TotalTTCToYourCredit=Total a crèdit TotalVAT=Total IVA @@ -647,6 +649,7 @@ ReportName=Nom de l'informe ReportPeriod=Període d'anàlisi ReportDescription=Descripció Report=Informe +Reports=Informes Keyword=Paraula clau Origin=Origen Legend=Llegenda @@ -723,8 +726,8 @@ ValueIsValid=Valor vàlid ValueIsNotValid=Valor invàlid RecordCreatedSuccessfully=Registre creat correctament RecordModifiedSuccessfully=Registre modificat amb èxit -RecordsModified=S'han modificat el(s) registre(s) %s -RecordsDeleted=S'han suprimit el(s) registre(s) %s +RecordsModified=S'han modificat el(s) registre(s) %s +RecordsDeleted=S'han suprimit el(s) registre(s) %s RecordsGenerated=S'han generat el(s) registre(s) %s ValidatedRecordWhereFound = Alguns dels registres seleccionats ja s'han validat. No s'ha suprimit cap registre. AutomaticCode=Creació automàtica de codi @@ -1135,7 +1138,7 @@ More=Més ShowDetails=Mostrar detalls CustomReports=Informes personalitzats StatisticsOn=Estadístiques de -SelectYourGraphOptionsFirst=Seleccioneu les opcions gràfiques per a crear un gràfic +SelectYourGraphOptionsFirst=Seleccioneu les opcions gràfiques per a crear un gràfic Measures=Mesures XAxis=Eix X YAxis=Eix Y diff --git a/htdocs/langs/ca_ES/modulebuilder.lang b/htdocs/langs/ca_ES/modulebuilder.lang index abfd3c413bd..9a562dccec5 100644 --- a/htdocs/langs/ca_ES/modulebuilder.lang +++ b/htdocs/langs/ca_ES/modulebuilder.lang @@ -148,7 +148,7 @@ CSSListClass=CSS per a llistats NotEditable=No editable ForeignKey=Clau forana ForeignKeyDesc=Si s'ha de garantir que el valor d'aquest camp existeix en una altra taula. Introduïu aquí un valor que coincideixi amb la sintaxi: tablename.parentfieldtocheck -TypeOfFieldsHelp=Exemple:
varchar(99)
correu electrònic
telèfon
ip
url
contrasenyab0392bzcc span>double(24,8)
real
text
html
date
datetime
timestamp
integer
integer:ClassName:relativepath/to/classfile.class.php[:1[:filter]]b0342fccfda<1 /span>
'1' significa que afegim un botó + després de la combinació per crear el registre
'filtre' és un Condició de sintaxi del filtre universal, exemple: '((estat:=:1) AND (fk_user:=:__USER_ID__) AND (entity:IN:(__SHARED_ENTITIES__))' +TypeOfFieldsHelp=Example:
varchar(99)
email
phone
ip
url
password
double(24,8)
real
text
html
date
datetime
timestamp
integer
integer:ClassName:relativepath/to/classfile.class.php[:1[:filter]]

'1' means we add a + button after the combo to create the record
'filter' is an Universal Filter syntax condition, example: '((status:=:1) AND (fk_user:=:__USER_ID__) AND (entity:IN:(__SHARED_ENTITIES__))' TypeOfFieldsHelpIntro=Aquest és el tipus de camp/atribut. AsciiToHtmlConverter=Convertidor Ascii a HTML AsciiToPdfConverter=Convertidor Ascii a PDF @@ -180,7 +180,7 @@ FailedToAddCodeIntoDescriptor=No s'ha pogut afegir el codi al descriptor. Compro DictionariesCreated=Diccionari %s creat correctament DictionaryDeleted=El diccionari %s s'ha eliminat correctament PropertyModuleUpdated=La propietat %s s'ha actualitzat correctament -InfoForApiFile=* Quan genereu un fitxer per primera vegada, es crearan tots els mètodes per a cada objecte.
* Quan feu clic a remove només elimineu tots els mètodes de la classe objecte seleccionat. +InfoForApiFile=* When you generate file for the first time then all methods will be created for each object.
* When you click in remove you just remove all methods for the selected object. SetupFile=Pàgina per a la configuració del mòdul EmailingSelectors=Selectors de correus electrònics EmailingSelectorDesc=Podeu generar i editar aquí els fitxers de classe per proporcionar nous selectors de destinació de correu electrònic per al mòdul d'enviament massiu de correu electrònic diff --git a/htdocs/langs/ca_ES/website.lang b/htdocs/langs/ca_ES/website.lang index 325a424b3ec..09f399d201a 100644 --- a/htdocs/langs/ca_ES/website.lang +++ b/htdocs/langs/ca_ES/website.lang @@ -60,11 +60,11 @@ NoPageYet=Encara sense pàgines YouCanCreatePageOrImportTemplate=Podeu crear una pàgina nova o importar una plantilla completa del lloc web SyntaxHelp=Ajuda sobre consells de sintaxi específica YouCanEditHtmlSourceckeditor=Podeu editar el codi font HTML usant el botó "Codi font" a l'editor. -YouCanEditHtmlSource=
Podeu incloure codi PHP en aquesta font utilitzant les etiquetes <?php ?>b90f65fdc070f65fdc0 . Les variables globals següents estan disponibles: $conf, $db, $mysoc, $user, $website, $websitepage, $weblangs, $pagelangs.

També podeu incloure contingut d'una altra pàgina/contenidor amb la sintaxi següent:
<?php includeContainer('alias_of_include'_to_container'); ?>
b0342fc9bz0 /span> Podeu fer una redirecció a una altra pàgina/contenidor amb la sintaxi següent (Nota: no escriviu cap contingut abans d'una redirecció):
<?php redirectToContainer(' àlies_del_contenidor_a_redirigir_a'); ?>
b0342fc9bz0 /span> Per afegir un enllaç a una altra pàgina, utilitzeu la sintaxi:
<a href="alias_of_page_to_link_to.php"b0012c7dcbe087zdcbe087 >mylink<a>

b014f1b93d7c65 Per incloure a classe ='notranslate'>enllaç per baixar un fitxer emmagatzemat als documents, utilitzeu el directori document.php wrapper: >
Per exemple, per a un fitxer en documents/ecm (cal registrar-se), la sintaxi és:
<a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext">
Per a un fitxer en documents o mitjans (directori obert per a l'accés públic), la sintaxi és:
<a="/document.php?modulepart=medias&file=[relative_dir href/] ext">
Per a un fitxer compartit amb un enllaç compartit ( accés obert mitjançant la clau hash per compartir del fitxer), la sintaxi és:
<a href="/document.php?hashp=publicsharekeyoffile">
+YouCanEditHtmlSource=
You can include PHP code into this source using tags <?php ?>. The following global variables are available: $conf, $db, $mysoc, $user, $website, $websitepage, $weblangs, $pagelangs.

You can also include content of another Page/Container with the following syntax:
<?php includeContainer('alias_of_container_to_include'); ?>

You can make a redirect to another Page/Container with the following syntax (Note: do not output any content before a redirect):
<?php redirectToContainer('alias_of_container_to_redirect_to'); ?>

To add a link to another page, use the syntax:
<a href="alias_of_page_to_link_to.php">mylink<a>

To include a link to download a file stored into the documents directory, use the document.php wrapper:
Example, for a file into documents/ecm (need to be logged), syntax is:
<a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext">
For a file into documents/medias (open directory for public access), syntax is:
<a href="/document.php?modulepart=medias&file=[relative_dir/]filename.ext">
For a file shared with a share link (open access using the sharing hash key of file), syntax is:
<a href="/document.php?hashp=publicsharekeyoffile">
YouCanEditHtmlSource1=
Per incloure un imatge emmagatzemat al director de documentsb9z0f65fc0
, utilitzeu l'embolcall viewimage.php.
, per exemple, una imatge a documents/mitjans (directori obert per a accés públic), la sintaxi és:
<img src="/viewimage.php?modulepart=medias&file=[relative_dir/]filename.ext"b0018c7d31ecz0
YouCanEditHtmlSource2=Per a una imatge compartida amb un enllaç compartit (accés obert utilitzant la clau hash de compartició del fitxer), la sintaxi és:
<img src="/viewimage.php?hashp=12345679012...">
YouCanEditHtmlSource3=Per obtenir l'URL de la imatge d'un objecte PHP, utilitzeu
<< span>img src="<?php print getImagePublicURLOfObject($object, 1, "_small") ?>">
-YouCanEditHtmlSourceMore=
Més exemples de codi HTML o dinàmic disponibles a la documentació de la wiki
>.
+YouCanEditHtmlSourceMore=
More examples of HTML or dynamic code available on the wiki documentation.
ClonePage=Clona la pàgina/contenidor CloneSite=Clona el lloc SiteAdded=S'ha afegit el lloc web diff --git a/htdocs/langs/cs_CZ/main.lang b/htdocs/langs/cs_CZ/main.lang index 2aad8317293..11d033bab58 100644 --- a/htdocs/langs/cs_CZ/main.lang +++ b/htdocs/langs/cs_CZ/main.lang @@ -420,6 +420,8 @@ TotalTTCShort=Celkem (vč. DPH) TotalHT=Celkem (bez daně) TotalHTforthispage=Celkem (po zdanění) pro tuto stránku Totalforthispage=Celkový pro tuto stránku +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=Celkem (vč. DPH) TotalTTCToYourCredit=Celkem (vč. DPH) na Váš účet TotalVAT=Daň celkem @@ -647,6 +649,7 @@ ReportName=Název zprávy ReportPeriod=Zpráva za období ReportDescription=Popis Report=Zpráva +Reports=Zprávy Keyword=Klíčové slovo Origin=Původ Legend=Legenda diff --git a/htdocs/langs/da_DK/admin.lang b/htdocs/langs/da_DK/admin.lang index 33989380652..248ef9161b6 100644 --- a/htdocs/langs/da_DK/admin.lang +++ b/htdocs/langs/da_DK/admin.lang @@ -365,9 +365,9 @@ GenericMaskCodes=Du kan indtaste en hvilken som helst nummereringsmaske. I denne GenericMaskCodes2={cccc} kundekoden på n tegn
{cccc000} kundekoden på n tegn efterfølges af en tæller dedikeret til kunden. Denne tæller nulstilles samtidig med den globale tæller.
{tttt} Koden for tredjepartstype på n tegn (se menuen Hjem - Opsætning - Ordbøger - Tredjepartstyper). Hvis du tilføjer dette tag, vil tælleren være forskellig for hver type tredjepart.
GenericMaskCodes3=Alle andre tegn i masken forbliver intakte.
Mellemrum er ikke tilladt.
GenericMaskCodes3EAN=Alle andre tegn i masken forbliver intakte (undtagen * eller ? i 13. position i EAN13).
Mellemrum er ikke tilladt.
I EAN13 skal det sidste tegn efter det sidste } i 13. position være * eller ? . Det erstattes af det beregnede kontrolciffer.
-GenericMaskCodes4a= Eksempel den 99. %s af tredjeparten TheCompany, med dato 2023-01-31:
-GenericMaskCodes4b= Eksempel på tredjepart oprettet 2023-01-31:
-GenericMaskCodes4c= Eksempel på produkt oprettet 31-01-2023:
+GenericMaskCodes4a= Eksempel den 99. %s af tredjeparten TheCompany, med dato 2023-01-31:
+GenericMaskCodes4b= Eksempel på tredjepart oprettet 2023-01-31:
+GenericMaskCodes4c= Eksempel på produkt oprettet 31-01-2023:
GenericMaskCodes5= ABC{åå}{mm}-{000000} vil give ABC2301-000099
{0000+100@1}-ZZZ/{dd}/XXX vil give 0199-ZZZ/31/XXX
IN{åå}{mm}-{0000}-{t} vil give IN2301-0099-A hvis virksomhedens type er 'Responsable Inscripto' med kode for typen, der er 'A_RI' GenericNumRefModelDesc=Returnerer et bruger tilpasset tal i henhold til en defineret maske. ServerAvailableOnIPOrPort=Serveren er tilgængelig på adressen %s på port %s @@ -464,7 +464,7 @@ ExtrafieldParamHelpPassword=At lade dette felt stå tomt betyder, at denne værd ExtrafieldParamHelpselect=Liste over værdier skal være linjer med formatet nøgle,værdi (hvor nøgle ikke kan være '0')

f.eks.:
1,value1
2,value2
code3,value3
...

For at gøre listen afhængig af en anden supplerende attributliste:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

For at gøre listen afhængig af en anden liste:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=Liste over værdier skal være linjer med formatet nøgle,værdi (hvor nøgle ikke kan være '0')

f.eks.:
1,value1
2,value2
3,value3
... ExtrafieldParamHelpradio=Liste over værdier skal være linjer med formatet nøgle,værdi (hvor nøgle ikke kan være '0')

f.eks.:
1,value1
2,value2
3,value3
... -ExtrafieldParamHelpsellist=Liste over værdier kommer fra en tabel
Syntaks: tabelnavn:label_field:id_field::filtersql
Eksempel: c_idtypent:libelle: ::filtersql

- id_field er nødvendigvis en primær int-nøgleb0342fccfdaspan19bz> - filtersql er en SQL-betingelse. Det kan være en simpel test (f.eks. active=1) kun at vise aktiv værdi
Du kan også bruge $ID$ i filter, som er det aktuelle id for det aktuelle objekt
For at bruge en SELECT i filteret, skal du bruge søgeordet $SEL$ for at omgå anti-injection beskyttelse.
hvis du vil filtrere på ekstrafelter brug syntaks extra.fieldcode=... (hvor feltkoden er koden for extrafield)

For at have liste afhængig af en anden komplementær attributliste:
c_typent:libelle:id:options_parent_list_code |parent_column:filter

For at få listen afhængig af en anden liste:
c_typent:libelle:id:parent_list_code:forælder +ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filtersql
Example: c_typent:libelle:id::filtersql

- id_field is necessarily a primary int key
- filtersql is a SQL condition. It can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter which is the current id of current object
To use a SELECT into the filter use the keyword $SEL$ to bypass anti-injection protection.
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=Liste over værdier kommer fra en tabel
Syntaks: table_name:label_field:id_field::filtersql
Eksempel: c_typent:libelle:id::filtersql

filter kan være en simpel test (f.eks. aktiv=1) for kun at vise aktiv værdi
Du kan også bruge $ID$ i filter, som er det nuværende id for det aktuelle objekt
For at bruge en SELECT i filteret skal du bruge nøgleordet $SEL$
hvis du vil filtrere på ekstrafelter, brug syntaks extra.fieldcode=... (hvor fieldcode er koden for ekstrafelt)

For at få listen afhængig af en anden supplerende egenskabsliste:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

For at gøre listen afhængig af en anden liste:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parametre skal være ObjectName:Classpath
Syntaks: ObjectName:Classpath ExtrafieldParamHelpSeparator=Hold tom for en simpel adskiller
Indstil denne til 1 for en kollapsende separator (åben som standard for ny session, så beholdes status for hver brugersession)
Indstil denne til 2 for en kollapsende separator (skjulet som standard for ny session, så beholdes status før hver brugersession) @@ -1197,6 +1197,7 @@ Skin=Skin tema DefaultSkin=Standard skin tema MaxSizeList=Maksimal længde for liste DefaultMaxSizeList=Standard maks. længde for lister +DisplayGrandTotalInList=Vis totalsum (for alle sider) i listernes sidefod DefaultMaxSizeShortList=Standard maksimal længde for korte lister (dvs. i kundekort) MessageOfDay=Dagens budskab MessageLogin=Besked på login-siden @@ -2433,3 +2434,12 @@ UrlPublicInterfaceHelpAdmin=Det er muligt at definere et alias til webserveren o ExportUseForce=Brug parameteren -f ExportUseForceHelp=Tving til at fortsætte eksporten, selv når der er fundet en fejl (sikkerhedskopi er muligvis ikke pålidelig) CustomPrompt=Brugerdefinerede prompter +AiDescription=AI (Artificial Intelligence) funktioner +AiDescriptionLong=Giver AI (Artificial Intelligence) funktioner i forskellige dele af applikationen. Har brug for ekstern AI API. +AI_KEY_API_CHATGPT= Nøgle til ChatGPT IA api +AiSetup=AI-modulopsætning +AiCustomPrompt=AI toldprompt +AI_CONFIGURATIONS_PROMPT=Brugerdefineret prompt +ImageGeneration=Billedgenerering +AIPromptForFeatures=AI brugerdefinerede prompter om funktioner +EnterAnIP=Indtast en IP-adresse diff --git a/htdocs/langs/da_DK/eventorganization.lang b/htdocs/langs/da_DK/eventorganization.lang index 9a00af1f6f2..1a3f0f461be 100644 --- a/htdocs/langs/da_DK/eventorganization.lang +++ b/htdocs/langs/da_DK/eventorganization.lang @@ -75,7 +75,7 @@ EventOrganizationEmailBoothPayment = Betaling af din bod EventOrganizationEmailRegistrationPayment = Tilmelding til et arrangement EventOrganizationMassEmailAttendees = Kommunikation til deltagere EventOrganizationMassEmailSpeakers = Kommunikation til taler -ToSpeakers=Til talere +ToSpeakers=Til talere # # Event @@ -88,6 +88,7 @@ PriceOfRegistration=Pris for registrering PriceOfRegistrationHelp=Pris at betale for at tilmelde sig eller deltage i arrangementet PriceOfBooth=Abonnementspris for at stå en kabine PriceOfBoothHelp=Abonnementspris for at stå en kabine +EventOrganizationICSLinkProject=Link ICS til begivenheden EventOrganizationICSLink=Link ICS til konferencer ConferenceOrBoothInformation=Konference eller stand information Attendees=Deltagere diff --git a/htdocs/langs/da_DK/main.lang b/htdocs/langs/da_DK/main.lang index 800263d9259..d3a2853669b 100644 --- a/htdocs/langs/da_DK/main.lang +++ b/htdocs/langs/da_DK/main.lang @@ -420,6 +420,8 @@ TotalTTCShort=I alt (m/moms) TotalHT=I alt (u/moms) TotalHTforthispage=I alt (ekskl. moms) for denne side Totalforthispage=I alt for denne side +GrandTotal=Totalt +TotalforAllPages=I alt for alle sider TotalTTC=I alt (m/moms) TotalTTCToYourCredit=I alt (inkl. moms) til din kredit TotalVAT=Moms i alt @@ -647,6 +649,7 @@ ReportName=Rapportnavn ReportPeriod=Beretningsperioden ReportDescription=Beskrivelse Report=Rapport +Reports=Reporter Keyword=Nøgleord Origin=Oprindelse Legend=Legend @@ -1204,7 +1207,7 @@ ConfirmMassLeaveApprovalQuestion=Er du sikker på, at du vil godkende de (n) val ConfirmMassLeaveApproval=Godkendelse af masseorlov RecordAproved=Rekord godkendt RecordsApproved=%s Registrering (er) godkendt -Properties=rettigheder +Properties=rettigheder hasBeenValidated=%s er valideret ClientTZ=Kunden Tidszone (bruger) NotClosedYet=Endnu ikke lukket diff --git a/htdocs/langs/da_DK/modulebuilder.lang b/htdocs/langs/da_DK/modulebuilder.lang index 747d04630dd..c53cdeadfeb 100644 --- a/htdocs/langs/da_DK/modulebuilder.lang +++ b/htdocs/langs/da_DK/modulebuilder.lang @@ -86,7 +86,7 @@ IsAMeasure=Er en foranstaltning DirScanned=Directory scannet NoTrigger=Ingen udløser NoWidget=Ingen widget -ApiExplorer=API udforske +ApiExplorer=API udforske ListOfMenusEntries=Liste over menupunkter ListOfDictionariesEntries=Liste over poster i ordbøger ListOfPermissionsDefined=Liste over definerede tilladelser @@ -148,7 +148,7 @@ CSSListClass=CSS til liste NotEditable=Ikke redigerbar ForeignKey=Fremmed nøgle ForeignKeyDesc=Hvis værdien af dette felt skal garanteres at eksistere i en anden tabel. Indtast her en værdi, der matcher syntaks: tablename.parentfieldtocheck -TypeOfFieldsHelp=Eksempel:
varchar(99)
e-mail
telefon
ip
url
adgangskodefzccdouble(24,8)
real
text
html
date
datetime
tidsstempel
integer
integer:ClassName:relativepath/to/classfile.class.php[:1[:filter]]b0342fccfda19b /span>
'1' betyder, at vi tilføjer en +-knap efter kombinationen for at oprette posten
'filter' er et Universal Filter-syntaksbetingelse, eksempel: '((status:=:1) AND (fk_user:=:__USER_ID__) AND (entity:IN:(__SHARED_ENTITIES__))' +TypeOfFieldsHelp=Example:
varchar(99)
email
phone
ip
url
password
double(24,8)
real
text
html
date
datetime
timestamp
integer
integer:ClassName:relativepath/to/classfile.class.php[:1[:filter]]

'1' means we add a + button after the combo to create the record
'filter' is an Universal Filter syntax condition, example: '((status:=:1) AND (fk_user:=:__USER_ID__) AND (entity:IN:(__SHARED_ENTITIES__))' TypeOfFieldsHelpIntro=Dette er typen af feltet/attributten. AsciiToHtmlConverter=Ascii til HTML-konverter AsciiToPdfConverter=Ascii til PDF konverter @@ -180,7 +180,7 @@ FailedToAddCodeIntoDescriptor=Kunne ikke tilføje kode i beskrivelsen. Tjek, at DictionariesCreated=Ordbog %s oprettet med succes DictionaryDeleted=Ordbog %s fjernet med succes PropertyModuleUpdated=Ejendommen %s er blevet opdateret. -InfoForApiFile=* Når du genererer fil for første gang, vil alle metoder blive oprettet for hvert objekt.
* Når du klikker i remove fjerner du bare alle klassemetoder for valgt objekt. +InfoForApiFile=* When you generate file for the first time then all methods will be created for each object.
* When you click in remove you just remove all methods for the selected object. SetupFile=Side for modulopsætning EmailingSelectors=E-mail-vælgere EmailingSelectorDesc=Du kan generere og redigere klassefilerne her for at give nye e-mail-målvælgere til masse-e-mail-modulet diff --git a/htdocs/langs/da_DK/other.lang b/htdocs/langs/da_DK/other.lang index 525f9069ff6..da0e7dea576 100644 --- a/htdocs/langs/da_DK/other.lang +++ b/htdocs/langs/da_DK/other.lang @@ -31,7 +31,7 @@ PreviousYearOfInvoice=Tidligere års faktura dato NextYearOfInvoice=Følgende års faktura dato DateNextInvoiceBeforeGen=Dato for næste faktura (før generation) DateNextInvoiceAfterGen=Dato for næste faktura (efter generation) -GraphInBarsAreLimitedToNMeasures=Grafik er begrænset til %s foranstaltninger i 'Bars' mode. Tilstanden "Lines blev automatisk valgt i stedet. +GraphInBarsAreLimitedToNMeasures=Grafik er begrænset til %s mål i 'Bars'-tilstand. Tilstanden 'Linjer' blev automatisk valgt i stedet for. OnlyOneFieldForXAxisIsPossible=Kun 1 felt er i øjeblikket muligt som X-Axis. Kun det første valgte felt er valgt. AtLeastOneMeasureIsRequired=Mindst 1 felt til mål er påkrævet AtLeastOneXAxisIsRequired=Mindst 1 felt til X-Axis kræves @@ -45,6 +45,7 @@ Notify_ORDER_CLOSE=Salgsordre leveret Notify_ORDER_SUPPLIER_SENTBYMAIL=Indkøbsordre sendt via e-mail Notify_ORDER_SUPPLIER_VALIDATE=Indkøbsordre registreret Notify_ORDER_SUPPLIER_APPROVE=Indkøbsordre godkendt +Notify_ORDER_SUPPLIER_SUBMIT=Indkøbsordre afgivet Notify_ORDER_SUPPLIER_REFUSE=Indkøbsordre afvist Notify_PROPAL_VALIDATE=Tilbud godkendt Notify_PROPAL_CLOSE_SIGNED=Kundeforslag er lukket underskrevet @@ -63,9 +64,10 @@ Notify_BILL_SENTBYMAIL=Kundens faktura sendes med posten Notify_BILL_SUPPLIER_VALIDATE=Leverandør faktura valideret Notify_BILL_SUPPLIER_PAYED=Sælgerfaktura betalt Notify_BILL_SUPPLIER_SENTBYMAIL=Leverandørfaktura sendt med posten -Notify_BILL_SUPPLIER_CANCELED=Leverandør faktura annulleret +Notify_BILL_SUPPLIER_CANCELED=Leverandørfaktura annulleret Notify_CONTRACT_VALIDATE=Kontrakt bekræftet Notify_FICHINTER_VALIDATE=Intervention bekræftet +Notify_FICHINTER_CLOSE=Intervention lukket Notify_FICHINTER_ADD_CONTACT=Tilføjet kontakt til intervention Notify_FICHINTER_SENTBYMAIL=Intervention sendt via post Notify_SHIPPING_VALIDATE=Forsendelse bekræftet @@ -190,7 +192,11 @@ EnableGDLibraryDesc=Installer eller aktiver GD bibliotek på din PHP installatio ProfIdShortDesc=Prof Id %s er en information afhængigt tredjepart land.
For eksempel, for land %s, er det kode %s. DolibarrDemo=Dolibarr ERP / CRM demo StatsByAmount=Statistik over mængden af produkter/ydelser +StatsByAmountProducts=Statistik over mængden af produkter +StatsByAmountServices=Statistik over mængden af tjenester StatsByNumberOfUnits=Statistikker for summen af ​​produkter / tjenester +StatsByNumberOfUnitsProducts=Statistik for summen af antal produkter +StatsByNumberOfUnitsServices=Statistik for summen af antal tjenester StatsByNumberOfEntities=Statistik for antallet af henvisende enheder (antal fakturaer eller ordrer ...) NumberOf=Antal %s NumberOfUnits=Antal enheder på %s @@ -198,6 +204,7 @@ AmountIn=Beløb i %s NumberOfUnitsMos=Antal enheder, der skal produceres i produktionsordrer EMailTextInterventionAddedContact=En ny intervention %s er blevet tildelt dig. EMailTextInterventionValidated=Intervention %s bekræftet +EMailTextInterventionClosed=Interventionen %s er blevet lukket. EMailTextInvoiceValidated=Fakturaen %s er godkendt. EMailTextInvoicePayed=Faktura %s er blevet betalt. EMailTextProposalValidated=Tilbud %s er godkendt. @@ -207,11 +214,10 @@ EMailTextProposalClosedRefused=Forslag %s er blevet lukket afvist. EMailTextProposalClosedRefusedWeb=Forslag %s er blevet lukket afvise på portalsiden. EMailTextOrderValidated=Bestillingen %s er godkendt. EMailTextOrderClose=Ordren %s er blevet leveret. -EMailTextOrderApproved=Ordren %s er godkendt. -EMailTextOrderValidatedBy=Orden %s er indskrevet af%s. -EMailTextOrderApprovedBy=Orden %s er godkendt af%s. -EMailTextOrderRefused=Ordren %s er blevet afvist. -EMailTextOrderRefusedBy=Orden %s er blevet afvist af %s. +EMailTextSupplierOrderApprovedBy=Indkøbsordre %s er blevet godkendt af %s. +EMailTextSupplierOrderValidatedBy=Indkøbsordre %s er blevet registreret af %s. +EMailTextSupplierOrderSubmittedBy=Indkøbsordre %s er blevet indsendt af %s. +EMailTextSupplierOrderRefusedBy=Indkøbsordre %s er blevet afvist af %s. EMailTextExpeditionValidated=Forsendelse %s er godkendt. EMailTextExpenseReportValidated=Udgiftsrapport %s er godkendt. EMailTextExpenseReportApproved=Udgiftsrapport %s er godkendt. @@ -289,10 +295,12 @@ LinesToImport=Linjer at importere MemoryUsage=Brug af hukommelse RequestDuration=Anmodningens varighed -ProductsPerPopularity=Produkter / Ydelser efter popularitet -PopuProp=Produkter/tjenester efter popularitet i forslag -PopuCom=Produkter/tjenester efter popularitet i ordrer -ProductStatistics=Produkter / services statistik +ProductsServicesPerPopularity=Produkter|Tjenester efter popularitet +ProductsPerPopularity=Produkter efter popularitet +ServicesPerPopularity=Tjenester efter popularitet +PopuProp=Produkter|Tjenester efter popularitet i Forslag +PopuCom=Produkter|Tjenester efter popularitet i ordrer +ProductStatistics=Produkter|Tjenester Statistik NbOfQtyInOrders=Antal i ordrer SelectTheTypeOfObjectToAnalyze=Vælg et objekt for at se dets statistik ... @@ -328,3 +336,5 @@ FTPFailedToUploadFile=Kunne ikke uploade filen %s . AddFolder=Opret mappe FileWasCreateFolder=Mappe %s er blevet oprettet FTPFailedToCreateFolder=Kunne ikke oprette mappen %s . +SelectADay=Vælg en dag i kalenderen +SelectANewDate=Vælg en ny dato diff --git a/htdocs/langs/da_DK/products.lang b/htdocs/langs/da_DK/products.lang index 6742aa7cd8e..7312d0e0171 100644 --- a/htdocs/langs/da_DK/products.lang +++ b/htdocs/langs/da_DK/products.lang @@ -208,11 +208,6 @@ unitSET=Sæt unitS=Sekund unitH=Time unitD=Dag -unitG=Gram -unitM=Meter -unitLM=Lineær meter -unitM2=Kvadratmeter -unitM3=Kubikmeter unitL=Liter unitT=ton unitKG=kg @@ -221,6 +216,7 @@ unitMG=mg unitLB=pund unitOZ=unse unitM=Meter +unitLM=Lineær meter unitDM=dm unitCM=cm unitMM=mm @@ -240,7 +236,7 @@ unitFT3=ft³ unitIN3=in³ unitOZ3=unse unitgallon=gallon -ProductCodeModel=Skabelon for vare-ref +ProductCodeModel=Skabelon for vare-ref ServiceCodeModel=Service ref skabelon CurrentProductPrice=Nuværende pris AlwaysUseNewPrice=Brug altid den aktuelle pris for vare/ydelse @@ -437,3 +433,6 @@ ModifyValueExtrafields = Ændre værdien af et ekstrafelt OrProductsWithCategories=Eller produkter med tags/kategorier WarningTransferBatchStockMouvToGlobal = Hvis du ønsker at deserialisere dette produkt, vil hele dets serialiserede lager blive omdannet til globalt lager WarningConvertFromBatchToSerial=Hvis du i øjeblikket har en mængde højere eller lig med 2 for produktet, betyder skift til dette valg, at du stadig vil have et produkt med forskellige objekter af samme batch (mens du ønsker et unikt serienummer). Duplikatet forbliver indtil en opgørelse eller en manuel lagerbevægelse for at rette dette. +AllowStockMovementVariantParent=Registrerer også lagerbevægelser på moderprodukter af variantprodukter +AllowStockMovementVariantParentHelp=Som standard er en forælder til en variant et virtuelt produkt, så der administreres ikke noget lager for det. Ved at aktivere denne mulighed, vil et lager blive administreret for overordnede produkter, og hver gang en lagermængde ændres for et variantprodukt, vil den samme mængde blive ændret for moderproduktet. Du bør ikke have brug for denne mulighed, undtagen hvis du bruger variant til at administrere det samme produkt end forælderen (men med forskellige beskrivelser, priser...) +ConfirmSetToDraftInventory=Er du sikker på, at du vil gå tilbage til Kladdestatus?
De mængder, der i øjeblikket er indstillet i beholdningen, nulstilles. diff --git a/htdocs/langs/da_DK/resource.lang b/htdocs/langs/da_DK/resource.lang index 8c442abdbaf..df36d38414d 100644 --- a/htdocs/langs/da_DK/resource.lang +++ b/htdocs/langs/da_DK/resource.lang @@ -37,3 +37,5 @@ ImportDataset_resource_1=Ressourcer ErrorResourcesAlreadyInUse=Nogle ressourcer er i brug ErrorResourceUseInEvent=%s bruges i %s tilfælde + +MaxUsers=Maksimalt antal brugere (pladser, sæder osv.) diff --git a/htdocs/langs/da_DK/website.lang b/htdocs/langs/da_DK/website.lang index 7a6cd477ee4..b12df56a609 100644 --- a/htdocs/langs/da_DK/website.lang +++ b/htdocs/langs/da_DK/website.lang @@ -60,11 +60,11 @@ NoPageYet=Ingen sider endnu YouCanCreatePageOrImportTemplate=Du kan oprette en ny side eller importere en fuld hjemmeside skabelon SyntaxHelp=Hjælp til specifikke syntax tips YouCanEditHtmlSourceckeditor=Du kan redigere HTML-kildekode ved hjælp af knappen "Kilde" i editoren. -YouCanEditHtmlSource=
Du kan inkludere PHP-kode i denne kilde ved hjælp af tags <?php ?>
b03492bzfcc Du kan foretage en omdirigering til en anden side/beholder med følgende syntaks (Bemærk: udskriv ikke nogen indhold før en omdirigering):
<?php redirectToContainer alias_of_container_to_redirect_to'); ?>
b03492bzfcc For at tilføje et link til en anden side skal du bruge syntaksen:
<a href="alias_of_page_to_link_to.php"b0012c7z0mylink<a>

To include a <
link til download en fil gemt i dokumenterne
bibliotek, brug document.php class='notranslate' wrapper: >

Eksempel, for en fil til dokumenter/ecm (skal logges), er syntaksen:
><a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext">
For en fil til dokumenter/medier (åben mappe til offentlig adgang), er syntaksen:
<a href="/document.php?modulepart=medias&file=]relative_dir/ ext">
For en fil, der deles med et delingslink ( åben adgang ved hjælp af filens hash-nøgle), syntaks er:
<a href="/document.php?hashp=publicsharekeyoffile">
+YouCanEditHtmlSource=
You can include PHP code into this source using tags <?php ?>. The following global variables are available: $conf, $db, $mysoc, $user, $website, $websitepage, $weblangs, $pagelangs.

You can also include content of another Page/Container with the following syntax:
<?php includeContainer('alias_of_container_to_include'); ?>

You can make a redirect to another Page/Container with the following syntax (Note: do not output any content before a redirect):
<?php redirectToContainer('alias_of_container_to_redirect_to'); ?>

To add a link to another page, use the syntax:
<a href="alias_of_page_to_link_to.php">mylink<a>

To include a link to download a file stored into the documents directory, use the document.php wrapper:
Example, for a file into documents/ecm (need to be logged), syntax is:
<a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext">
For a file into documents/medias (open directory for public access), syntax is:
<a href="/document.php?modulepart=medias&file=[relative_dir/]filename.ext">
For a file shared with a share link (open access using the sharing hash key of file), syntax is:
<a href="/document.php?hashp=publicsharekeyoffile">
YouCanEditHtmlSource1=
At inkludere en image gemt i dokumenternedirektorie , brug viewimage.php-indpakningen.
,Example, et billede i dokumenter/medier (åben mappe til offentlig adgang), syntaks er:
<img src="/viewimage.php?modulepart=medias&file=[relative_dir/]filename.ext"
YouCanEditHtmlSource2=For et billede, der deles med et delingslink (åben adgang ved hjælp af deling af hash-nøglen til filen), er syntaks:
<img src = "/ viewimage.php? Hashp = 12345679012 ..."
-YouCanEditHtmlSource3=For at få URL'en til billedet af et PHP-objekt skal du bruge
< span>img src="<?php print getImagePublicURLOfObject($object, 1, "_small") ?>"" class='notranslate'>>
-YouCanEditHtmlSourceMore=
Flere eksempler på HTML eller dynamisk kode tilgængelig på wiki-dokumentationen >.
+YouCanEditHtmlSource3=To get the URL of the image of a PHP object, use
<img src="<?php print getImagePublicURLOfObject($object, 1, "_small") ?>">
+YouCanEditHtmlSourceMore=
More examples of HTML or dynamic code available on the wiki documentation.
ClonePage=Klon side / container CloneSite=Klon website SiteAdded=Hjemmeside tilføjet diff --git a/htdocs/langs/de_AT/datapolicy.lang b/htdocs/langs/de_AT/datapolicy.lang deleted file mode 100644 index b73db9bf6c4..00000000000 --- a/htdocs/langs/de_AT/datapolicy.lang +++ /dev/null @@ -1,11 +0,0 @@ -# Dolibarr language file - Source file is en_US - datapolicy -datapolicySetupPage =Depending on the laws of your countries (Example Article 5 of the GDPR), personal data must be kept for a period not exceeding the duration the data is needed for the purpose for which it was collected, except for archival purposes.
The deletion will be done automatically after a certain duration without events (the duration which you will have indicated below). -DATAPOLICYSUBJECTMAIL =Subject of the email -DATAPOLICYREFUSE =Message after disagreement -TXTLINKDATAPOLICYREFUSE =Text for the link "disagreement" -DATAPOLICY_opposition_traitement =Opposes to the processing of his personal data -DATAPOLICY_opposition_prospection =Opposes to the processing of his personal data for the purposes of prospecting -DATAPOLICY_date =Date of agreement/disagreement GDPR -DATAPOLICY_send =Date agreement email sent -=Due to a technical problem, we were unable to register your choice. We apologize for that. Contact us to notify us your choice. -NUMBER_MONTH_BEFORE_DELETION =Number of months before deletion diff --git a/htdocs/langs/de_CH/admin.lang b/htdocs/langs/de_CH/admin.lang index 0ebdf950bea..5b12be91cba 100644 --- a/htdocs/langs/de_CH/admin.lang +++ b/htdocs/langs/de_CH/admin.lang @@ -161,7 +161,6 @@ MAIN_MAIL_AUTOCOPY_TO=Automatische Blindkopie (BCC) aller gesendeten Mails an: MAIN_DISABLE_ALL_MAILS=Deaktiviere alle E-Mail-Funktionen (für Test- oder Demozwecke) MAIN_MAIL_FORCE_SENDTO=Sende alle Emails an diese Adresse zum Test (statt an die echten Empfänger) MAIN_MAIL_ENABLED_USER_DEST_SELECT=E-Mails von Mitarbeitern (sofern definiert) beim Schreiben einer neuen E-Mail in die Liste der vordefinierten Empfänger vorschlagen -MAIN_MAIL_SENDMODE=Sending method MAIN_MAIL_SMTPS_ID=SMTP - Benutzer (wenn Authentifizierung durch Ausgangsserver erforderlich) MAIN_MAIL_SMTPS_PW=SMTP - Passwort (wenn Authentifizierung durch Ausgangsserver erforderlich) MAIN_MAIL_EMAIL_TLS=TLS (SSL)-Verschlüsselung verwenden @@ -336,7 +335,6 @@ Module2500Desc=Document - / Electronic Content Management System. Deine Dokument Module2660Desc=Aktivieren Sie den Dolibarr Webservice-Client (Kann verwendet werden, um Daten/Anfragen an externe Server zu übertragen. Nur Lieferantenbestellungen werden derzeit unterstützt.) Module2700Desc=Benutze den Gravatar - Dienst, um Fotos von deinen Benutzern und Mitgliedern darzustellen. (www.gravatar.com) Module3200Name=Unveränderbare Archive -Module10000Desc=CMS to create websites with a WYSIWYG editor. This is a webmaster or developer oriented Content Management System (it is better to know HTML and CSS language). Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the internet with your own domain name. Module20000Name=Ferienverwaltung Module20000Desc=Mitarbeiterurlaubsanträge erfassen und verfolgen Module40000Name=Multiwährungsfähigkeit diff --git a/htdocs/langs/de_CH/datapolicy.lang b/htdocs/langs/de_CH/datapolicy.lang deleted file mode 100644 index b73db9bf6c4..00000000000 --- a/htdocs/langs/de_CH/datapolicy.lang +++ /dev/null @@ -1,11 +0,0 @@ -# Dolibarr language file - Source file is en_US - datapolicy -datapolicySetupPage =Depending on the laws of your countries (Example Article 5 of the GDPR), personal data must be kept for a period not exceeding the duration the data is needed for the purpose for which it was collected, except for archival purposes.
The deletion will be done automatically after a certain duration without events (the duration which you will have indicated below). -DATAPOLICYSUBJECTMAIL =Subject of the email -DATAPOLICYREFUSE =Message after disagreement -TXTLINKDATAPOLICYREFUSE =Text for the link "disagreement" -DATAPOLICY_opposition_traitement =Opposes to the processing of his personal data -DATAPOLICY_opposition_prospection =Opposes to the processing of his personal data for the purposes of prospecting -DATAPOLICY_date =Date of agreement/disagreement GDPR -DATAPOLICY_send =Date agreement email sent -=Due to a technical problem, we were unable to register your choice. We apologize for that. Contact us to notify us your choice. -NUMBER_MONTH_BEFORE_DELETION =Number of months before deletion diff --git a/htdocs/langs/de_CH/orders.lang b/htdocs/langs/de_CH/orders.lang index fbf4c28bfcc..391e49b0ea5 100644 --- a/htdocs/langs/de_CH/orders.lang +++ b/htdocs/langs/de_CH/orders.lang @@ -56,7 +56,6 @@ RefOrderSupplier=Bestellnummer für den Lieferanten RefOrderSupplierShort=Lieferanten - Bestellnummer OrderMode=Bestellweise ConfirmCloneOrder=Bist du sicher, dass du die Bestellung %s duplizieren willst? -SupplierOrderSubmitedInDolibarr=Purchase Order %s submitted (%s) SupplierOrderClassifiedBilled=Lieferantenbestellung %s verrechnet OtherOrders=Weitere Bestellungen SupplierOrderValidated=Lieferantenbestellung ist freigegeben: diff --git a/htdocs/langs/de_DE/admin.lang b/htdocs/langs/de_DE/admin.lang index 6caf435cb84..c893ec5ac05 100644 --- a/htdocs/langs/de_DE/admin.lang +++ b/htdocs/langs/de_DE/admin.lang @@ -12,7 +12,7 @@ VersionDevelopment=Entwicklung VersionUnknown=Unbekannt VersionRecommanded=Empfohlen FileCheck= Integritätsprüfung Dateien -FileCheckDesc=Dieses Tool ermöglicht es Ihnen, die Datei-Integrität und das Setup der Anwendung zu überprüfen, indem jede Datei mit der offiziellen Version verglichen wird. Der Wert einiger Setup-Konstanten kann ebenso überprüft werden. Sie können dieses Tool verwenden, um festzustellen, ob Dateien verändert wurden (z.B. durch einen Hacker). +FileCheckDesc=Dieses Tool ermöglicht es Ihnen, die Datei-Integrität und das Setup der Anwendung zu überprüfen, indem jede Datei mit der offiziellen Version verglichen wird. Der Wert einiger Setup-Konstanten kann ebenso überprüft werden. Sie können dieses Tool verwenden, um festzustellen, ob Dateien verändert wurden (z.B. durch einen Hacker). FileIntegrityIsStrictlyConformedWithReference=Dateiintegrität entspricht genau der Referenz. FileIntegrityIsOkButFilesWereAdded=Die Dateiintegritätsprüfung wurde bestanden, jedoch wurden einige neue Dateien hinzugefügt. FileIntegritySomeFilesWereRemovedOrModified=Datei-Integrität konnte NICHT bestätigt werden. Dateien wurden modifiziert, entfernt oder hinzugefügt. @@ -32,7 +32,7 @@ SessionSaveHandler=Session Handler SessionSavePath=Pfad für Sitzungsdatenspeicherung PurgeSessions=Bereinigung von Sessions ConfirmPurgeSessions=Wollen Sie wirklich alle Sitzungen beenden? Dadurch werden alle Benutzer getrennt (ausser Ihnen). -NoSessionListWithThisHandler=Anzeige der aller aktiven Sitzungen mit Ihrer PHP-Konfiguration nicht möglich. +NoSessionListWithThisHandler=Anzeige der aller aktiven Sitzungen mit Ihrer PHP-Konfiguration nicht möglich. LockNewSessions=Keine neuen Sitzungen zulassen ConfirmLockNewSessions=Möchten Sie wirklich alle neuen Dolibarr Verbindungen bis auf Ihre eigene blockieren? Nur Benutzer %s kann danach noch eine Verbindung aufbauen. UnlockNewSessions=Sperrung neuer Sitzungen aufheben @@ -42,7 +42,7 @@ WebUserGroup=Webserver Benutzer/Gruppen PermissionsOnFiles=Berechtigungen für Dateien PermissionsOnFilesInWebRoot=Berechtigungen für Dateien im Stammverzeichnis Web PermissionsOnFile=Berechtigungen für die Datei %s -NoSessionFound=Ihre PHP -Konfiguration scheint keine Auflistung aktiver Sitzungen zuzulassen. Eventuell ist die Speicherung im Verzeichnis (%s) durch fehlende Berechtigungen blockiert (zum Beispiel: Berechtigungen des Betriebssystems oder PHP open_basedir Beschränkungen). +NoSessionFound=Ihre PHP -Konfiguration scheint keine Auflistung aktiver Sitzungen zuzulassen. Eventuell ist die Speicherung im Verzeichnis (%s) durch fehlende Berechtigungen blockiert (zum Beispiel: Berechtigungen des Betriebssystems oder PHP open_basedir Beschränkungen). DBStoringCharset=Zeichensatz der Datenbank-Speicherung DBSortingCharset=Datenbank-Zeichensatz zum Sortieren von Daten HostCharset=Host-Zeichensatz @@ -157,7 +157,7 @@ Language_en_US_es_MX_etc=Sprache (de_DE, de_AT, de_CH, en_GB, ...) System=System SystemInfo=Systeminformationen SystemToolsArea=Systemwerkzeugsübersicht -SystemToolsAreaDesc=In diesem Bereich finden Sie die Verwaltungsfunktionen. Verwenden Sie das Menü zur Auswahl der gesuchten Funktion. +SystemToolsAreaDesc=In diesem Bereich finden Sie die Verwaltungsfunktionen. Verwenden Sie das Menü zur Auswahl der gesuchten Funktion. Purge=Bereinigen PurgeAreaDesc=Auf dieser Seite können Sie alle von Dolibarr erzeugten oder gespeicherten Dateien (temporäre Dateien oder alle Dateien im Verzeichnis %s ) löschen. Die Verwendung dieser Funktion ist in der Regel nicht erforderlich. Es wird als Workaround für Benutzer bereitgestellt, deren Dolibarr von einem Anbieter gehostet wird, der keine Berechtigungen zum löschen von Dateien anbietet, die vom Webserver erzeugt wurden. PurgeDeleteLogFile=Protokolldateien löschen, einschließlich %s, die für das Syslog-Modul definiert wurden (kein Risiko Daten zu verlieren) @@ -214,7 +214,7 @@ OnlyActiveElementsAreShown=Es werden nur Einstellungsmöglichkeiten für %s
jedes Moduls, um ein Modul/eine Anwendung zu aktivieren oder zu deaktivieren. ModulesDesc2=Klicken Sie auf die Radschaltfläche %s , um das Modul/die Anwendung zu konfigurieren. ModulesMarketPlaceDesc=Sie finden weitere Module auf externen Web-Sites... -ModulesDeployDesc=DateiWenn es die Berechtigungen in Ihrem Dateisystem zulassen, können Sie mit diesem Tool ein externes Modul bereitstellen. Das Modul ist dann auf der Registerkarte %s sichtbar. +ModulesDeployDesc=DateiWenn es die Berechtigungen in Ihrem Dateisystem zulassen, können Sie mit diesem Tool ein externes Modul bereitstellen. Das Modul ist dann auf der Registerkarte %s sichtbar. ModulesMarketPlaces=Zusatzmodule/Erweiterungen ModulesDevelopYourModule=Eigene Anwendungen/Module entwickeln ModulesDevelopDesc=Sie können ihr eiges Modul programmieren oder einen Partner finden, der es für Sie programmiert. @@ -271,7 +271,7 @@ SocialNetworkId=ID des sozialen Netzwerks ForDocumentationSeeWiki=Für Benutzer- oder Entwicklerdokumentation (Doc, FAQs...),
schauen Sie in das Dolibarr-Wiki:
%s ForAnswersSeeForum=Für weitere Fragen/Hilfe können Sie das Dolibarr-Forum nutzen:
%s HelpCenterDesc1=In diesem Bereich finden Sie eine Übersicht an verfügbaren Quellen, bei denen Sie im Fall von Problemen und Fragen Unterstützung bekommen können. -HelpCenterDesc2=Einige dieser Angebote sind nur in Englisch verfügbar. +HelpCenterDesc2=Einige dieser Angebote sind nur in Englisch verfügbar. CurrentMenuHandler=Aktuelle Menü-Handler MeasuringUnit=Maßeinheit LeftMargin=linker Rand @@ -304,7 +304,7 @@ MAIN_MAIL_ENABLED_USER_DEST_SELECT=E-Mail-Adressen von Mitarbeitern (falls defin MAIN_MAIL_NO_WITH_TO_SELECTED=Keinen Standardempfänger auswählen, auch wenn nur einer zur Auswahl steht MAIN_MAIL_SENDMODE=Versandmethode MAIN_MAIL_SMTPS_ID=SMTP-Benutzer (falls der Server eine Authentifizierung benötigt) -MAIN_MAIL_SMTPS_PW=SMTP-Passwort (falls der Server eine Authentifizierung benötigt) +MAIN_MAIL_SMTPS_PW=SMTP-Passwort (falls der Server eine Authentifizierung benötigt) MAIN_MAIL_EMAIL_TLS=TLS (SSL) Verschlüsselung verwenden MAIN_MAIL_EMAIL_STARTTLS=TLS (STARTTLS) Verschlüsselung verwenden MAIN_MAIL_EMAIL_SMTP_ALLOW_SELF_SIGNED=Selbst-signierte Zertifikate erlauben @@ -317,7 +317,7 @@ MAIN_SMS_SENDMODE=Methode zum Versenden von SMS MAIN_MAIL_SMS_FROM=Standard Versandrufnummer der SMS-Funktion MAIN_MAIL_DEFAULT_FROMTYPE=Vorausgewählte Standard-Absenderadresse in Formularen zum Senden von E-Mails UserEmail=E-Mail des Benutzers -CompanyEmail=Unternehmens-E-Mail +CompanyEmail=Unternehmens-E-Mail FeatureNotAvailableOnLinux=Diese Funktion ist in Unix-Umgebungen nicht verfügbar. Testen Sie Ihr sendmail Programm lokal. FixOnTransifex=Die Übersetzung in der Online-Übersetzungs-Plattform des Projektes korrigieren SubmitTranslation=Wenn die Übersetzung für diese Sprache nicht vollständig ist oder Sie Fehler finden, können Sie dies korrigieren, indem Sie Dateien im Verzeichnis langs/%s bearbeiten und Ihre Änderung an www.transifex.com/dolibarr-association/dolibarr/ senden. @@ -365,9 +365,9 @@ GenericMaskCodes=Sie können ein beliebiges Nummerierungsschema eingeben. Folgen GenericMaskCodes2= {cccc} Kundennummer mit n Zeichen
{cccc000} Kundennummer gefolgt von einer dem Kunden zugeordneten Partner ID. Dieser Zähler wird gleichzeitig mit dem globalen Zähler zurückgesetzt.
{tttt} Der Code für die Partnerart, abgeschnitten nach n Zeichen (siehe Menü Start - Einstellungen - Stammdaten - Arten von Partnern). Wenn diese Option aktiv ist, wird für jede Partnerart ein separater Zähler geführt.
GenericMaskCodes3=Alle anderen Zeichen in der Maske bleiben erhalten.
\nLeerzeichen sind nicht zulässig.
GenericMaskCodes3EAN=Alle anderen Zeichen der Maske bleiben unberührt (außer * oder ? an 13. Stelle in EAN13).
Leerzeichen sind nicht erlaubt.
Für EAN13 sollte das letzte Zeichen nach der letzten } an 13. Stelle ein * oder ? sein. Dies wird durch den berechneten Wert ersetzt.
-GenericMaskCodes4a= Beispiel auf der 99. %s des Geschäftspartners TheCompany, mit Datum 2023-01-31:
-GenericMaskCodes4b= Beispiel für einen Geschäftspartner, erstellt am 31.01.2023:
-GenericMaskCodes4c= Beispiel für ein Produkt, das am 31.01.2023 erstellt wurde:
+GenericMaskCodes4a= Beispiel auf der 99. %s des Geschäftspartners TheCompany, mit Datum 2023-01-31:
+GenericMaskCodes4b= Beispiel für einen Geschäftspartner, erstellt am 31.01.2023:
+GenericMaskCodes4c= Beispiel für ein Produkt, das am 31.01.2023 erstellt wurde:
GenericMaskCodes5= ABC{yy}{mm}-{000000} ergibt ABC2301-000099
{0000+100@1}-ZZZ/{dd}/XXX ergibt 0199-ZZZ/31/XXX
IN{yy}{mm}-{0000}-{t} ergibt IN2301-0099-A wenn der Unternehmenstyp „Responsable Inscripto“ ist und der Code für den Typ „A_RI“ lautet. GenericNumRefModelDesc=Liefert eine anpassbare Nummer nach vordefiniertem Schema ServerAvailableOnIPOrPort=Der Server ist unter der Adresse %s auf Port %s verfügbar. @@ -417,7 +417,7 @@ PDFLocaltax=Regeln für %s HideLocalTaxOnPDF=Steuersatz %s in der Spalte Verkauf Steuer/MwSt. ausblenden HideDescOnPDF=Produktbeschreibung ausblenden HideRefOnPDF=Produkt-Ref.Nr. ausblenden -ShowProductBarcodeOnPDF=Barcode-Nummer des Produkts anzeigen +ShowProductBarcodeOnPDF=Barcode-Nummer des Produkts anzeigen HideDetailsOnPDF=Details in den Produktpositionen ausblenden PlaceCustomerAddressToIsoLocation=Benutze Standardposition in Frankreich (La Poste) für Position der Kundenadresse Library=Bibliothek @@ -484,7 +484,7 @@ InstalledInto=Installiert in Verzeichnis %s BarcodeInitForThirdparties=Alle Barcodes für Geschäftspartner initialisieren BarcodeInitForProductsOrServices=Alle Barcodes für Produkte oder Services initialisieren oder zurücksetzen CurrentlyNWithoutBarCode=Zur Zeit gibt es %s Datensätze in %s %s ohne Barcode. -InitEmptyBarCode=Initialisierungswert für die %s leeren Barcodes +InitEmptyBarCode=Initialisierungswert für die %s leeren Barcodes EraseAllCurrentBarCode=alle aktuellen Barcode-Werte löschen ConfirmEraseAllCurrentBarCode=Möchten Sie wirklich alle aktuellen Barcode-Werte löschen? AllBarcodeReset=alle Barcode-Werte wurden entfernt @@ -530,7 +530,7 @@ ProductDocumentTemplates=Dokumentvorlage(n) ProductBatchDocumentTemplates=Dokumentvorlagen zum Generieren von Dokumenten zu Produktchargen FreeLegalTextOnExpenseReports=Freier Rechtstext auf Spesenabrechnungen WatermarkOnDraftExpenseReports=Wasserzeichen auf Ausgabenbelegentwurf (leerlassen wenn keines benötigt wird) -ProjectIsRequiredOnExpenseReports=Für die Erfassung einer Spesenabrechnung ist die Angabe des Projekts verpflichtend +ProjectIsRequiredOnExpenseReports=Für die Erfassung einer Spesenabrechnung ist die Angabe des Projekts verpflichtend PrefillExpenseReportDatesWithCurrentMonth=Das Start- und Enddatum einer neuen Spesenabrechnung mit dem Start- und Enddatum des aktuellen Monats vorausfüllen ForceExpenseReportsLineAmountsIncludingTaxesOnly=Die Eingabe von Spesen immer als Bruttowerte mit Steuern erzwingen AttachMainDocByDefault=Setzen Sie die Einstellung auf Ja, wenn Sie standardmäßig das Hauptdokument an die E-Mail anhängen möchten (falls zutreffend) @@ -667,7 +667,7 @@ Module2610Desc=Aktiviere der Dolibarr REST Serverdienst Module2660Name=WebServices aufrufen (SOAP Client) Module2660Desc=Aktivieren des Dolibarr-Webdienst-Clients \n(Kann verwendet werden, um Daten / Anforderungen an externe Server zu senden. Derzeit werden nur Bestellungen unterstützt.) Module2700Name=Gravatar -Module2700Desc=Verwenden Sie den Online-Dienst 'Gravatar' (www.gravatar.com) für die Anzeige von Benutzer- und Mitgliederbildern (Zuordnung über E-Mail-Adressen). Hierfür benötigen Sie eine aktive Internetverbindung. +Module2700Desc=Verwenden Sie den Online-Dienst 'Gravatar' (www.gravatar.com) für die Anzeige von Benutzer- und Mitgliederbildern (Zuordnung über E-Mail-Adressen). Hierfür benötigen Sie eine aktive Internetverbindung. Module2800Desc=FTP-Client Module2900Name=GeoIPMaxmind Module2900Desc=GeoIP Maxmind Konvertierung @@ -701,7 +701,7 @@ Module50200Name=PayPal Module50200Desc=Bieten Sie Kunden eine PayPal-Online-Zahlungsseite (PayPal-Konto oder Kredit- / Debitkarten). Dies kann verwendet werden, um Ihren Kunden Ad-hoc-Zahlungen oder Zahlungen in Bezug auf ein bestimmtes Dolibarr-Objekt (Rechnung, Bestellung usw.) zu ermöglichen. Module50300Name=Stripe Module50300Desc=Bietet Kunden eine Stripe-Online-Zahlungsseite an (Kredit-/Debit-Karten). Diese Seite kann verwendet werden, um Ihren Kunden Ad-hoc-Zahlungen oder Zahlungen mit Bezug auf ein bestimmtes Dolibarr-Objekt (Rechnung, Bestellung etc...) zu ermöglichen. -Module50400Name=Buchhaltung (erweitert) +Module50400Name=Buchhaltung (erweitert) Module50400Desc=Buchhaltungsmanagement (doppelte Einträge, Unterstützung von Haupt- und Nebenbüchern). Exportieren Sie das Hauptbuch in verschiedene andere Buchhaltungssoftwareformate. Module54000Name=PrintIPP Module54000Desc=Direktdruck (ohne die Dokumente zu öffnen) mittels CUPS IPP (Drucker muss vom Server aus sichtbar sein, auf dem Server muss CUPS installiert sein) @@ -737,7 +737,7 @@ Permission27=Angebote löschen Permission28=Angebote exportieren Permission31=Produkte/Leistungen einsehen Permission32=Produkte/Leistungen erstellen/bearbeiten -Permission33=Preise für Produkte einsehen +Permission33=Preise für Produkte einsehen Permission34=Produkte/Leistungen löschen Permission36=Projekte/Leistungen exportieren Permission38=Produkte exportieren @@ -750,7 +750,7 @@ Permission61=Serviceaufträge einsehen Permission62=Serviceaufträge erstellen/bearbeiten Permission64=Serviceaufträge löschen Permission67=Leistungen exportieren -Permission68=Serviceaufträge per E-Mail versenden +Permission68=Serviceaufträge per E-Mail versenden Permission69=Serviceaufträge freigeben Permission70=Freigabe für Serviceaufträge rückgängig machen Permission71=Mitglieder einsehen @@ -964,11 +964,11 @@ Permission1191=Exportieren Sie Lieferantenaufträge und deren Attribute Permission1201=Exportresultate einsehen Permission1202=Export erstellen/bearbeiten Permission1231=Lieferantenrechnungen (und Zahlungen) einsehen -Permission1232=Lieferantenrechnungen (Eingangsrechnungen) erstellen/bearbeiten -Permission1233=Lieferantenrechnungen freigeben +Permission1232=Lieferantenrechnungen (Eingangsrechnungen) erstellen/bearbeiten +Permission1233=Lieferantenrechnungen freigeben Permission1234=Lieferantenrechnungen löschen -Permission1235=Lieferantenrechnungen per E-Mail versenden -Permission1236=Lieferantenrechnungen & -zahlungen exportieren +Permission1235=Lieferantenrechnungen per E-Mail versenden +Permission1236=Lieferantenrechnungen & -zahlungen exportieren Permission1237=Lieferantenbestellungen mit Details exportieren Permission1251=Massenimports von externen Daten ausführen (data load) Permission1321=Kundenrechnungen, -attribute und -zahlungen exportieren @@ -1007,8 +1007,8 @@ Permission10001=Website-Inhalt einsehen Permission10002=Erstellen/Bearbeiten von Website-Inhalten (HTML und JavaScript) Permission10003=Erstelle/Bearbeite Website-Inhalte (dynamischer PHP-Code). Gefährlich, dies muss auf ausgewählte Entwickler beschränkt werden. Permission10005=Inhalt der Website löschen -Permission20001=Urlaubsanträge einsehen (eigene und die der unterstellten Mitarbeiter) -Permission20002=Urlaubsanträge anlegen/bearbeiten (eigene und die der unterstellten Mitarbeiter) +Permission20001=Urlaubsanträge einsehen (eigene und die der unterstellten Mitarbeiter) +Permission20002=Urlaubsanträge anlegen/bearbeiten (eigene und die der unterstellten Mitarbeiter) Permission20003=Lösche Urlaubsanträge Permission20004=Alle Urlaubsanträge einsehen (auch die von nicht unterstellten Mitarbeitern) Permission20005=Urlaubsanträge für alle erstellen/bearbeiten (auch die von nicht unterstellten Mitarbeitern) @@ -1064,7 +1064,7 @@ Permission941603=Quittungen freigeben Permission941604=Quittungen per E-Mail senden Permission941605=Quittungen exportieren Permission941606=Quittungen löschen -DictionaryCompanyType=Geschäftspartner-Arten +DictionaryCompanyType=Geschäftspartner-Arten DictionaryCompanyJuridicalType=Rechtsformen der Geschäftspartner DictionaryProspectLevel=Level für Interessentenstatus - Unternehmen DictionaryProspectContactLevel=Level für Interessentenstatus - Kontakte @@ -1117,7 +1117,7 @@ EntryDeleted=Eintrag gelöscht BackToModuleList=Zurück zur Modulübersicht BackToDictionaryList=Zurück zur Stammdaten-Übersicht TypeOfRevenueStamp=Art der Steuermarke -VATManagement=MwSt-Verwaltung +VATManagement=MwSt-Verwaltung VATIsUsedDesc=Standardmäßig basiert die Umsatzsteuer beim Erstellen von Leads, Rechnungen, Bestellungen usw. den aktiven Standardregeln:
Wenn der Verkäufer nicht der Umsatzsteuer unterliegt, dann wird die Umsatzsteuer standardmäßig auf 0 gesetzt. Ende der Regel.
Wenn (Land des Verkäufers = Land des Käufers), dann entspricht die Umsatzsteuer standardmäßig der Umsatzsteuer des Produkts im Land des Verkäufers. Ende der Regel.
Wenn sich der Verkäufer und und der Käufer beide in der Europäischen Union befinden und die Güter sind zu transportierende Produkte (Abholung, Versand, Luftfracht), ist der Standardwert-Umsatzsteuersatz 0. Diese Regel hängt vom Land des Verkäufers ab – bitte wenden Sie sich an Ihren Buchhalter. Die USt. sollte vom Käufer in seinem Land bezahlt werden und und vom Verkäufer. Ende der Regel.
Wenn sich der Verkäufer und und der Käufer beide in der Europäischen Union befinden und der Käufer ist kein Unternehmen (mit einem registrierten innergemeinschaftlichen USt.-ID), dann entspricht die USt. standardmäßig dem USt.-Satz im Land des Verkäufers. Ende der Regel.
Wenn sich der Verkäufer und und der Käufer beide in der Europäischen Union befinden und der Käufer ist ein Unternehmen (mit einer registrierten innergemeinschaftlichen USt.-ID), dann ist die USt. standardmäßig 0. Ende der Regel.
In allen anderen Fällen ist der vorgeschlagene Standardwert der Umsatzsteuer=0. Ende der Regel. VATIsNotUsedDesc=Die vorgeschlagene USt. ist standardmäßig 0 für alle Fälle wie Stiftungen, Einzelpersonen oder Kleinunternehmen. VATIsUsedExampleFR=In Frankreich sind damit Unternehmen oder Organisationen gemeint, die ein echtes Steuersystem haben (vereinfacht oder normal). Ein System, in dem die Mehrwertsteuer deklariert wird. @@ -1197,6 +1197,7 @@ Skin=grafische Oberfläche DefaultSkin=Standardvorlage grafische Oberfläche MaxSizeList=Maximale Listenlänge DefaultMaxSizeList=Voreinstellung maximale Anzahl Zeilen für Listen +DisplayGrandTotalInList=Zeigen Sie die Gesamtsumme (für alle Seiten) im Fußbereich der Listen an. DefaultMaxSizeShortList=Standard für maximale Länge bei kurzen Listen (z.B. Kundenkarte) MessageOfDay=Nachricht des Tages
(wird ganz oben auf der Startseite angezeigt) MessageLogin=Nachricht auf der Anmeldeseite @@ -1345,7 +1346,7 @@ MAIN_PROXY_HOST=Proxyserver: IP-Adresse/DNS-Name MAIN_PROXY_PORT=Proxyserver: Port MAIN_PROXY_USER=Proxyserver: Benutzername MAIN_PROXY_PASS=Proxyserver: Passwort -DefineHereComplementaryAttributes=Definieren Sie alle ergänzenden Attribute, die hinzugefügt werden sollen: +DefineHereComplementaryAttributes=Definieren Sie alle ergänzenden Attribute, die hinzugefügt werden sollen: ExtraFields=Ergänzende Attribute ExtraFieldsLines=Ergänzende Attribute (zu Positionen/Zeilen) ExtraFieldsLinesRec=Ergänzende Attribute (Positionen in Rechnungsvorlagen) @@ -1419,10 +1420,10 @@ PasswordGenerationPerso=Ein Passwort entsprechend der persönlich definierten Ko SetupPerso=Nach Ihrer Konfiguration PasswordPatternDesc=Beschreibung für Passwortmuster ##### Users setup ##### -RuleForGeneratedPasswords=Regeln für die Erstellung und Freigabe von Passwörtern +RuleForGeneratedPasswords=Regeln für die Erstellung und Freigabe von Passwörtern DisableForgetPasswordLinkOnLogonPage='Passwort vergessen'-Link nicht auf der Anmeldeseite anzeigen UsersSetup=Einstellungen Modul Benutzer -UserMailRequired=Für das Anlegen eines neuen Benutzers ist eine E-Mail-Adresse erforderlich +UserMailRequired=Für das Anlegen eines neuen Benutzers ist eine E-Mail-Adresse erforderlich UserHideInactive=Inaktive Benutzer aus allen Kombinationslisten von Benutzern ausblenden (Nicht empfohlen: dies kann bedeuten, dass Sie auf einigen Seiten nicht nach alten Benutzern filtern oder suchen können) UserHideExternal=Verbergen Sie externe Benutzer (nicht mit einem Geschäftspartner verknüpft) in allen Combo-Auswahllisten für Benutzer (nicht empfohlen: dies hat zur Folge, dass Sie externe Benutzer auf einigen Seiten nicht filtern oder suchen können) UserHideNonEmployee=Verbergen Sie alle Benutzer, die keine Mitarbeiter sind, in allen Combo-Auswahllisten für Benutzer (nicht empfohlen: dies hat zur Folge, dass Sie auf einigen Seiten Nicht-Mitarbeiter-Benutzer nicht filtern oder suchen können) @@ -1442,7 +1443,7 @@ ModelModules=Dokumentenvorlage(n) DocumentModelOdt=Generiere Dokumente aus OpenDocument Vorlagen (.ODT / .ODS Dateien aus LibreOffice, OpenOffice, KOffice, TextEdit,...) WatermarkOnDraft=Wasserzeichen auf Entwurf JSOnPaimentBill=Feature aktivieren, um Zahlungs-Zeilen in Zahlungs-Formularen automatisch zu füllen -CompanyIdProfChecker=Regeln für gewerbliche Identifikationsnummern +CompanyIdProfChecker=Regeln für gewerbliche Identifikationsnummern MustBeUnique=Muss es eindeutig sein ? MustBeMandatory=Erforderlich um Drittanbieter zu erstellen (falls Ust.Id oder Firmenart definiert ist) ? MustBeInvoiceMandatory=Erforderlich, um Rechnungen freizugeben ? @@ -1853,7 +1854,7 @@ AGENDA_REMINDER_BROWSER_SOUND = Aktiviere Tonbenachrichtigung AGENDA_REMINDER_EMAIL = Aktiviere die Ereigniserinnerung per E-Mail (Erinnerungsoption / Verzögerung kann für jedes Ereignis definiert werden). AGENDA_REMINDER_EMAIL_NOTE = Hinweis: Die Häufigkeit des geplanten Jobs %s muss ausreichend sein, um sicherzustellen, dass die Erinnerung zum richtigen Zeitpunkt gesendet wird. AGENDA_SHOW_LINKED_OBJECT = Verknüpfte Objekte in Agenda anzeigen -AGENDA_USE_EVENT_TYPE = Verwenden der Ereignissarten \nEinstellen unter (Start -> Einstellungen -> Stammdaten-> Ereignissarten) +AGENDA_USE_EVENT_TYPE = Verwenden der Ereignissarten \nEinstellen unter (Start -> Einstellungen -> Stammdaten-> Ereignissarten) AGENDA_USE_EVENT_TYPE_DEFAULT = Diesen Standardwert automatisch als Ereignistyp im Ereignis Erstell-Formular verwenden. PasswordTogetVCalExport = Passwort für den VCal-Export PastDelayVCalExport=Keine Termine exportieren die älter sind als @@ -1918,7 +1919,7 @@ SuppliersInvoiceNumberingModel=Lieferantenrechnungen Zähl-Modell IfSetToYesDontForgetPermission=Wenn ein Wert ungleich Null festgelegt ist, vergessen Sie nicht, Berechtigungen für Gruppen oder Benutzer bereitzustellen, die für die zweite Genehmigung zugelassen sind ##### GeoIPMaxmind ##### GeoIPMaxmindSetup=GeoIP-Maxmind Moduleinstellungen -PathToGeoIPMaxmindCountryDataFile=Pfad zur Maxmind-Datei mit der Zuordnung von IPs zu Ländern +PathToGeoIPMaxmindCountryDataFile=Pfad zur Maxmind-Datei mit der Zuordnung von IPs zu Ländern NoteOnPathLocation=Bitte beachten Sie, dass Ihre IP-Länder-Datei in einem von PHP lesbaren Verzeichnis liegen muss (Überprüfen Sie Ihre PHP open_basedir-Einstellungen und die Dateisystem-Berechtigungen). YouCanDownloadFreeDatFileTo=Eine kostenlose Demo-Version der Maxmind-GeoIP Datei finden Sie hier: %s YouCanDownloadAdvancedDatFileTo=Eine vollständigere Version mit Updates der Maxmind-GeoIP Datei können Sie hier herunterladen: %s @@ -2110,7 +2111,7 @@ GDPRContact=Datenschutzbeauftragte(r) GDPRContactDesc=Wenn Sie personenbezogene Daten in Ihrem Informationssystem speichern, können Sie hier den für die Datenschutz-Grundverordnung (DSGVO) zuständigen Ansprechpartner benennen HelpOnTooltip=Anzeigen des Hilfetextes im Tooltip HelpOnTooltipDesc=Fügen Sie hier Text oder einen Übersetzungsschlüssel ein, damit der Text in einer QuickInfo angezeigt wird, wenn dieses Feld in einem Formular angezeigt wird -YouCanDeleteFileOnServerWith=Löschen dieser Datei auf dem Server mit diesem Kommandozeilenbefehl
%s +YouCanDeleteFileOnServerWith=Löschen dieser Datei auf dem Server mit diesem Kommandozeilenbefehl
%s ChartLoaded=Kontenplan ist geladen SocialNetworkSetup=Einstellungen vom Modul für Soziale Medien EnableFeatureFor=Aktiviere Features für %s @@ -2136,8 +2137,8 @@ MailboxSourceDirectory=Quellverzechnis des eMail-Kontos MailboxTargetDirectory=Zielverzechnis des eMail-Kontos EmailcollectorOperations=Aktivitäten, die der eMail-Collector ausführen soll EmailcollectorOperationsDesc=Operationen werden von oben nach unten ausgeführt -MaxEmailCollectPerCollect=Maximale Anzahl an einzusammelnden E-Mails je Collect-Vorgang -TestCollectNow=Collect testen +MaxEmailCollectPerCollect=Maximale Anzahl an einzusammelnden E-Mails je Collect-Vorgang +TestCollectNow=Collect testen CollectNow=Jetzt abrufen ConfirmCloneEmailCollector=Möchten Sie den E-Mail-Collector %s wirklich duplizieren? DateLastCollectResult=Datum des letzten eMail-Collect-Versuchs @@ -2168,8 +2169,8 @@ LoadThirdPartyFromName=Drittanbieter-Suche auf %s laden (nur laden) LoadThirdPartyFromNameOrCreate=Drittanbieter-Suche auf %s laden (erstellen, wenn nicht gefunden) LoadContactFromEmailOrCreate=Kontakt aus %s entnehmen (erstellen, wenn nicht gefunden) AttachJoinedDocumentsToObject=Speichern Sie angehängte Dateien als Dokumente eines Objekts, wenn die Referenz des Objekts im Betreff der E-Mail gefunden wird. -WithDolTrackingID=Nachricht einer Unterhaltung die durch eine erste von Dolibarr gesendete E-Mail initiiert wurde -WithoutDolTrackingID=Nachricht einer Unterhaltung die NICHT durch eine erste von Dolibarr gesendete E-Mail initiiert wurde +WithDolTrackingID=Nachricht einer Unterhaltung die durch eine erste von Dolibarr gesendete E-Mail initiiert wurde +WithoutDolTrackingID=Nachricht einer Unterhaltung die NICHT durch eine erste von Dolibarr gesendete E-Mail initiiert wurde WithDolTrackingIDInMsgId=Nachricht von Dolibarr gesendet WithoutDolTrackingIDInMsgId=Nachricht NICHT von Dolibarr gesendet CreateCandidature=Stellen-Bewerbung erstellen @@ -2203,7 +2204,7 @@ DebugBar=Debug-Leiste DebugBarDesc=Symbolleiste, die mit einer Vielzahl von Werkzeugen ausgestattet ist, um das Debuggen zu vereinfachen. DebugBarSetup=Debug-Leiste Einstellungen GeneralOptions=Allgemeine Optionen -LogsLinesNumber=Zahl der Zeilen, die auf der Registerkarte Logs angezeigt werden sollen +LogsLinesNumber=Zahl der Zeilen, die auf der Registerkarte Logs angezeigt werden sollen UseDebugBar=Verwenden Sie die Debug-Leiste DEBUGBAR_LOGS_LINES_NUMBER=Zahl der letzten Protokollzeilen, die in der Konsole verbleiben sollen WarningValueHigherSlowsDramaticalyOutput=Warnung, höhere Werte verlangsamen die Ausgabe erheblich. @@ -2241,7 +2242,7 @@ PDF_SHOW_PROJECT=Projekt im Dokument anzeigen ShowProjectLabel=Projektbezeichnung PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME=Den Namen des Geschäftspartners um Alias ergänzen THIRDPARTY_ALIAS=Name des Geschäftspartners - Alias des Geschäftspartners -ALIAS_THIRDPARTY=Alias des Geschäftspartners – Name des Geschäftspartners +ALIAS_THIRDPARTY=Alias des Geschäftspartners – Name des Geschäftspartners PDFIn2Languages=Bezeichnungen im PDF in zwei verschiedenen Sprachen anzeigen (diese Funktion funktioniert möglicherweise bei einigen Sprachen nicht) PDF_USE_ALSO_LANGUAGE_CODE=Wenn Sie möchten, dass einige Texte in Ihrem PDF in 2 verschiedenen Sprachen in demselben generierten PDF dupliziert werden, müssen Sie hier diese zweite Sprache festlegen, damit das generierte PDF zwei verschiedene Sprachen auf derselben Seite enthält, die beim Generieren von PDF ausgewählte und diese (dies wird nur von wenigen PDF-Vorlagen unterstützt). Für 1 Sprache pro PDF leer halten. PDF_USE_A=PDF-Dokumente im Format PDF/A erstellen anstelle des Standardformats PDF @@ -2331,7 +2332,7 @@ ModuleWebhookDesc = Schnittstelle zum Abfangen von Dolibarr-Triggern und Senden WebhookSetup = Webhook-Einrichtung WebhookSetupPage = Webhook-Einrichtungsseite ShowQuickAddLink=Eine Schaltfläche zum schnellen Hinzufügen eines Elements im oberen rechten Menü anzeigen -ShowSearchAreaInTopMenu=Suchbereich im oberen Menü anzeigen +ShowSearchAreaInTopMenu=Suchbereich im oberen Menü anzeigen HashForPing=Für den Ping verwendeter Hash ReadOnlyMode=Ist eine Instanz im "Read Only"-Modus DEBUGBAR_USE_LOG_FILE=Die Datei dolibarr.log verwenden, um Protokolldaten zu erfassen @@ -2343,8 +2344,8 @@ IconAndText=Icon und Text TextOnly=Nur Text IconOnlyAllTextsOnHover=Nur Icon - Alle Texte erscheinen unter dem Icon, wenn Sie mit der Maus über die Menüleiste fahren IconOnlyTextOnHover=Nur Icon – Der Text des Icons wird angezeigt, wenn Sie mit der Maus über das Icon fahren -IconOnly=Nur Icon - Der Text wird als Tooltipp angezeigt -INVOICE_ADD_ZATCA_QR_CODE=Den ZATCA-QR-Code auf Rechnungen anzeigen +IconOnly=Nur Icon - Der Text wird als Tooltipp angezeigt +INVOICE_ADD_ZATCA_QR_CODE=Den ZATCA-QR-Code auf Rechnungen anzeigen INVOICE_ADD_ZATCA_QR_CODEMore=Einige arabische Länder benötigen diesen QR-Code auf ihren Rechnungen INVOICE_ADD_SWISS_QR_CODE=Schweizer QR-Rechnungscode auf Rechnungen anzeigen INVOICE_ADD_SWISS_QR_CODEMore=Schweizer Standard für Rechnungen; Stellen Sie sicher, dass PLZ und Ort ausgefüllt sind und dass die Konten über gültige Schweizer/Liechtenstein-IBANs verfügen. @@ -2433,3 +2434,12 @@ UrlPublicInterfaceHelpAdmin=Es ist möglich, einen Alias für das Web Server und ExportUseForce=Parameter -f verwenden ExportUseForceHelp=Erzwingen Sie die Fortsetzung des Exports, auch wenn ein Fehler gefunden wird (Backup ist möglicherweise nicht zuverlässig verwendbar). CustomPrompt=Benutzerdefinierte Prompts +AiDescription=KI-Funktionen (Künstliche Intelligenz). +AiDescriptionLong=Bietet KI (Künstliche Intelligenz) Funktionen in verschiedenen Teilen der Anwendung. Externe KI-API erforderlich. +AI_KEY_API_CHATGPT= Schlüssel für ChatGPT IA API +AiSetup=Konfiguration AI Modul +AiCustomPrompt=Benutzerdefiniertes KI-Prompt +AI_CONFIGURATIONS_PROMPT=Benutzerdefiniertes Prompt +ImageGeneration=Bilderzeugung +AIPromptForFeatures=Benitzerdefinierte KI-Prompts für Funktionen +EnterAnIP=IP-Adresse eingeben diff --git a/htdocs/langs/de_DE/blockedlog.lang b/htdocs/langs/de_DE/blockedlog.lang index 71afe56ceae..062f21687db 100644 --- a/htdocs/langs/de_DE/blockedlog.lang +++ b/htdocs/langs/de_DE/blockedlog.lang @@ -29,7 +29,7 @@ RestrictYearToExport=Beschränke Zeitraum (Monat/Jahr) für den Export BlockedLogEnabled=Das System zum Protokollieren von Ereignissen in unveränderbaren Logs wurde aktiviert BlockedLogDisabled=Das System zum Protokollieren von Ereignissen in unveränderbaren Logs wurde deaktiviert, nachdem schon einige Aufzeichnungen durchgeführt wurden. Es wurde ein spezieller Fingerabdruck gespeichert, um die Kette als gebrochen zu markieren BlockedLogDisabledBis=Das System zum Protokollieren von Ereignissen in unveränderbaren Logs wurde deaktiviert. Dies ist möglich, da noch keine Aufzeichnungen vorgenommen wurden. -LinkHasBeenDisabledForPerformancePurpose=Aus Leistungsgründen wird der direkte Link zum Dokument nach der 100. Zele nicht angezeigt. +LinkHasBeenDisabledForPerformancePurpose=For performance purpose, direct link to the document is not shown after the 100th line. ## logTypes logBILL_DELETE=Kundenrechnung automatisch gelöscht diff --git a/htdocs/langs/de_DE/bookmarks.lang b/htdocs/langs/de_DE/bookmarks.lang index ca3f4530e42..a4fcce16d58 100644 --- a/htdocs/langs/de_DE/bookmarks.lang +++ b/htdocs/langs/de_DE/bookmarks.lang @@ -1,7 +1,7 @@ # Dolibarr language file - Source file is en_US - marque pages / bookmarks AddThisPageToBookmarks = Aktuelle Ansicht zu Lesezeichen hinzufügen -BehaviourOnClick = Öffnungsverhalten +BehaviourOnClick = Verhalten, wenn eine Lesezeichen-URL ausgewählt wird Bookmark = Lesezeichen Bookmarks = Lesezeichen BookmarkTargetNewWindowShort = Neuer Tab diff --git a/htdocs/langs/de_DE/cron.lang b/htdocs/langs/de_DE/cron.lang index 3ccbff5761c..f13f344dbeb 100644 --- a/htdocs/langs/de_DE/cron.lang +++ b/htdocs/langs/de_DE/cron.lang @@ -1,6 +1,5 @@ # Dolibarr language file - Source file is en_US - cron -# About page -# Right +# Permissions Permission23101 = Geplante Aufgabe einsehen Permission23102 = Erstelle/aktualisiere geplanten Job Permission23103 = Lösche geplanten Job @@ -14,7 +13,7 @@ FileToLaunchCronJobs=Befehlszeile zum Überprüfen und Starten von qualifizierte CronExplainHowToRunUnix=In Unix-Umgebung sollten Sie die folgenden crontab-Eintrag verwenden, um die Befehlszeile alle 5 Minuten ausführen CronExplainHowToRunWin=In Microsoft™ Windows Umgebungen können Sie die Aufgabenplanung benutzen, um die Kommandozeile alle 5 Minuten aufzurufen. CronMethodDoesNotExists=Die Klasse %s enthält keine Methode %s -CronMethodNotAllowed=Die Methode %s der Klasse %s befindet sich in der schwarzen Liste der verbotenen Methoden +CronMethodNotAllowed=Die Methode %s der Klasse %s befindet sich in der Sperrliste der verbotenen Methoden CronJobDefDesc=Cron-Jobprofile sind in der Moduldeskriptordatei definiert. Wenn das Modul aktiviert ist, sind diese geladen und verfügbar, so dass Sie die Jobs über das Menü admin tools %s verwalten können. CronJobProfiles=Liste vordefinierter Cron-Job Profile # Menu @@ -91,6 +90,7 @@ WarningCronDelayed=Bitte beachten: Aus Leistungsgründen können Ihre Jobs um bi DATAPOLICYJob=Datenbereiniger und Anonymisierer JobXMustBeEnabled=Job %s muss aktiviert sein EmailIfError=E-Mail zur Warnung bei Fehler +JobNotFound=Job %s wurde in der Liste der Jobs nicht gefunden (versuchen Sie, das Modul zu deaktivieren/aktivieren) ErrorInBatch=Fehler beim Ausführen des Jobs %s # Cron Boxes diff --git a/htdocs/langs/de_DE/ecm.lang b/htdocs/langs/de_DE/ecm.lang index 888e699b1f8..398174fb3af 100644 --- a/htdocs/langs/de_DE/ecm.lang +++ b/htdocs/langs/de_DE/ecm.lang @@ -3,9 +3,9 @@ ECMNbOfDocs=Anzahl der Dokumente im Verzeichnis ECMSection=Verzeichnis ECMSectionManual=Manueller Ordner ECMSectionAuto=Automatischer Ordner -ECMSectionsManual=Manuelle Hierarchie -ECMSectionsAuto=Automatische Hierarchie -ECMSectionsMedias=Verzeichnisbaum Medien +ECMSectionsManual=Private manuelle Hierarchie +ECMSectionsAuto=Private automatische Hierarchie +ECMSectionsMedias=Öffentliche Hierarchie ECMSections=Verzeichnisse (Ordner) ECMRoot=Stammverzeichnis ECMNewSection=Neuer Ordner @@ -17,9 +17,9 @@ ECMNbOfFilesInSubDir=Anzahl der Dateien in Unterverzeichnissen ECMCreationUser=Autor ECMArea=DMS/ECM Bereich ECMAreaDesc=Der Bereich DMS/ECM (Document Management System / Electronic Content Management) ermöglicht Ihnen das schnelle Speichern, Teilen und Durchsuchen von Dokumenten aller Art in Dolibarr. -ECMAreaDesc2a=* Manuelle Verzeichnisse können verwendet werden, um Dokumente zu speichern, die nicht mit einem bestimmten Element verknüpft sind. +ECMAreaDesc2a=* Manuelle Verzeichnisse können zum Speichern von Dokumenten mit freier Organisation der Speicherhierarchie verwendet werden. ECMAreaDesc2b=* Automatische Verzeichnisse werden automatisch gefüllt, wenn Dokumente von der Seite eines Elements hinzugefügt werden. -ECMAreaDesc3=* Medienverzeichnisse sind Dateien im Unterverzeichnis /medias des Dokumentenverzeichnisses, die von jedem gelesen werden können, ohne dass eine Anmeldung erforderlich ist und die Datei nicht explizit freigegeben werden muss. Darin werden beispielsweise Bilddateien für das E-Mail- oder Website-Modul gespeichert. +ECMAreaDesc3=* Öffentliche Verzeichnisse sind Dateien im Unterverzeichnis /medias des Dokumentenverzeichnisses, die von jedem gelesen werden können, ohne dass eine Anmeldung erforderlich ist und es ist nicht erforderlich, dass die Datei explizit freigegeben wird. Es wird zum Beispiel zum Speichern von Bilddateien für das E-Mail- oder Website-Modul verwendet. ECMSectionWasRemoved=Verzeichnis %s wurde gelöscht. ECMSectionWasCreated=Verzeichnis %s wurde erstellt. ECMSearchByKeywords=Suche nach Stichwörtern @@ -45,7 +45,7 @@ ExtraFieldsEcmFiles=Extrafelder DMS/ECM-Dateien ExtraFieldsEcmDirectories=Extrafelder DMS/ECM-Verzeichnisse ECMSetup=DMS/ECM-Einstellungen GenerateImgWebp=Erstelle ein Duplikat aller Bilder im .webp-Format, sofern diese in einem anderen Dateiformat vorliegen -ConfirmGenerateImgWebp=Wenn Sie bestätigen, generieren Sie für alle Bilder, die sich derzeit in diesem Ordner befinden, ein Bild im .webp-Format (Unterordner werden nicht berücksichtigt)... +ConfirmGenerateImgWebp=Wenn Sie bestätigen, generieren Sie ein Bild im .webp-Format für alle Bilder, die sich derzeit in diesem Ordner befinden (Unterordner sind nicht enthalten, webp-Bilder werden nicht generiert, wenn die Größe größer als das Original ist) ... ConfirmImgWebpCreation=Bestätigen Sie die Duplizierung aller Bilder GenerateChosenImgWebp=Ausgewähltes Bild mit einer anderen Version im .webp-Format duplizieren ConfirmGenerateChosenImgWebp=Wenn Sie bestätigen, generieren Sie ein Bild im .webp-Format für das Bild %s diff --git a/htdocs/langs/de_DE/eventorganization.lang b/htdocs/langs/de_DE/eventorganization.lang index d577b75f3cc..059fecd841c 100644 --- a/htdocs/langs/de_DE/eventorganization.lang +++ b/htdocs/langs/de_DE/eventorganization.lang @@ -43,7 +43,7 @@ EVENTORGANIZATION_CATEG_THIRDPARTY_BOOTH = Kategorie, die Drittanbietern hinzuge EVENTORGANIZATION_TEMPLATE_EMAIL_ASK_CONF = Vorlage einer E-Mail, die nach Erhalt eines Vorschlags für einen Konferenzbeitrag gesendet werden soll. EVENTORGANIZATION_TEMPLATE_EMAIL_ASK_BOOTH = Vorlage einer E-Mail, die nach Erhalt eines Standvorschlags gesendet werden soll. EVENTORGANIZATION_TEMPLATE_EMAIL_AFT_SUBS_BOOTH = E-Mail-Vorlage, die nach der Bezahlung eines registrierten Standes gesendet wird. -EVENTORGANIZATION_TEMPLATE_EMAIL_AFT_SUBS_EVENT = E-Mail-Vorlage, die nach der Bezahlung der Anmeldung zu einer Veranstaltung gesendet wird. +EVENTORGANIZATION_TEMPLATE_EMAIL_AFT_SUBS_EVENT = E-Mail-Vorlage, die nach der Bezahlung der Anmeldung zu einer Veranstaltung gesendet wird. EVENTORGANIZATION_TEMPLATE_EMAIL_BULK_SPEAKER = E-Mail-Vorlage, die verwendet werden soll, wenn E-Mails durch Massenaktion "E-Mails senden" an Redner gesendet werden EVENTORGANIZATION_TEMPLATE_EMAIL_BULK_ATTENDES = E-Mail-Vorlage, die verwendet werden soll, wenn E-Mails durch Massenaktion „E-Mails senden“ an Teilnehmer gesendet werden EVENTORGANIZATION_FILTERATTENDEES_CAT = Schränkt im Formular zum Erstellen/Hinzufügen eines Teilnehmers die Liste der Geschäftspartner auf diejenigen aus der Kategorie ein @@ -88,6 +88,7 @@ PriceOfRegistration=Kosten für die Teilnahme PriceOfRegistrationHelp=Preis für die Anmeldung/Teilnahme an der Veranstaltung PriceOfBooth=Buchungskosten für einen Stand PriceOfBoothHelp=Buchungskosten für einen Stand +EventOrganizationICSLinkProject=ICS-Verknüpfung für das Ereignis EventOrganizationICSLink=Verknüpfe Kalenderdaten (ICS) für Vorträge ConferenceOrBoothInformation=Informationen zu Konferenzbeitrag oder Stand Attendees=Teilnehmer diff --git a/htdocs/langs/de_DE/install.lang b/htdocs/langs/de_DE/install.lang index 5afef9047ea..eb8c39cc569 100644 --- a/htdocs/langs/de_DE/install.lang +++ b/htdocs/langs/de_DE/install.lang @@ -59,7 +59,7 @@ CheckToCreateDatabase=Aktivieren Sie das Kontrollkästchen, wenn die Datenbank n CheckToCreateUser=Aktivieren Sie das Kontrollkästchen, wenn:
das Datenbankbenutzerkonto noch nicht vorhanden ist und daher erstellt werden muss, oder
, wenn das Benutzerkonto vorhanden ist, die Datenbank jedoch nicht vorhanden ist und Berechtigungen erteilt werden müssen.
In diesem Fall müssen Sie das Benutzerkonto und das Kennwort sowie sowie den Namen und das Kennwort des Superuser-Kontos am Ende dieser Seite eingeben. Wenn dieses Kontrollkästchen deaktiviert ist, müssen Datenbankeigentümer und Kennwort bereits vorhanden sein. DatabaseRootLoginDescription=Superuser-Kontoname (zum Erstellen neuer Datenbanken oder neuer Benutzer), obligatorisch, wenn die Datenbank oder ihr Besitzer noch nicht vorhanden ist. KeepEmptyIfNoPassword=Leer lassen, wenn der Superuser kein Passwort hat (NICHT empfohlen) -SaveConfigurationFile=Konfigurationsdaten werden gespeichert +SaveConfigurationFile=Konfigurationsdaten werden gespeichert ServerConnection=Serververbindung DatabaseCreation=Erstellung der Datenbank CreateDatabaseObjects=Anlegen der Datenbankobjekte @@ -71,8 +71,8 @@ OtherKeysCreation=Erstellen der Fremdschlüssel und Indizes FunctionsCreation=Erstellen der Funktionen AdminAccountCreation=Erstellen des Administrationskontos PleaseTypePassword=Bitte geben Sie ein Passwort ein. Leere Passwörter sind nicht erlaubt. -PleaseTypeALogin=Bitte geben Sie den Benutzernamen ein. -PasswordsMismatch=Die eingegebenen Passwörter stimmen nicht überein. \nBitte versuchen Sie es erneut! +PleaseTypeALogin=Bitte geben Sie den Benutzernamen ein. +PasswordsMismatch=Die eingegebenen Passwörter stimmen nicht überein. \nBitte versuchen Sie es erneut! SetupEnd=Ende der Erstkonfiguration SystemIsInstalled=Die Installation wurde erfolgreich abgeschlossen. SystemIsUpgraded=Der Aktualisierungsvorgang wurde erfolgreich abgeschlossen. @@ -102,14 +102,14 @@ UpgradeDesc=Verwenden Sie diesen Modus zum Ersetzen Ihrer bisherigen Dolibarr-Ve Start=Start InstallNotAllowed=Die in der Konfigurationsdatei conf.php gesetzten Berechtigungen verhindern eine Ausführung des Installationsvorganges. YouMustCreateWithPermission=Für den Installationsvorgang erstellen Sie bitte die Datei %s und machen Sie diese für Ihren Webserver beschreibbar. -CorrectProblemAndReloadPage=Bitte beheben Sie das Problem und drücken anschließend auf F5 um die Seite neu zu laden. +CorrectProblemAndReloadPage=Bitte beheben Sie das Problem und drücken anschließend auf F5 um die Seite neu zu laden. AlreadyDone=Migration bereits durchgeführt DatabaseVersion=Datenbankversion ServerVersion=Version des Datenbankservers YouMustCreateItAndAllowServerToWrite=Bitte erstellen Sie dieses Verzeichnis und machen Sie dieses für Ihren Webserver beschreibbar. DBSortingCollation=Reihenfolge der Zeichensortierung YouAskDatabaseCreationSoDolibarrNeedToConnect=Sie haben die Option Datenbank %s erstellen ausgewählt. Hierfür benötigt Dolibarr eine Verbindung zum Server %s mit den Berechtigungen des Super-Users%s. -YouAskLoginCreationSoDolibarrNeedToConnect=Sie möchten den Datenbank-Benutzer %s erstellen. Dafür benötigt Dolibarr jedoch eine Serververbindung %s mit super user %s Berechtigungen. +YouAskLoginCreationSoDolibarrNeedToConnect=Sie möchten den Datenbank-Benutzer %s erstellen. Dafür benötigt Dolibarr jedoch eine Serververbindung %s mit super user %s Berechtigungen. BecauseConnectionFailedParametersMayBeWrong=Die Datenbankverbindung ist fehlgeschlagen: Die Host- oder Superuser-Parameter sind falsch. OrphelinsPaymentsDetectedByMethod=Verwaiste Zahlung gefunden durch Methode %s RemoveItManuallyAndPressF5ToContinue=Bitte manuell entfernen und F5 drücken um fortzufahren. @@ -129,7 +129,7 @@ MigrationCustomerOrderShipping=Migrieren Sie den Versand für die Speicherung vo MigrationShippingDelivery=Aktualisiere die Speicherung von Lieferungen (Versandart?) MigrationShippingDelivery2=Aktualisiere die Speicherung von Lieferungen 2 (Versandart 2?) MigrationFinished=Migration abgeschlossen -LastStepDesc=Fast geschafft: Legen Sie hier Benutzername und Passwort des Administrators für Dolibarr fest. Bewahren Sie diese Daten gut auf, da es sich hierbei um das Administratorkonto handelt, über das alle anderen Benutzerkonten verwaltet werden. +LastStepDesc=Letzter Schritt: Legen Sie hier Benutzername und Passwort des Administrators für Dolibarr fest. Bewahren Sie diese Daten gut auf, da es sich hierbei um das Administratorkonto handelt, über das alle anderen Benutzerkonten verwaltet werden. ActivateModule=Aktivieren von Modul %s ShowEditTechnicalParameters=Hier klicken um erweiterte Funktionen zu zeigen/bearbeiten (Expertenmodus) WarningUpgrade=Warnung:\nHaben Sie ein Datenbank Backup erstellt?\nDies wird unbedingt empfohlen. Datenverluste (durch Fehler in der mysql Version 5.5.40/41/42/43) können durch diesen Prozess auftreten, daher ist ein komplettes Datenbank-Backup vor jeder Migration unumgänglich.\n\nKlicke auf OK , um die Migration zu starten... @@ -190,7 +190,7 @@ MigrationProjectTaskActors=Datenmigration für Tabelle llx_projet_task_actors MigrationProjectUserResp=Datenmigration des Feldes fk_user_resp von llx_projet nach llx_element_contact MigrationProjectTaskTime=Aktualisiere aufgewandte Zeit (in Sekunden) MigrationActioncommElement=Aktualisiere die Termine/Aufgaben -MigrationPaymentMode=Migration der Daten für die Zahlungsart +MigrationPaymentMode=Migration der Daten für die Zahlungsart MigrationCategorieAssociation=Migration von Kategorien MigrationEvents=Ereignisse migrieren, um den Ereigniseigentümer in die Zuordnungstabelle aufzunehmen MigrationEventsContact=Ereignisse migrieren, um den Ereigniskontakt in die Zuordnungstabelle aufzunehmen diff --git a/htdocs/langs/de_DE/interventions.lang b/htdocs/langs/de_DE/interventions.lang index 658581c66df..8311d9ec40a 100644 --- a/htdocs/langs/de_DE/interventions.lang +++ b/htdocs/langs/de_DE/interventions.lang @@ -14,28 +14,31 @@ InterventionContact=Kontakte/Adressen DeleteIntervention=Serviceauftrag löschen ValidateIntervention=Serviceauftrag freigeben ModifyIntervention=Serviceauftrag ändern +CloseIntervention=Serviceauftrag schließen DeleteInterventionLine=Position im Serviceauftrag löschen ConfirmDeleteIntervention=Möchten Sie diesen Serviceauftrag wirklich löschen? ConfirmValidateIntervention=Sind Sie sicher, dass Sie den Serviceauftrag %s freigeben wollen? ConfirmModifyIntervention=Möchten Sie diesen Serviceauftrag wirklich ändern? +ConfirmCloseIntervention=Sind Sie sicher, dass Sie diesen Serviceauftrag schließen wollen? ConfirmDeleteInterventionLine=Möchten Sie diese Serviceauftragsposition wirklich löschen? ConfirmCloneIntervention=Möchten Sie diesen Serviceauftrag wirklich duplizieren? NameAndSignatureOfInternalContact=Name und Unterschrift des Mitarbeiters: NameAndSignatureOfExternalContact=Name und Unterschrift des Kunden: DocumentModelStandard=Standard-Dokumentenvorlage für Serviceaufträge InterventionCardsAndInterventionLines=Serviceaufträge und Serviceauftragspositionen -InterventionClassifyBilled=Als "in Rechnung gestellt" markieren -InterventionClassifyUnBilled=Als "nicht in Rechnung gestellt" markieren +InterventionClassifyBilled=Als 'fakturiert' markieren +InterventionClassifyUnBilled=Als 'nicht fakturiert' markieren InterventionClassifyDone=Als "erledigt" markieren StatusInterInvoiced=In Rechnung gestellt SendInterventionRef=Serviceauftrag %s -SendInterventionByMail=Serviceauftrag per E-Mail versenden +SendInterventionByMail=Serviceauftrag per E-Mail versenden InterventionCreatedInDolibarr=Serviceauftrag %s erstellt InterventionValidatedInDolibarr=Serviceauftrag %s freigegeben InterventionModifiedInDolibarr=Serviceauftrag %s geändert InterventionClassifiedBilledInDolibarr=Serviceauftrag %s als "in Rechnung gestellt" markiert InterventionClassifiedUnbilledInDolibarr=Serviceauftrag %s als "nicht in Rechnung gestellt" markiert InterventionSentByEMail=Serviceauftrag %s per E-Mail versendet +InterventionClosedInDolibarr= Serviceauftrag %s geschlossen InterventionDeletedInDolibarr=Serviceauftrag %s gelöscht InterventionsArea=Übersicht Serviceaufträge DraftFichinter=Serviceaufträge im Entwurf diff --git a/htdocs/langs/de_DE/main.lang b/htdocs/langs/de_DE/main.lang index b6b63905e80..24e05c98b23 100644 --- a/htdocs/langs/de_DE/main.lang +++ b/htdocs/langs/de_DE/main.lang @@ -73,7 +73,7 @@ ErrorCantLoadUserFromDolibarrDatabase=Benutzer %s in der Dolibarr-Datenba ErrorNoVATRateDefinedForSellerCountry=Fehler, keine MwSt.-Sätze für Land '%s' definiert. ErrorNoSocialContributionForSellerCountry=Fehler, Sozialabgaben/Steuerwerte für Staat '%s' nicht definiert. ErrorFailedToSaveFile=Fehler, konnte Datei nicht speichern. -ErrorCannotAddThisParentWarehouse=Sie versuchen ein Hauptlager hinzuzufügen, das bereits ein Unterlager eines existierenden Lagerortes ist +ErrorCannotAddThisParentWarehouse=Sie versuchen ein Hauptlager hinzuzufügen, das bereits ein Unterlager eines existierenden Lagerortes ist ErrorInvalidSubtype=Der ausgewählte Subtyp ist nicht zulässig FieldCannotBeNegative=Feld "%s" darf nicht negativ sein MaxNbOfRecordPerPage=Max. Anzahl der Datensätze pro Seite @@ -169,7 +169,7 @@ RemoveLink=Entferne Link AddToDraft=Zum Entwurf hinzufügen Update=Aktualisieren Close=Schließen -CloseAs=Status ändern in +CloseAs=Status ändern in CloseBox=Widget von Ihrer Startseite entfernen Confirm=Bestätigen ConfirmSendCardByMail=Möchten Sie wirklich die Inhalte dieser Karteikarte per E-Mail an %s senden? @@ -420,6 +420,8 @@ TotalTTCShort=Gesamt (inkl. Ust) TotalHT=Nettosumme TotalHTforthispage=Gesamtpreis (Netto) für diese Seite Totalforthispage=Gesamtbetrag dieser Seite +GrandTotal=Gesamtsumme +TotalforAllPages=Gesamtsumme für alle Seiten TotalTTC=Bruttosumme TotalTTCToYourCredit=\nGesamtbetrag (inkl. USt.) zu ihren Gunsten TotalVAT=USt. gesamt @@ -647,6 +649,7 @@ ReportName=Berichtsname ReportPeriod=Berichtszeitraum ReportDescription=Beschreibung Report=Bericht +Reports=Berichte Keyword=Schlüsselwort Origin=Quelle Legend=Legende @@ -1259,7 +1262,7 @@ URLToLink=zu verlinkende URL OverwriteIfExists=Vorhandene Datei überschreiben AmountSalary=Gehalt Betrag InvoiceSubtype=Rechnung Untertyp -ConfirmMassReverse=Massenaktion Umkehr der Bestätigung +ConfirmMassReverse=Massenaktion Umkehr der Bestätigung ConfirmMassReverseQuestion=Sind Sie sicher, dass Sie die ausgewählten %s Datensätze umkehren wollen? ElementType=Elementtyp ElementId=Element ID diff --git a/htdocs/langs/de_DE/margins.lang b/htdocs/langs/de_DE/margins.lang index 4876b0cffd9..c0714b3ef18 100644 --- a/htdocs/langs/de_DE/margins.lang +++ b/htdocs/langs/de_DE/margins.lang @@ -38,7 +38,7 @@ CostPrice=Selbstkostenpreis UnitCharges=Einheit Kosten Charges=Kosten AgentContactType=Kontaktart Handelsvertreter -AgentContactTypeDetails=Definieren Sie, welcher Kontakttyp (auf Rechnungen verlinkt) für die Berichterstattung pro Kontakt / Adresse verwendet wird. Beachten Sie, dass das Lesen von Statistiken zu einem Kontakt nicht zuverlässig ist, da der Kontakt in den meisten Fällen nicht explizit auf den Rechnungen definiert ist. +AgentContactTypeDetails=Definieren Sie, welcher Kontakttyp (auf Rechnungen verlinkt) für die Berichterstattung pro Kontakt/Adresse verwendet wird. Beachten Sie, dass das Lesen von Statistiken zu einem Kontakt nicht zuverlässig ist, da der Kontakt in den meisten Fällen nicht explizit auf den Rechnungen definiert ist. rateMustBeNumeric=Die Rate muss ein numerischer Wert sein markRateShouldBeLesserThan100=Die markierte Rate sollte kleiner sein als 100 ShowMarginInfos=Zeige Rand-Informationen diff --git a/htdocs/langs/de_DE/mrp.lang b/htdocs/langs/de_DE/mrp.lang index a44b939cdcb..c2caf31f2c2 100644 --- a/htdocs/langs/de_DE/mrp.lang +++ b/htdocs/langs/de_DE/mrp.lang @@ -7,7 +7,7 @@ MrpSetupPage=Einrichtung des Moduls Materialbedarfsplanung (MRP) MenuBOM=Stücklisten LatestBOMModified=Zuletzt bearbeitete Stücklisten (maximal %s) LatestMOModified=Zuletzt bearbeitete Fertigungsaufträge (maximal %s) -Bom=Stücklisten +Bom=Stückliste BillOfMaterials=Stückliste BillOfMaterialsLines=Stücklistenpositionen BOMsSetup=Stücklisten Modul einrichten @@ -31,9 +31,14 @@ Consumption=Verbrauch ValueOfMeansLoss=Ein Wert von 0,95 bedeutet einen durchschnittlichen Verlust von 5%% während der Herstellung oder Demontage ValueOfMeansLossForProductProduced=Ein Wert von 0,95 bedeutet im Durchschnitt 5%% Verlust bei dem hergestellten Produkt DeleteBillOfMaterials=Stückliste löschen +CancelMo=Fertigungsauftrag abbrechen +MoCancelConsumedAndProducedLines=Auch alle verbrauchten und produzierten Zeilen stornieren (Zeilen löschen und Lagerbestände rücksetzen) +ConfirmCancelMo=Sind Sie sicher, dass Sie diesen Fertigungsauftrag abbrechen wollen?? DeleteMo=Fertigungsauftrag löschen ConfirmDeleteBillOfMaterials=Möchten Sie diese Stückliste wirklich löschen? ConfirmDeleteMo=Möchten Sie diesen Fertigungsauftrag wirklich löschen? +DeleteMoChild = Untergeordnete Fertigungsaufträge, die mit diesem Fertigungsauftrag %s verknüpft sind, löschen +MoChildsDeleted = Alle untergeordneten Fertigungsaufträge wurden gelöscht MenuMRP=Fertigungsaufträge NewMO=Neuer Fertigungsauftrag QtyToProduce=Produktionsmenge @@ -60,6 +65,8 @@ ToProduce=Zu produzieren ToObtain=Zu erhalten QtyAlreadyConsumed=Menge bereits verbraucht QtyAlreadyProduced=Menge bereits produziert +QtyAlreadyConsumedShort=Verbrauchte Menge +QtyAlreadyProducedShort=Produzierte Menge QtyRequiredIfNoLoss=Erforderliche Menge, um die in der Stückliste definierte Menge zu produzieren, wenn kein Verlust entsteht (wenn die Fertigungseffizienz 100%% beträgt) ConsumeOrProduce=Verbrauchen oder produzieren ConsumeAndProduceAll=Alles verbrauchen und produzieren @@ -99,8 +106,8 @@ ConfirmDisableWorkstation=Sind Sie sicher, dass Sie die Arbeitsstation %s %s. AddFolder=Ordner erstellen FileWasCreateFolder=Ordner %s wurde erstellt FTPFailedToCreateFolder=Ordner %s konnte nicht erstellt werden. +SelectADay=Einen Tag im Kalender auswählen +SelectANewDate=Ein neues Datum auswählen diff --git a/htdocs/langs/de_DE/products.lang b/htdocs/langs/de_DE/products.lang index 054da4fd1c7..7e70dbb5813 100644 --- a/htdocs/langs/de_DE/products.lang +++ b/htdocs/langs/de_DE/products.lang @@ -70,7 +70,7 @@ UpdateDefaultPrice=Standardpreis aktualisieren UpdateLevelPrices=Preise für Preissegmente ändern AppliedPricesFrom=Erstellungszeitpunkt SellingPrice=Verkaufspreis -SellingPriceHT=Verkaufspreis (ohne Steuern) +SellingPriceHT=Verkaufspreis (ohne Steuern) SellingPriceTTC=Verkaufspreis (inkl. USt.) SellingMinPriceTTC=Mindestverkaufspreis (inkl. USt.) CostPriceDescription=Dieses Preisfeld (ohne Steuern) kann verwendet werden, um den durchschnittlichen Betrag zu erfassen, den dieses Produkt für Ihr Unternehmen kostet. Dies kann ein beliebiger Preis sein, den Sie selbst berechnen, beispielsweise aus dem durchschnittlichen Kaufpreis zuzüglich der durchschnittlichen Produktions- und Vertriebskosten. @@ -208,11 +208,6 @@ unitSET=Zusammenstellung unitS=Sekunden unitH=Stunden unitD=Tag -unitG=Gramm -unitM=Meter -unitLM=Laufende Meter -unitM2=Quadratmeter -unitM3=Kubikmeter unitL=Liter unitT=Tonne unitKG=kg @@ -221,6 +216,7 @@ unitMG=mg unitLB=Pfund unitOZ=Unze unitM=Meter +unitLM=Laufende Meter unitDM=dm unitCM=cm unitMM=mm @@ -398,7 +394,7 @@ NoEditVariants=Gehen Sie zur übergeordneten Produktkarte und bearbeiten Sie die ConfirmCloneProductCombinations=Sollen alle Produktvarianten zum anderen Produkt mit der gegebenen Referenz kopiert werden? CloneDestinationReference=Ref. des Zielprodukts ErrorCopyProductCombinations=Es gab einen Fehler, während Produkt Varianten kopiert wurden -ErrorDestinationProductNotFound=Zielprodukt nicht gefunden +ErrorDestinationProductNotFound=Zielprodukt nicht gefunden ErrorProductCombinationNotFound=Produktvariante nicht gefunden ActionAvailableOnVariantProductOnly=Aktion nur für die Produktvariante verfügbar ProductsPricePerCustomer=Produktpreise pro Kunde @@ -435,5 +431,8 @@ ConfirmEditExtrafield = Wählen Sie das zu ändernde Extrafeld aus ConfirmEditExtrafieldQuestion = Möchten Sie dieses Extrafeld wirklich ändern? ModifyValueExtrafields = Wert eines Extrafeldes ändern OrProductsWithCategories=Oder Produkte mit Tags/Kategorien -WarningTransferBatchStockMouvToGlobal = Wenn Sie dieses Produkt ohne Seriennummern verwalten möchten, wird der nach Seriennummern erfasste Lagerbestand einen globalen Lagerbestand umgewandelt +WarningTransferBatchStockMouvToGlobal = Wenn Sie dieses Produkt ohne Seriennummern verwalten möchten, wird der nach Seriennummern erfasste Lagerbestand einen globalen Lagerbestand umgewandelt WarningConvertFromBatchToSerial=Wenn Sie derzeit eine Menge größer oder gleich 2 für das Produkt haben, bedeutet der Wechsel zu dieser Auswahl, dass Sie immer noch über ein Produkt verfügen mit verschiedenen Objekten derselben Charge (während Sie ein eindeutige Seriennummer wünschen). Die Dopplung bleibt bestehen, bis eine Bestandsaufnahme oder eine manuelle Lagerbestandsbewegung zur Behebung dieses Problems erfolgt ist. +AllowStockMovementVariantParent=Auch Lagerbewegungen der Elternprodukte von Variantenprodukten aufzeichnen. +AllowStockMovementVariantParentHelp=Standardmäßig ist ein Elternprodukt eines Variantenprodukts ein virtuelles Produkt, daher wird kein Lagerbestand dafür verwaltet. Durch Aktivieren dieser Option wird ein Lagerbestand für Elternprodukte verwaltet und jedes Mal, wenn eine Lagermenge für ein Variantenprodukt geändert wird, wird dieselbe Menge für das Elternprodukt geändert. Sie sollten diese Option nicht benötigen, es sei denn, Sie verwenden Varianten, um dasselbe Produkt wie das Elternprodukt zu verwalten (aber mit unterschiedlichen Beschreibungen, Preisen...) +ConfirmSetToDraftInventory=Sind Sie sicher, dass Sie zurück zum Status Entwurf wechseln wollen?
Die aktuell im Bestand berücksichtigten Mengen werden zurückgesetzt. diff --git a/htdocs/langs/de_DE/receptions.lang b/htdocs/langs/de_DE/receptions.lang index 55c227f95d1..bdd59452ee3 100644 --- a/htdocs/langs/de_DE/receptions.lang +++ b/htdocs/langs/de_DE/receptions.lang @@ -5,8 +5,6 @@ RefReception=Ref. Wareneingang Reception=Wareneingang Receptions=Wareneingänge AllReceptions=Alle Wareneingänge -Reception=Wareneingang -Receptions=Wareneingänge ShowReception=Zeige Wareneingänge ReceptionsArea=Wareneingang ListOfReceptions=Wareneingangsliste @@ -32,7 +30,7 @@ StatusReceptionDraftShort=Entwurf StatusReceptionValidatedShort=Freigegeben StatusReceptionProcessedShort=Bearbeitet ReceptionSheet=Empfangsblatt -ValidateReception=Warenempfang bestätigen +ValidateReception=Warenempfang bestätigen ConfirmDeleteReception=Möchten Sie diesen Wareneingang wirklich löschen? ConfirmValidateReception=Möchten Sie diesen Wareneingang mit der Referenz %s wirklich freigeben ? ConfirmCancelReception=Möchten Sie diesen Wareneingang wirklich stornieren? diff --git a/htdocs/langs/de_DE/resource.lang b/htdocs/langs/de_DE/resource.lang index 3fa5ea8db6e..6fe86e205ea 100644 --- a/htdocs/langs/de_DE/resource.lang +++ b/htdocs/langs/de_DE/resource.lang @@ -1,6 +1,6 @@ # Dolibarr language file - Source file is en_US - resource MenuResourceIndex=Ressourcen -MenuResourceAdd=neue Ressource +MenuResourceAdd=Neue Ressource DeleteResource=Ressource löschen ConfirmDeleteResourceElement=Löschung der Ressource zu diesem Element bestätigen NoResourceInDatabase=Keine Ressource in der Datenbank @@ -14,7 +14,7 @@ ResourceFormLabel_ref=Ressourcen-Name ResourceType=Ressourcen-Typ ResourceFormLabel_description=Ressourcen-Beschreibung -ResourcesLinkedToElement=Mit Element verknüpfte Ressourcen +ResourcesLinkedToElement=Mit Element verknüpfte Ressourcen ShowResource=Ressource anzeigen @@ -37,3 +37,5 @@ ImportDataset_resource_1=Ressourcen ErrorResourcesAlreadyInUse=Einige Ressourcen werden verwendet ErrorResourceUseInEvent=%s wird im Ereignis %s verwendet + +MaxUsers=Maximale Anzahl Benutzer (Plätze, Sitze, etc.) diff --git a/htdocs/langs/de_DE/salaries.lang b/htdocs/langs/de_DE/salaries.lang index cd3e8d03ccd..89a340ac9f6 100644 --- a/htdocs/langs/de_DE/salaries.lang +++ b/htdocs/langs/de_DE/salaries.lang @@ -5,7 +5,7 @@ SALARIES_ACCOUNTING_ACCOUNT_CHARGE=Standard-Buchungskonto für Gehaltszahlungen CREATE_NEW_SALARY_WITHOUT_AUTO_PAYMENT=Lassen Sie beim Erstellen eines Gehalts standardmäßig die Option "Gesamtzahlung automatisch erstellen" leer Salary=Gehalt Salaries=Gehälter -NewSalary=Neues Gehalt +NewSalary=Neue Gehaltszahlung AddSalary=Gehalt hinzufügen NewSalaryPayment=Neue Gehaltskarte AddSalaryPayment=Gehaltszahlung hinzufügen @@ -22,6 +22,12 @@ LastSalaries=Letzte %s Gehälter AllSalaries=Alle Gehälter SalariesStatistics=Statistik Gehälter SalariesAndPayments=Gehälter und Gehaltszahlungen -ConfirmDeleteSalaryPayment=Möchten Sie diese Gehaltszahlung löschen? +ConfirmDeleteSalaryPayment=Möchten Sie diese Gehaltszahlung löschen? FillFieldFirst=Zuerst das Mitarbeiterfeld ausfüllen UpdateAmountWithLastSalary=Als Betrag letztes Gehalt vorbelegen +MakeTransferRequest=Überweisungsanforderung erstellen +VirementOrder=Überweisungsauftrag +BankTransferAmount=Höhe des zu überweisenden Betrags +WithdrawalReceipt=Überweisungsauftrag +OrderWaiting=Ausstehender Auftrag +FillEndOfMonth=Füllen Sie das Monatsende aus diff --git a/htdocs/langs/de_DE/trips.lang b/htdocs/langs/de_DE/trips.lang index 7c6377246de..23726abac6e 100644 --- a/htdocs/langs/de_DE/trips.lang +++ b/htdocs/langs/de_DE/trips.lang @@ -39,7 +39,7 @@ expenseReportCoef=Koeffizient expenseReportCoefUndefined=(Wert nicht definiert) expenseReportOffset=Auslage expenseReportPrintExample=offset + (d x coef) = %s -expenseReportRangeDisabled=Periode deaktiviert - Wörterbuch c_exp_tax_range +expenseReportRangeDisabled=Periode deaktiviert - siehe Stammdaten zu c_exp_tax_range expenseReportRangeFromTo=von %d bis %d expenseReportRangeMoreThan=mehr als %d expenseReportTotalForFive=Beispiel mit d = 5 @@ -103,7 +103,7 @@ ShowExpenseReport=Spesenabrechnung anzeigen ShowTrip=Spesenabrechnung anzeigen TripCard=Reisekosten – Übersicht TripId=Spesenabrechnung ID -TripNDF=Hinweise Spesenabrechnung +TripNDF=Informationen zur Spesenabrechnung TripSociete=Information zum Unternehmen Trips=Spesenabrechnungen TripsAndExpenses=Spesenabrechnungen diff --git a/htdocs/langs/de_DE/users.lang b/htdocs/langs/de_DE/users.lang index 0ad638c6a05..29bf78f8178 100644 --- a/htdocs/langs/de_DE/users.lang +++ b/htdocs/langs/de_DE/users.lang @@ -103,7 +103,7 @@ HierarchicalResponsible=Vorgesetzter HierarchicView=Hierarchische Ansicht UseTypeFieldToChange=Nutzen sie das Feld "Typ" zum Ändern OpenIDURL=OpenID URL -LoginUsingOpenID=Verwende OpenID für Anmeldung +LoginUsingOpenID=Verwende OpenID zur Anmeldung WeeklyHours=Sollarbeitszeit (Stunden pro Woche) ExpectedWorkedHours=Erwartete Wochenarbeitszeit ColorUser=Benutzerfarbe diff --git a/htdocs/langs/el_CY/errors.lang b/htdocs/langs/el_CY/errors.lang deleted file mode 100644 index c07bad2b19c..00000000000 --- a/htdocs/langs/el_CY/errors.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - errors -ErrorRefAlreadyExists=Reference %s used for creation already exists. diff --git a/htdocs/langs/el_CY/holiday.lang b/htdocs/langs/el_CY/holiday.lang deleted file mode 100644 index 254b07b0308..00000000000 --- a/htdocs/langs/el_CY/holiday.lang +++ /dev/null @@ -1,4 +0,0 @@ -# Dolibarr language file - Source file is en_US - holiday -MenuCollectiveAddCP=New collective leave -NewHolidayForGroup=New collective leave -SendRequestCollectiveCP=Create collective leave diff --git a/htdocs/langs/el_CY/languages.lang b/htdocs/langs/el_CY/languages.lang deleted file mode 100644 index 879813b70ad..00000000000 --- a/htdocs/langs/el_CY/languages.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - languages -Language_en_AE=English (United Arab Emirates) diff --git a/htdocs/langs/el_CY/orders.lang b/htdocs/langs/el_CY/orders.lang deleted file mode 100644 index a1e7f34c64b..00000000000 --- a/htdocs/langs/el_CY/orders.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - orders -SupplierOrderSubmitedInDolibarr=Purchase Order %s submitted (%s) diff --git a/htdocs/langs/el_CY/partnership.lang b/htdocs/langs/el_CY/partnership.lang deleted file mode 100644 index 6a2455e0302..00000000000 --- a/htdocs/langs/el_CY/partnership.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - partnership -ReasonDeclineOrCancel=Reason for refusal or cancellation diff --git a/htdocs/langs/el_GR/accountancy.lang b/htdocs/langs/el_GR/accountancy.lang index a259e6cc543..33b1b54bb14 100644 --- a/htdocs/langs/el_GR/accountancy.lang +++ b/htdocs/langs/el_GR/accountancy.lang @@ -24,8 +24,8 @@ ConfigAccountingExpert=Διαμόρφωση της ενότητας λογιστ Journalization=Καταχώρηση ημερολογίου Journals=Ημερολόγια JournalFinancial=Οικονομικά ημερολόγια -BackToChartofaccounts=Επιστροφή στο λογιστικό σχέδιο -Chartofaccounts=Λογιστικό σχέδιο +BackToChartofaccounts=Επιστροφή στο λογιστικό σχέδιο +Chartofaccounts=Λογιστικό σχέδιο ChartOfSubaccounts=Λογιστικό σχέδιο μεμονωμένων λογαριασμών ChartOfIndividualAccountsOfSubsidiaryLedger=Λογιστικό σχέδιο μεμονωμένων λογαριασμών του θυγατρικού καθολικού CurrentDedicatedAccountingAccount=Τρέχων αποκλειστικός λογαριασμός @@ -52,7 +52,7 @@ AccountantFiles=Εξαγωγή εγγράφων πηγής ExportAccountingSourceDocHelp=Με αυτό το εργαλείο, μπορείτε να αναζητήσετε και να εξαγάγετε τα συμβάντα πηγής που χρησιμοποιούνται για τη δημιουργία της λογιστικής σας.
Το εξαγόμενο αρχείο ZIP θα περιέχει τις λίστες των ζητούμενων στοιχείων σε CSV, καθώς και τα συνημμένα αρχεία τους στην αρχική τους μορφή (PDF, ODT, DOCX...). ExportAccountingSourceDocHelp2=Για να εξαγάγετε τα ημερολόγια σας, χρησιμοποιήστε την καταχώριση μενού %s - %s. ExportAccountingProjectHelp=Προσδιορίστε ένα έργο εάν χρειάζεστε μια λογιστική αναφορά μόνο για ένα συγκεκριμένο έργο. Οι αναφορές εξόδων και οι πληρωμές δανείων δεν περιλαμβάνονται στις αναφορές του έργου. -ExportAccountancy=Εξαγωγή λογιστικής +ExportAccountancy=Εξαγωγή λογιστικής WarningDataDisappearsWhenDataIsExported=Προειδοποίηση, αυτή η λίστα περιέχει μόνο τις λογιστικές εγγραφές που δεν έχουν ήδη εξαχθεί (η ημερομηνία εξαγωγής είναι κενή). Εάν θέλετε να συμπεριλάβετε τις λογιστικές εγγραφές που έχουν ήδη εξαχθεί, κάντε κλικ στο παραπάνω κουμπί. VueByAccountAccounting=Προβολή ανά λογαριασμό λογιστικής VueBySubAccountAccounting=Προβολή ανά υπολογαριασμό λογιστικής @@ -65,7 +65,7 @@ MainAccountForSubscriptionPaymentNotDefined=Ο λογαριασμός (από τ MainAccountForRetainedWarrantyNotDefined=Λογαριασμός (από το Λογιστικό Σχέδιο) για τη διατηρηθείσα εγγύηση που δεν έχει καθοριστεί στη ρύθμιση UserAccountNotDefined=Ο λογαριασμός λογιστικής για τον χρήστη δεν έχει οριστεί κατά τη ρύθμιση -AccountancyArea=Τομέας Λογιστικής +AccountancyArea=Τομέας Λογιστικής AccountancyAreaDescIntro=Η χρήση της ενότητας λογιστικής πραγματοποιείται σε διάφορα στάδια: AccountancyAreaDescActionOnce=Οι ακόλουθες ενέργειες εκτελούνται συνήθως μόνο μία φορά ή μία φορά το χρόνο ... AccountancyAreaDescActionOnceBis=Τα επόμενα βήματα πρέπει να γίνουν για να εξοικονομήσετε χρόνο στο μέλλον, προτείνοντάς σας αυτόματα τον σωστό προκαθορισμένο λογαριασμό λογιστικής κατά τη μεταφορά δεδομένων στη λογιστική @@ -118,7 +118,7 @@ MenuLoanAccounts=Λογαριασμοί δανείων MenuProductsAccounts=Λογαριασμοί προϊόντων MenuClosureAccounts=Κλείσιμο Λογαριασμών MenuAccountancyClosure=Κλείσιμο -MenuExportAccountancy=Εξαγωγή λογιστικής +MenuExportAccountancy=Εξαγωγή λογιστικής MenuAccountancyValidationMovements=Επικύρωση κινήσεων ProductsBinding=Λογαριασμοί προϊόντων TransferInAccounting=Μεταφορά στη λογιστική @@ -318,7 +318,7 @@ FicheVentilation=Καρτέλα Δεσμεύσεων GeneralLedgerIsWritten=Οι συναλλαγές καταχωρήθηκαν στο Καθολικό GeneralLedgerSomeRecordWasNotRecorded=Δεν ήταν δυνατή η καταγραφή ορισμένων από τις συναλλαγές. Εάν δεν υπάρχει άλλο μήνυμα σφάλματος, αυτό πιθανότατα οφείλεται στο ότι είχαν ήδη καταχωρηθεί στο ημερολόγιο. NoNewRecordSaved=Δεν υπάρχει άλλη εγγραφή για μεταφορά -ListOfProductsWithoutAccountingAccount=Κατάλογος προϊόντων που δεν δεσμεύονται σε κανένα λογαριασμό του λογιστικού σχεδίου +ListOfProductsWithoutAccountingAccount=Κατάλογος προϊόντων που δεν δεσμεύονται σε κανένα λογαριασμό του λογιστικού σχεδίου ChangeBinding=Αλλάξτε τη δέσμευση Accounted=Καταχωρήθηκε στο καθολικό NotYetAccounted=Δεν έχει μεταφερθεί ακόμη στη λογιστική @@ -335,7 +335,6 @@ CategoryDeleted=Η κατηγορία για τον λογαριασμό λογ AccountingJournals=Λογιστικά ημερολόγια AccountingJournal=Λογιστικό ημερολόγιο NewAccountingJournal=Νέο λογιστικό ημερολόγιο -ShowAccountingJournal=Εμφάνιση ημερολογίου λογιστικής NatureOfJournal=Φύση του ημερολογίου AccountingJournalType1=Διάφορες εργασίες AccountingJournalType2=Πωλήσεις @@ -365,7 +364,7 @@ ACCOUNTING_FORCE_ENABLE_VAT_REVERSE_CHARGE_DESC=Όταν είναι ενεργο ## Export NotExportLettering=Μην εξάγετε τη συμφωνία κατά τη δημιουργία του αρχείου -NotifiedExportDate=Επισήμανση γραμμών που δεν έχουν εξαχθεί ακόμη ως Εξαγόμενες (για να τροποποιήσετε μια γραμμή που έχει επισημανθεί ως εξαγόμενη, θα χρειαστεί να διαγράψετε ολόκληρη τη συναλλαγή και να τη μεταφέρετε ξανά στη λογιστική) +NotifiedExportDate=Επισήμανση γραμμών που δεν έχουν εξαχθεί ακόμη ως Εξαγόμενες (για να τροποποιήσετε μια γραμμή που έχει επισημανθεί ως εξαγόμενη, θα χρειαστεί να διαγράψετε ολόκληρη τη συναλλαγή και να τη μεταφέρετε ξανά στη λογιστική) NotifiedValidationDate=Επικύρωση και Κλείδωμα των εξαγόμενων καταχωρήσεων που δεν έχουν ήδη κλειδωθεί (το ίδιο αποτέλεσμα με τη δυνατότητα "%s", η τροποποίηση και η διαγραφή των γραμμών ΣΙΓΟΥΡΑ δεν θα είναι δυνατή) NotifiedExportFull=Εξαγωγή εγγράφων ; DateValidationAndLock=Ημερομηνία επικύρωσης και κλειδώματος @@ -393,7 +392,7 @@ Modelcsv_winfic=Εξαγωγή για Winfic - eWinfic - WinSis Compta Modelcsv_Gestinumv3=Εξαγωγή για Gestinum (v3) Modelcsv_Gestinumv5=Εξαγωγή για Gestinum (v5) Modelcsv_charlemagne=Εξαγωγή για το Aplim Charlemagne -ChartofaccountsId=Αναγνωριστικό λογιστικού σχεδίου +ChartofaccountsId=Αναγνωριστικό λογιστικού σχεδίου ## Tools - Init accounting account on product / service InitAccountancy=Έναρξη λογιστικής @@ -474,7 +473,7 @@ ErrorInvoiceContainsLinesNotYetBoundedShort=Ορισμένες γραμμές σ ExportNotSupported=Η διαμορφωμένη μορφή εξαγωγής δεν υποστηρίζεται σε αυτή τη σελίδα BookeppingLineAlreayExists=Γραμμές που υπάρχουν ήδη στη λογιστική NoJournalDefined=Δεν βρέθηκε ημερολόγιο -Binded=Δεσμευμένες γραμμές +Binded=Δεσμευμένες γραμμές ToBind=Γραμμές προς δέσμευση UseMenuToSetBindindManualy=Γραμμές που δεν έχουν ακόμη δεσμευτεί, χρησιμοποιήστε το μενού %s για να κάνετε τη δέσμευση χειροκίνητα SorryThisModuleIsNotCompatibleWithTheExperimentalFeatureOfSituationInvoices=Σημείωση: αυτή η ενότητα ή η σελίδα δεν είναι απολύτως συμβατή με την πειραματική λειτουργία των τιμολογίων κατάστασης. Ορισμένα δεδομένα μπορεί να είναι λάθος. @@ -482,7 +481,7 @@ AccountancyErrorMismatchLetterCode=Αναντιστοιχία στον κώδι AccountancyErrorMismatchBalanceAmount=Το ισοζύγιο (%s) δεν είναι ίσο με 0 AccountancyErrorLetteringBookkeeping=Παρουσιάστηκαν σφάλματα σχετικά με τις συναλλαγές: %s ErrorAccountNumberAlreadyExists=Ο λογιστικός αριθμός %s υπάρχει ήδη -ErrorArchiveAddFile=Δεν είναι δυνατή η αρχειοθέτηση του αρχείου "%s" +ErrorArchiveAddFile=Δεν είναι δυνατή η αρχειοθέτηση του αρχείου "%s" ErrorNoFiscalPeriodActiveFound=Δεν βρέθηκε ενεργή φορολογική περίοδος ErrorBookkeepingDocDateNotOnActiveFiscalPeriod=Η ημερομηνία του εγγράφου λογιστικής δεν βρίσκεται εντός της ενεργής φορολογικής περιόδου. ErrorBookkeepingDocDateIsOnAClosedFiscalPeriod=Η ημερομηνία του εγγράφου λογιστικής βρίσκεται εντός μιας κλειστής φορολογικής περιόδου diff --git a/htdocs/langs/el_GR/admin.lang b/htdocs/langs/el_GR/admin.lang index 51bd496a353..f25ecf160b8 100644 --- a/htdocs/langs/el_GR/admin.lang +++ b/htdocs/langs/el_GR/admin.lang @@ -118,7 +118,7 @@ ComptaSetup=Ρύθμιση Λογιστικής ενότητας UserSetup=Ρύθμιση χρήστη MultiCurrencySetup=Ρύθμιση πολλαπλών νομισμάτων MenuLimits=Όρια και ακρίβεια -MenuIdParent=Αναγνωριστικό γονικού μενού +MenuIdParent=Αναγνωριστικό γονικού μενού DetailMenuIdParent=Αναγνωριστικό γονικού μενού (κενό για κορυφαίο μενού) ParentID=Αναγνωριστικό γονέα DetailPosition=Αριθμός Ταξινόμησης για να καθοριστεί η θέση του μενού @@ -136,7 +136,7 @@ IdPermissions=Αναγνωριστικό αδειών LanguageBrowserParameter=Παράμετρος %s LocalisationDolibarrParameters=Παράμετροι τοπικών ρυθμίσεων ClientHour=Ωρα χρήστη (χρήστης) -OSTZ=Ζώνη ώρας του λειτουργικού συστήματος του διακομιστή +OSTZ=Ζώνη ώρας του λειτουργικού συστήματος του διακομιστή PHPTZ=Ζώνη Ώρας διακομιστή PHP DaylingSavingTime=Η θερινή ώρα (χρήστη) CurrentHour=Ώρα PHP (server) @@ -238,7 +238,7 @@ DevelopYourModuleDesc=Μερικές λύσεις για να αναπτύξετ URL=URL RelativeURL=Σχετική διεύθυνση URL BoxesAvailable=Διαθέσιμα γραφικά στοιχεία -BoxesActivated=Ενεργοποιημένα γραφικά στοιχεία +BoxesActivated=Ενεργοποιημένα γραφικά στοιχεία ActivateOn=Ενεργοποιήστε στις ActiveOn=Ενεργοποιήθηκε στις ActivatableOn=Δυνατότητα ενεργοποίησης σε @@ -289,7 +289,7 @@ Emails=Emails EMailsSetup=Ρύθμιση Email EMailsDesc=Αυτή η σελίδα σας επιτρέπει να ορίσετε τις παραμέτρους η επιλογές για αποστολή email. EmailSenderProfiles=Προφίλ αποστολέων Email -EMailsSenderProfileDesc=Μπορείτε να αφήσετε αυτή την ενότητα κενή. Αν εισάγετε email εδώ, θα προστεθούν στη λίστα πιθανών αποστολέων όταν γράφετε ένα νέο email. +EMailsSenderProfileDesc=Μπορείτε να αφήσετε αυτή την ενότητα κενή. Αν εισάγετε email εδώ, θα προστεθούν στη λίστα πιθανών αποστολέων όταν γράφετε ένα νέο email. MAIN_MAIL_SMTP_PORT=Θύρα SMTP / SMTPS (προεπιλεγμένη τιμή στο php.ini: %s ) MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (προεπιλεγμένη τιμή στο php.ini: %s ) MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port @@ -368,7 +368,7 @@ GenericMaskCodes3EAN=Όλοι οι άλλοι χαρακτήρες στη μάσ GenericMaskCodes4a=Παράδειγμα για το 99ο %s του τρίτου μέρους TheCompany, με ημερομηνία 31-01-2023:
GenericMaskCodes4b=Παράδειγμα του τρίτου μέρους που δημιουργήθηκε στις 31-01-2023:
GenericMaskCodes4c=Παράδειγμα του προϊόντος που δημιουργήθηκε στις 31-01-2023:
-GenericMaskCodes5= ABC{yy} {mm}-{000000} θα δώσει ABC2301-000099
{0000+100@1}-ZZZ/{dd}/XXX θα δώσει 0199-ΖΖΖ/31/XXX
IN{yy}{mm}-{0000}-{t} θα δώσει το IN2301-0099-AΑν ο τύπος της εταιρείας ειναι 'Responsable Inscripto' με κωδικό για τύπο που ειναι 'A_RI' +GenericMaskCodes5= ABC{yy} {mm}-{000000} θα δώσει ABC2301-000099
{0000+100@1}-ZZZ/{dd}/XXX θα δώσει 0199-ΖΖΖ/31/XXX
IN{yy}{mm}-{0000}-{t} θα δώσει το IN2301-0099-AΑν ο τύπος της εταιρείας ειναι 'Responsable Inscripto' με κωδικό για τύπο που ειναι 'A_RI' GenericNumRefModelDesc=Επιστρέφει έναν παραμετροποιήσημο αριθμό σύμφωνα με μία ορισμένη μάσκα. ServerAvailableOnIPOrPort=Ο διακομιστής είναι διαθέσιμος στην διεύθυνση %s στην θύρα %s ServerNotAvailableOnIPOrPort=Ο διακομιστής δεν είναι διαθέσιμος στην διεύθυνση %s στην θύρα %s @@ -481,10 +481,10 @@ SetAsDefault=Ορισμός ως προεπιλογή ValueOverwrittenByUserSetup=Προσοχή, αυτή η τιμή μπορεί να αντικατασταθεί από επιλογή του χρήστη (ο κάθε χρήστης μπορεί να κάνει τον δικό του σύνδεσμο clicktodial) ExternalModule=Εξωτερική ενότητα InstalledInto=Εγκαταστάθηκε στον κατάλογο %s -BarcodeInitForThirdparties=Μαζική έναρξη γραμμικού κώδικα για Πελάτες/Προμηθευτές +BarcodeInitForThirdparties=Μαζική έναρξη γραμμικού κώδικα για Πελάτες/Προμηθευτές BarcodeInitForProductsOrServices=Μαζική έναρξη ή επαναφορά barcode για προϊόντα ή υπηρεσίες CurrentlyNWithoutBarCode=Επί του παρόντος, έχετε %s εγγραφές %s %s χωρίς barcode. -InitEmptyBarCode=Τιμή έναρξης για τους %s κενούς γραμμικούς κώδικες +InitEmptyBarCode=Τιμή έναρξης για τους %s κενούς γραμμικούς κώδικες EraseAllCurrentBarCode=Διαγράψτε όλες τις τρέχουσες τιμές barcode ConfirmEraseAllCurrentBarCode=Είστε σίγουροι ότι θέλετε να διαγράψετε όλες τις τρέχουσες τιμές barcode; AllBarcodeReset=Όλες οι τιμές barcode έχουν αφαιρεθεί @@ -773,7 +773,7 @@ Permission92=Δημιουργία / τροποποίηση κοινωνικών Permission93=Διαγραφή κοινωνικών ή φορολογικών εισφορών και ΦΠΑ Permission94=Εξαγωγή κοινωνικών ή φορολογικών εισφορών Permission95=Ανάγνωση αναφορών -Permission101=Ανάγνωση αποστολών +Permission101=Ανάγνωση αποστολών Permission102=Δημιουργία / τροποποίηση αποστολών Permission104=Επικύρωση αποστολών Permission105=Αποστολή αποστολών μέσω email @@ -1197,6 +1197,7 @@ Skin=Θέμα DefaultSkin=Βασικό Θέμα MaxSizeList=Μέγιστο μήκος για λίστα DefaultMaxSizeList=Προεπιλεγμένο μέγιστο μέγεθος για λίστες +DisplayGrandTotalInList=Εμφάνιση του γενικού συνόλου (για όλες τις σελίδες) στο υποσέλιδο λιστών DefaultMaxSizeShortList=Προεπιλεγμένο μέγιστο μήκος για σύντομες λίστες (π.χ. Σε κάρτα πελάτη) MessageOfDay=Μήνυμα της ημέρας MessageLogin=Μήνυμα σελίδας εισόδου @@ -1290,7 +1291,7 @@ TriggerAlwaysActive=Τα triggers σε αυτό το αρχείο είναι π TriggerActiveAsModuleActive=Τα triggers σε αυτό το αρχείο είναι ενεργά καθώς η ενότητα %s είναι ενεργοποιημένη. GeneratedPasswordDesc=Επιλέξτε τη μέθοδο που θα χρησιμοποιηθεί για κωδικούς πρόσβασης που δημιουργούνται αυτόματα. DictionaryDesc=Εισάγετε όλα τα δεδομένα αναφοράς. Μπορείτε να προσθέσετε τις τιμές σας στην προεπιλογή. -ConstDesc=Αυτή η σελίδα επιτρέπει την επεξεργασία (αντικατάσταση) παραμέτρων που δεν είναι διαθέσιμες σε άλλες σελίδες. Αυτές είναι κυρίως δεσμευμένες παράμετροι για προγραμματιστές/ προχωρημένη αντιμετώπιση προβλημάτων μόνο. +ConstDesc=Αυτή η σελίδα επιτρέπει την επεξεργασία (αντικατάσταση) παραμέτρων που δεν είναι διαθέσιμες σε άλλες σελίδες. Αυτές είναι κυρίως δεσμευμένες παράμετροι για προγραμματιστές/ προχωρημένη αντιμετώπιση προβλημάτων μόνο. MiscellaneousOptions=Διάφορες επιλογές MiscellaneousDesc=Όλες οι άλλες παράμετροι που σχετίζονται με την ασφάλεια ορίζονται εδώ. LimitsSetup=Ρύθμιση Ορίων/Ακριβείας @@ -2015,7 +2016,7 @@ ExpectedChecksum=Αναμενόμενο άθροισμα ελέγχου CurrentChecksum=Τρέχον άθροισμα ελέγχου ExpectedSize=Αναμενόμενο μέγεθος CurrentSize=Τρέχον μέγεθος -ForcedConstants=Απαιτούμενες τιμές σταθερών (constants) +ForcedConstants=Απαιτούμενες τιμές σταθερών (constants) MailToSendProposal=Προσφορές πελατών MailToSendOrder=Εντολές πωλήσεων MailToSendInvoice=Τιμολόγια πελατών @@ -2231,7 +2232,7 @@ RecipientEmailsWillBeReplacedWithThisValue=Τα email των παραληπτώ AtLeastOneDefaultBankAccountMandatory=Πρέπει να οριστεί τουλάχιστον ένας προεπιλεγμένος τραπεζικός λογαριασμός RESTRICT_ON_IP=Να επιτρέπεται η πρόσβαση στην API μόνο σε συγκεκριμένες διευθύνσεις IP πελάτη (δεν επιτρέπεται η χρήση μπαλαντέρ, αφήστε κενό διάστημα μεταξύ των τιμών). Κενή τιμή σημαίνει ότι κάθε πελάτης μπορεί να έχει πρόσβαση. IPListExample=127.0.0.1 192.168.0.2 [::1] -BaseOnSabeDavVersion=Βασισμένο στην έκδοση της βιβλιοθήκης SabreDAV +BaseOnSabeDavVersion=Βασισμένο στην έκδοση της βιβλιοθήκης SabreDAV NotAPublicIp=Δεν είναι δημόσια IP MakeAnonymousPing=Πραγματοποιήστε ένα ανώνυμο Ping '+1' στον διακομιστή του Dolibarr (εκτελείται 1 φορά μόνο μετά την εγκατάσταση) για να επιτρέψετε στον οργανισμό να μετρήσει τον αριθμό των εγκαταστάσεων Dolibarr. FeatureNotAvailableWithReceptionModule=Η δυνατότητα δεν είναι διαθέσιμη όταν η ενότητα Παραλαβή είναι ενεργοποιημένη @@ -2371,7 +2372,7 @@ MaxNumberOfImagesInGetPost=Μέγιστος επιτρεπόμενος αριθ MaxNumberOfPostOnPublicPagesByIP=Μέγιστος αριθμός αναρτήσεων σε δημόσιες σελίδες με την ίδια διεύθυνση IP σε ένα μήνα CIDLookupURL=Η ενότητα φέρνει μια διεύθυνση URL που μπορεί να χρησιμοποιηθεί από ένα εξωτερικό εργαλείο για να λάβει το όνομα ενός τρίτου μέρους ή επαφής από τον αριθμό τηλεφώνου του. Η διεύθυνση URL προς χρήση είναι: ScriptIsEmpty=Το script είναι κενό -ShowHideTheNRequests=Εμφάνιση/απόκρυψη των %s αιτημάτων SQL +ShowHideTheNRequests=Εμφάνιση/απόκρυψη των %s αιτημάτων SQL DefinedAPathForAntivirusCommandIntoSetup=Ορίστε μια διαδρομή για ένα πρόγραμμα προστασίας από ιούς στο %s TriggerCodes=Συμβάντα που ξεκινούν άλλες ενέργειες TriggerCodeInfo=Εισάγετε εδώ τον κώδικα των trigger που θα δημιουργήσει μια ανάρτηση ενός αιτήματος ιστού (επιτρέπονται μόνο εξωτερικές διευθύνσεις URL). Μπορείτε να εισάγετε πολλούς κώδικες trigger διαχωρισμένους από κόμμα. @@ -2430,6 +2431,15 @@ RecommendedForProduction=Συνιστάται σε Παραγωγικό περι RecommendedForDebug=Συνιστάται για αποσφαλμάτωση UrlPublicInterfaceLabelAdmin=Εναλλακτική διεύθυνση URL για δημόσια διεπαφή UrlPublicInterfaceHelpAdmin=Είναι δυνατόν να ορίσετε ένα ψευδώνυμο(alias) στον διακομιστή ιστού και έτσι να διαθέσετε τη δημόσια διεπαφή με μια άλλη διεύθυνση URL (ο διακομιστής πρέπει να ενεργεί ως διακομιστής μεσολάβησης(proxy) στην κανονική διεύθυνση URL) -ExportUseForce=Use the parameter -f -ExportUseForceHelp=Force to continue the export even when an error is found (Backup may not be reliable) -CustomPrompt=Custom prompts +ExportUseForce=Χρησιμοποιήστε την παράμετρο -f +ExportUseForceHelp=Αναγκαστική συνέχιση της εξαγωγής ακόμη και όταν εντοπιστεί σφάλμα (Το αντίγραφο ασφαλείας ενδέχεται να μην είναι αξιόπιστο) +CustomPrompt=Προσαρμοσμένες προτροπές +AiDescription=Χαρακτηριστικά AI (Τεχνητής Νοημοσύνης). +AiDescriptionLong=Provides AI (Artificial Intelligence) features in different part of the application. Need external AI API. +AI_KEY_API_CHATGPT= Key for ChatGPT IA api +AiSetup=Ρύθμιση ενότητας ΑΙ +AiCustomPrompt=Προσαρμοσμένες προτροπές AI +AI_CONFIGURATIONS_PROMPT=Προσαρμοσμένη προτροπή +ImageGeneration=Δημιουργία εικόνας +AIPromptForFeatures=AI custom prompts for features +EnterAnIP=Εισάγετε μια διεύθυνση IP diff --git a/htdocs/langs/el_GR/main.lang b/htdocs/langs/el_GR/main.lang index fb192d33b61..131a34fbf41 100644 --- a/htdocs/langs/el_GR/main.lang +++ b/htdocs/langs/el_GR/main.lang @@ -420,6 +420,8 @@ TotalTTCShort=Σύνολο (με Φ.Π.Α.) TotalHT=Σύνολο χωρίς ΦΠΑ TotalHTforthispage=Σύνολο (χωρίς φόρο) για αυτήν τη σελίδα Totalforthispage=Σύνολο για αυτή τη σελίδα +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=Σύνολο (με Φ.Π.Α.) TotalTTCToYourCredit=Σύνολο (συμπ. φόρου) στην πίστωσή σας TotalVAT=Συνολικός Φ.Π.Α. @@ -470,7 +472,7 @@ Status=Κατάσταση Favorite=Αγαπημένα ShortInfo=Πληροφορίες Ref=Αναφ. -ExternalRef=εξωτερική Αναφ. +ExternalRef=εξωτερική Αναφ. RefSupplier=Αναφ. Προμηθευτή RefPayment=Αναφ. πληρωμής CommercialProposalsShort=Προσφορές @@ -484,7 +486,7 @@ ActionRunningNotStarted=Δεν έχουν ξεκινήσει ActionRunningShort=Σε εξέλιξη ActionDoneShort=Ολοκληρωμένες ActionUncomplete=Ατελής -LatestLinkedEvents=Τελευταία %s συνδεδεμένα συμβάντα +LatestLinkedEvents=Τελευταία %s συνδεδεμένα συμβάντα CompanyFoundation=Εταιρεία / Οργανισμός Accountant=Λογιστής ContactsForCompany=Επαφές για αυτό το τρίτο μέρος @@ -647,6 +649,7 @@ ReportName=Όνομα Αναφοράς ReportPeriod=Περίοδος Αναφοράς ReportDescription=Περιγραφή Report=Αναφορά +Reports=Αναφορές Keyword=Λέξη κλειδί Origin=Προέλευση Legend=Ετικέτα @@ -856,7 +859,7 @@ ModulesSystemTools=Εργαλεία ενοτήτων Test=Δοκιμή Element=Στοιχείο NoPhotoYet=Δεν υπάρχουν διαθέσιμες εικόνες -Dashboard=Πίνακας ελέγχου +Dashboard=Πίνακας ελέγχου MyDashboard=Ο πίνακας ελέγχου μου Deductible=Εκπίπτουν from=από @@ -1202,7 +1205,7 @@ Forthcoming=Προσεχής Currently=Επί του παρόντος ConfirmMassLeaveApprovalQuestion=Είστε σίγουροι ότι θέλετε να εγκρίνετε τις %sεπιλεγμένες εγγραφές; ConfirmMassLeaveApproval=Επιβεβαίωση έγκρισης μαζικής άδειας -RecordAproved=Εγκρίθηκε η εγγραφή +RecordAproved=Εγκρίθηκε η εγγραφή RecordsApproved=%s εγγραφές εγκρίθηκαν Properties=Ιδιότητες hasBeenValidated=Το %s έχει επικυρωθεί diff --git a/htdocs/langs/el_GR/other.lang b/htdocs/langs/el_GR/other.lang index a7a81e04fba..614ec3d99e1 100644 --- a/htdocs/langs/el_GR/other.lang +++ b/htdocs/langs/el_GR/other.lang @@ -44,7 +44,7 @@ Notify_ORDER_SENTBYMAIL=Η εντολή πωλήσεων στάλθηκε μέσ Notify_ORDER_CLOSE=Παραδόθηκε η παραγγελία πώλησης Notify_ORDER_SUPPLIER_SENTBYMAIL=Η εντολή αγοράς στάλθηκε μέσω email Notify_ORDER_SUPPLIER_VALIDATE=Η εντολή αγοράς καταγράφηκε -Notify_ORDER_SUPPLIER_APPROVE=Η εντολή αγοράς εγκρίθηκε +Notify_ORDER_SUPPLIER_APPROVE=Η εντολή αγοράς εγκρίθηκε Notify_ORDER_SUPPLIER_SUBMIT=Η παραγγελία αγοράς καταχωρήθηκε Notify_ORDER_SUPPLIER_REFUSE=Η εντολή αγοράς απορρίφθηκε Notify_PROPAL_VALIDATE=Η πρόσφορα πελάτη επικυρώθηκε @@ -125,7 +125,7 @@ SignedBy=Υπογεγραμμένο από %s ClosedBy=Έκλεισε από %s CreatedById=Ταυτότητα χρήστη που δημιούργησε ModifiedById=Αναγνωριστικό χρήστη που έκανε την τελευταία αλλαγή -ValidatedById=Ταυτότητα χρήστη που επικύρωσε +ValidatedById=Ταυτότητα χρήστη που επικύρωσε CanceledById=Ταυτότητα χρήστη που ακύρωσε ClosedById=Ταυτότητα χρήστη που έκλεισε CreatedByLogin=Είσοδος χρήστη που δημιούργησε @@ -336,3 +336,5 @@ FTPFailedToUploadFile=Απέτυχε η μεταφόρτωση του αρχεί AddFolder=Δημιουργια φακέλου FileWasCreateFolder=Ο φάκελος %s έχει δημιουργηθεί FTPFailedToCreateFolder=Απέτυχε η δημιουργία του φακέλου %s . +SelectADay=Επιλέξτε μια ημέρα στο ημερολόγιο +SelectANewDate=Επιλέξτε μια νέα ημερομηνία diff --git a/htdocs/langs/el_GR/resource.lang b/htdocs/langs/el_GR/resource.lang index 2f47cb2616f..447a6eef0a2 100644 --- a/htdocs/langs/el_GR/resource.lang +++ b/htdocs/langs/el_GR/resource.lang @@ -35,5 +35,7 @@ AssetNumber=Σειριακός αριθμός ResourceTypeCode=Κωδικός τύπου πόρου ImportDataset_resource_1=Πόροι -ErrorResourcesAlreadyInUse=Ορισμένοι πόροι χρησιμοποιούνται +ErrorResourcesAlreadyInUse=Ορισμένοι πόροι χρησιμοποιούνται ErrorResourceUseInEvent=%s που χρησιμοποιήθηκε στο συμβάν %s + +MaxUsers=Μέγιστος αριθμός χρηστών (μέρη, θέσεις, κ.λπ.) diff --git a/htdocs/langs/el_GR/trips.lang b/htdocs/langs/el_GR/trips.lang index 0a2d8ba5aac..a3572f07e5c 100644 --- a/htdocs/langs/el_GR/trips.lang +++ b/htdocs/langs/el_GR/trips.lang @@ -1,150 +1,152 @@ # Dolibarr language file - Source file is en_US - trips -ShowExpenseReport=Εμφάνιση αναφοράς εξόδων -Trips=Αναφορές εξόδων -TripsAndExpenses=Αναφορές εξόδων -TripsAndExpensesStatistics=Στατιστικές αναφορές εξόδων -TripCard=Καρτέλα αναφοράς εξόδων +AUTHOR=Αποθηκεύτηκε από +AUTHORPAIEMENT=Πληρώθηκε από AddTrip=Δημιουργία αναφοράς εξόδων -ListOfTrips=Λίστα αναφορών εξόδων -ListOfFees=Λίστα φόρων -TypeFees=Είδη αμοιβών -ShowTrip=Εμφάνιση αναφοράς εξόδων -NewTrip=Νέα αναφορά εξόδων -LastExpenseReports=Τελευταίες %s αναφορές εξόδων +AllExpenseReport=Όλοι οι τύποι αναφορών εξόδων AllExpenseReports=Όλες οι αναφορές εξόδων -CompanyVisited=Εταιρεία / οργανισμός επισκέφθηκε -FeesKilometersOrAmout=Ποσότητα ή χιλιόμετρα -DeleteTrip=Διαγραφή αναφοράς εξόδων -ConfirmDeleteTrip=Είστε σίγουροι ότι θέλετε να διαγράψετε αυτήν την αναφορά εξόδων; -ListTripsAndExpenses=Λίστα αναφορών εξόδων -ListToApprove=Σε αναμονή για έγκριση -ExpensesArea=Τομέας αναφοράς εξόδων +AnyOtherInThisListCanValidate=Πρόσωπο που πρέπει να ενημερωθεί για την επικύρωση του αιτήματος. +AttachTheNewLineToTheDocument=Συνδέστε τη γραμμή με ένα μεταφορτωμένο έγγραφο +AucuneLigne=Δεν έχει δηλωθεί ακόμη αναφορά εξόδων +BrouillonnerTrip=Μετακίνηση αναφοράς εξόδων στην κατάσταση "Προσχέδιο" +byEX_DAY=ανά ημέρα (περιορισμός σε %s) +byEX_EXP=ανά γραμμή (περιορισμός σε %s) +byEX_MON=ανά μήνα (περιορισμός σε %s) +byEX_YEA=ανά έτος (περιορισμός σε %s) +CANCEL_USER=Διαγράφηκε από +CarCategory=Κατηγορία οχήματος ClassifyRefunded=Ταξινόμηση ως "Επιστροφή χρημάτων" +CompanyVisited=Επισκέψεις εταιρείας/οργανισμού +ConfirmBrouillonnerTrip=Είστε σίγουροι ότι θέλετε να μετακινήσετε αυτήν την αναφορά εξόδων στην κατάσταση "Προσχέδιο"; +ConfirmCancelTrip=Είστε σίγουροι ότι θέλετε να ακυρώσετε αυτήν την αναφορά εξόδων; +ConfirmCloneExpenseReport=Είστε σίγουροι ότι θέλετε να αντιγράψετε αυτήν την αναφορά εξόδων; +ConfirmDeleteTrip=Είστε σίγουροι ότι θέλετε να διαγράψετε αυτήν την αναφορά εξόδων; +ConfirmPaidTrip=Είστε σίγουροι ότι θέλετε να αλλάξετε την κατάσταση αυτής της αναφοράς εξόδων σε "Πληρωμένη"; +ConfirmRefuseTrip=Είστε σίγουροι ότι θέλετε να απορρίψετε αυτήν την αναφορά εξόδων; +ConfirmSaveTrip=Είστε σίγουροι ότι θέλετε να επικυρώσετε αυτήν την αναφορά εξόδων; +ConfirmValideTrip=Είστε σιγουροι ότι θέλετε να εγκρίνετε αυτή την αναφορά εξόδων; +DATE_CANCEL=Ημερομηνία ακύρωσης +DATE_PAIEMENT=Ημερομηνία πληρωμής +DATE_REFUS=Ημερομηνία απόρριψης +DATE_SAVE=Ημερομηνία Επικύρωσης +DefaultCategoryCar=Προεπιλεγμένος τρόπος μεταφοράς +DefaultRangeNumber=Προεπιλεγμένος αριθμός εύρους +DeleteTrip=Διαγραφή αναφοράς εξόδων +ErrorDoubleDeclaration=Έχετε δηλώσει άλλη αναφορά εξόδων σε παρόμοιο εύρος ημερομηνιών. +Error_EXPENSEREPORT_ADDON_NotDefined=Σφάλμα, ο κανόνας για την αρίθμηση αναφοράς εξόδων δεν ορίστηκε στη ρύθμιση της ενότητας "Αναφορά εξόδων" +ExpenseRangeOffset=Ποσό απόκλισης: %s +expenseReportCatDisabled=Απενεργοποιημένη κατηγορία - δείτε το λεξικό c_exp_tax_cat +expenseReportCoef=Συντελεστής +expenseReportCoefUndefined=(η τιμή δεν έχει καθοριστεί) +expenseReportOffset=Απόκλιση +expenseReportPrintExample=Απόκλιση + (d x συντελεστής) = %s +expenseReportRangeDisabled=Το εύρος είναι απενεργοποιημένο - ανατρέξτε στο λεξικό c_exp_tax_range +expenseReportRangeFromTo=από %d σε %d +expenseReportRangeMoreThan=περισσότερο από %d +expenseReportTotalForFive=Παράδειγμα με d = 5 +ExpenseReportApplyTo=Εφαρμογή σε +ExpenseReportApproved=Έχει εγκριθεί η αναφορά εξόδων +ExpenseReportApprovedMessage=Η αναφορά εξόδων %s εγκρίθηκε.
- Χρήστης: %s
- Εγκρίθηκε από: %s
Κάντε κλικ εδώ για να εμφανίσετε την αναφορά εξόδων: %s +ExpenseReportCanceled=Η αναφορά εξόδων ακυρώθηκε +ExpenseReportCanceledMessage=Η αναφορά εξόδων %s ακυρώθηκε.
- Χρήστης: %s
- Ακυρώθηκε από: %s
- Αιτιολόγηση για ακύρωση: %s
Κάντε κλικ εδώ για να εμφανίσετε την αναφορά εξόδων: %s +ExpenseReportConstraintViolationError=Υπέρβαση του μέγιστου ποσού (κανόνας %s): το %s είναι υψηλότερο από το %s (Η υπέρβαση απαγορεύεται) +ExpenseReportConstraintViolationWarning=Υπέρβαση του μέγιστου ποσού (κανόνας %s): το %s είναι υψηλότερο από το %s (Υπέρβαση εξουσιοδοτημένου) +ExpenseReportDateEnd=Ημερομηνία λήξης +ExpenseReportDateStart=Ημερομηνία Έναρξης +ExpenseReportDomain=Τομέας για εφαρμογή +ExpenseReportIkDesc=Μπορείτε να τροποποιήσετε τον υπολογισμό των εξόδων χιλιομέτρων ανά κατηγορία και εύρος που έχουν οριστεί προηγουμένως. d είναι η απόσταση σε χιλιόμετρα +ExpenseReportLimitAmount=Μέγιστο ποσό +ExpenseReportLimitOn=Περιορισμός σε +ExpenseReportLine=Γραμμή αναφοράς εξόδων +ExpenseReportPaid=Καταβλήθηκε ποσό αναφοράς εξόδων +ExpenseReportPaidMessage=Η αναφορά εξόδων %s καταβλήθηκε.
- Χρήστης: %s
- Πληρωμή από: %s
Κάντε κλικ εδώ για να εμφανίσετε την αναφορά εξόδων: %s +ExpenseReportPayment=Πληρωμή αναφοράς εξόδων +ExpenseReportRef=Αναφ. αναφοράς εξόδων +ExpenseReportRefused=Η αναφορά εξόδων απορρίφθηκε +ExpenseReportRefusedMessage=Η αναφορά εξόδων %s απορρίφθηκε.
- Χρήστης: %s
- απορρίφθηκε από: %s
- Αιτιολόγηση απόρριψης: %s
Κάντε κλικ εδώ για να εμφανίσετε την αναφορά εξόδων: %s +ExpenseReportRestrictive=Η υπέρβαση απαγορεύεται +ExpenseReportRuleErrorOnSave=Σφάλμα: %s +ExpenseReportRuleSave=Ο κανόνας αναφοράς εξόδων αποθηκεύτηκε +ExpenseReportRulesDesc=Μπορείτε να ορίσετε κανόνες μέγιστου ποσού για αναφορές εξόδων. Αυτοί οι κανόνες θα εφαρμόζονται όταν ένα νέο έξοδο προστίθεται σε μια αναφορά εξόδων ExpenseReportWaitingForApproval=Μια νέα αναφορά εξόδων έχει υποβληθεί προς έγκριση ExpenseReportWaitingForApprovalMessage=Έχει υποβληθεί νέα αναφορά εξόδων και είναι σε αναμονή έγκρισης.
- Χρήστης: %s
- Περίοδος: %s
Κάντε κλικ εδώ για επικύρωση: %s ExpenseReportWaitingForReApproval=Έχει υποβληθεί μια αναφορά εξόδων για επανέγκριση ExpenseReportWaitingForReApprovalMessage=Έχει υποβληθεί αναφορά εξόδων και αναμένει επανέγκριση.
Την %s, αρνηθήκατε να εγκρίνετε την αναφορά εξόδων για το λόγο αυτό: %s.
Έχει προταθεί μια νέα έκδοση και περιμένει την έγκρισή σας.
- Χρήστης: %s
- Περίοδος: %s
Κάντε κλικ εδώ για να επικυρώσετε: %s -ExpenseReportApproved=Έχει εγκριθεί η αναφορά εξόδων -ExpenseReportApprovedMessage=Η αναφορά εξόδων %s εγκρίθηκε.
- Χρήστης: %s
- Εγκρίθηκε από: %s
Κάντε κλικ εδώ για να εμφανίσετε την αναφορά εξόδων: %s -ExpenseReportRefused=Η αναφορά εξόδων απορρίφθηκε -ExpenseReportRefusedMessage=Η αναφορά εξόδων %s απορρίφθηκε.
- Χρήστης: %s
- απορρίφθηκε από: %s
- Αιτιολόγηση απόρριψης: %s
Κάντε κλικ εδώ για να εμφανίσετε την αναφορά εξόδων: %s -ExpenseReportCanceled=Η αναφορά εξόδων ακυρώθηκε -ExpenseReportCanceledMessage=Η αναφορά εξόδων %s ακυρώθηκε.
- Χρήστης: %s
- Ακυρώθηκε από: %s
- Αιτιολόγηση για ακύρωση: %s
Κάντε κλικ εδώ για να εμφανίσετε την αναφορά εξόδων: %s -ExpenseReportPaid=Καταβλήθηκε ποσό αναφοράς εξόδων -ExpenseReportPaidMessage=Η αναφορά εξόδων %s καταβλήθηκε.
- Χρήστης: %s
- Πληρωμή από: %s
Κάντε κλικ εδώ για να εμφανίσετε την αναφορά εξόδων: %s -TripId=Αναγνωριστικό αναφοράς εξόδων -AnyOtherInThisListCanValidate=Πρόσωπο που πρέπει να ενημερωθεί για την επικύρωση του αιτήματος. -TripSociete=Πληροφορίες εταιρίας -TripNDF=Πληροφορίες αναφοράς εξόδων -PDFStandardExpenseReports=Τυπικό πρότυπο για τη δημιουργία ενός εγγράφου PDF για την αναφορά εξόδων -ExpenseReportLine=Γραμμή αναφοράς εξόδων -TF_OTHER=Άλλο -TF_TRIP=Μεταφορικά -TF_LUNCH=Γεύμα -TF_METRO=Μετρό -TF_TRAIN=Τρένο -TF_BUS=Λεωφορείο -TF_CAR=Όχημα -TF_PEAGE=Διόδια -TF_ESSENCE=Καύσιμα -TF_HOTEL=Ξενοδοχείο -TF_TAXI=Ταξί -EX_KME=κόστος ανά χιλιόμετρο -EX_FUE=καύσιμα -EX_HOT=Ξενοδοχείο -EX_PAR=Χώρος στάθμευσης -EX_TOL=Διόδια -EX_TAX=Διάφοροι φόροι -EX_IND=Αποζημίωση μεταφοράς αποζημιώσεων -EX_SUM=Συντήρηση -EX_SUO=Προμήθειες γραφείου -EX_CAR=Ενοικίαση αυτοκινήτων -EX_DOC=Τεκμηρίωση -EX_CUR=Πελάτες που λαμβάνουν -EX_OTR=Άλλες λήψεις -EX_POS=Ταχυδρομικά τέλη -EX_CAM=Συντήρηση και επισκευή βιογραφικού σημειώματος -EX_EMM=Γεύμα εργαζομένων -EX_GUM=Γεύμα φιλοξενουμένων -EX_BRE=Πρωινό γεύμα -EX_FUE_VP=Fuel PV -EX_TOL_VP=Toll PV -EX_PAR_VP=Πάρκινγκ PV -EX_CAM_VP=PV συντήρηση και επισκευή -DefaultCategoryCar=Προεπιλεγμένη λειτουργία μεταφοράς -DefaultRangeNumber=Αριθμός προεπιλεγμένου εύρους τιμών -UploadANewFileNow=Μεταφορτώστε ένα νέο έγγραφο τώρα -Error_EXPENSEREPORT_ADDON_NotDefined=Σφάλμα, ο κανόνας για την αρίθμηση αναφοράς εξόδων δεν ορίστηκε στη ρύθμιση της ενότητας "Αναφορά εξόδων" -ErrorDoubleDeclaration=Έχετε δηλώσει άλλη αναφορά εξόδων σε παρόμοιο εύρος ημερομηνιών. -AucuneLigne=Δεν έχει δηλωθεί ακόμη αναφορά εξόδων -ModePaiement=Τρόπος πληρωμής -VALIDATOR=Χρήστης υπεύθυνος για την έγκριση -VALIDOR=Εγκρίθηκε από -AUTHOR=Αποθηκεύτηκε από -AUTHORPAIEMENT=Πληρώθηκε από -REFUSEUR=Απορρίφθηκε από -CANCEL_USER=Διαγράφηκε από -MOTIF_REFUS=Λόγος -MOTIF_CANCEL=Λόγος -DATE_REFUS=Ημερομηνία απόρριψης -DATE_SAVE=Ημερομηνία Επικύρωσης -DATE_CANCEL=Ημερομηνία ακύρωσης -DATE_PAIEMENT=Ημερομηνία πληρωμής -ExpenseReportRef=Αναφ. αναφοράς εξόδων -ValidateAndSubmit=Επικύρωση και υποβολή για έγκριση -ValidatedWaitingApproval=Επικυρώθηκε (αναμονή για έγκριση) -NOT_AUTHOR=Δεν είστε ο συντάκτης αυτής της αναφοράς εξόδων. Η λειτουργία ακυρώθηκε. -ConfirmRefuseTrip=Είστε σίγουροι ότι θέλετε να απορρίψετε αυτήν την αναφορά εξόδων; -ValideTrip=Έγκριση αναφοράς εξόδων -ConfirmValideTrip=Είστε σιγουροι ότι θέλετε να εγκρίνετε αυτή την αναφορά εξόδων; -PaidTrip=Πληρώστε μια αναφορά εξόδων -ConfirmPaidTrip=Είστε βέβαιοι ότι θέλετε να αλλάξετε την κατάσταση αυτής της αναφοράς εξόδων σε "Πληρωμένη"; -ConfirmCancelTrip=Είστε βέβαιοι ότι θέλετε να ακυρώσετε αυτήν την αναφορά εξόδων; -BrouillonnerTrip=Μετακίνηση αναφοράς εξόδων στην κατάσταση "Προσχέδιο" -ConfirmBrouillonnerTrip=Είστε σίγουροι ότι θέλετε να μετακινήσετε αυτήν την αναφορά εξόδων στην κατάσταση "Προσχέδιο"; -SaveTrip=Επικύρωση αναφοράς εξόδων -ConfirmSaveTrip=Είστε σίγουροι ότι θέλετε να επικυρώσετε αυτήν την αναφορά εξόδων; -NoTripsToExportCSV=Δεν υπάρχει αναφορά εξόδων για εξαγωγή για αυτήν την περίοδο. -ExpenseReportPayment=Πληρωμή αναφοράς εξόδων -ExpenseReportsToApprove=Αναφορές εξόδων για έγκριση -ExpenseReportsToPay=Αναφορές εξόδων για πληρωμή -ConfirmCloneExpenseReport=Είστε βέβαιοι ότι θέλετε να κλωνοποιήσετε αυτήν την αναφορά εξόδων; ExpenseReportsIk=Διαμόρφωση χιλιομετρικών χρεώσεων ExpenseReportsRules=Κανόνες αναφοράς εξόδων -ExpenseReportIkDesc=Μπορείτε να τροποποιήσετε τον υπολογισμό των εξόδων χιλιομέτρων ανά κατηγορία και εύρος που έχουν οριστεί προηγουμένως. d είναι η απόσταση σε χιλιόμετρα -ExpenseReportRulesDesc=Μπορείτε να ορίσετε κανόνες μέγιστου ποσού για αναφορές εξόδων. Αυτοί οι κανόνες θα εφαρμόζονται όταν ένα νέο έξοδο προστίθεται σε μια αναφορά εξόδων -expenseReportOffset=Απόκλιση -expenseReportCoef=Συντελεστής -expenseReportTotalForFive=Παράδειγμα με d = 5 -expenseReportRangeFromTo=από %d σε %d -expenseReportRangeMoreThan=περισσότερο από %d -expenseReportCoefUndefined=(η τιμή δεν έχει καθοριστεί) -expenseReportCatDisabled=Απενεργοποιημένη κατηγορία - δείτε το λεξικό c_exp_tax_cat -expenseReportRangeDisabled=Το εύρος είναι απενεργοποιημένο - ανατρέξτε στο λεξικό c_exp_tax_range -expenseReportPrintExample=Απόκλιση + (d x συντελεστής) = %s -ExpenseReportApplyTo=Εφαρμογή σε -ExpenseReportDomain=Τομέας για εφαρμογή -ExpenseReportLimitOn=Περιορισμός σε -ExpenseReportDateStart=Ημερομηνία Έναρξης -ExpenseReportDateEnd=Ημερομηνία λήξης -ExpenseReportLimitAmount=Μέγιστο ποσό -ExpenseReportRestrictive=Η υπέρβαση απαγορεύεται -AllExpenseReport=Όλοι οι τύποι αναφορών εξόδων -OnExpense=Γραμμή εξόδων -ExpenseReportRuleSave=Ο κανόνας αναφοράς εξόδων αποθηκεύτηκε -ExpenseReportRuleErrorOnSave=Σφάλμα: %s -RangeNum=Εύρος %d -ExpenseReportConstraintViolationError=Υπέρβαση του μέγιστου ποσού (κανόνας %s): το %s είναι υψηλότερο από το %s (Η υπέρβαση απαγορεύεται) -byEX_DAY=ανά ημέρα (περιορισμός σε %s) -byEX_MON=ανά μήνα (περιορισμός σε %s) -byEX_YEA=ανά έτος (περιορισμός σε %s) -byEX_EXP=ανά γραμμή (περιορισμός σε %s) -ExpenseReportConstraintViolationWarning=Υπέρβαση του μέγιστου ποσού (κανόνας %s): το %s είναι υψηλότερο από το %s (Υπέρβαση εξουσιοδοτημένου) +ExpenseReportsToApprove=Αναφορές εξόδων για έγκριση +ExpenseReportsToPay=Αναφορές εξόδων για πληρωμή +ExpensesArea=Τομέας αναφοράς εξόδων +FeesKilometersOrAmout=Ποσότητα ή χιλιόμετρα +LastExpenseReports=Τελευταίες %s αναφορές εξόδων +ListOfFees=Λίστα χρεώσεων +ListOfTrips=Λίστα αναφορών εξόδων +ListToApprove=Σε αναμονή για έγκριση +ListTripsAndExpenses=Λίστα αναφορών εξόδων +MOTIF_CANCEL=Λόγος +MOTIF_REFUS=Λόγος +ModePaiement=Τρόπος πληρωμής +NewTrip=Νέα αναφορά εξόδων nolimitbyEX_DAY=ανά ημέρα (χωρίς περιορισμό) +nolimitbyEX_EXP=κατά γραμμή (χωρίς περιορισμό) nolimitbyEX_MON=ανά μήνα (χωρίς περιορισμό) nolimitbyEX_YEA=ανά έτος (χωρίς περιορισμό) -nolimitbyEX_EXP=κατά γραμμή (χωρίς περιορισμό) -CarCategory=Κατηγορία οχήματος -ExpenseRangeOffset=Ποσό απόκλισης: %s +NoTripsToExportCSV=Δεν υπάρχει αναφορά εξόδων για εξαγωγή για αυτήν την περίοδο. +NOT_AUTHOR=Δεν είστε ο συντάκτης αυτής της αναφοράς εξόδων. Η λειτουργία ακυρώθηκε. +OnExpense=Γραμμή εξόδων +PDFStandardExpenseReports=Τυπικό πρότυπο για τη δημιουργία ενός εγγράφου PDF για την αναφορά εξόδων +PaidTrip=Πληρώστε μια αναφορά εξόδων +REFUSEUR=Απορρίφθηκε από RangeIk=Εύρος χιλιομέτρων -AttachTheNewLineToTheDocument=Συνδέστε τη γραμμή με ένα μεταφορτωμένο έγγραφο +RangeNum=Εύρος %d +SaveTrip=Επικύρωση αναφοράς εξόδων +ShowExpenseReport=Εμφάνιση αναφοράς εξόδων +ShowTrip=Εμφάνιση αναφοράς εξόδων +TripCard=Καρτέλα αναφοράς εξόδων +TripId=Αναγνωριστικό αναφοράς εξόδων +TripNDF=Πληροφορίες αναφοράς εξόδων +TripSociete=Πληροφορίες εταιρίας +Trips=Αναφορές εξόδων +TripsAndExpenses=Αναφορές εξόδων +TripsAndExpensesStatistics=Στατιστικές αναφορές εξόδων +TypeFees=Τύποι χρεώσεων +UploadANewFileNow=Μεταφορτώστε ένα νέο έγγραφο τώρα +VALIDATOR=Χρήστης υπεύθυνος για την έγκριση +VALIDOR=Εγκρίθηκε από +ValidateAndSubmit=Επικύρωση και υποβολή για έγκριση +ValidatedWaitingApproval=Επικυρώθηκε (αναμονή για έγκριση) +ValideTrip=Έγκριση αναφοράς εξόδων + +## Dictionary +EX_BRE=Πρωινό γεύμα +EX_CAM=Συντήρηση και επισκευή +EX_CAM_VP=Συντήρηση και επισκευή PV +EX_CAR=Ενοικίαση αυτοκινήτων +EX_CUR=Αποδείξεις πελατών +EX_DOC=Τεκμηρίωση +EX_EMM=Γεύμα εργαζομένων +EX_FUE=καύσιμα +EX_FUE_VP=Kαύσιμα PV +EX_GUM=Γεύμα φιλοξενουμένων +EX_HOT=Ξενοδοχείο +EX_IND=Συνδρομή ασφαλιστικής κάλυψης μεταφοράς +EX_KME=κόστος ανά χιλιόμετρο +EX_OTR=Άλλες αποδείξεις +EX_PAR=Χώρος στάθμευσης +EX_PAR_VP=Πάρκινγκ PV +EX_POS=Ταχυδρομικά τέλη +EX_SUM=Προμήθεια συντήρησης +EX_SUO=Προμήθειες γραφείου +EX_TAX=Διάφοροι φόροι +EX_TOL=Διόδια +EX_TOL_VP=Διόδια PV +TF_BUS=Λεωφορείο +TF_CAR=Όχημα +TF_ESSENCE=Καύσιμα +TF_HOTEL=Ξενοδοχείο +TF_LUNCH=Γεύμα +TF_METRO=Μετρό +TF_OTHER=Άλλο +TF_PEAGE=Διόδια +TF_TAXI=Ταξί +TF_TRAIN=Τρένο +TF_TRIP=Μεταφορικά diff --git a/htdocs/langs/en_AE/datapolicy.lang b/htdocs/langs/en_AE/datapolicy.lang deleted file mode 100644 index b73db9bf6c4..00000000000 --- a/htdocs/langs/en_AE/datapolicy.lang +++ /dev/null @@ -1,11 +0,0 @@ -# Dolibarr language file - Source file is en_US - datapolicy -datapolicySetupPage =Depending on the laws of your countries (Example Article 5 of the GDPR), personal data must be kept for a period not exceeding the duration the data is needed for the purpose for which it was collected, except for archival purposes.
The deletion will be done automatically after a certain duration without events (the duration which you will have indicated below). -DATAPOLICYSUBJECTMAIL =Subject of the email -DATAPOLICYREFUSE =Message after disagreement -TXTLINKDATAPOLICYREFUSE =Text for the link "disagreement" -DATAPOLICY_opposition_traitement =Opposes to the processing of his personal data -DATAPOLICY_opposition_prospection =Opposes to the processing of his personal data for the purposes of prospecting -DATAPOLICY_date =Date of agreement/disagreement GDPR -DATAPOLICY_send =Date agreement email sent -=Due to a technical problem, we were unable to register your choice. We apologize for that. Contact us to notify us your choice. -NUMBER_MONTH_BEFORE_DELETION =Number of months before deletion diff --git a/htdocs/langs/en_AE/errors.lang b/htdocs/langs/en_AE/errors.lang deleted file mode 100644 index 1f998d29e16..00000000000 --- a/htdocs/langs/en_AE/errors.lang +++ /dev/null @@ -1,4 +0,0 @@ -# Dolibarr language file - Source file is en_US - errors -ErrorRefAlreadyExists=Reference %s used for creation already exists. -ThisIdNotDefined=Id not defined -OperNotDefined=Payment method not defined diff --git a/htdocs/langs/en_AE/holiday.lang b/htdocs/langs/en_AE/holiday.lang deleted file mode 100644 index 254b07b0308..00000000000 --- a/htdocs/langs/en_AE/holiday.lang +++ /dev/null @@ -1,4 +0,0 @@ -# Dolibarr language file - Source file is en_US - holiday -MenuCollectiveAddCP=New collective leave -NewHolidayForGroup=New collective leave -SendRequestCollectiveCP=Create collective leave diff --git a/htdocs/langs/en_AE/languages.lang b/htdocs/langs/en_AE/languages.lang deleted file mode 100644 index 879813b70ad..00000000000 --- a/htdocs/langs/en_AE/languages.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - languages -Language_en_AE=English (United Arab Emirates) diff --git a/htdocs/langs/en_AE/orders.lang b/htdocs/langs/en_AE/orders.lang deleted file mode 100644 index a1e7f34c64b..00000000000 --- a/htdocs/langs/en_AE/orders.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - orders -SupplierOrderSubmitedInDolibarr=Purchase Order %s submitted (%s) diff --git a/htdocs/langs/en_AE/partnership.lang b/htdocs/langs/en_AE/partnership.lang deleted file mode 100644 index 6a2455e0302..00000000000 --- a/htdocs/langs/en_AE/partnership.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - partnership -ReasonDeclineOrCancel=Reason for refusal or cancellation diff --git a/htdocs/langs/en_AU/datapolicy.lang b/htdocs/langs/en_AU/datapolicy.lang deleted file mode 100644 index b73db9bf6c4..00000000000 --- a/htdocs/langs/en_AU/datapolicy.lang +++ /dev/null @@ -1,11 +0,0 @@ -# Dolibarr language file - Source file is en_US - datapolicy -datapolicySetupPage =Depending on the laws of your countries (Example Article 5 of the GDPR), personal data must be kept for a period not exceeding the duration the data is needed for the purpose for which it was collected, except for archival purposes.
The deletion will be done automatically after a certain duration without events (the duration which you will have indicated below). -DATAPOLICYSUBJECTMAIL =Subject of the email -DATAPOLICYREFUSE =Message after disagreement -TXTLINKDATAPOLICYREFUSE =Text for the link "disagreement" -DATAPOLICY_opposition_traitement =Opposes to the processing of his personal data -DATAPOLICY_opposition_prospection =Opposes to the processing of his personal data for the purposes of prospecting -DATAPOLICY_date =Date of agreement/disagreement GDPR -DATAPOLICY_send =Date agreement email sent -=Due to a technical problem, we were unable to register your choice. We apologize for that. Contact us to notify us your choice. -NUMBER_MONTH_BEFORE_DELETION =Number of months before deletion diff --git a/htdocs/langs/en_AU/errors.lang b/htdocs/langs/en_AU/errors.lang deleted file mode 100644 index 1f998d29e16..00000000000 --- a/htdocs/langs/en_AU/errors.lang +++ /dev/null @@ -1,4 +0,0 @@ -# Dolibarr language file - Source file is en_US - errors -ErrorRefAlreadyExists=Reference %s used for creation already exists. -ThisIdNotDefined=Id not defined -OperNotDefined=Payment method not defined diff --git a/htdocs/langs/en_AU/holiday.lang b/htdocs/langs/en_AU/holiday.lang deleted file mode 100644 index 254b07b0308..00000000000 --- a/htdocs/langs/en_AU/holiday.lang +++ /dev/null @@ -1,4 +0,0 @@ -# Dolibarr language file - Source file is en_US - holiday -MenuCollectiveAddCP=New collective leave -NewHolidayForGroup=New collective leave -SendRequestCollectiveCP=Create collective leave diff --git a/htdocs/langs/en_AU/languages.lang b/htdocs/langs/en_AU/languages.lang deleted file mode 100644 index 879813b70ad..00000000000 --- a/htdocs/langs/en_AU/languages.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - languages -Language_en_AE=English (United Arab Emirates) diff --git a/htdocs/langs/en_AU/orders.lang b/htdocs/langs/en_AU/orders.lang deleted file mode 100644 index a1e7f34c64b..00000000000 --- a/htdocs/langs/en_AU/orders.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - orders -SupplierOrderSubmitedInDolibarr=Purchase Order %s submitted (%s) diff --git a/htdocs/langs/en_AU/partnership.lang b/htdocs/langs/en_AU/partnership.lang deleted file mode 100644 index 6a2455e0302..00000000000 --- a/htdocs/langs/en_AU/partnership.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - partnership -ReasonDeclineOrCancel=Reason for refusal or cancellation diff --git a/htdocs/langs/en_CA/datapolicy.lang b/htdocs/langs/en_CA/datapolicy.lang deleted file mode 100644 index b73db9bf6c4..00000000000 --- a/htdocs/langs/en_CA/datapolicy.lang +++ /dev/null @@ -1,11 +0,0 @@ -# Dolibarr language file - Source file is en_US - datapolicy -datapolicySetupPage =Depending on the laws of your countries (Example Article 5 of the GDPR), personal data must be kept for a period not exceeding the duration the data is needed for the purpose for which it was collected, except for archival purposes.
The deletion will be done automatically after a certain duration without events (the duration which you will have indicated below). -DATAPOLICYSUBJECTMAIL =Subject of the email -DATAPOLICYREFUSE =Message after disagreement -TXTLINKDATAPOLICYREFUSE =Text for the link "disagreement" -DATAPOLICY_opposition_traitement =Opposes to the processing of his personal data -DATAPOLICY_opposition_prospection =Opposes to the processing of his personal data for the purposes of prospecting -DATAPOLICY_date =Date of agreement/disagreement GDPR -DATAPOLICY_send =Date agreement email sent -=Due to a technical problem, we were unable to register your choice. We apologize for that. Contact us to notify us your choice. -NUMBER_MONTH_BEFORE_DELETION =Number of months before deletion diff --git a/htdocs/langs/en_CA/errors.lang b/htdocs/langs/en_CA/errors.lang deleted file mode 100644 index 1f998d29e16..00000000000 --- a/htdocs/langs/en_CA/errors.lang +++ /dev/null @@ -1,4 +0,0 @@ -# Dolibarr language file - Source file is en_US - errors -ErrorRefAlreadyExists=Reference %s used for creation already exists. -ThisIdNotDefined=Id not defined -OperNotDefined=Payment method not defined diff --git a/htdocs/langs/en_CA/holiday.lang b/htdocs/langs/en_CA/holiday.lang deleted file mode 100644 index 254b07b0308..00000000000 --- a/htdocs/langs/en_CA/holiday.lang +++ /dev/null @@ -1,4 +0,0 @@ -# Dolibarr language file - Source file is en_US - holiday -MenuCollectiveAddCP=New collective leave -NewHolidayForGroup=New collective leave -SendRequestCollectiveCP=Create collective leave diff --git a/htdocs/langs/en_CA/languages.lang b/htdocs/langs/en_CA/languages.lang deleted file mode 100644 index 879813b70ad..00000000000 --- a/htdocs/langs/en_CA/languages.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - languages -Language_en_AE=English (United Arab Emirates) diff --git a/htdocs/langs/en_CA/orders.lang b/htdocs/langs/en_CA/orders.lang deleted file mode 100644 index a1e7f34c64b..00000000000 --- a/htdocs/langs/en_CA/orders.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - orders -SupplierOrderSubmitedInDolibarr=Purchase Order %s submitted (%s) diff --git a/htdocs/langs/en_CA/partnership.lang b/htdocs/langs/en_CA/partnership.lang deleted file mode 100644 index 6a2455e0302..00000000000 --- a/htdocs/langs/en_CA/partnership.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - partnership -ReasonDeclineOrCancel=Reason for refusal or cancellation diff --git a/htdocs/langs/en_GB/admin.lang b/htdocs/langs/en_GB/admin.lang index a78eda7cf04..597b930235e 100644 --- a/htdocs/langs/en_GB/admin.lang +++ b/htdocs/langs/en_GB/admin.lang @@ -26,7 +26,6 @@ InstrucToClearPass=To have password decoded (clear) into the conf.php fil ProtectAndEncryptPdfFilesDesc=Protection of a PDF document keeps it available to read and print with any PDF browser. However, editing and copying the document is no longer possible. Note: Using this feature disables your ability to build global merged PDFs. MeasuringUnit=Measurement unit MAIN_MAIL_AUTOCOPY_TO=Copy (Cc) all sent emails to -MAIN_MAIL_SENDMODE=Sending method ModuleFamilyHr=Human Resources Management (HR) ModuleFamilyTechnic=Multi-module tools NotExistsDirect=The alternative root directory is not defined in an existing directory.
@@ -36,7 +35,6 @@ GenericNumRefModelDesc=Returns a customisable number according to a defined mask ListOfDirectories=List of OpenDocument template directories ListOfDirectoriesForModelGenODT=List of directories containing template files in OpenDocument format.

Put here full path of directories.
Add a carriage return between each directory.
To add a directory of the GED module, add here DOL_DATA_ROOT/ecm/yourdirectoryname.

Files in those directories must end with .odt or .ods. FollowingSubstitutionKeysCanBeUsed=
To learn how to create your .odt document templates, before storing them in those directories, read wiki documentation: -Module10000Desc=CMS to create websites with a WYSIWYG editor. This is a webmaster or developer oriented Content Management System (it is better to know HTML and CSS language). Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the internet with your own domain name. Module50200Name=PayPal DictionaryAccountancyJournal=Finance journals CompanyZip=Postcode diff --git a/htdocs/langs/en_GB/datapolicy.lang b/htdocs/langs/en_GB/datapolicy.lang deleted file mode 100644 index b73db9bf6c4..00000000000 --- a/htdocs/langs/en_GB/datapolicy.lang +++ /dev/null @@ -1,11 +0,0 @@ -# Dolibarr language file - Source file is en_US - datapolicy -datapolicySetupPage =Depending on the laws of your countries (Example Article 5 of the GDPR), personal data must be kept for a period not exceeding the duration the data is needed for the purpose for which it was collected, except for archival purposes.
The deletion will be done automatically after a certain duration without events (the duration which you will have indicated below). -DATAPOLICYSUBJECTMAIL =Subject of the email -DATAPOLICYREFUSE =Message after disagreement -TXTLINKDATAPOLICYREFUSE =Text for the link "disagreement" -DATAPOLICY_opposition_traitement =Opposes to the processing of his personal data -DATAPOLICY_opposition_prospection =Opposes to the processing of his personal data for the purposes of prospecting -DATAPOLICY_date =Date of agreement/disagreement GDPR -DATAPOLICY_send =Date agreement email sent -=Due to a technical problem, we were unable to register your choice. We apologize for that. Contact us to notify us your choice. -NUMBER_MONTH_BEFORE_DELETION =Number of months before deletion diff --git a/htdocs/langs/en_GB/errors.lang b/htdocs/langs/en_GB/errors.lang deleted file mode 100644 index 1f998d29e16..00000000000 --- a/htdocs/langs/en_GB/errors.lang +++ /dev/null @@ -1,4 +0,0 @@ -# Dolibarr language file - Source file is en_US - errors -ErrorRefAlreadyExists=Reference %s used for creation already exists. -ThisIdNotDefined=Id not defined -OperNotDefined=Payment method not defined diff --git a/htdocs/langs/en_GB/languages.lang b/htdocs/langs/en_GB/languages.lang deleted file mode 100644 index 879813b70ad..00000000000 --- a/htdocs/langs/en_GB/languages.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - languages -Language_en_AE=English (United Arab Emirates) diff --git a/htdocs/langs/en_IN/datapolicy.lang b/htdocs/langs/en_IN/datapolicy.lang deleted file mode 100644 index b73db9bf6c4..00000000000 --- a/htdocs/langs/en_IN/datapolicy.lang +++ /dev/null @@ -1,11 +0,0 @@ -# Dolibarr language file - Source file is en_US - datapolicy -datapolicySetupPage =Depending on the laws of your countries (Example Article 5 of the GDPR), personal data must be kept for a period not exceeding the duration the data is needed for the purpose for which it was collected, except for archival purposes.
The deletion will be done automatically after a certain duration without events (the duration which you will have indicated below). -DATAPOLICYSUBJECTMAIL =Subject of the email -DATAPOLICYREFUSE =Message after disagreement -TXTLINKDATAPOLICYREFUSE =Text for the link "disagreement" -DATAPOLICY_opposition_traitement =Opposes to the processing of his personal data -DATAPOLICY_opposition_prospection =Opposes to the processing of his personal data for the purposes of prospecting -DATAPOLICY_date =Date of agreement/disagreement GDPR -DATAPOLICY_send =Date agreement email sent -=Due to a technical problem, we were unable to register your choice. We apologize for that. Contact us to notify us your choice. -NUMBER_MONTH_BEFORE_DELETION =Number of months before deletion diff --git a/htdocs/langs/en_IN/errors.lang b/htdocs/langs/en_IN/errors.lang deleted file mode 100644 index 1f998d29e16..00000000000 --- a/htdocs/langs/en_IN/errors.lang +++ /dev/null @@ -1,4 +0,0 @@ -# Dolibarr language file - Source file is en_US - errors -ErrorRefAlreadyExists=Reference %s used for creation already exists. -ThisIdNotDefined=Id not defined -OperNotDefined=Payment method not defined diff --git a/htdocs/langs/en_IN/holiday.lang b/htdocs/langs/en_IN/holiday.lang deleted file mode 100644 index 254b07b0308..00000000000 --- a/htdocs/langs/en_IN/holiday.lang +++ /dev/null @@ -1,4 +0,0 @@ -# Dolibarr language file - Source file is en_US - holiday -MenuCollectiveAddCP=New collective leave -NewHolidayForGroup=New collective leave -SendRequestCollectiveCP=Create collective leave diff --git a/htdocs/langs/en_IN/languages.lang b/htdocs/langs/en_IN/languages.lang deleted file mode 100644 index 879813b70ad..00000000000 --- a/htdocs/langs/en_IN/languages.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - languages -Language_en_AE=English (United Arab Emirates) diff --git a/htdocs/langs/en_IN/orders.lang b/htdocs/langs/en_IN/orders.lang deleted file mode 100644 index a1e7f34c64b..00000000000 --- a/htdocs/langs/en_IN/orders.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - orders -SupplierOrderSubmitedInDolibarr=Purchase Order %s submitted (%s) diff --git a/htdocs/langs/en_IN/partnership.lang b/htdocs/langs/en_IN/partnership.lang deleted file mode 100644 index 6a2455e0302..00000000000 --- a/htdocs/langs/en_IN/partnership.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - partnership -ReasonDeclineOrCancel=Reason for refusal or cancellation diff --git a/htdocs/langs/en_SG/datapolicy.lang b/htdocs/langs/en_SG/datapolicy.lang deleted file mode 100644 index b73db9bf6c4..00000000000 --- a/htdocs/langs/en_SG/datapolicy.lang +++ /dev/null @@ -1,11 +0,0 @@ -# Dolibarr language file - Source file is en_US - datapolicy -datapolicySetupPage =Depending on the laws of your countries (Example Article 5 of the GDPR), personal data must be kept for a period not exceeding the duration the data is needed for the purpose for which it was collected, except for archival purposes.
The deletion will be done automatically after a certain duration without events (the duration which you will have indicated below). -DATAPOLICYSUBJECTMAIL =Subject of the email -DATAPOLICYREFUSE =Message after disagreement -TXTLINKDATAPOLICYREFUSE =Text for the link "disagreement" -DATAPOLICY_opposition_traitement =Opposes to the processing of his personal data -DATAPOLICY_opposition_prospection =Opposes to the processing of his personal data for the purposes of prospecting -DATAPOLICY_date =Date of agreement/disagreement GDPR -DATAPOLICY_send =Date agreement email sent -=Due to a technical problem, we were unable to register your choice. We apologize for that. Contact us to notify us your choice. -NUMBER_MONTH_BEFORE_DELETION =Number of months before deletion diff --git a/htdocs/langs/en_SG/errors.lang b/htdocs/langs/en_SG/errors.lang deleted file mode 100644 index 1f998d29e16..00000000000 --- a/htdocs/langs/en_SG/errors.lang +++ /dev/null @@ -1,4 +0,0 @@ -# Dolibarr language file - Source file is en_US - errors -ErrorRefAlreadyExists=Reference %s used for creation already exists. -ThisIdNotDefined=Id not defined -OperNotDefined=Payment method not defined diff --git a/htdocs/langs/en_SG/holiday.lang b/htdocs/langs/en_SG/holiday.lang deleted file mode 100644 index 254b07b0308..00000000000 --- a/htdocs/langs/en_SG/holiday.lang +++ /dev/null @@ -1,4 +0,0 @@ -# Dolibarr language file - Source file is en_US - holiday -MenuCollectiveAddCP=New collective leave -NewHolidayForGroup=New collective leave -SendRequestCollectiveCP=Create collective leave diff --git a/htdocs/langs/en_SG/languages.lang b/htdocs/langs/en_SG/languages.lang deleted file mode 100644 index 879813b70ad..00000000000 --- a/htdocs/langs/en_SG/languages.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - languages -Language_en_AE=English (United Arab Emirates) diff --git a/htdocs/langs/en_SG/orders.lang b/htdocs/langs/en_SG/orders.lang deleted file mode 100644 index a1e7f34c64b..00000000000 --- a/htdocs/langs/en_SG/orders.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - orders -SupplierOrderSubmitedInDolibarr=Purchase Order %s submitted (%s) diff --git a/htdocs/langs/en_SG/partnership.lang b/htdocs/langs/en_SG/partnership.lang deleted file mode 100644 index 6a2455e0302..00000000000 --- a/htdocs/langs/en_SG/partnership.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - partnership -ReasonDeclineOrCancel=Reason for refusal or cancellation diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 921f827ca75..ed6431ff1d6 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -88,6 +88,8 @@ SearchString=Search string NotAvailableWhenAjaxDisabled=Not available when Ajax disabled AllowToSelectProjectFromOtherCompany=On document of a third party, can choose a project linked to another third party TimesheetPreventAfterFollowingMonths=Prevent recording time spent after the following number of months +PROJECT_DISPLAY_LINKED_BY_CONTACT=Display project linked by a common contact +PROJECT_DISPLAY_LINKED_BY_CONTACT_help=That option add a new list on Project tab with all projects linked to that thirdparty via a contact relationship JavascriptDisabled=JavaScript disabled UsePreviewTabs=Use preview tabs ShowPreview=Show preview @@ -655,7 +657,7 @@ Module2200Desc=Use maths expressions for auto-generation of prices Module2300Name=Scheduled jobs Module2300Desc=Scheduled jobs management (alias cron or chrono table) Module2400Name=Events/Agenda -Module2400Desc=Track events. Log automatic events for tracking purposes or record manual events or meetings. This is the principal module for good Customer or Vendor Relationship Management. +Module2400Desc=Manage manual and automatic events. Provide a calendar to record events manually. Log also events automatically for tracking purposes or record manual events or meetings. This is the principal module for good Customer or Vendor Relationship Management. Module2430Name=Online appointment scheduling Module2430Desc=Provides an online appointment booking system. This allow anyone to book rendez-vous, according to predefined ranges or availabilities. Module2500Name=DMS / ECM @@ -1664,7 +1666,7 @@ LDAPDescUsers=This page allows you to define LDAP attributes name in LDAP tree f LDAPDescGroups=This page allows you to define LDAP attributes name in LDAP tree for each data found on Dolibarr groups. LDAPDescMembers=This page allows you to define LDAP attributes name in LDAP tree for each data found on Dolibarr members module. LDAPDescMembersTypes=This page allows you to define LDAP attributes name in LDAP tree for each data found on Dolibarr members types. -LDAPDescValues=Example values are designed for OpenLDAP with following loaded schemas: core.schema, cosine.schema, inetorgperson.schema). If you use thoose values and OpenLDAP, modify your LDAP config file slapd.conf to have all thoose schemas loaded. +LDAPDescValues=Example values are designed for OpenLDAP with following loaded schemas: core.schema, cosine.schema, inetorgperson.schema). If you use those values and OpenLDAP, modify your LDAP config file slapd.conf to have all those schemas loaded. ForANonAnonymousAccess=For an authenticated access (for a write access for example) PerfDolibarr=Performance setup/optimizing report YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance. @@ -1883,6 +1885,7 @@ CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when mak CashDeskForceDecreaseStockLabel=Stock decrease for batch products was forced. CashDeskForceDecreaseStockDesc=Decrease first by the oldest eatby and sellby dates. CashDeskReaderKeyCodeForEnter=Key ASCII code for "Enter" defined in barcode reader (Example: 13) +CashDeskDefaultProject=Assign all future sales to this project ##### Bookmark ##### BookmarkSetup=Bookmark module setup BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu. @@ -2424,6 +2427,7 @@ LargeModern=Large - Modern SpecialCharActivation=Enable the button to open a virtual keyboard to enter special characters DeleteExtrafield=Delete extrafield ConfirmDeleteExtrafield=Do you confirm deletion of the field %s ? All data saved into this field will be definitely deleted +ConfirmDeleteSetup=Are you sure you want to delete the setup for %s ? ExtraFieldsSupplierInvoicesRec=Complementary attributes (templates invoices) ExtraFieldsSupplierInvoicesLinesRec=Complementary attributes (template invoice lines) ParametersForTestEnvironment=Parameters for test environment @@ -2436,11 +2440,16 @@ ExportUseForce=Use the parameter -f ExportUseForceHelp=Force to continue the export even when an error is found (Backup may not be reliable) CustomPrompt=Custom prompts AiDescription=AI (Artificial Intelligence) features -AiDescriptionLong=Provides AI (Artificial Intelligence) features in different parts of the application. Need external AI API. -AI_KEY_API_CHATGPT= Key for ChatGPT AI api +AiDescriptionLong=Provides AI (Artificial Intelligence) features in different parts of the application. Need external AI API. +AI_API_CHATGPT_ENDPOINT=Endpoint for ChatGPT AI api +AI_API_CHATGPT_KEY=Key for ChatGPT AI api AiSetup=AI module setup AiCustomPrompt=AI custom prompt AI_CONFIGURATIONS_PROMPT=Custom prompt +TextGeneration=Text generation ImageGeneration=Image generation +VideoGeneration=Video generation +AudioText=Audio - Text AIPromptForFeatures=AI custom prompts for features EnterAnIP=Enter an IP address +ConvertInto=Convert into diff --git a/htdocs/langs/en_US/agenda.lang b/htdocs/langs/en_US/agenda.lang index 70ce8809858..8ce39450cd8 100644 --- a/htdocs/langs/en_US/agenda.lang +++ b/htdocs/langs/en_US/agenda.lang @@ -21,7 +21,6 @@ MenuDoneMyActions=My terminated events ListOfEvents=List of events (default calendar) ActionsAskedBy=Events reported by ActionsToDoBy=Events assigned to -ActionsDoneBy=Events done by ActionAssignedTo=Event assigned to ViewCal=Month view ViewDay=Day view diff --git a/htdocs/langs/en_US/bills.lang b/htdocs/langs/en_US/bills.lang index dc17cd63020..31b2655f403 100644 --- a/htdocs/langs/en_US/bills.lang +++ b/htdocs/langs/en_US/bills.lang @@ -653,3 +653,7 @@ InvoiceSubtype=Invoice Subtype SalaryInvoice=Salary BillsAndSalaries=Bills & Salaries CreateCreditNoteWhenClientInvoiceExists=This option is enabled only when validated invoice(s) exist for a customer or when constant INVOICE_CREDIT_NOTE_STANDALONE is used(useful for some countries) +SearchUnpaidSupplierInvoicesWithDueDate=Search unpaid supplier invoices with a due date = %s +SearchValidatedSupplierInvoicesWithDate=Search unpaid supplier invoices with a validation date = %s +SendEmailsRemindersOnSupplierInvoiceDueDate=Send reminder by email for validated and unpaid supplier invoices +PaymentMadeForSeveralInvoices=Payment made for several invoices diff --git a/htdocs/langs/en_US/cashdesk.lang b/htdocs/langs/en_US/cashdesk.lang index d0c684cb961..ff42af8c3fb 100644 --- a/htdocs/langs/en_US/cashdesk.lang +++ b/htdocs/langs/en_US/cashdesk.lang @@ -147,6 +147,7 @@ ShowProductReference=Show reference or label of products UsePriceHT=Use price excl. taxes and not price incl. taxes when modifying a price TerminalName=Terminal %s TerminalNameDesc=Terminal name +TakePosCustomerMandatory=You must choose a customer DefaultPOSThirdLabel=TakePOS generic customer DefaultPOSCatLabel=Point Of Sale (POS) products DefaultPOSProductLabel=Product example for TakePOS diff --git a/htdocs/langs/en_US/commercial.lang b/htdocs/langs/en_US/commercial.lang index 2f6e4da03dc..7b0ab3ed30e 100644 --- a/htdocs/langs/en_US/commercial.lang +++ b/htdocs/langs/en_US/commercial.lang @@ -47,7 +47,6 @@ LastProspectToContact=To contact LastProspectContactInProcess=Contact in process LastProspectContactDone=Contact done ActionAffectedTo=Event assigned to -ActionDoneBy=Event done by ActionAC_TEL=Phone call ActionAC_FAX=Send fax ActionAC_PROP=Send proposal by mail diff --git a/htdocs/langs/en_US/companies.lang b/htdocs/langs/en_US/companies.lang index 57b3cf539cf..526483b1339 100644 --- a/htdocs/langs/en_US/companies.lang +++ b/htdocs/langs/en_US/companies.lang @@ -6,7 +6,7 @@ ErrorSetACountryFirst=Set the country first SelectThirdParty=Select a third party ConfirmDeleteCompany=Are you sure you want to delete this company and all related information? DeleteContact=Delete a contact/address -ConfirmDeleteContact=Are you sure you want to delete this contact and all related information? +ConfirmDeleteContact=Are you sure you want to delete this contact? MenuNewThirdParty=New Third Party MenuNewCustomer=New Customer MenuNewProspect=New Prospect @@ -527,4 +527,4 @@ HideSocialNetworks=Hide social networks ExternalSystemID=External system ID IDOfPaymentInAnExternalSystem=ID of the payment mode into an external system (like Stripe, Paypal, ...) AADEWebserviceCredentials=AADE Webservice Credentials -ThirdPartyMustBeACustomerToCreateBANOnStripe=The third-party must be a customer to allow the creation of its bank info on Stripe side +ThirdPartyMustBeACustomerToCreateBANOnStripe=The third-party must be a customer to allow the creation of its bank info on Stripe side diff --git a/htdocs/langs/en_US/datapolicy.lang b/htdocs/langs/en_US/datapolicy.lang index 4f3f3682ab1..69482b5884b 100644 --- a/htdocs/langs/en_US/datapolicy.lang +++ b/htdocs/langs/en_US/datapolicy.lang @@ -39,12 +39,7 @@ DATAPOLICY_CONTACT_NIPROSPECT_NICLIENT = Nor prospect/Nor customer DATAPOLICY_CONTACT_FOURNISSEUR = Supplier DATAPOLICY_ADHERENT = Member DATAPOLICY_Tooltip_SETUP = Type of contact - Indicate your choices for each type. -DATAPOLICYMail = Emails Setup -DATAPOLICYSUBJECTMAIL = Subject of the email -DATAPOLICYCONTENTMAIL = Content of the email DATAPOLICYSUBSITUTION = You can use the following variables in your email (LINKACCEPT allows to create a link recording the agreement of the person, LINKREFUSED makes it possible to record the refusal of the person): -DATAPOLICYACCEPT = Message after agreement -DATAPOLICYREFUSE = Message after disagreement SendAgreementText = You can send a GDPR email to all your relevant contacts (who have not yet received an email and for which you have not registered anything about their GDPR agreement). To do this, use the following button. SendAgreement = Send emails AllAgreementSend = All emails have been sent @@ -60,12 +55,6 @@ DATAPOLICY_consentement = Consent obtained for the processing of personal data DATAPOLICY_opposition_traitement = Opposes to the processing of his personal data DATAPOLICY_opposition_prospection = Opposes to the processing of his personal data for the purposes of prospecting -# -# Popup -# -DATAPOLICY_POPUP_ANONYME_TITLE = Anonymize a third party -DATAPOLICY_POPUP_ANONYME_TEXTE = You can not delete this contact from Dolibarr because there are related items. In accordance with the GDPR, you will make all this data anonymous to respect your obligations. Would you like to continue ? - # # Button for portability # @@ -80,7 +69,6 @@ ANONYMISER_AT = Anonymised the %s DATAPOLICY_date = Date of agreement/disagreement GDPR DATAPOLICY_send = Date agreement email sent -DATAPOLICY_SEND = Send GDPR email MailSent = Email has been sent # ERROR diff --git a/htdocs/langs/en_US/deliveries.lang b/htdocs/langs/en_US/deliveries.lang index b8ae6dca02a..5eac14c4958 100644 --- a/htdocs/langs/en_US/deliveries.lang +++ b/htdocs/langs/en_US/deliveries.lang @@ -1,7 +1,7 @@ # Dolibarr language file - Source file is en_US - deliveries Delivery=Delivery DeliveryRef=Ref Delivery -DeliveryCard=Stock receipt +DeliveryCard=Delivery receipt DeliveryOrder=Delivery receipt DeliveryDate=Delivery date CreateDeliveryOrder=Generate delivery receipt diff --git a/htdocs/langs/en_US/donations.lang b/htdocs/langs/en_US/donations.lang index e60a65efb46..eaebe7c2b03 100644 --- a/htdocs/langs/en_US/donations.lang +++ b/htdocs/langs/en_US/donations.lang @@ -35,3 +35,4 @@ DonationPayments=Donation payments DonationValidated=Donation %s validated DonationUseThirdparties=Use the address of an existing thirdparty as the address of the donor DonationsStatistics=Donation's statistics +NbOfDonations=Number of donations diff --git a/htdocs/langs/en_US/errors.lang b/htdocs/langs/en_US/errors.lang index 71b2dccb2bf..d8ebfa352e5 100644 --- a/htdocs/langs/en_US/errors.lang +++ b/htdocs/langs/en_US/errors.lang @@ -263,11 +263,11 @@ ErrorReplaceStringEmpty=Error, the string to replace into is empty ErrorProductNeedBatchNumber=Error, product '%s' need a lot/serial number ErrorProductDoesNotNeedBatchNumber=Error, product '%s' does not accept a lot/serial number ErrorFailedToReadObject=Error, failed to read object of type %s -ErrorParameterMustBeEnabledToAllwoThisFeature=Error, parameter %s must be enabled into conf/conf.php<> to allow use of Command Line Interface by the internal job scheduler +ErrorParameterMustBeEnabledToAllwoThisFeature=Error, parameter %s must be enabled into conf/conf.php to allow use of Command Line Interface by the internal job scheduler ErrorLoginDateValidity=Error, this login is outside the validity date range ErrorValueLength=Length of field '%s' must be higher than '%s' ErrorReservedKeyword=The word '%s' is a reserved keyword -ErrorFilenameReserved=The filename %s can't be used as it is a reserved and protected command. +ErrorFilenameReserved=The filename %s can't be used as it is a reserved and protected command. ErrorNotAvailableWithThisDistribution=Not available with this distribution ErrorPublicInterfaceNotEnabled=Public interface was not enabled ErrorLanguageRequiredIfPageIsTranslationOfAnother=The language of new page must be defined if it is set as a translation of another page @@ -312,26 +312,28 @@ ErrorDateOfMovementLowerThanDateOfFileTransmission=The date of the bank transact ErrorTooMuchFileInForm=Too much files in form, the maximum number is %s file(s) ErrorSessionInvalidatedAfterPasswordChange=The session was been invalidated following a change of password, email, status or dates of validity. Please relogin. ErrorExistingPermission = Permission %s for object %s already exists -ErrorFieldExist=The value for %s already exist +ErrorFieldExist=The value for %s already exist ErrorEqualModule=Module invalid in %s ErrorFieldValue=Value for %s is incorrect ErrorCoherenceMenu=%s is required when %s is 'left' ErrorUploadFileDragDrop=There was an error while the file(s) upload -ErrorUploadFileDragDropPermissionDenied=There was an error while the file(s) upload : Permission denied +ErrorUploadFileDragDropPermissionDenied=There was an error while the file(s) upload : Permission denied ErrorFixThisHere=Fix this here ErrorTheUrlOfYourDolInstanceDoesNotMatchURLIntoOAuthSetup=Error: The URL of you current instance (%s) does not match the URL defined into your OAuth2 login setup (%s). Doing OAuth2 login in such a configuration is not allowed. ErrorMenuExistValue=A Menu already exist with this Title or URL -ErrorSVGFilesNotAllowedAsLinksWithout=SVG files are not allowed as external links without the option %s -ErrorTypeMenu=Impossible to add another menu for the same module on the navbar, not handle yet +ErrorSVGFilesNotAllowedAsLinksWithout=SVG files are not allowed as external links without the option %s +ErrorTypeMenu=Impossible to add another menu for the same module on the navbar, not handle yet ErrorObjectNotFound = The object %s is not found, please check your url ErrorCountryCodeMustBe2Char=Country code must be a 2 character string -ErrorABatchShouldNotContainsSpaces=A lot or serial number should not contains spaces +ErrorABatchShouldNotContainsSpaces=A lot or serial number should not contains spaces ErrorTableExist=Table %s already exist ErrorDictionaryNotFound=Dictionary %s not found -ErrorFailedToCreateSymLinkToMedias=Failed to create the symbolic link %s to point to %s +ErrorFailedToCreateSymLinkToMedias=Failed to create the symbolic link %s to point to %s ErrorCheckTheCommandInsideTheAdvancedOptions=Check the command used for the export into the Advanced options of the export +ErrorEndTimeMustBeGreaterThanStartTime=End time must be greater than start time +ErrorIncoherentDates=Date start must be less than date end # Warnings WarningParamUploadMaxFileSizeHigherThanPostMaxSize=Your PHP parameter upload_max_filesize (%s) is higher than PHP parameter post_max_size (%s). This is not a consistent setup. WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user. @@ -344,6 +346,7 @@ WarningConfFileMustBeReadOnly=Warning, your config file (htdocs/conf/conf.php WarningsOnXLines=Warnings on %s source record(s) WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup. WarningLockFileDoesNotExists=Warning, once setup is finished, you must disable the installation/migration tools by adding a file install.lock into directory %s. Omitting the creation of this file is a grave security risk. +WarningUpgradeHasBeenUnlocked=Warning, upgrade process has been unlocked for everybody WarningUntilDirRemoved=This security warning will remain active as long as the vulnerability is present. WarningCloseAlways=Warning, closing is done even if amount differs between source and target elements. Enable this feature with caution. WarningUsingThisBoxSlowDown=Warning, using this box slow down seriously all pages showing the box. @@ -369,12 +372,12 @@ WarningPaypalPaymentNotCompatibleWithStrict=The value 'Strict' makes the online WarningThemeForcedTo=Warning, theme has been forced to %s by hidden constant MAIN_FORCETHEME WarningPagesWillBeDeleted=Warning, this will also delete all existing pages/containers of the website. You should export your website before, so you have a backup to re-import it later. WarningAutoValNotPossibleWhenStockIsDecreasedOnInvoiceVal=Automatic validation is disabled when option to decrease stock is set on "Invoice validation". -WarningModuleNeedRefresh = Module %s has been disabled. Don't forget to enable it +WarningModuleNeedRefresh = Module %s has been disabled. Don't forget to enable it WarningPermissionAlreadyExist=Existing permissions for this object -WarningGoOnAccountancySetupToAddAccounts=If this list is empty, go into menu %s - %s - %s to load or create accounts for your chart of account. +WarningGoOnAccountancySetupToAddAccounts=If this list is empty, go into menu %s - %s - %s to load or create accounts for your chart of account. WarningCorrectedInvoiceNotFound=Corrected invoice not found -WarningCommentNotFound=Please check placement of start and end comments for %s section in file %s before submitting your action -WarningAlreadyReverse=Stock movement already reversed +WarningCommentNotFound=Warning: Can't find the start and/or end comments for the section %s into the file %s +WarningAlreadyReverse=Stock movement already reversed SwissQrOnlyVIR = SwissQR invoice can only be added on invoices set to be paid with credit transfer payments. SwissQrCreditorAddressInvalid = Creditor address is invalid (are ZIP and city set? (%s) @@ -411,3 +414,4 @@ ThisIdNotDefined=Id not defined OperNotDefined=Payment method not defined ErrorThisContactXIsAlreadyDefinedAsThisType=%s is already defined as contact for this type. ErrorThisGroupIsAlreadyDefinedAsThisType=The contacts with this group are already defined as contact for this type. +EmptyMessageNotAllowedError=Empty Message Not Allowed Error diff --git a/htdocs/langs/en_US/eventorganization.lang b/htdocs/langs/en_US/eventorganization.lang index 9d3b5c5fb08..e0e26dc460b 100644 --- a/htdocs/langs/en_US/eventorganization.lang +++ b/htdocs/langs/en_US/eventorganization.lang @@ -27,6 +27,7 @@ EventOrganizationMenuLeft = Organized events EventOrganizationConferenceOrBoothMenuLeft = Conference Or Booth PaymentEvent=Payment of event +EventFee=Event fee # # Admin page diff --git a/htdocs/langs/en_US/help.lang b/htdocs/langs/en_US/help.lang index 17a6104d59a..88a1b006591 100644 --- a/htdocs/langs/en_US/help.lang +++ b/htdocs/langs/en_US/help.lang @@ -21,3 +21,4 @@ LinkToGoldMember=You can call one of the trainers preselected by Dolibarr for yo PossibleLanguages=Supported languages SubscribeToFoundation=Help the Dolibarr project, subscribe to the foundation SeeOfficalSupport=For official Dolibarr support in your language:
%s +AIProcessingPleaseWait=AI interrogation in progress, please wait... \ No newline at end of file diff --git a/htdocs/langs/en_US/mails.lang b/htdocs/langs/en_US/mails.lang index 704b4553dcc..da25fc5a5f9 100644 --- a/htdocs/langs/en_US/mails.lang +++ b/htdocs/langs/en_US/mails.lang @@ -7,7 +7,7 @@ AllEMailings=All eMailings MailCard=EMailing card MailRecipients=Recipients MailRecipient=Recipient -MailTitle=Description +MailTitle=Label MailFrom=From PhoneFrom=From MailErrorsTo=Errors to @@ -30,7 +30,6 @@ NewSMSing=New smsing EditMailing=Edit emailing ResetMailing=Resend emailing DeleteMailing=Delete emailing -DeleteAMailing=Delete an emailing PreviewMailing=Preview emailing CreateMailing=Create emailing TestMailing=Test @@ -192,3 +191,5 @@ helpWithAi=Generate message from AI YouCanMakeSomeInstructionForEmail=You can make some instructions for your Email (Example: generate image in email template...) ModelTemplate=Email template YouCanChooseAModelForYouMailContent= You can choose one of template models or generate one with AI +TitleOfMailHolder=Title of the e-mail goes here +ContentOfMailHolder=Content of email goes here... diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang index 9bbeb508726..f519e098d01 100644 --- a/htdocs/langs/en_US/main.lang +++ b/htdocs/langs/en_US/main.lang @@ -383,6 +383,7 @@ PriceUHT=U.P. (net) PriceUHTCurrency=U.P (net) (currency) PriceUTTC=U.P. (inc. tax) Amount=Amount +Amounts=Amounts AmountInvoice=Invoice amount AmountInvoiced=Amount invoiced AmountInvoicedHT=Amount invoiced (excl. tax) @@ -561,6 +562,7 @@ New=New Discount=Discount Unknown=Unknown General=General +Dimensions=Dimensions Size=Size OriginalSize=Original size RotateImage=Rotate 90° @@ -1272,3 +1274,8 @@ Settings=Settings FillMessageWithALayout=Fill message with a layout FillMessageWithAIContent=Fill message with AI content EnterYourAIPromptHere=Enter your AI prompt here +UseOrOperatorShort=or +GoOnList=Go on list +ShowSearchFields=Do a search +MyUserCard=My user file +PublicFile=Public file diff --git a/htdocs/langs/en_US/modulebuilder.lang b/htdocs/langs/en_US/modulebuilder.lang index c59c4271710..9ff542d9799 100644 --- a/htdocs/langs/en_US/modulebuilder.lang +++ b/htdocs/langs/en_US/modulebuilder.lang @@ -165,7 +165,7 @@ BadValueForType=Bad value for type %s DefinePropertiesFromExistingTable=Define the fields/properties from an existing table DefinePropertiesFromExistingTableDesc=If a table in the database (for the object to create) already exists, you can use it to define the properties of the object. DefinePropertiesFromExistingTableDesc2=Keep empty if the table does not exist yet. The code generator will use different kinds of fields to build an example of table that you can edit later. -GeneratePermissions=I want to manage permissions on this object +GeneratePermissions=I want to manage permissions on this object GeneratePermissionsHelp=If you check this, some code will be added to manage permissions to read, write and delete record of the objects PermissionDeletedSuccesfuly=Permission has been successfully removed PermissionUpdatedSuccesfuly=Permission has been successfully updated @@ -173,6 +173,7 @@ PermissionAddedSuccesfuly=Permission has been successfully added MenuDeletedSuccessfuly=Menu has been successfully deleted MenuAddedSuccessfuly=Menu has been successfully added MenuUpdatedSuccessfuly=Menu has been successfully updated +AddAPIsForThisObject=Add APIs for this object ApiObjectDeleted=API for object %s has been successfully deleted CRUDRead=Read CRUDCreateWrite=Create or Update @@ -181,8 +182,8 @@ DictionariesCreated=Dictionary %s created successfully DictionaryDeleted=Dictionary %s removed successfully PropertyModuleUpdated=Property %s has been update successfully InfoForApiFile=* When you generate file for the first time then all methods will be created for each object.
* When you click in remove you just remove all methods for the selected object. -SetupFile=Page for module setup +SetupFile=Page for module setup EmailingSelectors=Emails selectors EmailingSelectorDesc=You can generate and edit here the class files to provide new email target selectors for the mass emailing module EmailingSelectorFile=Emails selector file -NoEmailingSelector=No emails selector file \ No newline at end of file +NoEmailingSelector=No emails selector file diff --git a/htdocs/langs/en_US/orders.lang b/htdocs/langs/en_US/orders.lang index acee379edad..b7b702892fb 100644 --- a/htdocs/langs/en_US/orders.lang +++ b/htdocs/langs/en_US/orders.lang @@ -99,7 +99,7 @@ ListOfOrders=List of orders ListOrderLigne=Lines of orders productobuy=Products to buy only productonly=Products only -disablelinefree=No free lines +disablelinefree=Predefined products only CloseOrder=Close order ConfirmCloseOrder=Are you sure you want to set this order to delivered? Once an order is delivered, it can be set to billed. ConfirmDeleteOrder=Are you sure you want to delete this order? diff --git a/htdocs/langs/en_US/other.lang b/htdocs/langs/en_US/other.lang index 0e1503187a6..12955cc9f0e 100644 --- a/htdocs/langs/en_US/other.lang +++ b/htdocs/langs/en_US/other.lang @@ -185,7 +185,7 @@ SizeUnitfoot=foot SizeUnitpoint=point BugTracker=Bug tracker SendNewPasswordDesc=This form allows you to request a new password. It will be sent to your email address.
Change will become effective once you click on the confirmation link in the email.
Check your inbox. -EnterNewPasswordHere=Enter your new password here +EnterNewPasswordHere=Enter your new password here BackToLoginPage=Back to login page AuthenticationDoesNotAllowSendNewPassword=Authentication mode is %s.
In this mode, Dolibarr can't know nor change your password.
Contact your system administrator if you want to change your password. EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use this option. @@ -207,6 +207,7 @@ EMailTextInterventionValidated=The intervention %s has been validated. EMailTextInterventionClosed=The intervention %s has been closed. EMailTextInvoiceValidated=Invoice %s has been validated. EMailTextInvoicePayed=Invoice %s has been paid. +EMailTextInvoiceCanceled=Invoice %s has been canceled. EMailTextProposalValidated=Proposal %s has been validated. EMailTextProposalClosedSigned=Proposal %s has been closed signed. EMailTextProposalClosedSignedWeb=Proposal %s has been closed signed on portal page. @@ -214,6 +215,7 @@ EMailTextProposalClosedRefused=Proposal %s has been closed refused. EMailTextProposalClosedRefusedWeb=Proposal %s has been closed refuse on portal page. EMailTextOrderValidated=Order %s has been validated. EMailTextOrderClose=Order %s has been delivered. +EMailTextOrderCanceled=Order %s has been canceled. EMailTextSupplierOrderApprovedBy=Purchase order %s has been approved by %s. EMailTextSupplierOrderValidatedBy=Purchase order %s has been recorded by %s. EMailTextSupplierOrderSubmittedBy=Purchase order %s has been submitted by %s. @@ -260,10 +262,10 @@ PassEncoding=Password encoding PermissionsAdd=Permissions added PermissionsDelete=Permissions removed YourPasswordMustHaveAtLeastXChars=Your password must have at least %s chars -PasswordNeedAtLeastXUpperCaseChars=The password need at least %s upper case chars -PasswordNeedAtLeastXDigitChars=The password need at least %s numeric chars +PasswordNeedAtLeastXUpperCaseChars=The password need at least %s upper case chars +PasswordNeedAtLeastXDigitChars=The password need at least %s numeric chars PasswordNeedAtLeastXSpecialChars=The password need at least %s special chars -PasswordNeedNoXConsecutiveChars=The password must not have %s consecutive similar chars +PasswordNeedNoXConsecutiveChars=The password must not have %s consecutive similar chars YourPasswordHasBeenReset=Your password has been reset successfully ApplicantIpAddress=IP address of applicant SMSSentTo=SMS sent to %s @@ -275,7 +277,9 @@ TicketCreatedByEmailCollector=Ticket created by email collector from email MSGID OpeningHoursFormatDesc=Use a - to separate opening and closing hours.
Use a space to enter different ranges.
Example: 8-12 14-18 SuffixSessionName=Suffix for session name LoginWith=Login with %s - +ObjectId=Object ID +FullData=Full data + ##### Export ##### ExportsArea=Exports area AvailableFormats=Available formats @@ -325,6 +329,7 @@ SetupOfFTPClientModuleNotComplete=The setup of the FTP or SFTP client module see FTPFeatureNotSupportedByYourPHP=Your PHP does not support FTP or SFTP functions FailedToConnectToFTPServer=Failed to connect to server (server %s, port %s) FailedToConnectToFTPServerWithCredentials=Failed to login to server with defined login/password +FailedToChdirOnFTPServer=Failed to change directory on the FTP server FTPFailedToRemoveFile=Failed to remove file %s. FTPFailedToRemoveDir=Failed to remove directory %s: check permissions and that the directory is empty. FTPPassiveMode=Passive mode @@ -337,4 +342,4 @@ AddFolder=Create folder FileWasCreateFolder=Folder %s has been created FTPFailedToCreateFolder=Failed to create folder %s. SelectADay=Select a day in calendar -SelectANewDate=Select a new date \ No newline at end of file +SelectANewDate=Select a new date diff --git a/htdocs/langs/en_US/products.lang b/htdocs/langs/en_US/products.lang index 77355fce385..dbdc58acdcb 100644 --- a/htdocs/langs/en_US/products.lang +++ b/htdocs/langs/en_US/products.lang @@ -436,4 +436,5 @@ WarningConvertFromBatchToSerial=If you currently have a quantity higher or equal AllowStockMovementVariantParent=Also records stock movements on parent products of variant products AllowStockMovementVariantParentHelp=By default, a parent of a variant is a virtual product, so no stock is managed for it. By enabling this option, a stock will be managed for parent products and each time a stock quantity is modified for a variant product, the same quantity will be modified for the parent product. You should not need this option, except if you are using variant to manage the same product than parent (but with different descriptions, prices...) ConfirmSetToDraftInventory=Are you sure you want to go back to Draft status?
The quantities currently set in the inventory will be reset. - +WarningLineProductNotToSell=Product or service "%s" is not to sell and was cloned +PriceLabel=Price label diff --git a/htdocs/langs/en_US/projects.lang b/htdocs/langs/en_US/projects.lang index f0d303285d4..3b0ec6edb3d 100644 --- a/htdocs/langs/en_US/projects.lang +++ b/htdocs/langs/en_US/projects.lang @@ -142,6 +142,7 @@ DoNotShowMyTasksOnly=See also tasks not assigned to me ShowMyTasksOnly=View only tasks assigned to me TaskRessourceLinks=Contacts of task ProjectsDedicatedToThisThirdParty=Projects dedicated to this third party +ProjectsLinkedToThisThirdParty=Projects having a contact that is a contact of the third party NoTasks=No tasks for this project LinkedToAnotherCompany=Linked to other third party TaskIsNotAssignedToUser=Task not assigned to user. Use button '%s' to assign task now. diff --git a/htdocs/langs/en_US/receiptprinter.lang b/htdocs/langs/en_US/receiptprinter.lang index 28bf2c4f1d5..3cb8275383c 100644 --- a/htdocs/langs/en_US/receiptprinter.lang +++ b/htdocs/langs/en_US/receiptprinter.lang @@ -12,6 +12,8 @@ ReceiptPrinterProfileDesc=Description of Receipt Printer's Profile ListPrinters=List of Printers FromServerPointOfView=From the web server point of view. This method must be reachable from the web server hosting. SetupReceiptTemplate=Template Setup +PrinterNameEmpty=Printer name is empty +PrinterParameterEmpty=Printer parameters are empty CONNECTOR_DUMMY=Dummy Printer CONNECTOR_NETWORK_PRINT=Network Printer CONNECTOR_FILE_PRINT=Local Printer diff --git a/htdocs/langs/en_US/resource.lang b/htdocs/langs/en_US/resource.lang index 252537f0022..391ba469932 100644 --- a/htdocs/langs/en_US/resource.lang +++ b/htdocs/langs/en_US/resource.lang @@ -9,6 +9,7 @@ ActionsOnResource=Events about this resource ResourcePageIndex=Resources list ResourceSingular=Resource ResourceCard=Resource card +NewResource=New resource AddResource=Create a resource ResourceFormLabel_ref=Resource name ResourceType=Resource type @@ -39,3 +40,4 @@ ErrorResourcesAlreadyInUse=Some resources are in use ErrorResourceUseInEvent=%s used in %s event MaxUsers=Maximum users (places, seats, etc.) +MaxUsersLabel=Maximum users diff --git a/htdocs/langs/en_US/stocks.lang b/htdocs/langs/en_US/stocks.lang index 70a25ea5e27..7740eb8d647 100644 --- a/htdocs/langs/en_US/stocks.lang +++ b/htdocs/langs/en_US/stocks.lang @@ -128,7 +128,7 @@ Replenishment=Replenishment ReplenishmentOrders=Replenishment orders VirtualDiffersFromPhysical=According to increase/decrease stock options, physical stock and virtual stock (physical stock + open orders) may differ UseRealStockByDefault=Use real stock, instead of virtual stock, for replenishment feature -ReplenishmentCalculation=Amount to order will be (desired quantity - real stock) instead of (desired quantity - virtual stock) +ReplenishmentCalculation=Amount to order will be (desired quantity - real stock) instead of (desired quantity - virtual stock) UseVirtualStock=Use virtual stock UsePhysicalStock=Use physical stock CurentSelectionMode=Current selection mode @@ -245,7 +245,7 @@ AlwaysShowFullArbo=Display the full path of a warehouse (parent warehouses) on t StockAtDatePastDesc=You can view here the stock (real stock) at a given date in the past StockAtDateFutureDesc=You can view here the stock (virtual stock) at a given date in the future CurrentStock=Current stock -InventoryRealQtyHelp=Set value to 0 to reset qty
Keep field empty, or remove line, to keep unchanged +InventoryRealQtyHelp=The quantity you found in stock when making the inventory. Set value to 0 to reset qty
Keep field empty, or remove line, to keep unchanged UpdateByScaning=Complete real qty by scanning UpdateByScaningProductBarcode=Update by scan (product barcode) UpdateByScaningLot=Update by scan (lot|serial barcode) @@ -322,7 +322,7 @@ BatchNotFound=Lot / serial not found for this product StockEntryDate=Date of
entry in stock StockMovementWillBeRecorded=Stock movement will be recorded StockMovementNotYetRecorded=Stock movement will not be affected by this step -ReverseConfirmed=Stock movement has been reversed successfully +ReverseConfirmed=Stock movement has been reversed successfully WarningThisWIllAlsoDeleteStock=Warning, this will also destroy all quantities in stock in the warehouse ValidateInventory=Inventory validation IncludeSubWarehouse=Include sub-warehouse ? @@ -332,3 +332,5 @@ ConfirmDeleteBatch=Are you sure you want to delete lot/serial ? WarehouseUsage=Warehouse usage InternalWarehouse=Internal warehouse ExternalWarehouse=External warehouse +QtyCurrentlyKnownInStock=The quantity the system think you have in stock. As long as the inventory is not closed, this is a realtime value and it may change if you continue to make stock movement during the inventory (not recommended). +QtyInStockWhenInventoryWasValidated=The quantity the system think you had in stock when the inventory was validated (before the stock correction) diff --git a/htdocs/langs/en_ZA/datapolicy.lang b/htdocs/langs/en_ZA/datapolicy.lang deleted file mode 100644 index b73db9bf6c4..00000000000 --- a/htdocs/langs/en_ZA/datapolicy.lang +++ /dev/null @@ -1,11 +0,0 @@ -# Dolibarr language file - Source file is en_US - datapolicy -datapolicySetupPage =Depending on the laws of your countries (Example Article 5 of the GDPR), personal data must be kept for a period not exceeding the duration the data is needed for the purpose for which it was collected, except for archival purposes.
The deletion will be done automatically after a certain duration without events (the duration which you will have indicated below). -DATAPOLICYSUBJECTMAIL =Subject of the email -DATAPOLICYREFUSE =Message after disagreement -TXTLINKDATAPOLICYREFUSE =Text for the link "disagreement" -DATAPOLICY_opposition_traitement =Opposes to the processing of his personal data -DATAPOLICY_opposition_prospection =Opposes to the processing of his personal data for the purposes of prospecting -DATAPOLICY_date =Date of agreement/disagreement GDPR -DATAPOLICY_send =Date agreement email sent -=Due to a technical problem, we were unable to register your choice. We apologize for that. Contact us to notify us your choice. -NUMBER_MONTH_BEFORE_DELETION =Number of months before deletion diff --git a/htdocs/langs/en_ZA/errors.lang b/htdocs/langs/en_ZA/errors.lang deleted file mode 100644 index 1f998d29e16..00000000000 --- a/htdocs/langs/en_ZA/errors.lang +++ /dev/null @@ -1,4 +0,0 @@ -# Dolibarr language file - Source file is en_US - errors -ErrorRefAlreadyExists=Reference %s used for creation already exists. -ThisIdNotDefined=Id not defined -OperNotDefined=Payment method not defined diff --git a/htdocs/langs/en_ZA/holiday.lang b/htdocs/langs/en_ZA/holiday.lang deleted file mode 100644 index 254b07b0308..00000000000 --- a/htdocs/langs/en_ZA/holiday.lang +++ /dev/null @@ -1,4 +0,0 @@ -# Dolibarr language file - Source file is en_US - holiday -MenuCollectiveAddCP=New collective leave -NewHolidayForGroup=New collective leave -SendRequestCollectiveCP=Create collective leave diff --git a/htdocs/langs/en_ZA/languages.lang b/htdocs/langs/en_ZA/languages.lang deleted file mode 100644 index 879813b70ad..00000000000 --- a/htdocs/langs/en_ZA/languages.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - languages -Language_en_AE=English (United Arab Emirates) diff --git a/htdocs/langs/en_ZA/orders.lang b/htdocs/langs/en_ZA/orders.lang deleted file mode 100644 index a1e7f34c64b..00000000000 --- a/htdocs/langs/en_ZA/orders.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - orders -SupplierOrderSubmitedInDolibarr=Purchase Order %s submitted (%s) diff --git a/htdocs/langs/en_ZA/partnership.lang b/htdocs/langs/en_ZA/partnership.lang deleted file mode 100644 index 6a2455e0302..00000000000 --- a/htdocs/langs/en_ZA/partnership.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - partnership -ReasonDeclineOrCancel=Reason for refusal or cancellation diff --git a/htdocs/langs/es_AR/admin.lang b/htdocs/langs/es_AR/admin.lang index cb9808bd9b0..91e6203ec1e 100644 --- a/htdocs/langs/es_AR/admin.lang +++ b/htdocs/langs/es_AR/admin.lang @@ -202,7 +202,6 @@ MAIN_MAIL_AUTOCOPY_TO=Copiar (Bcc) todos los correos electrónicos enviados a MAIN_DISABLE_ALL_MAILS=Deshabilitar todo el envío de correo electrónico (para propósitos de prueba o demostraciones) MAIN_MAIL_FORCE_SENDTO=Enviar todos los correos electrónicos a (en lugar de destinatarios reales, para fines de prueba) MAIN_MAIL_ENABLED_USER_DEST_SELECT=Sugerir correos de empleados (si están definidos) en la lista de destinatarios predefinidos al escribir un nuevo correo. -MAIN_MAIL_SENDMODE=Sending method MAIN_MAIL_SMTPS_ID=ID de SMTP (si el servidor de envío requiere autenticación) MAIN_MAIL_SMTPS_PW=Contraseña SMTP (si el servidor de envío requiere autenticación) MAIN_MAIL_EMAIL_TLS=Usar cifrado TLS (SSL) @@ -256,7 +255,6 @@ Module80Name=Envíos Module80Desc=Gestión de envíos y remitos Module510Name=Sueldos Module4000Name=ARH -Module10000Desc=CMS to create websites with a WYSIWYG editor. This is a webmaster or developer oriented Content Management System (it is better to know HTML and CSS language). Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the internet with your own domain name. Module62000Name=Incotérminos Permission23001=Leer tarea programada Permission23002=Crear/actualizar tarea programada diff --git a/htdocs/langs/es_BO/errors.lang b/htdocs/langs/es_BO/errors.lang deleted file mode 100644 index c07bad2b19c..00000000000 --- a/htdocs/langs/es_BO/errors.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - errors -ErrorRefAlreadyExists=Reference %s used for creation already exists. diff --git a/htdocs/langs/es_BO/holiday.lang b/htdocs/langs/es_BO/holiday.lang deleted file mode 100644 index 254b07b0308..00000000000 --- a/htdocs/langs/es_BO/holiday.lang +++ /dev/null @@ -1,4 +0,0 @@ -# Dolibarr language file - Source file is en_US - holiday -MenuCollectiveAddCP=New collective leave -NewHolidayForGroup=New collective leave -SendRequestCollectiveCP=Create collective leave diff --git a/htdocs/langs/es_BO/languages.lang b/htdocs/langs/es_BO/languages.lang deleted file mode 100644 index 879813b70ad..00000000000 --- a/htdocs/langs/es_BO/languages.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - languages -Language_en_AE=English (United Arab Emirates) diff --git a/htdocs/langs/es_BO/orders.lang b/htdocs/langs/es_BO/orders.lang deleted file mode 100644 index a1e7f34c64b..00000000000 --- a/htdocs/langs/es_BO/orders.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - orders -SupplierOrderSubmitedInDolibarr=Purchase Order %s submitted (%s) diff --git a/htdocs/langs/es_BO/partnership.lang b/htdocs/langs/es_BO/partnership.lang deleted file mode 100644 index 6a2455e0302..00000000000 --- a/htdocs/langs/es_BO/partnership.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - partnership -ReasonDeclineOrCancel=Reason for refusal or cancellation diff --git a/htdocs/langs/es_CL/admin.lang b/htdocs/langs/es_CL/admin.lang index 8c688304770..f8b0aa1bb3e 100644 --- a/htdocs/langs/es_CL/admin.lang +++ b/htdocs/langs/es_CL/admin.lang @@ -205,7 +205,6 @@ MAIN_MAIL_AUTOCOPY_TO=Copiar (Bcc) todos los correos electrónicos enviados a MAIN_DISABLE_ALL_MAILS=Deshabilitar todo el envío de correo electrónico (para propósitos de prueba o demostraciones) MAIN_MAIL_FORCE_SENDTO=Enviar todos los correos electrónicos a (en lugar de destinatarios reales, para fines de prueba) MAIN_MAIL_ENABLED_USER_DEST_SELECT=Sugerir correos electrónicos de empleados (si están definidos) en la lista de destinatarios predefinidos al escribir un nuevo correo electrónico -MAIN_MAIL_SENDMODE=Sending method MAIN_MAIL_SMTPS_ID=ID de SMTP (si el servidor de envío requiere autenticación) MAIN_MAIL_SMTPS_PW=Contraseña SMTP (si el servidor de envío requiere autenticación) MAIN_MAIL_EMAIL_TLS=Utilizar cifrado TLS (SSL) @@ -436,7 +435,6 @@ Module3200Desc=Habilitar un registro inalterable de eventos empresariales. Los e Module3400Name=Redes Sociales Module5000Name=Multi-compañía Module5000Desc=Le permite administrar múltiples compañías -Module10000Desc=CMS to create websites with a WYSIWYG editor. This is a webmaster or developer oriented Content Management System (it is better to know HTML and CSS language). Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the internet with your own domain name. Module20000Name=Gestión de solicitudes de licencia Module20000Desc=Definir y rastrear las solicitudes de permiso de los empleados. Module39000Desc=Lotes, números de serie, gestión de la fecha de caducidad de los productos. diff --git a/htdocs/langs/es_CL/main.lang b/htdocs/langs/es_CL/main.lang index 1e73c4c2049..8de90100578 100644 --- a/htdocs/langs/es_CL/main.lang +++ b/htdocs/langs/es_CL/main.lang @@ -298,6 +298,7 @@ DateFormatYYYYMMDD=AAAA-MM-DD DateFormatYYYYMMDDHHMM=AAAA-MM-DD HH: SS ReportName=Reportar nombre ReportPeriod=Período del informe +Reports=Reportes Keyword=Palabra clave Fill=Llenar Reset=Reiniciar diff --git a/htdocs/langs/es_CL/modulebuilder.lang b/htdocs/langs/es_CL/modulebuilder.lang index dccb404facd..71eda1f7816 100644 --- a/htdocs/langs/es_CL/modulebuilder.lang +++ b/htdocs/langs/es_CL/modulebuilder.lang @@ -14,7 +14,6 @@ ModuleBuilderDeschooks=Esta pestaña está dedicada a los ganchos. ModuleBuilderDescwidgets=Esta pestaña está dedicada a administrar / construir widgets. ModuleBuilderDescbuildpackage=Puede generar aquí un archivo de paquete "listo para distribuir" (un archivo .zip normalizado) de su módulo y un archivo de documentación "listo para distribuir". Simplemente haga clic en el botón para construir el paquete o archivo de documentación. EnterNameOfModuleToDeleteDesc=Puedes borrar tu módulo. ADVERTENCIA: ¡Se eliminarán todos los archivos de codificación del módulo (generados o creados manualmente) Y los datos y la documentación estructurados! -EnterNameOfObjectToDeleteDesc=You can delete an object. WARNING: All coding files (generated or created manually) related to the object will be deleted! BuildPackage=Paquete de compilación BuildPackageDesc=Puede generar un paquete zip de su aplicación para que esté listo para distribuirlo en cualquier Dolibarr. También puede distribuirlo o venderlo en un mercado como DoliStore.com . BuildDocumentation=Documentación de construcción diff --git a/htdocs/langs/es_CL/orders.lang b/htdocs/langs/es_CL/orders.lang index 78416262295..759005d22ed 100644 --- a/htdocs/langs/es_CL/orders.lang +++ b/htdocs/langs/es_CL/orders.lang @@ -96,7 +96,6 @@ DispatchSupplierOrder=Recibiendo orden de compra %s FirstApprovalAlreadyDone=Primera aprobación ya hecha SecondApprovalAlreadyDone=Segunda aprobación ya hecha SupplierOrderReceivedInDolibarr=La orden de compra %s recibió %s -SupplierOrderSubmitedInDolibarr=Purchase Order %s submitted (%s) SupplierOrderClassifiedBilled=Pedido de compra %s establecido facturado OtherOrders=Otras órdenes TypeContact_commande_internal_SALESREPFOLL=Representante seguimiento de orden de venta diff --git a/htdocs/langs/es_CO/admin.lang b/htdocs/langs/es_CO/admin.lang index 64f6ec6e4bd..c0f4d40169e 100644 --- a/htdocs/langs/es_CO/admin.lang +++ b/htdocs/langs/es_CO/admin.lang @@ -217,7 +217,6 @@ MAIN_MAIL_AUTOCOPY_TO=Copiar (Bcc) todos los correos electrónicos enviados a MAIN_DISABLE_ALL_MAILS=Deshabilitar todo el envío de correo electrónico (para propósitos de prueba o demostraciones) MAIN_MAIL_FORCE_SENDTO=Enviar todos los correos electrónicos a (en lugar de destinatarios reales, para fines de prueba) MAIN_MAIL_ENABLED_USER_DEST_SELECT=Sugerir correos electrónicos de empleados (si están definidos) en la lista de destinatarios predefinidos al escribir un nuevo correo electrónico -MAIN_MAIL_SENDMODE=Sending method MAIN_MAIL_SMTPS_ID=ID de SMTP (si el servidor de envío requiere autenticación) MAIN_MAIL_SMTPS_PW=Contraseña SMTP (si el servidor de envío requiere autenticación) MAIN_MAIL_EMAIL_TLS=Utilizar cifrado TLS (SSL) @@ -476,7 +475,6 @@ Module3200Desc=Habilitar un registro inalterable de eventos empresariales. Los e Module3400Desc=Habilite los campos de Redes Sociales en terceros y direcciones (skype, twitter, facebook, ...). Module5000Desc=Le permite gestionar múltiples empresas. Module6000Desc=Gestión del flujo de trabajo entre diferentes módulos (creación automática de objeto y / o cambio de estado automático) -Module10000Desc=CMS to create websites with a WYSIWYG editor. This is a webmaster or developer oriented Content Management System (it is better to know HTML and CSS language). Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the internet with your own domain name. Module20000Name=Gestión de solicitudes de licencia/permisos Module20000Desc=Definir y realizar un seguimiento de las solicitudes de licencia/permisos de los empleados Module39000Desc=Lotes, números de serie, gestión de fechas de caducidad "ingerir antes de/vender antes de" de productos diff --git a/htdocs/langs/es_CO/errors.lang b/htdocs/langs/es_CO/errors.lang index 9e468fcf251..8e5a8f2a340 100644 --- a/htdocs/langs/es_CO/errors.lang +++ b/htdocs/langs/es_CO/errors.lang @@ -2,7 +2,6 @@ NoErrorCommitIsDone=Sin error, nos comprometemos ErrorButCommitIsDone=Errores encontrados pero validamos a pesar de esto ErrorBadValueForParamNotAString=Mal valor para su parámetro. Generalmente se adjunta cuando falta la traducción. -ErrorRefAlreadyExists=Reference %s used for creation already exists. ErrorLoginAlreadyExists=El inicio de sesión %s ya existe. ErrorRecordNotFound=Registro no encontrado. ErrorRecordNotFoundShort=Extraviado diff --git a/htdocs/langs/es_CO/holiday.lang b/htdocs/langs/es_CO/holiday.lang index 1d95a74c455..eb0a156a128 100644 --- a/htdocs/langs/es_CO/holiday.lang +++ b/htdocs/langs/es_CO/holiday.lang @@ -3,7 +3,6 @@ Holidays=Sale de Holiday=Salir CPTitreMenu=Salir MenuAddCP=Nueva solicitud de licencia -MenuCollectiveAddCP=New collective leave NotActiveModCP=Debe habilitar el módulo Salir para ver esta página. AddCP=Hacer una solicitud de licencia DateDebCP=Fecha de inicio @@ -72,8 +71,6 @@ LogCP=Registro de todas las actualizaciones realizadas en "Saldo de licencia" PrevSoldeCP=Balance anterior NewSoldeCP=Nuevo equilibrio alreadyCPexist=Ya se ha realizado una solicitud de licencia en este período. -NewHolidayForGroup=New collective leave -SendRequestCollectiveCP=Create collective leave FirstDayOfHoliday=Solicitud del día de inicio de la licencia LastDayOfHoliday=Solicitud de fin de día de licencia EmployeeLastname=Apellido del empleado diff --git a/htdocs/langs/es_CO/modulebuilder.lang b/htdocs/langs/es_CO/modulebuilder.lang index 978c328cbe4..1851409e9c7 100644 --- a/htdocs/langs/es_CO/modulebuilder.lang +++ b/htdocs/langs/es_CO/modulebuilder.lang @@ -15,7 +15,6 @@ ModuleBuilderDeschooks=Esta pestaña está dedicada a los ganchos. ModuleBuilderDescwidgets=Esta pestaña está dedicada a administrar / construir widgets. ModuleBuilderDescbuildpackage=Puede generar aquí un archivo de paquete "listo para distribuir" (un archivo .zip normalizado) de su módulo y un archivo de documentación "listo para distribuir". Simplemente haga clic en el botón para crear el paquete o el archivo de documentación. EnterNameOfModuleToDeleteDesc=Puede eliminar su módulo. ADVERTENCIA: ¡Se eliminarán todos los archivos de codificación del módulo (generados o creados manualmente) Y los datos estructurados y la documentación! -EnterNameOfObjectToDeleteDesc=You can delete an object. WARNING: All coding files (generated or created manually) related to the object will be deleted! BuildPackage=Paquete de compilación BuildPackageDesc=Puede generar un paquete zip de su aplicación para que esté listo para distribuirlo en cualquier Dolibarr. También puede distribuirlo o venderlo en un mercado como DoliStore.com . BuildDocumentation=Construir documentación diff --git a/htdocs/langs/es_CO/orders.lang b/htdocs/langs/es_CO/orders.lang index 6b34c98ba1a..48964b5c2fe 100644 --- a/htdocs/langs/es_CO/orders.lang +++ b/htdocs/langs/es_CO/orders.lang @@ -107,7 +107,6 @@ DispatchSupplierOrder=Recibiendo orden de compra %s FirstApprovalAlreadyDone=Primera aprobación ya hecha SecondApprovalAlreadyDone=Segunda aprobación ya hecha SupplierOrderReceivedInDolibarr=Orden de compra %s recibida %s -SupplierOrderSubmitedInDolibarr=Purchase Order %s submitted (%s) SupplierOrderClassifiedBilled=Orden de compra %s conjunto facturado OtherOrders=Otras ordenes TypeContact_commande_internal_SALESREPFOLL=Representante en seguimiento de orden de venta diff --git a/htdocs/langs/es_CO/partnership.lang b/htdocs/langs/es_CO/partnership.lang index 37bf21edd0f..512a1e0d37d 100644 --- a/htdocs/langs/es_CO/partnership.lang +++ b/htdocs/langs/es_CO/partnership.lang @@ -10,7 +10,6 @@ PartnershipAbout=Acerca de la asociación PartnershipAboutPage=Página "acerca de" la asociación ReferingWebsiteCheck=Comprobación de la referencia del sitio web DatePartnershipEnd=Fecha final -ReasonDeclineOrCancel=Reason for refusal or cancellation PartnershipCanceled=Cancelado PartnershipManagedFor=Socios son NewPartnershipRequestDesc=Este formulario le permite solicitar ser parte de uno de nuestros programas de asociación. Si necesita ayuda para completar este formulario, comuníquese por correo electrónico %s. diff --git a/htdocs/langs/es_CR/admin.lang b/htdocs/langs/es_CR/admin.lang index 2f7f768853a..7753e55b593 100644 --- a/htdocs/langs/es_CR/admin.lang +++ b/htdocs/langs/es_CR/admin.lang @@ -212,7 +212,6 @@ MAIN_MAIL_AUTOCOPY_TO=Copie (Bcc) todos los correos electrónicos enviados a MAIN_DISABLE_ALL_MAILS=Deshabilite todos los envíos de correo electrónico (para fines de prueba o demostraciones) MAIN_MAIL_FORCE_SENDTO=Enviar todos los correos electrónicos a (en lugar de destinatarios reales, con fines de prueba) MAIN_MAIL_ENABLED_USER_DEST_SELECT=Sugerir correos electrónicos de empleados (si están definidos) en la lista de destinatarios predefinidos al escribir un nuevo correo electrónico -MAIN_MAIL_SENDMODE=Sending method MAIN_MAIL_SMTPS_ID=ID de SMTP (si el servidor de envío requiere autenticación) MAIN_MAIL_SMTPS_PW=Contraseña SMTP (si el servidor de envío requiere autenticación) MAIN_MAIL_EMAIL_STARTTLS=Usar encriptación TLS (STARTTLS) @@ -497,7 +496,6 @@ Module4000Name=gestión de recursos humanos Module5000Name=multiempresa Module5000Desc=Le permite administrar varias empresas Module10000Name=sitios web -Module10000Desc=CMS to create websites with a WYSIWYG editor. This is a webmaster or developer oriented Content Management System (it is better to know HTML and CSS language). Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the internet with your own domain name. Module20000Name=Gestión de solicitudes de licencia Module20000Desc=Defina y realice un seguimiento de las solicitudes de licencia de los empleados Module39000Desc=Gestión de lotes, números de serie, fecha de caducidad/fecha de caducidad de los productos diff --git a/htdocs/langs/es_CR/errors.lang b/htdocs/langs/es_CR/errors.lang index ec1e83ac4f4..8034771cf37 100644 --- a/htdocs/langs/es_CR/errors.lang +++ b/htdocs/langs/es_CR/errors.lang @@ -3,7 +3,6 @@ NoErrorCommitIsDone=No hay error, nos comprometemos ErrorButCommitIsDone=Errores encontrados pero validamos a pesar de esto ErrorBadEMail=Dirección de correo electrónico %s es incorrecto ErrorBadValueForParamNotAString=Valor incorrecto para su parámetro. Se anexa generalmente cuando falta la traducción. -ErrorRefAlreadyExists=Reference %s used for creation already exists. ErrorLoginAlreadyExists=La conexión%s ya existe. ErrorGroupAlreadyExists=El grupo%s ya existe. ErrorRecordNotFound=Registro no encontrado. diff --git a/htdocs/langs/es_CR/holiday.lang b/htdocs/langs/es_CR/holiday.lang index 7199e033c93..423e06d9815 100644 --- a/htdocs/langs/es_CR/holiday.lang +++ b/htdocs/langs/es_CR/holiday.lang @@ -4,7 +4,6 @@ Holidays=Licencias Holiday=Licencia CPTitreMenu=Licencia MenuAddCP=Nueva solicitud de permiso -MenuCollectiveAddCP=New collective leave NotActiveModCP=Debe habilitar el módulo de Licencias para ver esta página AddCP=Crear una solicitud de licencia DateDebCP=Fecha de inicio @@ -71,8 +70,6 @@ NewSoldeCP=Nuevo equilibrio alreadyCPexist=Ya se ha hecho una solicitud de permiso en este período UseralreadyCPexist=Ya se ha hecho una solicitud de permiso en este periodo para %s AutoSendMail=Correo automático -NewHolidayForGroup=New collective leave -SendRequestCollectiveCP=Create collective leave FirstDayOfHoliday=Inicio del día de la solicitud de licencia LastDayOfHoliday=Final de día de la solicitud de licencia EmployeeLastname=Apellido del empleado diff --git a/htdocs/langs/es_CR/modulebuilder.lang b/htdocs/langs/es_CR/modulebuilder.lang index ffb7a0cb39d..d69b781b5a2 100644 --- a/htdocs/langs/es_CR/modulebuilder.lang +++ b/htdocs/langs/es_CR/modulebuilder.lang @@ -3,7 +3,6 @@ ModuleBuilderDesc3=Se encontraron módulos generados/editables: %s%s? Esto cambiará el código en la clase de PHP pero también eliminará la columna de la definición de la tabla del objeto. diff --git a/htdocs/langs/es_CR/orders.lang b/htdocs/langs/es_CR/orders.lang index ee9bec43870..cd7f0689b67 100644 --- a/htdocs/langs/es_CR/orders.lang +++ b/htdocs/langs/es_CR/orders.lang @@ -82,7 +82,6 @@ DispatchSupplierOrder=Recibiendo orden de compra %s FirstApprovalAlreadyDone=Primera aprobación ya realizada SecondApprovalAlreadyDone=Segunda aprobación ya realizada SupplierOrderReceivedInDolibarr=Orden de compra %s recibida %s -SupplierOrderSubmitedInDolibarr=Purchase Order %s submitted (%s) TypeContact_commande_internal_SALESREPFOLL=Representante en seguimiento de orden de venta TypeContact_commande_internal_SHIPPING=Representante en seguimiento de envío TypeContact_commande_external_BILLING=Contacto de factura de cliente diff --git a/htdocs/langs/es_CR/partnership.lang b/htdocs/langs/es_CR/partnership.lang index 5ea3def0949..a6d319f5e3d 100644 --- a/htdocs/langs/es_CR/partnership.lang +++ b/htdocs/langs/es_CR/partnership.lang @@ -5,7 +5,6 @@ PartnershipDescriptionLong=Gestión Módulo Asociaciones Partnership=Asociación PartnershipAbout=Acerca de la asociación PublicFormRegistrationPartnerDesc=Dolibarr puede proporcionarle una URL/sitio web público para permitir que los visitantes externos soliciten ser parte del programa de asociación -ReasonDeclineOrCancel=Reason for refusal or cancellation KeywordToCheckInWebsite=Si desea comprobar que una determinada palabra clave está presente en el sitio web de cada socio, defina esta palabra clave aquí PartnershipCanceled=Cancelado PartnershipManagedFor=Los socios son diff --git a/htdocs/langs/es_CU/admin.lang b/htdocs/langs/es_CU/admin.lang index a4c0401fe82..ab2c43c60e3 100644 --- a/htdocs/langs/es_CU/admin.lang +++ b/htdocs/langs/es_CU/admin.lang @@ -220,7 +220,6 @@ MAIN_MAIL_AUTOCOPY_TO=Copie (Bcc) todos los correos electrónicos enviados a MAIN_DISABLE_ALL_MAILS=Deshabilite todos los envíos de correo electrónico (para fines de prueba o demostraciones) MAIN_MAIL_FORCE_SENDTO=Enviar todos los correos electrónicos a (en lugar de destinatarios reales, con fines de prueba) MAIN_MAIL_ENABLED_USER_DEST_SELECT=Sugerir correos electrónicos de empleados (si están definidos) en la lista de destinatarios predefinidos al escribir un nuevo correo electrónico -MAIN_MAIL_SENDMODE=Sending method MAIN_MAIL_SMTPS_ID=ID de SMTP (si el servidor de envío requiere autenticación) MAIN_MAIL_SMTPS_PW=Contraseña SMTP (si el servidor de envío requiere autenticación) MAIN_MAIL_EMAIL_STARTTLS=Usar encriptación TLS (STARTTLS) @@ -495,7 +494,6 @@ Module4000Name=gestión de recursos humanos Module5000Name=multiempresa Module5000Desc=Le permite administrar varias empresas Module10000Name=sitios web -Module10000Desc=CMS to create websites with a WYSIWYG editor. This is a webmaster or developer oriented Content Management System (it is better to know HTML and CSS language). Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the internet with your own domain name. Module20000Name=Gestión de solicitudes de licencia Module20000Desc=Defina y realice un seguimiento de las solicitudes de licencia de los empleados Module39000Desc=Gestión de lotes, números de serie, fecha de caducidad/fecha de caducidad de los productos diff --git a/htdocs/langs/es_CU/errors.lang b/htdocs/langs/es_CU/errors.lang index 2e3678f2372..f6a24e4fc72 100644 --- a/htdocs/langs/es_CU/errors.lang +++ b/htdocs/langs/es_CU/errors.lang @@ -2,7 +2,6 @@ NoErrorCommitIsDone=No hay error, nos comprometemos ErrorButCommitIsDone=Errores encontrados pero validamos a pesar de esto ErrorBadValueForParamNotAString=Mal valor para su parámetro. Se agrega generalmente cuando falta la traducción. -ErrorRefAlreadyExists=Reference %s used for creation already exists. ErrorLoginAlreadyExists=El inicio de sesión %s ya existe. ErrorRecordNotFound=Registro no encontrado. ErrorRecordNotFoundShort=Extraviado diff --git a/htdocs/langs/es_CU/holiday.lang b/htdocs/langs/es_CU/holiday.lang index 5b144c4ef0d..e925ab8b875 100644 --- a/htdocs/langs/es_CU/holiday.lang +++ b/htdocs/langs/es_CU/holiday.lang @@ -3,7 +3,6 @@ HRM=gestión de recursos humanos Holiday=Dejar CPTitreMenu=Dejar MenuAddCP=Nueva solicitud de vacaciones -MenuCollectiveAddCP=New collective leave NotActiveModCP=Debe habilitar el módulo Salir para ver esta página. AddCP=Hacer una solicitud de licencia DateDebCP=Fecha de inicio @@ -68,8 +67,6 @@ PrevSoldeCP=Balance anterior NewSoldeCP=Nuevo equilibrio alreadyCPexist=Ya se ha hecho una solicitud de permiso en este período. UseralreadyCPexist=Ya se ha realizado una solicitud de licencia en este período para %s. -NewHolidayForGroup=New collective leave -SendRequestCollectiveCP=Create collective leave EmployeeLastname=apellido del empleado TypeWasDisabledOrRemoved=El tipo de licencia (id %s) se deshabilitó o eliminó LastHolidays=Últimas solicitudes de licencia %s diff --git a/htdocs/langs/es_CU/modulebuilder.lang b/htdocs/langs/es_CU/modulebuilder.lang index 9a2cba20d9f..38e134a097d 100644 --- a/htdocs/langs/es_CU/modulebuilder.lang +++ b/htdocs/langs/es_CU/modulebuilder.lang @@ -14,7 +14,6 @@ ModuleBuilderDesctriggers=Esta es la vista de disparadores proporcionada por su ModuleBuilderDeschooks=Esta pestaña está dedicada a los ganchos. ModuleBuilderDescbuildpackage=Puede generar aquí un archivo de paquete "listo para distribuir" (un archivo .zip normalizado) de su módulo y un archivo de documentación "listo para distribuir". Simplemente haga clic en el botón para crear el paquete o el archivo de documentación. EnterNameOfModuleToDeleteDesc=Puede eliminar su módulo. ADVERTENCIA: ¡Todos los archivos de codificación del módulo (generados o creados manualmente) Y los datos estructurados y la documentación serán eliminados! -EnterNameOfObjectToDeleteDesc=You can delete an object. WARNING: All coding files (generated or created manually) related to the object will be deleted! BuildPackage=Paquete de compilación BuildPackageDesc=Puede generar un paquete zip de su aplicación para que esté listo para distribuirlo en cualquier Dolibarr. También puede distribuirlo o venderlo en un mercado como DoliStore.com . BuildDocumentation=Crear documentación diff --git a/htdocs/langs/es_CU/orders.lang b/htdocs/langs/es_CU/orders.lang index 2c3726ec19c..7dcaa6f9bd6 100644 --- a/htdocs/langs/es_CU/orders.lang +++ b/htdocs/langs/es_CU/orders.lang @@ -101,7 +101,6 @@ DispatchSupplierOrder=Recibiendo orden de compra %s FirstApprovalAlreadyDone=Primera aprobación ya hecha SecondApprovalAlreadyDone=Segunda aprobación ya hecha SupplierOrderReceivedInDolibarr=Pedido de compra %s recibido %s -SupplierOrderSubmitedInDolibarr=Purchase Order %s submitted (%s) SupplierOrderClassifiedBilled=Orden de compra %s conjunto facturado TypeContact_commande_internal_SALESREPFOLL=Representante de seguimiento de pedidos de venta. TypeContact_commande_internal_SHIPPING=Envío de seguimiento representativo diff --git a/htdocs/langs/es_CU/partnership.lang b/htdocs/langs/es_CU/partnership.lang index a9845b5906b..88e581d1e36 100644 --- a/htdocs/langs/es_CU/partnership.lang +++ b/htdocs/langs/es_CU/partnership.lang @@ -14,7 +14,6 @@ PARTNERSHIP_BACKLINKS_TO_CHECK=Vínculos de retroceso para comprobar ReferingWebsiteCheck=Comprobación del sitio web de referencia DatePartnershipEnd=Fecha final ReasonDecline=Motivo de rechazo -ReasonDeclineOrCancel=Reason for refusal or cancellation ManagePartnership=Administrar asociación PartnershipType=tipo de asociación PartnershipCanceled=Cancelado diff --git a/htdocs/langs/es_DO/errors.lang b/htdocs/langs/es_DO/errors.lang deleted file mode 100644 index c07bad2b19c..00000000000 --- a/htdocs/langs/es_DO/errors.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - errors -ErrorRefAlreadyExists=Reference %s used for creation already exists. diff --git a/htdocs/langs/es_DO/holiday.lang b/htdocs/langs/es_DO/holiday.lang deleted file mode 100644 index 254b07b0308..00000000000 --- a/htdocs/langs/es_DO/holiday.lang +++ /dev/null @@ -1,4 +0,0 @@ -# Dolibarr language file - Source file is en_US - holiday -MenuCollectiveAddCP=New collective leave -NewHolidayForGroup=New collective leave -SendRequestCollectiveCP=Create collective leave diff --git a/htdocs/langs/es_DO/languages.lang b/htdocs/langs/es_DO/languages.lang deleted file mode 100644 index 879813b70ad..00000000000 --- a/htdocs/langs/es_DO/languages.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - languages -Language_en_AE=English (United Arab Emirates) diff --git a/htdocs/langs/es_DO/orders.lang b/htdocs/langs/es_DO/orders.lang deleted file mode 100644 index a1e7f34c64b..00000000000 --- a/htdocs/langs/es_DO/orders.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - orders -SupplierOrderSubmitedInDolibarr=Purchase Order %s submitted (%s) diff --git a/htdocs/langs/es_DO/partnership.lang b/htdocs/langs/es_DO/partnership.lang deleted file mode 100644 index 6a2455e0302..00000000000 --- a/htdocs/langs/es_DO/partnership.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - partnership -ReasonDeclineOrCancel=Reason for refusal or cancellation diff --git a/htdocs/langs/es_EC/admin.lang b/htdocs/langs/es_EC/admin.lang index ba635fc3e91..ec0f9dd07e8 100644 --- a/htdocs/langs/es_EC/admin.lang +++ b/htdocs/langs/es_EC/admin.lang @@ -201,7 +201,6 @@ MAIN_MAIL_AUTOCOPY_TO= Copiar (Bcc) todos los correos electrónicos enviados a MAIN_DISABLE_ALL_MAILS=Deshabilitar todo el envío de correo electrónico (para propósitos de prueba o demostraciones) MAIN_MAIL_FORCE_SENDTO=Enviar todos los correos electrónicos a (en lugar de destinatarios reales, para fines de prueba) MAIN_MAIL_ENABLED_USER_DEST_SELECT=Sugerir correos electrónicos de empleados (si están definidos) en la lista de destinatarios predefinidos al escribir un nuevo correo electrónico -MAIN_MAIL_SENDMODE=Sending method MAIN_MAIL_SMTPS_ID=ID de SMTP (si el servidor de envío requiere autenticación) MAIN_MAIL_SMTPS_PW=Contraseña SMTP (si el servidor de envío requiere autenticación) MAIN_MAIL_EMAIL_TLS=Usar cifrado TLS (SSL) @@ -442,7 +441,6 @@ Module2900Desc=Capacidades de conversiones GeoIP Maxmind Module3200Desc=Habilitar un registro inalterable de eventos empresariales. Los eventos se archivan en tiempo real. El registro es una tabla de solo lectura de eventos encadenados que se pueden exportar. Este módulo puede ser obligatorio para algunos países. Module5000Desc=Permite gestionar múltiples empresas Module10000Name=Sitios Web -Module10000Desc=CMS to create websites with a WYSIWYG editor. This is a webmaster or developer oriented Content Management System (it is better to know HTML and CSS language). Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the internet with your own domain name. Module20000Name=Gestión de solicitudes de licencia Module20000Desc=Definir y rastrear las solicitudes de permisos de los empleados. Module39000Desc=Lotes, números de serie, gestión de la fecha de caducidad de los productos. diff --git a/htdocs/langs/es_EC/modulebuilder.lang b/htdocs/langs/es_EC/modulebuilder.lang index 966b3066574..78dc31b231b 100644 --- a/htdocs/langs/es_EC/modulebuilder.lang +++ b/htdocs/langs/es_EC/modulebuilder.lang @@ -10,7 +10,6 @@ ModuleBuilderDesctriggers=Esta es la vista de los activadores proporcionados por ModuleBuilderDeschooks=Esta pestaña está dedicada a los ganchos. ModuleBuilderDescbuildpackage=Puede generar aquí un archivo de paquete "listo para distribuir" (un archivo .zip normalizado) de su módulo y un archivo de documentación "listo para distribuir". Simplemente haga clic en el botón para crear el paquete o el archivo de documentación. EnterNameOfModuleToDeleteDesc=Puedes borrar tu módulo. ADVERTENCIA: ¡Todos los archivos de codificación del módulo (generados o creados manualmente) Y los datos estructurados y la documentación serán eliminados! -EnterNameOfObjectToDeleteDesc=You can delete an object. WARNING: All coding files (generated or created manually) related to the object will be deleted! BuildPackage=Paquete de construcción BuildPackageDesc=Puede generar un paquete zip de su aplicación para que esté listo para distribuirlo en cualquier Dolibarr. También puede distribuirlo o venderlo en el mercado como DoliStore.com . BuildDocumentation=Crear documentación diff --git a/htdocs/langs/es_EC/orders.lang b/htdocs/langs/es_EC/orders.lang index 39c8193d0ef..b219764e6d3 100644 --- a/htdocs/langs/es_EC/orders.lang +++ b/htdocs/langs/es_EC/orders.lang @@ -97,7 +97,6 @@ DispatchSupplierOrder=Recepción de orden de compra %s FirstApprovalAlreadyDone=Primera aprobación ya realizada SecondApprovalAlreadyDone=Segunda aprobación ya realizada SupplierOrderReceivedInDolibarr=Orden de compra %s recibida %s -SupplierOrderSubmitedInDolibarr=Purchase Order %s submitted (%s) SupplierOrderClassifiedBilled=Conjunto de ordenes de compra %s facturado OtherOrders=Otras órdenes TypeContact_commande_internal_SALESREPFOLL=Representante de seguimiento del pedido diff --git a/htdocs/langs/es_ES/bills.lang b/htdocs/langs/es_ES/bills.lang index 23fcdc977a9..181f47ff4ff 100644 --- a/htdocs/langs/es_ES/bills.lang +++ b/htdocs/langs/es_ES/bills.lang @@ -188,7 +188,7 @@ SuppliersDraftInvoices=Facturas de proveedores borrador Unpaid=Pendientes ErrorNoPaymentDefined=Error Sin pago definido ConfirmDeleteBill=¿Está seguro de querer eliminar esta factura? -ConfirmValidateBill=¿Estás seguro de que deseas validar esta factura con la referencia %s? +ConfirmValidateBill=Are you sure you want to validate this invoice with the reference %s? ConfirmUnvalidateBill=¿Está seguro de querer cambiar el estado de la factura %s a borrador? ConfirmClassifyPaidBill=¿Está seguro de querer cambiar el estado de la factura %s a pagado? ConfirmCancelBill=¿Está seguro de querer anular la factura %s? diff --git a/htdocs/langs/es_ES/eventorganization.lang b/htdocs/langs/es_ES/eventorganization.lang index c83afcd7da0..ddef23bd7b4 100644 --- a/htdocs/langs/es_ES/eventorganization.lang +++ b/htdocs/langs/es_ES/eventorganization.lang @@ -88,6 +88,7 @@ PriceOfRegistration=Precio de inscripción PriceOfRegistrationHelp=Precio a pagar por registrarse o participar en el evento PriceOfBooth=Precio de suscripción para hacer stand PriceOfBoothHelp=Precio de suscripción para hacer stand +EventOrganizationICSLinkProject=Link ICS for the event EventOrganizationICSLink=Enlace ICS para conferencias ConferenceOrBoothInformation=Información sobre conferencias o stands Attendees=Asistentes @@ -173,7 +174,7 @@ DateStartEvent=Fecha de inicio del evento DateEndEvent=Fecha de finalización del evento ModifyStatus=Modificar estado ConfirmModifyStatus=Confirmar modificación de estado -ConfirmModifyStatusQuestion=¿Está seguro de que desea modificar el %s? registro(s) seleccionado(s)? +ConfirmModifyStatusQuestion=Are you sure you want to modify the %s selected record(s)? RecordsUpdated = %s Registros actualizados RecordUpdated = Registro actualizado NoRecordUpdated = Sin registro actualizado diff --git a/htdocs/langs/es_ES/hrm.lang b/htdocs/langs/es_ES/hrm.lang index 9675f1fe43a..ab87c9c0f68 100644 --- a/htdocs/langs/es_ES/hrm.lang +++ b/htdocs/langs/es_ES/hrm.lang @@ -45,7 +45,7 @@ Eval=Evaluación Evals=Evaluaciones NewEval=Nueva evaluación ValidateEvaluation=Validar evaluación -ConfirmValidateEvaluation=¿Está seguro de que desea validar esta evaluación con la referencia %s? +ConfirmValidateEvaluation=Are you sure you want to validate this evaluation with the reference %s? EvaluationCard=Tarjeta de evaluación RequiredRank=Rango requerido para el perfil de trabajo RequiredRankShort=rango requerido diff --git a/htdocs/langs/es_ES/main.lang b/htdocs/langs/es_ES/main.lang index a4a421a463e..4fb42807ef2 100644 --- a/htdocs/langs/es_ES/main.lang +++ b/htdocs/langs/es_ES/main.lang @@ -420,6 +420,8 @@ TotalTTCShort=Total TotalHT=Total (Base imp). TotalHTforthispage=Total (base imponible) de esta página Totalforthispage=Total en esta página +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=Total TotalTTCToYourCredit=Total a crédito TotalVAT=Total IVA @@ -647,6 +649,7 @@ ReportName=Nombre del informe ReportPeriod=Periodo de análisis ReportDescription=Descripción Report=Informe +Reports=Informes Keyword=Clave Origin=Origen Legend=Leyenda diff --git a/htdocs/langs/es_ES/receptions.lang b/htdocs/langs/es_ES/receptions.lang index ab0bb9c0197..31f6a26a61a 100644 --- a/htdocs/langs/es_ES/receptions.lang +++ b/htdocs/langs/es_ES/receptions.lang @@ -5,8 +5,6 @@ RefReception=Ref. recepción Reception=Pte. recibir Receptions=Recepciones AllReceptions=Todas las recepciones -Reception=Pte. recibir -Receptions=Recepciones ShowReception=Mostrar recepciones ReceptionsArea=Área recepciones ListOfReceptions=Listado de recepciones @@ -36,7 +34,7 @@ ValidateReception=Validar recepción ConfirmDeleteReception=¿Está seguro de querer eliminar esta recepción? ConfirmValidateReception=Are you sure you want to validate this reception with the reference %s? ConfirmCancelReception=¿Está seguro de querer cancelar esta recepción? -StatsOnReceptionsOnlyValidated=Statistics conducted on validated only receptions. Date used is date of validation of reception (planned delivery date is not always known). +StatsOnReceptionsOnlyValidated=Estadísticas realizadas sobre recepciones únicamente validadas. La fecha utilizada es la fecha de validación de la recepción (no siempre se conoce la fecha prevista de entrega). SendReceptionByEMail=Enviar recepción por e-mail SendReceptionRef=Envío de la recepción %s ActionsOnReception=Eventos sobre la recepción @@ -53,6 +51,6 @@ ReceptionBackToDraftInDolibarr=Recepción %s volver al borrador ReceptionClassifyClosedInDolibarr=Recepción %s clasificado Cerrado ReceptionUnClassifyCloseddInDolibarr=Recepción %s Reabrir RestoreWithCurrentQtySaved=Rellenar cantidades con los últimos valores guardados -ReceptionsRecorded=Receptions recorded -ReceptionUpdated=Reception successfully updated +ReceptionsRecorded=Recepciones registradas +ReceptionUpdated=Recepción actualizada con éxito ReceptionDistribution=Recepción distribución diff --git a/htdocs/langs/es_ES/stocks.lang b/htdocs/langs/es_ES/stocks.lang index 23ab79fc4c0..22ec2dc5f57 100644 --- a/htdocs/langs/es_ES/stocks.lang +++ b/htdocs/langs/es_ES/stocks.lang @@ -163,7 +163,7 @@ DateMovement=Fecha de movimiento InventoryCode=Movimiento o código de inventario IsInPackage=Contenido en el paquete WarehouseAllowNegativeTransfer=El stock puede ser negativvo -qtyToTranferIsNotEnough=No tiene suficiente existencias en el almacen de referencia y la actual configuracion no permite existencias negativas +qtyToTranferIsNotEnough=No tiene suficiente existencias en el almacen de referencia y la actual configuracion no permite existencias negativas qtyToTranferLotIsNotEnough=No tiene suficientes existencias para este número de lote en el almacén de origen, y la actual configuración no permite existencias negativas (cantidad del producto '%s' con el lote '%s' es de %s en el almacén '%s'). ShowWarehouse=Mostrar almacén MovementCorrectStock=Correción de sotck del producto %s @@ -282,7 +282,7 @@ ModuleStockTransferName=Transferencia avanzada de Stock ModuleStockTransferDesc=Gestión avanzada de Transferencia de Stock, con generación de ficha de transferencia StockTransferNew=Nueva transferencia de stock StockTransferList=Lista de transferencias de stock -ConfirmValidateStockTransfer=¿Está seguro de que desea validar esta transferencia de acciones con la referencia %s ? +ConfirmValidateStockTransfer=Are you sure you want to validate this stocks transfer with the reference %s ? ConfirmDestock=Disminución de existencias con transferencia %s ConfirmDestockCancel=Cancelar disminución de existencias con transferencia %s DestockAllProduct=Disminución de existencias diff --git a/htdocs/langs/es_ES/withdrawals.lang b/htdocs/langs/es_ES/withdrawals.lang index 7454b00acd0..a68b2d4ac25 100644 --- a/htdocs/langs/es_ES/withdrawals.lang +++ b/htdocs/langs/es_ES/withdrawals.lang @@ -12,7 +12,7 @@ WithdrawalsReceipts=Domiciliaciones WithdrawalReceipt=Domiciliación BankTransferReceipts=Órdenes de transferencia bancaria BankTransferReceipt=Orden de transferencia bancaria -LatestBankTransferReceipts=Últimas %s órdenes de transferencia bancaria +LatestBankTransferReceipts=Últimas %s órdenes de transferencia bancaria LastWithdrawalReceipts=Últimas %s domiciliaciones WithdrawalsLine=Línea de domiciliación bancaria CreditTransfer=Transferencia bancaria @@ -48,8 +48,8 @@ WithdrawRequestsDone=%s domiciliaciones registradas BankTransferRequestsDone=%s solicitudes de transferencia de crédito registradas ThirdPartyBankCode=Código banco del tercero NoInvoiceCouldBeWithdrawed=No invoice processed successfully. Check that invoices are on companies with a valid IBAN and that IBAN has a UMR (Unique Mandate Reference) with mode %s. -NoInvoiceCouldBeWithdrawedSupplier=No invoice processed successfully. Check that invoices are on companies with a valid IBAN. -NoSalariesCouldBeWithdrawed=No salary processed successfully. Check that salary are on users with a valid IBAN. +NoInvoiceCouldBeWithdrawedSupplier=Ninguna factura se procesó correctamente. Comprueba que las facturas sean de empresas con IBAN válido. +NoSalariesCouldBeWithdrawed=Ningún salario se procesó exitosamente. Verifique que el salario corresponda a usuarios con un IBAN válido. WithdrawalCantBeCreditedTwice=Este recibo de retiro ya está marcado como acreditado; esto no se puede hacer dos veces, ya que esto podría generar pagos y entradas bancarias duplicados. ClassCredited=Clasificar como "Abonada" ClassDebited=Clasificar debitado @@ -66,9 +66,9 @@ WithdrawalRefusedConfirm=¿Está seguro de querer crear una devolución de domic RefusedData=Fecha de devolución RefusedReason=Motivo de devolución RefusedInvoicing=Facturación de la devolución -NoInvoiceRefused=Do not charge the customer for the refusal -InvoiceRefused=Charge the customer for the refusal -DirectDebitRefusedInvoicingDesc=Set a flag to say this refusal must be charged to the customer +NoInvoiceRefused=No cobrar al cliente por la negativa +InvoiceRefused=Cobrar al cliente por el rechazo +DirectDebitRefusedInvoicingDesc=Establecer una bandera para decir que este rechazo debe ser cobrado al cliente StatusDebitCredit=Estado de débito/crédito StatusWaiting=En espera StatusTrans=Enviada @@ -118,7 +118,7 @@ RUM=RUM DateRUM=Fecha de firma del mandato RUMLong=Referencia Única de Mandato RUMWillBeGenerated=Si está vacío,se generará un número RUM (Referencia Unica de Mandato) una vez que se guarde la información de la cuenta bancaria -WithdrawMode=Direct debit mode (FRST or RCUR) +WithdrawMode=Modalidad de domiciliación bancaria (FRST o RCUR) WithdrawRequestAmount=Importe de la domiciliación BankTransferAmount=Importe de transferencia bancaria: WithdrawRequestErrorNilAmount=No es posible crear una domiciliación sin importe @@ -159,16 +159,15 @@ InfoTransData=Importe: %s
Método: %s
Fecha: %s InfoRejectSubject=Domiciliación devuelta InfoRejectMessage=Buenos días:

la domiciliación de la factura %s por cuenta de la empresa %s, con un importe de %s ha sido devuelta por el banco.

--
%s ModeWarning=No se ha establecido la opción de modo real, nos detendremos después de esta simulación -ErrorCompanyHasDuplicateDefaultBAN=Company with id %s has more than one default bank account. No way to know which one to use. +ErrorCompanyHasDuplicateDefaultBAN=La empresa con ID %s tiene más de una cuenta bancaria predeterminada. No hay forma de saber cuál usar. ErrorICSmissing=Falta ICS en la cuenta bancaria %s TotalAmountOfdirectDebitOrderDiffersFromSumOfLines=El monto total de la orden de domiciliación bancaria difiere de la suma de líneas WarningSomeDirectDebitOrdersAlreadyExists=Advertencia: ya hay algunas órdenes de domiciliación bancaria pendientes (%s) solicitadas por un monto de %s WarningSomeCreditTransferAlreadyExists=Advertencia: ya hay una transferencia de crédito pendiente (%s) solicitada por un monto de %s UsedFor=Usado para %s -Societe_ribSigned=SEPA mandate Signed -NbOfInvoiceToPayByBankTransferForSalaries=No. of qualified salaries waiting for a payment by credit transfer -SalaryWaitingWithdraw=Salaries waiting for payment by credit transfer +Societe_ribSigned=Mandato SEPA Firmado +NbOfInvoiceToPayByBankTransferForSalaries=No. de salarios calificados en espera de pago mediante transferencia de crédito +SalaryWaitingWithdraw=Salarios pendientes de pago mediante transferencia bancaria RefSalary=Salario -NoSalaryInvoiceToWithdraw=No salary waiting for a '%s'. Go on tab '%s' on salary card to make a request. -SalaryInvoiceWaitingWithdraw=Salaries waiting for payment by credit transfer - +NoSalaryInvoiceToWithdraw=Sin salario esperando un '%s'. Vaya a la pestaña '%s' en la tarjeta de salario para realizar una solicitud. +SalaryInvoiceWaitingWithdraw=Salarios pendientes de pago mediante transferencia bancaria diff --git a/htdocs/langs/es_GT/errors.lang b/htdocs/langs/es_GT/errors.lang deleted file mode 100644 index c07bad2b19c..00000000000 --- a/htdocs/langs/es_GT/errors.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - errors -ErrorRefAlreadyExists=Reference %s used for creation already exists. diff --git a/htdocs/langs/es_GT/holiday.lang b/htdocs/langs/es_GT/holiday.lang deleted file mode 100644 index 254b07b0308..00000000000 --- a/htdocs/langs/es_GT/holiday.lang +++ /dev/null @@ -1,4 +0,0 @@ -# Dolibarr language file - Source file is en_US - holiday -MenuCollectiveAddCP=New collective leave -NewHolidayForGroup=New collective leave -SendRequestCollectiveCP=Create collective leave diff --git a/htdocs/langs/es_GT/languages.lang b/htdocs/langs/es_GT/languages.lang deleted file mode 100644 index 879813b70ad..00000000000 --- a/htdocs/langs/es_GT/languages.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - languages -Language_en_AE=English (United Arab Emirates) diff --git a/htdocs/langs/es_GT/orders.lang b/htdocs/langs/es_GT/orders.lang deleted file mode 100644 index a1e7f34c64b..00000000000 --- a/htdocs/langs/es_GT/orders.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - orders -SupplierOrderSubmitedInDolibarr=Purchase Order %s submitted (%s) diff --git a/htdocs/langs/es_GT/partnership.lang b/htdocs/langs/es_GT/partnership.lang deleted file mode 100644 index 6a2455e0302..00000000000 --- a/htdocs/langs/es_GT/partnership.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - partnership -ReasonDeclineOrCancel=Reason for refusal or cancellation diff --git a/htdocs/langs/es_HN/errors.lang b/htdocs/langs/es_HN/errors.lang deleted file mode 100644 index c07bad2b19c..00000000000 --- a/htdocs/langs/es_HN/errors.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - errors -ErrorRefAlreadyExists=Reference %s used for creation already exists. diff --git a/htdocs/langs/es_HN/holiday.lang b/htdocs/langs/es_HN/holiday.lang deleted file mode 100644 index 254b07b0308..00000000000 --- a/htdocs/langs/es_HN/holiday.lang +++ /dev/null @@ -1,4 +0,0 @@ -# Dolibarr language file - Source file is en_US - holiday -MenuCollectiveAddCP=New collective leave -NewHolidayForGroup=New collective leave -SendRequestCollectiveCP=Create collective leave diff --git a/htdocs/langs/es_HN/languages.lang b/htdocs/langs/es_HN/languages.lang deleted file mode 100644 index 879813b70ad..00000000000 --- a/htdocs/langs/es_HN/languages.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - languages -Language_en_AE=English (United Arab Emirates) diff --git a/htdocs/langs/es_HN/orders.lang b/htdocs/langs/es_HN/orders.lang deleted file mode 100644 index a1e7f34c64b..00000000000 --- a/htdocs/langs/es_HN/orders.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - orders -SupplierOrderSubmitedInDolibarr=Purchase Order %s submitted (%s) diff --git a/htdocs/langs/es_HN/partnership.lang b/htdocs/langs/es_HN/partnership.lang deleted file mode 100644 index 6a2455e0302..00000000000 --- a/htdocs/langs/es_HN/partnership.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - partnership -ReasonDeclineOrCancel=Reason for refusal or cancellation diff --git a/htdocs/langs/es_MX/admin.lang b/htdocs/langs/es_MX/admin.lang index bfd4ad3b0c5..4070032eedc 100644 --- a/htdocs/langs/es_MX/admin.lang +++ b/htdocs/langs/es_MX/admin.lang @@ -190,7 +190,6 @@ Emails=Correos electrónicos EMailsSetup=Configuración de correos electrónicos MAIN_MAIL_SMTP_PORT=Puerto SMTP / SMTPS (valor predeterminado en php.ini: %s ) MAIN_MAIL_SMTP_SERVER=Host SMTP / SMTPS (valor predeterminado en php.ini: %s ) -MAIN_MAIL_SENDMODE=Sending method MAIN_MAIL_SMTPS_ID=ID de SMTP (si el servidor de envío requiere autenticación) MAIN_MAIL_SMTPS_PW=Contraseña SMTP (si el servidor de envío requiere autenticación) MAIN_MAIL_EMAIL_TLS=Usar cifrado TLS (SSL) @@ -243,7 +242,6 @@ Module56Name=Pago por transferencia de crédito Module610Name=Variantes de producto Module3400Name=Redes Sociales Module10000Name=Páginas web -Module10000Desc=CMS to create websites with a WYSIWYG editor. This is a webmaster or developer oriented Content Management System (it is better to know HTML and CSS language). Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the internet with your own domain name. DictionaryAccountancyJournal=Diarios de contabilidad DictionarySocialNetworks=Redes Sociales Upgrade=Actualizar diff --git a/htdocs/langs/es_MX/languages.lang b/htdocs/langs/es_MX/languages.lang deleted file mode 100644 index 879813b70ad..00000000000 --- a/htdocs/langs/es_MX/languages.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - languages -Language_en_AE=English (United Arab Emirates) diff --git a/htdocs/langs/es_MX/main.lang b/htdocs/langs/es_MX/main.lang index 041bd334cc1..0685533d69d 100644 --- a/htdocs/langs/es_MX/main.lang +++ b/htdocs/langs/es_MX/main.lang @@ -200,6 +200,7 @@ DateFormatYYYYMM=MM-YYYY DateFormatYYYYMMDD=DD-MM-YYYY DateFormatYYYYMMDDHHMM=DD-MM-YYYY HH:SS ReportPeriod=Período del informe +Reports=Reportes Fill=Llenar Reset=Reiniciar NotAllowed=No permitido diff --git a/htdocs/langs/es_PA/errors.lang b/htdocs/langs/es_PA/errors.lang deleted file mode 100644 index c07bad2b19c..00000000000 --- a/htdocs/langs/es_PA/errors.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - errors -ErrorRefAlreadyExists=Reference %s used for creation already exists. diff --git a/htdocs/langs/es_PA/holiday.lang b/htdocs/langs/es_PA/holiday.lang deleted file mode 100644 index 254b07b0308..00000000000 --- a/htdocs/langs/es_PA/holiday.lang +++ /dev/null @@ -1,4 +0,0 @@ -# Dolibarr language file - Source file is en_US - holiday -MenuCollectiveAddCP=New collective leave -NewHolidayForGroup=New collective leave -SendRequestCollectiveCP=Create collective leave diff --git a/htdocs/langs/es_PA/languages.lang b/htdocs/langs/es_PA/languages.lang deleted file mode 100644 index 879813b70ad..00000000000 --- a/htdocs/langs/es_PA/languages.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - languages -Language_en_AE=English (United Arab Emirates) diff --git a/htdocs/langs/es_PA/orders.lang b/htdocs/langs/es_PA/orders.lang deleted file mode 100644 index a1e7f34c64b..00000000000 --- a/htdocs/langs/es_PA/orders.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - orders -SupplierOrderSubmitedInDolibarr=Purchase Order %s submitted (%s) diff --git a/htdocs/langs/es_PA/partnership.lang b/htdocs/langs/es_PA/partnership.lang deleted file mode 100644 index 6a2455e0302..00000000000 --- a/htdocs/langs/es_PA/partnership.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - partnership -ReasonDeclineOrCancel=Reason for refusal or cancellation diff --git a/htdocs/langs/es_PE/admin.lang b/htdocs/langs/es_PE/admin.lang index 22611e873a3..ddb2a6af38d 100644 --- a/htdocs/langs/es_PE/admin.lang +++ b/htdocs/langs/es_PE/admin.lang @@ -1,9 +1,7 @@ # Dolibarr language file - Source file is en_US - admin VersionProgram=Versión del programa VersionLastInstall=Instalar versión inicial -MAIN_MAIL_SENDMODE=Sending method Module30Name=Facturas -Module10000Desc=CMS to create websites with a WYSIWYG editor. This is a webmaster or developer oriented Content Management System (it is better to know HTML and CSS language). Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the internet with your own domain name. Permission91=Consultar impuestos e IGV Permission92=Crear/modificar impuestos e IGV Permission93=Eliminar impuestos e IGV diff --git a/htdocs/langs/es_PE/errors.lang b/htdocs/langs/es_PE/errors.lang deleted file mode 100644 index c07bad2b19c..00000000000 --- a/htdocs/langs/es_PE/errors.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - errors -ErrorRefAlreadyExists=Reference %s used for creation already exists. diff --git a/htdocs/langs/es_PE/languages.lang b/htdocs/langs/es_PE/languages.lang deleted file mode 100644 index 879813b70ad..00000000000 --- a/htdocs/langs/es_PE/languages.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - languages -Language_en_AE=English (United Arab Emirates) diff --git a/htdocs/langs/es_PE/main.lang b/htdocs/langs/es_PE/main.lang index cfd78785a51..f315390cf28 100644 --- a/htdocs/langs/es_PE/main.lang +++ b/htdocs/langs/es_PE/main.lang @@ -66,6 +66,7 @@ VATRate=Tasa Impuesto VATCode=Código de la Tasa del Impuesto List=Lista Opened=Abrir +Reports=Reportes MenuAccountancy=Contabilizando SearchIntoMO=Órdenes de Fabricación SearchIntoCustomerInvoices=Facturas de Clientes diff --git a/htdocs/langs/es_PE/orders.lang b/htdocs/langs/es_PE/orders.lang deleted file mode 100644 index a1e7f34c64b..00000000000 --- a/htdocs/langs/es_PE/orders.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - orders -SupplierOrderSubmitedInDolibarr=Purchase Order %s submitted (%s) diff --git a/htdocs/langs/es_PE/partnership.lang b/htdocs/langs/es_PE/partnership.lang deleted file mode 100644 index 6a2455e0302..00000000000 --- a/htdocs/langs/es_PE/partnership.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - partnership -ReasonDeclineOrCancel=Reason for refusal or cancellation diff --git a/htdocs/langs/es_PY/errors.lang b/htdocs/langs/es_PY/errors.lang deleted file mode 100644 index c07bad2b19c..00000000000 --- a/htdocs/langs/es_PY/errors.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - errors -ErrorRefAlreadyExists=Reference %s used for creation already exists. diff --git a/htdocs/langs/es_PY/holiday.lang b/htdocs/langs/es_PY/holiday.lang deleted file mode 100644 index 254b07b0308..00000000000 --- a/htdocs/langs/es_PY/holiday.lang +++ /dev/null @@ -1,4 +0,0 @@ -# Dolibarr language file - Source file is en_US - holiday -MenuCollectiveAddCP=New collective leave -NewHolidayForGroup=New collective leave -SendRequestCollectiveCP=Create collective leave diff --git a/htdocs/langs/es_PY/languages.lang b/htdocs/langs/es_PY/languages.lang deleted file mode 100644 index 879813b70ad..00000000000 --- a/htdocs/langs/es_PY/languages.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - languages -Language_en_AE=English (United Arab Emirates) diff --git a/htdocs/langs/es_PY/orders.lang b/htdocs/langs/es_PY/orders.lang deleted file mode 100644 index a1e7f34c64b..00000000000 --- a/htdocs/langs/es_PY/orders.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - orders -SupplierOrderSubmitedInDolibarr=Purchase Order %s submitted (%s) diff --git a/htdocs/langs/es_PY/partnership.lang b/htdocs/langs/es_PY/partnership.lang deleted file mode 100644 index 6a2455e0302..00000000000 --- a/htdocs/langs/es_PY/partnership.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - partnership -ReasonDeclineOrCancel=Reason for refusal or cancellation diff --git a/htdocs/langs/es_US/errors.lang b/htdocs/langs/es_US/errors.lang deleted file mode 100644 index c07bad2b19c..00000000000 --- a/htdocs/langs/es_US/errors.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - errors -ErrorRefAlreadyExists=Reference %s used for creation already exists. diff --git a/htdocs/langs/es_US/holiday.lang b/htdocs/langs/es_US/holiday.lang deleted file mode 100644 index 254b07b0308..00000000000 --- a/htdocs/langs/es_US/holiday.lang +++ /dev/null @@ -1,4 +0,0 @@ -# Dolibarr language file - Source file is en_US - holiday -MenuCollectiveAddCP=New collective leave -NewHolidayForGroup=New collective leave -SendRequestCollectiveCP=Create collective leave diff --git a/htdocs/langs/es_US/languages.lang b/htdocs/langs/es_US/languages.lang deleted file mode 100644 index 879813b70ad..00000000000 --- a/htdocs/langs/es_US/languages.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - languages -Language_en_AE=English (United Arab Emirates) diff --git a/htdocs/langs/es_US/orders.lang b/htdocs/langs/es_US/orders.lang deleted file mode 100644 index a1e7f34c64b..00000000000 --- a/htdocs/langs/es_US/orders.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - orders -SupplierOrderSubmitedInDolibarr=Purchase Order %s submitted (%s) diff --git a/htdocs/langs/es_US/partnership.lang b/htdocs/langs/es_US/partnership.lang deleted file mode 100644 index 6a2455e0302..00000000000 --- a/htdocs/langs/es_US/partnership.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - partnership -ReasonDeclineOrCancel=Reason for refusal or cancellation diff --git a/htdocs/langs/es_UY/errors.lang b/htdocs/langs/es_UY/errors.lang deleted file mode 100644 index c07bad2b19c..00000000000 --- a/htdocs/langs/es_UY/errors.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - errors -ErrorRefAlreadyExists=Reference %s used for creation already exists. diff --git a/htdocs/langs/es_UY/holiday.lang b/htdocs/langs/es_UY/holiday.lang deleted file mode 100644 index 254b07b0308..00000000000 --- a/htdocs/langs/es_UY/holiday.lang +++ /dev/null @@ -1,4 +0,0 @@ -# Dolibarr language file - Source file is en_US - holiday -MenuCollectiveAddCP=New collective leave -NewHolidayForGroup=New collective leave -SendRequestCollectiveCP=Create collective leave diff --git a/htdocs/langs/es_UY/languages.lang b/htdocs/langs/es_UY/languages.lang deleted file mode 100644 index 879813b70ad..00000000000 --- a/htdocs/langs/es_UY/languages.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - languages -Language_en_AE=English (United Arab Emirates) diff --git a/htdocs/langs/es_UY/orders.lang b/htdocs/langs/es_UY/orders.lang deleted file mode 100644 index a1e7f34c64b..00000000000 --- a/htdocs/langs/es_UY/orders.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - orders -SupplierOrderSubmitedInDolibarr=Purchase Order %s submitted (%s) diff --git a/htdocs/langs/es_UY/partnership.lang b/htdocs/langs/es_UY/partnership.lang deleted file mode 100644 index 6a2455e0302..00000000000 --- a/htdocs/langs/es_UY/partnership.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - partnership -ReasonDeclineOrCancel=Reason for refusal or cancellation diff --git a/htdocs/langs/es_VE/admin.lang b/htdocs/langs/es_VE/admin.lang index ffb5c894f4c..f3aeaf2ce7c 100644 --- a/htdocs/langs/es_VE/admin.lang +++ b/htdocs/langs/es_VE/admin.lang @@ -4,10 +4,8 @@ VersionLastUpgrade=Última actualización de la versión ConfirmPurgeSessions=¿De verdad quieres purgar todas las sesiones? Esto desconectará a todos los usuarios (excepto a usted). SetupArea=Parametrizaje NotConfigured=Módulo / Aplicación no configurada -MAIN_MAIL_SENDMODE=Sending method GenericMaskCodes3=Cualquier otro carácter en la máscara se quedará sin cambios.
No se permiten espacios
Module1780Desc=Crear etiquetas/Categoría (Productos, clientes, proveedores, contactos y miembros) -Module10000Desc=CMS to create websites with a WYSIWYG editor. This is a webmaster or developer oriented Content Management System (it is better to know HTML and CSS language). Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the internet with your own domain name. Permission254=Modificar la contraseña de otros usuarios Permission255=Eliminar o desactivar otros usuarios Permission256=Consultar sus permisos diff --git a/htdocs/langs/es_VE/holiday.lang b/htdocs/langs/es_VE/holiday.lang deleted file mode 100644 index 254b07b0308..00000000000 --- a/htdocs/langs/es_VE/holiday.lang +++ /dev/null @@ -1,4 +0,0 @@ -# Dolibarr language file - Source file is en_US - holiday -MenuCollectiveAddCP=New collective leave -NewHolidayForGroup=New collective leave -SendRequestCollectiveCP=Create collective leave diff --git a/htdocs/langs/es_VE/languages.lang b/htdocs/langs/es_VE/languages.lang deleted file mode 100644 index 879813b70ad..00000000000 --- a/htdocs/langs/es_VE/languages.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - languages -Language_en_AE=English (United Arab Emirates) diff --git a/htdocs/langs/et_EE/accountancy.lang b/htdocs/langs/et_EE/accountancy.lang index 9c572a6a86a..df60557554c 100644 --- a/htdocs/langs/et_EE/accountancy.lang +++ b/htdocs/langs/et_EE/accountancy.lang @@ -16,8 +16,8 @@ ThisService=This service ThisProduct=This product DefaultForService=Default for services DefaultForProduct=Default for products -ProductForThisThirdparty=Product for this thirdparty -ServiceForThisThirdparty=Service for this thirdparty +ProductForThisThirdparty=Product for this third party +ServiceForThisThirdparty=Service for this third party CantSuggest=Can't suggest AccountancySetupDoneFromAccountancyMenu=Most setup of the accountancy is done from the menu %s ConfigAccountingExpert=Configuration of the module accounting (double entry) @@ -38,7 +38,7 @@ DeleteCptCategory=Remove accounting account from group ConfirmDeleteCptCategory=Are you sure you want to remove this accounting account from the accounting account group? JournalizationInLedgerStatus=Status of journalization AlreadyInGeneralLedger=Already transferred to accounting journals and ledger -NotYetInGeneralLedger=Not yet transferred to accouting journals and ledger +NotYetInGeneralLedger=Not yet transferred to accounting journals and ledger GroupIsEmptyCheckSetup=Group is empty, check setup of the personalized accounting group DetailByAccount=Show detail by account DetailBy=Detail by @@ -53,15 +53,13 @@ ExportAccountingSourceDocHelp=With this tool, you can search and export the sour ExportAccountingSourceDocHelp2=To export your journals, use the menu entry %s - %s. ExportAccountingProjectHelp=Specify a project if you need an accounting report only for a specific project. Expense reports and loan payments are not included in project reports. ExportAccountancy=Export accountancy -WarningDataDisappearsWhenDataIsExported=Warning, this list contains only the accounting entries that have not been already exported (Export date is empty). If you want to include the accounting entries already exported to re-export them, click on the button above. +WarningDataDisappearsWhenDataIsExported=Warning, this list contains only the accounting entries that have not been already exported (Export date is empty). If you want to include the accounting entries already exported, click on the button above. VueByAccountAccounting=View by accounting account VueBySubAccountAccounting=View by accounting subaccount MainAccountForCustomersNotDefined=Main account (from the Chart of Account) for customers not defined in setup MainAccountForSuppliersNotDefined=Main account (from the Chart of Account) for vendors not defined in setup MainAccountForUsersNotDefined=Main account (from the Chart of Account) for users not defined in setup -MainAccountForRevenueStampSaleNotDefined=Account (from the Chart of Account) for the revenue stamp (sales) not defined in setup -MainAccountForRevenueStampPurchaseNotDefined=Account (from the Chart of Account) for the revenue stamp (purchases) not defined in setup MainAccountForVatPaymentNotDefined=Account (from the Chart of Account) for VAT payment not defined in setup MainAccountForSubscriptionPaymentNotDefined=Account (from the Chart of Account) for membership payment not defined in setup MainAccountForRetainedWarrantyNotDefined=Account (from the Chart of Account) for the retained warranty not defined in setup @@ -70,13 +68,14 @@ UserAccountNotDefined=Accounting account for user not defined in setup AccountancyArea=Accounting area AccountancyAreaDescIntro=Usage of the accountancy module is done in several step: AccountancyAreaDescActionOnce=The following actions are usually executed one time only, or once per year... -AccountancyAreaDescActionOnceBis=Next steps should be done to save you time in future by suggesting you automaticaly the correct default accounting account when transferring data in accounting +AccountancyAreaDescActionOnceBis=Next steps should be done to save you time in future by suggesting you automatically the correct default accounting account when transferring data in accounting AccountancyAreaDescActionFreq=The following actions are usually executed every month, week or day for very large companies... AccountancyAreaDescJournalSetup=STEP %s: Check content of your journal list from menu %s AccountancyAreaDescChartModel=STEP %s: Check that a model of chart of account exists or create one from menu %s AccountancyAreaDescChart=STEP %s: Select and|or complete your chart of account from menu %s +AccountancyAreaDescFiscalPeriod=STEP %s: Define a fiscal year by default on which to integrate your accounting entries. For this, use the menu entry %s. AccountancyAreaDescVat=STEP %s: Define accounting accounts for each VAT Rates. For this, use the menu entry %s. AccountancyAreaDescDefault=STEP %s: Define default accounting accounts. For this, use the menu entry %s. AccountancyAreaDescExpenseReport=STEP %s: Define default accounting accounts for each type of Expense report. For this, use the menu entry %s. @@ -84,19 +83,20 @@ AccountancyAreaDescSal=STEP %s: Define default accounting accounts for payment o AccountancyAreaDescContrib=STEP %s: Define default accounting accounts for Taxes (special expenses). For this, use the menu entry %s. AccountancyAreaDescDonation=STEP %s: Define default accounting accounts for donation. For this, use the menu entry %s. AccountancyAreaDescSubscription=STEP %s: Define default accounting accounts for member subscription. For this, use the menu entry %s. -AccountancyAreaDescMisc=STEP %s: Define mandatory default account and default accounting accounts for miscellaneous transactions. For this, use the menu entry %s. +AccountancyAreaDescMisc=STEP %s: Define mandatory default accounts and default accounting accounts for miscellaneous transactions. For this, use the menu entry %s. AccountancyAreaDescLoan=STEP %s: Define default accounting accounts for loans. For this, use the menu entry %s. AccountancyAreaDescBank=STEP %s: Define accounting accounts and journal code for each bank and financial accounts. For this, use the menu entry %s. AccountancyAreaDescProd=STEP %s: Define accounting accounts on your Products/Services. For this, use the menu entry %s. AccountancyAreaDescBind=STEP %s: Check the binding between existing %s lines and accounting account is done, so application will be able to journalize transactions in Ledger in one click. Complete missing bindings. For this, use the menu entry %s. AccountancyAreaDescWriteRecords=STEP %s: Write transactions into the Ledger. For this, go into menu %s, and click into button %s. -AccountancyAreaDescAnalyze=STEP %s: Add or edit existing transactions and generate reports and exports. - -AccountancyAreaDescClosePeriod=STEP %s: Close period so we can't make modification in a future. +AccountancyAreaDescAnalyze=STEP %s: Read reportings or generate export files for other bookkeepers. +AccountancyAreaDescClosePeriod=STEP %s: Close period so we can't transfer anymore data in the same period in a future. +TheFiscalPeriodIsNotDefined=A mandatory step in setup has not been completed (Fiscal period is not defined) TheJournalCodeIsNotDefinedOnSomeBankAccount=A mandatory step in setup has not been completed (accounting code journal not defined for all bank accounts) Selectchartofaccounts=Select active chart of accounts +CurrentChartOfAccount=Current active chart of account ChangeAndLoad=Change and load Addanaccount=Add an accounting account AccountAccounting=Accounting account @@ -171,8 +171,8 @@ ACCOUNTING_MANAGE_ZERO=Allow to manage different number of zeros at the end of a BANK_DISABLE_DIRECT_INPUT=Disable direct recording of transaction in bank account ACCOUNTING_ENABLE_EXPORT_DRAFT_JOURNAL=Enable draft export on journal ACCOUNTANCY_COMBO_FOR_AUX=Enable combo list for subsidiary account (may be slow if you have a lot of third parties, break ability to search on a part of value) -ACCOUNTING_DATE_START_BINDING=Define a date to start binding & transfer in accountancy. Below this date, the transactions will not be transferred to accounting. -ACCOUNTING_DEFAULT_PERIOD_ON_TRANSFER=On accountancy transfer, what is the period selected by default +ACCOUNTING_DATE_START_BINDING=Disable binding & transfer in accountancy when date is below this date (the transactions before this date will be excluded by default) +ACCOUNTING_DEFAULT_PERIOD_ON_TRANSFER=On the page to transfer data into accountancy, what is the period selected by default ACCOUNTING_SELL_JOURNAL=Sales journal - sales and returns ACCOUNTING_PURCHASE_JOURNAL=Purchase journal - purchase and returns @@ -186,6 +186,8 @@ ACCOUNTING_SOCIAL_JOURNAL=Social journal ACCOUNTING_RESULT_PROFIT=Result accounting account (Profit) ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure +ACCOUNTING_CLOSURE_ACCOUNTING_GROUPS_USED_FOR_BALANCE_SHEET_ACCOUNT=Accounting groups used for the balance sheet account (separate by comma) +ACCOUNTING_CLOSURE_ACCOUNTING_GROUPS_USED_FOR_INCOME_STATEMENT=Accounting groups used for the income statement (separate by comma) ACCOUNTING_ACCOUNT_TRANSFER_CASH=Account (from the Chart Of Account) to be used as the account for transitional bank transfers TransitionalAccount=Transitional bank transfer account @@ -290,15 +292,15 @@ DescVentilDoneCustomer=Siit leiate loendit klientide arvete ridadest ja nende to DescVentilTodoCustomer=Bind invoice lines not already bound with a product account from chart of account ChangeAccount=Change the product/service account (from chart of account) for the selected lines with the following account: Vide=- -DescVentilSupplier=Consult here the list of vendor invoice lines bound or not yet bound to a product account from chart of account (only record not already transfered in accountancy are visible) +DescVentilSupplier=Consult here the list of vendor invoice lines bound or not yet bound to a product account from chart of account (only record not already transferred in accountancy are visible) DescVentilDoneSupplier=Consult here the list of the lines of vendor invoices and their accounting account DescVentilTodoExpenseReport=Bind expense report lines not already bound with a fee accounting account DescVentilExpenseReport=Consult here the list of expense report lines bound (or not) to a fee accounting account DescVentilExpenseReportMore=If you setup accounting account on type of expense report lines, the application will be able to make all the binding between your expense report lines and the accounting account of your chart of accounts, just in one click with the button "%s". If account was not set on fees dictionary or if you still have some lines not bound to any account, you will have to make a manual binding from the menu "%s". -DescVentilDoneExpenseReport=Consult here the list of the lines of expenses reports and their fees accounting account +DescVentilDoneExpenseReport=Vaadake siin kuluaruannete ridade loendit ja nende tasude raamatupidamiskontot. Closure=Annual closure -DescClosure=Consult here the number of movements by month not yet validated & locked +AccountancyClosureStep1Desc=Consult here the number of movements by month not yet validated & locked OverviewOfMovementsNotValidated=Overview of movements not validated and locked AllMovementsWereRecordedAsValidated=All movements were recorded as validated and locked NotAllMovementsCouldBeRecordedAsValidated=Not all movements could be recorded as validated and locked @@ -333,7 +335,6 @@ CategoryDeleted=Category for the accounting account has been removed AccountingJournals=Accounting journals AccountingJournal=Accounting journal NewAccountingJournal=New accounting journal -ShowAccountingJournal=Show accounting journal NatureOfJournal=Nature of Journal AccountingJournalType1=Miscellaneous operations AccountingJournalType2=Müügid @@ -341,7 +342,7 @@ AccountingJournalType3=Ostud AccountingJournalType4=Pank AccountingJournalType5=Kuluaruanded AccountingJournalType8=Laoseis -AccountingJournalType9=Has-new +AccountingJournalType9=Retained earnings GenerationOfAccountingEntries=Generation of accounting entries ErrorAccountingJournalIsAlreadyUse=This journal is already use AccountingAccountForSalesTaxAreDefinedInto=Note: Accounting account for Sales tax are defined into menu %s - %s @@ -352,12 +353,14 @@ ACCOUNTING_DISABLE_BINDING_ON_PURCHASES=Disable binding & transfer in accountanc ACCOUNTING_DISABLE_BINDING_ON_EXPENSEREPORTS=Disable binding & transfer in accountancy on expense reports (expense reports will not be taken into account in accounting) ACCOUNTING_ENABLE_LETTERING=Enable the lettering function in the accounting ACCOUNTING_ENABLE_LETTERING_DESC=When this options is enabled, you can define, on each accounting entry, a code so you can group different accounting movements together. In the past, when different journals was managed independently, this feature was necessary to group movement lines of different journals together. However, with Dolibarr accountancy, such a tracking code, called "%s" is already saved automatically, so an automatic lettering is already done, with no risk of error so this feature has become useless for a common usage. Manual lettering feature is provided for end users that really don't trust the computer engine making the transfer of data in accountancy. -EnablingThisFeatureIsNotNecessary=Enabling this feature is no more necessary for a rigourous accounting management. +EnablingThisFeatureIsNotNecessary=Enabling this feature is no more necessary for a rigorous accounting management. ACCOUNTING_ENABLE_AUTOLETTERING=Enable the automatic lettering when transferring to accounting -ACCOUNTING_ENABLE_AUTOLETTERING_DESC=Kirja kood genereeritakse automaatselt ja seda suurendatakse ning seda ei vali lõppkasutaja +ACCOUNTING_ENABLE_AUTOLETTERING_DESC=The code for the lettering is automatically generated and incremented and not chosen by the end user +ACCOUNTING_LETTERING_NBLETTERS=Number of letters when generating lettering code (default 3) +ACCOUNTING_LETTERING_NBLETTERS_DESC=Some accounting software only accepts a two-letter code. This parameter allows you to set this aspect. The default number of letters is three. OptionsAdvanced=Advanced options ACCOUNTING_FORCE_ENABLE_VAT_REVERSE_CHARGE=Activate the management of VAT reverse charge on supplier purchases -ACCOUNTING_FORCE_ENABLE_VAT_REVERSE_CHARGE_DESC=When this option is enabled, you can define that a supplier or a given vendor invoice must be transfered into accountancy differently: A additionnal debit and a credit line will generated into the accounting on 2 given accounts from the chart of account defined into the "%s" setup page. +ACCOUNTING_FORCE_ENABLE_VAT_REVERSE_CHARGE_DESC=When this option is enabled, you can define that a supplier or a given vendor invoice must be transferred into accountancy differently: A additional debit and a credit line will generated into the accounting on 2 given accounts from the chart of account defined into the "%s" setup page. ## Export NotExportLettering=Do not export the lettering when generating the file @@ -383,7 +386,7 @@ Modelcsv_LDCompta10=Export for LD Compta (v10 & higher) Modelcsv_openconcerto=Export for OpenConcerto (Test) Modelcsv_configurable=Export CSV Configurable Modelcsv_FEC=Export FEC -Modelcsv_FEC2=Export FEC (With dates generation writing / document reversed) +Modelcsv_FEC2=Ekspordi FEC (koos kuupäevade genereerimise kirjutamise / dokumendi pööramisega) Modelcsv_Sage50_Swiss=Export for Sage 50 Switzerland Modelcsv_winfic=Export for Winfic - eWinfic - WinSis Compta Modelcsv_Gestinumv3=Export for Gestinum (v3) @@ -420,7 +423,7 @@ SaleLocal=Local sale SaleExport=Export sale SaleEEC=Sale in EEC SaleEECWithVAT=Sale in EEC with a VAT not null, so we suppose this is NOT an intracommunautary sale and the suggested account is the standard product account. -SaleEECWithoutVATNumber=Sale in EEC with no VAT but the VAT ID of thirdparty is not defined. We fall back on the account for standard sales. You can fix the VAT ID of the thirdparty, or change the product account suggested for binding if needed. +SaleEECWithoutVATNumber=Sale in EEC with no VAT but the VAT ID of third party is not defined. We fall back on the account for standard sales. You can fix the VAT ID of the third party, or change the product account suggested for binding if needed. ForbiddenTransactionAlreadyExported=Forbidden: The transaction has been validated and/or exported. ForbiddenTransactionAlreadyValidated=Forbidden: The transaction has been validated. ## Dictionary @@ -441,16 +444,30 @@ AccountancyNoUnletteringModified=No unreconcile modified AccountancyOneUnletteringModifiedSuccessfully=One unreconcile successfully modified AccountancyUnletteringModifiedSuccessfully=%s unreconcile successfully modified +## Closure +AccountancyClosureStep1=Step 1 : Validate and lock the movements +AccountancyClosureStep2=Step 2 : Close the fiscal period +AccountancyClosureStep3=Step 3 : Extract entries (Optional) +AccountancyClosureClose=Close fiscal period +AccountancyClosureAccountingReversal=Extract and record "Retained earnings" entries +AccountancyClosureStep3NewFiscalPeriod=Next fiscal period +AccountancyClosureGenerateClosureBookkeepingRecords=Generate "Retained earnings" entries on the next fiscal period +AccountancyClosureSeparateAuxiliaryAccounts=When generating the "Retained earnings" entries, detail the sub-ledger accounts +AccountancyClosureCloseSuccessfully=Fiscal period has been closed successfully +AccountancyClosureInsertAccountingReversalSuccessfully=Bookkeeping entries for "Retained earnings" has been inserted successfully + ## Confirm box ConfirmMassUnletteringAuto=Bulk auto unreconcile confirmation ConfirmMassUnletteringManual=Bulk manual unreconcile confirmation ConfirmMassUnletteringQuestion=Are you sure you want to unreconcile the %s selected record(s)? ConfirmMassDeleteBookkeepingWriting=Hulgikustutamise kinnitus ConfirmMassDeleteBookkeepingWritingQuestion=This will delete the transaction from the accounting (all line entries related to the same transaction will be deleted). Are you sure you want to delete the %s selected entries? +AccountancyClosureConfirmClose=Are you sure you want to close the current fiscal period ? You understand that closing the fiscal period is an irreversible action and will permanently block any modification or deletion of entries over this period. +AccountancyClosureConfirmAccountingReversal=Are you sure you want to record entries for the "Retained earnings" ? ## Error SomeMandatoryStepsOfSetupWereNotDone=Some mandatory steps of setup was not done, please complete them -ErrorNoAccountingCategoryForThisCountry=No accounting account group available for country %s (See Home - Setup - Dictionaries) +ErrorNoAccountingCategoryForThisCountry=No accounting account group available for country %s (See %s - %s - %s) ErrorInvoiceContainsLinesNotYetBounded=You try to journalize some lines of the invoice %s, but some other lines are not yet bounded to accounting account. Journalization of all invoice lines for this invoice are refused. ErrorInvoiceContainsLinesNotYetBoundedShort=Some lines on invoice are not bound to accounting account. ExportNotSupported=The export format setuped is not supported into this page @@ -465,6 +482,9 @@ AccountancyErrorMismatchBalanceAmount=The balance (%s) is not equal to 0 AccountancyErrorLetteringBookkeeping=Errors have occurred concerning the transactions: %s ErrorAccountNumberAlreadyExists=The accounting number %s already exists ErrorArchiveAddFile=Can't put "%s" file in archive +ErrorNoFiscalPeriodActiveFound=No active fiscal period found +ErrorBookkeepingDocDateNotOnActiveFiscalPeriod=The bookkeeping doc date is not inside the active fiscal period +ErrorBookkeepingDocDateIsOnAClosedFiscalPeriod=The bookkeeping doc date is inside a closed fiscal period ## Import ImportAccountingEntries=Accounting entries diff --git a/htdocs/langs/et_EE/admin.lang b/htdocs/langs/et_EE/admin.lang index d594aa74eaf..7fd51258c94 100644 --- a/htdocs/langs/et_EE/admin.lang +++ b/htdocs/langs/et_EE/admin.lang @@ -95,7 +95,7 @@ ShowHideDetails=Show-Hide details PreviewNotAvailable=Eelvaade pole saadaval ThemeCurrentlyActive=Hetkel kasutatav teema MySQLTimeZone=MySQLi (andmebaasi) ajavöönd -TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered). +TZHasNoEffect=Kuupäevad salvestatakse andmebaasi serveris ja tagastatakse nii, nagu need oleksid esitatud stringina. Ajavööndil on mõju ainult siis, kui kasutatakse UNIX_TIMESTAMP funktsiooni (mida Dolibarr ei tohiks kasutada, seega andmebaasi ajavööndil ei tohiks olla mõju, isegi kui see muutub pärast andmete sisestamist). Space=Ruum Table=Tabel Fields=Väljad @@ -353,7 +353,7 @@ InfDirAlt=Since version 3, it is possible to define an alternative root director InfDirExample=
Then declare it in the file conf.php
$dolibarr_main_url_root_alt='/custom'
$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'
If these lines are commented with "#", to enable them, just uncomment by removing the "#" character. YouCanSubmitFile=You can upload the .zip file of module package from here: CurrentVersion=Praegune Dolibarr versioon -CallUpdatePage=Browse to the page that updates the database structure and data: %s. +CallUpdatePage=Sirvi lehele, mis uuendab andmebaasi struktuuri ja andmeid: %s. LastStableVersion=Viimane stabiilne versioon LastActivationDate=Viimane aktiveerimise kuupäev LastActivationAuthor=Viimane aktiveerimise autor @@ -531,7 +531,7 @@ ProductBatchDocumentTemplates=Document templates to generate product lots docume FreeLegalTextOnExpenseReports=Free legal text on expense reports WatermarkOnDraftExpenseReports=Watermark on draft expense reports ProjectIsRequiredOnExpenseReports=The project is mandatory for entering an expense report -PrefillExpenseReportDatesWithCurrentMonth=Pre-fill start and end dates of new expense report with start and end dates of the current month +PrefillExpenseReportDatesWithCurrentMonth=Täida uue kuluaruande algus- ja lõppkuupäevad käesoleva kuu algus- ja lõppkuupäevadega. ForceExpenseReportsLineAmountsIncludingTaxesOnly=Force the entry of expense report amounts always in amount with taxes AttachMainDocByDefault=Määrake selle väärtuseks Jah , kui soovite meilile vaikimisi manustada põhidokumendi (kui see on kohaldatav) FilesAttachedToEmail=Lisage fail @@ -618,7 +618,7 @@ Module320Desc=Add a RSS feed to Dolibarr pages Module330Name=Bookmarks & Shortcuts Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access Module400Name=Projects or Leads -Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view. +Module400Desc=Projektide, juhtumite ja/või ülesannete haldamine. Samuti saate määrata projekti vaatest mis tahes elemendi (arve, tellimus, ettepanek, sekkumine, ...) ja saada projekti vaatest üldine ülevaade. Module410Name=Webcalendar Module410Desc=WebCalendari integratsioon Module500Name=Maksud & kohustused @@ -742,8 +742,8 @@ Permission34=Toodete kustutamine Permission36=Peidetud toodete vaatamine/haldamine Permission38=Toodete eksport Permission39=Ignore minimum price -Permission41=Read projects and tasks (shared projects and projects of which I am a contact). -Permission42=Create/modify projects (shared projects and projects of which I am a contact). Can also assign users to projects and tasks +Permission41=Loe projekte ja ülesandeid (jagatud projekte ja projekte, millega olen seotud). +Permission42=Loo/muuda projekte (jagatud projekte ja projekte, millega olen kontaktis). Saab samuti määrata kasutajaid projektidele ja ülesannetele. Permission44=Delete projects (shared projects and projects of which I am a contact) Permission45=Export projects Permission61=Sekkumiste vaatamine @@ -791,10 +791,10 @@ Permission122=Kasutajaga seotud kolmandate isikute loomine/muutmine Permission125=Kasutajaga seotud kolmandate isikute kustutamine Permission126=Kolmandate isikute eksport Permission130=Create/modify third parties payment information -Permission141=Read all projects and tasks (as well as the private projects for which I am not a contact) -Permission142=Create/modify all projects and tasks (as well as the private projects for which I am not a contact) -Permission144=Delete all projects and tasks (as well as the private projects I am not a contact) -Permission145=Can enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet) +Permission141=Lugege kõiki projekte ja ülesandeid (samuti eraviisilisi projekte, millega ma pole seotud). +Permission142=Lugege kõiki projekte ja ülesandeid (samuti eraviisilisi projekte, millega ma pole seotud). +Permission144=Kustuta kõik projektid ja ülesanded (samuti eraviisilised projektid, millega ma pole seotud) +Permission145=Saate sisestada kulutatud aja minu või minu hierarhia jaoks määratud ülesannetele (tööaja aruanne) Permission146=Pakkujate vaatamine Permission147=Statistika vaatamine Permission151=Read direct debit payment orders @@ -976,13 +976,13 @@ Permission1322=Reopen a paid bill Permission1421=Export sales orders and attributes Permission1521=Read documents Permission1522=Delete documents -Permission2401=Read actions (events or tasks) linked to his user account (if owner of event or just assigned to) -Permission2402=Create/modify actions (events or tasks) linked to his user account (if owner of event) -Permission2403=Delete actions (events or tasks) linked to his user account (if owner of event) +Permission2401=Lugege tegevusi (sündmusi või ülesandeid), mis on seotud tema kasutajakontoga (kui ta on sündmuse omanik või sellele määratud). +Permission2402=Loo/muuda tegevusi (sündmusi või ülesandeid), mis on seotud tema kasutajakontoga (kui ta on sündmuse omanik) +Permission2403=Kustuta tegevused (sündmused või ülesanded), mis on seotud tema kasutajakontoga (kui ta on sündmuse omanik) Permission2411=Teiste kontodega seotud juhtumite (tegevuste või ülesannete) vaatamine Permission2412=Teiste kontodega seotud juhtumite (tegevuste või ülesannete) loomine/muutmine Permission2413=Teiste kontodega seotud juhtumite (tegevuste või ülesannete) kustutamine -Permission2414=Export actions/tasks of others +Permission2414=Teiste tegevuste/ülesannete eksportimine Permission2501=Dokumentide vaatamine/alla laadimine Permission2502=Dokumentide alla laadimine Permission2503=Dokumentide üles laadimine või kustutamine @@ -1197,6 +1197,7 @@ Skin=Kesta kujundus DefaultSkin=Vaikimisi kesta kujundus MaxSizeList=Nimekirja maksimaalne pikkus DefaultMaxSizeList=Default max length for lists +DisplayGrandTotalInList=Display grand total (for all pages) in lists footer DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card) MessageOfDay=Päeva sõnu MessageLogin=Sisselogimise lehe sõnu @@ -1230,7 +1231,7 @@ DelaysOfToleranceBeforeWarning=Displaying a warning alert for... DelaysOfToleranceDesc=Set the delay before an alert icon %s is shown onscreen for the late element. Delays_MAIN_DELAY_ACTIONS_TODO=Planned events (agenda events) not completed Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Projekt ei ole suletud tähtaegselt -Delays_MAIN_DELAY_TASKS_TODO=Planned task (project tasks) not completed +Delays_MAIN_DELAY_TASKS_TODO=Plaanitud ülesanne (projekti ülesanded) pole lõpule viidud Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Order not processed Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Purchase order not processed Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Pakkumine ei ole suletud @@ -1592,7 +1593,7 @@ LDAPTestSynchroMemberType=Test member type synchronization LDAPTestSearch= Testi LDAPi otsingut LDAPSynchroOK=Sünkroniseerimise testimine edukas LDAPSynchroKO=Sünkroniseerimise testimine ebaõnnestus -LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates +LDAPSynchroKOMayBePermissions=Sünkroonimise test ebaõnnestus. Kontrollige, et ühendus serveriga oleks õigesti konfigureeritud ja võimaldaks LDAP-i värskendusi. LDAPTCPConnectOK=TCP ühendust LDAPi serveriga õnnestus (server=%s, port=%s) LDAPTCPConnectKO=TCP ühendust LDAPi serveriga ebaõnnestus (server=%s, port=%s) LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s) @@ -1789,7 +1790,7 @@ FCKeditorForMail=WYSIWYG creation/edition for all mail (except Tools->eMailing) FCKeditorForTicket=WYSIWYG creation/edition for tickets ##### Stock ##### StockSetup=Stock module setup -IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup. +IfYouUsePointOfSaleCheckModule=Kui kasutate vaikimisi pakutavat müügikoha moodulit (POS) või välismoodulit, võib see seadistus teie POS-mooduli poolt ignoreerida. Enamik POS-mooduleid on vaikimisi kujundatud arve loomiseks kohe ja varude vähendamiseks sõltumata siinsetest valikutest. Seega, kui teil on vaja või mitte varude vähendamist müügi registreerimisel oma POS-ist, kontrollige ka oma POS-mooduli seadistust. ##### Menu ##### MenuDeleted=Menüü kustutatud Menu=Menu @@ -1879,7 +1880,7 @@ StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled StockDecreaseForPointOfSaleDisabledbyBatch=Stock decrease in POS is not compatible with module Serial/Lot management (currently active) so stock decrease is disabled. CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required. CashDeskForceDecreaseStockLabel=Stock decrease for batch products was forced. -CashDeskForceDecreaseStockDesc=Decrease first by the oldest eatby and sellby dates. +CashDeskForceDecreaseStockDesc=Vähendage esmalt vanimaid söömise ja müümise tähtaegu. CashDeskReaderKeyCodeForEnter=Key ASCII code for "Enter" defined in barcode reader (Example: 13) ##### Bookmark ##### BookmarkSetup=Järjehoidjate mooduli seadistamine @@ -2277,10 +2278,10 @@ RecommendedValueIs=Recommended: %s Recommended=Soovitatav NotRecommended=Not recommended ARestrictedPath=Some restricted path for data files -CheckForModuleUpdate=Check for external modules updates +CheckForModuleUpdate=Kontrolli kolmandate osapoolte moodulite värskendusi CheckForModuleUpdateHelp=This action will connect to editors of external modules to check if a new version is available. ModuleUpdateAvailable=An update is available -NoExternalModuleWithUpdate=No updates found for external modules +NoExternalModuleWithUpdate=Kolmandate osapoolte mooduleid ei leitud uuendamiseks. SwaggerDescriptionFile=Swagger API description file (for use with redoc for example) YouEnableDeprecatedWSAPIsUseRESTAPIsInstead=You enabled deprecated WS API. You should use REST API instead. RandomlySelectedIfSeveral=Randomly selected if several pictures are available @@ -2433,3 +2434,12 @@ UrlPublicInterfaceHelpAdmin=It is possible to define an alias to the web server ExportUseForce=Use the parameter -f ExportUseForceHelp=Force to continue the export even when an error is found (Backup may not be reliable) CustomPrompt=Custom prompts +AiDescription=AI (Artificial Intelligence) features +AiDescriptionLong=Provides AI (Artificial Intelligence) features in different part of the application. Need external AI API. +AI_KEY_API_CHATGPT= Key for ChatGPT IA api +AiSetup=AI module setup +AiCustomPrompt=AI customs prompt +AI_CONFIGURATIONS_PROMPT=Custom prompt +ImageGeneration=Image generation +AIPromptForFeatures=AI custom prompts for features +EnterAnIP=Enter an IP address diff --git a/htdocs/langs/et_EE/bills.lang b/htdocs/langs/et_EE/bills.lang index 3773973cf2a..a2f2492714c 100644 --- a/htdocs/langs/et_EE/bills.lang +++ b/htdocs/langs/et_EE/bills.lang @@ -5,14 +5,14 @@ BillsCustomers=Kliendi arved BillsCustomer=Müügiarve BillsSuppliers=Tarnija arved BillsCustomersUnpaid=Maksmata kliendiarved -BillsCustomersUnpaidForCompany=Tasumata kliendiarved %s +BillsCustomersUnpaidForCompany=Tasumata kliendiarved %s BillsSuppliersUnpaid=Tasumata tarnija arved -BillsSuppliersUnpaidForCompany=Tasumata tarnijate arved %s +BillsSuppliersUnpaidForCompany=Tasumata tarnijate arved %s BillsLate=Hilinenud maksed BillsStatistics=Müügiiarvete statistika BillsStatisticsSuppliers=Tarnijate arved statistika DisabledBecauseDispatchedInBookkeeping=Disabled because invoice was dispatched into bookkeeping -DisabledBecauseNotLastInvoice=Disabled because invoice is not erasable. Some invoices were recorded after this one and it will create holes in the counter. +DisabledBecauseNotLastInvoice=Keelatud, kuna arvet ei saa kustutada. Mõned arved on selle järel salvestatud ja see tekitab loenduris tühikuid. DisabledBecauseNotLastSituationInvoice=Disabled because invoice is not erasable. This invoice is not the last one in situation invoice cycle. DisabledBecauseNotErasable=Disabled because cannot be erased InvoiceStandard=Standardne arve @@ -33,8 +33,8 @@ InvoiceAvoir=Kreeditarve InvoiceAvoirAsk=Kreeditarve parandab arve InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). invoiceAvoirWithLines=Loo kreeditarve algse arve ridade põhjal -invoiceAvoirWithPaymentRestAmount=Create Credit Note with remaining unpaid of origin invoice -invoiceAvoirLineWithPaymentRestAmount=Credit Note for remaining unpaid amount +invoiceAvoirWithPaymentRestAmount=Loo kreeditarve koos veel tasumata summale +invoiceAvoirLineWithPaymentRestAmount=Krediidiarve maksmata summa eest ReplaceInvoice=Asendusarve arve %s ReplacementInvoice=Asendusarve ReplacedByInvoice=Asendatud arvega %s @@ -93,6 +93,9 @@ CodePaymentMode=Makseviis (kood) LabelPaymentMode=Makseviis (silt) PaymentModeShort=Makseviis PaymentTerm=Maksetähtaeg +IdPaymentTerm=Payment term (id) +CodePaymentTerm=Payment term (code) +LabelPaymentTerm=Payment term (label) PaymentConditions=Maksetähtajad PaymentConditionsShort=Maksetähtajad PaymentAmount=Makse summa @@ -100,14 +103,14 @@ PaymentHigherThanReminderToPay=Makse on suurem, kui makstava summa jääk HelpPaymentHigherThanReminderToPay=Attention, the payment amount of one or more bills is higher than the outstanding amount to pay.
Edit your entry, otherwise confirm and consider creating a credit note for the excess received for each overpaid invoice. HelpPaymentHigherThanReminderToPaySupplier=Attention, the payment amount of one or more bills is higher than the outstanding amount to pay.
Edit your entry, otherwise confirm and consider creating a credit note for the excess paid for each overpaid invoice. ClassifyPaid=Liigita 'Makstud' -ClassifyUnPaid=Classify 'Unpaid' +ClassifyUnPaid=Liiguta 'Maksmata' ClassifyPaidPartially=Liigita 'Osaliselt makstud' ClassifyCanceled=Liigita 'Hüljatud' ClassifyClosed=Liigita 'Suletud' ClassifyUnBilled=Liigita „tasumata” CreateBill=Loo arve CreateCreditNote=Koosta kreeditarve -AddBill=Create invoice or credit note +AddBill=Koostage arve või kreeditarve AddToDraftInvoices=Lisa arve mustandile DeleteBill=Kustuta arve SearchACustomerInvoice=Otsi müügiarvet @@ -124,7 +127,7 @@ EnterPaymentDueToCustomer=Soorita kliendile makse DisabledBecauseRemainderToPayIsZero=Keelatud, sest järele jäänud maksmata on null PriceBase=Base price BillStatus=Arve staatus -StatusOfGeneratedInvoices=Status of generated invoices +StatusOfAutoGeneratedInvoices=Status of automatically generated invoices BillStatusDraft=Mustand (kinnitada) BillStatusPaid=Makstud BillStatusPaidBackOrConverted=Credit note refund or marked as credit available @@ -151,7 +154,7 @@ BillShortStatusClosedPaidPartially=Makstud (osaliselt) PaymentStatusToValidShort=Kinnitada ErrorVATIntraNotConfigured=Intra-Community VAT number not yet defined ErrorNoPaiementModeConfigured=No default payment type defined. Go to Invoice module setup to fix this. -ErrorCreateBankAccount=Create a bank account, then go to Setup panel of Invoice module to define payment types +ErrorCreateBankAccount=Loo pangakonto, seejärel mine arve mooduli seadistuspaneelile, et määratleda maksetüübid ErrorBillNotFound=Arvet %s ei ole ErrorInvoiceAlreadyReplaced=Error, you tried to validate an invoice to replace invoice %s. But this one has already been replaced by invoice %s. ErrorDiscountAlreadyUsed=Viga: allahindlust on juba kasutatud @@ -167,7 +170,7 @@ ActionsOnBill=Tegevused arvel ActionsOnBillRec=Actions on recurring invoice RecurringInvoiceTemplate=Mall / Korduv arve NoQualifiedRecurringInvoiceTemplateFound=Korduvat mallarvet pole genereerimiseks kvalifitseeritud. -FoundXQualifiedRecurringInvoiceTemplate=Found %s recurring template invoice(s) qualified for generation. +FoundXQualifiedRecurringInvoiceTemplate=%s recurring template invoice(s) qualified for generation. NotARecurringInvoiceTemplate=Not a recurring template invoice NewBill=Uus arve LastBills=Viimased %s arvet @@ -185,7 +188,7 @@ SuppliersDraftInvoices=Tarnijate mustand arved Unpaid=Maksmata ErrorNoPaymentDefined=Error No payment defined ConfirmDeleteBill=Are you sure you want to delete this invoice? -ConfirmValidateBill=Are you sure you want to validate this invoice with reference %s? +ConfirmValidateBill=Are you sure you want to validate this invoice with the reference %s? ConfirmUnvalidateBill=Are you sure you want to change invoice %s to draft status? ConfirmClassifyPaidBill=Are you sure you want to change invoice %s to status paid? ConfirmCancelBill=Are you sure you want to cancel invoice %s? @@ -217,9 +220,9 @@ ConfirmCustomerPayment=Kas kinnitate selle makse summas %s %s? ConfirmSupplierPayment=Kas kinnitate selle makse summas %s %s? ConfirmValidatePayment=Are you sure you want to validate this payment? No change can be made once payment is validated. ValidateBill=Kinnita arve -UnvalidateBill=Muuda arve lahtiseks +UnvalidateBill=Invalidate invoice NumberOfBills=No. of invoices -NumberOfBillsByMonth=No. of invoices per month +NumberOfBillsByMonth=Arvete arv kuus AmountOfBills=Arvete summa AmountOfBillsHT=Amount of invoices (net of tax) AmountOfBillsByMonthHT=Arvete summa kuus (maksudeta) @@ -250,12 +253,13 @@ RemainderToTake=Jäänud laekuda RemainderToTakeMulticurrency=Remaining amount to take, original currency RemainderToPayBack=Jäänud tagastada RemainderToPayBackMulticurrency=Jäänud tagastada, originaal valuutas +NegativeIfExcessReceived=negative if excess received NegativeIfExcessRefunded=negative if excess refunded +NegativeIfExcessPaid=negative if excess paid Rest=Ootel AmountExpected=Väidetav väärtus ExcessReceived=Liigne saadud ExcessReceivedMulticurrency=Excess received, original currency -NegativeIfExcessReceived=negative if excess received ExcessPaid=Excess paid ExcessPaidMulticurrency=Excess paid, original currency EscompteOffered=Soodustus pakutud (makse enne tähtaega) @@ -267,6 +271,8 @@ NoDraftBills=Arvete mustandeid ei ole NoOtherDraftBills=Muid arvete mustandeid ei ole NoDraftInvoices=Arvete mustandeid ei ole RefBill=Arve viide +RefSupplierBill=Supplier invoice ref +SupplierOrderCreateBill=Loo arve ToBill=Arve esitada RemainderToBill=Ülejääk, mille eest arve esitada SendBillByMail=Saada arve e-posti teel @@ -351,6 +357,7 @@ HelpAbandonOther=This amount has been abandoned since it was an error (wrong cus IdSocialContribution=Social/fiscal tax payment id PaymentId=Makse ID PaymentRef=Payment ref. +SourceInvoiceId=Source invoice id InvoiceId=Arve ID InvoiceRef=Arve viide InvoiceDateCreation=Arve loomise kuupäev @@ -549,7 +556,7 @@ ClosePaidCreditNotesAutomatically=Classify automatically all credit notes as "Pa ClosePaidContributionsAutomatically=Classify automatically all social or fiscal contributions as "Paid" when payment is done entirely. ClosePaidVATAutomatically=Classify automatically VAT declaration as "Paid" when payment is done entirely. ClosePaidSalaryAutomatically=Classify automatically salary as "Paid" when payment is done entirely. -AllCompletelyPayedInvoiceWillBeClosed=All invoices with no remainder to pay will be automatically closed with status "Paid". +AllCompletelyPayedInvoiceWillBeClosed=Kõik valitud arved (isegi, kui on jäänud mingi osa veel maksta) suletakse ja märgitakse statusesse "Makstud". ToMakePayment=Maksa ToMakePaymentBack=Maksa tagasi ListOfYourUnpaidInvoices=Maksmata arvete nimekiri @@ -557,14 +564,14 @@ NoteListOfYourUnpaidInvoices=Märkus: see nimekiri sisaldab vaid nende kolmandat RevenueStamp=Tax stamp YouMustCreateInvoiceFromThird=This option is only available when creating an invoice from tab "Customer" of third party YouMustCreateInvoiceFromSupplierThird=This option is only available when creating an invoice from tab "Vendor" of third party -YouMustCreateStandardInvoiceFirstDesc=You have to create a standard invoice first and convert it to "template" to create a new template invoice +YouMustCreateStandardInvoiceFirstDesc=Peate esmalt looma standardse arve ja teisendama selle "malliks", et luua uus malliarve. PDFCrabeDescription=Invoice PDF template Crabe. A complete invoice template (old implementation of Sponge template) PDFSpongeDescription=Invoice PDF template Sponge. A complete invoice template PDFCrevetteDescription=Invoice PDF template Crevette. A complete invoice template for situation invoices -TerreNumRefModelDesc1=Return number in the format %syymm-nnnn for standard invoices and %syymm-nnnn for credit notes where yy is year, mm is month and nnnn is a sequencial auto-incrementing number with no break and no return to 0 -MarsNumRefModelDesc1=Return number in the format %syymm-nnnn for standard invoices, %syymm-nnnn for replacement invoices, %syymm-nnnn for down payment invoices and %syymm-nnnn for credit notes where yy is year, mm is month and nnnn is a sequencial auto-incrementing number with no break and no return to 0 +TerreNumRefModelDesc1=Return number in the format %syymm-nnnn for standard invoices and %syymm-nnnn for credit notes where yy is year, mm is month and nnnn is a sequential auto-incrementing number with no break and no return to 0 +MarsNumRefModelDesc1=Return number in the format %syymm-nnnn for standard invoices, %syymm-nnnn for replacement invoices, %syymm-nnnn for down payment invoices and %syymm-nnnn for credit notes where yy is year, mm is month and nnnn is a sequential auto-incrementing number with no break and no return to 0 TerreNumRefModelError=Arve algusega $syymm on juba olemas ja ei ole antud jada mudeliga ühtiv. Eemalda see või muuda selle nimi antud mooduli aktiveerimiseks. -CactusNumRefModelDesc1=Return number in the format %syymm-nnnn for standard invoices, %syymm-nnnn for credit notes and %syymm-nnnn for down payment invoices where yy is year, mm is month and nnnn is a sequencial auto-incrementing number with no break and no return to 0 +CactusNumRefModelDesc1=Return number in the format %syymm-nnnn for standard invoices, %syymm-nnnn for credit notes and %syymm-nnnn for down payment invoices where yy is year, mm is month and nnnn is a sequential auto-incrementing number with no break and no return to 0 EarlyClosingReason=Early closing reason EarlyClosingComment=Early closing note ##### Types de contacts ##### @@ -605,12 +612,12 @@ PDFCrevetteSituationInvoiceLine=Situation N°%s: Inv. N°%s on %s TotalSituationInvoice=Total situation invoiceLineProgressError=Invoice line progress can't be greater than or equal to the next invoice line updatePriceNextInvoiceErrorUpdateline=Error: update price on invoice line: %s -ToCreateARecurringInvoice=To create a recurring invoice for this contract, first create this draft invoice, then convert it into an invoice template and define the frequency for generation of future invoices. +ToCreateARecurringInvoice=Selle lepingu jaoks korduva arve loomiseks looge kõigepealt see mustandarve, seejärel teisendage see arvetemplaadiks ja määrake tulevaste arvete genereerimise sagedus. ToCreateARecurringInvoiceGene=To generate future invoices regularly and manually, just go on menu %s - %s - %s. ToCreateARecurringInvoiceGeneAuto=If you need to have such invoices generated automatically, ask your administrator to enable and setup module %s. Note that both methods (manual and automatic) can be used together with no risk of duplication. DeleteRepeatableInvoice=Kustuta arve mall ConfirmDeleteRepeatableInvoice=Kas olete kindel, et soovite malli arve kustutada? -CreateOneBillByThird=Create one invoice per third party (otherwise, one invoice per selected object) +CreateOneBillByThird=Loo üks arve iga kolmanda osapoole kohta (muidu üks arve valitud objekti kohta) BillCreated=%s invoice(s) generated BillXCreated=Invoice %s generated StatusOfGeneratedDocuments=Status of document generation @@ -641,3 +648,8 @@ MentionCategoryOfOperations=Category of operations MentionCategoryOfOperations0=Delivery of goods MentionCategoryOfOperations1=Provision of services MentionCategoryOfOperations2=Mixed - Delivery of goods & provision of services +Salaries=Palgad +InvoiceSubtype=Invoice Subtype +SalaryInvoice=Palk +BillsAndSalaries=Bills & Salaries +CreateCreditNoteWhenClientInvoiceExists=This option is enabled only when validated invoice(s) exist for a customer or when constant INVOICE_CREDIT_NOTE_STANDALONE is used(useful for some countries) diff --git a/htdocs/langs/et_EE/blockedlog.lang b/htdocs/langs/et_EE/blockedlog.lang index 63bc72d07bc..cfdde6c4641 100644 --- a/htdocs/langs/et_EE/blockedlog.lang +++ b/htdocs/langs/et_EE/blockedlog.lang @@ -53,6 +53,6 @@ logMODULE_SET=Module BlockedLog was enabled logPAYMENT_ADD_TO_BANK=Payment added to bank logPAYMENT_CUSTOMER_CREATE=Customer payment created logPAYMENT_CUSTOMER_DELETE=Customer payment logical deletion -logPAYMENT_VARIOUS_CREATE=Payment (not assigned to an invoice) created +logPAYMENT_VARIOUS_CREATE=Makse (ei ole seotud arvega) loodud logPAYMENT_VARIOUS_DELETE=Payment (not assigned to an invoice) logical deletion logPAYMENT_VARIOUS_MODIFY=Payment (not assigned to an invoice) modified diff --git a/htdocs/langs/et_EE/compta.lang b/htdocs/langs/et_EE/compta.lang index d3b8a2cd6db..524e1426eca 100644 --- a/htdocs/langs/et_EE/compta.lang +++ b/htdocs/langs/et_EE/compta.lang @@ -162,6 +162,7 @@ CalcModeVATDebt=Režiim %stekkepõhise raamatupidamise KM%s. CalcModeVATEngagement=Režiim %stulude-kulude KM%s. CalcModeDebt=Analysis of known recorded documents CalcModeEngagement=Analysis of known recorded payments +CalcModePayment=Analysis of known recorded payments CalcModeBookkeeping=Analysis of data journalized in Bookkeeping Ledger table. CalcModeNoBookKeeping=Even if they are not yet accounted in Ledger CalcModeLT1= Režiim %sRE klientide arvetel – tarnijate arved%s @@ -177,11 +178,11 @@ AnnualByCompaniesDueDebtMode=Balance of income and expenses, detail by predefine AnnualByCompaniesInputOutputMode=Balance of income and expenses, detail by predefined groups, mode %sIncomes-Expenses%s said cash accounting. SeeReportInInputOutputMode=See %sanalysis of payments%s for a calculation based on recorded payments made even if they are not yet accounted in Ledger SeeReportInDueDebtMode=See %sanalysis of recorded documents%s for a calculation based on known recorded documents even if they are not yet accounted in Ledger -SeeReportInBookkeepingMode=See %sanalysis of bookeeping ledger table%s for a report based on Bookkeeping Ledger table +SeeReportInBookkeepingMode=See %sanalysis of bookkeeping ledger table%s for a report based on Bookkeeping Ledger table RulesAmountWithTaxIncluded=- Näidatud summad sisaldavad kõiki makse RulesAmountWithTaxExcluded=- Amounts of invoices shown are with all taxes excluded RulesResultDue=- It includes all invoices, expenses, VAT, donations, salaries, whether they are paid or not.
- It is based on the billing date of invoices and on the due date for expenses or tax payments. For salaries, the date of end of period is used. -RulesResultInOut=- It includes the real payments made on invoices, expenses, VAT and salaries.
- It is based on the payment dates of the invoices, expenses, VAT, donations and salaries. +RulesResultInOut=- See sisaldab tegelikke makseid, mis on tehtud arvetel, kuludel, käibemaksul ja palkadel.
- See põhineb arvete, kulude, käibemaksu, annetuste ja palkade maksetähtpäevadel. RulesCADue=- See sisaldab kliendi tasumisele kuuluvaid arveid olenemata sellest, kas need on tasutud või mitte.
– see põhineb nende arvete arvelduskuupäeval.
RulesCAIn=- See sisaldab kõiki klientidelt saadud arvete tõhusaid makseid.
– see põhineb nende arvete maksekuupäeval
RulesCATotalSaleJournal=It includes all credit lines from the Sale journal. diff --git a/htdocs/langs/et_EE/errors.lang b/htdocs/langs/et_EE/errors.lang index 106c87fcf6b..42d123eb309 100644 --- a/htdocs/langs/et_EE/errors.lang +++ b/htdocs/langs/et_EE/errors.lang @@ -4,11 +4,11 @@ NoErrorCommitIsDone=Ühtegi viga ei ole, teostame # Errors ErrorButCommitIsDone=Esines vigu, kuid kinnitame sellest hoolimata -ErrorBadEMail=Email %s is incorrect +ErrorBadEMail=Email address %s is incorrect ErrorBadMXDomain=Email %s seems incorrect (domain has no valid MX record) ErrorBadUrl=Url %s is incorrect ErrorBadValueForParamNotAString=Bad value for your parameter. It appends generally when translation is missing. -ErrorRefAlreadyExists=Reference %s already exists. +ErrorRefAlreadyExists=Reference %s used for creation already exists. ErrorTitleAlreadyExists=Title %s already exists. ErrorLoginAlreadyExists=Kasutajanimi %s on juba olemas. ErrorGroupAlreadyExists=Grupp %s on juba olemas. @@ -32,6 +32,7 @@ ErrorBadThirdPartyName=Vigane kolmanda osapoole nimi ForbiddenBySetupRules=Forbidden by setup rules ErrorProdIdIsMandatory=%s on kohustuslik ErrorAccountancyCodeCustomerIsMandatory=The accountancy code of customer %s is mandatory +ErrorAccountancyCodeSupplierIsMandatory=The accountancy code of supplier %s is mandatory ErrorBadCustomerCodeSyntax=Halb kliendi koodi süntaks ErrorBadBarCodeSyntax=Bad syntax for barcode. May be you set a bad barcode type or you defined a barcode mask for numbering that does not match value scanned. ErrorCustomerCodeRequired=Kliendi kood on nõutud @@ -53,21 +54,22 @@ ErrorFailedToBuildArchive=Failed to build archive file %s ErrorFoundBadEmailInFile=Failis on %s real ebaõige e-posti aadressi süntaks (näiteks on rida %s aadress=%s) ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities. ErrorFieldsRequired=Some required fields have been left blank. -ErrorSubjectIsRequired=The email subject is required +ErrorSubjectIsRequired=Meili teema on kohustuslik ErrorFailedToCreateDir=Kausta loomine ebaõnnestus. Kontrolli, et veebiserveri kasutajal on piisavalt õigusi Dolibarri dokumentide kausta kirjutamiseks. Kui PHP safe_mode parameeter on sisse lülitatud, siis kontrolli, et veebiserveri kasutaja (või grupp) on Dolibarri PHP failide omanik. ErrorNoMailDefinedForThisUser=Antud kasutaja e-posti aadressi pole määratletud ErrorSetupOfEmailsNotComplete=Setup of emails is not complete -ErrorFeatureNeedJavascript=See funktsioon vajab töötamiseks JavaScripti sisse lülitamist. Muuda seadeid Seadistamine->Kuva menüüs. +ErrorFeatureNeedJavascript=This feature needs JavaScript to be activated to work. Change this in setup - display. ErrorTopMenuMustHaveAParentWithId0='Ülemine' tüüpi menüül ei saa olla emamenüüd. Sisesta emamenüü lahtrisse 0 või vali menüütüübiks 'Vasakul'. ErrorLeftMenuMustHaveAParentId='Vasak' tüüpi menüül peab olema ema ID. ErrorFileNotFound=Ei leidnud faili %s (vale rada, valed õigused või on ligipääs keelatud PHP openbasedir või safe_mode parameetritega) ErrorDirNotFound=Ei leidnud kausta %s (vale rada, valed õigused või on ligipääs keelatud PHP openbasedir või safe_mode parameetritega) ErrorFunctionNotAvailableInPHP=Selle võimaluse jaoks on vaja funktsiooni %s, kuid see ei ole antud PHP versiooni/seadistusega saadaval. ErrorDirAlreadyExists=Selle nimega kaust on juba olemas. +ErrorDirNotWritable=Directory %s is not writable. ErrorFileAlreadyExists=Selle nimega fail on juba olemas. ErrorDestinationAlreadyExists=Another file with the name %s already exists. ErrorPartialFile=Fail ei jõudnud täielikult serverisse. -ErrorNoTmpDir=Ajutist kausta %s ei ole olemas. +ErrorNoTmpDir=Temporary directory %s does not exists. ErrorUploadBlockedByAddon=PHP/Apache pistik blokeeris üleslaadimise. ErrorFileSizeTooLarge=File size is too large or file not provided. ErrorFieldTooLong=Field %s is too long. @@ -85,14 +87,13 @@ ErrorExportDuplicateProfil=This profile name already exists for this export set. ErrorLDAPSetupNotComplete=Dolibarr-LDAP sobitamine ei ole täielik. ErrorLDAPMakeManualTest=Kausta %s on loodud .ldif fail. Vigade kohta lisainfo saamiseks proovi selle käsitsi käsurealt laadimist. ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled. -ErrorRefAlreadyExists=Reference %s already exists. ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD) ErrorRecordHasChildren=Failed to delete record since it has some child records. ErrorRecordHasAtLeastOneChildOfType=Object %s has at least one child of type %s ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object. -ErrorModuleRequireJavascript=Selle võimaluse töötamiseks peab JavaScript olema sisse lülitatud. JavaScripti sisse või välja lülitamiseks kasuta menüüd Kodu->Seadistamine->Kuva. +ErrorModuleRequireJavascript=JavaScript must not be disabled to have this feature working. To enable/disable JavaScript, go to menu Home->Setup->Display. ErrorPasswordsMustMatch=Sisestatud paroolid peavad klappima -ErrorContactEMail=A technical error occured. Please, contact administrator to following email %s and provide the error code %s in your message, or add a screen copy of this page. +ErrorContactEMail=A technical error occurred. Please, contact administrator to following email %s and provide the error code %s in your message, or add a screen copy of this page. ErrorWrongValueForField=Field %s: '%s' does not match regex rule %s ErrorHtmlInjectionForField=Field %s: The value '%s' contains a malicious data not allowed ErrorFieldValueNotIn=Field %s: '%s' is not a value found in field %s of %s @@ -100,10 +101,12 @@ ErrorFieldRefNotIn=Field %s: '%s' is not a %s existing ref ErrorMultipleRecordFoundFromRef=Several record found when searching from ref %s. No way to know which ID to use. ErrorsOnXLines=%s errors found ErrorFileIsInfectedWithAVirus=Antiviiruse programm ei suutnud faili valideerida (fail võib olla viiruse poolt nakatatud) +ErrorFileIsAnInfectedPDFWithJSInside=The file is a PDF infected by some Javascript inside ErrorNumRefModel=Andmebaasi viide on juba olemas (%s) ja ei ole kooskõlas antud numeratsiooni reegliga. Kustuta kirje või nimeta viide ümber antud mooduli aktiveerimiseks. ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this vendor ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created because of too-low quantities -ErrorModuleSetupNotComplete=Setup of module %s looks to be uncomplete. Go on Home - Setup - Modules to complete. +ErrorOrderStatusCantBeSetToDelivered=Order status can't be set to delivered. +ErrorModuleSetupNotComplete=Setup of module %s looks to be incomplete. Go on Home - Setup - Modules to complete. ErrorBadMask=Maski viga ErrorBadMaskFailedToLocatePosOfSequence=Viga: mask on järjekorranumbrita ErrorBadMaskBadRazMonth=Viga: halb lähteväärtus @@ -131,7 +134,7 @@ ErrorLoginDoesNotExists=Kasutajanime %s ei leitud. ErrorLoginHasNoEmail=Antud kasutajal ei ole e-posti aadressi. Protsess katkestatud. ErrorBadValueForCode=Turvakoodi halb väärtus. Proovi uuesti... ErrorBothFieldCantBeNegative=Mõlemad väljad %s ja %s ei saa olla negatiivse väärtusega -ErrorFieldCantBeNegativeOnInvoice=Field %s cannot be negative on this type of invoice. If you need to add a discount line, just create the discount first (from field '%s' in thirdparty card) and apply it to the invoice. +ErrorFieldCantBeNegativeOnInvoice=Field %s cannot be negative on this type of invoice. If you need to add a discount line, just create the discount first (from field '%s' in third-party card) and apply it to the invoice. ErrorLinesCantBeNegativeForOneVATRate=Total of lines (net of tax) can't be negative for a given not null VAT rate (Found a negative total for VAT rate %s%%). ErrorLinesCantBeNegativeOnDeposits=Lines can't be negative in a deposit. You will face problems when you will need to consume the deposit in final invoice if you do so. ErrorQtyForCustomerInvoiceCantBeNegative=Kliendiarvete rea kogus ei tohi olla negatiivne @@ -150,6 +153,7 @@ ErrorToConnectToMysqlCheckInstance=Connect to database fails. Check database ser ErrorFailedToAddContact=Kontakti lisamine ebaõnnestus ErrorDateMustBeBeforeToday=The date must be lower than today ErrorDateMustBeInFuture=The date must be greater than today +ErrorStartDateGreaterEnd=The start date is greater than the end date ErrorPaymentModeDefinedToWithoutSetup=Makseviis on seatud tüübile %s, kuid Arved mooduli seadistamine ei ole täielik ning selle makseviisi jaoks näidatav info on määratlemata. ErrorPHPNeedModule=Viga: selle võimaluse kasutamiseks peab PHPs olema võimaldatud moodul %s. ErrorOpenIDSetupNotComplete=Dolibarri seadistusfail lubab OpenIDga autentimist, ent konstandis %s ei ole OpenID teenuse URL määratletud @@ -166,7 +170,7 @@ ErrorPriceExpression4=Illegal character '%s' ErrorPriceExpression5=Unexpected '%s' ErrorPriceExpression6=Wrong number of arguments (%s given, %s expected) ErrorPriceExpression8=Unexpected operator '%s' -ErrorPriceExpression9=An unexpected error occured +ErrorPriceExpression9=An unexpected error occurred ErrorPriceExpression10=Operator '%s' lacks operand ErrorPriceExpression11=Expecting '%s' ErrorPriceExpression14=Division by zero @@ -191,7 +195,7 @@ ErrorGlobalVariableUpdater4=SOAP client failed with error '%s' ErrorGlobalVariableUpdater5=No global variable selected ErrorFieldMustBeANumeric=Field %s must be a numeric value ErrorMandatoryParametersNotProvided=Mandatory parameter(s) not provided -ErrorOppStatusRequiredIfUsage=You set you want to use this project to follow an opportunity, so you must also fill the initial Status of opportunity. +ErrorOppStatusRequiredIfUsage=You choose to follow an opportunity in this project, so you must also fill out the Lead status. ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead. So you must also enter it's status. ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In Module Descriptor (bad value for key fk_menu) @@ -211,7 +215,7 @@ ErrorFieldAccountNotDefinedForBankLine=Value for Accounting account not defined ErrorFieldAccountNotDefinedForInvoiceLine=Value for Accounting account not defined for invoice id %s (%s) ErrorFieldAccountNotDefinedForLine=Value for Accounting account not defined for the line (%s) ErrorBankStatementNameMustFollowRegex=Error, bank statement name must follow the following syntax rule %s -ErrorPhpMailDelivery=Check that you don't use a too high number of recipients and that your email content is not similar to a Spam. Ask also your administrator to check firewall and server logs files for a more complete information. +ErrorPhpMailDelivery=Kontrollige, et te ei kasutaks liiga palju adressaate ja et teie meili sisu ei sarnaneks rämpspostiga. Täpsema teabe saamiseks paluge ka oma administraatoril kontrollida tulemüüri ja serveri logifaile. ErrorUserNotAssignedToTask=User must be assigned to task to be able to enter time consumed. ErrorTaskAlreadyAssigned=Task already assigned to user ErrorModuleFileSeemsToHaveAWrongFormat=The module package seems to have a wrong format. @@ -224,7 +228,7 @@ ErrorTooManyErrorsProcessStopped=Too many errors. Process was stopped. ErrorMassValidationNotAllowedWhenStockIncreaseOnAction=Mass validation is not possible when option to increase/decrease stock is set on this action (you must validate one by one so you can define the warehouse to increase/decrease) ErrorObjectMustHaveStatusDraftToBeValidated=Object %s must have status 'Draft' to be validated. ErrorObjectMustHaveLinesToBeValidated=Object %s must have lines to be validated. -ErrorOnlyInvoiceValidatedCanBeSentInMassAction=Only validated invoices can be sent using the "Send by email" mass action. +ErrorOnlyInvoiceValidatedCanBeSentInMassAction=Masstoiminguga "Saada meiliga" saab saata ainult kinnitatud arveid. ErrorChooseBetweenFreeEntryOrPredefinedProduct=You must choose if article is a predefined product or not ErrorDiscountLargerThanRemainToPaySplitItBefore=The discount you try to apply is larger than remain to pay. Split the discount in 2 smaller discounts before. ErrorFileNotFoundWithSharedLink=File was not found. May be the share key was modified or file was removed recently. @@ -240,7 +244,7 @@ ErrorURLMustStartWithHttp=URL %s must start with http:// or https:// ErrorHostMustNotStartWithHttp=Host name %s must NOT start with http:// or https:// ErrorNewRefIsAlreadyUsed=Error, the new reference is already used ErrorDeletePaymentLinkedToAClosedInvoiceNotPossible=Viga, suletud arve makse kustutamine ei ole võimalik -ErrorSearchCriteriaTooSmall=Search criteria too small. +ErrorSearchCriteriaTooSmall=Search criteria too short. ErrorObjectMustHaveStatusActiveToBeDisabled=Objects must have status 'Active' to be disabled ErrorObjectMustHaveStatusDraftOrDisabledToBeActivated=Objects must have status 'Draft' or 'Disabled' to be enabled ErrorNoFieldWithAttributeShowoncombobox=No fields has property 'showoncombobox' into definition of object '%s'. No way to show the combolist. @@ -259,7 +263,7 @@ ErrorReplaceStringEmpty=Error, the string to replace into is empty ErrorProductNeedBatchNumber=Error, product '%s' need a lot/serial number ErrorProductDoesNotNeedBatchNumber=Error, product '%s' does not accept a lot/serial number ErrorFailedToReadObject=Error, failed to read object of type %s -ErrorParameterMustBeEnabledToAllwoThisFeature=Error, parameter %s must be enabled into conf/conf.php to allow use of Command Line Interface by the internal job scheduler +ErrorParameterMustBeEnabledToAllwoThisFeature=Error, parameter %s must be enabled into conf/conf.php<> to allow use of Command Line Interface by the internal job scheduler ErrorLoginDateValidity=Error, this login is outside the validity date range ErrorValueLength=Length of field '%s' must be higher than '%s' ErrorReservedKeyword=The word '%s' is a reserved keyword @@ -296,16 +300,17 @@ ErrorAjaxRequestFailed=Request failed ErrorThirpdartyOrMemberidIsMandatory=Third party or Member of partnership is mandatory ErrorFailedToWriteInTempDirectory=Failed to write in temp directory ErrorQuantityIsLimitedTo=Quantity is limited to %s -ErrorFailedToLoadThirdParty=Failed to find/load thirdparty from id=%s, email=%s, name=%s +ErrorFailedToLoadThirdParty=Failed to find/load third party from id=%s, email=%s, name=%s ErrorThisPaymentModeIsNotSepa=This payment mode is not a bank account -ErrorStripeCustomerNotFoundCreateFirst=Stripe customer is not set for this thirdparty (or set to a value deleted on Stripe side). Create (or re-attach) it first. +ErrorStripeCustomerNotFoundCreateFirst=Stripe customer is not set for this third party (or set to a value deleted on Stripe side). Create (or re-attach) it first. ErrorCharPlusNotSupportedByImapForSearch=IMAP search is not able to search into sender or recipient for a string containing the character + ErrorTableNotFound=Table %s not found +ErrorRefNotFound=Ref %s not found ErrorValueForTooLow=Value for %s is too low ErrorValueCantBeNull=Value for %s can't be null ErrorDateOfMovementLowerThanDateOfFileTransmission=The date of the bank transaction can't be lower than the date of the file transmission ErrorTooMuchFileInForm=Too much files in form, the maximum number is %s file(s) -ErrorSessionInvalidatedAfterPasswordChange=The session was been invalidated following a change of password, email, status or dates of validity. Please relogin. +ErrorSessionInvalidatedAfterPasswordChange=Sessioon on tühistatud parooli, e-posti, staatuse või kehtivuskuupäevade muutmise tõttu. Palun logige uuesti sisse. ErrorExistingPermission = Permission %s for object %s already exists ErrorFieldExist=The value for %s already exist ErrorEqualModule=Module invalid in %s @@ -318,13 +323,18 @@ ErrorTheUrlOfYourDolInstanceDoesNotMatchURLIntoOAuthSetup=Error: The URL of you ErrorMenuExistValue=A Menu already exist with this Title or URL ErrorSVGFilesNotAllowedAsLinksWithout=SVG files are not allowed as external links without the option %s ErrorTypeMenu=Impossible to add another menu for the same module on the navbar, not handle yet +ErrorObjectNotFound = The object %s is not found, please check your url +ErrorCountryCodeMustBe2Char=Country code must be a 2 character string +ErrorABatchShouldNotContainsSpaces=A lot or serial number should not contains spaces + ErrorTableExist=Table %s already exist ErrorDictionaryNotFound=Dictionary %s not found -ErrorFailedToCreateSymLinkToMedias=Failed to create the symlinks %s to point to %s +ErrorFailedToCreateSymLinkToMedias=Failed to create the symbolic link %s to point to %s +ErrorCheckTheCommandInsideTheAdvancedOptions=Check the command used for the export into the Advanced options of the export # Warnings WarningParamUploadMaxFileSizeHigherThanPostMaxSize=Your PHP parameter upload_max_filesize (%s) is higher than PHP parameter post_max_size (%s). This is not a consistent setup. -WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user. +WarningPasswordSetWithNoAccount=Selle liikme jaoks määrati parool. Kasutajakontot aga ei loodud. Nii et see parool on salvestatud, kuid seda ei saa kasutada Dolibarri sisselogimiseks. Seda võib kasutada väline moodul/liides, kuid kui te ei pea liikmele sisselogimist ega parooli määrama, saate liikmemooduli seadistustest keelata valiku "Halda iga liikme sisselogimist". Kui teil on vaja sisselogimist hallata, kuid parooli pole vaja, võite selle hoiatuse vältimiseks selle välja tühjaks jätta. Märkus. E-posti saab kasutada ka sisselogimiseks, kui liige on kasutajaga lingitud. WarningMandatorySetupNotComplete=Click here to setup main parameters WarningEnableYourModulesApplications=Click here to enable your modules and applications WarningSafeModeOnCheckExecDir=Hoiatus: PHP direktiiv safe_mode on sisse lülitatud, seega peab käsk olema salvestatud PHP parameetris safe_mode_exec_dir deklareeritud kausta. @@ -347,7 +357,7 @@ WarningYourPasswordWasModifiedPleaseLogin=Your password was modified. For securi WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to %s when using the mass actions on lists WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report -WarningProjectDraft=Project is still in draft mode. Don't forget to validate it if you plan to use tasks. +WarningProjectDraft=Projekt on endiselt mustandirežiimis. Ärge unustage seda valideerida, kui kavatsete ülesandeid kasutada. WarningProjectClosed=Project is closed. You must re-open it first. WarningSomeBankTransactionByChequeWereRemovedAfter=Some bank transaction were removed after that the receipt including them were generated. So nb of cheques and total of receipt may differ from number and total in list. WarningFailedToAddFileIntoDatabaseIndex=Warning, failed to add file entry into ECM database index table @@ -359,10 +369,12 @@ WarningPaypalPaymentNotCompatibleWithStrict=The value 'Strict' makes the online WarningThemeForcedTo=Warning, theme has been forced to %s by hidden constant MAIN_FORCETHEME WarningPagesWillBeDeleted=Hoiatus, see kustutab ka kõik veebisaidi olemasolevad lehed/konteinerid. Peaksite oma veebisaidi varem eksportima, et saaksite selle hiljem uuesti importida. WarningAutoValNotPossibleWhenStockIsDecreasedOnInvoiceVal=Automatic validation is disabled when option to decrease stock is set on "Invoice validation". -WarningModuleNeedRefrech = Module %s has been disabled. Don't forget to enable it +WarningModuleNeedRefresh = Module %s has been disabled. Don't forget to enable it WarningPermissionAlreadyExist=Existing permissions for this object WarningGoOnAccountancySetupToAddAccounts=If this list is empty, go into menu %s - %s - %s to load or create accounts for your chart of account. WarningCorrectedInvoiceNotFound=Corrected invoice not found +WarningCommentNotFound=Please check placement of start and end comments for %s section in file %s before submitting your action +WarningAlreadyReverse=Stock movement already reversed SwissQrOnlyVIR = SwissQR invoice can only be added on invoices set to be paid with credit transfer payments. SwissQrCreditorAddressInvalid = Creditor address is invalid (are ZIP and city set? (%s) @@ -392,3 +404,10 @@ BadSetupOfFieldClassNotFoundForValidation = Error bad setup of field : Class not BadSetupOfFieldFileNotFound = Error bad setup of field : File not found for inclusion BadSetupOfFieldFetchNotCallable = Error bad setup of field : Fetch not callable on class ErrorTooManyAttempts= Liiga palju katseid, proovige hiljem uuesti + +TotalAmountEmpty=Total Amount Empty +FailedToFoundTheConversionRateForInvoice=Failed to found the conversion rate for invoice +ThisIdNotDefined=Id not defined +OperNotDefined=Payment method not defined +ErrorThisContactXIsAlreadyDefinedAsThisType=%s is already defined as contact for this type. +ErrorThisGroupIsAlreadyDefinedAsThisType=The contacts with this group are already defined as contact for this type. diff --git a/htdocs/langs/et_EE/holiday.lang b/htdocs/langs/et_EE/holiday.lang index 5b2f21ac987..4ba2cbcdb45 100644 --- a/htdocs/langs/et_EE/holiday.lang +++ b/htdocs/langs/et_EE/holiday.lang @@ -5,7 +5,7 @@ Holiday=Puhkus CPTitreMenu=Puhkus MenuReportMonth=Kuu aruanne MenuAddCP=New leave request -MenuCollectiveAddCP=New collective leave request +MenuCollectiveAddCP=New collective leave NotActiveModCP=You must enable the module Leave to view this page. AddCP=Make a leave request DateDebCP=Alguskuupäev @@ -85,7 +85,7 @@ AddEventToUserOkCP=Erakorralise puhkuse lisamine edukalt lõpetatud. ErrorFieldRequiredUserOrGroup=The "group" field or the "user" field must be filled in fusionGroupsUsers=The groups field and the user field will be merged MenuLogCP=View change logs -LogCP=Log of all updates made to "Balance of Leave" +LogCP=Kõigi "Puhkusejäägi" uuenduste logi ActionByCP=Uuendaja UserUpdateCP=Updated for PrevSoldeCP=Eelmine saldo @@ -95,21 +95,20 @@ UseralreadyCPexist=A leave request has already been done on this period for %s. groups=Rühmad users=Kasutajad AutoSendMail=Automatic mailing -NewHolidayForGroup=New collective leave request -SendRequestCollectiveCP=Send collective leave request +NewHolidayForGroup=New collective leave +SendRequestCollectiveCP=Create collective leave AutoValidationOnCreate=Automatic validation FirstDayOfHoliday=Beginning day of leave request LastDayOfHoliday=Ending day of leave request HolidaysMonthlyUpdate=Igakuine uuendus ManualUpdate=Käsitsi uuendus -HolidaysCancelation=Leave request cancelation +HolidaysCancelation=Leave request cancellation EmployeeLastname=Employee last name EmployeeFirstname=Employee first name TypeWasDisabledOrRemoved=Leave type (id %s) was disabled or removed LastHolidays=Viimased %s lahkumistaotlused AllHolidays=All leave requests HalfDay=Half day -NotTheAssignedApprover=You are not the assigned approver LEAVE_PAID=Paid vacation LEAVE_SICK=Sick leave LEAVE_OTHER=Other leave @@ -144,7 +143,7 @@ WatermarkOnDraftHolidayCards=Watermarks on draft leave requests HolidaysToApprove=Holidays to approve NobodyHasPermissionToValidateHolidays=Nobody has permission to validate leave requests HolidayBalanceMonthlyUpdate=Monthly update of leave balance -XIsAUsualNonWorkingDay=%s is usualy a NON working day +XIsAUsualNonWorkingDay=%s is usually a NON working day BlockHolidayIfNegative=Block if balance negative LeaveRequestCreationBlockedBecauseBalanceIsNegative=The creation of this leave request is blocked because your balance is negative ErrorLeaveRequestMustBeDraftCanceledOrRefusedToBeDeleted=Leave request %s must be draft, canceled or refused to be deleted diff --git a/htdocs/langs/et_EE/main.lang b/htdocs/langs/et_EE/main.lang index b254704cff2..44334770720 100644 --- a/htdocs/langs/et_EE/main.lang +++ b/htdocs/langs/et_EE/main.lang @@ -61,7 +61,7 @@ ErrorFileNotUploaded=Ei õnnestunud faili üles laadida. Kontrolli järgmist: fa ErrorInternalErrorDetected=Tuvastati viga ErrorWrongHostParameter=Vigane hosti parameeter ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Company/Foundation and post the form again. -ErrorRecordIsUsedByChild=Ei saanud kustutada seda kirjet. See kirje on kasutusel vähemalt ühe alamkirje poolt. +ErrorRecordIsUsedByChild=Ei saanud kustutada seda kirjet. See kirje on kasutusel vähemalt ühe alamkirje poolt. ErrorWrongValue=Vigane väärtus ErrorWrongValueForParameterX=Parameetrile %s on omistatud vigane väärtus ErrorNoRequestInError=Veas puudub päring @@ -420,6 +420,8 @@ TotalTTCShort=Kokku (bruto) TotalHT=Kokku (neto) TotalHTforthispage=Selle lehekülje summa (neto) Totalforthispage=Selle lehekülje summa +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=Kokku (km-ga) TotalTTCToYourCredit=Kokku (km-ga) krediidile lisaks TotalVAT=Maksud kokku @@ -647,6 +649,7 @@ ReportName=Aruande nimi ReportPeriod=Aruande periood ReportDescription=Kirjeldus Report=Aruanne +Reports=Reports Keyword=Märksõna Origin=Algupärane Legend=Legend @@ -966,7 +969,7 @@ ImportId=Impordi ID Event=Sündmus Events=Sündmused EMailTemplates=E-kirja mallid -FileNotShared=Fail ei ole jagatud välise avalikkusega +FileNotShared=Fail ei ole jagatud välise avalikkusega Project=Projekt Projects=Projektid LeadOrProject=Müügivihje | Projekt diff --git a/htdocs/langs/et_EE/members.lang b/htdocs/langs/et_EE/members.lang index 0493ee55843..edda8aa0253 100644 --- a/htdocs/langs/et_EE/members.lang +++ b/htdocs/langs/et_EE/members.lang @@ -173,7 +173,7 @@ MembersAndSubscriptions=Members and Contributions MoreActions=Täiendav tegevus salvestamisel MoreActionsOnSubscription=Complementary action suggested by default when recording a contribution, also done automatically on online payment of a contribution MoreActionBankDirect=Create a direct entry on bank account -MoreActionBankViaInvoice=Create an invoice, and a payment on bank account +MoreActionBankViaInvoice=Salvesta arve ja makse pangakontole MoreActionInvoiceOnly=Koosta makseta arve LinkToGeneratedPages=Generation of business cards or address sheets LinkToGeneratedPagesDesc=See ekraan võimaldab luua visiitkaartidega PDF-failid iga liikme või mõne kindla liikme kohta. @@ -233,7 +233,7 @@ XMembersClosed=%s member(s) closed XExternalUserCreated=%s external user(s) created ForceMemberNature=Force member nature (Individual or Corporation) CreateDolibarrLoginDesc=The creation of a user login for members allows them to connect to the application. Depending on the authorizations granted, they will be able, for example, to consult or modify their file themselves. -CreateDolibarrThirdPartyDesc=A third party is the legal entity that will be used on the invoice if you decide to generate invoice for each contribution. You will be able to create it later during the process of recording the contribution. +CreateDolibarrThirdPartyDesc=Kolmas osapool on juriidiline isik, mida kasutatakse arvel, kui otsustate iga panuse kohta arve koostada. Saate selle luua hiljem kaastöö salvestamise käigus. MemberFirstname=Member firstname MemberLastname=Member lastname MemberCodeDesc=Member Code, unique for all members diff --git a/htdocs/langs/et_EE/opensurvey.lang b/htdocs/langs/et_EE/opensurvey.lang index 2d83b1d9885..02edd497727 100644 --- a/htdocs/langs/et_EE/opensurvey.lang +++ b/htdocs/langs/et_EE/opensurvey.lang @@ -8,10 +8,10 @@ AddACommentForPoll=Sa võid lisada küsitlusele kommentaari... AddComment=Lisa kommentaar CreatePoll=Loo küsitlus PollTitle=Küsitluse pealkiri -ToReceiveEMailForEachVote=Receive an email for each vote +ToReceiveEMailForEachVote=Saate iga hääle kohta meili TypeDate=Liik: kuupäev TypeClassic=Liik: standardne -OpenSurveyStep2=Select your dates among the free days (grey). The selected days are green. You can unselect a day previously selected by clicking again on it +OpenSurveyStep2=Valige oma kuupäevad vabade päevade (hallid) hulgast. Valitud päevad on rohelised. Saate tühistada eelnevalt valitud päeva, klõpsates sellel uuesti. RemoveAllDays=Eemalda kõik päevad CopyHoursOfFirstDay=Kopeeri esimese päeva tunnid RemoveAllHours=Eemalda kõik tunnid @@ -61,3 +61,4 @@ SurveyExpiredInfo=The poll has been closed or voting delay has expired. EmailSomeoneVoted=%s has filled a line.\nYou can find your poll at the link: \n%s ShowSurvey=Show survey UserMustBeSameThanUserUsedToVote=You must have voted and use the same user name that the one used to vote, to post a comment +ListOfOpenSurveys=List of open surveys diff --git a/htdocs/langs/et_EE/products.lang b/htdocs/langs/et_EE/products.lang index 252396e3654..ae3382bc671 100644 --- a/htdocs/langs/et_EE/products.lang +++ b/htdocs/langs/et_EE/products.lang @@ -18,7 +18,7 @@ Reference=Viide NewProduct=Uus toode NewService=Uus teenus ProductVatMassChange=Global VAT Update -ProductVatMassChangeDesc=This tool updates the VAT rate defined on ALL products and services! +ProductVatMassChangeDesc=See tööriist värskendab käibemaksumäära, mis on määratud KÕIGILE toodetele ja teenustele! MassBarcodeInit=Mass barcode init MassBarcodeInitDesc=This page can be used to initialize a barcode on objects that does not have barcode defined. Check before that setup of module barcode is complete. ProductAccountancyBuyCode=Accounting code (purchase) @@ -80,8 +80,11 @@ SoldAmount=Sold amount PurchasedAmount=Purchased amount NewPrice=Uus hind MinPrice=Min. selling price +MinPriceHT=Min. selling price (excl. tax) +MinPriceTTC=Min. selling price (inc. tax) EditSellingPriceLabel=Edit selling price label -CantBeLessThanMinPrice=Müügihind ei saa olla madalam kui selle toote minimaalne lubatud hind (%s km-ta). Antud sõnumit näidatakse ka siis, kui sisestad liiga suure allahindluse. +CantBeLessThanMinPrice=The selling price can't be lower than minimum allowed for this product (%s without tax). This message can also appear if you type a significant discount. +CantBeLessThanMinPriceInclTax=The selling price can't be lower than minimum allowed for this product (%s including taxes). This message can also appears if you type a too important discount. ContractStatusClosed=Suletud ErrorProductAlreadyExists=Toode viitega %s on juba olemas. ErrorProductBadRefOrLabel=Vale viite või nime väärtus. @@ -105,7 +108,7 @@ SetDefaultBarcodeType=Määra vöötkoodi tüüp BarcodeValue=Vöötkoodi väärtus NoteNotVisibleOnBill=Märkus (ei ole nähtav arvetel, pakkumistel jne) ServiceLimitedDuration=Kui toode on piiratud kestusega teenus: -FillWithLastServiceDates=Fill with last service line dates +FillWithLastServiceDates=Täida viimaste teenuseliinide kuupäevad MultiPricesAbility=Multiple price segments per product/service (each customer is in one price segment) MultiPricesNumPrices=Hindasid DefaultPriceType=Base of prices per default (with versus without tax) when adding new sale prices @@ -205,11 +208,6 @@ unitSET=Set unitS=Sekund unitH=Tund unitD=Päev -unitG=Gram -unitM=Meter -unitLM=Linear meter -unitM2=Square meter -unitM3=Cubic meter unitL=Liter unitT=tonn unitKG=kg @@ -218,6 +216,7 @@ unitMG=mg unitLB=nael unitOZ=unts unitM=Meter +unitLM=Linear meter unitDM=dm unitCM=cm unitMM=mm @@ -347,16 +346,17 @@ UseProductFournDesc=Add a feature to define the product description defined by t ProductSupplierDescription=Vendor description for the product UseProductSupplierPackaging=Kasutage funktsiooni "pakendamine" koguste ümardamiseks teatud kordseteks (tarnija dokumentides rea lisamisel/värskendamisel arvutage kogused ja ostuhinnad ümber vastavalt toote ostuhindadele määratud kõrgemale kordsele) PackagingForThisProduct=Packaging of quantities -PackagingForThisProductDesc=You will automaticaly purchase a multiple of this quantity. +PackagingForThisProductDesc=You will automatically purchase a multiple of this quantity. QtyRecalculatedWithPackaging=Liini kogus arvutati ümber vastavalt tarnija pakenditele #Attributes +Attributes=Atribuudid VariantAttributes=Variant attributes ProductAttributes=Variant attributes for products ProductAttributeName=Variant attribute %s ProductAttribute=Variant attribute ProductAttributeDeleteDialog=Are you sure you want to delete this attribute? All values will be deleted -ProductAttributeValueDeleteDialog=Are you sure you want to delete the value "%s" with reference "%s" of this attribute? +ProductAttributeValueDeleteDialog=Are you sure you want to delete the value "%s" with the reference "%s" of this attribute? ProductCombinationDeleteDialog=Are you sure want to delete the variant of the product "%s"? ProductCombinationAlreadyUsed=There was an error while deleting the variant. Please check it is not being used in any object ProductCombinations=Variants @@ -387,6 +387,7 @@ ErrorDeletingGeneratedProducts=There was an error while trying to delete existin NbOfDifferentValues=No. of different values NbProducts=Number of products ParentProduct=Parent product +ParentProductOfVariant=Parent product of variant HideChildProducts=Hide variant products ShowChildProducts=Show variant products NoEditVariants=Go to Parent product card and edit variants price impact in the variants tab @@ -417,7 +418,7 @@ ErrorsProductsMerge=Errors in products merge SwitchOnSaleStatus=Switch on sale status SwitchOnPurchaseStatus=Switch on purchase status UpdatePrice=Increase/decrease customer price -StockMouvementExtraFields= Extra Fields (stock mouvement) +StockMouvementExtraFields= Extra Fields (stock movement) InventoryExtraFields= Extra Fields (inventory) ScanOrTypeOrCopyPasteYourBarCodes=Scan or type or copy/paste your barcodes PuttingPricesUpToDate=Update prices with current known prices @@ -430,3 +431,8 @@ ConfirmEditExtrafield = Select the extrafield you want modify ConfirmEditExtrafieldQuestion = Are you sure you want to modify this extrafield? ModifyValueExtrafields = Modify value of an extrafield OrProductsWithCategories=Or products with tags/categories +WarningTransferBatchStockMouvToGlobal = If you want to deserialize this product, all its serialized stock will be transformed into global stock +WarningConvertFromBatchToSerial=If you currently have a quantity higher or equal to 2 for the product, switching to this choice means you will still have a product with different objects of the same batch (while you want a unique serial number). The duplicate will remain until an inventory or a manual stock movement to fix this is done. +AllowStockMovementVariantParent=Also records stock movements on parent products of variant products +AllowStockMovementVariantParentHelp=By default, a parent of a variant is a virtual product, so no stock is managed for it. By enabling this option, a stock will be managed for parent products and each time a stock quantity is modified for a variant product, the same quantity will be modified for the parent product. You should not need this option, except if you are using variant to manage the same product than parent (but with different descriptions, prices...) +ConfirmSetToDraftInventory=Are you sure you want to go back to Draft status?
The quantities currently set in the inventory will be reset. diff --git a/htdocs/langs/et_EE/projects.lang b/htdocs/langs/et_EE/projects.lang index 6581bc1bc28..1c480ee1433 100644 --- a/htdocs/langs/et_EE/projects.lang +++ b/htdocs/langs/et_EE/projects.lang @@ -12,19 +12,19 @@ AllAllowedProjects=All project I can read (mine + public) AllProjects=Kõik projektid MyProjectsDesc=This view is limited to the projects that you are a contact for ProjectsPublicDesc=See vaade esitab kõik projektid, mida sul on lubatud vaadata. -TasksOnProjectsPublicDesc=This view presents all tasks on projects you are allowed to read. +TasksOnProjectsPublicDesc=See vaade esitab kõik ülesanded projektides, mida sul on lubatud vaadata. ProjectsPublicTaskDesc=See vaade esitab kõik projektid ja ülesanded, mida sul on lubatud vaadata. ProjectsDesc=See vaade näitab kõiki projekte (sinu kasutajaõigused annavad ligipääsu kõigele) -TasksOnProjectsDesc=This view presents all tasks on all projects (your user permissions grant you permission to view everything). -MyTasksDesc=This view is limited to the projects or tasks that you are a contact for +TasksOnProjectsDesc=See vaade näitab kõiki ülesandeid kõikidel projektidel (sinu kasutajaõigused annavad ligipääsu kõigele). +MyTasksDesc=See vaade on piiratud projektide või ülesannetega, millega olete kontaktis. OnlyOpenedProject=Ainult avatud projektid on nähtavad (mustand ja suletud staatuses projektid on peidetud) ClosedProjectsAreHidden=Suletud projektid ei ole nähtavad TasksPublicDesc=See vaade esitab kõik projektid ja ülesanded, mida sul on lubatud vaadata. TasksDesc=See vaade näitab kõiki projekte ja ülesandeid (sinu kasutajaõigused annavad ligipääsu kõigele) -AllTaskVisibleButEditIfYouAreAssigned=All tasks for qualified projects are visible, but you can enter time only for task assigned to selected user. Assign task if you need to enter time on it. -OnlyYourTaskAreVisible=Only tasks assigned to you are visible. If you need to enter time on a task and if the task is not visible here, then you need to assign the task to yourself. +AllTaskVisibleButEditIfYouAreAssigned=Kõik kvalifitseeritud projektide ülesanded on nähtavad, kuid saate aega sisestada ainult ülesandele, mis on määratud valitud kasutajale. Määrake ülesanne, kui soovite sellele aega sisestada. +OnlyYourTaskAreVisible=Ainult sulle määratud ülesanded on nähtavad. Kui pead aja sisestama ülesandele ja ülesanne ei ole siin nähtav, siis pead ülesande endale määrama. ImportDatasetProjects=Projects or opportunities -ImportDatasetTasks=Tasks of projects +ImportDatasetTasks=Projektide ülesanded ProjectCategories=Project tags/categories NewProject=Uus projekt AddProject=Create project @@ -34,7 +34,7 @@ ConfirmDeleteAProject=Are you sure you want to delete this project? ConfirmDeleteATask=Are you sure you want to delete this task? OpenedProjects=Avatud projektid OpenedProjectsOpportunities=Open opportunities -OpenedTasks=Open tasks +OpenedTasks=Avatud ülesanded OpportunitiesStatusForOpenedProjects=Juhib avatud projektide hulka staatuse järgi OpportunitiesStatusForProjects=Leads amount of projects by status ShowProject=Näita projekti @@ -44,7 +44,7 @@ SetProject=Määra projekt OutOfProject=Out of project NoProject=Ühtki projekti pole määratletud või ei oma ühtki projekti NbOfProjects=Projektide arv -NbOfTasks=Number of tasks +NbOfTasks=Ülesannete arv TimeEntry=Time tracking TimeSpent=Aega kulutatud TimeSpentSmall=Aega kulutatud @@ -83,7 +83,7 @@ MyProjectsArea=Minu projektid DurationEffective=Efektiivne kestus ProgressDeclared=Declared real progress TaskProgressSummary=Task progress -CurentlyOpenedTasks=Currently open tasks +CurentlyOpenedTasks=Hetkel avatud ülesanded TheReportedProgressIsLessThanTheCalculatedProgressionByX=The declared real progress is less %s than the progress on consumption TheReportedProgressIsMoreThanTheCalculatedProgressionByX=The declared real progress is more %s than the progress on consumption ProgressCalculated=Progress on consumption @@ -91,7 +91,7 @@ WhichIamLinkedTo=which I'm linked to WhichIamLinkedToProject=which I'm linked to project Time=Aeg TimeConsumed=Consumed -ListOfTasks=List of tasks +ListOfTasks=Ülesannete loend GoToListOfTimeConsumed=Go to list of time consumed GanttView=Gantt View ListWarehouseAssociatedProject=List of warehouses associated to the project @@ -110,7 +110,7 @@ ListVariousPaymentsAssociatedProject=Projektiga seotud mitmesuguste maksete loet ListSalariesAssociatedProject=Projektiga seotud palkade väljamaksete nimekiri ListActionsAssociatedProject=Projektiga seotud sündmuste nimekiri ListMOAssociatedProject=Projektiga seotud tootmistellimuste nimekiri -ListTaskTimeUserProject=List of time consumed on tasks of project +ListTaskTimeUserProject=Projekti ülesannetele kulutatud aja loend ListTaskTimeForTask=List of time consumed on task ActivityOnProjectToday=Activity on project today ActivityOnProjectYesterday=Activity on project yesterday @@ -128,7 +128,7 @@ ConfirmValidateProject=Are you sure you want to validate this project? CloseAProject=Sulge projekt ConfirmCloseAProject=Oled kindel, et soovid antud projekti sulgeda? AlsoCloseAProject=Also close project -AlsoCloseAProjectTooltip=Keep it open if you still need to follow production tasks on it +AlsoCloseAProjectTooltip=Jäta see avatuks, kui sul on ikka veel vaja sellel töid jälgida. ReOpenAProject=Ava projekt ConfirmReOpenAProject=Are you sure you want to re-open this project? ProjectContact=Projekti kontaktid @@ -138,8 +138,8 @@ YouAreNotContactOfProject=Sa ei ole antud privaatse projekti kontakt UserIsNotContactOfProject=User is not a contact of this private project DeleteATimeSpent=Kustuta kulutatud aeg ConfirmDeleteATimeSpent=Are you sure you want to delete this time spent? -DoNotShowMyTasksOnly=See also tasks not assigned to me -ShowMyTasksOnly=View only tasks assigned to me +DoNotShowMyTasksOnly=Vaata ka ülesandeid, mis pole mulle määratud. +ShowMyTasksOnly=Vaata ainult minule määratud ülesandeid TaskRessourceLinks=Contacts of task ProjectsDedicatedToThisThirdParty=Selle kolmanda isikuga seotud projektid NoTasks=Selle projektiga ei ole seotud ühtki ülesannet @@ -154,9 +154,9 @@ CloneContacts=Klooni kontaktid CloneNotes=Klooni märkmed CloneProjectFiles=Klooni projekti ühised failid CloneTaskFiles=Klooni ülesande/(ülesannete) ühised failid (kui ülesanne/(ülesanded) kloonitakse) -CloneMoveDate=Update project/tasks dates from now? +CloneMoveDate=Uuenda projekti/ülesannete kuupäevi praegusest hetkest? ConfirmCloneProject=Are you sure to clone this project? -ProjectReportDate=Change task dates according to new project start date +ProjectReportDate=Muuda ülesande kuupäevi vastavalt uuele projekti alguskuupäevale. ErrorShiftTaskDate=Ülesande kuupäeva ei ole võimalik nihutada vastavalt uuele projekti alguskuupäevale ProjectsAndTasksLines=Projektid ja ülesanded ProjectCreatedInDolibarr=Projekt %s on loodud @@ -205,12 +205,12 @@ InputDetail=Input detail TimeAlreadyRecorded=This is time spent already recorded for this task/day and user %s ProjectsWithThisUserAsContact=Projects with this user as contact ProjectsWithThisContact=Projects with this third-party contact -TasksWithThisUserAsContact=Tasks assigned to this user +TasksWithThisUserAsContact=Sellele kasutajale määratud ülesanded ResourceNotAssignedToProject=Not assigned to project ResourceNotAssignedToTheTask=Not assigned to the task NoUserAssignedToTheProject=No users assigned to this project TimeSpentBy=Time spent by -TasksAssignedTo=Tasks assigned to +TasksAssignedTo=Ülesanded määratud AssignTaskToMe=Assign task to myself AssignTaskToUser=Assign task to %s SelectTaskToAssign=Select task to assign... @@ -219,12 +219,12 @@ ProjectOverview=Ülevaade ManageTasks=Kasutage ülesannete jälgimiseks Projekte ja/või märkige ajakulu. ManageOpportunitiesStatus=Use projects to follow leads/opportinuties ProjectNbProjectByMonth=No. of created projects by month -ProjectNbTaskByMonth=No. of created tasks by month +ProjectNbTaskByMonth=Kuu jooksul loodud ülesannete arv ProjectOppAmountOfProjectsByMonth=Amount of leads by month ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month ProjectOpenedProjectByOppStatus=Open project|lead by lead status ProjectsStatistics=Statistics on projects or leads -TasksStatistics=Statistics on tasks of projects or leads +TasksStatistics=Statistika projektide või juhtumite ülesannete kohta TaskAssignedToEnterTime=Task assigned. Entering time on this task should be possible. IdTaskTime=Id task time YouCanCompleteRef=If you want to complete the ref with some suffix, it is recommended to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-MYSUFFIX @@ -247,13 +247,13 @@ Budget=Eelarve AllowToLinkFromOtherCompany=Allow to link an element with a project of other company

Supported values:
- Keep empty: Can link elements with any projects in the same company (default)
- "all": Can link elements with any projects, even projects of other companies
- A list of third-party ids separated by commas: can link elements with any projects of these third partys (Example: 123,4795,53)
LatestProjects=Viimased %s projektid LatestModifiedProjects=Viimased %s muudetud projekti -OtherFilteredTasks=Other filtered tasks -NoAssignedTasks=No assigned tasks found (assign project/tasks to the current user from the top select box to enter time on it) -ThirdPartyRequiredToGenerateInvoice=A third party must be defined on project to be able to invoice it. +OtherFilteredTasks=Teised filtreeritud ülesanded +NoAssignedTasks=Määratud ülesandeid ei leitud (määra projekti/ülesandeid praegusele kasutajale ülemisest valikukastist, et sellele aega sisestada) +ThirdPartyRequiredToGenerateIntervention=A third party must be defined on project to be able to create intervention. ThirdPartyRequiredToGenerateInvoice=A third party must be defined on project to be able to invoice it. ChooseANotYetAssignedTask=Valige ülesanne, mis pole teile veel määratud # Comments trans -AllowCommentOnTask=Allow user comments on tasks +AllowCommentOnTask=Luba kasutajate kommentaarid ülesannetele AllowCommentOnProject=Allow user comments on projects DontHavePermissionForCloseProject=You do not have permissions to close the project %s DontHaveTheValidateStatus=The project %s must be open to be closed @@ -269,7 +269,7 @@ OneLinePerUser=One line per user ServiceToUseOnLines=Service to use on lines by default InvoiceGeneratedFromTimeSpent=Invoice %s has been generated from time spent on project InterventionGeneratedFromTimeSpent=Intervention %s has been generated from time spent on project -ProjectBillTimeDescription=Check if you enter timesheet on tasks of project AND you plan to generate invoice(s) from the timesheet to bill the customer of the project (do not check if you plan to create invoice that is not based on entered timesheets). Note: To generate invoice, go on tab 'Time spent' of the project and select lines to include. +ProjectBillTimeDescription=Kontrollige, kas sisestate ajakava projekti ülesannetele JA kavatsete genereerida arve(d) ajakavast kliendi projekti eest arveldamiseks (ärge kontrollige, kui kavatsete luua arve, mis ei põhine sisestatud ajakavadel). Märkus: Arve genereerimiseks minge projekti vahekaardile "Kulutatud aeg" ja valige lisamiseks read. ProjectFollowOpportunity=Follow opportunity ProjectFollowTasks=Järgige ülesandeid või kulutatud aega Usage=Kasutus @@ -286,12 +286,12 @@ OneLinePerTimeSpentLine=One line for each time spent declaration AddDetailDateAndDuration=With date and duration into line description RefTaskParent=Ref. Parent Task ProfitIsCalculatedWith=Kasum arvutatakse kasutades -AddPersonToTask=Add also to tasks +AddPersonToTask=Lisage ka ülesannetesse UsageOrganizeEvent=Usage: Event Organization -PROJECT_CLASSIFY_CLOSED_WHEN_ALL_TASKS_DONE=Classify project as closed when all its tasks are completed (100%% progress) +PROJECT_CLASSIFY_CLOSED_WHEN_ALL_TASKS_DONE=Klassifitseeri projekt suletuks, kui kõik selle ülesanded on lõpule viidud (100% %% edenemine) PROJECT_CLASSIFY_CLOSED_WHEN_ALL_TASKS_DONE_help=Märkus. Olemasolevaid projekte, mille kõigi ülesannete edenemine on juba 100%%, see ei mõjuta: peate need käsitsi sulgema. See valik mõjutab ainult avatud projekte. -SelectLinesOfTimeSpentToInvoice=Select lines of time spent that are unbilled, then bulk action "Generate Invoice" to bill them -ProjectTasksWithoutTimeSpent=Project tasks without time spent +SelectLinesOfTimeSpentToInvoice=Valige arveldamata kulutatud aja read ja seejärel teostage massitoiming "Arve genereerimine", et neid arveldada +ProjectTasksWithoutTimeSpent=Projekti ülesanded ilma kulutatud ajata FormForNewLeadDesc=Thanks to fill the following form to contact us. You can also send us an email directly to %s. ProjectsHavingThisContact=Projects having this contact StartDateCannotBeAfterEndDate=Lõppkuupäev ei saa olla alguskuupäevast varasem diff --git a/htdocs/langs/et_EE/suppliers.lang b/htdocs/langs/et_EE/suppliers.lang index 7fdebf9a7c6..c17feba8bc6 100644 --- a/htdocs/langs/et_EE/suppliers.lang +++ b/htdocs/langs/et_EE/suppliers.lang @@ -51,6 +51,6 @@ RepeatableSupplierInvoice=Tarnija arve mall RepeatableSupplierInvoices=Tarnija arvete mall RepeatableSupplierInvoicesList=Tarnija arvete mall RecurringSupplierInvoices=Recurring supplier invoices -ToCreateAPredefinedSupplierInvoice=In order to create template supplier invoice, you must create a standard invoice, then, without validating it, click on the "%s" button. +ToCreateAPredefinedSupplierInvoice=Selleks, et luua malli tarnija arvet, peate looma standardse arve, seejärel klõpsake "%s" nupul, ilma seda valideerimata. GeneratedFromSupplierTemplate=Generated from supplier invoice template %s SupplierInvoiceGeneratedFromTemplate=Supplier invoice %s Generated from supplier invoice template %s diff --git a/htdocs/langs/et_EE/trips.lang b/htdocs/langs/et_EE/trips.lang index 33882b0d4a1..1b772ed8a25 100644 --- a/htdocs/langs/et_EE/trips.lang +++ b/htdocs/langs/et_EE/trips.lang @@ -24,7 +24,7 @@ ConfirmPaidTrip=Are you sure you want to change status of this expense report to ConfirmRefuseTrip=Are you sure you want to deny this expense report? ConfirmSaveTrip=Are you sure you want to validate this expense report? ConfirmValideTrip=Are you sure you want to approve this expense report? -DATE_CANCEL=Cancelation date +DATE_CANCEL=Cancellation date DATE_PAIEMENT=Maksekuupäev DATE_REFUS=Deny date DATE_SAVE=Kinnitamise kuupäev @@ -39,7 +39,7 @@ expenseReportCoef=Coefficient expenseReportCoefUndefined=(value not defined) expenseReportOffset=Nihe expenseReportPrintExample=offset + (d x coef) = %s -expenseReportRangeDisabled=Range disabled - see the c_exp_tax_range dictionay +expenseReportRangeDisabled=Range disabled - see the c_exp_tax_range dictionary expenseReportRangeFromTo=from %d to %d expenseReportRangeMoreThan=more than %d expenseReportTotalForFive=Example with d = 5 @@ -91,7 +91,7 @@ nolimitbyEX_EXP=by line (no limitation) nolimitbyEX_MON=by month (no limitation) nolimitbyEX_YEA=by year (no limitation) NoTripsToExportCSV=No expense report to export for this period. -NOT_AUTHOR=You are not the author of this expense report. Operation cancelled. +NOT_AUTHOR=You are not the author of this expense report. Operation canceled. OnExpense=Expense line PDFStandardExpenseReports=Standardmall kuluaruande PDF-dokumendi loomiseks PaidTrip=Pay an expense report @@ -103,10 +103,10 @@ ShowExpenseReport=Show expense report ShowTrip=Show expense report TripCard=Expense report card TripId=Id expense report -TripNDF=Informations expense report +TripNDF=Information expense report TripSociete=Information company Trips=Kuluaruanded -TripsAndExpenses=Expenses reports +TripsAndExpenses=Kulude aruanded TripsAndExpensesStatistics=Expense reports statistics TypeFees=Types of fees UploadANewFileNow=Upload a new document now diff --git a/htdocs/langs/et_EE/workflow.lang b/htdocs/langs/et_EE/workflow.lang index 99ae21a1080..ee710385fb2 100644 --- a/htdocs/langs/et_EE/workflow.lang +++ b/htdocs/langs/et_EE/workflow.lang @@ -5,32 +5,34 @@ ThereIsNoWorkflowToModify=There is no workflow modifications available with the # Autocreate descWORKFLOW_PROPAL_AUTOCREATE_ORDER=Looge müügitellimus automaatselt pärast pakkumise allkirjastamist (uuel tellimusel on sama summa kui pakkumisel) descWORKFLOW_PROPAL_AUTOCREATE_INVOICE=Kliendi arve automaatne koostamine pärast pakkumise allkirjastamist (uuel arvel on sama summa kui pakkumisel) -descWORKFLOW_CONTRACT_AUTOCREATE_INVOICE=Automatically create a customer invoice after a contract is validated -descWORKFLOW_ORDER_AUTOCREATE_INVOICE=Automatically create a customer invoice after a sales order is closed (the new invoice will have same amount as the order) +descWORKFLOW_CONTRACT_AUTOCREATE_INVOICE=Loo automaatselt kliendi arve pärast lepingu kinnitamist +descWORKFLOW_ORDER_AUTOCREATE_INVOICE=Loo automaatselt kliendi arve pärast müügi tellimuse sulgemist (uus arve on samas summas kui tellimus). descWORKFLOW_TICKET_CREATE_INTERVENTION=On ticket creation, automatically create an intervention. # Autoclassify customer proposal or order -descWORKFLOW_ORDER_CLASSIFY_BILLED_PROPAL=Classify linked source proposal as billed when sales order is set to billed (and if the amount of the order is the same as the total amount of the signed linked proposal) -descWORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL=Classify linked source proposal as billed when customer invoice is validated (and if the amount of the invoice is the same as the total amount of the signed linked proposal) -descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER=Classify linked source sales order as billed when customer invoice is validated (and if the amount of the invoice is the same as the total amount of the linked order) -descWORKFLOW_INVOICE_CLASSIFY_BILLED_ORDER=Classify linked source sales order as billed when customer invoice is set to paid (and if the amount of the invoice is the same as the total amount of the linked order) -descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING=Classify linked source sales order as shipped when a shipment is validated (and if the quantity shipped by all shipments is the same as in the order to update) +descWORKFLOW_ORDER_CLASSIFY_BILLED_PROPAL=Classify linked source proposals as billed when a sales order is set to billed (and if the amount of the order is the same as the total amount of the signed linked proposals) +descWORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL=Classify linked source proposals as billed when a customer invoice is validated (and if the amount of the invoice is the same as the total amount of the signed linked proposals) +descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER=Classify linked source sales order as billed when a customer invoice is validated (and if the amount of the invoice is the same as the total amount of the linked sales orders). If you have 1 invoice validated for n orders, this may set all orders to billed too. +descWORKFLOW_INVOICE_CLASSIFY_BILLED_ORDER=Classify linked source sales orders as billed when a customer invoice is set to paid (and if the amount of the invoice is the same as the total amount of the linked sales orders). If you have 1 invoice set billed for n orders, this may set all orders to billed too. +descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING=Classify linked source sales orders as shipped when a shipment is validated (and if the quantity shipped by all shipments is the same as in the order to update) descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING_CLOSED=Classify linked source sales order as shipped when a shipment is closed (and if the quantity shipped by all shipments is the same as in the order to update) # Autoclassify purchase proposal -descWORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL=Classify linked source vendor proposal as billed when vendor invoice is validated (and if the amount of the invoice is the same as the total amount of the linked proposal) +descWORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL=Classify linked source vendor proposal as billed when vendor invoice is validated (and if the amount of the invoice is the same as the total amount of the linked proposals) # Autoclassify purchase order -descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER=Classify linked source purchase order as billed when vendor invoice is validated (and if the amount of the invoice is the same as the total amount of the linked order) +descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER=Classify linked source purchase order as billed when vendor invoice is validated (and if the amount of the invoice is the same as the total amount of the linked orders) descWORKFLOW_ORDER_CLASSIFY_RECEIVED_RECEPTION=Classify linked source purchase order as received when a reception is validated (and if the quantity received by all receptions is the same as in the purchase order to update) descWORKFLOW_ORDER_CLASSIFY_RECEIVED_RECEPTION_CLOSED=Classify linked source purchase order as received when a reception is closed (and if the quantity received by all rceptions is the same as in the purchase order to update) -# Autoclassify purchase invoice -descWORKFLOW_EXPEDITION_CLASSIFY_CLOSED_INVOICE=Classify receptions to "billed" when a linked purchase invoice is validated (and if the amount of the invoice is the same as the total amount of the linked receptions) +# Autoclassify shipment +descWORKFLOW_SHIPPING_CLASSIFY_CLOSED_INVOICE=Classify linked source shipment as closed when a customer invoice is validated (and if the amount of the invoice is the same as the total amount of the linked shipments) +descWORKFLOW_SHIPPING_CLASSIFY_BILLED_INVOICE=Classify linked source shipment as billed when a customer invoice is validated (and if the amount of the invoice is the same as the total amount of the linked shipments) +# Autoclassify receptions +descWORKFLOW_RECEPTION_CLASSIFY_CLOSED_INVOICE=Classify linked source receptions as billed when a purchase invoice is validated (and if the amount of the invoice is the same as the total amount of the linked receptions) +descWORKFLOW_RECEPTION_CLASSIFY_BILLED_INVOICE=Classify linked source receptions as billed when a purchase invoice is validated (and if the amount of the invoice is the same as the total amount of the linked receptions) # Automatically link ticket to contract -descWORKFLOW_TICKET_LINK_CONTRACT=When creating a ticket, link available contracts of matching thirdparty +descWORKFLOW_TICKET_LINK_CONTRACT=When creating a ticket, link all available contracts of matching third parties descWORKFLOW_TICKET_USE_PARENT_COMPANY_CONTRACTS=When linking contracts, search among those of parents companies # Autoclose intervention descWORKFLOW_TICKET_CLOSE_INTERVENTION=Close all interventions linked to the ticket when a ticket is closed AutomaticCreation=Automatic creation AutomaticClassification=Automatic classification -# Autoclassify shipment -descWORKFLOW_SHIPPING_CLASSIFY_CLOSED_INVOICE=Classify linked source shipment as closed when customer invoice is validated (and if the amount of the invoice is the same as the total amount of the linked shipments) AutomaticClosing=Automatic closing AutomaticLinking=Automatic linking diff --git a/htdocs/langs/eu_ES/main.lang b/htdocs/langs/eu_ES/main.lang index f1f340750bf..4e0d9390e0d 100644 --- a/htdocs/langs/eu_ES/main.lang +++ b/htdocs/langs/eu_ES/main.lang @@ -420,6 +420,8 @@ TotalTTCShort=Total (inc. tax) TotalHT=Total (excl. tax) TotalHTforthispage=Total (excl. tax) for this page Totalforthispage=Total for this page +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=Total (inc. tax) TotalTTCToYourCredit=Total (inc. tax) to your credit TotalVAT=Total tax @@ -647,6 +649,7 @@ ReportName=Report name ReportPeriod=Report period ReportDescription=Deskribapena Report=Txostena +Reports=Reports Keyword=Keyword Origin=Origin Legend=Legend diff --git a/htdocs/langs/fa_IR/main.lang b/htdocs/langs/fa_IR/main.lang index 8a9b5d894b7..9429cfc1200 100644 --- a/htdocs/langs/fa_IR/main.lang +++ b/htdocs/langs/fa_IR/main.lang @@ -31,7 +31,7 @@ FormatDateHourTextShort=%b %d %Y %I:%M %p FormatDateHourText=%B %d %Y %H:%M %p DatabaseConnection=اتصال به پایگاه‌داده NoTemplateDefined=برای این نوع رایانامه قالبی وجود ندارد -AvailableVariables=متغیرهای موجود برای جایگزینی +AvailableVariables=متغیرهای موجود برای جایگزینی NoTranslation=بدون ترجمه Translation=ترجمه Translations=Translations @@ -420,6 +420,8 @@ TotalTTCShort=جمع‌کل (با مالیات) TotalHT=جمع‌کل (بدون مالیت) TotalHTforthispage=جمع‌کلی (بدون مالیات) برای این صفحه Totalforthispage=جمع‌مبلغ برای این صفحه +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=جمع‌کل (با مالیات) TotalTTCToYourCredit=جمع‌کل (با مالیات) به اعتبار شما TotalVAT=جمع‌کل مالیات @@ -647,6 +649,7 @@ ReportName=نام گزارش ReportPeriod=بازۀ زمانی گزارش ReportDescription=توضیحا Report=گزارش +Reports=گزارش ها Keyword=کلیدواژه Origin=اصل Legend=راهنما @@ -723,7 +726,7 @@ ValueIsValid=مقدار، معتبر است ValueIsNotValid=مقدار، معتبر نیست RecordCreatedSuccessfully=ردیف با موفقیت ساخته شد RecordModifiedSuccessfully=ردیف با موفقیت تغییر پیدا کرد -RecordsModified=(%s) ردیف تغییر یافت +RecordsModified=(%s) ردیف تغییر یافت RecordsDeleted=(%s) حذف شد RecordsGenerated=(%s) تولید شد ValidatedRecordWhereFound = Some of the selected records have already been validated. No records have been deleted. @@ -876,7 +879,7 @@ ShowMoreLines=نمایش سطور بیشتر/کمتر PublicUrl=نشانی عمومی AddBox=ایجاد کادر SelectElementAndClick=Select an element and click on %s -PrintFile=پرینت فایل %s +PrintFile=پرینت فایل %s ShowTransaction=نمایش ورودی در حساب بانکی ShowIntervention=نمایش واسطه‌گری ShowContract=نمایش قرارداد diff --git a/htdocs/langs/fi_FI/accountancy.lang b/htdocs/langs/fi_FI/accountancy.lang index 309b940b473..460d8027f3c 100644 --- a/htdocs/langs/fi_FI/accountancy.lang +++ b/htdocs/langs/fi_FI/accountancy.lang @@ -72,24 +72,24 @@ AccountancyAreaDescActionOnceBis=Seuraavat vaiheet kannattaa tehdä, jotta sää AccountancyAreaDescActionFreq=Seuraavat toiminnot suoritetaan yleensä kuukausittain, Viikko tai joka päivä erittäin suurille yrityksille... AccountancyAreaDescJournalSetup=VAIHE %s: Tarkista päiväkirjaluettelosi sisältö osoitteesta valikko %s -AccountancyAreaDescChartModel=VAIHE %s: Tarkista, että tilikartan malli on olemassa tai luo mallista valikko /span> %s +AccountancyAreaDescChartModel=STEP %s: Check that a model of chart of account exists or create one from menu %s AccountancyAreaDescChart=VAIHE %s: Valitse ja|tai täydennä tilikarttasi osoitteessa valikko %s -AccountancyAreaDescFiscalPeriod=VAIHE %s: Määritä tilivuosi oletus mukaan, johon Kirjanpito-tilisi integroidaan. > merkintöjä. Käytä tähän valikko-merkintää %s. +AccountancyAreaDescFiscalPeriod=STEP %s: Define a fiscal year by default on which to integrate your accounting entries. For this, use the menu entry %s. AccountancyAreaDescVat=VAIHE %s: Määritä kirjanpitotilit kullekin ALV-hinnalle. Käytä tähän valikko-merkintää %s. AccountancyAreaDescDefault=VAIHE %s: Määritä oletus kirjanpitotilit. Käytä tähän valikko-merkintää %s. -AccountancyAreaDescExpenseReport=VAIHE %s: Määritä oletus kirjanpitotilit kullekin kuluraportti. Käytä tähän valikko-merkintää %s. +AccountancyAreaDescExpenseReport=STEP %s: Define default accounting accounts for each type of Expense report. For this, use the menu entry %s. AccountancyAreaDescSal=VAIHE %s: Määritä oletus kirjanpitotilit kohteelle maksu palkoista. Käytä tähän valikko-merkintää %s. AccountancyAreaDescContrib=VAIHE %s: Määritä oletus kirjanpitotilit kohteelle Verot (Erikoiskustannukset). Käytä tähän valikko-merkintää %s. AccountancyAreaDescDonation=VAIHE %s: Määritä lahjoitus oletus kirjanpitotilit. Käytä tähän valikko-merkintää %s. AccountancyAreaDescSubscription=VAIHE %s: Määritä jäsentilaukselle oletus kirjanpitotilit. Käytä tähän valikko-merkintää %s. AccountancyAreaDescMisc=VAIHE %s: Määritä pakolliset oletus tilit ja oletus kirjanpitotilit sekalaisille tapahtumille. Käytä tähän valikko-merkintää %s. AccountancyAreaDescLoan=VAIHE %s: Määritä oletus kirjanpitotilit sanalle lainat. Käytä tähän valikko-merkintää %s. -AccountancyAreaDescBank=VAIHE %s: Määritä kirjanpitotilit ja päiväkirjakoodi jokaiselle pankille ='notranslate'>ja rahoitustilit. Käytä tähän valikko-merkintää %s. +AccountancyAreaDescBank=STEP %s: Define accounting accounts and journal code for each bank and financial accounts. For this, use the menu entry %s. AccountancyAreaDescProd=VAIHE %s: Määritä kirjanpitotilit tuotteet/Services. Käytä tähän valikko-merkintää %s. AccountancyAreaDescBind=VAIHE %s: Tarkista olemassa olevien %s rivien välinen sidos ja Kirjanpito -tili on valmis, joten sovellus voi kirjata tapahtumat Ledgeriin yhdellä napsautuksella. Täydelliset puuttuvat sidokset. Käytä tähän valikko-merkintää %s. -AccountancyAreaDescWriteRecords=VAIHE %s: Kirjoita tapahtumat pääkirjaan. Tätä varten siirry kohtaan valikko %s, ja klikkaa painiketta 0. +AccountancyAreaDescWriteRecords=STEP %s: Write transactions into the Ledger. For this, go into menu %s, and click into button %s. AccountancyAreaDescAnalyze=VAIHE %s: Lue raportteja tai luo vientitiedostoja muille kirjanpitäjille. AccountancyAreaDescClosePeriod=VAIHE %s: Sulje jakso, jotta emme voi siirtää enää tietoja samalla ajanjaksolla tulevaisuudessa. @@ -203,17 +203,17 @@ UseAuxiliaryAccountOnSupplierDeposit=Tallenna toimittaja-tili henkilökohtaisena ACCOUNTING_ACCOUNT_CUSTOMER_RETAINED_WARRANTY=Kirjanpito tililtä oletus asiakkaan säilyttämän takuun rekisteröimiseksi ACCOUNTING_PRODUCT_BUY_ACCOUNT=Tili (tilikartasta), jota käytetään oletus-tilinä samassa maassa ostetulle tuotteet -tilille (käytetään, jos ei määritelty tuoteselosteessa) -ACCOUNTING_PRODUCT_BUY_INTRA_ACCOUNT=Tili (tilikaaviosta), jota käytetään oletus-tilinä tuotteet -tiliin, joka on ostettu ETA toiseen ETA maahan (käytetään, jos sitä ei ole määritelty tuoteselosteessa) +ACCOUNTING_PRODUCT_BUY_INTRA_ACCOUNT=Account (from the Chart Of Account) to be used as the default account for the products purchased from EEC to another EEC country (used if not defined in the product sheet) ACCOUNTING_PRODUCT_BUY_EXPORT_ACCOUNT=Tili (tilikaaviosta), jota käytetään oletus-tilinä tuotteet ostetulle ja tuotu mistä tahansa muusta ulkomailta (käytetään, jos sitä ei ole määritelty tuoteselosteessa) ACCOUNTING_PRODUCT_SOLD_ACCOUNT=Tili (tilikaaviosta) käytettäväksi oletus -tilinä myydylle tuotteet (käytetään, jos sitä ei ole määritelty tuotelehti) ACCOUNTING_PRODUCT_SOLD_INTRA_ACCOUNT=Tili (tilikaaviosta), jota käytetään oletus-tilinä tuotteet -tiliin, jota myydään ETA toiseen ETA maahan (käytetään, jos sitä ei ole määritelty tuoteselosteessa) -ACCOUNTING_PRODUCT_SOLD_EXPORT_ACCOUNT=Tili (tilikaaviosta) käytettäväksi ja viedään mihin tahansa muuhun ulkomaahan (käytetään, jos sitä ei ole määritelty tuoteselosteessa) +ACCOUNTING_PRODUCT_SOLD_EXPORT_ACCOUNT=Account (from the Chart Of Account) to be used as the default account for the products sold and exported to any other foreign country (used if not defined in the product sheet) ACCOUNTING_SERVICE_BUY_ACCOUNT=Tili (tilikartasta), jota käytetään oletus -tilinä samassa maassa ostetuissa palveluissa (käytetään, jos sitä ei ole määritelty palvelulomakkeessa) -ACCOUNTING_SERVICE_BUY_INTRA_ACCOUNT=Tili (tilikaaviosta), jota käytetään oletus-tilinä palveluille, jotka on ostettu henkilöltä ETA toiselle ETA maa (käytetään, jos sitä ei ole määritelty palvelulomakkeessa) +ACCOUNTING_SERVICE_BUY_INTRA_ACCOUNT=Account (from the Chart Of Account) to be used as the default account for the services purchased from EEC to another EEC country (used if not defined in the service sheet) ACCOUNTING_SERVICE_BUY_EXPORT_ACCOUNT=Tili (tilikartasta), jota käytetään oletus -tilinä ostetuille palveluille ja, jotka on tuotu muusta ulkomailta ( käytetään, jos sitä ei ole määritelty palvelulomakkeessa) ACCOUNTING_SERVICE_SOLD_ACCOUNT=Tili (tilikartasta), jota käytetään oletus -tilinä myydyissä palveluissa (käytetään, jos sitä ei ole määritelty palvelulomakkeessa) -ACCOUNTING_SERVICE_SOLD_INTRA_ACCOUNT=Tili (tilikartasta), jota käytetään oletus-tilinä palveluille, jotka myydään ETA toiselle ETA
maa (käytetään, jos sitä ei ole määritelty palvelulomakkeessa) +ACCOUNTING_SERVICE_SOLD_INTRA_ACCOUNT=Account (from the Chart Of Account) to be used as the default account for the services sold from EEC to another EEC country (used if not defined in the service sheet) ACCOUNTING_SERVICE_SOLD_EXPORT_ACCOUNT=Tili (tilikartasta), jota käytetään oletus tilinä myydyille palveluille ja, jotka viedään muihin ulkomaihin (käytetään, jos sitä ei ole määritelty palvelulomakkeessa) Doctype=Asiakirjan tyyppi @@ -263,7 +263,7 @@ ListeMvts=Lista liikkeistä ErrorDebitCredit=Debit and Credit cannot have a value at the same time AddCompteFromBK=Lisää kirjanpitotilit kohtaan ryhmä ReportThirdParty=Luettelo kolmannen osapuolen tilit -DescThirdPartyReport=Katso tästä luettelo kolmannen osapuolen asiakkaat ja toimittajista ja span class='notranslate'>kirjanpitotilit +DescThirdPartyReport=Consult here the list of third-party customers and vendors and their accounting accounts ListAccounts=List of the accounting accounts UnknownAccountForThirdparty=Tuntematon kolmannen osapuolen tili. Käytämme %s UnknownAccountForThirdpartyBlocking=Tuntematon kolmannen osapuolen tili. Estovirhe @@ -293,10 +293,10 @@ DescVentilTodoCustomer=Sido laskurivit, joita ei ole vielä sidottu tuotetiliin ChangeAccount=Muuta tuote-/palvelutiliä (tilikartasta) valituille riveille seuraavalla tilillä: Vide=- DescVentilSupplier=Katso tästä luettelo ostolasku -riveistä, jotka on sidottu tai ei ole vielä sidottu tuotetiliin tilikartalta (näkyvät vain tietueet, joita ei ole vielä siirretty kirjanpitoon) -DescVentilDoneSupplier=Katso täältä Toimittaja laskujen rivit ja heidän Kirjanpito-tilinsä +DescVentilDoneSupplier=Consult here the list of the lines of vendor invoices and their accounting account DescVentilTodoExpenseReport=Sido kuluraportti riviä, jota ei ole vielä sidottu maksulla Kirjanpito-tili DescVentilExpenseReport=Katso tästä luettelo kuluraportti riveistä, jotka on sidottu (tai ei) maksuun Kirjanpito-tili -DescVentilExpenseReportMore=Jos määrität Kirjanpito-tilin kuluraportti-riville, sovellus voi tehdä kaiken sitomisen kuluraportti riviä ja tilikarttasi Kirjanpito tilille yhdellä napsautuksella painike "%s". Jos tiliä ei ole asetettu maksusanakirjaan tai jos sinulla on edelleen joitakin rivejä, joita ei ole sidottu mihinkään tiliin, sinun on tehtävä manuaalinen sidonta tiedostosta valikko "%s". +DescVentilExpenseReportMore=If you setup accounting account on type of expense report lines, the application will be able to make all the binding between your expense report lines and the accounting account of your chart of accounts, just in one click with the button "%s". If account was not set on fees dictionary or if you still have some lines not bound to any account, you will have to make a manual binding from the menu "%s". DescVentilDoneExpenseReport=Katso tästä luettelo kuluraporttien riveistä ja niiden maksuista Kirjanpito tili Closure=Vuosittainen sulkeminen @@ -335,7 +335,6 @@ CategoryDeleted=Tilin Kirjanpito luokka on poistettu AccountingJournals=Kirjanpitotilityypit AccountingJournal=Kirjanpito päiväkirja NewAccountingJournal=Uusi Kirjanpito -päiväkirja -ShowAccountingJournal=Näytä Kirjanpito päiväkirja NatureOfJournal=Lehden luonne AccountingJournalType1=Erilaiset toiminnot AccountingJournalType2=Myynti @@ -346,14 +345,14 @@ AccountingJournalType8=Varasto AccountingJournalType9=Kertyneet voittovarat GenerationOfAccountingEntries=Kirjanpito merkinnän luominen ErrorAccountingJournalIsAlreadyUse=Tämä päiväkirja on jo käytössä -AccountingAccountForSalesTaxAreDefinedInto=Huomautus: Kirjanpito myyntitili vero on määritelty valikko %s - b058span87f3 %s +AccountingAccountForSalesTaxAreDefinedInto=Note: Accounting account for Sales tax are defined into menu %s - %s NumberOfAccountancyEntries=Sisäänpääsyjen lukumäärä NumberOfAccountancyMovements=Liikkeiden määrä ACCOUNTING_DISABLE_BINDING_ON_SALES=Poista sidonta ja siirto käytöstä myynnin kirjanpidossa (asiakaslaskuja ei oteta huomioon Kirjanpito) ACCOUNTING_DISABLE_BINDING_ON_PURCHASES=Poista sidonta ja siirto käytöstä ostojen kirjanpidossa (Toimittaja laskuja ei oteta huomioon Kirjanpito) ACCOUNTING_DISABLE_BINDING_ON_EXPENSEREPORTS=Poista sidonta ja siirto käytöstä kirjanpidossa kuluraportit (kuluraportit ei oteta huomioon b0d4305fc47d ) ACCOUNTING_ENABLE_LETTERING=Ota kirjaintoiminto käyttöön Kirjanpito -ACCOUNTING_ENABLE_LETTERING_DESC=Kun tämä asetus on käytössä, voit määrittää jokaiselle Kirjanpito-merkinnölle koodin, jotta voit ryhmä eri Kirjanpito liikettä yhdessä. Aikaisemmin, kun eri lehtiä hallittiin itsenäisesti, tämä ominaisuus oli tarpeen ryhmä eri lehtien rivien siirtämiseksi yhteen. Kuitenkin Dolibarr-kirjanpidossa tällainen seurantakoodi, nimeltään "%s span>" on jo tallennettu automaattisesti, joten automaattinen kirjoitus on jo tehty ilman virheriskiä, joten tästä ominaisuudesta on tullut hyödytön yleisessä käytössä. Manuaalinen kirjainominaisuus tarjotaan loppukäyttäjille, jotka eivät todellakaan luota kirjanpidon tietojen siirtoa suorittavaan tietokonemoottoriin. +ACCOUNTING_ENABLE_LETTERING_DESC=When this options is enabled, you can define, on each accounting entry, a code so you can group different accounting movements together. In the past, when different journals was managed independently, this feature was necessary to group movement lines of different journals together. However, with Dolibarr accountancy, such a tracking code, called "%s" is already saved automatically, so an automatic lettering is already done, with no risk of error so this feature has become useless for a common usage. Manual lettering feature is provided for end users that really don't trust the computer engine making the transfer of data in accountancy. EnablingThisFeatureIsNotNecessary=Tämän ominaisuuden käyttöönotto ei ole enää välttämätöntä tiukan Kirjanpito hallinnan kannalta. ACCOUNTING_ENABLE_AUTOLETTERING=Ota automaattinen kirjain käyttöön siirtäessäsi kohteeseen Kirjanpito ACCOUNTING_ENABLE_AUTOLETTERING_DESC=Kirjoituksen koodi luodaan automaattisesti ja lisättynä ja, jota loppukäyttäjä ei ole valinnut @@ -361,7 +360,7 @@ ACCOUNTING_LETTERING_NBLETTERS=Kirjainten määrä kirjainkoodia luotaessa (olet ACCOUNTING_LETTERING_NBLETTERS_DESC=Jotkut Kirjanpito ohjelmistot hyväksyvät vain kaksikirjaimisen koodin. Tämän parametrin avulla voit asettaa tämän kuvasuhteen. oletus kirjainten määrä on kolme. OptionsAdvanced=Edistyneet asetukset ACCOUNTING_FORCE_ENABLE_VAT_REVERSE_CHARGE=Aktivoi toimittaja ostosten ALV:n käännetyn verotuksen hallinta -ACCOUNTING_FORCE_ENABLE_VAT_REVERSE_CHARGE_DESC=Kun tämä vaihtoehto on käytössä, voit määrittää, että toimittaja tai tietty ostolasku on siirrettävä kirjanpitoon eri tavalla: Lisäveloitus ja luottoraja luodaan Kirjanpito kahdelle tietylle tilille "%sb0e40dccz65878 +ForDocumentationSeeWiki=For user or developer documentation (Doc, FAQs...),
take a look at the Dolibarr Wiki:
%s ForAnswersSeeForum=Jos sinulla on muita kysymyksiä tai apua, voit käyttää Dolibarrin keskusteluryhmää:
%s HelpCenterDesc1=Tässä on joitain resursseja, joilla saat apua ja tukea Dolibarrin kanssa. HelpCenterDesc2=Osa näistä resursseista on saatavana vain englanniksi . @@ -361,14 +361,14 @@ LastActivationIP=Viimeinen aktiivinen IP LastActivationVersion=Uusin aktivointiversio UpdateServerOffline=Palvelimen offline-päivitys WithCounter=Laskurin hallinta -GenericMaskCodes=Voit syöttää minkä tahansa numeromaskin. Tässä maskissa voidaan käyttää seuraavia tunnisteita:
{000000}b09a4b739f17f8 /span> vastaa numeroa, joka kasvaa jokaisen %s kohdalla. Syötä niin monta nollaa kuin laskurin haluttu pituus. Laskuria täydennetään nollalla vasemmalta, jotta siinä olisi yhtä monta nollaa kuin maskissa.
{000000+000}, mutta sama kuin edellinen +-merkin oikealla puolella olevaa numeroa vastaava siirtymä otetaan käyttöön ensimmäisestä %s alkaen.
{000000@x} mutta sama kuin edellinen laskuri nollataan, kun kuukausi x saavutetaan (x välillä 1 ja 12 tai 0, jos haluat käyttää määrityksessäsi määritettyjä tilivuoden alkukuukausia, tai 99 nollataksesi nolla joka kuukausi). Jos tätä vaihtoehtoa käytetään ja x on 2 tai suurempi, myös järjestys {yy}{mm} tai {yyyy}{mm} vaaditaan.
{dd} päivä (01–31). span class='notranslate'>
{mm} kuukausi (01–12).
{yy}, 3f658383fz08 {yyyy}
tai {y} vuosi yli 2, 4 tai 1 numeroa.
+GenericMaskCodes=You may enter any numbering mask. In this mask, the following tags can be used:
{000000} corresponds to a number which will be incremented on each %s. Enter as many zeros as the desired length of the counter. The counter will be completed by zeros from the left in order to have as many zeros as the mask.
{000000+000} same as the previous one but an offset corresponding to the number to the right of the + sign is applied starting on the first %s.
{000000@x} same as the previous one but the counter is reset to zero when month x is reached (x between 1 and 12, or 0 to use the early months of fiscal year defined in your configuration, or 99 to reset to zero every month). If this option is used and x is 2 or higher, then the sequence {yy}{mm} or {yyyy}{mm} is also required.
{dd} day (01 to 31).
{mm} month (01 to 12).
{yy}, {yyyy} or {y} year over 2, 4 or 1 numbers.
GenericMaskCodes2={cccc} asiakaskoodi n merkillä
{cccc000}b09a4b739f17> asiakaskoodi n merkkiä seuraa asiakkaalle omistettu laskuri. Tämä asiakkaalle tarkoitettu laskuri nollataan samaan aikaan kuin yleinen laskuri.
{tttt} Kolmannen osapuolen tyypin koodi n merkillä (katso valikko Etusivu - Asennus - Sanakirja - Kolmannen tyypin tyypit juhlat). Jos lisäät tämän tunnisteen, laskuri on erilainen kullekin kolmannen osapuolen tyypille.
GenericMaskCodes3=Kaikki muut merkit ja maski pysyy ennallaan.
Välilyönnit eivät ole sallittuja.
GenericMaskCodes3EAN=Kaikki muut maskin merkit pysyvät ennallaan (paitsi * tai ? EAN13:n 13. kohdassa).
Välilyönnit eivät ole sallittuja.
span>EAN13:ssa viimeisen }:n jälkeen 13. sijainnissa tulee olla * tai ? . Se korvataan lasketulla avaimella.
-GenericMaskCodes4a=Esimerkki kolmannen osapuolen TheCompanyn 99. %s:sta päiväys 31.1.2023:
-GenericMaskCodes4b=Esimerkki kolmannesta osapuolesta luotu 31.1.2023:
> +GenericMaskCodes4a=Example on the 99th %s of the third party TheCompany, with date 2023-01-31:
+GenericMaskCodes4b=Example on third party created on 2023-01-31:
GenericMaskCodes4c=Esimerkki tuotteesta luotu 31.1.2023:
-GenericMaskCodes5=ABC{yy}{mm}-{000000} antaa b0aee833650ABC2301-000099

b0aee83365837+0{0@1 }-ZZZ/{dd}/XXX antaa 0199-ZZZ/31/XXX
IN{yy}{mm}-{0000}-{t} antaa IN2301-0099-A, jos class='notranslate'>Yritys on "Responsable Inscripto", jonka tyypin koodi on "A_RI" +GenericMaskCodes5=ABC{yy}{mm}-{000000} will give ABC2301-000099
{0000+100@1}-ZZZ/{dd}/XXX will give 0199-ZZZ/31/XXX
IN{yy}{mm}-{0000}-{t} will give IN2301-0099-A if the type of company is 'Responsable Inscripto' with code for type that is 'A_RI' GenericNumRefModelDesc=Paluu mukautettavan numeron mukaan määritelty mask. ServerAvailableOnIPOrPort=Server on saatavilla osoitteessa %s satama %s ServerNotAvailableOnIPOrPort=Palvelin ei ole käytettävissä osoitteessa %s satama %s @@ -457,19 +457,19 @@ ExtrafieldCheckBox=Valintaruudut ExtrafieldCheckBoxFromList=Valintaruudut taulusta ExtrafieldLink=Linkki objektiin ComputedFormula=Laskettu kenttä -ComputedFormulaDesc=Voit syöttää tähän kaavan käyttämällä objektin muita ominaisuuksia tai mitä tahansa PHP-koodausta saadaksesi dynaamisen lasketun arvon. Voit käyttää mitä tahansa PHP-yhteensopivia kaavoja, mukaan lukien "?" ehtooperaattori, ja seuraava globaali objekti: $db, $conf, $langs, $mysoc, $user, $objectoffield .
VAROITUS: Jos tarvitset lataamattoman objektin ominaisuuksia, hae itse objekti kaavaan kuten toisessa esimerkissä.
Käyttämällä laskettua Kenttä tarkoittaa, että et voi syöttää itsellesi arvoa käyttöliittymästä. Jos myös syntaksivirhe, kaava ei välttämättä palauta mitään.

Esimerkki kaavasta:
$objectoffield->id < 10 ? round($objectoffield->id / 2, 2): ($objectoffield->id + 2 * $user->id) * ( int) substr($mysoc->zip, 1, 2)

Esimerkki objektin lataamisesta uudelleen
(($reloadedobj = uusi Societe($db)) && ($reloadedobj->fetchNoCompute($objectoffield->id) > 0 ? $reloadedobj->array_options['options_extrafieldkey']*- $reloadedobj >kapitali / 5: '-1')

Muu esimerkki kaavasta, jolla pakotetaan objektin ja sen pääobjekti:
(($reloadedobj = uusi tehtävä($db)) && ($reloadedobj->fetchNoCompute($idobjectoffield-> ) > 0) && ($secondloadedobj = uusi projekti($db)) && ($secondloadedobj->fetchNoCompute($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'emoprojektia ei löydy' +ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $objectoffield.
WARNING: If you need properties of an object not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$objectoffield->id < 10 ? round($objectoffield->id / 2, 2): ($objectoffield->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetchNoCompute($objectoffield->id) > 0 ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1')

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetchNoCompute($objectoffield->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetchNoCompute($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' Computedpersistent=Tallenna laskettu kenttä ComputedpersistentDesc=Lasketut ylimääräiset kentät tallennetaan tietokantaan, mutta arvo lasketaan uudelleen vasta, kun tämän kentän kohdetta muutetaan. Jos laskettu kenttä riippuu muista kohteista tai globaaleista tiedoista, tämä arvo saattaa olla väärä!! -ExtrafieldParamHelpPassword=Tämän Kenttä jättäminen tyhjäksi tarkoittaa, että tämä arvo tallennetaan ILMAN salausta (Kenttä on vain piilotettu tähdillä näytöllä).

Syötä arvo dolcrypt koodataksesi arvon palautuvalla salausalgoritmilla. Tyhjät tiedot voidaan edelleen tuntea ja muokattuna, mutta ne on salattu muotoon tietokanta.
>
Syötä "auto" (tai "md5", "sha256", "password_hash", ...) käyttääksesi oletus span> salasanan salausalgoritmi (tai md5, sha256, password_hash...) tallentaaksesi ei-palauttavan hajautetun salasanan kohteeseen tietokanta (alkuperäistä arvoa ei voi palauttaa) -ExtrafieldParamHelpselect=Arvoluettelon on oltava rivejä, joissa on muotoavain, arvo (jossa avain ei voi olla '0')

esimerkiksi :
1,value1
2,value2b0342fccfda19bzvalue0code3, span class='notranslate'>
...

Jotta luettelo riippuu muista täydentävä attribuuttiluettelo:
1,value1|options_parent_list_codeb0ae64758bac3:3 parent_key
2,value2|options_parent_list_codeb0ae64758avain_parent_
z33 class='notranslate'>

Jotta luettelo riippuu toisesta luettelosta:
1, value1|parent_list_code:parent_key
2,value
parent_list_code:parent_key +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored WITHOUT encryption (field is just hidden with stars on screen).

Enter value 'dolcrypt' to encode value with a reversible encryption algorithm. Clear data can still be known and edited but is encrypted into database.

Enter 'auto' (or 'md5', 'sha256', 'password_hash', ...) to use the default password encryption algorithm (or md5, sha256, password_hash...) to save the non reversible hashed password into database (no way to retrieve original value) +ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=Arvoluettelon on oltava rivejä, joissa on muoto: avain,arvo (missä avain ei voi olla 0)

esimerkiksi:
1,arvo1
2,arvo2
3,arvo3
... ExtrafieldParamHelpradio=Arvoluettelon on oltava rivejä, joissa on muoto: avain,arvo (missä avain ei voi olla 0)

esimerkiksi:
1,arvo1
2,arvo2
3,arvo3
... -ExtrafieldParamHelpsellist=Arvoluettelo tulee taulukosta
Syntaksi: table_name:label_field:id_field::filtersql
Esimerkki: c_idtypent:libelle ::filtersql

– id_field on välttämättä ensisijainen int-avain
- filtersql on SQL-ehto. Vain aktiivisen arvon näyttäminen voi olla yksinkertainen testi (esim. active=1).
Voit myös käyttää $ID$ suodattimessa, joka on nykyisen objektin nykyinen tunnus
Jos haluat käyttää SELECT-toimintoa suodattimessa, käytä avainsanaa $SEL$ ohittaaksesi injektioestosuojauksen.
jos haluat suodattaa lisäkenttiä käytä syntaksia extra.fieldcode=... (jossa Kenttä koodi on lisäkentän koodi)

Jotta luettelo riippuu toisesta täydentävästä attribuuttiluettelosta:
c_typent:libelle:id:options_b049271e8181fcz /span>parent_list_code
|parent_column:filter
b0342fccfda19bz järjestyksessä 0 sisältää luettelon toisesta luettelosta riippuen:
c_typent:libelle:id:parent_list_codeb0ae64708 |parent_column:filter -ExtrafieldParamHelpchkbxlst=Arvoluettelo tulee taulukosta
Syntaksi: table_name:label_field:id_field::filtersql
Esimerkki: c_idtypent:libelle ::filtersql

-suodatin voi olla yksinkertainen testi (esim. active=1), joka näyttää vain aktiivisen arvon
Voit myös käyttää suodattimessa arvoa $ID$, joka on nykyisen objektin nykyinen tunnus
Voit tehdä SELECT-toiminnon suodattimessa käyttämällä $SEL$<. span class='notranslate'>
, jos haluat suodattaa lisäkenttiä, käytä syntaksia extra.fieldcode=... (jossa Kenttä koodi on lisäkentän koodi)

Jotta luettelo riippuu toisesta täydentävästä attribuuttiluettelosta:
span>c_typent:libelle:id:options_parent_list_code|parent_column:filter
1: paikallinen vero sovelletaan tuotteet class='notranslate'>ja palvelut ilman alv:ta (localtax lasketaan summasta ilman vero)
paikalliset vero koskevat tuotteet ja palvelut, mukaan lukien alv (localtax) määrä + pääasiallinen vero)
3: paikallinen vero voimassa tuotteet ilman alv:a (localtax lasketaan summasta ilman vero)
4: local vero sovelletaan tuotteet mukaan lukien alv (localtax lasketaan summasta + pääalv)b0342fccfda19 /span>5: paikallinen vero koskee palveluita ilman ALV:tä (localtax lasketaan summasta ilman vero)
6: paikallinen vero koskee palveluja, mukaan lukien alv (localtax lasketaan summasta + vero) +LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=Tekstiviesti LinkToTestClickToDial=Anna puhelinnumero, johon haluat soittaa, jotta saat linkin testata käyttäjän ClickToDial-URL-osoitetta %s RefreshPhoneLink=Päivitä linkki @@ -483,7 +483,7 @@ ExternalModule=Ulkoinen moduuli InstalledInto=Asennettu hakemistoon %s BarcodeInitForThirdparties=viivakoodi-init kolmansille osapuolille BarcodeInitForProductsOrServices=Massa viivakoodi init tai reset tuotteet tai palveluille -CurrentlyNWithoutBarCode=Tällä hetkellä sinulla on %s tietue sivustolla %s b0ecb2fz87f class='notranslate'>viivakoodi määritetty. +CurrentlyNWithoutBarCode=Currently, you have %s record on %s %s without barcode defined. InitEmptyBarCode=Alkuarvo %s tyhjälle viivakoodille EraseAllCurrentBarCode=Poista kaikki nykyiset viivakoodi arvot ConfirmEraseAllCurrentBarCode=Haluatko varmasti poistaa kaikki nykyiset viivakoodiarvot? @@ -502,7 +502,7 @@ ModuleCompanyCodePanicum=Palauta tyhjä kirjanpitokoodi. ModuleCompanyCodeDigitaria=Palauttaa yhdistelmäkoodin Kirjanpito kolmannen osapuolen nimen mukaan. Koodi koostuu etuliitteestä, joka voidaan määrittää ensimmäiseen kohtaan, jota seuraa kolmannen osapuolen koodissa määritetty merkkien määrä. ModuleCompanyCodeCustomerDigitaria=%s, jota seuraa lyhennetty asiakkaan nimi merkkien määrällä: %s asiakkaalle b0d4305fc47d9ez koodi. ModuleCompanyCodeSupplierDigitaria=%s ja sen jälkeen katkaistu nimi toimittaja merkkien lukumäärän mukaan: %s koodille toimittaja Kirjanpito. -Use3StepsApproval=Tekijä: oletus, Hankinta Tilaukset on luotava ja hyväksynyt 2 erilaista käyttäjät (yksi vaihe/käyttäjä luo ja yksi vaihe/käyttäjä hyväksyä >. Huomaa, että jos käyttäjällä on molemmat käyttöoikeudet luo ja hyväksyä, yksi askel/käyttäjä riittää). Voit pyytää tällä vaihtoehdolla ottamaan käyttöön kolmannen vaiheen/käyttäjän hyväksynnän, jos summa on suurempi kuin varattu arvo (joten tarvitaan kolme vaihetta: 1=vahvistus, 2=ensimmäinen hyväksyntä ja 3=sekunti hyväksyntä, jos määrä riittää).
Aseta tämä tyhjäksi, jos yksi hyväksyntä (2 askelta) riittää, aseta arvo erittäin pieneksi (0,1), jos toinen hyväksyntä (3 vaihetta) vaaditaan aina. +Use3StepsApproval=By default, Purchase Orders need to be created and approved by 2 different users (one step/user to create and one step/user to approve. Note that if user has both permission to create and approve, one step/user will be enough). You can ask with this option to introduce a third step/user approval, if amount is higher than a dedicated value (so 3 steps will be necessary: 1=validation, 2=first approval and 3=second approval if amount is enough).
Set this to empty if one approval (2 steps) is enough, set it to a very low value (0.1) if a second approval (3 steps) is always required. UseDoubleApproval=Käytä kolmivaiheista hyväksyntää, kun summa (ilman vero) on suurempi kuin... WarningPHPMail=VAROITUS: Asetukset sähköpostien lähettämiseen sovelluksesta käyttävät oletus yleistä asetusta. Usein on parempi määrittää lähtevät sähköpostit käyttämään sähköpostipalveluntarjoajasi sähköpostipalvelinta oletus-asetuksen sijaan useista syistä: WarningPHPMailA=- Sähköpostipalveluntarjoajan palvelimen käyttö lisää sähköpostisi luotettavuutta, joten se lisää toimitettavuutta ilman, että se merkitään roskapostiksi @@ -518,8 +518,8 @@ DependsOn=Tämä moduuli tarvitsee moduulit RequiredBy=Moduuli (t) vaativat tämän moduulin TheKeyIsTheNameOfHtmlField=Tämä on HTML-koodin Kenttä nimi. Tekninen tietämys vaaditaan HTML-sivun sisällön lukemiseen saadakseen Kenttä avaimenimen. PageUrlForDefaultValues=Sinun on syötettävä sivun URL-osoitteen suhteellinen polku. Jos lisäät parametreja URL-osoitteeseen, se on tehokas, jos kaikilla selattavan URL-osoitteen parametreilla on tässä määritetty arvo. -PageUrlForDefaultValuesCreate=
Esimerkki:
Lomake luo uudelle kolmannelle osapuolelle, se on %s.
Muokattuun hakemistoon asennettujen ulkoisten moduulien URL-osoitteisiin älä sisällytä "custom/", joten käytä polkua kuten mymodule/mypage.php ja not custom/mymodule/mypage.php.
, jonka haluat classIf ='notranslate'>oletus arvo vain, jos URL-osoitteessa on jokin parametri, voit käyttää %s -PageUrlForDefaultValuesList=
Esimerkki:
Sivulla, jolla on luettelo kolmansista osapuolista, se on >%s.
Muokattuun hakemistoon asennettujen ulkoisten moduulien URL-osoitteet , älä sisällytä "custom/", joten käytä polkua kuten mymodule/mypagelist.php ja not custom/mymodule/mypagelist.php.
Jos haluat oletus-arvon vain jos sisältää jonkin parametrin, voit käyttää %s +PageUrlForDefaultValuesCreate=
Example:
For the form to create a new third party, it is %s.
For URL of external modules installed into custom directory, do not include the "custom/", so use path like mymodule/mypage.php and not custom/mymodule/mypage.php.
If you want default value only if url has some parameter, you can use %s +PageUrlForDefaultValuesList=
Example:
For the page that lists third parties, it is %s.
For URL of external modules installed into custom directory, do not include the "custom/" so use a path like mymodule/mypagelist.php and not custom/mymodule/mypagelist.php.
If you want default value only if url has some parameter, you can use %s AlsoDefaultValuesAreEffectiveForActionCreate=Huomaa myös, että oletus-arvojen korvaaminen lomakkeiden luonnissa toimii vain sivuilla, jotka on suunniteltu oikein (siis parametrilla action=luo tai presend ...) EnableDefaultValues=Ota käyttöön oletusarvojen mukauttaminen EnableOverwriteTranslation=Salli käännösten mukauttaminen @@ -531,7 +531,7 @@ ProductBatchDocumentTemplates=Asiakirjamallit tuoteerien asiakirjan luomiseksi FreeLegalTextOnExpenseReports=Ilmainen lakiteksti kuluraporteissa WatermarkOnDraftExpenseReports=Vesileima kuluraporttiluonnoksissa ProjectIsRequiredOnExpenseReports=Projekti on pakollinen kuluraportti -PrefillExpenseReportDatesWithCurrentMonth=Esitäytä uusi kuluraportti alku ja loppu päivämäärät. class='notranslate'>ja
kuluvan kuukauden päivämäärät +PrefillExpenseReportDatesWithCurrentMonth=Pre-fill start and end dates of new expense report with start and end dates of the current month ForceExpenseReportsLineAmountsIncludingTaxesOnly=Pakota kuluraportti summien syöttäminen aina summana Verot AttachMainDocByDefault=Aseta arvoksi Kyllä, jos haluat liittää oletus pääasiakirja sähköpostiin (jos mahdollista) FilesAttachedToEmail=Liitä tiedosto @@ -742,8 +742,8 @@ Permission34=Poista tuotteita / palveluita Permission36=Vienti tuotteet / palvelut Permission38=Vie tuotteita Permission39=Ohita vähimmäishinta -Permission41=Lue Projektit ja tehtäviä (jaettu Projektit Projektit
, jonka yhteyshenkilö en ole) +Permission142=Create/modify all projects and tasks (as well as the private projects for which I am not a contact) Permission144=Poista kaikki Projektit ja tehtävät (sekä yksityiset Projektit ei yhteystieto) Permission145=Voi syöttää minulle tai hierarkialleni kulutetun ajan määrättyihin tehtäviin (aikataulukko) Permission146=Lue tarjoajien @@ -854,7 +854,7 @@ Permission254=Poista tai poistaa muiden käyttäjien Permission255=Muokkaa käyttäjien salasanoja Permission256=Poista käyttäjiä Permission262=Laajenna pääsy kaikille kolmansille osapuolille ja heidän objekteihinsa (ei vain kolmansille osapuolille, joiden myyntiedustaja on).
Ei voimassa ulkopuolisille käyttäjille (rajoitettu aina itseensä ehdotuksiin, tilauksiin, laskuihin, sopimuksiin jne.).
Ei voimassa: Projektit (vain projektin käyttöoikeuksia koskevat säännöt, näkyvyyden ja tehtävällä on merkitystä). -Permission263=Laajenna pääsy kaikille kolmansille osapuolille ILMAN heidän objektejaan (ei vain kolmansille osapuolille, joiden myyntiedustaja on käyttäjä).
Ei tehokas ulkoisille käyttäjille (rajoitettu aina itseensä ehdotuksiin, tilaukset, laskut, sopimukset jne.).
Ei voimassa Projektit (vain projektin käyttöoikeuksia, näkyvyyttä koskevat säännöt ja tehtävällä on merkitystä). +Permission263=Extend access to all third parties WITHOUT their objects (not only third parties for which the user is a sale representative).
Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).
Not effective for projects (only rules on project permissions, visibility and assignment matters). Permission271=Lue CA Permission272=Lue laskut Permission273=Laskutuksen @@ -1118,10 +1118,10 @@ BackToModuleList=Takaisin moduuliluetteloon BackToDictionaryList=Takaisin sanakirjaluetteloon TypeOfRevenueStamp=Veroleiman tyyppi VATManagement=Myyntiverojen hallinta -VATIsUsedDesc=Tekijä oletus luodessaan potentiaalisia asiakkaita, laskuja, tilauksia jne. Myyntiprosentti vero noudattaa aktiivista vakiosääntöä:
Jos myyjä ei ole Myynnin vero alainen, Myynti vero päättyy oletuksena. säännön.
Jos (myyjän maa = ostajan maa), oletus vastaa tuotteen vero myyntiä myyjän maassa. Säännön loppu.
Jos myyjän ja ostaja ovat molemmat Euroopan yhteisön alueella, b0ae6e9e5925a0z /span> tavarat liittyvät kuljetuksiin tuotteet (kuljetus, merenkulku, lentoyhtiö), oletus ALV on 0. Tämä sääntö on riippuu myyjän maasta – ota yhteyttä kirjanpitäjään. Ostajan tulee maksaa arvonlisävero maansa tullitoimipaikalle ja, ei myyjälle. Säännön loppu.
Jos myyjän ja ostaja ovat molemmat Euroopan yhteisön alueella, b0ae6e9e5925a0z /span> ostaja ei ole Yritys (jolla on rekisteröity yhteisön sisäinen ALV-numero), jolloin ALV:n oletusarvo on myyjän maan ALV-kanta. Säännön loppu.
Jos myyjän ja ostaja ovat molemmat Euroopan yhteisön alueella, b0ae6e9e5925a0z /span> ostaja on Yritys (jolla on rekisteröity yhteisön sisäinen ALV-numero), silloin ALV on 0 oletus . Säännön loppu.
Muissa tapauksissa ehdotettu oletus on Myynti vero >=0. Säännön loppu. +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sales Tax rate follows the active standard rule:
If the seller is not subject to Sales tax, then Sales tax defaults to 0. End of rule.
If the (seller's country = buyer's country), then the Sales tax by default equals the Sales tax of the product in the seller's country. End of rule.
If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default VAT is 0. This rule is dependent on the seller's country - please consult with your accountant. The VAT should be paid by the buyer to the customs office in their country and not to the seller. End of rule.
If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community VAT number) then the VAT defaults to the VAT rate of the seller's country. End of rule.
If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community VAT number), then the VAT is 0 by default. End of rule.
In any other case the proposed default is Sales tax=0. End of rule. VATIsNotUsedDesc=Oletusarvoisesti ehdotettu myyntivero on 0, jota voidaan käyttää esimerkiksi yhdistyksiin, yksityishenkilöihin tai pieniin yrityksiin. VATIsUsedExampleFR=Ranskassa se tarkoittaa yrityksiä tai organisaatioita, joilla on todellinen verojärjestelmä (yksinkertaistettu todellinen tai normaali real). Järjestelmä, jossa arvonlisävero ilmoitetaan. -VATIsNotUsedExampleFR=Ranskassa se tarkoittaa yhdistyksiä, jotka eivät ole myynti- vero ilmoitettuja, tai yrityksiä, organisaatioita tai vapaita ammatteja, jotka ovat valinneet mikroyritysten verotusjärjestelmän (Sales vero franchising-sopimuksessa) ja maksoi franchising-sopimuksen Myynti vero ilman myyntiä b0e7a3c6c047b2c6c0 /span> -ilmoitus. Tämä vaihtoehto näyttää laskuissa viittauksen "Ei sovellettavissa myynti vero - art-293B of CGI". +VATIsNotUsedExampleFR=In France, it means associations that are non Sales tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sales tax in franchise) and paid a franchise Sales tax without any Sales tax declaration. This choice will display the reference "Non applicable Sales tax - art-293B of CGI" on invoices. VATType=ALV-tyyppi ##### Local Taxes ##### TypeOfSaleTaxes=Myyntiveron tyyppi @@ -1146,7 +1146,7 @@ LocalTax2IsUsedExampleES=Espanjassa, freelancer ja itsenäisten ammatinharjoitta LocalTax2IsNotUsedExampleES=Espanjassa ne ovat yrityksiä, joihin ei sovelleta vero moduulijärjestelmää. RevenueStampDesc="vero leima" tai "tuloleima" on kiinteä vero, joka on sinulle laskua kohden (se ei riipu laskun määrästä ). Se voi olla myös prosenttiosuus vero, mutta toisen tai kolmannen tyypin vero käyttäminen on parempi prosenttiosuudelle Verot vero -leimoina ei anna mitään raportteja. Vain harvat maat käyttävät tämän tyyppistä vero-tyyppiä. UseRevenueStamp=Käytä veroleimaa -UseRevenueStampExample=Merkin vero leiman arvon määrittää oletus sanakirjojen asetuksiin (b0ecb2ec87f49fez span> - %s - %s) +UseRevenueStampExample=The value of tax stamp is defined by default into the setup of dictionaries (%s - %s - %s) CalcLocaltax=Raportit paikallisista veroista CalcLocaltax1=Myynnit - Ostot CalcLocaltax1Desc=Paikallisten verojen raportit on laskettu paikallisverojen myyntien ja ostojen erotuksena @@ -1154,7 +1154,7 @@ CalcLocaltax2=Ostot CalcLocaltax2Desc=Veroraportit on laskettu hankintojen veroista CalcLocaltax3=Myynti CalcLocaltax3Desc=Veroraportit on laskettu myyntien veroista -NoLocalTaxXForThisCountry=Asetuksen Verot mukaan (katso %s - %s - class='notranslate'>%s), maasi ei tarvitse käyttää tällaista vero +NoLocalTaxXForThisCountry=According to the setup of taxes (See %s - %s - %s), your country does not need to use such type of tax LabelUsedByDefault=Label käyttää oletusarvoisesti, jos ei ole käännös löytyy koodi LabelOnDocuments=Label asiakirjoihin LabelOrTranslationKey=Tunniste tai käännösavain @@ -1197,6 +1197,7 @@ Skin=Ihon teema DefaultSkin=Oletus ihon teema MaxSizeList=Max pituus luettelo DefaultMaxSizeList=Oletus luettelon maksimipituuteen +DisplayGrandTotalInList=Display grand total (for all pages) in lists footer DefaultMaxSizeShortList=oletus lyhyiden luetteloiden enimmäispituus (eli asiakaskortissa) MessageOfDay=Message of the day MessageLogin=Kirjoita viesti @@ -1249,7 +1250,7 @@ SetupDescription2=Seuraavat kaksi osiota ovat pakollisia (kaksi ensimmäistä me SetupDescription3=%s -> %sb0cz0e47d

Perusparametrit, joita käytetään oletus-käyttäytymisen mukauttamiseen sovelluksestasi (esim. maakohtaiset ominaisuudet). SetupDescription4=
%s -> %sb0cz0e47d

Tämä ohjelmisto sisältää useita moduuleja/sovelluksia. Tarpeisiisi liittyvät moduulit on otettava käyttöön ja määritettynä. valikko merkintä tulee näkyviin, kun nämä moduulit aktivoidaan. SetupDescription5=Muut asetukset valikko hallitsevat valinnaisia parametreja. -SetupDescriptionLink=
%s - %sb0e40d8c6587 /span> +SetupDescriptionLink=%s - %s SetupDescription3b=Perusparametrit, joilla muokataan sovelluksesi oletus toimintaa (esim. maakohtaisia ominaisuuksia varten). SetupDescription4b=Tämä ohjelmisto on sarja monia moduuleja/sovelluksia. Sinun tarpeisiisi liittyvät moduulit on aktivoitava. valikko merkintä tulee näkyviin, kun nämä moduulit aktivoidaan. AuditedSecurityEvents=Turvatapahtumat, jotka auditoidaan @@ -1281,7 +1282,7 @@ AvailableModules=Saatavilla olevat sovellukset/moduulit ToActivateModule=Moduulien aktivointi asetuksista (Koti-Asetukset-Moduulit) SessionTimeOut=Istunnon aikakatkaisu SessionExplanation=Tämä numero takaa, että istunto ei koskaan vanhene ennen tätä viivettä, jos istunnon puhdistuksen suorittaa sisäinen PHP-istunnonpuhdistaja (ja ei muuta). Sisäinen PHP-istunnonpuhdistaja ei takaa, että istunto vanhenee tämän viiveen jälkeen. Se vanhenee tämän viiveen jälkeen ja, kun istunnonpuhdistaja suoritetaan, joten jokainen %s/%s pääsy, mutta vain muiden istuntojen aikana (jos arvo on 0, se tarkoittaa, että istunnon tyhjentää vain ulkoinen prosessi).
Huomaa: joissakin palvelimissa, joissa on ulkoinen istunnon puhdistusmekanismi (cron under debian, ubuntu...), istunnot voidaan tuhota ulkoisen asennuksen määrittämän ajanjakson jälkeen riippumatta tähän syötetystä arvosta. -SessionsPurgedByExternalSystem=Tämän palvelimen istunnot näyttävät puhdistettavan ulkoisella mekanismilla (cron alle debian, ubuntu...), luultavasti joka %s sekuntia (= parametrin arvo session.gc_maxlifetimeb09a4b739f) , joten arvon muuttamisella ei ole vaikutusta. Sinun on pyydettävä palvelimen järjestelmänvalvojaa muuttamaan istunnon viivettä. +SessionsPurgedByExternalSystem=Sessions on this server seems to be cleaned by an external mechanism (cron under debian, ubuntu ...), probably every %s seconds (= value of parameter session.gc_maxlifetime), so changing the value here has no effect. You must ask the server administrator to change session delay. TriggersAvailable=Saatavilla laukaisimet TriggersDesc=Triggerit ovat tiedostoja, jotka muokkaavat Dolibarrin työnkulkua, kun ne on kopioitu hakemistoon htdocs/core/triggers. He toteuttavat uusia toimintoja, jotka aktivoituvat Dolibarr-tapahtumissa (uuden Yritys luominen, laskun vahvistus, ...). TriggerDisabledByName=Käynnistäjät tässä tiedosto on poistettu, joita-NORUN suffix heidän nimissään. @@ -1307,20 +1308,20 @@ NoEventFoundWithCriteria=Tälle hakukriteerille ei löytynyt suojaustapahtumaa. SeeLocalSendMailSetup=Katso paikallisen sendmail setup BackupDesc=Dolibarr-asennuksen täydellinen varmuuskopiointi vaatii kaksi vaihetta. BackupDesc2=Varmuuskopioi "documents" -hakemiston sisältö (%s) sisältää kaikki ladatut ja luodut tiedostot. Tämä sisältää myös kaikki vaiheessa 1 luodut vedostiedostot. Tämä toiminto voi kestää useita minuutteja. -BackupDesc3=Varmuuskopioi tietokanta (%s) vedokseen tiedosto. Tätä varten voit käyttää seuraavaa avustajaa. +BackupDesc3=Backup the structure and contents of your database (%s) into a dump file. For this, you can use the following assistant. BackupDescX=Arkistoitu hakemisto tulisi tallentaa turvalliseen paikkaan. BackupDescY=Luotu dump tiedosto on säilytettävä turvallisessa paikassa. BackupPHPWarning=Varmuuskopiointia ei voida taata tällä menetelmällä. Edellinen suositeltava. RestoreDesc=Dolibarr-varmuuskopion palauttaminen edellyttää kahta vaihetta. RestoreDesc2=Palauta "documents" -hakemiston varmuuskopio tiedosto (esimerkiksi zip tiedosto) uuteen Dolibarr-asennukseen tai näihin nykyisiin asiakirjoihin hakemisto (%s). -RestoreDesc3=Palauta tietokanta-rakenteen ja tiedot varmuuskopiovedosta tiedosto < span class='notranslate'>tietokanta uudesta Dolibarr-asennuksesta tai tämän nykyisen asennuksen tietokanta ( >%s). Varoitus, kun palautus on valmis, sinun on käytettävä kirjautumistunnusta/salasanaa, joka oli olemassa varmuuskopioinnin tai asennuksen aikana, jotta voit muodostaa yhteyden uudelleen.
Varmuuskopion palauttaminen tietokanta tähän nykyiseen asennukseen, voit seurata tätä avustajaa. +RestoreDesc3=Restore the database structure and data from a backup dump file into the database of the new Dolibarr installation or into the database of this current installation (%s). Warning, once the restore is complete, you must use a login/password, that existed from the backup time/installation to connect again.
To restore a backup database into this current installation, you can follow this assistant. RestoreMySQL=MySQL vienti ForcedToByAModule=Tämä sääntö on pakko %s on aktivoitu moduuli ValueIsForcedBySystem=Järjestelmä pakottaa tämän arvon. Et voi muuttaa sitä. PreviousDumpFiles=Olemassa olevat varmuuskopiot PreviousArchiveFiles=Olemassa olevat arkistotiedostot WeekStartOnDay=Ensimmäinen viikonpäivä -RunningUpdateProcessMayBeRequired=Päivitysprosessi näyttää vaadittavan (Ohjelman versio %s eroaa tietokanta versiosta %s /span>) +RunningUpdateProcessMayBeRequired=Running the upgrade process seems to be required (Program version %s differs from Database version %s) YouMustRunCommandFromCommandLineAfterLoginToUser=Sinun on suoritettava tämä komento komentoriviltä jälkeen kirjautua kuori käyttäjän %s. YourPHPDoesNotHaveSSLSupport=SSL toimintoja ei saatavilla PHP DownloadMoreSkins=Lisää nahat ladata @@ -1371,8 +1372,8 @@ SendmailOptionMayHurtBuggedMTA=Ominaisuus lähettää sähköpostit "PHP mail di TranslationSetup=Käännöksen asetukset TranslationKeySearch=Etsi käännöstä TranslationOverwriteKey=Ylikirjoita käännösteksti -TranslationDesc=Näytön asettaminen Kieli:
* oletus/Systemwide: span class='notranslate'>valikko
Etusivu -> Asennus -> Näyttö
* Käyttäjää kohden: klikkaa käyttäjänimeä näytön yläreunassa ja muokkaa Käyttäjän näytön asetukset -välilehti käyttäjäkortissa. -TranslationOverwriteDesc=Voit myös ohittaa seuraavan taulukon täyttävät merkkijonot. Valitse Kieli avattavasta %s-valikosta, lisää käännösavainmerkkijono kohtaan %s /span>" ja uusi käännös kielelle "%s" +TranslationDesc=How to set the display language:
* Default/Systemwide: menu Home -> Setup -> Display
* Per user: Click on the username at the top of the screen and modify the User Display Setup tab on the user card. +TranslationOverwriteDesc=You can also override strings filling the following table. Choose your language from "%s" dropdown, insert the translation key string into "%s" and your new translation into "%s" TranslationOverwriteDesc2=Voit käyttää toista välilehteä saadaksesi selville, mitä käännösavainta käytetään TranslationString=Käännösteksti CurrentTranslationString=Nykyinen käännösteksti @@ -1404,7 +1405,7 @@ PHPModuleLoaded=PHP:n laajennus %sladattu PreloadOPCode=Esiladattua OPCode-koodia käytetään AddRefInList=Näytä asiakas/Toimittaja viite. yhdistelmäluetteloihin.
Kolmannet osapuolet näkyvät nimimuodolla "CC12345 - SC45678 - Suuri Yritys corp." "The Big Yritys corp" sijaan. AddVatInList=Näytä asiakkaan/Toimittaja ALV-numero yhdistelmäluetteloissa. -AddAdressInList=Näytä asiakkaan/Toimittaja osoite yhdistelmäluetteloissa.
Kolmannet osapuolet tulevat näkyviin nimimuodolla "The Big Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp". AddEmailPhoneTownInContactList=Näytä yhteyshenkilön sähköpostiosoite (tai puhelinnumerot, jos niitä ei ole määritetty) ja kaupungin tietoluettelo (valitse luettelo tai yhdistelmälaatikko)
Yhteystiedot näkyvät nimimuoto "Dupond Durand - dupond.durand@example.com - Paris" tai "Dupond Durand - 06 07 59 65 66 - Paris" "Dupond Durand" sijaan. AskForPreferredShippingMethod=Kysy ensisijaista lähetystapaa kolmansille osapuolille. FieldEdition=Alalla painos %s @@ -1434,7 +1435,7 @@ HRMSetup=Henkilöstöhallinta moduulin asetukset CompanySetup=Yritykset moduulin asetukset CompanyCodeChecker=Vaihtoehdot asiakas- / toimittajakoodien automaattiseen luomiseen AccountCodeManager=Vaihtoehdot asiakkaan / toimittajan kirjanpitokoodien automaattiseen luomiseen -NotificationsDesc=Sähköposti Ilmoitukset voidaan lähettää automaattisesti joidenkin Dolibarr-tapahtumien yhteydessä.
Sähköpostin b0cb8c8f02af vastaanottajat > voidaan määritellä: +NotificationsDesc=Email notifications can be sent automatically for some Dolibarr events.
Recipients of notifications can be defined: NotificationsDescUser=* käyttäjää kohden, yksi käyttäjä kerrallaan. NotificationsDescContact=* kolmansien osapuolten yhteystietoja (asiakkaita tai toimittajia) kohti, yksi yhteyshenkilö kerrallaan. NotificationsDescGlobal=* tai asettamalla yleiset sähköpostiosoitteet moduulin asetussivulla. @@ -1595,8 +1596,8 @@ LDAPSynchroKO=Epäonnistui synkronointi testi LDAPSynchroKOMayBePermissions=Synkronointitesti epäonnistui. Tarkista, että yhteys palvelimeen on määritetty oikein ja sallii LDAP-päivitykset LDAPTCPConnectOK=TCP connect to LDAP server successful (Server=%s, Port=TCP yhteyden LDAP-palvelin onnistunut (Server= %s, Port= %s) LDAPTCPConnectKO=TCP connect to LDAP server failed (Server=%s, Port=TCP yhteyden LDAP-palvelimeen ei onnistunut (Server= %s, Port= %s) -LDAPBindOK=Yhdistäminen/todennus LDAP-palvelimeen onnistui (Server=%s, Port=%s, b0b4652430823334308 /span>=%s, Salasana=%s) -LDAPBindKO=Yhteyden muodostaminen/todennus LDAP-palvelimeen epäonnistui (palvelin=%s, portti=%s, b0b46534308 /span>=%s, Salasana=%s) +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s) +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s) LDAPSetupForVersion3=LDAP-palvelin määritetty versio 3 LDAPSetupForVersion2=LDAP-palvelin määritetty versio 2 LDAPDolibarrMapping=Dolibarr Mapping @@ -1671,7 +1672,7 @@ NotInstalled=Ei asennettu. NotSlowedDownByThis=Ei hidasta tätä. NotRiskOfLeakWithThis=Ei vuotoriskiä tällä. ApplicativeCache=Sovellettava välimuisti -MemcachedNotAvailable=Sovellusvälimuistia ei löytynyt. Voit parantaa suorituskykyä asentamalla välimuistipalvelimen, johon on tallennettu ja moduuli, joka pystyy käyttämään tätä välimuistipalvelinta.
Lisätietoja täältä http://wiki.dolibarr.org/index.php/Module_MemCached_EN.b3142fz0 /span>Huomaa, että monet verkkopalveluntarjoajat eivät tarjoa tällaista välimuistipalvelinta. +MemcachedNotAvailable=No applicative cache found. You can enhance performance by installing a cache server Memcached and a module able to use this cache server.
More information here http://wiki.dolibarr.org/index.php/Module_MemCached_EN.
Note that a lot of web hosting provider does not provide such cache server. MemcachedModuleAvailableButNotSetup=Moduuli on tallennettu sovelluksen välimuistiin, mutta moduulin asennus ei ole valmis. MemcachedAvailableAndSetup=Memcached-moduuli, joka on omistettu memcached-palvelimen käyttöön, on käytössä. OPCodeCache=OPCode-välimuisti @@ -1704,7 +1705,7 @@ AutoFillFormFieldBeforeSubmit=Täytä kuvauksen syöttökenttä automaattisesti DoNotAutofillButAutoConcat=Älä täytä syötettä Kenttä automaattisesti tuotteen kuvauksella. Tuotteen kuvaus liitetään annettuun kuvaukseen automaattisesti. DoNotUseDescriptionOfProdut=Tuotteen kuvausta ei koskaan sisällytetä asiakirjarivien kuvaukseen MergePropalProductCard=Aktivoi tuotteen/palvelun liitetiedostot -välilehdellä vaihtoehto tuotteen PDF-dokumentin yhdistämiseksi tarjous PDF-azuriin, jos tuote/palvelu on kohdassa tarjous -ViewProductDescInThirdpartyLanguageAbility=Näytä tuotteet kuvaukset kolmannen osapuolen Kieli lomakkeissa (muussa muodossa b0df2e8a8z0 käyttäjästä) +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in forms in the language of the third party (otherwise in the language of the user) UseSearchToSelectProductTooltip=Jos sinulla on myös suuri määrä tuotteet (> 100 000), voit lisätä nopeutta asettamalla vakion PRODUCT_DONOTSEARCH_ANYWHERE arvoksi 1 kohdassa Setup->Other. Haku rajoittuu sitten merkkijonon alkuun. UseSearchToSelectProduct=Odota, kunnes painat näppäintä, ennen kuin lataat tuoteyhdistelmäluettelon sisällön (Tämä voi parantaa suorituskykyä, jos sinulla on paljon tuotteet, mutta se ei ole niin kätevää) SetDefaultBarcodeTypeProducts=Tuotteissa käytetty viivakoodin tyyppi @@ -1789,7 +1790,7 @@ FCKeditorForMail=WYSIWYG-luonti/painos kaikille viesteille (paitsi Työkalut->s FCKeditorForTicket=WYSIWYG-luonti/painos lipuille ##### Stock ##### StockSetup='Varasto' - moduulin asetukset -IfYouUsePointOfSaleCheckModule=Jos käytät oletus:n tarjoamaa myyntipistemoduulia (POS) tai ulkoista moduulia, POS-moduulisi saattaa jättää tämän asennuksen huomioimatta. Useimmat myyntipistemoduulit on suunnitellut oletus ja luo laskuttaa välittömästi ja span class='notranslate'>vähentää -osakkeesta riippumatta tässä olevista vaihtoehdoista. Joten jos sinulla on tai ei ole varastossa vähentää, kun rekisteröit myyntiä myyntipisteestäsi, tarkista myös POS-moduulisi asetukset. +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup. ##### Menu ##### MenuDeleted=Valikko poistettu Menu=Valikko @@ -1848,7 +1849,7 @@ AGENDA_DEFAULT_VIEW = Minkä näkymän haluat avata: oletus, kun valitset valikk AGENDA_EVENT_PAST_COLOR = Menneen tapahtuman väri AGENDA_EVENT_CURRENT_COLOR = Tämänhetkinen tapahtuman väri AGENDA_EVENT_FUTURE_COLOR = Tulevaisuuden tapahtuman väri -AGENDA_REMINDER_BROWSER = Ota tapahtumamuistutus käyttöön käyttäjän selaimessa (kun muistutus päiväys saavutetaan , selain näyttää ponnahdusikkunan. Jokainen käyttäjä voi poistaa tällaisen Ilmoitukset selaimen ilmoitusasetuksista). +AGENDA_REMINDER_BROWSER = Enable event reminder on user's browser (When remind date is reached, a popup is shown by the browser. Each user can disable such notifications from its browser notification setup). AGENDA_REMINDER_BROWSER_SOUND = Ota käyttöön ilmoitusäänet AGENDA_REMINDER_EMAIL = Ota käyttöön sähköpostimuistutus (muistutusvaihtoehto/viive voidaan määrittää kullekin tapahtumalle). AGENDA_REMINDER_EMAIL_NOTE = Huomaa: ajoitetun työn %s tiheyden on oltava riittävä, jotta varmistetaan, että muistutus lähetetään oikealla hetkellä. @@ -1860,7 +1861,7 @@ PastDelayVCalExport=Älä viedä tapauksessa vanhempia kuin SecurityKey = Turva-avain ##### ClickToDial ##### ClickToDialSetup='Click To Dial'-moduulin asetukset -ClickToDialUrlDesc=URL-osoite kutsutaan, kun puhelinkuvaa napsautetaan. URL-osoitteessa voit käyttää tunnisteita
__PHONETO__ korvattu soittajan puhelinnumerolla
__PHONEFROM__ korvataan soittavan henkilön puhelinnumerolla (sinun)
__LOGIN__b09a4b739f1 span>, joka korvataan clicktodial-kirjautumisella (määritetty käyttäjäkortissa)
__PASS__ , joka korvataan clicktodial-salasanalla (määritetty käyttäjäkortissa). +ClickToDialUrlDesc=URL called when a click on phone picto is done. In URL, you can use tags
__PHONETO__ that will be replaced with the phone number of person to call
__PHONEFROM__ that will be replaced with phone number of calling person (yours)
__LOGIN__ that will be replaced with clicktodial login (defined on user card)
__PASS__ that will be replaced with clicktodial password (defined on user card). ClickToDialDesc=Tämä moduuli muuttaa puhelinnumerot pöytätietokonetta käytettäessä napsautettaviksi linkeiksi. Numeroon soitetaan klikkaus. Tätä voidaan käyttää puhelun aloittamiseen, kun käytät pehmeää puhelinta työpöydälläsi tai kun käytät esimerkiksi SIP-protokollaan perustuvaa CTI-järjestelmää. Huomautus: Kun käytät älypuhelinta, puhelinnumerot ovat aina napsautettavissa. ClickToDialUseTelLink=Käytä vain linkkiä "tel:" puhelinnumeroihin ClickToDialUseTelLinkDesc=Käytä tätä menetelmää, jos käyttäjilläsi on ohjelmistopuhelin tai ohjelmistoliitäntä, joka on asennettu samaan tietokoneeseen kuin selain. ja kutsutaan, kun napsautat "tel:"-alkuista linkkiä selaimesi. Jos tarvitset linkin, joka alkaa sanalla "sip:" tai täyden palvelinratkaisun (ei tarvitse paikallista ohjelmiston asennusta), sinun on asetettava asetukseksi "Ei". ja täytä seuraava Kenttä. @@ -1971,7 +1972,7 @@ SomethingMakeInstallFromWebNotPossible=Ulkoisen moduulin asennus ei ole mahdolli SomethingMakeInstallFromWebNotPossible2=Tästä syystä tässä kuvattu päivitysprosessi on manuaalinen prosessi, jonka vain etuoikeutettu käyttäjä voi suorittaa. InstallModuleFromWebHasBeenDisabledContactUs=Ulkoisten moduulien tai dynaamisten verkkosivustojen asentaminen tai kehittäminen sovelluksesta on tällä hetkellä lukittu turvallisuussyistä. Ota yhteyttä, jos haluat ottaa tämän ominaisuuden käyttöön. InstallModuleFromWebHasBeenDisabledByFile=Järjestelmänvalvoja on poistanut ulkoisen moduulin asennuksen sovelluksesta. Sinun on pyydettävä häntä poistamaan tiedosto %s tämän ominaisuuden sallimiseksi. -ConfFileMustContainCustom=Ulkoisen moduulin asentaminen tai rakentaminen sovelluksesta täytyy tallentaa moduulitiedostot hakemistoon %s . Jotta Dolibarr käsittelee tämän hakemiston, sinun on määritettävä conf/conf.php, jotta voit lisätä kaksi ohjeriviä:
$dolibarr_main_url_root_alt='/custom';b0a65fc9 classz0
$dolibarr_main_document_root_alt='b0ecb2ec87f49fztom' '>
+ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory %s. To have this directory processed by Dolibarr, you must setup your conf/conf.php to add the 2 directive lines:
$dolibarr_main_url_root_alt='/custom';
$dolibarr_main_document_root_alt='%s/custom'; HighlightLinesOnMouseHover=Korosta taulukon rivit hiiren liikkuessa niiden päällä HighlightLinesColor=Korosta viivan väri, kun hiiri kulkee sen yli (käytä "ffffff", jos et halua korostaa) HighlightLinesChecked=Korosta viivan väri, kun se on valittuna (käytä "ffffff", jos et halua korostaa) @@ -1998,7 +1999,7 @@ EnterAnyCode=Tämä kenttä sisältää viitteen linjan tunnistamiseksi. Syötä Enter0or1=Syötä 0 tai 1 UnicodeCurrency=Kirjoita tähän aaltosulkeiden väliin, luettelo tavunumerosta, joka edustaa valuuttasymbolia. Esimerkiksi: kirjoita $: lle [36] - Brasilian real:lle R $ [82,36] - €: lle, kirjoita [8364] ColorFormat=RGB-väri on HEX-muodossa, esim .: FF0000 -PictoHelp=Kuvakkeen nimi muodossa:
- image.png kuvalle tiedosto nykyiseen teemahakemistoon
- image.png@module, jos tiedosto on moduulin hakemistossa /img/
- fa-xxx FontAwesome fa-xxx -kuvalle
- fontawesome_xxx_fa_color_size FontAwesome fa-xxx -kuvalle (etuliitteellä, väri valikko %s - %s, joten myynti class='notranslate'>vero tai käytetty ALV on aina 0 myynnin yhteydessä. +VATIsUsedIsOff=Note: The option to use Sales Tax or VAT has been set to Off in the menu %s - %s, so Sales tax or Vat used will always be 0 for sales. SwapSenderAndRecipientOnPDF=Vaihda lähettäjän ja vastaanottajan osoitteen sijainti PDF-dokumenteissa FeatureSupportedOnTextFieldsOnly=Varoitus, ominaisuutta tuetaan vain tekstikentissä ja yhdistelmäluetteloissa. Myös URL-parametri action=luo tai action=edit on asetettava TAI sivun nimen lopussa on oltava "new.php", jotta tämä ominaisuus käynnistyy. EmailCollector=Sähköpostin kerääjä @@ -2176,7 +2177,7 @@ CreateCandidature=Luo työhakemus FormatZip=Postinumero MainMenuCode=Valikkokoodi (päävalikko) ECMAutoTree=Näytä automaattinen ECM-puu -OperationParamDesc=Määritä säännöt, joita käytetään joidenkin tietojen purkamiseen tai määritä arvoja toimintaa varten.

Esimerkki Yritys
nimi sähköpostin aiheesta väliaikaiseksi muuttujaksi:
tmp_var=EXTRACT:SUBJECT:Viesti lähettäjältä b0a06ee7cda03 /span> ([^\n]*)

Esimerkkejä objektin ominaisuuksien asettamisesta luo >:
objproperty1=SET:koodattu arvo
objproperty2=SET:__tmp_var__ objproperty3=SETIFEMPTY:a arvo (arvo asetetaan vain, jos ominaisuutta ei ole jo määritetty)
objproperty4=EXTRACT:HEADER:X-Myheaderkey:\\s*([ ^\\s]*)
options_myextrafield1=EXTRACT:SUBJECT:([^\n]*)
objekti .objproperty5=EXTRACT:BODY:Minun Yritys nimeni on\\s([^\\s]*)

Käytä uutta riviä useiden ominaisuuksien poimimiseen tai määrittämiseen. +OperationParamDesc=Define the rules to use to extract some data or set values to use for operation.

Example to extract a company name from email subject into a temporary variable:
tmp_var=EXTRACT:SUBJECT:Message from company ([^\n]*)

Examples to set the properties of an object to create:
objproperty1=SET:a hard coded value
objproperty2=SET:__tmp_var__
objproperty3=SETIFEMPTY:a value (value is set only if property is not already defined)
objproperty4=EXTRACT:HEADER:X-Myheaderkey:\\s*([^\\s]*)
options_myextrafield1=EXTRACT:SUBJECT:([^\n]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a new line to extract or set several properties. OpeningHours=Aukioloajat OpeningHoursDesc=Yrityksen tavalliset aukioloajat ResourceSetup=Resurssimoduulin määritys @@ -2433,3 +2434,12 @@ UrlPublicInterfaceHelpAdmin=It is possible to define an alias to the web server ExportUseForce=Use the parameter -f ExportUseForceHelp=Force to continue the export even when an error is found (Backup may not be reliable) CustomPrompt=Custom prompts +AiDescription=AI (Artificial Intelligence) features +AiDescriptionLong=Provides AI (Artificial Intelligence) features in different part of the application. Need external AI API. +AI_KEY_API_CHATGPT= Key for ChatGPT IA api +AiSetup=AI module setup +AiCustomPrompt=AI customs prompt +AI_CONFIGURATIONS_PROMPT=Custom prompt +ImageGeneration=Image generation +AIPromptForFeatures=AI custom prompts for features +EnterAnIP=Enter an IP address diff --git a/htdocs/langs/fi_FI/agenda.lang b/htdocs/langs/fi_FI/agenda.lang index 874e4cca828..9bd147193b8 100644 --- a/htdocs/langs/fi_FI/agenda.lang +++ b/htdocs/langs/fi_FI/agenda.lang @@ -137,8 +137,8 @@ DateActionEnd=Lopetuspäivä AgendaUrlOptions1=Voit myös lisätä seuraavat parametrit suodattaa output: AgendaUrlOptions3=logina=%s rajoittaaksesi ulostulon käyttäjän omistamiin toimiin %s. AgendaUrlOptionsNotAdmin=logina=!%s rajoittaaksesi tulostuksen toimiin, jotka eivät ole muiden omistamia käyttäjä %s. -AgendaUrlOptions4=logint=%s tulostuksen rajoittamiseksi < käyttäjälle määritettyihin toimintoihin span class='notranslate'>
/span> muut). -AgendaUrlOptionsProject=project=__PROJECT_ID__ rajoittaaksesi tuotos toimiin, jotka on linkitetty projektiin b0aee83fz365 __PROJECT_ID__. +AgendaUrlOptions4=logint=%s to restrict output to actions assigned to user %s (owner and others). +AgendaUrlOptionsProject=project=__PROJECT_ID__ to restrict output to actions linked to project __PROJECT_ID__. AgendaUrlOptionsNotAutoEvent=notactiontype=systemauto automaattisten tapahtumien sulkemiseksi pois. AgendaUrlOptionsIncludeHolidays=includeholidays=1 sisällyttääksesi lomatapahtumat. AgendaShowBirthdayEvents=Yhteyshenkilöiden syntymäpäivät diff --git a/htdocs/langs/fi_FI/banks.lang b/htdocs/langs/fi_FI/banks.lang index 3de618b1090..5a3e7b113e6 100644 --- a/htdocs/langs/fi_FI/banks.lang +++ b/htdocs/langs/fi_FI/banks.lang @@ -190,6 +190,6 @@ NoBankAccountDefined=Ei pankkitili määritettyä NoRecordFoundIBankcAccount=Tietueita ei löytynyt kielellä pankkitili. Yleensä näin tapahtuu, kun tietue on poistettu manuaalisesti tapahtumaluettelosta pankkitili (esimerkiksi pankkitili täsmäytyksen aikana. span>). Toinen syy on se, että maksu tallennettiin, kun moduuli "%s" poistettiin käytöstä. AlreadyOneBankAccount=Yksi pankkitili on jo määritetty SEPAXMLPlacePaymentTypeInformationInCreditTransfertransactionInformation=SEPA-versio tiedosto -SEPAXMLPlacePaymentTypeInformationInCreditTransfertransactionInformationHelp=Kyllä = Tallenna 'maksu Type' SEPA-tiedoston Tilisiirto-osioon
b0342fccfda19b Kun luodaan SEPA XML tiedosto tilisiirtoja varten, PaymentTypeInformation-osio voidaan nyt sijoittaa "CreditTransferTransactionInformation"-osioon (maksu"-osio). Suosittelemme jättämään tämän valitsematta, jotta PaymentTypeInformation sijoitetaan maksu-tasolle, koska kaikki pankit eivät välttämättä hyväksy sitä CreditTransferTransactionInformation-tasolla. Ota yhteyttä pankkiisi ennen kuin asetat PaymentTypeInformation CreditTransferTransactionInformation-tasolle. +SEPAXMLPlacePaymentTypeInformationInCreditTransfertransactionInformationHelp=Yes = Store 'Payment Type' in 'Credit Transfer' section of SEPA file

When generating a SEPA XML file for Credit transfers, the section "PaymentTypeInformation" can now be placed inside the "CreditTransferTransactionInformation" section (instead of "Payment" section). We strongly recommend to keep this unchecked to place PaymentTypeInformation at Payment level, as all banks will not necessarily accept it at CreditTransferTransactionInformation level. Contact your bank before placing PaymentTypeInformation at CreditTransferTransactionInformation level. ToCreateRelatedRecordIntoBank=Vastaanottajalle luo puuttuu liittyvä pankkitietue XNewLinesConciliated=%s uusi rivi(ä) sovittu diff --git a/htdocs/langs/fi_FI/bills.lang b/htdocs/langs/fi_FI/bills.lang index baf9e2ccecb..48d90e3358f 100644 --- a/htdocs/langs/fi_FI/bills.lang +++ b/htdocs/langs/fi_FI/bills.lang @@ -28,7 +28,7 @@ InvoiceProFormaDesc=Proforma lasku on todellinen lasku, mutta sillä ei o InvoiceReplacement=Korvaava lasku InvoiceReplacementShort=Korvaus InvoiceReplacementAsk=Laskun korvaava lasku -InvoiceReplacementDesc=Korvaava lasku käytetään korvaamaan kokonaan lasku, jossa ei ole b0f70b5017f16. jo vastaanotettu.

Huomaa: vain laskut, joissa ei ole maksu voidaan vaihtaa. Jos korvaamasi lasku ei ole vielä suljettu, se suljetaan automaattisesti hylätyksi. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Menoilmoitus InvoiceAvoirAsk=Menoilmoitus korjata laskun InvoiceAvoirDesc=hyvityslasku on negatiivinen lasku, jota käytetään korjaamaan se tosiasia, että laskussa näkyy summa, joka poikkeaa todellisesta summasta. maksettu (esim. asiakas maksoi liikaa vahingossa tai ei maksa koko summaa, koska tuotteet palautettiin). @@ -93,6 +93,9 @@ CodePaymentMode=maksu -menetelmä (koodi) LabelPaymentMode=maksu -menetelmä (tunniste) PaymentModeShort=maksu -menetelmä PaymentTerm=maksu Termi +IdPaymentTerm=Payment term (id) +CodePaymentTerm=Payment term (code) +LabelPaymentTerm=Payment term (label) PaymentConditions=Maksuehdot PaymentConditionsShort=Maksuehdot PaymentAmount=Maksusumma @@ -151,7 +154,7 @@ BillShortStatusClosedPaidPartially=Maksettu (osittain) PaymentStatusToValidShort=Validoida ErrorVATIntraNotConfigured=Yhteisön sisäistä ALV-numeroa ei ole vielä määritetty ErrorNoPaiementModeConfigured=Tyyppiä oletus maksu ei ole määritetty. Korjaa tämä siirtymällä Laskumoduulin asetuksiin. -ErrorCreateBankAccount=luo a pankkitili ja siirry sitten Laskumoduulin asetuspaneeliin ja määritä b0f70b5017f > tyyppejä +ErrorCreateBankAccount=Create a bank account, then go to Setup panel of Invoice module to define payment types ErrorBillNotFound=Lasku %s ei ole olemassa ErrorInvoiceAlreadyReplaced=Virhe, yritit vahvistaa laskun korvataksesi laskun %s. Mutta tämä on jo korvattu laskulla %s. ErrorDiscountAlreadyUsed=Virhe, alennus jo käytössä @@ -207,7 +210,7 @@ ConfirmClassifyPaidPartiallyReasonDiscountVatDesc=Joissakin maissa tämä valint ConfirmClassifyPaidPartiallyReasonAvoirDesc=Käytä tätä vaihtoehtoa, jos kaikki muut ei sovi ConfirmClassifyPaidPartiallyReasonBadCustomerDesc=huono asiakas on asiakas, joka kieltäytyy maksamasta velkansa. ConfirmClassifyPaidPartiallyReasonProductReturnedDesc=Tämä valinta on käytössä, kun maksua ei ole täydellinen, koska jotkut tuotteet on palautettu -ConfirmClassifyPaidPartiallyReasonBankChargeDesc=Maksamaton summa on välittäjäpankkimaksut, joka vähennetään suoraan b0aee833658oikea summa
, jonka asiakas on maksanut. +ConfirmClassifyPaidPartiallyReasonBankChargeDesc=The unpaid amount is intermediary bank fees, deducted directly from the correct amount paid by the Customer. ConfirmClassifyPaidPartiallyReasonWithholdingTaxDesc=Maksamatonta summaa ei koskaan makseta, koska se on ennakonpidätys vero ConfirmClassifyPaidPartiallyReasonOtherDesc=Käytä tätä vaihtoehtoa, jos kaikki muut eivät sovellu, esimerkiksi seuraavassa tilanteessa:
- maksu ei ole valmis, koska jokin tuotteet lähetettiin takaisin
– vaadittu summa liian tärkeäksi, koska alennus unohdettiin
Kaikissa tapauksissa ylikorjattu määrä on korjattava kirjanpitojärjestelmässä luomalla hyvityslasku. ConfirmClassifyPaidPartiallyReasonBadSupplierDesc=huono toimittaja on toimittaja, jota kieltäydymme maksamasta. @@ -561,14 +564,14 @@ NoteListOfYourUnpaidInvoices=Huomautus: Tämä luettelo sisältää vain laskut RevenueStamp=vero leima YouMustCreateInvoiceFromThird=Tämä vaihtoehto on käytettävissä vain luotaessa laskua kolmannen osapuolen "Asiakas"-välilehdeltä YouMustCreateInvoiceFromSupplierThird=Tämä vaihtoehto on käytettävissä vain, kun luot laskun kolmannen osapuolen välilehdeltä "Toimittaja" -YouMustCreateStandardInvoiceFirstDesc=Sinun on luo vakiolasku ja muutettava se malliksi luo /span> uusi laskupohja +YouMustCreateStandardInvoiceFirstDesc=You have to create a standard invoice first and convert it to "template" to create a new template invoice PDFCrabeDescription=Laskun PDF-malli Crabe. Täydellinen laskumalli (vanha Sponge-mallin toteutus) PDFSpongeDescription=Laskun PDF-malli Sponge. Täydellinen laskumalli PDFCrevetteDescription=Lasku PDF-malli Crevette. Täydellinen laskumalli tilannelaskuille -TerreNumRefModelDesc1=Palautusnumero muodossa %syymm-nnnn vakiolaskuille ja b0ecb2ec87f49 yymm-nnnn hyvityslaskuille, joissa yy on vuosi, mm on kuukausi ja nnnn on peräkkäinen automaattisesti kasvava luku ilman taukoa ja > ei paluuta nollaan -MarsNumRefModelDesc1=Palautusnumero muodossa %syymm-nnnn vakiolaskuille, %syymm-nnnn korvaavalle laskulle, %syymm-nnnn osamaksu laskuille jayymm-nnnn hyvityslaskuille, joissa yy on vuosi, mm on kuukausi ja nnnn on peräkkäinen automaattisesti kasvava luku ilman taukoa b0ae6e9e5925a0z /span> ei paluuta arvoon 0 +TerreNumRefModelDesc1=Return number in the format %syymm-nnnn for standard invoices and %syymm-nnnn for credit notes where yy is year, mm is month and nnnn is a sequential auto-incrementing number with no break and no return to 0 +MarsNumRefModelDesc1=Return number in the format %syymm-nnnn for standard invoices, %syymm-nnnn for replacement invoices, %syymm-nnnn for down payment invoices and %syymm-nnnn for credit notes where yy is year, mm is month and nnnn is a sequential auto-incrementing number with no break and no return to 0 TerreNumRefModelError=A bill alkaen $ syymm jo olemassa, ja ei ole yhteensopiva tämän mallin järjestyksessä. Poistaa sen tai nimetä sen aktivoida tämän moduulin. -CactusNumRefModelDesc1=Palautusnumero muodossa %syymm-nnnn vakiolaskuille, %syymm-nnnn hyvityslaskuille ja %syymm-nnnn osamaksu laskuille, joissa kuukausi yy on luokka, mm 'notranslate'>ja nnnn on peräkkäinen automaattisesti kasvava luku ilman taukoa ja ei paluuta nollaan +CactusNumRefModelDesc1=Return number in the format %syymm-nnnn for standard invoices, %syymm-nnnn for credit notes and %syymm-nnnn for down payment invoices where yy is year, mm is month and nnnn is a sequential auto-incrementing number with no break and no return to 0 EarlyClosingReason=Syy ennenaikaiseen sulkemiseen EarlyClosingComment=Varhainen päätöshuomautus ##### Types de contacts ##### @@ -609,8 +612,8 @@ PDFCrevetteSituationInvoiceLine=Tilanne N°%s: Laskutus N°%s osoitteessa %s TotalSituationInvoice=Kokonaistilanne invoiceLineProgressError=Laskun rivin edistyminen ei voi olla suurempi tai yhtä suuri kuin seuraava laskurivi updatePriceNextInvoiceErrorUpdateline=Virhe: päivitä hinta laskuriville: %s -ToCreateARecurringInvoice=Jos haluat luo tämän sopimuksen toistuvan laskun, luo tämä Luonnos , muunna se sitten laskumalliksi ja määritä tulevien laskujen luontitiheys. -ToCreateARecurringInvoiceGene=Voit luoda tulevat laskut säännöllisesti ja manuaalisesti siirtymällä kohtaan valikko span class='notranslate'>%s - %s - %sb01f65c07 /span>. +ToCreateARecurringInvoice=To create a recurring invoice for this contract, first create this draft invoice, then convert it into an invoice template and define the frequency for generation of future invoices. +ToCreateARecurringInvoiceGene=To generate future invoices regularly and manually, just go on menu %s - %s - %s. ToCreateARecurringInvoiceGeneAuto=Jos sinun on luotava tällaiset laskut automaattisesti, pyydä järjestelmänvalvojaa ottamaan käyttöön ja asennusmoduuli %s. Huomaa, että molempia menetelmiä (manuaalinen ja automaattinen) voidaan käyttää yhdessä ilman päällekkäisyyden vaaraa. DeleteRepeatableInvoice=Poista laskupohja ConfirmDeleteRepeatableInvoice=Haluatko varmasti poistaa kohteen laskupohja? diff --git a/htdocs/langs/fi_FI/blockedlog.lang b/htdocs/langs/fi_FI/blockedlog.lang index 44b8923cc81..813de4b58fb 100644 --- a/htdocs/langs/fi_FI/blockedlog.lang +++ b/htdocs/langs/fi_FI/blockedlog.lang @@ -20,7 +20,7 @@ Fingerprint=Sormenjälki DownloadLogCSV=Vie arkistoidut lokit (CSV) DataOfArchivedEvent=Täydelliset tiedot arkistoidusta tapahtumasta ImpossibleToReloadObject=Alkuperäistä objektia (tyyppi %s, tunnus %s) ei ole linkitetty (katso "Täydelliset tiedot" -sarake saadaksesi muuttumattomia tallennettuja tietoja) -BlockedLogAreRequiredByYourCountryLegislation=Maasi lainsäädäntö saattaa edellyttää muuttumattomien lokien moduulia. Tämän moduulin poistaminen käytöstä voi tehdä tulevista tapahtumista mitättömiä ja laillisten ohjelmistojen käytön kannalta, koska niitä ei voi vahvistaa vero<. /span> tarkastus. +BlockedLogAreRequiredByYourCountryLegislation=Unalterable Logs module may be required by the legislation of your country. Disabling this module may render any future transactions invalid with respect to the law and the use of legal software as they can not be validated by a tax audit. BlockedLogActivatedBecauseRequiredByYourCountryLegislation=Muuttamattomat lokit -moduuli otettiin käyttöön maasi lainsäädännön vuoksi. Tämän moduulin poistaminen käytöstä voi tehdä tulevista tapahtumista mitättömiä ja laillisten ohjelmistojen käytön kannalta, koska niitä ei voi vahvistaa vero. span> tarkastus. BlockedLogDisableNotAllowedForCountry=Luettelo maista, joissa tämän moduulin käyttö on pakollista (että moduulia ei voida poistaa käytöstä virheellisesti, jos maasi on tässä luettelossa, moduulin poistaminen käytöstä ei ole mahdollista muokkaamatta ensin tätä luetteloa. Huomaa myös, että tämän moduulin käyttöönotto/poistaminen käytöstä seurata muuttumatonta Loki). OnlyNonValid=Ei kelvollinen diff --git a/htdocs/langs/fi_FI/cashdesk.lang b/htdocs/langs/fi_FI/cashdesk.lang index 023dcb35c6a..9d5662fd89b 100644 --- a/htdocs/langs/fi_FI/cashdesk.lang +++ b/htdocs/langs/fi_FI/cashdesk.lang @@ -97,7 +97,7 @@ ReceiptPrinterMethodDescription=Tehokas menetelmä, jossa on paljon parametreja. ByTerminal=Terminaalin kautta TakeposNumpadUsePaymentIcon=Käytä kuvaketta tekstin sijaan numeronäppäimistön maksu painikkeissa CashDeskRefNumberingModules=Numerointimoduuli POS-myyntiin -CashDeskGenericMaskCodes6 =
{TN}b09f47f8 span> -tunnistetta käytetään terminaalin numeron lisäämiseen +CashDeskGenericMaskCodes6 =
{TN} tag is used to add the terminal number TakeposGroupSameProduct=Yhdistä saman tuotteet rivit StartAParallelSale=Aloita uusi rinnakkaismyynti SaleStartedAt=Alennusmyynti alkoi %s @@ -136,7 +136,7 @@ PrintWithoutDetailsLabelDefault=Viivatarra, kirjoittaja oletus tulostuksessa ilm PrintWithoutDetails=Tulosta ilman yksityiskohtia YearNotDefined=Vuotta ei ole määritelty TakeposBarcodeRuleToInsertProduct=viivakoodi sääntö tuotteen lisäämiseksi -TakeposBarcodeRuleToInsertProductDesc=Sääntö tuoteviitteen ja määrän poimimiseksi skannatusta viivakoodi.
Jos tyhjä ( oletus arvo), sovellus käyttää koko viivakoodi skannattua tuotetta löytääkseen tuotteen.

Jos on määritetty, syntaksin on oltava:
ref:NB+qu:NB+qd :NB+other:NB
jossa NB on merkkien määrä tietojen poimimiseen skannatusta viivakoodi
ja:
refb7b7f8 : tuoteviite
qu : määrä asetettava milloin lisäämällä nimike (yksiköt)
qd : määrä asettaa kun kohteen lisääminen (desimaalit)
muu: muut merkit +TakeposBarcodeRuleToInsertProductDesc=Rule to extract the product reference + a quantity from a scanned barcode.
If empty (default value), application will use the full barcode scanned to find the product.

If defined, syntax must be:
ref:NB+qu:NB+qd:NB+other:NB
where NB is the number of characters to use to extract data from the scanned barcode with:
ref : product reference
qu : quantity to set when inserting item (units)
qd : quantity to set when inserting item (decimals)
other : others characters AlreadyPrinted=Jo painettu HideCategories=Piilota koko luokkavalintaosio HideStockOnLine=Piilota varasto verkossa @@ -149,7 +149,7 @@ TerminalNameDesc=Päätteen nimi DefaultPOSThirdLabel=TakePOS-yleinen asiakas DefaultPOSCatLabel=Myyntipiste (POS) tuotteet DefaultPOSProductLabel=Tuoteesimerkki TakePOS:lle -TakeposNeedsPayment=TakePOS tarvitsee maksu-menetelmän toimiakseen, haluatko luo maksu > menetelmä 'Käteisvarat'? +TakeposNeedsPayment=TakePOS needs a payment method to work, do you want to create the payment method 'Cash'? LineDiscount=Linja-alennus LineDiscountShort=Linjalevy. InvoiceDiscount=Laskun alennus diff --git a/htdocs/langs/fi_FI/companies.lang b/htdocs/langs/fi_FI/companies.lang index 12790e11285..56d619c971b 100644 --- a/htdocs/langs/fi_FI/companies.lang +++ b/htdocs/langs/fi_FI/companies.lang @@ -493,7 +493,7 @@ CurrentOutstandingBill=Avoin lasku OutstandingBill=Avointen laskujen enimmäismäärä OutstandingBillReached=Avointen laskujen enimmäismäärä saavutettu OrderMinAmount=Vähimmäistilausmäärä -MonkeyNumRefModelDesc=Palauta numero muodossa %syymm-nnnn asiakaskoodille ja b0ecb2ec87f49fez span>yymm-nnnn Toimittaja-koodille, jossa yy on vuosi, mm on kuukausi ja nnnn on peräkkäinen automaattisesti kasvava numero ilman taukoa ja ei paluuta nollaan. +MonkeyNumRefModelDesc=Return a number in the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequential auto-incrementing number with no break and no return to 0. LeopardNumRefModelDesc=Asiakas / toimittaja-koodi on maksuton. Tämä koodi voidaan muuttaa milloin tahansa. ManagingDirectors=Johtajien nimet (TJ, johtaja, päällikkö...) MergeOriginThirdparty=Monista sidosryhmä (sidosryhmä jonka haluat poistaa) diff --git a/htdocs/langs/fi_FI/compta.lang b/htdocs/langs/fi_FI/compta.lang index 0b4c813a205..1aedac8f878 100644 --- a/htdocs/langs/fi_FI/compta.lang +++ b/htdocs/langs/fi_FI/compta.lang @@ -165,32 +165,32 @@ CalcModeEngagement=Tunnettujen kirjattujen maksujen analyysi CalcModePayment=Tunnettujen kirjattujen maksujen analyysi CalcModeBookkeeping=Kirjanpitorekisteritaulukkoon kirjattujen tietojen analyysi. CalcModeNoBookKeeping=Vaikka niitä ei vielä ole kirjattu Ledgeriin -CalcModeLT1= Tila %sRE asiakaslaskuissa – Toimittajat class= laskut 'notranslate'>%s +CalcModeLT1= Mode %sRE on customer invoices - suppliers invoices%s CalcModeLT1Debt=Tila %sRE asiakaslaskuissa%s CalcModeLT1Rec= Tila %sRE Toimittajat laskuissa%s -CalcModeLT2= Tila %sIRPF asiakaslaskuissa – Toimittajat class= laskut 'notranslate'>%s +CalcModeLT2= Mode %sIRPF on customer invoices - suppliers invoices%s CalcModeLT2Debt=Tila %sIRPF asiakaslaskuissa%s CalcModeLT2Rec= Tila %sIRPF Toimittajat laskuissa%s AnnualSummaryDueDebtMode=saldo tuloista ja kuluista, vuosiyhteenveto AnnualSummaryInputOutputMode=saldo tuloista ja kuluista, vuosiyhteenveto AnnualByCompanies=saldo tuloista ja kuluista ennalta määritettyjen tiliryhmien mukaan -AnnualByCompaniesDueDebtMode=saldo tuloista ja kuluista, yksityiskohtaiset tiedot ennalta määritettyjen ryhmien mukaan, tila span class='notranslate'>%sClaims-Debts%s sanoi %sTulot ja kulut%s
sanoi päiväys. +RulesResultDue=- It includes all invoices, expenses, VAT, donations, salaries, whether they are paid or not.
- It is based on the billing date of invoices and on the due date for expenses or tax payments. For salaries, the date of end of period is used. RulesResultInOut=- Se sisältää todelliset laskut, kulut, arvonlisäveron ja palkat.
– Se perustuu maksu päivämäärät laskuihin, kuluihin , ALV, lahjoitukset ja palkat. RulesCADue=- Se sisältää asiakkaan erääntyneet laskut riippumatta siitä, onko ne maksettu vai ei.
– Se perustuu näiden laskujen päiväys laskutukseen.
-RulesCAIn=- Se sisältää kaikki osoitteesta asiakkaat saatujen laskujen maksut.
- Se perustuu maksu päiväys näistä laskuista
+RulesCAIn=- It includes all the effective payments of invoices received from customers.
- It is based on the payment date of these invoices
RulesCATotalSaleJournal=Se sisältää kaikki myyntipäiväkirjan luottorajat. RulesSalesTurnoverOfIncomeAccounts=Se sisältää (hyvitys-veloitus) tuotetilien rivejä kohdassa ryhmä TULOT RulesAmountOnInOutBookkeepingRecord=Se sisältää Reskontrasi tietueen kirjanpitotilit, jossa on ryhmä "KULUT" tai "TULO" RulesResultBookkeepingPredefined=Se sisältää Reskontrasi tietueen kirjanpitotilit, jossa on ryhmä "KULUT" tai "TULO" -RulesResultBookkeepingPersonalized=Se näyttää kirjanpidossasi tietueen kirjanpitotilit ryhmiteltynä henkilökohtaisten ryhmien mukaanb09a4b739f17f8 -SeePageForSetup=Katso valikko %sb0c0e470 /span> määritystä varten +RulesResultBookkeepingPersonalized=It show record in your Ledger with accounting accounts grouped by personalized groups +SeePageForSetup=See menu %s for setup DepositsAreNotIncluded=- osamaksu laskut eivät sisälly DepositsAreIncluded=- osamaksu laskut sisältyvät LT1ReportByMonth=vero 2 raportti kuukausittain @@ -247,7 +247,7 @@ LinkedOrder=Linkki Tilauksiin Mode1=Menetelmä 1 Mode2=Menetelmä 2 CalculationRuleDesc=Kokonaisarvonlisäveron laskemiseen on kaksi menetelmää:
Menetelmä 1 pyöristää kunkin rivin alv:t ja laskee ne sitten yhteen.
Menetelmä 2 laskee yhteen jokaisen rivin alv:t ja pyöristää sitten tuloksen.
Lopullinen tulos voi poiketa muutamasta sentistä. oletus tila on tila %s . -CalculationRuleDescSupplier=Valitse Toimittaja mukaan sopiva menetelmä saman laskentasäännön soveltamiseksi. ja saat saman tuloksen, jota Toimittaja. +CalculationRuleDescSupplier=According to vendor, choose appropriate method to apply same calculation rule and get same result expected by your vendor. TurnoverPerProductInCommitmentAccountingNotRelevant=Tuotekohtaisesti kerätty liikevaihtoraportti ei ole saatavilla. Tämä raportti on saatavilla vain laskutetulle liikevaihdolle. TurnoverPerSaleTaxRateInCommitmentAccountingNotRelevant=Raportti liikevaihdosta, joka on kerätty myyntiä kohden vero, ei ole saatavilla. Tämä raportti on saatavilla vain laskutetulle liikevaihdolle. CalculationMode=Laskentatila @@ -294,7 +294,7 @@ LabelToShow=Lyhyt etiketti PurchaseTurnover=Hankinta liikevaihto PurchaseTurnoverCollected=Hankinta liikevaihto kerätty RulesPurchaseTurnoverDue=- Se sisältää toimittaja:n erääntyneet laskut riippumatta siitä, onko ne maksettu vai ei.
– Se perustuu näiden laskujen päiväys laskuun.
-RulesPurchaseTurnoverIn=- Se sisältää kaikki tehokkaat laskujen maksut numeroon Toimittajat.
- Se perustuu maksu päiväys näistä laskuista
+RulesPurchaseTurnoverIn=- It includes all the effective payments of invoices done to suppliers.
- It is based on the payment date of these invoices
RulesPurchaseTurnoverTotalPurchaseJournal=Se sisältää kaikki veloitusrivit Hankinta päiväkirjasta. RulesPurchaseTurnoverOfExpenseAccounts=Se sisältää (veloitus - hyvitys) tuotetilien rivejä ryhmä EXPENSE ReportPurchaseTurnover=Hankinta liikevaihto laskutettu diff --git a/htdocs/langs/fi_FI/cron.lang b/htdocs/langs/fi_FI/cron.lang index 39b46dd367c..01d999e63e4 100644 --- a/htdocs/langs/fi_FI/cron.lang +++ b/htdocs/langs/fi_FI/cron.lang @@ -1,6 +1,5 @@ # Dolibarr language file - Source file is en_US - cron -# About page -# Right +# Permissions Permission23101 = Lue Ajastettu työ Permission23102 = luo/update Suunniteltu työ Permission23103 = Poista Ajastettu työ @@ -78,7 +77,7 @@ CronType_method=PHP-luokan kutsumenetelmä CronType_command=Shell-komento CronCannotLoadClass=Luokkaa tiedosto %s ei voi ladata (käytä luokkaa %s) CronCannotLoadObject=Luokka tiedosto %s ladattiin, mutta objektia %s ei löytynyt siitä -UseMenuModuleToolsToAddCronJobs=Siirry kohtaan valikko "Etusivu - Pääkäyttäjä -työtyökalut -
" nähdäksesi ja muokkaa ajoitettuja töitä. +UseMenuModuleToolsToAddCronJobs=Go into menu "Home - Admin tools - Scheduled jobs" to see and edit scheduled jobs. JobDisabled=Työ estetty MakeLocalDatabaseDumpShort=Paikallinen tietokanta varmuuskopio MakeLocalDatabaseDump=luo paikallinen tietokanta kaatopaikka. Parametrit ovat: pakkaus ('gz' tai 'bz' tai 'none'), varmuuskopion tyyppi ('mysql', 'pgsql', 'auto'), 1, 'auto' tai rakennettava tiedostonimi, säilytettävien varmuuskopiotiedostojen määrä diff --git a/htdocs/langs/fi_FI/errors.lang b/htdocs/langs/fi_FI/errors.lang index a5dc4cb57fb..02268452a07 100644 --- a/htdocs/langs/fi_FI/errors.lang +++ b/htdocs/langs/fi_FI/errors.lang @@ -16,7 +16,7 @@ ErrorEmailAlreadyExists=Sähköposti %s on jo olemassa. ErrorRecordNotFound=Levykauppa ei löytynyt. ErrorRecordNotFoundShort=Ei löydetty ErrorFailToCopyFile=Epäonnistui kopioida tiedoston %s ilmaisuksi %s ". -ErrorFailToCopyDir=Hakemiston %s kopioiminen hakemistoon epäonnistui. ='notranslate'>
%s'. +ErrorFailToCopyDir=Failed to copy directory '%s' into '%s'. ErrorFailToRenameFile=Epäonnistui nimetä tiedoston %s ilmaisuksi %s ". ErrorFailToDeleteFile=Epäonnistui poistaa tiedoston ' %s'. ErrorFailToCreateFile=Luominen epäonnistui file ' %s'. @@ -24,7 +24,7 @@ ErrorFailToRenameDir=Epäonnistui nimetä directory ' %s' osaksi' %s'. ErrorFailToCreateDir=Luominen epäonnistui directory ' %s'. ErrorFailToDeleteDir=Poistaminen ei onnistunut directory ' %s'. ErrorFailToMakeReplacementInto=Epäonnistui korvaaminen muotoon tiedosto '%s'. -ErrorFailToGenerateFile=tiedosto '%s
'. +ErrorFailToGenerateFile=Failed to generate file '%s'. ErrorThisContactIsAlreadyDefinedAsThisType=Tämä yhteys on jo määritelty yhteyttä tämän tyypin osalta. ErrorCashAccountAcceptsOnlyCashMoney=Tämä pankkitili on käteistä huomioon, joten se hyväksyy maksujen tyypin käteisellä vain. ErrorFromToAccountsMustDiffers=Lähde ja tavoitteet pankkitilit on erilainen. @@ -79,9 +79,9 @@ ErrorNoValueForSelectType=Täytä arvo valintalistaa varten ErrorNoValueForCheckBoxType=Täytä valintaruutuluettelon arvo ErrorNoValueForRadioType=Ole hyvä ja täytä radioluettelon arvo ErrorBadFormatValueList=Luetteloarvossa voi olla vain yksi pilkku: %s, mutta tarvitset ainakin yhden: avain,arvo -ErrorFieldCanNotContainSpecialCharacters=Kenttä %sb09f17f7309f17f8 /span> ei saa sisältää erikoismerkkejä. -ErrorFieldCanNotContainSpecialNorUpperCharacters=Kenttä %sb09f17f7309f17f8 /span> ei saa sisältää erikoismerkkejä eikä isoja kirjaimia, ja on aloitettava aakkosmerkillä (a-z) -ErrorFieldMustHaveXChar=Kenttä %sb09f17f7309f17f8 /span>:ssa on oltava vähintään %s merkkiä. +ErrorFieldCanNotContainSpecialCharacters=The field %s must not contains special characters. +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field %s must not contain special characters, nor upper case characters, and must start with an alphabetical character (a-z) +ErrorFieldMustHaveXChar=The field %s must have at least %s characters. ErrorNoAccountancyModuleLoaded=O kirjanpito moduuli aktivoitu ErrorExportDuplicateProfil=Tämä profiilinimi on jo olemassa tälle vientijoukolle. ErrorLDAPSetupNotComplete=Dolibarr-LDAP yhteensovitus ei ole täydellinen. @@ -93,11 +93,11 @@ ErrorRecordHasAtLeastOneChildOfType=Objektilla %s on vähintään yksi alatason ErrorRecordIsUsedCantDelete=Tietuetta ei voi poistaa. Se on jo käytetty tai sisällytetty toiseen objektiin. ErrorModuleRequireJavascript=JavaScriptiä ei saa poistaa käytöstä, jotta tämä ominaisuus toimisi. Ota JavaScript käyttöön tai poista se käytöstä siirtymällä kohtaan valikko Etusivu->Asetukset->Näyttö. ErrorPasswordsMustMatch=Molemmat kirjoittaa salasanat on vastattava toisiaan -ErrorContactEMail=Tapahtui tekninen virhe. Ota yhteyttä järjestelmänvalvojaan seuraavaan sähköpostiin %s ja anna virhekoodi %s34f18b09 span> viestiisi tai lisää näyttökopio tästä sivusta. +ErrorContactEMail=A technical error occurred. Please, contact administrator to following email %s and provide the error code %s in your message, or add a screen copy of this page. ErrorWrongValueForField=Kenttä %sb09f4b730 span>: '%s' ei vastaa regex-sääntöä %s ErrorHtmlInjectionForField=Kenttä %sb09f4b730 span>: Arvo %s sisältää haitallista tietoa ei sallittu ErrorFieldValueNotIn=Kenttä %sb09f4b730 span>: '%s' ei löydy arvosta Kenttä %sb09f4b730 span> / %s -ErrorFieldRefNotIn=Kenttä %sb09f4b730 span>: '%s' ei ole %s olemassa oleva viite +ErrorFieldRefNotIn=Field %s: '%s' is not a %s existing ref ErrorMultipleRecordFoundFromRef=Useita tietueita löytyi haettaessa viitteestä %s. Ei voi tietää, mitä tunnusta käyttää. ErrorsOnXLines=%s virhettä löydetty ErrorFileIsInfectedWithAVirus=Virustentorjuntaohjelma ei voinut tarkistaa tiedoston (tiedosto saattaa olla tartunnan virus) @@ -134,7 +134,7 @@ ErrorLoginDoesNotExists=Käyttäjälle sisäänkirjoittautumissivuksesi %s%sb0af65c07910f65d span> ei voi olla negatiivinen tämän tyyppisessä laskussa. Jos sinun on lisättävä alennusrivi, luo alennus ensin (osoitteesta Kenttä ' %s' kolmannen osapuolen kortissa) ja käytä sitä laskussa. +ErrorFieldCantBeNegativeOnInvoice=Field %s cannot be negative on this type of invoice. If you need to add a discount line, just create the discount first (from field '%s' in third-party card) and apply it to the invoice. ErrorLinesCantBeNegativeForOneVATRate=Rivien kokonaismäärä (ilman vero) ei voi olla negatiivinen annetulle ei nolla-arvonlisäverokannalle (Löytyi negatiivinen kokonaissumma ALV-prosentille %s%%). ErrorLinesCantBeNegativeOnDeposits=Rivit eivät voi olla negatiivisia talletuksissa. Kohtaat ongelmia, kun joudut käyttämään talletuksen loppulaskussa, jos teet niin. ErrorQtyForCustomerInvoiceCantBeNegative=Asiakaslaskujen rivin määrä ei voi olla negatiivinen @@ -154,7 +154,7 @@ ErrorFailedToAddContact=Yhteystiedon lisääminen epäonnistui ErrorDateMustBeBeforeToday=päiväys on oltava pienempi kuin nykyään ErrorDateMustBeInFuture=päiväys on oltava suurempi kuin nykyään ErrorStartDateGreaterEnd=Alku päiväys on suurempi kuin loppu päiväys -ErrorPaymentModeDefinedToWithoutSetup=maksu-tila asetettiin tyypiksi %s, mutta moduulin Lasku määritystä ei suoritettu loppuun, jotta tälle maksu-tilassa. +ErrorPaymentModeDefinedToWithoutSetup=A payment mode was set to type %s but setup of module Invoice was not completed to define information to show for this payment mode. ErrorPHPNeedModule=Virhe, PHP:ssäsi on oltava asennettuna moduuli %s, jotta voit käyttää tätä ominaisuus. ErrorOpenIDSetupNotComplete=Määrität Dolibarr-määrityksen tiedosto sallimaan OpenID:n Autentikointi, mutta OpenID-palvelun URL-osoitetta ei ole määritetty vakioksi %s ErrorWarehouseMustDiffers=Lähteen ja kohde Varastot täytyy poiketa @@ -219,7 +219,7 @@ ErrorPhpMailDelivery=Varmista, että et käytä liian suurta määrää vastaano ErrorUserNotAssignedToTask=Käyttäjä on määritettävä tehtävään, jotta hän voi syöttää kulutetun ajan. ErrorTaskAlreadyAssigned=Tehtävä on jo määrätty käyttäjälle ErrorModuleFileSeemsToHaveAWrongFormat=Moduulipaketilla näyttää olevan väärä muoto. -ErrorModuleFileSeemsToHaveAWrongFormat2=Moduulin zip-tiedostossa on oltava vähintään yksi pakollinen hakemisto: %sb0a65d071f6fc9 > tai %s +ErrorModuleFileSeemsToHaveAWrongFormat2=At least one mandatory directory must exists into zip of module: %s or %s ErrorFilenameDosNotMatchDolibarrPackageRules=Moduulipaketin nimi (%s) ei täsmää odotetun nimen syntaksi: %s ErrorDuplicateTrigger=Virhe, kaksoiskäynnistimen nimi %s. Ladattu jo kohteesta %s. ErrorNoWarehouseDefined=Virhe, varastoa ei tunnistettu @@ -258,14 +258,14 @@ ErrorLanguageOfTranslatedPageIsSameThanThisPage=Virhe, käännetyn sivun Kieli o ErrorBatchNoFoundForProductInWarehouse=Tuotteelle "%s" ei löytynyt erää/sarjaa varastosta "%s". ErrorBatchNoFoundEnoughQuantityForProductInWarehouse=Ei tarpeeksi määrää tälle erälle/sarjalle tuotteelle "%s" varastossa "%s". ErrorOnlyOneFieldForGroupByIsPossible=Vain yksi Kenttä arvolle "ryhmä by" on mahdollinen (muut hylätään) -ErrorTooManyDifferentValueForSelectedGroupBy=Löytyi liian monta eri arvoa (yli %s) Kenttä '%sb09f17b73z0f14 /span>", joten emme voi käyttää sitä "ryhmä by" grafiikkaa varten. Kenttä 'ryhmä Tekijä' on poistettu. Ehkä halusit käyttää sitä X-akselina? +ErrorTooManyDifferentValueForSelectedGroupBy=Found too many different value (more than %s) for the field '%s', so we can't use it as a 'Group by' for graphics. The field 'Group By' has been removed. May be you wanted to use it as an X-Axis ? ErrorReplaceStringEmpty=Virhe, merkkijono, johon korvataan, on tyhjä -ErrorProductNeedBatchNumber=Virhe, tuote '%s' tarvitsee paljon/ class='notranslate'>Sarjanumero +ErrorProductNeedBatchNumber=Error, product '%s' need a lot/serial number ErrorProductDoesNotNeedBatchNumber=Virhe, tuote '%s' ei hyväksy erää/ Sarjanumero ErrorFailedToReadObject=Virhe, tyypin %s objektin lukeminen epäonnistui. ErrorParameterMustBeEnabledToAllwoThisFeature=Virhe, parametri %s on otettava käyttöön arvossa conf/conf.php<> salliaksesi sisäisen työn ajoituksen komentoriviliittymän käytön ErrorLoginDateValidity=Virhe, tämä kirjautuminen on kelpoisuusalueen päiväys ulkopuolella -ErrorValueLength=Kenttä '%s pituus ' on oltava suurempi kuin '%sb09af7f739 ' +ErrorValueLength=Length of field '%s' must be higher than '%s' ErrorReservedKeyword=Sana %s on varattu avainsana ErrorFilenameReserved=Tiedostonimeä %s ei voi käyttää, koska se on varattu ja suojattu komento. ErrorNotAvailableWithThisDistribution=Ei saatavilla tällä jakelulla @@ -308,7 +308,7 @@ ErrorTableNotFound=Taulukkoa %s ei löydy ErrorRefNotFound=Viite %s ei löydy ErrorValueForTooLow=Arvo %s on liian pieni ErrorValueCantBeNull=Arvo %s ei voi olla tyhjä -ErrorDateOfMovementLowerThanDateOfFileTransmission=Pankkitapahtuman päiväys ei voi olla pienempi kuin päiväys tiedosto<. /span> lähetys +ErrorDateOfMovementLowerThanDateOfFileTransmission=The date of the bank transaction can't be lower than the date of the file transmission ErrorTooMuchFileInForm=Liikaa tiedostoja muodossa, enimmäismäärä on %s tiedosto(s) ErrorSessionInvalidatedAfterPasswordChange=Istunto mitätöitiin salasanan, sähköpostiosoitteen, tilan tai päivämäärät voimassaolon muutoksen vuoksi. Ole hyvä ja kirjaudu uudelleen. ErrorExistingPermission = Lupa %s objektille %s on jo olemassa @@ -343,7 +343,7 @@ WarningPassIsEmpty=Varoitus, tietokannan salasana on tyhjä. Tämä on turvallis WarningConfFileMustBeReadOnly=Varoitus, config tiedosto (htdocs / conf / conf.php) voidaan korvata jonka web-palvelin. Tämä on vakava tietoturva-aukko. Muokkaa käyttöoikeuksia tiedoston luettavaksi vain tila-käyttöjärjestelmän käyttäjä käyttää Web-palvelimeen. Jos käytät Windows ja FAT oman levy, sinun täytyy tietää, että tämä tiedostojärjestelmä ei mahdollista lisätä käyttöoikeuksia tiedostoon, joten ei voi olla täysin turvallista. WarningsOnXLines=Varoitukset %s lähde linjat WarningNoDocumentModelActivated=Asiakirjojen luomiseen tarkoitettua mallia ei ole aktivoitu. oletus valitsee mallin, kunnes tarkistat moduulin asetukset. -WarningLockFileDoesNotExists=Varoitus, kun asennus on valmis, sinun on poistettava asennus-/siirtotyökalut käytöstä lisäämällä tiedosto install.lock hakemistoon %sb09. Tämän tiedosto luomisen jättäminen pois on vakava turvallisuusriski. +WarningLockFileDoesNotExists=Warning, once setup is finished, you must disable the installation/migration tools by adding a file install.lock into directory %s. Omitting the creation of this file is a grave security risk. WarningUntilDirRemoved=Tämä suojausvaroitus pysyy aktiivisena niin kauan kuin haavoittuvuus on olemassa. WarningCloseAlways=Varoitus, sulkeminen suoritetaan, vaikka määrä eroaisi lähde-ja kohdeelementtien välillä. Ota tämä ominaisuus käyttöön varoen. WarningUsingThisBoxSlowDown=Varoitus, tämän laatikon käyttäminen hidastaa vakavasti kaikkia laatikkoa näyttäviä sivuja. @@ -373,7 +373,7 @@ WarningModuleNeedRefresh = Moduuli %s on poistettu käytöstä. Älä uno WarningPermissionAlreadyExist=Tämän objektin nykyiset käyttöoikeudet WarningGoOnAccountancySetupToAddAccounts=Jos tämä luettelo on tyhjä, siirry kohtaan valikko %s - %s - %s ladataksesi tai luo tilikarttasi. WarningCorrectedInvoiceNotFound=Korjattua laskua ei löytynyt -WarningCommentNotFound=Tarkista alun ja loppukommenttien sijainti %s osiossa tiedosto b0ecb4fz87 ennen toimenpiteen lähettämistä +WarningCommentNotFound=Please check placement of start and end comments for %s section in file %s before submitting your action WarningAlreadyReverse=Osakeliikkeet ovat jo kääntyneet SwissQrOnlyVIR = SwissQR-lasku voidaan lisätä vain tilisiirtomaksuilla maksettaviin laskuihin. diff --git a/htdocs/langs/fi_FI/eventorganization.lang b/htdocs/langs/fi_FI/eventorganization.lang index ef2613838a0..6e6a0f7186b 100644 --- a/htdocs/langs/fi_FI/eventorganization.lang +++ b/htdocs/langs/fi_FI/eventorganization.lang @@ -36,7 +36,7 @@ EventOrganizationSetup=Tapahtuman järjestämisen asetukset EventOrganization=Tapahtuman järjestäminen EventOrganizationSetupPage = Tapahtumaorganisaation asetussivu EVENTORGANIZATION_TASK_LABEL = Tehtävien tunniste luo automaattisesti, kun projekti vahvistetaan -EVENTORGANIZATION_TASK_LABELTooltip = Kun vahvistat tapahtuman järjestämisen, projektissa voidaan luoda automaattisesti joitakin tehtäviä

Esimerkki:
Lähetä konferenssikutsu
Lähetä osastokutsu
KonferenssiehdotuksetVahvista ='notranslate'>
Vahvista Booths-hakemus
Avaa tapahtuman tilaukset osallistujille
tapahtuman puhujille
Lähetä muistutus tapahtumasta Boothin isännöijille
Lähetä muistutus tapahtumasta osallistujille +EVENTORGANIZATION_TASK_LABELTooltip = When you validate an event to organize, some tasks can be automatically created in the project

For example:
Send Call for Conferences
Send Call for Booths
Validate suggestions of Conferences
Validate application for Booths
Open subscriptions to the event for attendees
Send a remind of the event to speakers
Send a remind of the event to Booth hosters
Send a remind of the event to attendees EVENTORGANIZATION_TASK_LABELTooltip2=Pidä tyhjänä, jos sinun ei tarvitse luo tehdä tehtäviä automaattisesti. EVENTORGANIZATION_CATEG_THIRDPARTY_CONF = Kolmansille osapuolille lisättävä luokka, joka luodaan automaattisesti, kun joku ehdottaa konferenssia EVENTORGANIZATION_CATEG_THIRDPARTY_BOOTH = Kolmansille osapuolille lisättävä luokka luodaan automaattisesti, kun he ehdottavat osastoa @@ -88,6 +88,7 @@ PriceOfRegistration=Rekisteröinnin hinta PriceOfRegistrationHelp=Ilmoittautumisesta tai tapahtumaan osallistumisesta maksettava hinta PriceOfBooth=Tilaushinta kestämään koppi PriceOfBoothHelp=Tilaushinta kestämään koppi +EventOrganizationICSLinkProject=Link ICS for the event EventOrganizationICSLink=Linkitä ICS konferensseihin ConferenceOrBoothInformation=Tiedot konferenssista tai osastosta Attendees=Osallistujat diff --git a/htdocs/langs/fi_FI/exports.lang b/htdocs/langs/fi_FI/exports.lang index d0474d49609..2f20b92c11d 100644 --- a/htdocs/langs/fi_FI/exports.lang +++ b/htdocs/langs/fi_FI/exports.lang @@ -72,7 +72,7 @@ FieldsTarget=Kohdennettu kentät FieldTarget=Alalta FieldSource=Lähde kenttä NbOfSourceLines=Määrä riviä lähdetiedoston -NowClickToTestTheImport=Tarkista, että merkkijonojen tiedosto muoto (Kenttä ja) span class='notranslate'>tiedosto
vastaa näytettyjä vaihtoehtoja ja, että olet jättänyt otsikkorivin pois, tai ne merkitään virheiksi seuraavassa simulaatiossa.
Klikkaa %s " -painike suorittaa tiedosto rakenteen/sisällön tarkistuksen ja simuloi tuontiprosessia.
Tietokannassasi ei muuteta tietoja. +NowClickToTestTheImport=Check that the file format (field and string delimiters) of your file matches the options shown and that you have omitted the header line, or these will be flagged as errors in the following simulation.
Click on the "%s" button to run a check of the file structure/contents and simulate the import process.
No data will be changed in your database. RunSimulateImportFile=Suorita tuontisimulaatio FieldNeedSource=Tämä Kenttä vaatii tietoja lähteestä tiedosto SomeMandatoryFieldHaveNoSource=Jotkut pakolliset kentät eivät lähde tiedosto @@ -103,18 +103,18 @@ SourceRequired=Tiedon arvo on pakollinen SourceExample=Esimerkki mahdollisesta tietojen arvo ExampleAnyRefFoundIntoElement=Jos ref löytynyt elementin %s ExampleAnyCodeOrIdFoundIntoDictionary=Mikä tahansa sanakirjasta löytyvä koodi (tai tunnus) %s -CSVFormatDesc=Pilkuilla erotettu arvo tiedosto muoto (.csv). class='notranslate'>
Tämä on tiedosto tekstimuoto, jossa kentät erotetaan erottimella [ %s ]. Jos erotin löytyy Kenttä-sisällöstä, Kenttä pyöristetään pyöreällä merkillä [ %s ]. Esc-merkki pyöreäksi merkiksi on [ %s ]. +CSVFormatDesc=Comma Separated Value file format (.csv).
This is a text file format where fields are separated by a separator [ %s ]. If separator is found inside a field content, field is rounded by round character [ %s ]. Escape character to escape round character is [ %s ]. Excel95FormatDesc=Excel tiedosto muoto (.xls)
Tämä on alkuperäinen Excel 95 -muoto (BIFF5). Excel2007FormatDesc=Excel tiedosto muoto (.xlsx)
Tämä on alkuperäinen Excel 2007 -muoto (SpreadsheetML). -TsvFormatDesc=Sarkaimella erotettu arvo tiedosto muoto (.tsv) ='notranslate'>
Tämä on tiedosto tekstimuoto, jossa kentät on erotettu tabulaattorilla [sarkain]. +TsvFormatDesc=Tab Separated Value file format (.tsv)
This is a text file format where fields are separated by a tabulator [tab]. ExportFieldAutomaticallyAdded=Kenttä %sb09f4b730 span> lisättiin automaattisesti. Näin vältytään siltä, että samankaltaisia rivejä käsitellään päällekkäisinä tietueina (kun tämä Kenttä lisätään, kaikki rivit omistavat oman tunnuksensa ja span> vaihtelee). CsvOptions=CSV-muotoasetukset Separator=Kenttä Erotin Enclosure=Merkkijonojen erotin SpecialCode=Erikoiskoodi ExportStringFilter=%% sallii yhden tai useamman merkin korvaamisen tekstissä -ExportDateFilter=VVVV, VVVVKK, VVVVKKPP: suodattaa yhden vuoden/kuukauden/päivän mukaan
YYYY+YYYY, YYYYMM+YYYYMM, YYYYMMDD+YYYYMMDD: suodattaa
> VVVV, > VVVVKK, > VVVVKKPP: suodattaa kaikille seuraaville vuosille/kuukausille/päiville
< VVVVKK, NNNNN+NNNNN suodattaa arvoalueen yli
b08912a27ede2 /span>> NNNNN suodattaa korkeammilla arvoilla +ExportDateFilter=YYYY, YYYYMM, YYYYMMDD: filters by one year/month/day
YYYY+YYYY, YYYYMM+YYYYMM, YYYYMMDD+YYYYMMDD: filters over a range of years/months/days
> YYYY, > YYYYMM, > YYYYMMDD: filters on all following years/months/days
< YYYY, < YYYYMM, < YYYYMMDD: filters on all previous years/months/days +ExportNumericFilter=NNNNN filters by one value
NNNNN+NNNNN filters over a range of values
< NNNNN filters by lower values
> NNNNN filters by higher values ImportFromLine=Tuo rivin numerosta alkaen EndAtLineNb=Lopeta rivin numeroon ImportFromToLine=Rajoitusalue (Alkaen - Mihin). Esim. ohittaaksesi otsikkorivit. diff --git a/htdocs/langs/fi_FI/install.lang b/htdocs/langs/fi_FI/install.lang index b29587db107..a604568b537 100644 --- a/htdocs/langs/fi_FI/install.lang +++ b/htdocs/langs/fi_FI/install.lang @@ -2,11 +2,11 @@ InstallEasy=Seuraa ohjeita askel askeleelta. MiscellaneousChecks=Ehtojen tarkistus ConfFileExists=Asetustiedosto %s on olemassa. -ConfFileDoesNotExistsAndCouldNotBeCreated=Kokoonpano tiedosto %s ei ole kirjoitettava. Tarkista käyttöoikeudet. Ensiasennuksessa verkkopalvelimesi on kyettävä kirjoittamaan tähän tiedosto määritysprosessin aikana ("chmod 666" esimerkiksi Unix-tyyppisessä käyttöjärjestelmässä). +ConfFileIsNotWritable=Configuration file %s is not writable. Check permissions. For first install, your web server must be able to write into this file during configuration process ("chmod 666" for example on a Unix like OS). ConfFileIsWritable=Configuration file %s on kirjoitettavissa. -ConfFileMustBeAFileNotADir=Kokoonpano tiedosto %s -parametrin arvoksi vähintään %sb09a4f78 tavua. +PHPMemoryTooLow=Your PHP max session memory is set to %s bytes. This is too low. Change your php.ini to set memory_limit parameter to at least %s bytes. Recheck=Napsauta tätä saadaksesi tarkemman testin ErrorPHPDoesNotSupportSessions=PHP-asennus ei tue istuntoja. Tämä ominaisuus tarvitaan, jotta Dolibarr toimii. Tarkista istuntohakemiston PHP-asetusten ja käyttöoikeudet. ErrorPHPDoesNotSupport=PHP-asennus ei tue %s-toimintoja. @@ -56,7 +56,7 @@ CreateDatabase=Luo tietokanta CreateUser=luo käyttäjätili tai myönnä käyttäjätiliin käyttöoikeus Dolibarrissa tietokanta DatabaseSuperUserAccess=Tietokanta - SuperUser pääsy CheckToCreateDatabase=Valitse valintaruutu, jos tietokanta ei ole vielä olemassa ja, joten se on luotava.
Tässä tapauksessa sinun on myös täytettävä tämän sivun alareunaan pääkäyttäjätilin käyttäjänimi ja. -CheckToCreateUser=Valitse valintaruutu, jos:
tietokanta käyttäjätiliä ei vielä ole olemassa ja > joten se on luotava tai
jos käyttäjätili on olemassa, mutta tietokanta ei ole olemassa ja käyttöoikeudet on myönnettävä.
Tässä tapauksessa sinun on annettava käyttäjätili ja salasana ja myös pääkäyttäjätilin nimi
käyttöoikeudet. +YouAskLoginCreationSoDolibarrNeedToConnect=You selected create database user %s, but for this, Dolibarr needs to connect to server %s with super user %s permissions. BecauseConnectionFailedParametersMayBeWrong=Yhteys tietokanta epäonnistui: isäntä- tai pääkäyttäjäparametrien on oltava väärät. OrphelinsPaymentsDetectedByMethod=Orphelins maksu havaittu menetelmä %s RemoveItManuallyAndPressF5ToContinue=Poistaa sen manuaalisesti ja paina F5 jatkaa. @@ -132,7 +132,7 @@ MigrationFinished=Muuttoliike valmis LastStepDesc=Viimeinen vaihe: Määritä tähän kirjautumissalasana, ja käytä yhteyden muodostamiseen Dolibarriin. Älä hukkaa tätä, sillä se on päätili kaikkien muiden/lisäkäyttäjätilien hallinnassa. ActivateModule=Aktivoi moduuli %s ShowEditTechnicalParameters=Klikkaa tästä näyttääksesi/muuttaaksesi edistyneemmät parametrit (asiantuntija tila) -WarningUpgrade=Varoitus:\nTeitkö tietokanta varmuuskopion ensin?\nTämä on erittäin suositeltavaa. Tietojen katoaminen (esimerkiksi mysql-version 5.5.40/41/42/43 virheiden vuoksi) voi olla mahdollista tämän prosessin aikana, joten on tärkeää tehdä täydellinen vedos tietokanta<. /span> ennen kuin aloitat siirron.\n\nNapsauta OK aloittaaksesi siirtoprosessin... +WarningUpgrade=Warning:\nDid you run a database backup first?\nThis is highly recommended. Loss of data (due to for example bugs in mysql version 5.5.40/41/42/43) may be possible during this process, so it is essential to take a complete dump of your database before starting any migration.\n\nClick OK to start migration process... ErrorDatabaseVersionForbiddenForMigration=Versiosi tietokanta on %s. Siinä on kriittinen virhe, joka mahdollistaa tietojen menetyksen, jos teet siirtoprosessin edellyttämiä rakenteellisia muutoksia tietokanta. Tästä syystä siirtoa ei sallita, ennen kuin päivität tietokanta-laitteesi tasoversioksi (korjattu) (luettelo tunnetuista bugiisista versioista: %s) KeepDefaultValuesWamp=Käytit DoliWampin Dolibarrin ohjattua asennustoimintoa, joten tässä ehdotetut arvot on jo optimoitu. Muuta niitä vain, jos tiedät mitä olet tekemässä. KeepDefaultValuesDeb=Käytit Dolibarrin ohjattua asennustoimintoa Linux-paketista (Ubuntu, Debian, Fedora...), joten tässä ehdotetut arvot on jo optimoitu. Vain tietokanta omistajan salasana luo on annettava. Muuta muita parametreja vain, jos tiedät mitä olet tekemässä. @@ -191,7 +191,7 @@ MigrationProjectUserResp=Tietojen siirtäminen alalla fk_user_resp ja llx_projet MigrationProjectTaskTime=Päivitä aika sekunneissa MigrationActioncommElement=Päivitä tiedot toimista MigrationPaymentMode=maksu-tyypin tietojen siirto -MigrationCategorieAssociation=Kategorioiden siirto +MigrationCategorieAssociation=Kategorioiden siirto MigrationEvents=Tapahtumien siirto tapahtuman omistajan lisäämiseksi tehtävätaulukkoon MigrationEventsContact=Tapahtumien siirto tapahtuman yhteyshenkilön lisäämiseksi tehtävätaulukkoon MigrationRemiseEntity=Päivitä entiteetin Kenttä arvo llx_societe_remise diff --git a/htdocs/langs/fi_FI/mails.lang b/htdocs/langs/fi_FI/mails.lang index a024441f306..b8326f6cd55 100644 --- a/htdocs/langs/fi_FI/mails.lang +++ b/htdocs/langs/fi_FI/mails.lang @@ -143,11 +143,11 @@ MailSendSetupIs2=Sinun on ensin siirryttävä admin-tilillä valikkoon %sHome - MailSendSetupIs3=Jos sinulla on kysyttävää SMTP-palvelimen määrittämisestä, voit kysyä osoitteesta %s. YouCanAlsoUseSupervisorKeyword=Voit myös lisätä avainsanan __SUPERVISOREMAIL__, jotta sähköposti lähetetään käyttäjän valvojalle (toimii vain, jos sähköposti on määritelty tälle esimiehelle) NbOfTargetedContacts=Kohdistettujen yhteyssähköpostien nykyinen määrä -UseFormatFileEmailToTarget=Tuodun tiedosto muodon on oltava email;name;Etunimi;muu span class='notranslate'> -UseFormatInputEmailToTarget=Kirjoita merkkijono muodossa email;name;Etunimi;other +UseFormatFileEmailToTarget=Imported file must have format email;name;firstname;other +UseFormatInputEmailToTarget=Enter a string with format email;name;firstname;other MailAdvTargetRecipients=Vastaanottajat (tarkennettu valinta) AdvTgtTitle=Täytä syöttökentät valitaksesi kolmannet osapuolet tai yhteystiedot/osoitteet kohdistettavaksi -AdvTgtSearchTextHelp=Käytä %% jokerimerkeinä. Jos haluat esimerkiksi löytää kaikki kohteet, kuten jean, joe, jim, voit syöttää j%%, voit myös käyttää ; arvon erottimena ja käytä ! paitsi tämä arvo. Esimerkiksi jean;joe;jim%%;!jimo;!jima%% span> kohdistaa kaikkiin jeaneihin, joihin, jotka alkavat jimillä, mutta ei jimon ja ei kaikkeen, joka alkaa jimalla +AdvTgtSearchTextHelp=Use %% as wildcards. For example to find all item like jean, joe, jim, you can input j%%, you can also use ; as separator for value, and use ! for except this value. For example jean;joe;jim%%;!jimo;!jima%% will target all jean, joe, start with jim but not jimo and not everything that starts with jima AdvTgtSearchIntHelp=Käytä intervallia valitaksesi int- tai float-arvon AdvTgtMinVal=Minimiarvo AdvTgtMaxVal=Suurin arvo diff --git a/htdocs/langs/fi_FI/main.lang b/htdocs/langs/fi_FI/main.lang index 388d0cba2f8..3a6a40573a0 100644 --- a/htdocs/langs/fi_FI/main.lang +++ b/htdocs/langs/fi_FI/main.lang @@ -420,6 +420,8 @@ TotalTTCShort=Yhteensä (sis. alv) TotalHT=Yhteensä (alv. 0) TotalHTforthispage=Yhteensä (ilman veroja) tällä sivulla Totalforthispage=Yhteensä tällä sivulla +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=Yhteensä (sis. alv) TotalTTCToYourCredit=Yhteensä (sis. alv) on luotollesi TotalVAT=Verot yhteensä @@ -647,6 +649,7 @@ ReportName=Raportin nimi ReportPeriod=Raportointikausi ReportDescription=Kuvaus Report=Raportti +Reports=Reports Keyword=Avainsana Origin=Alkuperä Legend=Legend @@ -1049,7 +1052,7 @@ Select2NotFound=Tuloksia ei löytynyt Select2Enter=Syötä Select2MoreCharacter=tai useampi merkki Select2MoreCharacters=tai lisää merkkejä -Select2MoreCharactersMore=Hakusyntaksi:
|b0860de534da6f class=' notranslate'> TAI (a|b)
za03aec07. /span>*
Mikä tahansa merkki (a*b)
b03aec07z0^ Aloita (^ab)
b03aec07a601d27a601 $za601d27 Loppuun (ab$)
+Select2MoreCharactersMore=Search syntax:
| OR (a|b)
* Any character (a*b)
^ Start with (^ab)
$ End with (ab$)
Select2LoadingMoreResults=Lataa lisää tuloksia... Select2SearchInProgress=Haku käynnissä... SearchIntoThirdparties=Sidosryhmät diff --git a/htdocs/langs/fi_FI/members.lang b/htdocs/langs/fi_FI/members.lang index fc98c61cb8b..b852e29de62 100644 --- a/htdocs/langs/fi_FI/members.lang +++ b/htdocs/langs/fi_FI/members.lang @@ -173,7 +173,7 @@ MembersAndSubscriptions=Jäsenet ja lahjoitukset MoreActions=Täydentäviä toimia tallennus MoreActionsOnSubscription=Täydentävä toimenpide, jota oletus ehdotti tekstityksen tallennuksen yhteydessä, myös automaattisesti maksu verkossa. MoreActionBankDirect=luo suora merkintä pankkitili -MoreActionBankViaInvoice=luo lasku, ja a maksu pankkitili +MoreActionBankViaInvoice=Create an invoice, and a payment on bank account MoreActionInvoiceOnly=Luo laskun maksua LinkToGeneratedPages=Käyntikorttien tai osoitelehtien luominen LinkToGeneratedPagesDesc=Tässä näytössä voit luoda PDF-tiedostoja käyntikortit kaikki jäsenet tai tietyssä jäsenvaltiossa. diff --git a/htdocs/langs/fi_FI/modulebuilder.lang b/htdocs/langs/fi_FI/modulebuilder.lang index b35c9df60a5..48ae4bab001 100644 --- a/htdocs/langs/fi_FI/modulebuilder.lang +++ b/htdocs/langs/fi_FI/modulebuilder.lang @@ -6,7 +6,7 @@ EnterNameOfObjectDesc=Kirjoita objektin nimi muotoon luo ilman välilyöntejä. EnterNameOfDictionaryDesc=Kirjoita sanakirjan nimi muotoon luo ilman välilyöntejä. Käytä isoja kirjaimia erottaaksesi sanat (esimerkiksi: MyDico...). Luokka tiedosto, mutta myös SQL tiedosto luodaan. ModuleBuilderDesc2=Polku, jossa moduuleja luodaan/muokataan (ensimmäinen hakemisto ulkoisille moduuleille, jotka on määritetty muotoon %s): %s ModuleBuilderDesc3=Löytyi luotuja/muokattavia moduuleja: %s -ModuleBuilderDesc4=Moduuli tunnistetaan moduulin rakentajan moduuliksi, kun tiedosto b0ecb2fz87f4 /span> on moduulihakemiston juuressa +ModuleBuilderDesc4=A module is detected as a 'module for Module Builer' when the file %s exists in the root of the module directory NewModule=Uusi moduuli NewObjectInModulebuilder=Uusi kohde NewDictionary=Uusi sanakirja @@ -16,7 +16,7 @@ ObjectKey=Objekti avain DicKey=Sanakirjan avain ModuleInitialized=Moduuli alustettu FilesForObjectInitialized=Uuden objektin %s tiedostot alustettiin -FilesForObjectUpdated=Objektin '%s' tiedostot päivitetty (.sql-tiedostot ja .class.php b0590afecbb5551z0 /span>) +FilesForObjectUpdated=Files for object '%s' updated (.sql files and .class.php file) ModuleBuilderDescdescription=Kirjoita tähän kaikki yleiset tiedot, jotka kuvaavat moduuliasi. ModuleBuilderDescspecifications=Voit kirjoittaa tähän yksityiskohtaisen kuvauksen moduulisi teknisistä tiedoista, joita ei ole jo jäsennelty muihin välilehtiin. Joten sinulla on helposti ulottuvillasi kaikki säännöt, joita voit kehittää. Myös tämä tekstisisältö sisällytetään luotuun dokumentaatioon (katso viimeinen välilehti). Voit käyttää Markdown-muotoa, mutta on suositeltavaa käyttää Asciidoc-muotoa (.md ja .asciidoc vertailu: http://asciidoctor.org/docs/user-manual/# alennukseen verrattuna). ModuleBuilderDescobjects=Määritä tässä objektit, joita haluat hallita moduulillasi. CRUD DAO -luokka, SQL-tiedostot, sivu objektitietueiden luetteloa varten luo/edit/view tietueen ja API syntyy. @@ -94,7 +94,7 @@ SeeExamples=Katso esimerkkejä tästä EnabledDesc=Edellytys, että tämä Kenttä on aktiivinen.

Esimerkkejä:
1
isModEnabled('anothermodule')
LODUBAL_StringLE(OP'G'TION) =2 VisibleDesc=Onko Kenttä näkyvissä? (Esimerkkejä: 0=ei koskaan näkyvissä, 1=näkyy luettelossa ja luo/update/view forms, 2=näkyy luettelossa vain, 3=Näkyy osoitteessa luo/update/view form only (ei luetteloissa), 4=Näkyy luetteloissa ja update /view only form (ei luo), 5=Näkyy luettelossa ja vain näytä lomake (ei luo, ei päivitystä).

Negatiivisen arvon käyttäminen tarkoittaa Kenttä ei näy oletus luettelossa, mutta se voidaan valita katseltavaksi). ItCanBeAnExpression=Se voi olla ilmaisu. Esimerkki:
preg_match('/public/', $_SERVER['PHP_SELF'])?0:1
$user ->hasRight('loma', 'define_holiday')?1:5 -DisplayOnPdfDesc=Näytä tämä Kenttä yhteensopivissa PDF-dokumenteissa, voit hallita sijaintia "Position"-komennolla Kenttä.
Asiakirjalle:b0342fccfda1>b0342fccfda1> näytetään
1 = näyttö
2 = näyttö vain, jos se ei ole tyhjä

Asiakirjan rivit:
0 = ei näy
1 = näytetään sarakkeessa
3 = näytetään rivin kuvaussarakkeessa kuvaus
4 = näytä kuvaussarakkeessa kuvauksen jälkeen vain, jos se ei ole tyhjä +DisplayOnPdfDesc=Display this field on compatible PDF documents, you can manage position with "Position" field.
For document :
0 = not displayed
1 = display
2 = display only if not empty

For document lines :
0 = not displayed
1 = displayed in a column
3 = display in line description column after the description
4 = display in description column after the description only if not empty DisplayOnPdf=PDF:ssä IsAMeasureDesc=Voidaanko Kenttä arvo kumuloida, jotta kokonaissumma saadaan luetteloon? (Esimerkkejä: 1 tai 0) SearchAllDesc=Käytetäänkö Kenttä haun tekemiseen pikahakutyökalulla? (Esimerkkejä: 1 tai 0) @@ -111,7 +111,7 @@ TriggerDefDesc=Määritä triggerissä tiedosto koodi, jonka haluat suorittaa, k SeeIDsInUse=Katso asennuksessasi käytössä olevat tunnukset SeeReservedIDsRangeHere=Katso valikoima varattuja tunnuksia ToolkitForDevelopers=Toolkit Dolibarr-kehittäjille -TryToUseTheModuleBuilder=Jos tiedät SQL:n ja PHP, voit käyttää ohjattua natiivimoduulin rakennustoimintoa.
Ota moduuli käyttöön %s b0ae6e90 the059 ohjattu toiminto napsauttamalla oikeassa yläkulmassa valikko. class='notranslate'>
Varoitus: tämä on edistynyt kehittäjäominaisuus, älä kokeile tuotantopaikallesi! +TryToUseTheModuleBuilder=If you have knowledge of SQL and PHP, you may use the native module builder wizard.
Enable the module %s and use the wizard by clicking the on the top right menu.
Warning: This is an advanced developer feature, do not experiment on your production site! SeeTopRightMenu=Katso oikeasta yläkulmasta valikko AddLanguageFile=Lisää Kieli tiedosto YouCanUseTranslationKey=Voit käyttää tässä avainta, joka on käännösavain kielelle Kieli tiedosto (katso Kielet-välilehti). @@ -148,7 +148,7 @@ CSSListClass=CSS luettelolle NotEditable=Ei muokattavissa ForeignKey=Vieras avain ForeignKeyDesc=Jos tämän Kenttä arvon on taattava olevan olemassa toisessa taulukossa. Kirjoita tähän arvo, joka vastaa syntaksia: tablename.parentfieldtocheck -TypeOfFieldsHelp=Esimerkki:
varchar(99)
sähköposti
puhelin
ip
url
salasana04b2fccf3 span>double(24,8)
todellinen
text
html
päivämäärä
datetime
aikaleima
kokonaisluku
integer:ClassName:relativepath/to/classfile.class.php[:1[:filter]]b0342bccfda<99bccf0 /span>
'1' tarkoittaa, että lisäämme +-painikkeen yhdistelmän jälkeen luo tietueeseen
'filter' on yleisen suodattimen syntaksiehto, esimerkki: '((status:=:1) ja (fk_user:=:__USER_ID__) ja (entity:IN:(__SHARED_ENTITIES__))" +TypeOfFieldsHelp=Example:
varchar(99)
email
phone
ip
url
password
double(24,8)
real
text
html
date
datetime
timestamp
integer
integer:ClassName:relativepath/to/classfile.class.php[:1[:filter]]

'1' means we add a + button after the combo to create the record
'filter' is an Universal Filter syntax condition, example: '((status:=:1) AND (fk_user:=:__USER_ID__) AND (entity:IN:(__SHARED_ENTITIES__))' TypeOfFieldsHelpIntro=Tämä on attribuutin Kenttä/tyyppi. AsciiToHtmlConverter=Ascii-HTML-muunnin AsciiToPdfConverter=Ascii-pdf-muunnin @@ -180,7 +180,7 @@ FailedToAddCodeIntoDescriptor=Koodin lisääminen kuvaajaan epäonnistui. Tarkis DictionariesCreated=Sanakirja %s luotu onnistuneesti DictionaryDeleted=Sanakirja %s poistettu onnistuneesti PropertyModuleUpdated=Omaisuus %s on päivitetty onnistuneesti -InfoForApiFile=* Kun luot tiedosto ensimmäistä kertaa, kaikki menetelmät luodaan jokaiselle objektille.
* Kun napsautat poista poistat vain kaikki menetelmät valitusta objektista. +InfoForApiFile=* When you generate file for the first time then all methods will be created for each object.
* When you click in remove you just remove all methods for the selected object. SetupFile=Sivu moduulien asennukseen EmailingSelectors=Emails selectors EmailingSelectorDesc=Voit luoda ja muokata tässä luokkatiedostoja tarjotaksesi uusia sähköpostikohteen valitsimia joukkosähköpostimoduulille diff --git a/htdocs/langs/fi_FI/mrp.lang b/htdocs/langs/fi_FI/mrp.lang index 818285d0a04..f9e6b198cf2 100644 --- a/htdocs/langs/fi_FI/mrp.lang +++ b/htdocs/langs/fi_FI/mrp.lang @@ -14,7 +14,7 @@ BOMsSetup=Moduulin tuoteluettelon asennus ListOfBOMs=Materiaaliluettelot - BOM ListOfManufacturingOrders=Valmistustilaukset NewBOM=Uusi lasku Materiaalit -ProductBOMHelp=Tuote luo (tai pura) tämän tuoteluettelon avulla.
Huomaa: b07827aafe ominaisuudella 'Tuotteen luonne' = 'Raaka-aine' eivät näy tässä luettelossa. +ProductBOMHelp=Product to create (or disassemble) with this BOM.
Note: Products with the property 'Nature of product' = 'Raw material' are not visible into this list. BOMsNumberingModules=Tuoteluettelon numerointimallit BOMsModelModule=BOM-asiakirjamallit MOsNumberingModules=MO numerointimallit @@ -136,4 +136,3 @@ NoRemainQtyToDispatch=Jaettavaa määrää ei ole jäljellä THMOperatorEstimatedHelp=Operaattorin arvioitu tuntihinta. Käytetään tätä työasemaa käyttävän tuoteluettelon kustannusten arvioimiseen. THMMachineEstimatedHelp=Arvioitu koneen hinta per tunti. Käytetään tätä työasemaa käyttävän tuoteluettelon kustannusten arvioimiseen. - diff --git a/htdocs/langs/fi_FI/multicurrency.lang b/htdocs/langs/fi_FI/multicurrency.lang index 2cd283da681..deabb67354d 100644 --- a/htdocs/langs/fi_FI/multicurrency.lang +++ b/htdocs/langs/fi_FI/multicurrency.lang @@ -12,7 +12,7 @@ multicurrency_appId=API-avain multicurrency_appCurrencySource=Lähdevaluutta multicurrency_alternateCurrencySource=Vaihtoehtoinen lähdevaluutta CurrenciesUsed=Käytetyt valuutat -CurrenciesUsed_help_to_add=Lisää eri valuuttojen ja kurssit, joita sinun tulee käyttää ehdotuksissasib09a4b739f17 >, tilaukset jne. +CurrenciesUsed_help_to_add=Add the different currencies and rates you need to use on your proposals, orders etc. rate=korko MulticurrencyReceived=Vastaanotettu, alkuperäinen valuutta MulticurrencyRemainderToTake=Jäljellä oleva summa, alkuperäinen valuutta diff --git a/htdocs/langs/fi_FI/oauth.lang b/htdocs/langs/fi_FI/oauth.lang index 51dafd01a67..e274616b890 100644 --- a/htdocs/langs/fi_FI/oauth.lang +++ b/htdocs/langs/fi_FI/oauth.lang @@ -14,7 +14,7 @@ RequestAccess=Napsauta tätä pyytääksesi/uusiaksesi käyttöoikeus ja vastaan DeleteAccess=Napsauta tästä poistaaksesi tunnuksen RedirectURL=Uudelleenohjauksen URL-osoite UseTheFollowingUrlAsRedirectURI=Käytä seuraavaa URL-osoitetta uudelleenohjaus-URL-osoitteena, kun luot kirjautumistietojasi OAuth-palveluntarjoajaltasi -ListOfSupportedOauthProviders=Lisää OAuth2-tunnuksen tarjoajat. Siirry sitten OAuth-palveluntarjoajan Pääkäyttäjä-sivulle ja luo/hae OAuth-tunnus b0ae6e90z09. /span> Salaiset ja tallenna ne tähän. Kun olet valmis, avaa toinen välilehti luodaksesi tunnus. +ListOfSupportedOauthProviders=Add your OAuth2 token providers. Then, go on your OAuth provider admin page to create/get an OAuth ID and Secret and save them here. Once done, switch on the other tab to generate your token. OAuthSetupForLogin=Sivu, jolla voit hallita (luoda/poista) OAuth-tunnuksia SeePreviousTab=Katso edellinen välilehti OAuthProvider=OAuth-palveluntarjoaja diff --git a/htdocs/langs/fi_FI/other.lang b/htdocs/langs/fi_FI/other.lang index 77c5b178110..a6e1acce92e 100644 --- a/htdocs/langs/fi_FI/other.lang +++ b/htdocs/langs/fi_FI/other.lang @@ -331,8 +331,10 @@ FTPPassiveMode=Passiivisena ChooseAFTPEntryIntoMenu=Valitse FTP/SFTP-sivusto hakemistosta valikko... FailedToGetFile=Tiedostojen %s lataus epäonnistui ErrorFTPNodisconnect=Virhe katkaistaessa FTP/SFTP-palvelinta -FileWasUpload=tiedosto %sb09f17f830 span> ladattiin -FTPFailedToUploadFile=tiedosto %s. +FileWasUpload=File %s was uploaded +FTPFailedToUploadFile=Failed to upload the file %s. AddFolder=luo kansio FileWasCreateFolder=Kansio %s on luotu FTPFailedToCreateFolder=luo-kansioon %s epäonnistui. . +SelectADay=Select a day in calendar +SelectANewDate=Select a new date diff --git a/htdocs/langs/fi_FI/partnership.lang b/htdocs/langs/fi_FI/partnership.lang index 8817e3c9f9b..7710e14af47 100644 --- a/htdocs/langs/fi_FI/partnership.lang +++ b/htdocs/langs/fi_FI/partnership.lang @@ -91,8 +91,7 @@ CountLastUrlCheckError=Viimeisimmän URL-osoitteen tarkistuksen virheiden määr LastCheckBacklink=päiväys viimeisestä URL-osoitteen tarkistuksesta NewPartnershipRequest=Uusi kumppanuuspyyntö -NewPartnershipRequestDesc=Tällä lomakkeella voit pyytää liittymistä johonkin kumppanuusohjelmaamme. Jos tarvitset apua tämän lomakkeen täyttämisessä, ota yhteyttä sähköpostitse %s span>. +NewPartnershipRequestDesc=This form allows you to request to be part of one of our partnership program. If you need help to fill this form, please contact by email %s. ThisUrlMustContainsAtLeastOneLinkToWebsite=Tällä sivulla on oltava vähintään yksi linkki johonkin seuraavista verkkotunnuksista: %s IPOfApplicant=Hakijan IP - diff --git a/htdocs/langs/fi_FI/paybox.lang b/htdocs/langs/fi_FI/paybox.lang index c086edbeaf4..931f03ddcf0 100644 --- a/htdocs/langs/fi_FI/paybox.lang +++ b/htdocs/langs/fi_FI/paybox.lang @@ -1,6 +1,6 @@ # Dolibarr language file - Source file is en_US - paybox PayBoxSetup=PayBox moduulin asetukset -PayBoxDesc=Tämä moduuli tarjoaa sivuja sallia maksu Payboxissa class='notranslate'>asiakkaat. Tätä voidaan käyttää ilmaiseen maksu tai maksu tiettyyn Dolibarr-objektiin (lasku, tilaus, ...) +PayBoxDesc=This module offer pages to allow payment on Paybox by customers. This can be used for a free payment or for a payment on a particular Dolibarr object (invoice, order, ...) FollowingUrlAreAvailableToMakePayments=Seuraavat URL-osoitteet ovat käytettävissä tarjota sivu asiakas tehdä maksua Dolibarr esineitä PaymentForm=Maksu-muodossa WelcomeOnPaymentPage=Tervetuloa verkkopalveluumme maksu @@ -13,7 +13,7 @@ PaymentCode=Maksu-koodi PayBoxDoPayment=Maksa Payboxilla YouWillBeRedirectedOnPayBox=Sinut ohjataan on turvattu Paybox sivu tuloliittimeen voit luottokortin tiedot Continue=Seuraava -SetupPayBoxToHavePaymentCreatedAutomatically=Määritä Payboxin URL-osoite %s saadaksesi 'notranslate'>maksu luodaan automaattisesti, kun Paybox vahvistaa. +SetupPayBoxToHavePaymentCreatedAutomatically=Setup your Paybox with url %s to have payment created automatically when validated by Paybox. YourPaymentHasBeenRecorded=Tämä sivu vahvistaa, että maksu on kirjattu. Kiitos. YourPaymentHasNotBeenRecorded=maksu EI ole tallennettu ja tapahtuma on peruutettu. Kiitos. AccountParameter=Tilin parametrit diff --git a/htdocs/langs/fi_FI/paypal.lang b/htdocs/langs/fi_FI/paypal.lang index 1da5c562581..b0c035ead5a 100644 --- a/htdocs/langs/fi_FI/paypal.lang +++ b/htdocs/langs/fi_FI/paypal.lang @@ -16,7 +16,7 @@ ThisIsTransactionId=Tämä on id liiketoimen: %s PAYPAL_ADD_PAYMENT_URL=Sisällytä PayPalin maksu URL-osoite, kun lähetät asiakirjan sähköpostitse NewOnlinePaymentReceived=Uusi verkossa maksu vastaanotettu NewOnlinePaymentFailed=Uusi verkossa maksu yritti, mutta epäonnistui -ONLINE_PAYMENT_SENDEMAIL=Sähköpostiosoite käyttäjälle Ilmoitukset jokaisen maksu yrityksen jälkeen (menestys ja) +ONLINE_PAYMENT_SENDEMAIL=Email address for notifications after each payment attempt (for success and fail) ReturnURLAfterPayment=Palauta URL-osoite maksu jälkeen ValidationOfOnlinePaymentFailed=Verkkotunnuksen maksu vahvistus epäonnistui PaymentSystemConfirmPaymentPageWasCalledButFailed=maksu vahvistussivun kutsui maksu järjestelmä palautti virheen @@ -34,4 +34,4 @@ ARollbackWasPerformedOnPostActions=Kaikille Post-toiminnoille suoritettiin peruu ValidationOfPaymentFailed=Kohteen maksu vahvistus epäonnistui CardOwner=Kortin haltija PayPalBalance=Paypal luotto -OnlineSubscriptionPaymentLine=Verkkotilaus tallennettu %s
Maksettu %s
Alkuperäinen IP-osoite: %s
Tapahtuman tunnus: #global_mycode# -PriceExpressionEditorHelp3=Molemmissa tuotteen/palvelun ja Toimittaja hinnoissa on saatavilla seuraavat muuttujat:
>#tva_tx# #localtax1_tx# #localtax2_tx# #Massa# #length# #pinta#
-PriceExpressionEditorHelp4=Vain tuotteen/palvelun hinta: #supplier_min_price#b0342fccfdaToimittaja vain hinnat: #supplier_quantity# ja #suppli class='notranslate'>
+PriceExpressionEditorHelp2=You can access ExtraFields with variables like #extrafield_myextrafieldkey# and global variables with #global_mycode# +PriceExpressionEditorHelp3=In both product/service and vendor prices there are these variables available:
#tva_tx# #localtax1_tx# #localtax2_tx# #weight# #length# #surface# #price_min# +PriceExpressionEditorHelp4=In product/service price only: #supplier_min_price#
In vendor prices only: #supplier_quantity# and #supplier_tva_tx# PriceExpressionEditorHelp5=Käytettävissä olevat globaalit arvot: PriceMode=Hinta-tila PriceNumeric=Numero @@ -410,7 +406,7 @@ PMPValueShort=WAP mandatoryperiod=Pakolliset ajanjaksot mandatoryPeriodNeedTobeSet=Huomaa: jakso (alku ja loppu päiväys) on määritettävä mandatoryPeriodNeedTobeSetMsgValidate=Palvelu vaatii aloitusjakson ja -mandatoryHelper=Valitse tämä, jos haluat viestiä käyttäjälle luodessasi/vahvisttaessasi laskua, Tarjouspyyntö, myyntitilausta ilman alkua ja lopeta päiväys tämän palvelun linjoilla.
Huomaa, että viesti on varoitus ja /span> ei ole estovirhe. +mandatoryHelper=Check this if you want a message to the user when creating / validating an invoice, commercial proposal, sales order without entering a start and end date on lines with this service.
Note that the message is a warning and not a blocking error. DefaultBOM=oletus tuoteluettelo DefaultBOMDesc=Tämän tuotteen valmistukseen suositeltu oletus tuoteluettelo. Tämä Kenttä voidaan asettaa vain, jos tuotteen luonne on %s. Rank=Sijoitus @@ -436,5 +432,7 @@ ConfirmEditExtrafieldQuestion = Haluatko varmasti muokata tätä lisäkenttää? ModifyValueExtrafields = Muokkaa lisäkentän arvoa OrProductsWithCategories=Tai tuotteet tunnisteilla/luokilla WarningTransferBatchStockMouvToGlobal = Jos haluat deserialisoida tämän tuotteen, kaikki sen sarjoitetut varastot muutetaan maailmanlaajuisiksi varastoiksi -WarningConvertFromBatchToSerial=Jos sinulla on tällä hetkellä tuotteen määrä suurempi tai yhtä suuri kuin 2, tähän valintaan vaihtaminen tarkoittaa, että sinulla on edelleen tuote, jossa on saman erän eri kohteita (vaikka haluat ainutlaatuisen Sarjanumero). Kaksoiskappale säilyy, kunnes inventaario tai manuaalinen varastosiirto tämän korjaamiseksi on tehty. +WarningConvertFromBatchToSerial=If you currently have a quantity higher or equal to 2 for the product, switching to this choice means you will still have a product with different objects of the same batch (while you want a unique serial number). The duplicate will remain until an inventory or a manual stock movement to fix this is done. +AllowStockMovementVariantParent=Also records stock movements on parent products of variant products +AllowStockMovementVariantParentHelp=By default, a parent of a variant is a virtual product, so no stock is managed for it. By enabling this option, a stock will be managed for parent products and each time a stock quantity is modified for a variant product, the same quantity will be modified for the parent product. You should not need this option, except if you are using variant to manage the same product than parent (but with different descriptions, prices...) ConfirmSetToDraftInventory=Haluatko varmasti palata Luonnos-tilaan?
Mainosjakaumaan tällä hetkellä asetetut määrät nollataan. diff --git a/htdocs/langs/fi_FI/receptions.lang b/htdocs/langs/fi_FI/receptions.lang index fe9fc6ae977..89afeacd2d9 100644 --- a/htdocs/langs/fi_FI/receptions.lang +++ b/htdocs/langs/fi_FI/receptions.lang @@ -5,8 +5,6 @@ RefReception=Viite. vastaanotto Reception=Prosessissa Receptions=Vastaanotot AllReceptions=Kaikki vastaanotot -Reception=Prosessissa -Receptions=Vastaanotot ShowReception=Näytä vastaanotot ReceptionsArea=Vastaanottoalue ListOfReceptions=Luettelo vastaanotoista @@ -36,7 +34,7 @@ ValidateReception=Vahvista vastaanotto ConfirmDeleteReception=Haluatko varmasti poistaa tämän vastaanoton? ConfirmValidateReception=Haluatko varmasti vahvistaa tämän vastaanoton viitteellä %s? ConfirmCancelReception=Haluatko varmasti peruuttaa tämän vastaanoton? -StatsOnReceptionsOnlyValidated=Tilastot on tehty vain validoiduista vastaanotoista. päiväys on päiväys vastaanoton validoinnista (suunniteltu toimitus ='notranslate'>päiväys ei ole aina tiedossa). +StatsOnReceptionsOnlyValidated=Statistics conducted on validated only receptions. Date used is date of validation of reception (planned delivery date is not always known). SendReceptionByEMail=Lähetä vastaanotto sähköpostitse SendReceptionRef=Vastaanoton lähettäminen %s ActionsOnReception=Tapahtumat vastaanotossa diff --git a/htdocs/langs/fi_FI/sendings.lang b/htdocs/langs/fi_FI/sendings.lang index 239ed38c8a0..4c1f29177cc 100644 --- a/htdocs/langs/fi_FI/sendings.lang +++ b/htdocs/langs/fi_FI/sendings.lang @@ -43,7 +43,7 @@ ConfirmValidateSending=Haluatko varmasti vahvistaa tämän lähetyksen viitenume ConfirmCancelSending=Haluatko varmasti peruuttaa tämän toimituksen? DocumentModelMerou=Merou A5 malli WarningNoQtyLeftToSend=Varoitus, ei tuotteet odottavat lähettämistä. -StatsOnShipmentsOnlyValidated=Tilastot koskevat vain hyväksyttyjä lähetyksiä. päiväys on päiväys lähetyksen validoinnissa (suunniteltu toimitus class='notranslate'>päiväys
ei ole aina tiedossa) +StatsOnShipmentsOnlyValidated=Statistics are only for validated shipments. Date used is the date of validation of shipment (planned delivery date is not always known) DateDeliveryPlanned=Suunniteltu toimituspäivä RefDeliveryReceipt=Viite toimitus kuitti StatusReceipt=Tilan toimitus kuitti diff --git a/htdocs/langs/fi_FI/stocks.lang b/htdocs/langs/fi_FI/stocks.lang index 968ea27829c..56132aac672 100644 --- a/htdocs/langs/fi_FI/stocks.lang +++ b/htdocs/langs/fi_FI/stocks.lang @@ -164,14 +164,14 @@ InventoryCode=Liike- tai varastokoodi IsInPackage=Pakkauksessa mukana WarehouseAllowNegativeTransfer=Varasto voi olla negatiivinen qtyToTranferIsNotEnough=Sinulla ei ole tarpeeksi varastoa lähdevarastostasi ja, asetukset eivät salli negatiivisia varastoja. -qtyToTranferLotIsNotEnough=Sinulla ei ole tarpeeksi varastoa tälle eränumerolle lähdevarastostasi ja, asetukset eivät salli negatiivisia varastoja (määrä tuotteelle %s" erällä "%s" on %s varastossa 'b9fz'07f4b9fz80 /span>'). +qtyToTranferLotIsNotEnough=You don't have enough stock, for this lot number, from your source warehouse and your setup does not allow negative stocks (Qty for product '%s' with lot '%s' is %s in warehouse '%s'). ShowWarehouse=Näytä varasto MovementCorrectStock=Varastokorjaus tuotteelle %s MovementTransferStock=Tuotteen %s varastosiirto toiseen varastoon BatchStockMouvementAddInGlobal=Erävarasto siirtyy globaaliin varastoon (tuote ei enää käytä erää) InventoryCodeShort=Inv./Mov. koodi NoPendingReceptionOnSupplierOrder=Ei odottavaa vastaanottoa avoimen Hankinta tilauksen vuoksi -ThisSerialAlreadyExistWithDifferentDate=Tämä erä/Sarjanumero (%s) on jo olemassa, mutta sillä on eri eatby tai sellby päiväys (löytyi ). +ThisSerialAlreadyExistWithDifferentDate=This lot/serial number (%s) already exists but with different eatby or sellby date (found %s but you enter %s). OpenAnyMovement=Avaa (kaikki liikkeet) OpenInternal=Avoin (vain sisäinen liike) UseDispatchStatus=Käytä lähetystilaa (hyväksyä/refuse) tuotelinjoille Hankinta tilauksen vastaanotossa @@ -282,7 +282,7 @@ ModuleStockTransferName=Edistynyt osakesiirto ModuleStockTransferDesc=Edistynyt varastonsiirron hallinta siirtoarkin luomisen kanssa StockTransferNew=Uuden osakkeen siirto StockTransferList=Osakkeiden siirtoluettelo -ConfirmValidateStockTransfer=Haluatko varmasti vahvistaa tämän osakkeiden siirron viitenumerolla %s span> ? +ConfirmValidateStockTransfer=Are you sure you want to validate this stocks transfer with the reference %s ? ConfirmDestock=vähentää osakkeita siirrolla %s ConfirmDestockCancel=Peru vähentää osakkeita siirtämällä %s DestockAllProduct=vähentää osakkeista diff --git a/htdocs/langs/fi_FI/stripe.lang b/htdocs/langs/fi_FI/stripe.lang index a1573480e0b..a5b0876b36d 100644 --- a/htdocs/langs/fi_FI/stripe.lang +++ b/htdocs/langs/fi_FI/stripe.lang @@ -22,8 +22,8 @@ ToOfferALinkForOnlinePaymentOnContractLine=URL-osoite, jolla tarjotaan %s online ToOfferALinkForOnlinePaymentOnFreeAmount=URL-osoite, jolla tarjotaan %s online- maksu -sivu minkä tahansa summan ilman objektia ToOfferALinkForOnlinePaymentOnMemberSubscription=URL-osoite, joka tarjoaa %s online- maksu -sivun jäsentilaukselle ToOfferALinkForOnlinePaymentOnDonation=URL-osoite, jolla tarjotaan %s online maksu -sivu maksu lahjoituksesta -YouCanAddTagOnUrl=Voit myös lisätä URL-parametrin &tag=value class='notranslate'> mihin tahansa näistä URL-osoitteista (pakollinen vain maksulle, jota ei ole linkitetty objektiin), jotta voit lisätä oman maksu kommenttitunniste.
Voit myös lisätä parametrin sellaisten maksujen URL-osoitteeseen, joissa ei ole olemassa olevaa objektia. >> class='notranslate'>maksu arvoksi 1 jokaiselle eri linkille ilman tätä parametria) -SetupStripeToHavePaymentCreatedAutomatically=Määritä Stripe URL-osoitteella %s, jotta saat maksu luodaan automaattisesti, kun Stripe on vahvistanut. +YouCanAddTagOnUrl=You can also add url parameter &tag=value to any of those URL (mandatory only for payment not linked to an object) to add your own payment comment tag.
For the URL of payments with no existing object, you may also add the parameter &noidempotency=1 so the same link with same tag can be used several times (some payment mode may limit the payment to 1 for each different link without this parameter) +SetupStripeToHavePaymentCreatedAutomatically=Setup your Stripe with url %s to have payment created automatically when validated by Stripe. AccountParameter=Tilin parametrit UsageParameter=Käyttöparametrien InformationToFindParameters=Auta löytää %s tilitiedot @@ -38,7 +38,7 @@ STRIPE_TEST_WEBHOOK_KEY=Webhook-testiavain STRIPE_LIVE_SECRET_KEY=Salainen live-avain STRIPE_LIVE_PUBLISHABLE_KEY=Julkaistu live-avain STRIPE_LIVE_WEBHOOK_KEY=Webhook live-avain -ONLINE_PAYMENT_WAREHOUSE=Osake käytettäväksi varastossa vähentää, kun online-tilassa maksu on valmis
(TODO) Kun vaihtoehto vähentää on tehty laskun ja toiminnolle, online maksu span> luo itse laskun?) +ONLINE_PAYMENT_WAREHOUSE=Stock to use for stock decrease when online payment is done
(TODO When option to decrease stock is done on an action on invoice and the online payment generate itself the invoice ?) StripeLiveEnabled=Stripe live käytössä (muuten testi/hiekkalaatikkotila) StripeImportPayment=Tuo Stripe-maksut ExampleOfTestCreditCard=Esimerkki luottokortista testiä varten maksu: %s => kelvollinen, %s > => virhe CVC, %s => vanhentunut, %s => veloitus epäonnistuu diff --git a/htdocs/langs/fi_FI/trips.lang b/htdocs/langs/fi_FI/trips.lang index 23678004646..d5d6f9c8ef5 100644 --- a/htdocs/langs/fi_FI/trips.lang +++ b/htdocs/langs/fi_FI/trips.lang @@ -5,7 +5,7 @@ AddTrip=Tee uusi kulutosite AllExpenseReport=Kaiken tyyppiset kuluraportti AllExpenseReports=Kaikki kulutositteet AnyOtherInThisListCanValidate=Henkilö, jolle on tiedotettava pyynnön vahvistamiseksi. -AttachTheNewLineToTheDocument=Liite rivi ladattuun dokumenttiin +AttachTheNewLineToTheDocument=Liite rivi ladattuun dokumenttiin AucuneLigne=Ei ole kulutositteita vielä kirjattuna BrouillonnerTrip=Muuta takaisin esitäytetty tilaan byEX_DAY=päivän mukaan (rajoitus %s) @@ -45,9 +45,9 @@ expenseReportRangeMoreThan=enemmän kuin %d expenseReportTotalForFive=Esimerkki: d = 5 ExpenseReportApplyTo=hyväksy ExpenseReportApproved=Kulutosite on hyväksytty -ExpenseReportApprovedMessage=kuluraportti %s hyväksyttiin.
– Käyttäjä: %s
- Hyväksyjä: %sb0342bccf span>Näytä kuluraportti napsauttamalla tätä: %s +ExpenseReportApprovedMessage=The expense report %s was approved.
- User: %s
- Approved by: %s
Click here to show the expense report: %s ExpenseReportCanceled=Kulutosite on peruutettu -ExpenseReportCanceledMessage=kuluraportti %s peruutettiin.
- Käyttäjä: %s span> – Peruuttamisen syy: %s
Napsauta tätä nähdäksesi kuluraportti >: %s +ExpenseReportCanceledMessage=The expense report %s was canceled.
- User: %s
- Canceled by: %s
- Motive for cancellation: %s
Click here to show the expense report: %s ExpenseReportConstraintViolationError=Enimmäismäärä ylitetty (sääntö %s): %s on suurempi kuin %s ( Kielletyn ylittäminen) ExpenseReportConstraintViolationWarning=Enimmäismäärä ylitetty (sääntö %s): %s on suurempi kuin %s ( Ylittää luvan) ExpenseReportDateEnd=Päättyen @@ -62,7 +62,7 @@ ExpenseReportPaidMessage=kuluraportti %s maksettiin.
- Käyttäjä: %s
ExpenseReportPayment=Kululaskun maksatus ExpenseReportRef=Viite. kuluraportti ExpenseReportRefused=Kulutosite on hylätty -ExpenseReportRefusedMessage=kuluraportti %s hylättiin.
- Käyttäjä: %s span> - Kieltäytymisen syy: %s
Näytä kuluraportti napsauttamalla tätä >: %s +ExpenseReportRefusedMessage=The expense report %s was refused.
- User: %s
- Refused by: %s
- Motive for refusal: %s
Click here to show the expense report: %s ExpenseReportRestrictive=Ylittäminen kielletty ExpenseReportRuleErrorOnSave=Virhe: %s ExpenseReportRuleSave=Sääntö tallennettu @@ -90,10 +90,10 @@ nolimitbyEX_DAY=päivällä (ei rajoituksia) nolimitbyEX_EXP=rivillä (ei rajoituksia) nolimitbyEX_MON=kuukausittain (ei rajoituksia) nolimitbyEX_YEA=vuoden mukaan (ei rajoituksia) -NoTripsToExportCSV=Ei kulutositteita tälle kuulle +NoTripsToExportCSV=Ei kulutositteita tälle kuulle NOT_AUTHOR=Et ole tämän kuluraportti kirjoittaja. Toiminto peruttu. OnExpense=Kulutositteen rivi -PDFStandardExpenseReports=Muodosta PDF +PDFStandardExpenseReports=Muodosta PDF PaidTrip=Maksa kululasku REFUSEUR=Hylätty toimesta RangeIk=Kilometrit diff --git a/htdocs/langs/fi_FI/website.lang b/htdocs/langs/fi_FI/website.lang index d2d3e31eef9..206794503b5 100644 --- a/htdocs/langs/fi_FI/website.lang +++ b/htdocs/langs/fi_FI/website.lang @@ -32,7 +32,7 @@ AddWebsite=Lisää sivusto Webpage=Verkkosivu/säilö AddPage=Lisää sivu/säilö PageContainer=Sivu -PreviewOfSiteNotYetAvailable=Verkkosivustosi %s esikatselu ei ole vielä saatavilla. Sinun täytyy ensin tuoda täydellinen verkkosivustomalli tai vain b0e7843947c. span>Lisää sivu/säilö
'. +PreviewOfSiteNotYetAvailable=The preview of your website %s is not yet available. You must first 'Import a full website template' or just 'Add a page/container'. RequestedPageHasNoContentYet=Pyydetyllä sivulla, jonka tunnus on %s, ei ole vielä sisältöä, tai välimuisti tiedosto .tpl.php on poistettu. Muokkaa sivun sisältöä ratkaistaksesi tämän. SiteDeleted=Verkkosivusto '%s' poistettu PageContent=Sivu/sisältö @@ -53,8 +53,8 @@ CheckVirtualHostPerms=Tarkista myös, että virtuaalipalvelimen käyttäjällä ReadPerm=Luettu WritePerm=Kirjoittaa TestDeployOnWeb=Testaa / ota käyttöön verkossa -PreviewSiteServedByWebServer=Esikatsele %s uudessa välilehdessä.

%s palvelee ulkoinen verkkopalvelin (kuten Apache, Nginx, IIS ). Sinun on asennettava ja tämän palvelimen asennus ennen kuin voit osoittaa hakemistoon:
>%s
Ulkoisen palvelimen tarjoama URL-osoite:
%sb0a65fc071f65fc071f -PreviewSiteServedByDolibarr=Esikatsele %s uudessa välilehdessä.

%s palvelee Dolibarr-palvelinta, joten se ei tarvitse ylimääräistä verkkopalvelinta (kuten Apache, Nginx, IIS) asennettava.
Epämukavaa on, että sivujen URL-osoitteet eivät ole käyttäjäystävällisiä ja aloita Dolibarrin polulla.
Dolibarrin tarjoama URL-osoite:
span>%s
b0349bcc0fda192fz Jos haluat käyttää omaa ulkoista verkkopalvelintasi tämän verkkosivuston palvelemiseen, luo verkkopalvelimellasi on virtuaalinen isäntä, joka osoittaa hakemistoon
%s
ja kirjoita tämän virtuaalipalvelimen nimi tämän verkkosivuston ominaisuuksiin ja napsauta linkkiä "Testaa/käyttöönotto verkossa". +PreviewSiteServedByWebServer=Preview %s in a new tab.

The %s will be served by an external web server (like Apache, Nginx, IIS). You must install and setup this server before to point to directory:
%s
URL served by external server:
%s +PreviewSiteServedByDolibarr=Preview %s in a new tab.

The %s will be served by Dolibarr server so it does not need any extra web server (like Apache, Nginx, IIS) to be installed.
The inconvenient is that the URLs of pages are not user friendly and start with the path of your Dolibarr.
URL served by Dolibarr:
%s

To use your own external web server to serve this web site, create a virtual host on your web server that points on directory
%s
then enter the name of this virtual server in the properties of this website and click on the link "Test/Deploy on the web". VirtualHostUrlNotDefined=Ulkoisen verkkopalvelimen palveleman virtuaalisen isännän URL-osoitetta ei ole määritetty NoPageYet=Ei vielä sivuja YouCanCreatePageOrImportTemplate=Voit luo uuden sivun tai tuoda täyden verkkosivustomallin @@ -62,9 +62,9 @@ SyntaxHelp=Ohje tiettyihin syntaksivinkkeihin YouCanEditHtmlSourceckeditor=Voit muokata HTML-lähdekoodia käyttämällä "Lähde"-painiketta editorissa. YouCanEditHtmlSource=
You can include PHP code into this source using tags <?php ?>. The following global variables are available: $conf, $db, $mysoc, $user, $website, $websitepage, $weblangs, $pagelangs.

You can also include content of another Page/Container with the following syntax:
<?php includeContainer('alias_of_container_to_include'); ?>

You can make a redirect to another Page/Container with the following syntax (Note: do not output any content before a redirect):
<?php redirectToContainer('alias_of_container_to_redirect_to'); ?>

To add a link to another page, use the syntax:
<a href="alias_of_page_to_link_to.php">mylink<a>

To include a link to download a file stored into the documents directory, use the document.php wrapper:
Example, for a file into documents/ecm (need to be logged), syntax is:
<a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext">
For a file into documents/medias (open directory for public access), syntax is:
<a href="/document.php?modulepart=medias&file=[relative_dir/]filename.ext">
For a file shared with a share link (open access using the sharing hash key of file), syntax is:
<a href="/document.php?hashp=publicsharekeyoffile">
YouCanEditHtmlSource1=
To include an image stored into the documents directory, use the viewimage.php wrapper.
Example, for an image into documents/medias (open directory for public access), syntax is:
<img src="/viewimage.php?modulepart=medias&file=[relative_dir/]filename.ext">
-YouCanEditHtmlSource2=Jaa-linkillä jaetun kuvan (avoin pääsy tiedosto jakamishajaavaimella) syntaksi on:
<img src="/viewimage.php?hashp=12345679012..."d0c012'>d0c012'> /span>
-YouCanEditHtmlSource3=Saat PHP-objektin kuvan URL-osoitteen käyttämällä
< span>img src="<?php print getImagePublicURLOfObject($object, 1, "_small") ?> class='notranslate'>>
-YouCanEditHtmlSourceMore=
Lisää esimerkkejä HTML-koodista tai dynaamisesta koodista löytyy wikin dokumentaatiosta >.
+YouCanEditHtmlSource2=For an image shared with a share link (open access using the sharing hash key of file), syntax is:
<img src="/viewimage.php?hashp=12345679012...">
+YouCanEditHtmlSource3=To get the URL of the image of a PHP object, use
<img src="<?php print getImagePublicURLOfObject($object, 1, "_small") ?>">
+YouCanEditHtmlSourceMore=
More examples of HTML or dynamic code available on the wiki documentation.
ClonePage=Kloonaa sivu/säilö CloneSite=Kloonaa sivusto SiteAdded=Verkkosivusto lisätty @@ -143,7 +143,7 @@ DefineListOfAltLanguagesInWebsiteProperties=Määritä luettelo kaikista saatavi GenerateSitemaps=Luo verkkosivusto sitemap.xml tiedosto ConfirmGenerateSitemaps=Jos vahvistat, poistat nykyisen sivustokartan tiedosto... ConfirmSitemapsCreation=Vahvista sivustokartan luominen -SitemapGenerated=Sivustokartta tiedosto %sb09a4f8 luotu +SitemapGenerated=Sitemap file %s generated ImportFavicon=Favicon ErrorFaviconType=Faviconin on oltava png ErrorFaviconSize=Faviconin koon tulee olla 16x16, 32x32 tai 64x64 diff --git a/htdocs/langs/fi_FI/withdrawals.lang b/htdocs/langs/fi_FI/withdrawals.lang index 6ee774b438b..6559d57b885 100644 --- a/htdocs/langs/fi_FI/withdrawals.lang +++ b/htdocs/langs/fi_FI/withdrawals.lang @@ -125,7 +125,7 @@ WithdrawRequestErrorNilAmount=Tyhjän summan luo suoraveloituspyyntö epäonnist SepaMandate=SEPA-suoraveloitusvaltuutus SepaMandateShort=SEPA-mandaatti PleaseReturnMandate=Palauta tämä toimeksiantolomake sähköpostitse osoitteeseen %s tai postitse osoitteeseen -SEPALegalText=Allekirjoittamalla tämän valtuutuslomakkeen valtuutat (A) %s ja sen maksu > palveluntarjoaja lähettää pankkillesi ohjeet tilin veloittamiseksi ja (B) pankkillesi veloittaaksesi tiliäsi lähettäjän %s ohjeiden mukaisesti . Osana oikeuksiasi sinulla on oikeus saada hyvitys pankiltasi pankkisi kanssa tekemäsi sopimuksen ehtojen ja ehtojen mukaisesti. Yllä olevaan toimeksiantoon liittyvät oikeutesi on selitetty tiliotteessa, jonka voit saada pankistasi. Suostut vastaanottamaan Ilmoitukset tulevista veloituksista enintään 2 päivää ennen niiden toteutumista. +SEPALegalText=By signing this mandate form, you authorize (A) %s and its payment service provider to send instructions to your bank to debit your account and (B) your bank to debit your account in accordance with the instructions from %s. As part of your rights, you are entitled to a refund from your bank under the terms and conditions of your agreement with your bank. Your rights regarding the above mandate are explained in a statement that you can obtain from your bank. You agree to receive notifications about future charges up to 2 days before they occur. CreditorIdentifier=Luotonantajan tunniste CreditorName=Luotonantajan nimi SEPAFillForm=(B) Täytä kaikki * merkityt kentät @@ -171,4 +171,3 @@ SalaryWaitingWithdraw=Palkat odottavat tilisiirtona maksu RefSalary=Palkka NoSalaryInvoiceToWithdraw=Ei palkkaa odottamassa %s. Tee pyyntö siirtymällä palkkakortin välilehteen %s. SalaryInvoiceWaitingWithdraw=Palkat odottavat tilisiirtona maksu - diff --git a/htdocs/langs/fi_FI/workflow.lang b/htdocs/langs/fi_FI/workflow.lang index 8351d427005..58f38c31986 100644 --- a/htdocs/langs/fi_FI/workflow.lang +++ b/htdocs/langs/fi_FI/workflow.lang @@ -3,8 +3,8 @@ WorkflowSetup=Workflow-moduuli asennus WorkflowDesc=Tämä moduuli tarjoaa joitain automaattisia toimintoja. Tekijän oletus työnkulku on auki (voit tehdä asioita haluamassasi järjestyksessä), mutta täällä voit aktivoida joitain automaattisia toimintoja. ThereIsNoWorkflowToModify=Aktivoiduilla moduuleilla ei ole käytettävissä työnkulun muutoksia. # Autocreate -descWORKFLOW_PROPAL_AUTOCREATE_ORDER=Automaattisesti luo myyntitilaus, kun Tarjouspyyntö on allekirjoitettu (uuden tilauksen summa on sama kuin tarjous) -descWORKFLOW_PROPAL_AUTOCREATE_INVOICE=Automaattisesti luo asiakkaan lasku, kun Tarjouspyyntö on allekirjoitettu (uudessa laskussa on sama summa kuin tarjous) +descWORKFLOW_PROPAL_AUTOCREATE_ORDER=Automatically create a sales order after a commercial proposal is signed (the new order will have same amount as the proposal) +descWORKFLOW_PROPAL_AUTOCREATE_INVOICE=Automatically create a customer invoice after a commercial proposal is signed (the new invoice will have same amount as the proposal) descWORKFLOW_CONTRACT_AUTOCREATE_INVOICE=luo asiakkaan lasku automaattisesti, kun sopimus on vahvistettu descWORKFLOW_ORDER_AUTOCREATE_INVOICE=Automaattisesti luo asiakkaan lasku myyntitilauksen sulkemisen jälkeen (uudessa laskussa on sama summa kuin tilauksessa) descWORKFLOW_TICKET_CREATE_INTERVENTION=Lippua luotaessa automaattisesti luo väliintulo. @@ -16,9 +16,9 @@ descWORKFLOW_INVOICE_CLASSIFY_BILLED_ORDER=Luokittele linkitetyt lähdemyyntitil descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING=Luokittele linkitetyt lähdemyyntitilaukset toimitetuiksi, kun lähetys vahvistetaan (ja, jos kaikkien lähetysten toimitettu määrä on sama kuin päivitettävässä tilauksessa) descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING_CLOSED=Luokittele linkitetyn lähteen myyntitilaus lähetetyksi, kun lähetys on suljettu (ja, jos kaikkien lähetysten lähetysmäärä on sama kuin päivitettävässä tilauksessa) # Autoclassify purchase proposal -descWORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL=Luokittele linkitetty lähde Toimittaja tarjous laskutetuksi, kun ostolasku on vahvistettu ( class='notranslate'>ja, jos laskun summa on sama kuin linkitettyjen ehdotusten kokonaissumma) +descWORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL=Classify linked source vendor proposal as billed when vendor invoice is validated (and if the amount of the invoice is the same as the total amount of the linked proposals) # Autoclassify purchase order -descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER=Luokittele linkitetty lähde Hankinta tilaus laskutetuksi, kun ostolasku on vahvistettu (ja laskun summa on sama kuin linkitettyjen tilausten kokonaissumma) +descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER=Classify linked source purchase order as billed when vendor invoice is validated (and if the amount of the invoice is the same as the total amount of the linked orders) descWORKFLOW_ORDER_CLASSIFY_RECEIVED_RECEPTION=Luokittele linkitetyn lähteen Hankinta tilaus vastaanotetuksi, kun vastaanotto on vahvistettu (ja, jos kaikkien vastaanottojen vastaanottama määrä on sama kuin kohdassa Hankinta päivitysjärjestys) descWORKFLOW_ORDER_CLASSIFY_RECEIVED_RECEPTION_CLOSED=Luokittele linkitetyn lähteen Hankinta tilaus vastaanotetuksi, kun vastaanotto suljetaan (ja, jos kaikkien vastaanottojen vastaanottama määrä on sama kuin kohdassa Hankinta päivitysjärjestys) # Autoclassify shipment diff --git a/htdocs/langs/fr_BE/errors.lang b/htdocs/langs/fr_BE/errors.lang new file mode 100644 index 00000000000..a2f9be5ee1f --- /dev/null +++ b/htdocs/langs/fr_BE/errors.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - errors +ErrorParameterMustBeEnabledToAllwoThisFeature=Error, parameter %s must be enabled into conf/conf.php<> to allow use of Command Line Interface by the internal job scheduler diff --git a/htdocs/langs/fr_BE/languages.lang b/htdocs/langs/fr_BE/languages.lang deleted file mode 100644 index 879813b70ad..00000000000 --- a/htdocs/langs/fr_BE/languages.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - languages -Language_en_AE=English (United Arab Emirates) diff --git a/htdocs/langs/fr_BE/main.lang b/htdocs/langs/fr_BE/main.lang index 3042af1642f..1e1313ac698 100644 --- a/htdocs/langs/fr_BE/main.lang +++ b/htdocs/langs/fr_BE/main.lang @@ -25,5 +25,4 @@ DateEnd=Date de fin AmountPayment=Montant de paiement Discount=Ristourne Unknown=Inconnue -Check=Chèque ValidatePayment=Valider paiement diff --git a/htdocs/langs/fr_CH/errors.lang b/htdocs/langs/fr_CH/errors.lang new file mode 100644 index 00000000000..a2f9be5ee1f --- /dev/null +++ b/htdocs/langs/fr_CH/errors.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - errors +ErrorParameterMustBeEnabledToAllwoThisFeature=Error, parameter %s must be enabled into conf/conf.php<> to allow use of Command Line Interface by the internal job scheduler diff --git a/htdocs/langs/fr_CH/holiday.lang b/htdocs/langs/fr_CH/holiday.lang deleted file mode 100644 index 254b07b0308..00000000000 --- a/htdocs/langs/fr_CH/holiday.lang +++ /dev/null @@ -1,4 +0,0 @@ -# Dolibarr language file - Source file is en_US - holiday -MenuCollectiveAddCP=New collective leave -NewHolidayForGroup=New collective leave -SendRequestCollectiveCP=Create collective leave diff --git a/htdocs/langs/fr_CH/languages.lang b/htdocs/langs/fr_CH/languages.lang deleted file mode 100644 index 879813b70ad..00000000000 --- a/htdocs/langs/fr_CH/languages.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - languages -Language_en_AE=English (United Arab Emirates) diff --git a/htdocs/langs/fr_CI/errors.lang b/htdocs/langs/fr_CI/errors.lang new file mode 100644 index 00000000000..a2f9be5ee1f --- /dev/null +++ b/htdocs/langs/fr_CI/errors.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - errors +ErrorParameterMustBeEnabledToAllwoThisFeature=Error, parameter %s must be enabled into conf/conf.php<> to allow use of Command Line Interface by the internal job scheduler diff --git a/htdocs/langs/fr_CI/holiday.lang b/htdocs/langs/fr_CI/holiday.lang deleted file mode 100644 index 254b07b0308..00000000000 --- a/htdocs/langs/fr_CI/holiday.lang +++ /dev/null @@ -1,4 +0,0 @@ -# Dolibarr language file - Source file is en_US - holiday -MenuCollectiveAddCP=New collective leave -NewHolidayForGroup=New collective leave -SendRequestCollectiveCP=Create collective leave diff --git a/htdocs/langs/fr_CI/languages.lang b/htdocs/langs/fr_CI/languages.lang deleted file mode 100644 index 879813b70ad..00000000000 --- a/htdocs/langs/fr_CI/languages.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - languages -Language_en_AE=English (United Arab Emirates) diff --git a/htdocs/langs/fr_CM/errors.lang b/htdocs/langs/fr_CM/errors.lang new file mode 100644 index 00000000000..a2f9be5ee1f --- /dev/null +++ b/htdocs/langs/fr_CM/errors.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - errors +ErrorParameterMustBeEnabledToAllwoThisFeature=Error, parameter %s must be enabled into conf/conf.php<> to allow use of Command Line Interface by the internal job scheduler diff --git a/htdocs/langs/fr_CM/holiday.lang b/htdocs/langs/fr_CM/holiday.lang deleted file mode 100644 index 254b07b0308..00000000000 --- a/htdocs/langs/fr_CM/holiday.lang +++ /dev/null @@ -1,4 +0,0 @@ -# Dolibarr language file - Source file is en_US - holiday -MenuCollectiveAddCP=New collective leave -NewHolidayForGroup=New collective leave -SendRequestCollectiveCP=Create collective leave diff --git a/htdocs/langs/fr_CM/languages.lang b/htdocs/langs/fr_CM/languages.lang deleted file mode 100644 index 879813b70ad..00000000000 --- a/htdocs/langs/fr_CM/languages.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - languages -Language_en_AE=English (United Arab Emirates) diff --git a/htdocs/langs/fr_FR/admin.lang b/htdocs/langs/fr_FR/admin.lang index e1f9705b6b2..3750b9bab8a 100644 --- a/htdocs/langs/fr_FR/admin.lang +++ b/htdocs/langs/fr_FR/admin.lang @@ -88,6 +88,8 @@ SearchString=Chaîne de recherche NotAvailableWhenAjaxDisabled=Non disponible quand Ajax est désactivé AllowToSelectProjectFromOtherCompany=Sur les éléments d'un tiers, autorise la sélection d'un projet lié à un autre tiers TimesheetPreventAfterFollowingMonths=Empêcher l'enregistrement du temps consacré après le nombre de mois suivant +PROJECT_DISPLAY_LINKED_BY_CONTACT=Afficher les projets liés par un contact +PROJECT_DISPLAY_LINKED_BY_CONTACT_help=Cette option permet d'ajouter la liste de tous les projets dans lesquels un des contact du tiers est rattaché JavascriptDisabled=Javascript désactivé UsePreviewTabs=Afficher les onglets "Aperçu" ShowPreview=Afficher aperçu @@ -190,7 +192,7 @@ Compression=Compression CommandsToDisableForeignKeysForImport=Commande pour désactiver les clés étrangères à l'importation CommandsToDisableForeignKeysForImportWarning=Requis si vous voulez être en mesure de restaurer votre « dump » SQL plus tard ExportCompatibility=Compatibilité du fichier d'exportation généré -ExportUseMySQLQuickParameter=Utiliser le paramètre --quick +ExportUseMySQLQuickParameter=Utiliser le paramètre --quick ExportUseMySQLQuickParameterHelp=Le paramètre '--quick' aide à réduire la consommation de RAM pour les longues listes MySqlExportParameters=Paramètres de l'exportation MySQL PostgreSqlExportParameters= Paramètres de l'exportation PostgreSQL @@ -302,7 +304,7 @@ MAIN_DISABLE_ALL_MAILS=Désactiver globalement tout envoi d'emails (pour mode te MAIN_MAIL_FORCE_SENDTO=Envoyer tous les emails à (au lieu des vrais destinataires, à des fins de test) MAIN_MAIL_ENABLED_USER_DEST_SELECT=Proposer les courriels des employés (si définis) dans la liste des destinataires prédéfinis lors de la rédaction d'un nouveau courriel MAIN_MAIL_NO_WITH_TO_SELECTED=Ne pas sélectionner de destinataire par défaut même si choix unique -MAIN_MAIL_SENDMODE=Sending method +MAIN_MAIL_SENDMODE=Méthode d'envoi MAIN_MAIL_SMTPS_ID=ID SMTP (si le serveur d'envoi nécessite une authentification) MAIN_MAIL_SMTPS_PW=Mot de passe SMTP (si le serveur d'envoi nécessite une authentification) MAIN_MAIL_EMAIL_TLS=Utiliser le chiffrement TLS (SSL) @@ -341,7 +343,7 @@ MenuHandlers=Gestionnaires de menu MenuAdmin=Édition menu DoNotUseInProduction=Ne pas utiliser en production ThisIsProcessToFollow=Procédure de mise à jour: -ThisIsAlternativeProcessToFollow=Voici une procédure de configuration alternative +ThisIsAlternativeProcessToFollow=Voici une procédure de configuration alternative StepNb=Étape %s FindPackageFromWebSite=Rechercher le paquet qui répond à votre besoin (par exemple sur le site web %s). DownloadPackageFromWebSite=Télécharger le package (par exemple depuis le site web officiel %s) @@ -366,8 +368,8 @@ GenericMaskCodes2={cccc} : code client sur n caractères
{cccc000}< GenericMaskCodes3=Tout autre caractère dans le masque sera laissé inchangé.
Les espaces ne sont pas permis.
GenericMaskCodes3EAN=Tous les autres caractères du masque resteront intacts (sauf * ou ? en 13ème position dans EAN13).
Les espaces ne sont pas autorisés.
Dans EAN13, le dernier caractère après le dernier } en 13ème position doit être * ou ? . Il sera remplacé par la clé calculée.
GenericMaskCodes4a=Exemple sur la 99eme %s du tiers LaCompanie, à la date du 31/01/2023:
-GenericMaskCodes4b= Exemple pour un tiers créé le 31/01/2023 :
-GenericMaskCodes4c= Exemple pour un produit créé le 31/01/2023 :
+GenericMaskCodes4b= Exemple pour un tiers créé le 31/01/2023 :
+GenericMaskCodes4c= Exemple pour un produit créé le 31/01/2023 :
GenericMaskCodes5=ABC{yy}{mm}-{000000} donnera ABC0703-000099
{0000+100@1}-XXX-{dd}-YYY donnera 0199-XXX-31-YYY
IN{yy}{mm}-{0000}-{t} donnera IN0701-0099-A si la société a le type 'Responsable Inscripto' avec le code type qui est 'A_RI' GenericNumRefModelDesc=Renvoie un numéro personnalisable selon un masque à définir. ServerAvailableOnIPOrPort=Serveur disponible à l'adresse %s sur le port %s @@ -512,7 +514,7 @@ WarningPHPMailD=Il est donc recommandé de changer la méthode d'envoi des e-mai WarningPHPMailDbis=Si vous voulez vraiment conserver la méthode par défaut "PHP" pour envoyer des e-mails, ignorez simplement cet avertissement ou supprimez-le en %scliquant ici%s. WarningPHPMail2=Si votre fournisseur de messagerie SMTP a besoin de restreindre le client de messagerie à certaines adresses IP (très rare), voici l'adresse IP du mail user agent (MUA) de votre application CRM ERP : %s . WarningPHPMailSPF=Si le nom de domaine de votre adresse e-mail d'expéditeur est protégé par un enregistrement SPF (demandez à votre fournisseur de nom de domaine), vous devez inclure les adresses IP suivantes dans l'enregistrement SPF du DNS de votre domaine: %s. -ActualMailSPFRecordFound=Enregistrement SPF réel trouvé (pour l'e-mail %s) : %s +ActualMailSPFRecordFound=Enregistrement SPF actuel trouvé (pour l'e-mail %s) : %s ClickToShowDescription=Cliquer pour afficher la description DependsOn=Ce module a besoin du(des) module(s) RequiredBy=Ce module est requis par le ou les module(s) @@ -684,7 +686,7 @@ Module5000Desc=Permet de gérer plusieurs sociétés Module6000Name=Workflow Inter-modules Module6000Desc=Gestion du workflow entre différents modules (création automatique d'objet et / ou de changement automatique d'état) Module10000Name=Sites web -Module10000Desc=CMS to create websites with a WYSIWYG editor. This is a webmaster or developer oriented Content Management System (it is better to know HTML and CSS language). Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the internet with your own domain name. +Module10000Desc=Système de gestion de contenu (CMS) pour créer des sites web avec un éditeur WYSIWYG. Il s'agit d'un CMS orienté webmaster ou développeur (il est préférable de connaître les langages HTML et CSS). Il suffit de configurer votre serveur web (Apache, Nginx, ...) pour qu'il pointe vers le répertoire Dolibarr dédié afin de le faire fonctionner sur Internet avec votre propre nom de domaine. Module20000Name=Demandes de congés Module20000Desc=Déclaration et suivi des congés des employés Module39000Name=Numéros de Lot/Série @@ -865,7 +867,7 @@ Permission286=Exporter les contacts Permission291=Consulter les tarifs Permission292=Définir les permissions sur les tarifs Permission293=Modifier les tarifs clients -Permission301=Générer la planche PDF de code barres +Permission301=Générer la planche PDF de code barres Permission304=Créer/modifier les codes-barres Permission305=Supprimer les codes-barres Permission311=Consulter les services @@ -1197,7 +1199,7 @@ Skin=Thème visuel DefaultSkin=Thème visuel par défaut MaxSizeList=Longueur maximale des listes DefaultMaxSizeList=Longueur maximale par défaut des listes -DisplayGrandTotalInList=Affiche le total général (de toutes les pages) en bas des listes +DisplayGrandTotalInList=Afficher le total général (pour toutes les pages) dans le pied de page des listes DefaultMaxSizeShortList=Longueur maximale par défaut des listes courtes (e.g. dans la fiche client) MessageOfDay=Message du jour MessageLogin=Message page de connexion @@ -1415,7 +1417,7 @@ NumberingModules=Modèles de numérotation DocumentModules=Modèles de documents ##### Module password generation PasswordGenerationStandard=Renvoie un mot de passe généré selon l'algorithme interne de Dolibarr : %s caractères contenant des nombres et des caractères partagés. -PasswordGenerationNone=Ne pas suggérer un mot de passe généré. Le mot de passe doit être entré manuellement. +PasswordGenerationNone=Ne pas suggérer un mot de passe généré. Le mot de passe doit être entré manuellement. PasswordGenerationPerso=Renvoie un mot de passe en fonction d'une configuration personnalisée. SetupPerso=Selon votre configuration PasswordPatternDesc=Description du masque du mot de passe @@ -1425,8 +1427,8 @@ DisableForgetPasswordLinkOnLogonPage=Cacher le lien "Mot de passe oublié" sur l UsersSetup=Configuration du module utilisateurs UserMailRequired=Email requis pour créer un nouvel utilisateur UserHideInactive=Masquer les utilisateurs inactifs sur toutes les listes déroulantes d'utilisateurs (non recommandé: cela peut signifier que vous ne pourrez pas filtrer ou rechercher les anciens utilisateurs sur certaines pages) -UserHideExternal=Masquer les utilisateurs externes (non liés à un tiers) sur toutes les listes déroulantes d'utilisateurs (non recommandé: cela peut signifier que vous ne pourrez pas filtrer ou rechercher les utilisateurs externes sur certaines pages) -UserHideNonEmployee=Masquer les utilisateurs externes (non salariés) sur toutes les listes déroulantes d'utilisateurs (non recommandé: cela peut signifier que vous ne pourrez pas filtrer ou rechercher les utilisateurs non salariés sur certaines pages) +UserHideExternal=Masquer les utilisateurs externes (non liés à un tiers) de toutes les listes combinées d'utilisateurs (Non recommandé : cela peut signifier que vous ne pourrez pas filtrer ou rechercher des utilisateurs externes sur certaines pages) +UserHideNonEmployee=Masquer les utilisateurs non-employés de toutes les listes combinées d'utilisateurs (Non recommandé : cela peut signifier que vous ne pourrez pas filtrer ou rechercher les utilisateurs non-employés sur certaines pages) UsersDocModules=Modèles de documents pour les documents générés à partir de la fiche utilisateur GroupsDocModules=Modèles de documents pour les documents générés à partir de la fiche d'un groupe ##### HRM setup ##### @@ -1499,7 +1501,7 @@ OrdersNumberingModules=Modèles de numérotation des commandes OrdersModelModule=Modèles de document des commandes FreeLegalTextOnOrders=Mention complémentaire sur les commandes WatermarkOnDraftOrders=Filigrane sur les brouillons de commandes (aucun si vide) -ShippableOrderIconInList=Ajouter une icône dans la liste des commandes qui indique si la commande est expédiable. +ShippableOrderIconInList=Ajouter une icône dans la liste des commandes qui indique si la commande est expédiable. BANK_ASK_PAYMENT_BANK_DURING_ORDER=Demander le compte bancaire cible durant la commande ##### Interventions ##### InterventionsSetup=Configuration du module Interventions @@ -1691,7 +1693,7 @@ TestNotPossibleWithCurrentBrowsers=Une détection automatique n'est pas possible DefaultValuesDesc=Vous pouvez définir/forcer ici la valeur par défaut que vous voulez obtenir lorsque vous créez un nouvel enregistrement, et/ou les filtres par défaut ou ordre de tri des listes. DefaultCreateForm=Valeurs par défaut (sur les formulaires de création) DefaultSearchFilters=Filtres de recherche par défaut -DefaultSortOrder=Ordre de tri par défaut +DefaultSortOrder=Ordre de tri par défaut DefaultFocus=Champs par défaut ayant le focus DefaultMandatory=Champs de formulaire obligatoires ##### Products ##### @@ -1912,7 +1914,7 @@ ChequeReceiptsNumberingModule=Module de numérotation des bordereaux de remises MultiCompanySetup=Configuration du module Multi-société ##### Suppliers ##### SuppliersSetup=Configuration du module Fournisseurs -SuppliersCommandModel=Modèle de commande fournisseur complet +SuppliersCommandModel=Modèle de commande fournisseur complet SuppliersCommandModelMuscadet=Modèle de commande fournisseur complet (ancienne implémentation du modèle Cornas) SuppliersInvoiceModel=Modèle de facture fournisseur complet SuppliersInvoiceNumberingModel=Modèles de numérotation des factures fournisseur @@ -1947,7 +1949,7 @@ NbMajMin=Nombre minimal de caractères majuscules NbNumMin=Nombre minimal de caractères numériques NbSpeMin=Nombre minimal de caractères spéciaux NbIteConsecutive=Nombre maximal de répétition des mêmes caractères -NoAmbiCaracAutoGeneration=Ne pas utiliser des caractères ambigus ("1","l","i","|","0","O") pour la génération automatique +NoAmbiCaracAutoGeneration=Ne pas utiliser des caractères ambigus ("1","l","i","|","0","O") pour la génération automatique SalariesSetup=Configuration du module salaires SortOrder=Ordre de tri Format=Format @@ -1968,7 +1970,7 @@ GoOntoContactCardToAddMore=Rendez-vous sur l'onglet "Notifications" d'un tiers p Threshold=Seuil BackupDumpWizard=Assistant pour créer le fichier dump de la base de données BackupZipWizard=Assistant pour générer l'archive du répertoire documents -SomethingMakeInstallFromWebNotPossible=L'installation de module externe est impossible depuis l'interface web pour la raison suivante : +SomethingMakeInstallFromWebNotPossible=L'installation de module externe est impossible depuis l'interface web pour la raison suivante : SomethingMakeInstallFromWebNotPossible2=Pour cette raison, le processus de mise à jour décrit ici est une processus manuel que seul un utilisateur ayant des droits privilégiés peut réaliser. InstallModuleFromWebHasBeenDisabledContactUs=L'installation ou le développement de modules externes ou de sites Web dynamiques, à partir de l'application, est actuellement verrouillé pour des raisons de sécurité. Veuillez nous contacter si vous avez besoin d'activer cette fonctionnalité. InstallModuleFromWebHasBeenDisabledByFile=L'installation de module externe depuis l'application a été désactivé par l'administrateur. Vous devez lui demander de supprimer le fichier %s pour permettre cette fonctionnalité. @@ -2430,7 +2432,16 @@ TryToKeepOnly=Essayez de ne conserver que %s RecommendedForProduction=Recommandé pour la production RecommendedForDebug=Recommandé pour le débogage UrlPublicInterfaceLabelAdmin=URL alternative pour l'interface publique -UrlPublicInterfaceHelpAdmin=Il est possible de définir un alias vers le serveur et de rendre ainsi l'interface publique accessible avec une autre URL (le serveur doit agir comme un proxy sur cette nouvelle URL) -ExportUseForce=Use the parameter -f -ExportUseForceHelp=Force to continue the export even when an error is found (Backup may not be reliable) -CustomPrompt=Custom prompts +UrlPublicInterfaceHelpAdmin=Il est possible de définir un alias vers le serveur web et ainsi rendre l'interface publique accessible avec une autre URL (le serveur hôte virtuel doit agir comme un proxy sur l'URL standard) +ExportUseForce=Utilisez le paramètre -f +ExportUseForceHelp=Forcer la poursuite de l'exportation même en cas d'erreur (La sauvegarde peut ne pas être fiable) +CustomPrompt=Instructions personnalisées +AiDescription=Fonctionnalités d'IA (Intelligence Artificielle) +AiDescriptionLong=Fournit des fonctionnalités d'IA (Intelligence Artificielle) dans différentes parties de l'application. Besoin d'une API d'IA externe. +AI_KEY_API_CHATGPT= Clé pour l'API ChatGPT +AiSetup=Configuration du module d'IA +AiCustomPrompt=Instructions personnalisées pour l'IA +AI_CONFIGURATIONS_PROMPT=Instruction personnalisée +ImageGeneration=Génération d'image +AIPromptForFeatures=Instructions personnalisées de l'IA pour les fonctionnalités +EnterAnIP=Entrez une adresse IP diff --git a/htdocs/langs/fr_FR/agenda.lang b/htdocs/langs/fr_FR/agenda.lang index 4d031f398d7..2c858536528 100644 --- a/htdocs/langs/fr_FR/agenda.lang +++ b/htdocs/langs/fr_FR/agenda.lang @@ -101,7 +101,7 @@ PRODUCT_MODIFYInDolibarr=Produit %s modifié PRODUCT_DELETEInDolibarr=Produit%ssupprimé HOLIDAY_CREATEInDolibarr=Demande de congé %s créée HOLIDAY_MODIFYInDolibarr=Demande de congé %s modifiée -HOLIDAY_APPROVEInDolibarr=Demande de congé %s approuvée +HOLIDAY_APPROVEInDolibarr=Demande de congé %s approuvée HOLIDAY_VALIDATEInDolibarr=Demande de congé %s validée HOLIDAY_DELETEInDolibarr=Demande de congé %s supprimée EXPENSE_REPORT_CREATEInDolibarr=Note de frais %s créée @@ -201,4 +201,4 @@ AppointmentDuration = Durée du rendez-vous : %s BookingSuccessfullyBooked=Votre réservation a été enregistrée BookingReservationHourAfter=Nous confirmons la réservation de votre rendez-vous à la date %s BookcalBookingTitle=Rendez-vous en ligne -Transparency = Transparency +Transparency = Transparence diff --git a/htdocs/langs/fr_FR/ai.lang b/htdocs/langs/fr_FR/ai.lang deleted file mode 100644 index f6eb575e977..00000000000 --- a/htdocs/langs/fr_FR/ai.lang +++ /dev/null @@ -1 +0,0 @@ -AI_KEY_API_CHATGPT= Clé pour l'api IA \ No newline at end of file diff --git a/htdocs/langs/fr_FR/assets.lang b/htdocs/langs/fr_FR/assets.lang index a03327da420..82053c3ba3b 100644 --- a/htdocs/langs/fr_FR/assets.lang +++ b/htdocs/langs/fr_FR/assets.lang @@ -22,26 +22,26 @@ AccountancyCodeDepreciationAsset=Code comptable (compte d'amortissement) AccountancyCodeDepreciationExpense=Code comptable (compte de charges d'amortissement) AssetsLines=Immobilisations DeleteType=Supprimer -DeleteAnAssetType=Supprimer un modèle d'actif -ConfirmDeleteAssetType=Voulez-vous vraiment supprimer ce modèle d'actif ? +DeleteAnAssetType=Supprimer un modèle d'immobilisation +ConfirmDeleteAssetType=Êtes-vous sûr de vouloir supprimer ce modèle d'immobilisation ? ShowTypeCard=Afficher le modèle '%s' # Module label 'ModuleAssetsName' ModuleAssetsName=Immobilisations # Module description 'ModuleAssetsDesc' -ModuleAssetsDesc=Module pour suivre vos immobilisations +ModuleAssetsDesc=Module de suivi des immobilisations # # Admin page # AssetSetup=Configuration du module immobilisations -AssetSetupPage=Page de configuration des actifs -ExtraFieldsAssetModel=Attributs complémentaires (modèle d'Asset) +AssetSetupPage=Page de configuration des immobilisations +ExtraFieldsAssetModel=Attributs complémentaires (modèle d'immobilisation) -AssetsType=Modèle d'actif -AssetsTypeId=ID du modèle d'actif -AssetsTypeLabel=Libellé du modèle d'actif -AssetsTypes=Modèles d'actifs +AssetsType=Modèle d'immobilisation +AssetsTypeId=ID du modèle d'immobilisation +AssetsTypeLabel=Libellé du modèle d'immobilisation +AssetsTypes=Modèles d'immobilisation ASSET_ACCOUNTANCY_CATEGORY=Groupe de comptabilité des immobilisations # @@ -49,15 +49,15 @@ ASSET_ACCOUNTANCY_CATEGORY=Groupe de comptabilité des immobilisations # MenuAssets=Immobilisations MenuNewAsset=Nouvelle immobilisation -MenuAssetModels=Actifs du modèle +MenuAssetModels=Modèles d'immobilisation MenuListAssets=Liste -MenuNewAssetModel=Nouveau modèle d'actif +MenuNewAssetModel=Nouveau modèle d'immobilisation MenuListAssetModels=Liste # # Module # -ConfirmDeleteAsset=Voulez-vous vraiment supprimer cet élément ? +ConfirmDeleteAsset=Êtes-vous sûr de vouloir supprimer cette immobilisation ? # # Tab @@ -78,23 +78,23 @@ AssetReversalDate=Date d'annulation AssetDateAcquisition=Date d'achat AssetDateStart=Date de démarrage AssetAcquisitionType=Type d'acquisition -AssetAcquisitionTypeNew=Nouveau type -AssetAcquisitionTypeOccasion=Utilisé -AssetType=Type d'actif -AssetTypeIntangible=Intangible -AssetTypeTangible=Tangible +AssetAcquisitionTypeNew=Neuve +AssetAcquisitionTypeOccasion=Occasion +AssetType=Type d'immobilisation +AssetTypeIntangible=Incorporelle +AssetTypeTangible=Corporelle AssetTypeInProgress=En cours -AssetTypeFinancial=Financier -AssetNotDepreciated=Non amorti -AssetDisposal=Disposition -AssetConfirmDisposalAsk=Êtes-vous sûr de vouloir céder l'actif %s  ? -AssetConfirmReOpenAsk=Voulez-vous vraiment rouvrir l'actif %s  ? +AssetTypeFinancial=Financière +AssetNotDepreciated=Non amortissable +AssetDisposal=Cession +AssetConfirmDisposalAsk=Êtes-vous sûr de vouloir céder l'immobilisation %s ? +AssetConfirmReOpenAsk=Êtes-vous sûr de vouloir rouvrir l'immobilisation %s  ? # # Asset status # AssetInProgress=En cours -AssetDisposed=Disposé +AssetDisposed=Cédée AssetRecorded=Comptabilisé # @@ -102,85 +102,84 @@ AssetRecorded=Comptabilisé # AssetDisposalDate=Date de cession AssetDisposalAmount=Valeur de cession -AssetDisposalType=Type d'élimination +AssetDisposalType=Type de cession AssetDisposalDepreciated=Amortir l'année du transfert AssetDisposalSubjectToVat=Cession soumise à TVA # # Asset model # -AssetModel=Modèle d'actif -AssetModels=Modèles d'actifs +AssetModel=Modèle d'immobilisation +AssetModels=Modèles des immobilisations # # Asset depreciation options # AssetDepreciationOptionEconomic=Amortissement économique -AssetDepreciationOptionAcceleratedDepreciation=Amortissement accéléré (impôt) +AssetDepreciationOptionAcceleratedDepreciation=Dérogatoire (fiscal) AssetDepreciationOptionDepreciationType=Type d'amortissement AssetDepreciationOptionDepreciationTypeLinear=Linéaire AssetDepreciationOptionDepreciationTypeDegressive=Dégressif AssetDepreciationOptionDepreciationTypeExceptional=Exceptionnel -AssetDepreciationOptionDegressiveRate=Tarif dégressif -AssetDepreciationOptionAcceleratedDepreciation=Amortissement accéléré (impôt) +AssetDepreciationOptionDegressiveRate=Coefficient dégressif AssetDepreciationOptionDuration=Durée -AssetDepreciationOptionDurationType=Tapez la durée +AssetDepreciationOptionDurationType=Type de durée AssetDepreciationOptionDurationTypeAnnual=Annuel AssetDepreciationOptionDurationTypeMonthly=Mensuel -AssetDepreciationOptionDurationTypeDaily=du quotidien +AssetDepreciationOptionDurationTypeDaily=Journalier AssetDepreciationOptionRate=Taux (%%) -AssetDepreciationOptionAmountBaseDepreciationHT=Base d'amortissement (hors TVA) -AssetDepreciationOptionAmountBaseDeductibleHT=Base déductible (hors TVA) -AssetDepreciationOptionTotalAmountLastDepreciationHT=Montant total dernier amortissement (hors TVA) +AssetDepreciationOptionAmountBaseDepreciationHT=Base amortissable (HT) +AssetDepreciationOptionAmountBaseDeductibleHT=Base déductible (HT) +AssetDepreciationOptionTotalAmountLastDepreciationHT=Cumul amortissement N-1 (HT) # # Asset accountancy codes # AssetAccountancyCodeDepreciationEconomic=Amortissement économique -AssetAccountancyCodeAsset=Immobilisations -AssetAccountancyCodeDepreciationAsset=Dépréciation -AssetAccountancyCodeDepreciationExpense=La charge d'amortissement -AssetAccountancyCodeValueAssetSold=Valeur de l'actif cédé -AssetAccountancyCodeReceivableOnAssignment=A recevoir sur cession -AssetAccountancyCodeProceedsFromSales=Produit de la cession +AssetAccountancyCodeAsset=Immobilisation +AssetAccountancyCodeDepreciationAsset=Amortissement +AssetAccountancyCodeDepreciationExpense=Dotation +AssetAccountancyCodeValueAssetSold=Valeur comptable immobilisation cédée +AssetAccountancyCodeReceivableOnAssignment=Créance sur cession +AssetAccountancyCodeProceedsFromSales=Produit de cession AssetAccountancyCodeVatCollected=TVA collectée -AssetAccountancyCodeVatDeductible=TVA récupérée sur les actifs -AssetAccountancyCodeDepreciationAcceleratedDepreciation=Amortissement accéléré (impôt) +AssetAccountancyCodeVatDeductible=TVA récupérée sur immobilisation +AssetAccountancyCodeDepreciationAcceleratedDepreciation=Amortissement dérogatoire (fiscal) AssetAccountancyCodeAcceleratedDepreciation=Compte AssetAccountancyCodeEndowmentAcceleratedDepreciation=La charge d'amortissement -AssetAccountancyCodeProvisionAcceleratedDepreciation=Reprise/Fourniture +AssetAccountancyCodeProvisionAcceleratedDepreciation=Reprise/Provision # # Asset depreciation # -AssetBaseDepreciationHT=Base d'amortissement (hors TVA) +AssetBaseDepreciationHT=Base d'amortissement (HT) AssetDepreciationBeginDate=Début de l'amortissement le AssetDepreciationDuration=Durée AssetDepreciationRate=Taux (%%) AssetDepreciationDate=Date d'amortissement -AssetDepreciationHT=Amortissement (hors TVA) -AssetCumulativeDepreciationHT=Amortissements cumulés (hors TVA) -AssetResidualHT=Valeur résiduelle (hors TVA) -AssetDispatchedInBookkeeping=Amortissement enregistré -AssetFutureDepreciationLine=Amortissement futur -AssetDepreciationReversal=Renversement +AssetDepreciationHT=Amortissement (HT) +AssetCumulativeDepreciationHT=Cumul de l'amortissement (HT) +AssetResidualHT=Valeur résiduelle (HT) +AssetDispatchedInBookkeeping=Amortissement comptabilisé +AssetFutureDepreciationLine=Future amortissement +AssetDepreciationReversal=Reprise # # Errors # -AssetErrorAssetOrAssetModelIDNotProvide=L'identifiant de l'élément ou du son du modèle n'a pas été fourni -AssetErrorFetchAccountancyCodesForMode=Erreur lors de la récupération des comptes comptables pour le mode d'amortissement '%s' -AssetErrorDeleteAccountancyCodesForMode=Erreur lors de la suppression des comptes comptables du mode d'amortissement '%s' -AssetErrorInsertAccountancyCodesForMode=Erreur lors de l'insertion des comptes comptables du mode d'amortissement '%s' -AssetErrorFetchDepreciationOptionsForMode=Erreur lors de la récupération des options pour le mode d'amortissement '%s' -AssetErrorDeleteDepreciationOptionsForMode=Erreur lors de la suppression des options de mode d'amortissement '%s' -AssetErrorInsertDepreciationOptionsForMode=Erreur lors de l'insertion des options de mode d'amortissement '%s' +AssetErrorAssetOrAssetModelIDNotProvide=L'identifiant de l'immobilisation ou du modèle trouvé n'a pas été fourni +AssetErrorFetchAccountancyCodesForMode=Erreur lors de la récupération des comptes comptables pour le modèle d'immobilisation '%s' +AssetErrorDeleteAccountancyCodesForMode=Erreur lors de la suppression des comptes comptables pour le modèle d'immobilisation '%s' +AssetErrorInsertAccountancyCodesForMode=Erreur lors de l'insertion des comptes comptables pour le modèle d'immobilisation '%s' +AssetErrorFetchDepreciationOptionsForMode=Erreur lors de la récupération des options pour le modèle d'immobilisation '%s' +AssetErrorDeleteDepreciationOptionsForMode=Erreur lors de la suppression des options pour le modèle d'immobilisation '%s' +AssetErrorInsertDepreciationOptionsForMode=Erreur lors de l'insertion des options pour le modèle d'immobilisation '%s' AssetErrorFetchDepreciationLines=Erreur lors de la récupération des lignes d'amortissement enregistrées -AssetErrorClearDepreciationLines=Erreur lors de la purge des lignes d'amortissement comptabilisées (extourne et future) +AssetErrorClearDepreciationLines=Erreur lors de la purge des lignes d'amortissement comptabilisées (reprise et future) AssetErrorAddDepreciationLine=Erreur lors de l'ajout d'une ligne d'amortissement AssetErrorCalculationDepreciationLines=Erreur lors du calcul des lignes d'amortissement (reprise et future) -AssetErrorReversalDateNotProvidedForMode=La date de renversement n'est pas fournie pour la méthode d'amortissement '%s' -AssetErrorReversalDateNotGreaterThanCurrentBeginFiscalDateForMode=La date d'annulation doit être supérieure ou égale au début de l'exercice en cours pour la méthode d'amortissement '%s' -AssetErrorReversalAmountNotProvidedForMode=Le montant de la contrepassation n'est pas fourni pour le mode d'amortissement '%s'. -AssetErrorFetchCumulativeDepreciation=Erreur lors de la récupération du montant de l'amortissement cumulé à partir de la ligne d'amortissement +AssetErrorReversalDateNotProvidedForMode=La date de reprise n'est pas fournie pour le modèle d'immobilisation '%s' +AssetErrorReversalDateNotGreaterThanCurrentBeginFiscalDateForMode=La date de reprise doit être supérieure ou égale au début de l'exercice fiscal en cours pour le modèle d'immobilisation '%s' +AssetErrorReversalAmountNotProvidedForMode=Le montant de la reprise n'est pas fourni pour le modèle d'immobilisation '%s'. +AssetErrorFetchCumulativeDepreciation=Erreur lors de la récupération du montant de l'amortissement cumulé de la ligne d'amortissement AssetErrorSetLastCumulativeDepreciation=Erreur lors de l'enregistrement du dernier montant d'amortissement cumulé diff --git a/htdocs/langs/fr_FR/bills.lang b/htdocs/langs/fr_FR/bills.lang index de5ce64620e..2126cff249f 100644 --- a/htdocs/langs/fr_FR/bills.lang +++ b/htdocs/langs/fr_FR/bills.lang @@ -93,9 +93,9 @@ CodePaymentMode=Mode de règlement (code) LabelPaymentMode=Mode de règlement (libellé) PaymentModeShort=Mode règlement PaymentTerm=Condition de règlement -IdPaymentTerm=Payment term (id) -CodePaymentTerm=Payment term (code) -LabelPaymentTerm=Payment term (label) +IdPaymentTerm=Terme de paiement (id) +CodePaymentTerm=Terme de paiement (code) +LabelPaymentTerm=Terme de paiement (étiquette) PaymentConditions=Conditions de règlement PaymentConditionsShort=Conditions de règlement PaymentAmount=Montant règlement @@ -118,7 +118,7 @@ SearchASupplierInvoice=Rechercher une facture fournisseur CancelBill=Annuler une facture SendRemindByMail=Envoyer une relance par email DoPayment=Saisir règlement -DoPaymentBack=Saisir remboursement +DoPaymentBack=Saisir remboursement ConvertToReduc=Marquer comme crédit disponible ConvertExcessReceivedToReduc=Convertir le trop-perçu en crédit disponible ConvertExcessPaidToReduc=Convertir le trop-payé en crédit disponible @@ -653,3 +653,7 @@ InvoiceSubtype=Sous-type de facture SalaryInvoice=Salaire BillsAndSalaries=Factures et salaires CreateCreditNoteWhenClientInvoiceExists=Cette option est activée uniquement lorsqu'une ou plusieurs factures validées existent pour un client ou lorsque la constante INVOICE_CREDIT_NOTE_STANDALONE est utilisée (utile pour certains pays) +SearchUnpaidSupplierInvoicesWithDueDate=Rechercher les factures fournisseur impayées avec date d'échéance = %s +SearchValidatedSupplierInvoicesWithDate=Rechercher les factures fournisseur impayées avec une date de validation = %s +SupplierInvoiceUnpaidContent=La facture fournisseur __REF__ n'a pas encore été payé : +SendEmailsRemindersOnSupplierInvoiceDueDate=Envoyer un rappel par email pour les factures fournisseur validées et impayées diff --git a/htdocs/langs/fr_FR/cashdesk.lang b/htdocs/langs/fr_FR/cashdesk.lang index fbdaac91f65..9d6976b8c2a 100644 --- a/htdocs/langs/fr_FR/cashdesk.lang +++ b/htdocs/langs/fr_FR/cashdesk.lang @@ -105,10 +105,10 @@ ControlCashOpening=Ouvrez la fenêtre contextuelle "Contrôle de caisse" lors de CloseCashFence=Fermeture de caisse CashReport=Rapport de caisse MainPrinterToUse=Imprimante principale à utiliser -MainPrinterToUseMore=empty means the browser printer system +MainPrinterToUseMore=vide signifie le système d'impression du navigateur OrderPrinterToUse=Imprimante à utiliser MainTemplateToUse=Modèle principal à utiliser -MainTemplateToUseMore=when not using browser printing system +MainTemplateToUseMore=quand on n'utilise pas le système d'impression du navigateur OrderTemplateToUse=Modèle de commande à utiliser BarRestaurant=Bar Restaurant AutoOrder=Commande par le client lui même @@ -146,6 +146,7 @@ ShowProductReference=Afficher la référence ou libellé des produits UsePriceHT=Utilisez le prix HT et non le prix TTC lors de la modification d'un prix. TerminalName=Terminal %s TerminalNameDesc=Nom du terminal +TakePosCustomerMandatory=Vous devez choisir un client DefaultPOSThirdLabel=Client générique TakePOS DefaultPOSCatLabel=Produits du Point de Vente (PdV) DefaultPOSProductLabel=Exemple de produit pour TakePOS @@ -154,5 +155,5 @@ LineDiscount=Remise de ligne LineDiscountShort=Remise ligne InvoiceDiscount=Remise facture InvoiceDiscountShort=Remise fac. -TestPrinterDesc=The server will send a simple test page to a ESC/POS printer -TestPrinterDesc2=The server will send an enhanced test page with image and barcode to a ESC/POS printer +TestPrinterDesc=Le serveur enverra une simple page de test à l'imprimante ESC/POS. +TestPrinterDesc2=Le serveur enverra une page de test améliorée avec une image et un code-barre à l'imprimante ESC/POS diff --git a/htdocs/langs/fr_FR/datapolicy.lang b/htdocs/langs/fr_FR/datapolicy.lang index 043a8809540..dd6377694aa 100644 --- a/htdocs/langs/fr_FR/datapolicy.lang +++ b/htdocs/langs/fr_FR/datapolicy.lang @@ -23,7 +23,7 @@ Module4100Desc = Module de gestion de la confidentialité des données (conformi # datapolicySetup = Configuration de la politique de confidentialité des données du module Deletion = Suppression de données -datapolicySetupPage = Depending on the laws of your countries (Example Article 5 of the GDPR), personal data must be kept for a period not exceeding the duration the data is needed for the purpose for which it was collected, except for archival purposes.
The deletion will be done automatically after a certain duration without events (the duration which you will have indicated below). +datapolicySetupPage = En fonction des législations de vos pays (Exemple Article 5 du RGPD), les données personnelles doivent être conservées pendant une durée n'excédant pas celle nécessaire aux finalités pour lesquelles elles ont été collectées, sauf à des fins d'archivage.
La suppression se fera automatiquement après une certaine durée sans événement (la durée que vous aurez indiquée ci-dessous). NB_MONTHS = %s mois ONE_YEAR = 1 an NB_YEARS = %s ans @@ -40,16 +40,16 @@ DATAPOLICY_CONTACT_FOURNISSEUR = Fournisseur DATAPOLICY_ADHERENT = Adhérent DATAPOLICY_Tooltip_SETUP = Type de contact - Indiquez vos choix pour chaque type. DATAPOLICYMail = Configuration des e-mails -DATAPOLICYSUBJECTMAIL = Subject of the email +DATAPOLICYSUBJECTMAIL = Objet du courriel DATAPOLICYCONTENTMAIL = Contenu de l'e-mail DATAPOLICYSUBSITUTION = Vous pouvez utiliser les variables suivantes dans votre email (LINKACCEPT permet de créer un lien enregistrant l'accord de la personne, LINKREFUSED permet d'enregistrer le refus de la personne) : DATAPOLICYACCEPT = Message après accord -DATAPOLICYREFUSE = Message after disagreement +DATAPOLICYREFUSE = Message après désaccord SendAgreementText = Vous pouvez envoyer un e-mail RGPD à tous vos contacts concernés (qui n'ont pas encore reçu d'e-mail et pour lesquels vous n'avez rien enregistré concernant leur accord RGPD). Pour ce faire, utilisez le bouton suivant. SendAgreement = Envoyer des emails AllAgreementSend = Tous les e-mails ont été envoyés TXTLINKDATAPOLICYACCEPT = Texte pour le lien "accord" -TXTLINKDATAPOLICYREFUSE = Text for the link "disagreement" +TXTLINKDATAPOLICYREFUSE = Texte pour le lien "désaccord" # @@ -57,8 +57,8 @@ TXTLINKDATAPOLICYREFUSE = Text for the link "disagreement" # DATAPOLICY_BLOCKCHECKBOX = RGPD : Traitement des données personnelles DATAPOLICY_consentement = Consentement obtenu pour le traitement des données personnelles -DATAPOLICY_opposition_traitement = Opposes to the processing of his personal data -DATAPOLICY_opposition_prospection = Opposes to the processing of his personal data for the purposes of prospecting +DATAPOLICY_opposition_traitement = S'oppose au traitement de ses données personnelles +DATAPOLICY_opposition_prospection = S'oppose au traitement de ses données personnelles à des fins de prospection # # Popup @@ -78,11 +78,11 @@ DATAPOLICY_PORTABILITE_CONFIRMATION = Vous souhaitez exporter les données perso # ANONYMISER_AT = Anonymisé le %s -DATAPOLICY_date = Date of agreement/disagreement GDPR -DATAPOLICY_send = Date agreement email sent +DATAPOLICY_date = Date d'accord/désaccord RGPD +DATAPOLICY_send = Date d'envoi de l'e-mail d'accord DATAPOLICY_SEND = Envoyer un e-mail RGPD MailSent = L'email a été envoyé # ERROR -=Due to a technical problem, we were unable to register your choice. We apologize for that. Contact us to notify us your choice. -NUMBER_MONTH_BEFORE_DELETION = Number of months before deletion +=Suite à un problème technique, nous n'avons pas pu enregistrer votre choix. Nous nous en excusons. Contactez-nous pour nous faire part de votre choix. +NUMBER_MONTH_BEFORE_DELETION = Nombre de mois avant la suppression diff --git a/htdocs/langs/fr_FR/donations.lang b/htdocs/langs/fr_FR/donations.lang index 617877bcf73..af8e14613d8 100644 --- a/htdocs/langs/fr_FR/donations.lang +++ b/htdocs/langs/fr_FR/donations.lang @@ -31,8 +31,7 @@ DONATION_ART200=Afficher article 200 du CGI si vous êtes concernés DONATION_ART238=Afficher article 238 du CGI si vous êtes concernés DONATION_ART978=Afficher article 978 du CGI si vous êtes concernés DonationPayment=Paiement du don +DonationPayments=Paiement du don DonationValidated=Don %s validé - DonationUseThirdparties=Utiliser un tiers existant comme coordonnées du donateur DonationsStatistics=Statistiques des dons - diff --git a/htdocs/langs/fr_FR/errors.lang b/htdocs/langs/fr_FR/errors.lang index 70aa3479b8d..8abb5564d03 100644 --- a/htdocs/langs/fr_FR/errors.lang +++ b/htdocs/langs/fr_FR/errors.lang @@ -8,7 +8,7 @@ ErrorBadEMail=L'email %s est invalide ErrorBadMXDomain=L'email %s semble incorrect (domaine n'a pas d'enregistrement MX valide) ErrorBadUrl=L'URL '%s' est invalide ErrorBadValueForParamNotAString=Mauvaise valeur de paramètre. Ceci arrive lors d'une tentative de traduction d'une clé non renseignée. -ErrorRefAlreadyExists=Reference %s used for creation already exists. +ErrorRefAlreadyExists=Référence %s utilisée pour la création existe déjà. ErrorTitleAlreadyExists=Le titre %s existe déjà ErrorLoginAlreadyExists=L'identifiant %s existe déjà. ErrorGroupAlreadyExists=Le groupe %s existe déjà. @@ -137,7 +137,7 @@ ErrorBothFieldCantBeNegative=Les champs %s et %s ne peuvent être tous deux nég ErrorFieldCantBeNegativeOnInvoice=Le champ %s ne peut pas être négatif sur ce type de facture. Si vous devez ajouter une ligne de remise, créez d'abord la remise (à partir du champ '%s' dans la fiche du tiers) et appliquez-la à la facture. ErrorLinesCantBeNegativeForOneVATRate=Le total des lignes (HT) ne peut pas être négatif pour un taux de TVA non null donné (Un total négatif pour le taux de %s%% a été trouvé). ErrorLinesCantBeNegativeOnDeposits=Les lignes ne peuvent pas être négatives dans un acompte. Si vous le faites, vous rencontrerez des problèmes lorsque vous devrez consommer l'acompte dans la facture finale. -ErrorQtyForCustomerInvoiceCantBeNegative=La quantité d'une ligne ne peut pas être négative dans les factures clients +ErrorQtyForCustomerInvoiceCantBeNegative=La quantité d'une ligne ne peut pas être négative dans les factures clients ErrorWebServerUserHasNotPermission=Le compte d'exécution du serveur web %s n'a pas les permissions pour cela ErrorNoActivatedBarcode=Aucun type de code-barres activé ErrUnzipFails=Impossible de décompresser le fichier %s avec ZipArchive @@ -171,7 +171,7 @@ ErrorPriceExpression5=Unexpected '%s' ErrorPriceExpression6=Nombre incorrect d'arguments (%s donné,%s attendu) ErrorPriceExpression8=Operateur '%s' non attendu ErrorPriceExpression9=Une erreur inattendue s'est produite -ErrorPriceExpression10=Il manque l'opérande à l'opérateur '%s' +ErrorPriceExpression10=Il manque l'opérande à l'opérateur '%s' ErrorPriceExpression11=Attendu '%s' ErrorPriceExpression14=Division par zéro ErrorPriceExpression17=Variable '%s' non définie @@ -245,7 +245,7 @@ ErrorHostMustNotStartWithHttp=L'URL %s ne doit PAS commencer par http:// ou http ErrorNewRefIsAlreadyUsed=Erreur, la nouvelle référence est déjà utilisée ErrorDeletePaymentLinkedToAClosedInvoiceNotPossible=Erreur, supprimer le paiement lié à une facture clôturée n'est pas possible. ErrorSearchCriteriaTooSmall=Critère de recherche trop petit. -ErrorObjectMustHaveStatusActiveToBeDisabled=Les objets doivent avoir le statut 'Actif' pour être désactivés +ErrorObjectMustHaveStatusActiveToBeDisabled=Les objets doivent avoir le statut 'Actif' pour être désactivés ErrorObjectMustHaveStatusDraftOrDisabledToBeActivated=Les objets doivent avoir le statut 'Brouillon' ou 'Désactivé' pour être activés ErrorNoFieldWithAttributeShowoncombobox=Aucun champ n'a la propriété 'showoncombobox' dans la définition de l'objet '%s'. Pas moyen d'afficher la liste de cases à cocher ErrorFieldRequiredForProduct=Le champ '%s' est obligatoire pour le produit %s @@ -325,7 +325,7 @@ ErrorSVGFilesNotAllowedAsLinksWithout=Les fichiers SVG ne sont pas autorisés en ErrorTypeMenu=Impossible d'ajouter un autre menu pour le même module sur la barre de navigation, pas encore géré ErrorObjectNotFound = L'objet %s n'est pas trouvé, veuillez vérifier votre url ErrorCountryCodeMustBe2Char=Le code pays doit être une chaîne de 2 caractères -ErrorABatchShouldNotContainsSpaces=A lot or serial number should not contains spaces +ErrorABatchShouldNotContainsSpaces=Un numéro de lot ou de série ne doit pas contenir d'espaces ErrorTableExist=Le tableau %s existe déjà ErrorDictionaryNotFound=Dictionnaire %s introuvable @@ -405,9 +405,9 @@ BadSetupOfFieldFileNotFound = Erreur mauvaise configuration du champ : Fichier i BadSetupOfFieldFetchNotCallable = Erreur mauvaise configuration du champ : Fetch non appelable sur la classe ErrorTooManyAttempts= Trop de tentatives, veuillez réessayer plus tard -TotalAmountEmpty=Total Amount Empty -FailedToFoundTheConversionRateForInvoice=Failed to found the conversion rate for invoice -ThisIdNotDefined=Id not defined -OperNotDefined=Payment method not defined -ErrorThisContactXIsAlreadyDefinedAsThisType=%s is already defined as contact for this type. -ErrorThisGroupIsAlreadyDefinedAsThisType=The contacts with this group are already defined as contact for this type. +TotalAmountEmpty=Montant total vide +FailedToFoundTheConversionRateForInvoice=Le taux de conversion de la facture n'a pas été trouvé +ThisIdNotDefined=Identifiant non défini +OperNotDefined=Méthode de paiement non définie +ErrorThisContactXIsAlreadyDefinedAsThisType=%s est déjà défini comme contact pour ce type. +ErrorThisGroupIsAlreadyDefinedAsThisType=Les contacts avec ce groupe sont déjà définis comme contact pour ce type. diff --git a/htdocs/langs/fr_FR/eventorganization.lang b/htdocs/langs/fr_FR/eventorganization.lang index 07a03bedafb..e774e113248 100644 --- a/htdocs/langs/fr_FR/eventorganization.lang +++ b/htdocs/langs/fr_FR/eventorganization.lang @@ -88,6 +88,7 @@ PriceOfRegistration=Prix de l'inscription PriceOfRegistrationHelp=Montant à payer pour l'enregistrement d'un participant à l'événement PriceOfBooth=Prix d’inscription pour un stand PriceOfBoothHelp=Prix d’inscription pour un stand +EventOrganizationICSLinkProject=Lien ICS pour l'événement EventOrganizationICSLink=Lien ICS pour les conférences ConferenceOrBoothInformation=Informations sur la conférence ou sur le stand Attendees=Participants diff --git a/htdocs/langs/fr_FR/mails.lang b/htdocs/langs/fr_FR/mails.lang index 820a090b54c..58027fe5eed 100644 --- a/htdocs/langs/fr_FR/mails.lang +++ b/htdocs/langs/fr_FR/mails.lang @@ -26,7 +26,7 @@ BodyNotIn=Pas dans le Message ShowEMailing=Afficher emailing ListOfEMailings=Liste des emailings NewMailing=Nouvel emailing -NewSMSing=New smsing +NewSMSing=Nouveau smsing EditMailing=Éditer emailing ResetMailing=Ré-envoyer emailing DeleteMailing=Supprimer emailing @@ -53,7 +53,7 @@ ConfirmValidMailing=Confirmez-vous la validation de l'emailing ? ConfirmResetMailing=Attention, en réinitialisant l'emailing %s, vous autorisez son émission en masse une nouvelle fois. Est-ce bien ce que vous voulez faire ? ConfirmDeleteMailing=Êtes-vous sûr de vouloir supprimer cet emailing ? NbOfUniqueEMails=Nombre d'emails uniques -NbOfUniquePhones=No. of unique phones +NbOfUniquePhones=Nb. de téléphones uniques NbOfEMails=Nb. d'emails TotalNbOfDistinctRecipients=Nombre de destinataires uniques NoTargetYet=Aucun destinataire défini (Aller sur l'onglet Destinataires) @@ -188,7 +188,7 @@ EmailOptedOut=Le propriétaire de l'e-mail a demandé à ne plus le contacter av EvenUnsubscribe=Inclure les e-mails désinscrits EvenUnsubscribeDesc=Inclure les e-mails étant désinscrit lorsque vous sélectionnez des e-mails comme cibles. Utile pour les emails de service obligatoires par exemple. XEmailsDoneYActionsDone=%s e-mails pré-qualifiés, %s e-mails traités avec succès (pour %s enregistrement/actions effectuées) -helpWithAi=Generate message from AI -YouCanMakeSomeInstructionForEmail=You can make some instructions for your Email (Example: generate image in email template...) -ModelTemplate=Email template -YouCanChooseAModelForYouMailContent= You can choose one of template models or generate one with AI +helpWithAi=Générer un message à partir de l'IA +YouCanMakeSomeInstructionForEmail=Vous pouvez créer des instructions pour votre e-mail (Exemple : générer une image dans un modèle d'e-mail...) +ModelTemplate=Modèles des e-mails +YouCanChooseAModelForYouMailContent= Vous pouvez choisir l'un des modèles proposés ou en créer un avec l'IA diff --git a/htdocs/langs/fr_FR/members.lang b/htdocs/langs/fr_FR/members.lang index c59614ec998..52044ce165f 100644 --- a/htdocs/langs/fr_FR/members.lang +++ b/htdocs/langs/fr_FR/members.lang @@ -238,11 +238,11 @@ MemberFirstname=Prénom du membre MemberLastname=Nom de famille du membre MemberCodeDesc=Code membre, unique pour tous les membres MemberSubscriptionStartFirstDayOf=La date de début d'adhésion correspond au premier jour de -MemberSubscriptionStartAfter=Délai minimum avant l'entrée en vigueur de la date de début d'une cotisation hors renouvellements (exemple +3m = +3 mois, -5d = -5 jours, +1Y = +1 an) -SubscriptionLinkedToConciliatedTransaction=Membership is linked to a conciliated transaction so this modification is not allowed. -ConfirmMassSubsriptionCreation=Confirm subscription creation -ConfirmMassSubsriptionCreationQuestion=Are you sure you want to create the %s selected subscription(s)? -XSubsriptionCreated=%s subscription(s) created -XSubsriptionErrors=%s subscription(s) where in error +MemberSubscriptionStartAfter=Délai minimum avant l'entrée en vigueur de la date de début d'une cotisation hors renouvellements (exemple +3m = +3 mois, -5d = -5 jours, +1Y = +1 an) +SubscriptionLinkedToConciliatedTransaction=L'adhésion est liée à une transaction rapprochée, donc cette modification n'est pas autorisée. +ConfirmMassSubsriptionCreation=Confirmer la création de cotisation +ConfirmMassSubsriptionCreationQuestion=Êtes-vous sûr de vouloir créer la/les cotisation(s) %s sélectionnée(s) ? +XSubsriptionCreated=%s cotisation(s) créée(s) +XSubsriptionErrors=%s cotisation(s) sont en erreur CreateSubscription=Créer cotisation -WarningNoComplementaryActionDone=No Complementary action on recording will be executed with this massaction +WarningNoComplementaryActionDone=Aucune action complémentaire d'enregistrement ne sera exécutée avec cette action de masse. diff --git a/htdocs/langs/fr_FR/modulebuilder.lang b/htdocs/langs/fr_FR/modulebuilder.lang index f3f331f7dd8..fe8e0920688 100644 --- a/htdocs/langs/fr_FR/modulebuilder.lang +++ b/htdocs/langs/fr_FR/modulebuilder.lang @@ -5,7 +5,7 @@ EnterNameOfModuleDesc=Entrez le nom du module/application à créer sans espaces EnterNameOfObjectDesc=Renseignez le nom de l'objet à créer, sans utiliser d'espace. Utilisez des majuscules pour séparer les termes (par exemple : MyObject, Student, Teacher...). Le fichier de classe CRUD, les pages pour lister/ajouter/modifier/supprimer l'objet et les fichiers SQL seront générés. EnterNameOfDictionaryDesc=Entrez le nom du dictionnaire à créer sans espaces. Utilisez des majuscules pour séparer les mots (Par exemple : MyDico...). Le fichier de classe, mais aussi le fichier SQL seront générés. ModuleBuilderDesc2=Chemin ou les modules sont générés/modifiés (premier répertoire pour les modules externes défini dans %s):%s -ModuleBuilderDesc3=Modules générés/éditables trouvés : %s +ModuleBuilderDesc3=Modules générés/éditables trouvés : %s ModuleBuilderDesc4=Un module est détecté comme un 'module pour Module Builder' lorsque le fichier %s existe à la racine du répertoire du module NewModule=Nouveau module NewObjectInModulebuilder=Nouvel objet @@ -27,7 +27,7 @@ ModuleBuilderDeschooks=Cet onglet est dédié aux points d'accroche. ModuleBuilderDescwidgets=Cet onglet est dédié à la gestion/construction de widgets. ModuleBuilderDescbuildpackage=Vous pouvez générer ici un fichier de package "prêt à distribuer" (un fichier .zip normalisé) de votre module et un fichier de documentation "prêt à distribuer". Cliquez simplement sur le bouton pour créer le paquet ou le fichier de documentation. EnterNameOfModuleToDeleteDesc=Vous pouvez supprimer votre module. ATTENTION: Tous les fichiers relatifs a ce module (générés ou créés manuellement) ET toutes les données et documentation seront supprimés! -EnterNameOfObjectToDeleteDesc=You can delete an object. WARNING: All coding files (generated or created manually) related to the object will be deleted! +EnterNameOfObjectToDeleteDesc=Vous pouvez supprimer un objet. ATTENTION : Tous les fichiers (générés ou créés manuellement) en rapport avec l'objet seront définitivement effacés ! DangerZone=Zone de danger BuildPackage=Construire le package BuildPackageDesc=Vous pouvez générer un package zip de votre application afin d'être prêt à le distribuer sur n’importe quel Dolibarr. Vous pouvez également le distribuer ou le vendre sur une place de marché, comme DoliStore.com . @@ -182,7 +182,7 @@ DictionaryDeleted=Dictionnaire %s supprimé avec succès PropertyModuleUpdated=La propriété %s a été mise à jour avec succès InfoForApiFile=* Lorsque vous générez fichier pour la première fois, toutes les méthodes seront créées pour chaque objet.
* Lorsque vous cliquez sur supprimer vous supprimez simplement toutes les méthodes pour l'objet sélectionné. SetupFile=Page de configuration du module -EmailingSelectors=Emails selectors +EmailingSelectors=Sélecteurs d'e-mails EmailingSelectorDesc=Vous pouvez générer et modifier ici les fichiers de classe afin de fournir de nouveaux sélecteurs de cibles d'e-mail pour le module d'e-mailing de masse. EmailingSelectorFile=Fichier de sélection des e-mails NoEmailingSelector=Aucun fichier de sélection d'e-mails diff --git a/htdocs/langs/fr_FR/orders.lang b/htdocs/langs/fr_FR/orders.lang index f66e621cc4b..46a66696fd4 100644 --- a/htdocs/langs/fr_FR/orders.lang +++ b/htdocs/langs/fr_FR/orders.lang @@ -130,7 +130,7 @@ DispatchSupplierOrder=Réception de la commande fournisseur %s FirstApprovalAlreadyDone=Premier niveau d'approbation déjà réalisé SecondApprovalAlreadyDone=Deuxième niveau d'approbation déjà réalisé SupplierOrderReceivedInDolibarr=Commande fournisseur %s réceptionné %s -SupplierOrderSubmitedInDolibarr=Purchase Order %s submitted (%s) +SupplierOrderSubmitedInDolibarr=Commande fournisseur %s soumise (%s) SupplierOrderClassifiedBilled=Commande fournisseur %s classée facturée OtherOrders=Autres commandes SupplierOrderValidatedAndApproved=Commande fournisseur validée et approuvée : %s diff --git a/htdocs/langs/fr_FR/other.lang b/htdocs/langs/fr_FR/other.lang index 76567aa8700..f183c1ed56f 100644 --- a/htdocs/langs/fr_FR/other.lang +++ b/htdocs/langs/fr_FR/other.lang @@ -3,7 +3,7 @@ SecurityCode=Code sécurité NumberingShort=N° Tools=Outils TMenuTools=Outils -ToolsDesc=Cet espace regroupe divers outils non accessibles par les autres entrées du menu.
Tous ces outils sont accessibles depuis le menu sur le côté.. +ToolsDesc=Cet espace regroupe divers outils non accessibles par les autres entrées du menu.
Tous ces outils sont accessibles depuis le menu sur le côté.. Birthday=Anniversaire BirthdayAlert=Alerte anniversaire BirthdayAlertOn=alerte anniversaire active @@ -300,7 +300,7 @@ ProductsPerPopularity=Produits par popularité ServicesPerPopularity=Services par popularité PopuProp=Produits|Services par popularité dans les devis PopuCom=Produits|Services par popularité dans les commandes -ProductStatistics=Statistiques Produits|Services +ProductStatistics=Statistiques Produits|Services NbOfQtyInOrders=Qté en commandes SelectTheTypeOfObjectToAnalyze=Sélectionner un objet pour en voir les statistiques @@ -336,3 +336,5 @@ FTPFailedToUploadFile=Impossible de télécharger le fichier %s. AddFolder=Créer un dossier FileWasCreateFolder=Le dossier %s a été créé FTPFailedToCreateFolder=Échec de la création du dossier %s. +SelectADay=Sélectionnez un jour dans le calendrier +SelectANewDate=Sélectionnez une nouvelle date diff --git a/htdocs/langs/fr_FR/partnership.lang b/htdocs/langs/fr_FR/partnership.lang index 866597a5710..e8d03dc49ad 100644 --- a/htdocs/langs/fr_FR/partnership.lang +++ b/htdocs/langs/fr_FR/partnership.lang @@ -55,7 +55,7 @@ PartnershipDedicatedToThisMember=Partenariat dédié à cet adhérent DatePartnershipStart=Date de début DatePartnershipEnd=Date de fin ReasonDecline=Raison du refus -ReasonDeclineOrCancel=Reason for refusal or cancellation +ReasonDeclineOrCancel=Raison du refus ou de l'annulation PartnershipAlreadyExist=Partenariat déjà existant ManagePartnership=Gestion de partenariat BacklinkNotFoundOnPartnerWebsite=Lien de retour non trouvé sur le site web partenaire @@ -95,4 +95,3 @@ NewPartnershipRequestDesc=Ce formulaire vous permet de demander à faire partie ThisUrlMustContainsAtLeastOneLinkToWebsite=Cette page doit contenir au moins un lien vers l'un des domaines suivants: %s IPOfApplicant=IP du demandeur - diff --git a/htdocs/langs/fr_FR/products.lang b/htdocs/langs/fr_FR/products.lang index 9ac8174656f..a939cc392ba 100644 --- a/htdocs/langs/fr_FR/products.lang +++ b/htdocs/langs/fr_FR/products.lang @@ -208,11 +208,6 @@ unitSET=Positionner unitS=Seconde unitH=Heure unitD=Jour -unitG=Gramme -unitM=Mètre -unitLM=Mètre linéaire -unitM2=Mètre carré -unitM3=Mètre cube unitL=Litre unitT=tonne unitKG=Kg @@ -221,6 +216,7 @@ unitMG=mg unitLB=livre unitOZ=once unitM=Mètre +unitLM=Mètre linéaire unitDM=dm unitCM=cm unitMM=mm @@ -437,4 +433,7 @@ ModifyValueExtrafields = Modifier la valeur d'un extrafield OrProductsWithCategories=Ou des produits avec des tags/catégories WarningTransferBatchStockMouvToGlobal = Si vous souhaitez désérialiser ce produit, tout son stock sérialisé sera transformé en stock global WarningConvertFromBatchToSerial=Si vous disposez actuellement d'une quantité supérieure ou égale à 2 pour le produit, passer à ce choix signifie que vous aurez toujours un produit avec différents objets du même lot (alors que vous souhaitez un numéro de série unique). Le doublon restera jusqu'à ce qu'un inventaire ou un mouvement de stock manuel soit effectué pour résoudre ce problème. +AllowStockMovementVariantParent=Enregistre également les mouvements de stock sur les produits parent des produits variants +AllowStockMovementVariantParentHelp=Par défaut, un parent d'une variante est un produit virtuel, donc aucun stock n'est géré pour celui-ci. En activant cette option, un stock sera géré pour les produits parents et à chaque fois qu'une quantité de stock est modifiée pour une variante de produit, la même quantité sera modifiée pour le produit parent. Vous ne devriez pas avoir besoin de cette option, sauf si vous utilisez une variante pour gérer le même produit que le parent (mais avec des descriptions, des prix différents...) ConfirmSetToDraftInventory=Êtes-vous sûr de vouloir revenir à l'état de brouillon ?
Les quantités actuellement définies dans l'inventaire seront réinitialisées. +PriceLabel=Libellé du prix diff --git a/htdocs/langs/fr_FR/projects.lang b/htdocs/langs/fr_FR/projects.lang index 7b0ad57af0e..d5d1f2ce01c 100644 --- a/htdocs/langs/fr_FR/projects.lang +++ b/htdocs/langs/fr_FR/projects.lang @@ -142,6 +142,7 @@ DoNotShowMyTasksOnly=Voir aussi les tâches qui ne me sont pas affectées ShowMyTasksOnly=Ne voir que les tâches qui me sont affectées TaskRessourceLinks=Contacts de la tâche ProjectsDedicatedToThisThirdParty=Projets dédiés à ce tiers +ProjectsLinkedToThisThirdParty=Projets liés à ce tiers par un contact commun NoTasks=Aucune tâche pour ce projet LinkedToAnotherCompany=Liés à autre société TaskIsNotAssignedToUser=Tâche non assignée à l'utilisateur. Utilisez le bouton '%s' pour assigner la tâche maintenant. @@ -249,7 +250,7 @@ LatestProjects=Les %s derniers projets LatestModifiedProjects=Les %s derniers projets modifiés OtherFilteredTasks=Autres tâches filtrées NoAssignedTasks=Aucune tâche assignée (assignez un projet/tâche à l'utilisateur depuis la liste déroulante utilisateur en haut pour pouvoir saisir du temps dessus) -ThirdPartyRequiredToGenerateIntervention=A third party must be defined on project to be able to create intervention. +ThirdPartyRequiredToGenerateIntervention=Un tiers doit être défini sur le projet pour pouvoir créer une intervention. ThirdPartyRequiredToGenerateInvoice=Un tiers doit être défini sur le projet pour pouvoir le facturer. ChooseANotYetAssignedTask=Choisissez une tâche qui ne vous est pas encore assignée # Comments trans @@ -270,7 +271,7 @@ ServiceToUseOnLines=Service à utiliser sur les lignes par défaut InvoiceGeneratedFromTimeSpent=La facture %s a été générée à partir du temps passé sur le projet InterventionGeneratedFromTimeSpent=L'intervention %s a été générée à partir du temps consacré au projet ProjectBillTimeDescription=Cochez si vous saisissez du temps sur les tâches du projet ET prévoyez de générer des factures à partir des temps pour facturer le client du projet (ne cochez pas si vous comptez créer une facture qui n'est pas basée sur la saisie des temps). Note: Pour générer une facture, aller sur l'onglet 'Temps consommé' du project et sélectionnez les lignes à inclure. -ProjectFollowOpportunity=Suivre une opportunité +ProjectFollowOpportunity=Suivre une opportunité ProjectFollowTasks=Suivre des tâches ou du temps passé Usage=Usage UsageOpportunity=Utilisation: Opportunité diff --git a/htdocs/langs/fr_FR/receiptprinter.lang b/htdocs/langs/fr_FR/receiptprinter.lang index 89cfbd327ba..a79f0939bb1 100644 --- a/htdocs/langs/fr_FR/receiptprinter.lang +++ b/htdocs/langs/fr_FR/receiptprinter.lang @@ -9,8 +9,8 @@ ReceiptPrinterDesc=Réglage des imprimantes de tickets ReceiptPrinterTemplateDesc=Réglage des modèles ReceiptPrinterTypeDesc=Exemple de valeurs possibles pour le champ "Paramètres" selon le type de driver ReceiptPrinterProfileDesc=Description des imprimantes de tickets -ThisFeatureIsForESCPOSPrintersOnly=This feature is for ESC/POS printers only ListPrinters=Liste des imprimantes +FromServerPointOfView=Du point de vue du serveur web. Cette méthode doit être accessible depuis l'hébergeur du serveur web. SetupReceiptTemplate=Réglage des modèles CONNECTOR_DUMMY=Imprimante Test CONNECTOR_NETWORK_PRINT=Imprimante réseau @@ -36,9 +36,9 @@ DOL_LINE_FEED=Passer la ligne DOL_ALIGN_LEFT=Texte aligner à gauche DOL_ALIGN_CENTER=Centrer le texte DOL_ALIGN_RIGHT=Texte aligner à droite -DOL_USE_FONT_A=Utilisez la police A de l'imprimante -DOL_USE_FONT_B=Utilisez la police B de l'imprimante -DOL_USE_FONT_C=Utilisez la police C de l'imprimante +DOL_USE_FONT_A=Utilisez la police A de l'imprimante +DOL_USE_FONT_B=Utilisez la police B de l'imprimante +DOL_USE_FONT_C=Utilisez la police C de l'imprimante DOL_PRINT_BARCODE=Imprimer le code barre DOL_PRINT_BARCODE_CUSTOMER_ID=Imprimer le code barre du client DOL_CUT_PAPER_FULL=Découper le ticket diff --git a/htdocs/langs/fr_FR/resource.lang b/htdocs/langs/fr_FR/resource.lang index 5db22aedcbd..47ab7781953 100644 --- a/htdocs/langs/fr_FR/resource.lang +++ b/htdocs/langs/fr_FR/resource.lang @@ -35,5 +35,8 @@ AssetNumber=Numéro de série ResourceTypeCode=Code de type de ressource ImportDataset_resource_1=Ressources -ErrorResourcesAlreadyInUse=Des ressources sont déjà occupées -ErrorResourceUseInEvent=%s occupée dans l'événement %s \ No newline at end of file +ErrorResourcesAlreadyInUse=Certaines ressources sont utilisées +ErrorResourceUseInEvent=%s utilisé dans l'événement %s + +MaxUsers=Utilisateurs maximum (places, sièges, etc.) +MaxUsersLabel=Utilisateurs maximum diff --git a/htdocs/langs/fr_FR/website.lang b/htdocs/langs/fr_FR/website.lang index adb63ea6301..5dc984ebce6 100644 --- a/htdocs/langs/fr_FR/website.lang +++ b/htdocs/langs/fr_FR/website.lang @@ -58,10 +58,10 @@ PreviewSiteServedByDolibarr=Aperçu %s dans un nouvel onglet.

Le % VirtualHostUrlNotDefined=URL du virtual host servit par le serveur web externe non défini NoPageYet=Pas de page pour l'instant YouCanCreatePageOrImportTemplate=Vous pouvez créer une nouvelle page ou importer un modèle de site Web complet. -SyntaxHelp=Aide sur quelques astuces spécifiques de syntaxe +SyntaxHelp=Aide sur quelques astuces spécifiques de syntaxe YouCanEditHtmlSourceckeditor=Vous pouvez éditer le code source en activant l'éditeur HTML avec le bouton "Source". -YouCanEditHtmlSource=
You can include PHP code into this source using tags <?php ?>. The following global variables are available: $conf, $db, $mysoc, $user, $website, $websitepage, $weblangs, $pagelangs.

You can also include content of another Page/Container with the following syntax:
<?php includeContainer('alias_of_container_to_include'); ?>

You can make a redirect to another Page/Container with the following syntax (Note: do not output any content before a redirect):
<?php redirectToContainer('alias_of_container_to_redirect_to'); ?>

To add a link to another page, use the syntax:
<a href="alias_of_page_to_link_to.php">mylink<a>

To include a link to download a file stored into the documents directory, use the document.php wrapper:
Example, for a file into documents/ecm (need to be logged), syntax is:
<a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext">
For a file into documents/medias (open directory for public access), syntax is:
<a href="/document.php?modulepart=medias&file=[relative_dir/]filename.ext">
For a file shared with a share link (open access using the sharing hash key of file), syntax is:
<a href="/document.php?hashp=publicsharekeyoffile">
-YouCanEditHtmlSource1=
To include an image stored into the documents directory, use the viewimage.php wrapper.
Example, for an image into documents/medias (open directory for public access), syntax is:
<img src="/viewimage.php?modulepart=medias&file=[relative_dir/]filename.ext">
+YouCanEditHtmlSource=
Vous pouvez inclure du code PHP dans cette source en utilisant des balises <?php ?>. Les variables globales suivantes sont disponibles : $conf, $db, $mysoc, $user, $website, $websitepage, $weblangs, $pagelangs.

Vous pouvez également inclure le contenu d'une autre page/conteneur avec la syntaxe suivante :
<?php includeContainer('alias_of_container_to_include'); ?>

Vous pouvez créer une redirection vers une autre page/conteneur avec la syntaxe suivante (Remarque: ne pas afficher de contenu avant une redirection) :
<?php redirectToContainer('alias_of_container_to_redirect_to'); ?>

Pour ajouter un lien vers une autre page, utilisez la syntaxe suivante :
<a href="alias_of_page_to_link_to.php">mylink<a>

Pour inclure un lien pour télécharger un fichier stocké dans le répertoire des documents, utilisez l'encapsuleur document.php :
Exemple, pour un fichier dans documents/ecm (besoin d'être loggué), la syntaxe est :
<a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext">
Pour un fichier dans documents/medias (répertoire ouvert en accès public), la syntaxe est :
<a href="/document.php?modulepart=medias&file=[relative_dir/]filename.ext">
Pour un fichier partagé avec un lien de partage (accès ouvert en utilisant la clé de partage du fichier), la syntaxe est la suivante :
<a href="/document.php?hashp=publicsharekeyoffile">
+YouCanEditHtmlSource1=
Pour inclure une image stockée dans le répertoire documents, utilisez l'encapsuleurviewimage.php.
Par exemple, pour une image dans documents/medias (répertoire ouvert en accès public), la syntaxe est :
<img src="/viewimage.php?modulepart=medias&file=[relative_dir/]filename.ext">
YouCanEditHtmlSource2=Pour une image partagée avec un lien de partage (accès ouvert à l'aide de la clé de partage du fichier), la syntaxe est la suivante:
<img src = "/viewimage.php?hashp=12345679012...">
YouCanEditHtmlSource3=Pour obtenir l'adresse URL de l'image d'un objet PHP, utilisez
<img src="<?php print getImagePublicURLOfObject($object, 1, "_small") ?>">
YouCanEditHtmlSourceMore=
Plus d'exemples de code HTML ou dynamique disponibles sur la documentation wiki.
@@ -160,77 +160,77 @@ PagesViewedTotal=Pages vues (total) Everyone=Tout le monde AssignedContacts=Contacts assignés WebsiteTypeLabel=Type de site Internet -WebsiteTypeDolibarrWebsite=Web site (Module WebSites CMS) -WebsiteTypeDolibarrPortal=Native and ready to use web portal (Module Web Portal) -WebPortalURL=Web portal URL -NewWebsiteAccount=New accounts for websites -ModuleWebPortalName=Web portal -ModuleWebPortalDesc=A ready to use native web portal for customers, suppliers, partners or members -WebPortalDescription=Public web portal module for membership and partnership -WebPortalSetup=WebPortal setup -WebPortalCSS=Web portal CSS -WebPortalSetupPage=WebPortal setup page -WEBPORTAL_TITLE=Brand name on header of public page -UserAccountForWebPortalAreInThirdPartyTabHelp=Users accounts for WebPortal can be set on each third party card in Website accounts tab +WebsiteTypeDolibarrWebsite=Site Internet (Module CMS Sites Internet) +WebsiteTypeDolibarrPortal=Portail web natif et prêt à utiliser (Module Portail Web) +WebPortalURL=URL du portail Web +NewWebsiteAccount=Nouveaux comptes pour les sites web +ModuleWebPortalName=Portail Web +ModuleWebPortalDesc=Un portail web natif, prêt à l'emploi pour les clients, fournisseurs, partenaires ou adhérents +WebPortalDescription=Module de portail web public pour l'adhésion et le partenariat +WebPortalSetup=Configuration du portail web +WebPortalCSS=CSS du portail web +WebPortalSetupPage=Page de configuration du portail web +WEBPORTAL_TITLE=Nom de la marque sur l'en-tête de la page publique +UserAccountForWebPortalAreInThirdPartyTabHelp=Les comptes utilisateurs pour le portail web peuvent être configurés sur chaque tiers dans l'onglet des comptes du site web. WebPortalAccessHidden=Caché WebPortalAccessVisible=Visible WebPortalAccessEdit=Editable -WEBPORTAL_MEMBER_CARD_ACCESS=Enable access to the membership record -WebPortalMemberCardAccessHelp=Enable access to the membership record (Hidden / Visible or Editable) -WEBPORTAL_PARTNERSHIP_CARD_ACCESS=Enable access to the partnership record -WebPortalPartnerShipCardAccessHelp=Enable access to the partnership record (Hidden / Visible or Editable) -WEBPORTAL_PROPAL_LIST_ACCESS=Enable access to the proposals -WEBPORTAL_ORDER_LIST_ACCESS=Enable access to the orders -WEBPORTAL_INVOICE_LIST_ACCESS=Enable access to the invoices -WEBPORTAL_USER_LOGGED=Select an anonymous user -WebPortalUserLoggedHelp=This user is used to update cards -WebPortalHomeTitle=Welcome -WebPortalHomeDesc=Welcome to the public interface +WEBPORTAL_MEMBER_CARD_ACCESS=Autoriser l'accès au dossier des adhérents +WebPortalMemberCardAccessHelp=Autoriser l'accès à l'enregistrement des adhérents (Caché / Visible ou Modifiable) +WEBPORTAL_PARTNERSHIP_CARD_ACCESS=Autoriser l'accès au dossier des partenariats +WebPortalPartnerShipCardAccessHelp=Autoriser l'accès à l'enregistrement des partenariats (Caché / Visible ou Modifiable) +WEBPORTAL_PROPAL_LIST_ACCESS=Autoriser l'accès aux devis +WEBPORTAL_ORDER_LIST_ACCESS=Autoriser l'accès aux commandes +WEBPORTAL_INVOICE_LIST_ACCESS=Autoriser l'accès aux factures +WEBPORTAL_USER_LOGGED=Sélectionnez un utilisateur anonyme +WebPortalUserLoggedHelp=Cet utilisateur est utilisé pour mettre à jour les fiches. +WebPortalHomeTitle=Bienvenue +WebPortalHomeDesc=Bienvenue sur l'interface publique WebPortalPropalListMenu=Propositions commerciales -WebPortalPropalListTitle=List of proposals -WebPortalPropalListDesc=List of proposals -WebPortalPropalListNothing=Proposals not found +WebPortalPropalListTitle=Liste des devis +WebPortalPropalListDesc=Liste des devis +WebPortalPropalListNothing=Devis non trouvés WebPortalOrderListMenu=Commandes WebPortalOrderListTitle=Liste des commandes WebPortalOrderListDesc=Liste des commandes -WebPortalOrderListNothing=Orders not found +WebPortalOrderListNothing=Commandes non trouvées WebPortalInvoiceListMenu=Factures -WebPortalInvoiceListTitle=List of invoices -WebPortalInvoiceListDesc=List of invoices -WebPortalInvoiceListNothing=Invoices not found +WebPortalInvoiceListTitle=Liste des factures +WebPortalInvoiceListDesc=Liste des factures +WebPortalInvoiceListNothing=Factures non trouvées WebPortalMemberCardMenu=Adhérent WebPortalMemberCardTitle=Fiche adhérent WebPortalMemberCardDesc=Fiche adhérent WebPortalPartnershipCardMenu=Partenariat -WebPortalPartnershipCardTitle=Partnership card -WebPortalPartnershipCardDesc=Partnership card -loginWebportalUserName=User name / email +WebPortalPartnershipCardTitle=Fiche du partenariat +WebPortalPartnershipCardDesc=Fiche du partenariat +loginWebportalUserName=Nom d'utilisateur / email loginWebportalPassword=Mot de passe -LoginNow=Login now -RemoveSearchFilters=Remove search filters -WEBPORTAL_PRIMARY_COLOR=Primary color -WEBPORTAL_SECONDARY_COLOR=Secondary color -WEBPORTAL_LOGIN_LOGO_URL=Login logo image URL -WEBPORTAL_MENU_LOGO_URL=Menu logo image URL -WEBPORTAL_MENU_LOGO_URLTooltip=Leave empty to use login logo -WEBPORTAL_LOGIN_BACKGROUND=Background login image URL -WEBPORTAL_BANNER_BACKGROUND=Background for banner -WEBPORTAL_BANNER_BACKGROUND_IS_DARK=Use dark theme for banner -AriaPrevPage=Previous page -AriaNextPage=Next page +LoginNow=Connectez-vous maintenant +RemoveSearchFilters=Supprimer les filtres de recherche +WEBPORTAL_PRIMARY_COLOR=Couleur primaire +WEBPORTAL_SECONDARY_COLOR=Couleur secondaire +WEBPORTAL_LOGIN_LOGO_URL=URL de l'image du logo de connexion +WEBPORTAL_MENU_LOGO_URL=URL de l'image du logo du menu +WEBPORTAL_MENU_LOGO_URLTooltip=Laissez vide pour utiliser le logo de connexion +WEBPORTAL_LOGIN_BACKGROUND=URL de l'image de l'arrière-plan de connexion +WEBPORTAL_BANNER_BACKGROUND=Fond pour la bannière +WEBPORTAL_BANNER_BACKGROUND_IS_DARK=Utilisez le thème sombre pour la bannière +AriaPrevPage=Page précédente +AriaNextPage=Page suivante AriaPageX=Page %s -WebPortalError404=Page not found -WebPortalErrorPageNotExist=Page not exist -WebPortalErrorFetchThirdPartyAccountFromLogin=Error when loading third-party account (login : %s) -WebPortalErrorAuthentication=Authentication error -WebPortalErrorFetchLoggedThirdPartyAccount=Error when loading third-party account (login : %s) -WebPortalErrorFetchLoggedUser=Error when loading user (Id : %s) -WebPortalErrorFetchLoggedThirdParty=Error when loading third-party (Id : %s) -WebPortalErrorFetchLoggedMember=Error when loading member (Id : %s) -WebPortalErrorFetchLoggedPartnership=Error when loading partnership (Third-party Id : %s, Member Id : %s) -ExportIntoGIT=Export into sources -WebPortalMember=Membership -WebPortalOrder=Sale Order +WebPortalError404=Page non trouvée +WebPortalErrorPageNotExist=La page n'existe pas +WebPortalErrorFetchThirdPartyAccountFromLogin=Erreur lors du chargement du compte tiers (login : %s) +WebPortalErrorAuthentication=Erreur d'identification +WebPortalErrorFetchLoggedThirdPartyAccount=Erreur lors du chargement du compte tiers (login : %s) +WebPortalErrorFetchLoggedUser=Erreur lors du chargement de l'utilisateur (Id : %s) +WebPortalErrorFetchLoggedThirdParty=Erreur lors du chargement du tiers (Id : %s) +WebPortalErrorFetchLoggedMember=Erreur lors du chargement de l'adhérent (Id : %s) +WebPortalErrorFetchLoggedPartnership=Erreur lors du chargement du partenariat (Identifiant tiers : %s, Identifiant adhérent : %s) +ExportIntoGIT=Exporter dans les sources +WebPortalMember=Adhésion +WebPortalOrder=Commande client WebPortalPartnership=Partenariat WebPortalPropal=Proposition WebPortalGroupMenuAdmin=Administration diff --git a/htdocs/langs/fr_GA/errors.lang b/htdocs/langs/fr_GA/errors.lang new file mode 100644 index 00000000000..a2f9be5ee1f --- /dev/null +++ b/htdocs/langs/fr_GA/errors.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - errors +ErrorParameterMustBeEnabledToAllwoThisFeature=Error, parameter %s must be enabled into conf/conf.php<> to allow use of Command Line Interface by the internal job scheduler diff --git a/htdocs/langs/fr_GA/holiday.lang b/htdocs/langs/fr_GA/holiday.lang deleted file mode 100644 index 254b07b0308..00000000000 --- a/htdocs/langs/fr_GA/holiday.lang +++ /dev/null @@ -1,4 +0,0 @@ -# Dolibarr language file - Source file is en_US - holiday -MenuCollectiveAddCP=New collective leave -NewHolidayForGroup=New collective leave -SendRequestCollectiveCP=Create collective leave diff --git a/htdocs/langs/fr_GA/languages.lang b/htdocs/langs/fr_GA/languages.lang deleted file mode 100644 index 879813b70ad..00000000000 --- a/htdocs/langs/fr_GA/languages.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - languages -Language_en_AE=English (United Arab Emirates) diff --git a/htdocs/langs/gl_ES/bills.lang b/htdocs/langs/gl_ES/bills.lang index 432e1945038..daf9a6e0315 100644 --- a/htdocs/langs/gl_ES/bills.lang +++ b/htdocs/langs/gl_ES/bills.lang @@ -93,6 +93,9 @@ CodePaymentMode=Modo de pagamento (código) LabelPaymentMode=Modo de pagamento (etiqueta) PaymentModeShort=Modo de pagamento PaymentTerm=Condición de pagamento +IdPaymentTerm=Condición de pagamento (id) +CodePaymentTerm=Condición de pagamento (código) +LabelPaymentTerm=Condición de pagamento (etiqueta) PaymentConditions=Condicións de pagamento PaymentConditionsShort=Condicións de pagamento PaymentAmount=Importe pagamento @@ -245,20 +248,20 @@ AlreadyPaidBack=Xa reembolsado AlreadyPaidNoCreditNotesNoDeposits=Xa pago (excluidos os abonos e anticipos) Abandoned=Abandoada RemainderToPay=Resta por pagar -RemainderToPayMulticurrency=Modea restante orixinal sen pagar +RemainderToPayMulticurrency=Modea restante orixinal sen pagar RemainderToTake=Resta por cobrar -RemainderToTakeMulticurrency=Importe restante por coller, moeda orixinal +RemainderToTakeMulticurrency=Importe restante por coller, moeda orixinal RemainderToPayBack=Resta por reembolsar -RemainderToPayBackMulticurrency=Importe restante por reembolsar, moeda orixinal -NegativeIfExcessReceived=negativo se se recibe exceso -NegativeIfExcessRefunded=negativo se se reembolsa o exceso +RemainderToPayBackMulticurrency=Importe restante por reembolsar, moeda orixinal +NegativeIfExcessReceived=negativo se se recibe exceso +NegativeIfExcessRefunded=negativo se se reembolsa o exceso NegativeIfExcessPaid=negativo se se recibe de mais Rest=Pendente AmountExpected=Importe reclamado ExcessReceived=Recibido en exceso -ExcessReceivedMulticurrency=Exceso recibido, moeda orixinal +ExcessReceivedMulticurrency=Exceso recibido, moeda orixinal ExcessPaid=Pagado en exceso -ExcessPaidMulticurrency=Exceso pagado, moeda orixinal +ExcessPaidMulticurrency=Exceso pagado, moeda orixinal EscompteOffered=Desconto (Pronto pagamento) EscompteOfferedShort=Desconto SendBillRef=Envío da factura %s @@ -281,7 +284,7 @@ DateMaxPayment=Data límite de pagamento DateInvoice=Data facturación DatePointOfTax=Impostos NoInvoice=Ninguna factura -NoOpenInvoice=Non hai factura aberta +NoOpenInvoice=Non hai factura aberta NbOfOpenInvoices=Número de facturas abertas ClassifyBill=Clasificar a factura SupplierBillsToPay=Facturas de provedor pendentes de pagamento @@ -292,7 +295,7 @@ SetMode=Definir modo de pagamento SetRevenuStamp=Establecer selo fiscal Billed=Facturado RecurringInvoices=Facturas recurrentes -RecurringInvoice=Factura recurrente +RecurringInvoice=Factura recurrente RecurringInvoiceSource=Factura recorrente de orixe RepeatableInvoice=Padrón de factura RepeatableInvoices=Padrón de facturas @@ -543,16 +546,16 @@ Cash=Efectivo Reported=Aprazado DisabledBecausePayments=Non dispoñible xa que existen pagamentos CantRemovePaymentWithOneInvoicePaid=Eliminación imposible cando existe alo menos unha factura clasificada como pagada. -CantRemovePaymentVATPaid=Non se pode eliminar o pago porque a declaración do IVE está clasificada como pagada -CantRemovePaymentSalaryPaid=Non se pode eliminar o pago xa que o salario está clasificado como pagado +CantRemovePaymentVATPaid=Non se pode eliminar o pago porque a declaración do IVE está clasificada como pagada +CantRemovePaymentSalaryPaid=Non se pode eliminar o pago xa que o salario está clasificado como pagado ExpectedToPay=Agardando o pagamento CantRemoveConciliatedPayment=Non pódese eliminar un pagamento conciliado PayedByThisPayment=Pagada por este pagamento ClosePaidInvoicesAutomatically=Clasificar como "Pagadas" as facturas, anticipos e facturas rectificativas completamente pagadas. ClosePaidCreditNotesAutomatically=Clasificar automáticamente como "Pagados" os abonos completamente reembolsados ClosePaidContributionsAutomatically=Clasificar como "Pagadas" todas as taxas fiscais ou sociais completamente pagadas -ClosePaidVATAutomatically=Clasifique automaticamente a declaración de IVE como "Pago" cando o pagamento é feito por completo. -ClosePaidSalaryAutomatically=Clasifique automaticamente o salario como "Pagado" cando o pagamento é realizado por completo. +ClosePaidVATAutomatically=Clasifique automaticamente a declaración de IVE como "Pago" cando o pagamento é feito por completo. +ClosePaidSalaryAutomatically=Clasifique automaticamente o salario como "Pagado" cando o pagamento é realizado por completo. AllCompletelyPayedInvoiceWillBeClosed=Todas as facturas cun resto a pagar 0 serán automáticamente pechadas ao estado "Pagada". ToMakePayment=Pagar ToMakePaymentBack=Reembolsar @@ -565,10 +568,10 @@ YouMustCreateStandardInvoiceFirstDesc=Primeiro ten que crear unha factura están PDFCrabeDescription=Modelo PDF de factura Crabe. Un modelo de factura completo (implementación antiga do modelo Sponge) PDFSpongeDescription=Modelo PDF de factura Sponge. Un modelo de factura completo PDFCrevetteDescription=Modelo PDF de factura Crevette. Un modelo de factura completo para as facturas de situación -TerreNumRefModelDesc1=Devolve o número no formato %s yymm-nnnn para as facturas estándar e %s yymm-nnnn para as notas de crédito onde aa é ano, mm é mes e nnnn é un número secuencial de incremento automático sen interrupción e sen retorno a 0 -MarsNumRefModelDesc1=Devolve o número no formato %s yymm-nnnn para as facturas estándar, %s yymm-nnnn para as facturas rectificativas, %s yymm-nnnn para as facturas de anticipo e %s yymm-nnnn para as notas de crédito onde o ano é mm, mm é mes e nnnn é unha número secuencial de incremento automático sen interrupción e sen retorno a 0 +TerreNumRefModelDesc1=Devolve o número no formato %s yymm-nnnn para as facturas estándar e %s yymm-nnnn para as notas de crédito onde aa é ano, mm é mes e nnnn é un número secuencial de incremento automático sen interrupción e sen retorno a 0 +MarsNumRefModelDesc1=Devolve o número no formato %s yymm-nnnn para as facturas estándar, %s yymm-nnnn para as facturas rectificativas, %s yymm-nnnn para as facturas de anticipo e %s yymm-nnnn para as notas de crédito onde o ano é mm, mm é mes e nnnn é unha número secuencial de incremento automático sen interrupción e sen retorno a 0 TerreNumRefModelError=Xa existe unha factura que comeza con $syymm e non é compatible con este modelo de secuencia. Elimina ou renoméao para activar este módulo. -CactusNumRefModelDesc1=Devolve un número no formato %s yymm-nnnn para as facturas estándar, %s yymm-nnnn para as notas de crédito e %s yymm-nnnn para as facturas de anticipo onde aa é ano, mm é mes e nnnn é un número secuencial de incremento automático sen interrupción e sen retorno a 0 +CactusNumRefModelDesc1=Devolve un número no formato %s yymm-nnnn para as facturas estándar, %s yymm-nnnn para as notas de crédito e %s yymm-nnnn para as facturas de anticipo onde aa é ano, mm é mes e nnnn é un número secuencial de incremento automático sen interrupción e sen retorno a 0 EarlyClosingReason=Motivo de peche anticipado EarlyClosingComment=Nota de peche anticipado ##### Types de contacts ##### @@ -614,7 +617,7 @@ ToCreateARecurringInvoiceGene=Para xerar futuras facturas regularmente e manualm ToCreateARecurringInvoiceGeneAuto=Se precisa xerar estas facturas automaticamente, pídelle ao administrador que active e configure o módulo %s . Teña conta que os dous métodos (manual e automático) pódense empregar xuntos sen risco de duplicación. DeleteRepeatableInvoice=Eliminar factura modelo ConfirmDeleteRepeatableInvoice=¿Está certo de que quere eliminar a factura modelo? -CreateOneBillByThird=Crear unha factura por terceiro (se non, unha factura por obxecto seleccionado) +CreateOneBillByThird=Crear unha factura por terceiro (se non, unha factura por obxecto seleccionado) BillCreated=%s factura(s) xerada BillXCreated=Factura %s xerada StatusOfGeneratedDocuments=Estado da xeración de documentos @@ -636,7 +639,7 @@ SituationTotalProgress=Progreso total %d %% SearchUnpaidInvoicesWithDueDate=Procurar facturas pendentes de pagamento cunha data de vencemento= %s SearchValidatedInvoicesWithDate=Procurar facturas sen pagar cunha data de validación = %s NoPaymentAvailable=Non hai pagamento dispoñible para %s -PaymentRegisteredAndInvoiceSetToPaid=Pagamento rexistrado e factura %s configurada como xa paga +PaymentRegisteredAndInvoiceSetToPaid=Pagamento rexistrado e factura %s configurada como xa paga SendEmailsRemindersOnInvoiceDueDate=Enviar lembranza por correo electrónico para facturas validadas e non abonadas MakePaymentAndClassifyPayed=Rexistro de pagamento BulkPaymentNotPossibleForInvoice=Non é posible o pagamento masivo para a factura %s (tipo ou estado incorrecto) diff --git a/htdocs/langs/gl_ES/donations.lang b/htdocs/langs/gl_ES/donations.lang index a5f441fac91..74f3ad25763 100644 --- a/htdocs/langs/gl_ES/donations.lang +++ b/htdocs/langs/gl_ES/donations.lang @@ -31,6 +31,7 @@ DONATION_ART200=Amosar artigo 200 do CGI se está interesado DONATION_ART238=Amosar artigo 238 do CGI se está interesado DONATION_ART978=Mostra o artigo 978 de CGI se che preocupa DonationPayment=Pago de doación/subvención +DonationPayments=Pagamentos de doazóns DonationValidated=Doación/Subvención %s validada DonationUseThirdparties=Usa o enderezo dun terceiro existente como enderezo do doador DonationsStatistics=Estatísticas de doazóns diff --git a/htdocs/langs/gl_ES/errors.lang b/htdocs/langs/gl_ES/errors.lang index c42d8f070b0..9165967fd90 100644 --- a/htdocs/langs/gl_ES/errors.lang +++ b/htdocs/langs/gl_ES/errors.lang @@ -120,7 +120,7 @@ ErrorFailedToLoadRSSFile=Non alcanza a fonte RSS. Tente engadir a constante MAIN ErrorForbidden=Acceso denegado.
Intenta acceder a unha páxina, área ou función dun módulo desactivado ou sen estar nunha sesión autenticada ou que non está permitida ao seu usuario. ErrorForbidden2=O seu administrador Dolibarr pode definir o permiso para este inicio de sesión no menú %s->%s. ErrorForbidden3=Parece que Dolibarr non se usa a través dunha sesión autenticada. Bote unha ollada á documentación de configuración de Dolibarr para saber como xestionar as autenticacións (htaccess, mod_auth ou outro ...). -ErrorForbidden4=Nota: borre as cookies do seu navegador para destruír as sesións existentes neste inicio de sesión. +ErrorForbidden4=Nota: borre as cookies do seu navegador para destruír as sesións existentes neste inicio de sesión. ErrorNoImagickReadimage=A clase Imagick non se atopa neste PHP. Non pode estar dispoñible ningunha vista previa. Os administradores poden desactivar esta pestana no menú Configuración-Amosar ErrorRecordAlreadyExists=Rexistro xa existente ErrorLabelAlreadyExists=Etiqueta xa existente @@ -128,7 +128,7 @@ ErrorCantReadFile=Erro de lectura do ficheiro '%s' ErrorCantReadDir=Error de lectura do directorio '%s' ErrorBadLoginPassword=Valor incorrecto para o inicio de sesión ou o contrasinals ErrorLoginDisabled=A súa conta foi descativada -ErrorFailedToRunExternalCommand=Fallou ao executar o comando externo. Comprobe que está dispoñible e executable polo usuario do servidor PHP. Comprobe tamén que a orde non está protexida a nivel de shell por unha capa de seguridade como apparmor. +ErrorFailedToRunExternalCommand=Fallou ao executar o comando externo. Comprobe que está dispoñible e executable polo usuario do servidor PHP. Comprobe tamén que a orde non está protexida a nivel de shell por unha capa de seguridade como apparmor. ErrorFailedToChangePassword=Erro ao cambiar o contrasinal ErrorLoginDoesNotExists=Non foi posible atopar o usuario con inicio de sesión %s. ErrorLoginHasNoEmail=Este usuario non ten enderezo de correo electrónico. Proceso abortado. @@ -277,15 +277,15 @@ ErrorDateIsInFuture=Erro, a data non pode ser no futuro ErrorAnAmountWithoutTaxIsRequired=Erro, a cantidade é obrigatoria ErrorAPercentIsRequired=Erro, prégase cubra a porcentaxe correctamente ErrorYouMustFirstSetupYourChartOfAccount=Primeiro debe configurar o seu plan de contas -ErrorFailedToFindEmailTemplate=Fallo ao atopar o modelo co nome de código %s -ErrorDurationForServiceNotDefinedCantCalculateHourlyPrice=Duración non definida no servizo. Non hai forma de calcular o prezo por hora. +ErrorFailedToFindEmailTemplate=Fallo ao atopar o modelo co nome de código %s +ErrorDurationForServiceNotDefinedCantCalculateHourlyPrice=Duración non definida no servizo. Non hai forma de calcular o prezo por hora. ErrorActionCommPropertyUserowneridNotDefined=É preciso o supervisor do usuario ErrorActionCommBadType=O tipo de evento seleccionado (id: %s, código: %s) non existe no dicionario de tipo de evento CheckVersionFail=Fallou a comprobación da versión ErrorWrongFileName=O nome do ficheiro non pode conte __SOMETHING__ nel -ErrorNotInDictionaryPaymentConditions=Non está no Dicionario de Condicións de Pagamento. Modifíqueo. +ErrorNotInDictionaryPaymentConditions=Non está no Dicionario de Condicións de Pagamento. Modifíqueo. ErrorIsNotADraft=%s non é un borrador -ErrorExecIdFailed=Non se pode executar o comando "id" +ErrorExecIdFailed=Non se pode executar o comando "id" ErrorBadCharIntoLoginName=Carácter non autorizado no campo %s ErrorRequestTooLarge=Erro, solicitude demasiado grande ou sesión caducada ErrorNotApproverForHoliday=No es o que aproba a baixa %s @@ -323,9 +323,9 @@ ErrorTheUrlOfYourDolInstanceDoesNotMatchURLIntoOAuthSetup=Erro: o URL da súa in ErrorMenuExistValue=Xa existe un menú con este título ou URL ErrorSVGFilesNotAllowedAsLinksWithout=Os ficheiros SVG non están permitidos como ligazóns externas sen a opción %s ErrorTypeMenu=Imposible engadir outro menú para o mesmo módulo na barra de navegación, aínda non operativo -ErrorObjectNotFound = O obxecto %s non se atopa, Revise o seu URL +ErrorObjectNotFound = The object %s is not found, please check your url ErrorCountryCodeMustBe2Char=O código de país debe ser unha cadea de 2 caracteres -ErrorABatchShouldNotContainsSpaces=A lot or serial number should not contains spaces +ErrorABatchShouldNotContainsSpaces=Un número de lote ou de serie non debe conter espazos ErrorTableExist=A táboa %s xa existe ErrorDictionaryNotFound=Non se atopou o dicionario %s @@ -365,7 +365,7 @@ WarningTheHiddenOptionIsOn=Aviso, a opción oculta %s está activa. WarningCreateSubAccounts=Aviso, non pode crear directamente unha subconta, debe crear un terceiro ou un usuario e asignarlles un código contable para atopalos nesta listaxe WarningAvailableOnlyForHTTPSServers=Dispoñible só se usa conexión segura HTTPS. WarningModuleXDisabledSoYouMayMissEventHere=Non foi activado o módulo %s . Pode que perda moitos eventos aquí -WarningPaypalPaymentNotCompatibleWithStrict=O valor "Estricto" fai que as funcións de pago en liña non funcionen correctamente. Use "Laxo" no seu lugar. +WarningPaypalPaymentNotCompatibleWithStrict=O valor "Estricto" fai que as funcións de pago en liña non funcionen correctamente. Use "Laxo" no seu lugar. WarningThemeForcedTo=Aviso, o tema foi forzado a %s pola constante oculta MAIN_FORCETHEME WarningPagesWillBeDeleted=Aviso, isto tamén eliminará todas as páxinas/contedores existentes do sitio web. Debería exportar o seu sitio web antes, para ter unha copia de seguridade e poder importalo de novo máis tarde. WarningAutoValNotPossibleWhenStockIsDecreasedOnInvoiceVal=A validación automática está desactivada cando a opción para diminuír o stock está definida en "Validación de facturas". @@ -396,18 +396,18 @@ RequireMinLength = A lonxitude ten que ser maior de %s caracter(es) RequireValidUrl = Require un enderezo web válido RequireValidDate = Require unha data válida RequireANotEmptyValue = É requirido -RequireValidDuration = Require unha duración válida +RequireValidDuration = Require unha duración válida RequireValidExistingElement = Require un valor existente RequireValidBool = Require un booleano válido -BadSetupOfField = Erro de configuración do campo -BadSetupOfFieldClassNotFoundForValidation = Erro de configuración do campo: Non se atopou a clase para validación +BadSetupOfField = Erro de configuración do campo +BadSetupOfFieldClassNotFoundForValidation = Erro de configuración do campo: Non se atopou a clase para validación BadSetupOfFieldFileNotFound = Erro de configuración do campo: Non se atopou o ficheiro para a súa inclusión  BadSetupOfFieldFetchNotCallable = Erro de configuración do campo: A recuperación non se pode chamar na clase ErrorTooManyAttempts= Demasiados intentos, ténteo de novo máis tarde TotalAmountEmpty=Cantidade total baleira FailedToFoundTheConversionRateForInvoice=Produciuse un erro ao atopar a taxa de conversión da factura -ThisIdNotDefined=Id not defined -OperNotDefined=Payment method not defined -ErrorThisContactXIsAlreadyDefinedAsThisType=%s is already defined as contact for this type. -ErrorThisGroupIsAlreadyDefinedAsThisType=The contacts with this group are already defined as contact for this type. +ThisIdNotDefined=Id non definido +OperNotDefined=O moo de pagamento non está definido +ErrorThisContactXIsAlreadyDefinedAsThisType=%s xa está definido como contacto para este tipo. +ErrorThisGroupIsAlreadyDefinedAsThisType=Os contactos con este grupo xa están definidos como contactos deste tipo. diff --git a/htdocs/langs/gl_ES/receiptprinter.lang b/htdocs/langs/gl_ES/receiptprinter.lang index dea972fe50d..67a2fcb29a3 100644 --- a/htdocs/langs/gl_ES/receiptprinter.lang +++ b/htdocs/langs/gl_ES/receiptprinter.lang @@ -10,6 +10,7 @@ ReceiptPrinterTemplateDesc=Configuración de Modelos ReceiptPrinterTypeDesc=Exemplo de posibles valores para o campo "Parámetros" segundo o tipo de controlador ReceiptPrinterProfileDesc=Descrición do perfil da impresora de recibos ListPrinters=Listaxe de impresoras +FromServerPointOfView=Desde o punto de vista do servidor web. Este método debe ser accesible desde o servidor web de hospedaxe. SetupReceiptTemplate=Configuración do modelo CONNECTOR_DUMMY=Impresora ficticia CONNECTOR_NETWORK_PRINT=Impresora de rede @@ -63,7 +64,7 @@ YearInvoice=Ano de factura DOL_VALUE_MONTH_LETTERS=Mes de factura en letras DOL_VALUE_MONTH=Mes da factura DOL_VALUE_DAY=Día da factura -DOL_VALUE_DAY_LETTERS=Día factura en letras +DOL_VALUE_DAY_LETTERS=Día da factura en letras DOL_LINE_FEED_REVERSE=Avance de liña inverso InvoiceID=ID de factura InvoiceRef=Ref. factura diff --git a/htdocs/langs/he_IL/accountancy.lang b/htdocs/langs/he_IL/accountancy.lang index 103d21b0cc5..6dd47fdb09f 100644 --- a/htdocs/langs/he_IL/accountancy.lang +++ b/htdocs/langs/he_IL/accountancy.lang @@ -335,7 +335,6 @@ CategoryDeleted=הקטגוריה עבור חשבון הנהלת החשבונות AccountingJournals=יומנים חשבונאיים AccountingJournal=יומן חשבונאות NewAccountingJournal=יומן חשבונאות חדש -ShowAccountingJournal=הצג יומן חשבונאות NatureOfJournal=Nature of Journal AccountingJournalType1=פעולות שונות AccountingJournalType2=מכירות @@ -353,7 +352,7 @@ ACCOUNTING_DISABLE_BINDING_ON_SALES=השבת כריכה והעברה בהנהל ACCOUNTING_DISABLE_BINDING_ON_PURCHASES=השבת כריכה והעברה בהנהלת חשבונות ברכישות (חשבוניות ספק לא יילקחו בחשבון בהנהלת חשבונות) ACCOUNTING_DISABLE_BINDING_ON_EXPENSEREPORTS=השבת כריכה והעברה בראיית חשבון על דוחות הוצאות (דוחות הוצאות לא יילקחו בחשבון בהנהלת חשבונות) ACCOUNTING_ENABLE_LETTERING=אפשר את פונקציית האותיות בהנהלת החשבונות -ACCOUNTING_ENABLE_LETTERING_DESC=כאשר אפשרות זו מופעלת, תוכל להגדיר, בכל ערך חשבונאי, קוד כדי שתוכל לקבץ תנועות חשבונאיות שונות יחד. בעבר, כאשר יומנים שונים נוהלו באופן עצמאי, תכונה זו הייתה הכרחית כדי לקבץ שורות תנועה של כתבי עת שונים יחדיו. עם זאת, עם הנהלת חשבונות של Dolibarr, קוד מעקב כזה, הנקרא "%s span>" כבר נשמר אוטומטית, כך שכבר נעשה כיתוב אוטומטי, ללא סיכון לשגיאה, כך שתכונה זו הפכה חסרת תועלת לשימוש נפוץ. תכונת כיתוב ידני מסופקת עבור משתמשי קצה שבאמת לא סומכים על מנוע המחשב שמבצע העברת נתונים בהנהלת חשבונות. +ACCOUNTING_ENABLE_LETTERING_DESC=When this options is enabled, you can define, on each accounting entry, a code so you can group different accounting movements together. In the past, when different journals was managed independently, this feature was necessary to group movement lines of different journals together. However, with Dolibarr accountancy, such a tracking code, called "%s" is already saved automatically, so an automatic lettering is already done, with no risk of error so this feature has become useless for a common usage. Manual lettering feature is provided for end users that really don't trust the computer engine making the transfer of data in accountancy. EnablingThisFeatureIsNotNecessary=הפעלת תכונה זו אינה הכרחית יותר לניהול חשבונאי קפדני. ACCOUNTING_ENABLE_AUTOLETTERING=הפעל את האותיות האוטומטיות בעת העברה להנהלת חשבונות ACCOUNTING_ENABLE_AUTOLETTERING_DESC=הקוד לאותיות נוצר באופן אוטומטי ומוגדל ואינו נבחר על ידי משתמש הקצה @@ -469,7 +468,7 @@ AccountancyClosureConfirmAccountingReversal=האם אתה בטוח שברצונ ## Error SomeMandatoryStepsOfSetupWereNotDone=חלק משלבי ההגדרה לא בוצעו, אנא השלם אותם ErrorNoAccountingCategoryForThisCountry=אין קבוצת חשבונות חשבונאית זמינה עבור המדינה %s (ראה %s - %s - %s) -ErrorInvoiceContainsLinesNotYetBounded=אתה מנסה לתעד כמה שורות של החשבונית %s, אבל כמה קווים אחרים עדיין אינם מוגבלים לחשבון חשבונאי. דיווח עיתונאי של כל שורות החשבוניות עבור חשבונית זו נדחה. +ErrorInvoiceContainsLinesNotYetBounded=You try to journalize some lines of the invoice %s, but some other lines are not yet bounded to accounting account. Journalization of all invoice lines for this invoice are refused. ErrorInvoiceContainsLinesNotYetBoundedShort=חלק מהשורות בחשבונית אינן קשורות לחשבון הנהלת חשבונות. ExportNotSupported=פורמט הייצוא שהוגדר אינו נתמך בדף זה BookeppingLineAlreayExists=קווים שכבר קיימים בהנהלת חשבונות diff --git a/htdocs/langs/he_IL/admin.lang b/htdocs/langs/he_IL/admin.lang index 4298f7869a1..5f5eb293f8a 100644 --- a/htdocs/langs/he_IL/admin.lang +++ b/htdocs/langs/he_IL/admin.lang @@ -106,7 +106,7 @@ NextValueForInvoices=הערך הבא (חשבוניות) NextValueForCreditNotes=הערך הבא (הערות אשראי) NextValueForDeposit=הערך הבא (מקדמה) NextValueForReplacements=הערך הבא (החלפות) -MustBeLowerThanPHPLimit=הערה: תצורת ה-PHP שלך מגבילה כרגע את גודל הקבצים המרבי להעלאה ל-%sb09a4b739f17f80 span> %s, ללא קשר לערך של פרמטר זה +MustBeLowerThanPHPLimit=Note: your PHP configuration currently limits the maximum filesize for upload to %s %s, irrespective of the value of this parameter NoMaxSizeByPHPLimit=הערה: אין גבול מוגדר בתצורת שלך PHP MaxSizeForUploadedFiles=הגודל המקסימלי של קבצים שאפשר להעלות (0 לאסור על כל ההעלאה) UseCaptchaCode=השתמש בקוד גרפי (CAPTCHA) בדף הכניסה ובחלק מהדפים הציבוריים @@ -163,7 +163,7 @@ PurgeAreaDesc=דף זה מאפשר לך למחוק את כל הקבצים שנו PurgeDeleteLogFile=מחק קובצי יומן, כולל %s (לא הוגדר עבור מודול Syslog סיכון לאובדן נתונים) PurgeDeleteTemporaryFiles=מחק את כל היומן והקבצים הזמניים (ללא סיכון לאובדן נתונים). הפרמטר יכול להיות 'tempfilesold', 'logfiles' או שניהם 'tempfilesold+logfiles'. הערה: מחיקת קבצים זמניים מתבצעת רק אם הספרייה הזמנית נוצרה לפני יותר מ-24 שעות. PurgeDeleteTemporaryFilesShort=מחק יומן וקבצים זמניים (ללא סיכון לאובדן נתונים) -PurgeDeleteAllFilesInDocumentsDir=מחק את כל הקבצים בספרייה: %s=.
זה ימחק את כל המסמכים שנוצרו הקשורים לאלמנטים (צדדים שלישיים, חשבוניות וכו'...), קבצים שהועלו למודול ה-ECM, מזימות גיבוי של מסד נתונים וקבצים זמניים. +PurgeDeleteAllFilesInDocumentsDir=Delete all files in directory: %s.
This will delete all generated documents related to elements (third parties, invoices etc...), files uploaded into the ECM module, database backup dumps and temporary files. PurgeRunNow=לטהר עכשיו PurgeNothingToDelete=אין ספרייה או קבצים למחיקה. PurgeNDirectoriesDeleted=%s קבצים או ספריות נמחק. @@ -250,8 +250,8 @@ Security=בטחון Passwords=סיסמאות DoNotStoreClearPassword=הצפין סיסמאות המאוחסנות במסד הנתונים (לא כטקסט רגיל). מומלץ מאוד להפעיל אפשרות זו. MainDbPasswordFileConfEncrypted=הצפנת סיסמת מסד הנתונים המאוחסנת ב-conf.php. מומלץ מאוד להפעיל אפשרות זו. -InstrucToEncodePass=כדי שהסיסמה תקודד בקובץ conf.php, החלף את השורה b0342bz0<19 /span>$dolibarr_main_db_pass="...";b0342bz0fda19 >מאת
$dolibarr_main_db_pass="crypted:b0ecb2ec87fspan>fz;<07fspan>fz; span class='notranslate'> -InstrucToClearPass=כדי לפענח (נקה) את הסיסמה לקובץ conf.php, החלף את השורה
$dolibarr_main_db_pass="crypted:...";='
מאת
$dolibarr_main_db_pass="70ec49becz0>7notranslate'ec> "; +InstrucToEncodePass=To have password encoded into the conf.php file, replace the line
$dolibarr_main_db_pass="...";
by
$dolibarr_main_db_pass="crypted:%s"; +InstrucToClearPass=To have password decoded (clear) into the conf.php file, replace the line
$dolibarr_main_db_pass="crypted:...";
by
$dolibarr_main_db_pass="%s"; ProtectAndEncryptPdfFiles=הגן על קבצי PDF שנוצרו. זה לא מומלץ מכיוון שהוא שובר יצירת PDF בתפזורת. ProtectAndEncryptPdfFilesDesc=הגנה על מסמך PDF שומרת אותו זמין לקריאה והדפסה בכל דפדפן PDF. עם זאת, עריכה והעתקה אינן אפשריות יותר. שים לב ששימוש בתכונה זו גורם לבניית קובצי PDF ממוזגים גלובליים לא לעבוד. Feature=תכונה @@ -268,7 +268,7 @@ OtherResources=משאבים אחרים ExternalResources=משאבים חיצוניים SocialNetworks=רשתות חברתיות SocialNetworkId=מזהה רשת חברתית -ForDocumentationSeeWiki=לתיעוד משתמשים או מפתחים (מסמך, שאלות נפוצות...),
עיין ב-Dolibarr Wiki:
%sb0e40dc65dc65 +ForDocumentationSeeWiki=For user or developer documentation (Doc, FAQs...),
take a look at the Dolibarr Wiki:
%s ForAnswersSeeForum=לכל שאלה/עזרה אחרת, אתה יכול להשתמש בפורום Dolibarr:
%s HelpCenterDesc1=הנה כמה משאבים לקבלת עזרה ותמיכה עם Dolibarr. HelpCenterDesc2=חלק ממשאבים אלו זמינים רק באנגלית. @@ -290,8 +290,8 @@ EMailsSetup=הגדרת מיילים EMailsDesc=עמוד זה מאפשר לך להגדיר פרמטרים או אפשרויות לשליחת דואר אלקטרוני. EmailSenderProfiles=שולח אימייל פרופילי שולח EMailsSenderProfileDesc=אתה יכול לשמור את החלק הזה ריק. אם תזין כאן כמה הודעות דוא"ל, הם יתווספו לרשימת השולחים האפשריים לתיבת המשולבת כאשר תכתוב אימייל חדש. -MAIN_MAIL_SMTP_PORT=יציאת SMTP/SMTPS (ערך ברירת מחדל ב-php.ini: %sb09a4b739f17f >) -MAIN_MAIL_SMTP_SERVER=מארח SMTP/SMTPS (ערך ברירת מחדל ב-php.ini: %sb09a4b739f17f >) +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: %s) +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: %s) MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=יציאת SMTP/SMTPS MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=מארח SMTP/SMTPS MAIN_MAIL_EMAIL_FROM=דוא"ל שולח למיילים אוטומטיים @@ -345,12 +345,12 @@ ThisIsAlternativeProcessToFollow=זוהי הגדרה חלופית לעיבוד StepNb=שלב %s FindPackageFromWebSite=מצא חבילה שמספקת את התכונות שאתה צריך (לדוגמה באתר האינטרנט הרשמי %s). DownloadPackageFromWebSite=חבילת הורדה (לדוגמה מאתר האינטרנט הרשמי %s). -UnpackPackageInDolibarrRoot=פרק/פרק את הקבצים הארוזים לתוך ספריית שרת Dolibarr שלך: %sb09a4b739f17f > +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into your Dolibarr server directory: %s UnpackPackageInModulesRoot=כדי לפרוס/להתקין מודול חיצוני, עליך לפרוק/לפרוק את קובץ הארכיון לתוך ספריית השרת המוקדשת למודולים חיצוניים:
%s SetupIsReadyForUse=פריסת המודול הסתיימה. עם זאת, עליך להפעיל ולהגדיר את המודול ביישום שלך על ידי מעבר למודולי הגדרת הדף: %s. NotExistsDirect=ספריית השורש החלופית אינה מוגדרת לספרייה קיימת.
InfDirAlt=מאז גרסה 3, ניתן להגדיר ספריית שורש חלופית. זה מאפשר לך לאחסן, בספרייה ייעודית, יישומי פלאגין ותבניות מותאמות אישית.
פשוט צור ספרייה בשורש של Dolibarr (למשל: מותאם אישית).
-InfDirExample=
לאחר מכן הכריז על זה בקובץ conf.phpb0a65d071f6fcspan9z0

$dolibarr_main_url_root_alt='/custom'
$dolibarr_main_document_root_alt='/barrtom/of/dolibarrtom/of/dspan 'notranslate'>
אם השורות האלה מוערות ב-"#", כדי לאפשר אותן, פשוט בטל את ההערה על-ידי הסרת התו "#". +InfDirExample=
Then declare it in the file conf.php
$dolibarr_main_url_root_alt='/custom'
$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'
If these lines are commented with "#", to enable them, just uncomment by removing the "#" character. YouCanSubmitFile=אתה יכול להעלות את קובץ ה-zip של חבילת המודול מכאן: CurrentVersion=Dolibarr הגרסה הנוכחית CallUpdatePage=דפדף לדף שמעדכן את מבנה מסד הנתונים והנתונים: %s. @@ -361,14 +361,14 @@ LastActivationIP=IP ההפעלה האחרון LastActivationVersion=גרסת ההפעלה האחרונה UpdateServerOffline=עדכן את השרת במצב לא מקוון WithCounter=נהל מונה -GenericMaskCodes=אתה יכול להזין כל מסכת מספור. במסכה זו, ניתן להשתמש בתגים הבאים:
{000000}b09a4f739f<017f /span> מתאים למספר אשר יוגדל בכל %s. הזן כמה אפסים כמו האורך הרצוי של המונה. המונה יושלם באפסים משמאל על מנת שיהיו כמה אפסים כמו המסכה.
{000000+000} אך זהה לקודם היסט המתאים למספר מימין לסימן + מוחל החל ב%s הראשון.
{000000@x} זהה לזה הקודם המונה מאופס לאפס כשמגיעים לחודש x (x בין 1 ל-12, או 0 כדי להשתמש בחודשים הראשונים של שנת הכספים שהוגדרו בתצורה שלך, או 99 כדי לאפס כל חודש). אם נעשה שימוש באפשרות זו ו-x הוא 2 ומעלה, נדרש גם הרצף {yy}{mm} או {yyyy}{mm}.
{dd} יום (01 עד 31). span class='notranslate'>
{mm} חודש (01 עד 12).
{yy}, {yyyy}
או {y} שנה מעל 2, 4 או 1 מספרים.
-GenericMaskCodes2={cccc} קוד הלקוח על n תווים
{cccc000}b0917b78z קוד הלקוח על n תווים ואחריו מונה המוקדש ללקוח. מונה זה המוקדש ללקוח מאופס במקביל למונה הגלובלי.
b06a5f451419e8z הקוד של סוג צד שלישי על n תווים (ראה תפריט בית - הגדרה - מילון - סוגי צדדים שלישיים). אם תוסיף תג זה, המונה יהיה שונה עבור כל סוג של צד שלישי.
+GenericMaskCodes=You may enter any numbering mask. In this mask, the following tags can be used:
{000000} corresponds to a number which will be incremented on each %s. Enter as many zeros as the desired length of the counter. The counter will be completed by zeros from the left in order to have as many zeros as the mask.
{000000+000} same as the previous one but an offset corresponding to the number to the right of the + sign is applied starting on the first %s.
{000000@x} same as the previous one but the counter is reset to zero when month x is reached (x between 1 and 12, or 0 to use the early months of fiscal year defined in your configuration, or 99 to reset to zero every month). If this option is used and x is 2 or higher, then the sequence {yy}{mm} or {yyyy}{mm} is also required.
{dd} day (01 to 31).
{mm} month (01 to 12).
{yy}, {yyyy} or {y} year over 2, 4 or 1 numbers.
+GenericMaskCodes2={cccc} the client code on n characters
{cccc000} the client code on n characters is followed by a counter dedicated to the customer. This counter dedicated to customer is reset at same time as the global counter.
{tttt} The code of third party type on n characters (see menu Home - Setup - Dictionary - Types of third parties). If you add this tag, the counter will be different for each type of third party.
GenericMaskCodes3=כל הדמויות האחרות מסכת יישאר ללא שינוי.
מקומות אסורים.
GenericMaskCodes3EAN=כל שאר התווים במסכה יישארו שלמים (למעט * או ? במיקום 13 ב-EAN13).
אין מותרים רווחים.
span>ב-EAN13, התו האחרון אחרי ה-} האחרון במיקום ה-13 צריך להיות * או ? . הוא יוחלף במפתח המחושב.
GenericMaskCodes4a=דוגמה בתאריך ה-99 של %s של הצד השלישי TheCompany, עם תאריך 2023-01-31:
GenericMaskCodes4b=דוגמה על צד שלישי שנוצר ב-2023-01-31:
> GenericMaskCodes4c=דוגמה על מוצר שנוצר ב-2023-01-31:
-GenericMaskCodes5=ABC{yy}{mm}-{000000} ייתן b0aee873308 span>ABC2301-000099

@01+ }-ZZZ/{dd}/XXX ייתן 0199-ZZZ/31/XXX
IN{yy}{mm}-{0000}-{t} ייתן IN2301-0099-A סוג החברה הוא 'Inscripto אחראי' עם קוד לסוג שהוא 'A_RI' +GenericMaskCodes5=ABC{yy}{mm}-{000000} will give ABC2301-000099
{0000+100@1}-ZZZ/{dd}/XXX will give 0199-ZZZ/31/XXX
IN{yy}{mm}-{0000}-{t} will give IN2301-0099-A if the type of company is 'Responsable Inscripto' with code for type that is 'A_RI' GenericNumRefModelDesc=להחזיר מספר להתאמה אישית על פי מסכת מוגדר. ServerAvailableOnIPOrPort=שרת זמין בכתובת %s כתובת ביציאה %s ServerNotAvailableOnIPOrPort=השרת אינו זמין %s כתובת ביציאה %s @@ -390,7 +390,7 @@ LanguageFilesCachedIntoShmopSharedMemory=קבצים. Lang טעון בזיכרו LanguageFile=קובץ שפה ExamplesWithCurrentSetup=דוגמאות עם תצורה נוכחית ListOfDirectories=רשימה של ספריות ותבניות OpenDocument -ListOfDirectoriesForModelGenODT=רשימת ספריות המכילות קבצי תבניות בפורמט OpenDocument.

שים כאן את הנתיב המלא של ספריות.
הוסף החזרת כרכרה בין ספרייה אחת.
כדי להוסיף ספרייה של מודול GED, הוסף כאן >DOL_DATA_ROOT/ecm/yourdirectoryname.
b0342fccfdaies19bz0 במנהלים אלו חייב להסתיים ב-.odt או .ods ='notranslate'>
. +ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.

Put here full path of directories.
Add a carriage return between eah directory.
To add a directory of the GED module, add here DOL_DATA_ROOT/ecm/yourdirectoryname.

Files in those directories must end with .odt or .ods. NumberOfModelFilesFound=מספר קובצי תבנית ODT/ODS שנמצאו בספריות אלו ExampleOfDirectoriesForModelGen=דוגמאות לתחביר:
c:\\myapp\\mydocumentdir\\mysubdir
/home/myapp/mydocumentdir/mysubdir
DOL_DATA_ROOT/ecm/ecmdir FollowingSubstitutionKeysCanBeUsed=
לדעת איך ליצור תבניות ODT המסמכים שלך, לפני אחסונם ספריות אלה, קרא את התיעוד wiki: @@ -461,10 +461,10 @@ ComputedFormulaDesc=אתה יכול להזין כאן נוסחה באמצעות Computedpersistent=אחסן שדה מחושב ComputedpersistentDesc=שדות נוספים מחושבים יאוחסנו במסד הנתונים, עם זאת, הערך יחושב מחדש רק כאשר האובייקט של שדה זה ישתנה. אם השדה המחושב תלוי באובייקטים אחרים או בנתונים גלובליים ערך זה עשוי להיות שגוי!! ExtrafieldParamHelpPassword=השארת שדה זה ריק פירושה שהערך הזה יאוחסן ללא הצפנה (השדה פשוט מוסתר עם כוכבים על המסך).

הזן ערך 'dolcrypt' כדי לקודד ערך עם אלגוריתם הצפנה הפיך. עדיין ניתן לדעת ולערוך נתונים ברורים, אך הם מוצפנים במסד הנתונים.

הזן 'auto' (או 'md5', 'sha256', 'password_hash', ...) כדי להשתמש באלגוריתם ברירת המחדל של הצפנת סיסמה (או md5, sha256, password_hash...) כדי לשמור את הסיסמה ה-hash הבלתי הפיכה במסד הנתונים (אין דרך לאחזר את הערך המקורי) -ExtrafieldParamHelpselect=רשימת הערכים חייבת להיות שורות עם מפתח פורמט, ערך (כאשר המפתח לא יכול להיות '0')

למשל :
1,value1
2,value2
code3,valu span class='notranslate'>
...

כדי שהרשימה תהיה תלויה באחר רשימת מאפיינים משלימים:
1,value1|options_parent_list_codeb0ae634758bac>: parent_key
2,value2|options_parent_list_codeb0ae64758bac33zkey class='notranslate'>

כדי שהרשימה תהיה תלויה ברשימה אחרת:
1, value1|parent_list_code:parent_key
2,value class='notranslate'>parent_list_code:parent_key -ExtrafieldParamHelpcheckbox=רשימת הערכים חייבת להיות שורות עם מפתח פורמט, ערך (כאשר המפתח לא יכול להיות '0')

למשל :
1,value1
2,value2
3,value span class='notranslate'>
... -ExtrafieldParamHelpradio=רשימת הערכים חייבת להיות שורות עם מפתח פורמט, ערך (כאשר המפתח לא יכול להיות '0')

למשל :
1,value1
2,value2
3,value span class='notranslate'>
... -ExtrafieldParamHelpsellist=רשימת ערכים מגיעה מטבלה
תחביר: table_name:label_field:id_field::filtersql
דוגמה: c_idtypent:libelle: ::filtersql

- id_field הוא בהכרח מפתח int ראשיb0342fccfda19bz> - filtersql הוא תנאי SQL. זה יכול להיות בדיקה פשוטה (למשל active=1) להציג רק ערך פעיל
אתה יכול גם להשתמש ב-$ID$ במסנן שהוא המזהה הנוכחי של האובייקט הנוכחי
כדי להשתמש ב-SELECT לתוך המסנן, השתמש במילת המפתח $SEL$ כדי לעקוף את ההגנה נגד הזרקה.
אם ברצונך לסנן על שדות נוספים. השתמש בתחביר extra.fieldcode=... (כאשר קוד השדה הוא הקוד של extrafield)

על מנת לקבל את רשימה בהתאם לרשימת מאפיינים משלימים אחרת:
c_typent:libelle:id:options_parent_list_code |parent_column:filter

כדי שהרשימה תהיה תלויה ברשימה אחרת:
c_typent:libelle:id:parent_list_code:parent| +ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key +ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... +ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... +ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filtersql
Example: c_typent:libelle:id::filtersql

- id_field is necessarily a primary int key
- filtersql is a SQL condition. It can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter which is the current id of current object
To use a SELECT into the filter use the keyword $SEL$ to bypass anti-injection protection.
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=רשימת ערכים מגיעה מטבלה
תחביר: table_name:label_field:id_field::filtersql
דוגמה: c_idtypent:libelle: ::filtersql

מסנן יכול להיות בדיקה פשוטה (למשל active=1) להצגת ערך פעיל בלבד
תוכל גם להשתמש ב-$ID$ במסנן שהוא המזהה הנוכחי של האובייקט הנוכחי
כדי לבצע SELECT במסנן השתמש ב-$SEL$
אם אתה רוצה לסנן על extrafields השתמש בתחביר extra.fieldcode=... (כאשר קוד השדה הוא הקוד של extrafield)

כדי שהרשימה תהיה תלויה ברשימת תכונות משלימה אחרת:
c_typent:libelle:id:options_parent_list_code|parent_column:filter
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=הפרמטרים חייבים להיות ObjectName:Classpath
תחביר: ObjectName:Classpath ExtrafieldParamHelpSeparator=שמור ריק עבור מפריד פשוט
הגדר את זה ל-1 עבור מפריד מתמוטט (פתוח כברירת מחדל עבור הפעלה חדשה, ואז הסטטוס נשמר עבור כל הפעלה של משתמש)
הגדר את זה ל-2 עבור מפריד מכווץ (כווץ כברירת מחדל עבור הפעלה חדשה, ואז הסטטוס נשמר לפני כל הפעלת משתמש) @@ -483,7 +483,7 @@ ExternalModule=מודול חיצוני InstalledInto=מותקן בספרייה %s BarcodeInitForThirdparties=ברקוד המוני init עבור צדדים שלישיים BarcodeInitForProductsOrServices=ברקוד המוני התחל או איפוס עבור מוצרים או שירותים -CurrentlyNWithoutBarCode=נכון לעכשיו, יש לך רשומת %s ב-%s b0ecb>9fc87f מוגדר%s
record on %s %s without barcode defined. InitEmptyBarCode=ערך Init עבור %s הברקודים הריקים EraseAllCurrentBarCode=מחק את כל ערכי הברקוד הנוכחיים ConfirmEraseAllCurrentBarCode=האם אתה בטוח שברצונך למחוק את כל ערכי הברקוד הנוכחיים? @@ -1197,6 +1197,7 @@ Skin=העור נושא DefaultSkin=העור סגנון ברירת מחדל MaxSizeList=אורך מקסימלי עבור רשימה DefaultMaxSizeList=אורך מרבי ברירת מחדל עבור רשימות +DisplayGrandTotalInList=Display grand total (for all pages) in lists footer DefaultMaxSizeShortList=ברירת המחדל של אורך מקסימלי עבור רשימות קצרות (כלומר בכרטיס לקוח) MessageOfDay=המסר של היום MessageLogin=התחברות הודעה בדף @@ -1249,7 +1250,7 @@ SetupDescription2=שני הסעיפים הבאים הם חובה (שני הער SetupDescription3=%s -> %sb0e87d8cczc60e40d

פרמטרים בסיסיים המשמשים להתאמה אישית של התנהגות ברירת המחדל של היישום שלך (למשל עבור תכונות הקשורות למדינה). SetupDescription4=
%s -> %sb0e87d8cczc60e40d

תוכנה זו היא חבילה של מודולים/יישומים רבים. המודולים הקשורים לצרכים שלך חייבים להיות מופעלים ומוגדרים. ערכים בתפריט יופיעו עם הפעלת המודולים הללו. SetupDescription5=ערכי תפריט הגדרה אחרים מנהלים פרמטרים אופציונליים. -SetupDescriptionLink=
%s - %sb05e87d8ccz60e87d8ccz /span> +SetupDescriptionLink=%s - %s SetupDescription3b=פרמטרים בסיסיים המשמשים להתאמה אישית של התנהגות ברירת המחדל של האפליקציה שלך (למשל עבור תכונות הקשורות למדינה). SetupDescription4b=תוכנה זו היא חבילה של מודולים/יישומים רבים. יש להפעיל את המודולים הקשורים לצרכים שלך. ערכים בתפריט יופיעו עם הפעלת המודולים הללו. AuditedSecurityEvents=אירועי אבטחה שנבדקים @@ -1280,8 +1281,8 @@ DisplayDesc=ניתן לשנות כאן פרמטרים המשפיעים על המ AvailableModules=אפליקציה/מודולים זמינים ToActivateModule=כדי להפעיל מודולים, ללכת על שטח ההתקנה (ראשי-> התקנה-> Modules). SessionTimeOut=זמן לפגישה -SessionExplanation=מספר זה מבטיח שההפעלה לעולם לא יפוג לפני העיכוב הזה, אם ניקוי הפגישות נעשה על ידי מנקה ההפעלה הפנימי של PHP (ושום דבר אחר). מנקה הפעלות פנימי של PHP אינו מבטיח שההפעלה יפוג לאחר עיכוב זה. התוקף יפוג, לאחר עיכוב זה, וכאשר מנקה הפעלות יופעל, כך שכל %s/%s, אבל רק במהלך גישה שנעשתה על ידי הפעלות אחרות (אם הערך הוא 0, זה אומר שניקוי ההפעלה נעשה רק על ידי תהליך חיצוני) .
הערה: בשרתים מסוימים עם מנגנון ניקוי הפעלה חיצוני (cron תחת debian, ubuntu...), ההפעלות יכולות להיהרס לאחר תקופה שהוגדרה על ידי הגדרה חיצונית, לא משנה מה הערך שהוזן כאן. -SessionsPurgedByExternalSystem=נראה כי הפעלות בשרת זה מנוקות על ידי מנגנון חיצוני (cron תחת debian, ubuntu ...), כנראה כל %s שניות (= ערך הפרמטר session.gc_maxlifetimeb09a4b739f%s/%s access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).
Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is. +SessionsPurgedByExternalSystem=Sessions on this server seems to be cleaned by an external mechanism (cron under debian, ubuntu ...), probably every %s seconds (= value of parameter session.gc_maxlifetime), so changing the value here has no effect. You must ask the server administrator to change session delay. TriggersAvailable=זמין טריגרים TriggersDesc=טריגרים הם קבצים שישנו את ההתנהגות של זרימת העבודה של Dolibarr לאחר העתקה לספרייה htdocs/core/triggers. הם מבינים פעולות חדשות, המופעלות באירועי Dolibarr (יצירת חברה חדשה, אימות חשבונית, ...). TriggerDisabledByName=גורמים בקובץ זה אינם זמינים על ידי הסיומת-NoRun בשמם. @@ -1381,7 +1382,7 @@ NewTranslationStringToShow=מחרוזת תרגום חדשה להצגה OriginalValueWas=התרגום המקורי מוחלף. הערך המקורי היה:

%s TransKeyWithoutOriginalValue=אילצת תרגום חדש למפתח התרגום '%s' שאינו קיים באף קבצי שפה TitleNumberOfActivatedModules=מודולים מופעלים -TotalNumberOfActivatedModules=מודולים מופעלים: %s /
__LOGIN__b09a4b739f שיוחלף בכניסה עם קליקטודיאל (מוגדר בכרטיס המשתמש)
__PASS__ שתוחלף בסיסמת קליקטודיאל (מוגדרת בכרטיס המשתמש). +ClickToDialUrlDesc=URL called when a click on phone picto is done. In URL, you can use tags
__PHONETO__ that will be replaced with the phone number of person to call
__PHONEFROM__ that will be replaced with phone number of calling person (yours)
__LOGIN__ that will be replaced with clicktodial login (defined on user card)
__PASS__ that will be replaced with clicktodial password (defined on user card). ClickToDialDesc=מודול זה משנה מספרי טלפון, בעת שימוש במחשב שולחני, לקישורים הניתנים ללחיצה. לחיצה תתקשר למספר. זה יכול לשמש כדי להתחיל את שיחת הטלפון בעת שימוש בטלפון רך על שולחן העבודה שלך או בעת שימוש במערכת CTI המבוססת על פרוטוקול SIP למשל. הערה: בעת שימוש בסמארטפון, מספרי טלפון תמיד ניתנים ללחיצה. ClickToDialUseTelLink=השתמש רק בקישור "טל:" במספרי הטלפון ClickToDialUseTelLinkDesc=השתמש בשיטה זו אם למשתמשים שלך יש softphone או ממשק תוכנה, המותקן על אותו מחשב כמו הדפדפן, ונקרא כאשר אתה לוחץ על קישור שמתחיל ב-"tel:" בדפדפן שלך. אם אתה צריך קישור שמתחיל ב-"sip:" או פתרון שרת מלא (אין צורך בהתקנת תוכנה מקומית), עליך להגדיר זאת ל-"No" ולמלא את השדה הבא. @@ -1971,7 +1972,7 @@ SomethingMakeInstallFromWebNotPossible=התקנה של מודול חיצוני SomethingMakeInstallFromWebNotPossible2=מסיבה זו, תהליך השדרוג המתואר כאן הוא תהליך ידני שרק משתמש בעל הרשאה רשאי לבצע. InstallModuleFromWebHasBeenDisabledContactUs=התקנה או פיתוח של מודולים חיצוניים או אתרים דינמיים, מהאפליקציה, נעולים כעת למטרות אבטחה. אנא צור איתנו קשר אם אתה צריך להפעיל תכונה זו. InstallModuleFromWebHasBeenDisabledByFile=התקנת מודול חיצוני מהאפליקציה הושבתה על ידי מנהל המערכת שלך. עליך לבקש ממנו להסיר את הקובץ %s כדי לאפשר זאת תכונה. -ConfFileMustContainCustom=התקנה או בנייה של מודול חיצוני מהאפליקציה צריך לשמור את קבצי המודול בספרייה %s . כדי שהספרייה הזו תעבד על ידי Dolibarr, עליך להגדיר את conf/conf.php שלך כדי להוסיף את 2 שורות ההנחיה:
$dolibarr_main_url_root_alt='/custom';b0a65fspanc90f
$dolibarr_main_document_root_alt='b0ecb2ec87f49fztom0;/ class '> +ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory %s. To have this directory processed by Dolibarr, you must setup your conf/conf.php to add the 2 directive lines:
$dolibarr_main_url_root_alt='/custom';
$dolibarr_main_document_root_alt='%s/custom'; HighlightLinesOnMouseHover=הדגש קווי טבלה כאשר תנועת העכבר עוברת HighlightLinesColor=הדגש את צבע הקו כאשר העכבר עובר (השתמש ב-'ffffff' כדי לא להדגיש) HighlightLinesChecked=הדגש את צבע הקו כאשר הוא מסומן (השתמש ב-'ffffff' ללא הדגשה) @@ -2065,7 +2066,7 @@ DetectionNotPossible=איתור לא אפשרי UrlToGetKeyToUseAPIs=כתובת אתר לקבלת אסימון לשימוש ב-API (לאחר קבלת האסימון הוא נשמר בטבלת המשתמשים של מסד הנתונים ויש לספק אותו בכל קריאת API) ListOfAvailableAPIs=רשימה של ממשקי API זמינים activateModuleDependNotSatisfied=מודול "%s" תלוי במודול "%s", שחסר, אז מודול " %1$s" עשוי שלא לפעול כהלכה. אנא התקן את המודול "%2$s" או השבת את המודול "%1$s" אם אתה רוצה להיות בטוח מכל הפתעה -CommandIsNotInsideAllowedCommands=הפקודה שאתה מנסה להפעיל אינה ברשימת הפקודות המותרות המוגדרות בפרמטר $dolibarr_main_restrict_os_commands ב- class='notranslate'>conf.php קובץ. +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter $dolibarr_main_restrict_os_commands in the conf.php file. LandingPage=דף נחיתה SamePriceAlsoForSharedCompanies=אם אתה משתמש במודול מרובה חברות, עם הבחירה "מחיר יחיד", המחיר יהיה זהה גם עבור כל החברות אם מוצרים משותפים בין סביבות ModuleEnabledAdminMustCheckRights=מודול הופעל. הרשאות עבור מודולים מופעלים ניתנו למשתמשי אדמין בלבד. ייתכן שיהיה עליך להעניק הרשאות למשתמשים אחרים או לקבוצות באופן ידני במידת הצורך. @@ -2291,7 +2292,7 @@ APIsAreNotEnabled=מודולי ממשקי API אינם מופעלים YouShouldSetThisToOff=אתה צריך להגדיר את זה ל-0 או כבוי InstallAndUpgradeLockedBy=ההתקנה והשדרוגים נעולים על ידי הקובץ %s InstallLockedBy=ההתקנה/התקנה מחדש ננעלת על ידי הקובץ %s -InstallOfAddonIsNotBlocked=התקנות של תוספות אינן נעולות. צור קובץ installmodules.lock לתוך הספרייה b0aee83365837 class%s
כדי לחסום התקנות של תוספות/מודולים חיצוניים. +InstallOfAddonIsNotBlocked=Installations of addons are not locked. Create a file installmodules.lock into directory %s to block installations of external addons/modules. OldImplementation=יישום ישן PDF_SHOW_LINK_TO_ONLINE_PAYMENT=אם כמה מודולי תשלום מקוונים מופעלים (Paypal, Stripe, ...), הוסף קישור ב-PDF כדי לבצע את התשלום המקוון DashboardDisableGlobal=השבת באופן גלובלי את כל האגודלים של אובייקטים פתוחים @@ -2406,7 +2407,7 @@ CSSPage=סגנון CSS Defaultfortype=בְּרִירַת מֶחדָל DefaultForTypeDesc=התבנית משמשת כברירת מחדל בעת יצירת אימייל חדש עבור סוג התבנית OptionXShouldBeEnabledInModuleY=יש להפעיל את האפשרות "%s" למודול %s -OptionXIsCorrectlyEnabledInModuleY=האפשרות "%s" מופעלת במודול %s +OptionXIsCorrectlyEnabledInModuleY=Option "%s" is enabled into module %s AllowOnLineSign=אפשר חתימה On Line AtBottomOfPage=בתחתית העמוד FailedAuth=אימותים נכשלים @@ -2433,3 +2434,12 @@ UrlPublicInterfaceHelpAdmin=It is possible to define an alias to the web server ExportUseForce=Use the parameter -f ExportUseForceHelp=Force to continue the export even when an error is found (Backup may not be reliable) CustomPrompt=Custom prompts +AiDescription=AI (Artificial Intelligence) features +AiDescriptionLong=Provides AI (Artificial Intelligence) features in different part of the application. Need external AI API. +AI_KEY_API_CHATGPT= Key for ChatGPT IA api +AiSetup=AI module setup +AiCustomPrompt=AI customs prompt +AI_CONFIGURATIONS_PROMPT=Custom prompt +ImageGeneration=Image generation +AIPromptForFeatures=AI custom prompts for features +EnterAnIP=Enter an IP address diff --git a/htdocs/langs/he_IL/agenda.lang b/htdocs/langs/he_IL/agenda.lang index c022360e289..47b0e01b042 100644 --- a/htdocs/langs/he_IL/agenda.lang +++ b/htdocs/langs/he_IL/agenda.lang @@ -137,8 +137,8 @@ DateActionEnd=תאריך סיום AgendaUrlOptions1=אתה יכול גם להוסיף את הפרמטרים הבאים לסינון הפלט: AgendaUrlOptions3=logina=%s כדי להגביל את הפלט לפעולות שבבעלות משתמש %s. AgendaUrlOptionsNotAdmin=logina=!%s כדי להגביל פלט לפעולות שאינן בבעלות משתמש %s. -AgendaUrlOptions4=logint=%s כדי להגביל את הפלט לפעולות שהוקצו למשתמש span class='notranslate'>
%s (בעלים ואחרים). -AgendaUrlOptionsProject=project=__PROJECT_ID__ כדי להגביל את הפלט לפעולות המקושרות לפרויקט b0aee87365 __PROJECT_ID__. +AgendaUrlOptions4=logint=%s to restrict output to actions assigned to user %s (owner and others). +AgendaUrlOptionsProject=project=__PROJECT_ID__ to restrict output to actions linked to project __PROJECT_ID__. AgendaUrlOptionsNotAutoEvent=notactiontype=systemauto כדי לא לכלול אירועים אוטומטיים. AgendaUrlOptionsIncludeHolidays=includeholidays=1 כדי לכלול אירועים של חגים. AgendaShowBirthdayEvents=ימי הולדת של אנשי קשר diff --git a/htdocs/langs/he_IL/banks.lang b/htdocs/langs/he_IL/banks.lang index 997dbb0b3de..206301ef880 100644 --- a/htdocs/langs/he_IL/banks.lang +++ b/htdocs/langs/he_IL/banks.lang @@ -115,7 +115,7 @@ MenuBankInternalTransfer=העברה פנימית TransferDesc=השתמש בהעברה פנימית להעברת מחשבון אחד לאחר, האפליקציה תכתוב שתי רשומות: חיוב בחשבון המקור וזיכוי בחשבון היעד. אותו סכום, תווית ותאריך ישמשו עבור עסקה זו. TransferFrom=מ TransferTo=ל -TransferFromToDone=העברה מ-%s אל %s מתוך b0aee83365 class%s %s תועד. +TransferFromToDone=A transfer from %s to %s of %s %s has been recorded. CheckTransmitter=שׁוֹלֵחַ ValidateCheckReceipt=האם לאמת את קבלת ההמחאה הזו? ConfirmValidateCheckReceipt=האם אתה בטוח שברצונך להגיש את קבלה המחאה הזו לאימות? לא יתאפשרו שינויים לאחר האימות. diff --git a/htdocs/langs/he_IL/bills.lang b/htdocs/langs/he_IL/bills.lang index ad8f482dab1..d67355ce8ad 100644 --- a/htdocs/langs/he_IL/bills.lang +++ b/htdocs/langs/he_IL/bills.lang @@ -93,6 +93,9 @@ CodePaymentMode=אמצעי תשלום (קוד) LabelPaymentMode=אמצעי תשלום (תווית) PaymentModeShort=אמצעי תשלום PaymentTerm=טווח תשלום +IdPaymentTerm=Payment term (id) +CodePaymentTerm=Payment term (code) +LabelPaymentTerm=Payment term (label) PaymentConditions=תנאי תשלום PaymentConditionsShort=תנאי תשלום PaymentAmount=סכום לתשלום @@ -610,7 +613,7 @@ TotalSituationInvoice=מצב טוטאלי invoiceLineProgressError=התקדמות שורת החשבונית אינה יכולה להיות גדולה או שווה לשורת החשבונית הבאה updatePriceNextInvoiceErrorUpdateline=שגיאה: עדכן מחיר בשורת החשבונית: %s ToCreateARecurringInvoice=כדי ליצור חשבונית חוזרת עבור חוזה זה, תחילה צור טיוטת חשבונית זו, ולאחר מכן המר אותה לתבנית חשבונית והגדר את התדירות להפקת חשבוניות עתידיות. -ToCreateARecurringInvoiceGene=כדי ליצור חשבוניות עתידיות באופן קבוע וידני, פשוט עבור לתפריט %s - %s span> - %s. +ToCreateARecurringInvoiceGene=To generate future invoices regularly and manually, just go on menu %s - %s - %s. ToCreateARecurringInvoiceGeneAuto=אם אתה צריך להפיק חשבוניות כאלה באופן אוטומטי, בקש ממנהל המערכת שלך להפעיל ולהגדיר את המודול %s. שימו לב שניתן להשתמש בשתי השיטות (ידניות ואוטומטיות) יחד ללא סיכון לשכפול. DeleteRepeatableInvoice=מחק חשבונית תבנית ConfirmDeleteRepeatableInvoice=האם אתה בטוח שברצונך למחוק את חשבונית התבנית? diff --git a/htdocs/langs/he_IL/cashdesk.lang b/htdocs/langs/he_IL/cashdesk.lang index 85b83797168..253e38e0ef5 100644 --- a/htdocs/langs/he_IL/cashdesk.lang +++ b/htdocs/langs/he_IL/cashdesk.lang @@ -97,7 +97,7 @@ ReceiptPrinterMethodDescription=שיטה עוצמתית עם הרבה פרמטר ByTerminal=לפי טרמינל TakeposNumpadUsePaymentIcon=השתמש בסמל במקום בטקסט על כפתורי התשלום של ה-numpad CashDeskRefNumberingModules=מודול מספור למכירות קופה -CashDeskGenericMaskCodes6 =
{TN}b399a תג משמש להוספת מספר הטרמינל +CashDeskGenericMaskCodes6 =
{TN} tag is used to add the terminal number TakeposGroupSameProduct=מיזוג שורות של אותם מוצרים StartAParallelSale=התחל מכירה מקבילה חדשה SaleStartedAt=המכירה החלה ב-%s diff --git a/htdocs/langs/he_IL/companies.lang b/htdocs/langs/he_IL/companies.lang index 43288a331dc..b9556b90ee7 100644 --- a/htdocs/langs/he_IL/companies.lang +++ b/htdocs/langs/he_IL/companies.lang @@ -335,11 +335,11 @@ CompanyHasRelativeDiscount=ללקוח זה יש הנחה ברירת מחדל ש CompanyHasNoRelativeDiscount=ללקוח זה אין הנחה יחסית כברירת מחדל HasRelativeDiscountFromSupplier=יש לך הנחה ברירת מחדל של %s%% עם הספק הזה HasNoRelativeDiscountFromSupplier=אין הנחה יחסית ברירת מחדל אצל ספק זה -CompanyHasAbsoluteDiscount=ללקוח זה יש הנחות זמינות (הערות זיכוי או מקדמה) עבור %s span> %s +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for %s %s CompanyHasDownPaymentOrCommercialDiscount=ללקוח זה יש הנחות זמינות (מסחריות, מקדמה) עבור %s > %s CompanyHasCreditNote=ללקוח זה עדיין יש תעודות אשראי עבור %s %s HasNoAbsoluteDiscountFromSupplier=אין הנחה/אשראי זמינים מהספק הזה -HasAbsoluteDiscountFromSupplier=יש לך הנחות זמינות (הערות זיכוי או מקדמה) עבור %s > %s מהספק הזה +HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for %s %s from this vendor HasDownPaymentOrCommercialDiscountFromSupplier=יש לך הנחות זמינות (מסחרי, מקדמה) עבור %s %s מהספק הזה HasCreditNoteFromSupplier=יש לך תעודות אשראי עבור %s %s מהספק הזה CompanyHasNoAbsoluteDiscount=ללקוח זה אין זיכוי הנחה זמין diff --git a/htdocs/langs/he_IL/compta.lang b/htdocs/langs/he_IL/compta.lang index 4bf61d7fe0d..786e7fa9547 100644 --- a/htdocs/langs/he_IL/compta.lang +++ b/htdocs/langs/he_IL/compta.lang @@ -165,10 +165,10 @@ CalcModeEngagement=ניתוח תשלומים רשומים ידועים CalcModePayment=ניתוח תשלומים רשומים ידועים CalcModeBookkeeping=ניתוח נתונים מתועדים בטבלת הנהלת חשבונות. CalcModeNoBookKeeping=גם אם הם עדיין לא מטופלים בלדג'ר -CalcModeLT1= מצב %sRE בחשבוניות לקוחות - חשבוניות ספקים%s +CalcModeLT1= Mode %sRE on customer invoices - suppliers invoices%s CalcModeLT1Debt=מצב %sRE בחשבוניות לקוחות%s CalcModeLT1Rec= מצב %sRE בחשבוניות ספקים%s -CalcModeLT2= מצב %sIRPF בחשבוניות לקוחות - חשבוניות ספקים%s +CalcModeLT2= Mode %sIRPF on customer invoices - suppliers invoices%s CalcModeLT2Debt=מצב %sIRPF בחשבוניות לקוחות%s CalcModeLT2Rec= מצב %sIRPF על חשבוניות ספקים%s
AnnualSummaryDueDebtMode=מאזן הכנסות והוצאות, סיכום שנתי diff --git a/htdocs/langs/he_IL/errors.lang b/htdocs/langs/he_IL/errors.lang index f6c3796dfbd..c7fd7a25814 100644 --- a/htdocs/langs/he_IL/errors.lang +++ b/htdocs/langs/he_IL/errors.lang @@ -15,7 +15,7 @@ ErrorGroupAlreadyExists=הקבוצה %s כבר קיימת. ErrorEmailAlreadyExists=דוא"ל %s כבר קיים. ErrorRecordNotFound=רשומה לא נמצאה. ErrorRecordNotFoundShort=לא נמצא -ErrorFailToCopyFile=נכשלה העתקת הקובץ '%s' אל '%s'. +ErrorFailToCopyFile=Failed to copy file '%s' into '%s'. ErrorFailToCopyDir=נכשלה העתקת הספרייה '%s' אל '%s'. ErrorFailToRenameFile=נכשל שינוי שם הקובץ '%s' ל-'%s'. ErrorFailToDeleteFile=הסרת הקובץ '%s' נכשלה. @@ -51,7 +51,7 @@ ErrorBadDateFormat=לערך '%s' יש פורמט תאריך שגוי ErrorWrongDate=התאריך לא נכון! ErrorFailedToWriteInDir=נכשל כתיבה בספרייה %s ErrorFailedToBuildArchive=בניית קובץ הארכיון נכשלה %s -ErrorFoundBadEmailInFile=נמצא תחביר דוא"ל שגוי עבור שורות %s בקובץ (שורה לדוגמא %s עם email=b0ecb2ec87f49f /span>) +ErrorFoundBadEmailInFile=Found incorrect email syntax for %s lines in file (example line %s with email=%s) ErrorUserCannotBeDelete=לא ניתן למחוק את המשתמש. אולי זה משויך לישויות Dolibarr. ErrorFieldsRequired=כמה שדות חובה נותרו ריקים. ErrorSubjectIsRequired=נושא הדוא"ל נדרש @@ -95,9 +95,9 @@ ErrorModuleRequireJavascript=אין להשבית את JavaScript כדי שתכו ErrorPasswordsMustMatch=שתי הסיסמאות המוקלדות חייבות להתאים זו לזו ErrorContactEMail=אירעה שגיאה טכנית. אנא צור קשר עם מנהל המערכת כדי לשלוח את הדוא"ל %s ולספק את השגיאה קוד %s בהודעה שלך, או הוסף עותק מסך של הדף הזה. ErrorWrongValueForField=שדה %s: ' %s' אינו תואם את כלל הביטוי הרגולרי b065837f %s -ErrorHtmlInjectionForField=שדה %s: הערך '%s' מכיל נתונים זדוניים אסורים +ErrorHtmlInjectionForField=Field %s: The value '%s' contains a malicious data not allowed ErrorFieldValueNotIn=שדה %s: ' %s' אינו ערך שנמצא בשדה b30583fz span>%s מתוך %s -ErrorFieldRefNotIn=שדה %s: ' %s' אינו b0aee873365 class='notranslate'>%s ref קיים +ErrorFieldRefNotIn=Field %s: '%s' is not a %s existing ref ErrorMultipleRecordFoundFromRef=נמצאו מספר רשומות בעת חיפוש מ-ref %s. אין דרך לדעת באיזה תעודת זהות להשתמש. ErrorsOnXLines=נמצאו שגיאות %s ErrorFileIsInfectedWithAVirus=תוכנית האנטי וירוס לא הצליחה לאמת את הקובץ (ייתכן שהקובץ נגוע בווירוס) @@ -263,7 +263,7 @@ ErrorReplaceStringEmpty=שגיאה, המחרוזת להחלפה ריקה ErrorProductNeedBatchNumber=שגיאה, המוצר '%s' צריך הרבה/מספר סידורי ErrorProductDoesNotNeedBatchNumber=שגיאה, המוצר '%s' אינו מקבל הרבה/ מספר סידורי ErrorFailedToReadObject=שגיאה, כשל בקריאת אובייקט מסוג %s -ErrorParameterMustBeEnabledToAllwoThisFeature=שגיאה, יש להפעיל את הפרמטר %s ב-conf/conf.php<> כדי לאפשר שימוש בממשק שורת הפקודה על ידי מתזמן המשימות הפנימי +ErrorParameterMustBeEnabledToAllwoThisFeature=Error, parameter %s must be enabled into conf/conf.php<> to allow use of Command Line Interface by the internal job scheduler ErrorLoginDateValidity=שגיאה, התחברות זו היא מחוץ לטווח תאריכי התוקף ErrorValueLength=אורך השדה '%s' חייב להיות גבוה מ-'%s' ErrorReservedKeyword=המילה '%s' היא מילת מפתח שמורה @@ -349,7 +349,7 @@ WarningCloseAlways=אזהרה, הסגירה מתבצעת גם אם הכמות ש WarningUsingThisBoxSlowDown=אזהרה, שימוש בתיבה זו האט ברצינות את כל הדפים המציגים את התיבה. WarningClickToDialUserSetupNotComplete=ההגדרה של מידע ClickToDial עבור המשתמש שלך לא הושלמה (ראה את הכרטיסייה ClickToDial בכרטיס המשתמש שלך). WarningFeatureDisabledWithDisplayOptimizedForBlindNoJs=התכונה מושבתת כאשר הגדרת התצוגה מותאמת לאדם עיוור או לדפדפני טקסט. -WarningPaymentDateLowerThanInvoiceDate=תאריך התשלום (%s) מוקדם מתאריך החשבונית (%s) עבור חשבונית b0ecb2ec87f49fz span>. +WarningPaymentDateLowerThanInvoiceDate=Payment date (%s) is earlier than invoice date (%s) for invoice %s. WarningTooManyDataPleaseUseMoreFilters=יותר מדי נתונים (יותר משורות %s). אנא השתמש בעוד מסננים או הגדר את הקבוע %s לגבול גבוה יותר. WarningSomeLinesWithNullHourlyRate=חלק מהפעמים תועדו על ידי חלק מהמשתמשים בעוד התעריף השעתי שלהם לא הוגדר. נעשה שימוש בערך של 0 %s לשעה, אך הדבר עלול לגרום להערכה שגויה של הזמן המושקע. WarningYourLoginWasModifiedPleaseLogin=פרטי הכניסה שלך השתנו. למטרות אבטחה תצטרך להתחבר עם פרטי הכניסה החדשים שלך לפני הפעולה הבאה. diff --git a/htdocs/langs/he_IL/eventorganization.lang b/htdocs/langs/he_IL/eventorganization.lang index d91330bee9d..e9aa3e55d24 100644 --- a/htdocs/langs/he_IL/eventorganization.lang +++ b/htdocs/langs/he_IL/eventorganization.lang @@ -36,7 +36,7 @@ EventOrganizationSetup=הגדרת ארגון אירועים EventOrganization=ארגון אירועים EventOrganizationSetupPage = דף הגדרות ארגון אירועים EVENTORGANIZATION_TASK_LABEL = תווית של משימות ליצירה אוטומטית כאשר הפרויקט מאומת -EVENTORGANIZATION_TASK_LABELTooltip = כאשר אתה מאמת אירוע לארגון, ניתן ליצור כמה משימות באופן אוטומטי בפרויקט

לדוגמה:
שלח קול קורא לוועידות
שלח קול קורא לדוכנים
אמת הצעות של כנסים
אמת את האפליקציה לדוכנים
פתוח מנויים לאירוע למשתתפים
של האירוע לרמקולים
שלח תזכורת לאירוע למארחי ביתן
שלח תזכורת לאירוע למשתתפים +EVENTORGANIZATION_TASK_LABELTooltip = When you validate an event to organize, some tasks can be automatically created in the project

For example:
Send Call for Conferences
Send Call for Booths
Validate suggestions of Conferences
Validate application for Booths
Open subscriptions to the event for attendees
Send a remind of the event to speakers
Send a remind of the event to Booth hosters
Send a remind of the event to attendees EVENTORGANIZATION_TASK_LABELTooltip2=השאר ריק אם אינך צריך ליצור משימות באופן אוטומטי. EVENTORGANIZATION_CATEG_THIRDPARTY_CONF = קטגוריה להוספה לצדדים שלישיים נוצרת באופן אוטומטי כאשר מישהו מציע ועידה EVENTORGANIZATION_CATEG_THIRDPARTY_BOOTH = קטגוריה להוספה לצדדים שלישיים נוצרה אוטומטית כאשר הם מציעים דוכן @@ -88,6 +88,7 @@ PriceOfRegistration=מחיר הרשמה PriceOfRegistrationHelp=מחיר לתשלום עבור הרשמה או השתתפות באירוע PriceOfBooth=מחיר מנוי לעמוד דוכן PriceOfBoothHelp=מחיר מנוי לעמוד דוכן +EventOrganizationICSLinkProject=Link ICS for the event EventOrganizationICSLink=קישור ICS לכנסים ConferenceOrBoothInformation=מידע על כנס או דוכן Attendees=משתתפים diff --git a/htdocs/langs/he_IL/exports.lang b/htdocs/langs/he_IL/exports.lang index 788cd27b6be..a5fb65d7c19 100644 --- a/htdocs/langs/he_IL/exports.lang +++ b/htdocs/langs/he_IL/exports.lang @@ -87,7 +87,7 @@ ErrorMissingMandatoryValue=נתוני חובה ריקים בקובץ המקור TooMuchErrors=עדיין יש %s שורות מקור אחרות עם שגיאות, אך יש בפלט היה מוגבל. TooMuchWarnings=עדיין יש %s שורות מקור אחרות עם אזהרות אבל הפלט מכיל היה מוגבל. EmptyLine=שורה ריקה (תימחק) -CorrectErrorBeforeRunningImport=אתה חייב לתקן את כל השגיאות before notranslate'>
מריץ את הייבוא הסופי. +CorrectErrorBeforeRunningImport=You must correct all errors before running the definitive import. FileWasImported=הקובץ יובא עם המספר %s. YouCanUseImportIdToFindRecord=תוכל למצוא את כל הרשומות המיובאות במסד הנתונים שלך על ידי סינון בשדה import_key='%s'. NbOfLinesOK=מספר שורות ללא שגיאות וללא אזהרות: %s. @@ -104,17 +104,17 @@ SourceExample=דוגמה לערך נתונים אפשרי ExampleAnyRefFoundIntoElement=כל רפר נמצא עבור רכיב %s ExampleAnyCodeOrIdFoundIntoDictionary=כל קוד (או מזהה) שנמצא במילון %s CSVFormatDesc=ערך מופרד בפסיק פורמט קובץ (.csv).
This הוא פורמט קובץ טקסט שבו שדות מופרדים על ידי מפריד [ %s ]. אם נמצא מפריד בתוך תוכן שדה, השדה מעוגל לפי תו עגול [ %s ]. תו בריחה לתו עגול הוא [ %s ]. -Excel95FormatDesc=Excel פורמט הקובץ (.xls)
זהו הקובץ פורמט אקסל 95 (BIFF5). +Excel95FormatDesc=Excel file format (.xls)
This is the native Excel 95 format (BIFF5). Excel2007FormatDesc=Excel פורמט הקובץ (.xlsx)
זה פורמט Excel 2007 (SpreadsheetML). -TsvFormatDesc=ערך מופרד בכרטיסיות פורמט קובץ (.tsv)
פורמט קובץ טקסט שבו שדות מופרדים על ידי טבולטור [טאב]. +TsvFormatDesc=Tab Separated Value file format (.tsv)
This is a text file format where fields are separated by a tabulator [tab]. ExportFieldAutomaticallyAdded=השדה %s נוסף אוטומטית. זה ימנע ממך להתייחס לשורות דומות כרשומה כפולה (עם הוספת שדה זה, כל השורות יהיו בעלות המזהה שלהן ויהיה שונה). CsvOptions=אפשרויות פורמט CSV Separator=מפריד שדות Enclosure=מפריד מחרוזות SpecialCode=קוד מיוחד ExportStringFilter=%% מאפשר החלפת תו אחד או יותר בטקסט -ExportDateFilter=YYYY, YYYYMM, YYYYMMDD: מסננים לפי שנה/חודש/יום
YYYY+YYYY, YYYYMM+YYYYMM, YYYYMMDD+YYYYMMDD: מסננים בטווח של שנים/יום span class='notranslate'>
> YYYY, > YYYYMM, > YYYYMMDD: מסננים בכל השנים/החודשים/הימים הבאים
< YYYYMM, < YYYY YYYYMMDD: מסננים על כל השנים/החודשים/ימים הקודמות -ExportNumericFilter=NNNNN מסנן לפי ערך אחד
NNNN+NNNNN מסנן על פני טווח של ערכים
b08910a<27ede2 /span>> NNNNN מסנן לפי ערכים גבוהים יותר +ExportDateFilter=YYYY, YYYYMM, YYYYMMDD: filters by one year/month/day
YYYY+YYYY, YYYYMM+YYYYMM, YYYYMMDD+YYYYMMDD: filters over a range of years/months/days
> YYYY, > YYYYMM, > YYYYMMDD: filters on all following years/months/days
< YYYY, < YYYYMM, < YYYYMMDD: filters on all previous years/months/days +ExportNumericFilter=NNNNN filters by one value
NNNNN+NNNNN filters over a range of values
< NNNNN filters by lower values
> NNNNN filters by higher values ImportFromLine=ייבוא החל ממספר שורה EndAtLineNb=סיים במספר שורה ImportFromToLine=הגבלת טווח (מ-עד). לְמָשָׁל. כדי להשמיט את שורת הכותרת. diff --git a/htdocs/langs/he_IL/install.lang b/htdocs/langs/he_IL/install.lang index 9feac014d76..8add21a2746 100644 --- a/htdocs/langs/he_IL/install.lang +++ b/htdocs/langs/he_IL/install.lang @@ -14,7 +14,7 @@ PHPSupportPOSTGETKo=ייתכן שהגדרת ה-PHP שלך לא תומכת במש PHPSupportSessions=PHP זה תומך בהפעלות. PHPSupport=PHP זה תומך בפונקציות %s. PHPMemoryOK=זיכרון ההפעלה המקסימלי של PHP מוגדר ל-%s. זה אמור להספיק. -PHPMemoryTooLow=זיכרון ההפעלה המקסימלי של PHP מוגדר ל-%s בתים. זה נמוך מדי. שנה את php.ini שלך כדי להגדיר את me class ='notranslate'>
פרמטר לפחות ל-%s789f739f /span> בתים. +PHPMemoryTooLow=Your PHP max session memory is set to %s bytes. This is too low. Change your php.ini to set memory_limit parameter to at least %s bytes. Recheck=לחצו כאן לבדיקה מפורטת יותר ErrorPHPDoesNotSupportSessions=התקנת ה-PHP שלך אינה תומכת בהפעלות. תכונה זו נדרשת כדי לאפשר ל-Dolibarr לעבוד. בדוק את הגדרת ה-PHP וההרשאות של ספריית הפעלות. ErrorPHPDoesNotSupport=התקנת ה-PHP שלך אינה תומכת בפונקציות %s. @@ -56,7 +56,7 @@ CreateDatabase=צור מסד נתונים CreateUser=צור חשבון משתמש או הענק הרשאת חשבון משתמש במסד הנתונים של Dolibarr DatabaseSuperUserAccess=שרת מסד נתונים - גישת Superuser CheckToCreateDatabase=סמן את התיבה אם מסד הנתונים עדיין לא קיים ולכן יש ליצור אותו.
במקרה זה, עליך גם למלא את שם המשתמש והסיסמה עבור חשבון משתמש העל בתחתית של הדף הזה. -CheckToCreateUser=סמן את התיבה אם:
חשבון המשתמש במסד הנתונים עדיין לא קיים ולכן יש ליצור אותו, או
אם חשבון המשתמש קיים אך מסד הנתונים אינו קיים ויש להעניק הרשאות.
במקרה זה, עליך להזין את חשבון המשתמש והסיסמה ו
גם שם חשבון משתמש העל והסיסמה בתחתית עמוד זה. אם תיבה זו אינה מסומנת, הבעלים והסיסמה של מסד הנתונים חייבים כבר להתקיים. +CheckToCreateUser=Check the box if:
the database user account does not yet exist and so must be created, or
if the user account exists but the database does not exist and permissions must be granted.
In this case, you must enter the user account and password and also the superuser account name and password at the bottom of this page. If this box is unchecked, database owner and password must already exist. DatabaseRootLoginDescription=שם חשבון Superuser (ליצירת מסדי נתונים חדשים או משתמשים חדשים), חובה אם מסד הנתונים או בעליו אינם קיימים כבר. KeepEmptyIfNoPassword=השאר ריק אם למשתמש-על אין סיסמה (לא מומלץ) SaveConfigurationFile=שמירת פרמטרים ל @@ -108,15 +108,15 @@ DatabaseVersion=גרסת מסד נתונים ServerVersion=גרסת שרת מסד נתונים YouMustCreateItAndAllowServerToWrite=עליך ליצור ספרייה זו ולאפשר לשרת האינטרנט לכתוב לתוכה. DBSortingCollation=סדר מיון תווים -YouAskDatabaseCreationSoDolibarrNeedToConnect=בחרת ליצור מסד נתונים %s, אבל בשביל זה, דוליבר צריך להתחבר לשרת %s עם משתמש-על %s. -YouAskLoginCreationSoDolibarrNeedToConnect=בחרת ליצור משתמש במסד נתונים %s, אבל בשביל זה, Dolibr צריך להתחבר לשרת %s עם סופר משתמש %s. +YouAskDatabaseCreationSoDolibarrNeedToConnect=You selected create database %s, but for this, Dolibarr needs to connect to server %s with super user %s permissions. +YouAskLoginCreationSoDolibarrNeedToConnect=You selected create database user %s, but for this, Dolibarr needs to connect to server %s with super user %s permissions. BecauseConnectionFailedParametersMayBeWrong=חיבור מסד הנתונים נכשל: הפרמטרים של המארח או משתמש העל חייבים להיות שגויים. OrphelinsPaymentsDetectedByMethod=תשלום יתומים זוהה בשיטה %s RemoveItManuallyAndPressF5ToContinue=הסר אותו ידנית והקש F5 כדי להמשיך. FieldRenamed=שם השדה שונה IfLoginDoesNotExistsCheckCreateUser=אם המשתמש עדיין לא קיים, עליך לסמן את האפשרות "צור משתמש" -ErrorConnection=שרת "%s", שם מסד הנתונים "%s", login "3058e'>b368e span>%s
", או שסיסמת מסד הנתונים שגויה או שגרסת לקוח PHP ישנה מדי בהשוואה לגרסת מסד הנתונים . -InstallChoiceRecommanded=בחירה מומלצת להתקנת גרסה %s מהגרסה הנוכחית שלך class='notranslate'>%s +ErrorConnection=Server "%s", database name "%s", login "%s", or database password may be wrong or the PHP client version may be too old compared to the database version. +InstallChoiceRecommanded=Recommended choice to install version %s from your current version %s InstallChoiceSuggested=בחירת ההתקנה שהוצעה על ידי המתקין. MigrateIsDoneStepByStep=לגרסה הממוקדת (%s) יש פער של מספר גרסאות. אשף ההתקנה יחזור להציע העברה נוספת לאחר השלמת זו. CheckThatDatabasenameIsCorrect=בדוק ששם מסד הנתונים "%s" נכון. diff --git a/htdocs/langs/he_IL/ldap.lang b/htdocs/langs/he_IL/ldap.lang index 7a714049e56..38b4a5f0813 100644 --- a/htdocs/langs/he_IL/ldap.lang +++ b/htdocs/langs/he_IL/ldap.lang @@ -1,5 +1,5 @@ # Dolibarr language file - Source file is en_US - ldap -YouMustChangePassNextLogon=סיסמה למשתמש %s בדומיין %s. +YouMustChangePassNextLogon=Password for user %s on the domain %s must be changed. UserMustChangePassNextLogon=על המשתמש לשנות סיסמה בדומיין %s LDAPInformationsForThisContact=מידע במסד הנתונים של LDAP עבור איש קשר זה LDAPInformationsForThisUser=מידע במסד הנתונים של LDAP עבור משתמש זה diff --git a/htdocs/langs/he_IL/mails.lang b/htdocs/langs/he_IL/mails.lang index cc48bc8f4df..96a1175f564 100644 --- a/htdocs/langs/he_IL/mails.lang +++ b/htdocs/langs/he_IL/mails.lang @@ -147,7 +147,7 @@ UseFormatFileEmailToTarget=הקובץ המיובא חייב להיות בפור UseFormatInputEmailToTarget=הזן מחרוזת בפורמט email;name;firstname;other MailAdvTargetRecipients=נמענים (בחירה מתקדמת) AdvTgtTitle=מלא שדות קלט כדי לבחור מראש את צדדים שלישיים או אנשי קשר/כתובות למיקוד -AdvTgtSearchTextHelp=השתמש ב-%% בתור תווים כלליים. לדוגמה כדי למצוא את כל הפריטים כמו jean, joe, jim, אתה יכול להזין j%%, אתה יכול גם להשתמש ; כמפריד לערך, ולהשתמש ! עבור חוץ מהערך הזה. לדוגמה jean;joe;jim%%;!jimo;!jimab07e63171f5dacz span> ימקד את כל ג'ין, ג'ו, מתחיל עם ג'ים אבל לא ג'ימו ולא כל מה שמתחיל בג'ימה +AdvTgtSearchTextHelp=Use %% as wildcards. For example to find all item like jean, joe, jim, you can input j%%, you can also use ; as separator for value, and use ! for except this value. For example jean;joe;jim%%;!jimo;!jima%% will target all jean, joe, start with jim but not jimo and not everything that starts with jima AdvTgtSearchIntHelp=השתמש במרווח כדי לבחור ערך int או float AdvTgtMinVal=ערך מינימלי AdvTgtMaxVal=ערך מקסימלי diff --git a/htdocs/langs/he_IL/main.lang b/htdocs/langs/he_IL/main.lang index 54dc5a093c1..0b16f039b5c 100644 --- a/htdocs/langs/he_IL/main.lang +++ b/htdocs/langs/he_IL/main.lang @@ -9,7 +9,7 @@ DIRECTION=ltr # cid0kr is for Korean # DejaVuSans is for some Eastern languages, some Asian languages and some Arabic languages # freemono is for ru_RU or uk_UA, uz_UZ -# freeserif is for Tamil +# freeserif is for Tamil or Ethiopian FONTFORPDF=helvetica FONTSIZEFORPDF=10 SeparatorDecimal=. @@ -68,7 +68,7 @@ ErrorNoRequestInError=אין בקשה בטעות ErrorServiceUnavailableTryLater=השירות אינו זמין כרגע. נסה שוב מאוחר יותר. ErrorDuplicateField=ערך כפול בשדה ייחודי ErrorSomeErrorWereFoundRollbackIsDone=נמצאו כמה שגיאות. השינויים הוחזרו לאחור. -ErrorConfigParameterNotDefined=הפרמטר %s אינו מוגדר בקובץ Dolibarr config class='notranslate'>
conf.php. +ErrorConfigParameterNotDefined=Parameter %s is not defined in the Dolibarr config file conf.php. ErrorCantLoadUserFromDolibarrDatabase=לא הצליח למצוא את המשתמש %s במסד הנתונים של Dolibar. ErrorNoVATRateDefinedForSellerCountry=שגיאה, לא הוגדרו שיעורי מע"מ עבור המדינה '%s'. ErrorNoSocialContributionForSellerCountry=שגיאה, לא הוגדר סוג מסים חברתיים/פיסקליים עבור המדינה '%s'. @@ -103,7 +103,7 @@ RecordDeleted=הרשומה נמחקה RecordGenerated=רשומה נוצרה LevelOfFeature=רמת תכונות NotDefined=לא מוגדר -DolibarrInHttpAuthenticationSoPasswordUseless=מצב האימות של Dolibarr מוגדר ל%s בקובץ התצורה class='notranslate'>conf.php.
זה אומר שמסד הנתונים של הסיסמאות הוא חיצוני Dolibarr, אז ייתכן שלשינוי שדה זה לא תהיה השפעה. +DolibarrInHttpAuthenticationSoPasswordUseless=Dolibarr authentication mode is set to %s in configuration file conf.php.
This means that the password database is external to Dolibarr, so changing this field may have no effect. Administrator=מנהל מערכת AdministratorDesc=מנהל מערכת (יכול לנהל משתמש, הרשאות אך גם הגדרות מערכת ותצורת מודולים) Undefined=לא מוגדר @@ -420,6 +420,8 @@ TotalTTCShort=סה"כ (כולל מס) TotalHT=סה"כ (לא כולל מס) TotalHTforthispage=סך הכל (ללא מס) עבור דף זה Totalforthispage=סך הכל עבור דף זה +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=סך הכל (כולל מס) TotalTTCToYourCredit=סך הכל (כולל מס) לזכותך TotalVAT=סך המס @@ -647,6 +649,7 @@ ReportName=שם הדוח ReportPeriod=תקופת דיווח ReportDescription=תאור Report=להגיש תלונה +Reports=Reports Keyword=מילת מפתח Origin=מָקוֹר Legend=אגדה @@ -963,6 +966,7 @@ AutomaticallyCalculated=מחושב אוטומטית TitleSetToDraft=חזור לטיוטה ConfirmSetToDraft=האם אתה בטוח שברצונך לחזור לסטטוס טיוטה? ImportId=ייבוא מזהה +Event=Event Events=אירועים EMailTemplates=תבניות אימייל FileNotShared=הקובץ לא שותף לציבור חיצוני @@ -1048,7 +1052,7 @@ Select2NotFound=לא נמצאו תוצאות Select2Enter=להיכנס Select2MoreCharacter=או יותר אופי Select2MoreCharacters=או יותר דמויות -Select2MoreCharactersMore=תחביר חיפוש:
class='notranslate
|b0860de534da6f class=' או (a|b)
b0601eczd>7a* כל תו (a*b)
b03aecd27a span>^ התחל עם (^ab)
b03aec07a60 $203d<01ec0d>b03 /span> סיים ב (ab$)
+Select2MoreCharactersMore=Search syntax:
| OR (a|b)
* Any character (a*b)
^ Start with (^ab)
$ End with (ab$)
Select2LoadingMoreResults=טוען תוצאות נוספות... Select2SearchInProgress=חיפוש מתבצע... SearchIntoThirdparties=צדדים שלישיים @@ -1180,7 +1184,6 @@ ConfirmAffectUserQuestion=האם אתה בטוח שברצונך להקצות מ ConfirmSetSupervisorQuestion=האם אתה בטוח שברצונך להגדיר מפקח ל-%s הרשומות שנבחרו? ConfirmUpdatePriceQuestion=האם אתה בטוח שברצונך לעדכן את המחיר של %s הרשומות שנבחרו? CategTypeNotFound=לא נמצא סוג תג עבור סוג הרשומות -Rate=ציון SupervisorNotFound=המפקח לא נמצא CopiedToClipboard=הועתק ללוח InformationOnLinkToContract=סכום זה הוא רק סך כל שורות החוזה. שום מושג של זמן לא נלקח בחשבון. @@ -1213,6 +1216,7 @@ CanceledHidden=בוטל מוסתר CanceledShown=בוטלה מוצגת Terminate=לבטל, לסיים Terminated=הסתיים +Position=Position AddLineOnPosition=הוסף שורה במיקום (בסוף אם ריק) ConfirmAllocateCommercial=הקצה אישור נציג מכירות ConfirmAllocateCommercialQuestion=האם אתה בטוח שברצונך להקצות את %s הרשומות שנבחרו? @@ -1230,6 +1234,7 @@ ExternalUser=משתמש חיצוני NoSpecificContactAddress=אין איש קשר או כתובת ספציפית NoSpecificContactAddressBis=כרטיסייה זו מוקדשת לאלץ אנשי קשר או כתובות ספציפיים עבור האובייקט הנוכחי. השתמש בו רק אם ברצונך להגדיר איש קשר או כתובת ספציפיים אחד או כמה עבור האובייקט כאשר המידע על הצד השלישי אינו מספיק או אינו מדויק. HideOnVCard=הסתר את %s +ShowOnVCard=Show %s AddToContacts=הוסף כתובת לאנשי הקשר שלי LastAccess=גישה אחרונה UploadAnImageToSeeAPhotoHere=העלה תמונה מהכרטיסייה %s כדי לראות תמונה כאן @@ -1259,4 +1264,7 @@ AmountSalary=סכום שכר InvoiceSubtype=תת סוג חשבונית ConfirmMassReverse=אישור הפוך בכמות גדולה ConfirmMassReverseQuestion=האם אתה בטוח שברצונך להפוך את %s הרשומות שנבחרו? - +ElementType=Element type +ElementId=Element Id +Encrypted=Encrypted +Settings=Settings diff --git a/htdocs/langs/he_IL/modulebuilder.lang b/htdocs/langs/he_IL/modulebuilder.lang index acc950c2a45..5b531befc30 100644 --- a/htdocs/langs/he_IL/modulebuilder.lang +++ b/htdocs/langs/he_IL/modulebuilder.lang @@ -94,7 +94,7 @@ SeeExamples=ראה דוגמאות כאן EnabledDesc=תנאי להפעלת שדה זה.

דוגמאות:
1
isModEnabled('anothermodule')
getDolGlobalString('MYMODULE_OPTION')==2 VisibleDesc=האם השדה נראה לעין? (דוגמאות: 0=לעולם לא נראה, 1=גלוי ברשימה וצור/עדכן/הצג טפסים, 2=גלוי ברשימה בלבד, 3=גלוי בטופס יצירה/עדכון/הצג בלבד (לא ברשימות), 4=גלוי ברשימות וטופס עדכון/הצג בלבד (לא צור), 5=גלוי ברשימה ובטופס הצג בלבד (לא צור, לא עדכון).

שימוש בערך שלילי פירושו שהשדה אינו מוצג כברירת מחדל ברשימה אך ניתן לבחור אותו לצפייה). ItCanBeAnExpression=זה יכול להיות ביטוי. דוגמה:
preg_match('/public/', $_SERVER['PHP_SELF'])?0:1
$user ->hasRight('holiday', 'define_holiday')?1:5 -DisplayOnPdfDesc=הצג שדה זה במסמכי PDF תואמים, אתה יכול לנהל מיקום עם השדה "Position".
עבור מסמך:
0 = לא מוצג
1 = display
2 = הצג רק אם לא ריק

b0e7843947 span>עבור שורות מסמך:

0 = לא מוצג
1 = מוצג בעמודה
3 = הצגת עמודת תיאור שורה אחרי התיאור
4 = תצוגה בעמודת תיאור אחרי התיאור רק אם לא ריק +DisplayOnPdfDesc=Display this field on compatible PDF documents, you can manage position with "Position" field.
For document :
0 = not displayed
1 = display
2 = display only if not empty

For document lines :
0 = not displayed
1 = displayed in a column
3 = display in line description column after the description
4 = display in description column after the description only if not empty DisplayOnPdf=ב-PDF IsAMeasureDesc=האם ניתן לצבור את הערך של השדה כדי לקבל סכום כולל לרשימה? (דוגמאות: 1 או 0) SearchAllDesc=האם השדה משמש לביצוע חיפוש מכלי החיפוש המהיר? (דוגמאות: 1 או 0) @@ -111,7 +111,7 @@ TriggerDefDesc=הגדירו בקובץ הטריגר את הקוד שברצונכ SeeIDsInUse=ראה מזהים שנמצאים בשימוש בהתקנה שלך SeeReservedIDsRangeHere=ראה מגוון תעודות זהות שמורות ToolkitForDevelopers=ערכת כלים למפתחי Dolibarr -TryToUseTheModuleBuilder=אם יש לך ידע ב-SQL ו-PHP, תוכל להשתמש באשף בניית המודולים המקורי.
הפעל את המודול %s והשתמש באשף על ידי לחיצה על בתפריט הימני העליון.
אזהרה: זוהי תכונת מפתחים מתקדמת, אל ניסוי span class='notranslate'> באתר הייצור שלך! +TryToUseTheModuleBuilder=If you have knowledge of SQL and PHP, you may use the native module builder wizard.
Enable the module %s and use the wizard by clicking the on the top right menu.
Warning: This is an advanced developer feature, do not experiment on your production site! SeeTopRightMenu=ראה בתפריט הימני העליון AddLanguageFile=הוסף קובץ שפה YouCanUseTranslationKey=אתה יכול להשתמש כאן במפתח שהוא מפתח התרגום שנמצא לקובץ השפה (ראה לשונית "שפות") @@ -148,7 +148,7 @@ CSSListClass=CSS לרשימה NotEditable=לא ניתן לעריכה ForeignKey=מפתח זר ForeignKeyDesc=אם יש להבטיח שהערך של שדה זה קיים בטבלה אחרת. הזן כאן תחביר תואם ערך: tablename.parentfieldtocheck -TypeOfFieldsHelp=דוגמה:
varchar(99)
email
phone
ip
url
סיסמהbzccdouble(24,8)
real
text
html
date
datetime
timestamp
integer
integer:ClassName:relativepath/to/classfile.class.php[:1[:filter]]b0342fccfda19b /span>
'1' פירושו שאנו מוסיפים כפתור + אחרי המשולב כדי ליצור את הרשומה
'מסנן' הוא תנאי תחביר מסנן אוניברסלי, דוגמה: '((status:=:1) AND (fk_user:=:__USER_ID__) AND (ישות:IN:(__SHARED_ENTITIES__))' +TypeOfFieldsHelp=Example:
varchar(99)
email
phone
ip
url
password
double(24,8)
real
text
html
date
datetime
timestamp
integer
integer:ClassName:relativepath/to/classfile.class.php[:1[:filter]]

'1' means we add a + button after the combo to create the record
'filter' is an Universal Filter syntax condition, example: '((status:=:1) AND (fk_user:=:__USER_ID__) AND (entity:IN:(__SHARED_ENTITIES__))' TypeOfFieldsHelpIntro=זהו סוג השדה/תכונה. AsciiToHtmlConverter=ממיר Ascii ל-HTML AsciiToPdfConverter=ממיר Ascii ל-PDF @@ -180,7 +180,7 @@ FailedToAddCodeIntoDescriptor=הוספת הקוד לתיאור נכשלה. בד DictionariesCreated=מילון %s נוצר בהצלחה DictionaryDeleted=מילון %s הוסר בהצלחה PropertyModuleUpdated=הנכס %s עודכן בהצלחה -InfoForApiFile=* כאשר אתה יוצר קובץ בפעם הראשונה, כל השיטות ייווצרו עבור כל אובייקט.
* כשאתה לוחץ ב-remove אתה פשוט מסיר את כל השיטות עבור ה-האובייקט שנבחר. +InfoForApiFile=* When you generate file for the first time then all methods will be created for each object.
* When you click in remove you just remove all methods for the selected object. SetupFile=עמוד להגדרת מודול EmailingSelectors=Emails selectors EmailingSelectorDesc=אתה יכול ליצור ולערוך כאן את קבצי הכיתה כדי לספק בוררי יעד חדשים לדוא"ל עבור מודול שליחת הדוא"ל ההמונית diff --git a/htdocs/langs/he_IL/multicurrency.lang b/htdocs/langs/he_IL/multicurrency.lang index 1d550cb8b9f..0694c8961c2 100644 --- a/htdocs/langs/he_IL/multicurrency.lang +++ b/htdocs/langs/he_IL/multicurrency.lang @@ -7,12 +7,12 @@ multicurrency_syncronize_error=שגיאת סנכרון: %s MULTICURRENCY_USE_RATE_ON_DOCUMENT_DATE=השתמש בתאריך של המסמך כדי למצוא את שער המטבע, במקום להשתמש בשער האחרון הידוע multicurrency_useOriginTx=כאשר אובייקט נוצר מאובייקט אחר, שמור את הקצב המקורי מאובייקט המקור (אחרת השתמש בקצב האחרון הידוע) CurrencyLayerAccount=CurrencyLayer API -CurrencyLayerAccount_help_to_synchronize=עליך ליצור חשבון באתר %s כדי להשתמש בפונקציונליות זו.
קבל את שלך /span>מפתח API.
אם אתה משתמש בחשבון חינמי, לא תוכל לשנות את ה-מטבע המקור (דולר ארה"ב כברירת מחדל).
אם המטבע הראשי שלך אינו דולר ארה"ב, היישום יחשב אותו מחדש באופן אוטומטי.

אתה מוגבל ל-1000 סנכרון בחודש. +CurrencyLayerAccount_help_to_synchronize=You must create an account on website %s to use this functionality.
Get your API key.
If you use a free account, you can't change the source currency (USD by default).
If your main currency is not USD, the application will automatically recalculate it.

You are limited to 1000 synchronizations per month. multicurrency_appId=מפתח API multicurrency_appCurrencySource=מטבע המקור multicurrency_alternateCurrencySource=מטבע מקור חלופי CurrenciesUsed=השתמשו במטבעות -CurrenciesUsed_help_to_add=הוסף את המטבעות והשערים השונים שבהם אתה צריך להשתמש בהצעות , b0aee83365הזמנות
וכו'. +CurrenciesUsed_help_to_add=Add the different currencies and rates you need to use on your proposals, orders etc. rate=ציון MulticurrencyReceived=התקבל, מטבע מקורי MulticurrencyRemainderToTake=הסכום הנותר, המטבע המקורי diff --git a/htdocs/langs/he_IL/other.lang b/htdocs/langs/he_IL/other.lang index e0560fc6164..6287d70c38f 100644 --- a/htdocs/langs/he_IL/other.lang +++ b/htdocs/langs/he_IL/other.lang @@ -189,7 +189,7 @@ EnterNewPasswordHere=הזן את הסיסמה החדשה שלך כאן BackToLoginPage=חזרה לדף הכניסה AuthenticationDoesNotAllowSendNewPassword=מצב האימות הוא %s.b09a17f8z.b09a17b>. +ProfIdShortDesc=Prof Id %s is an information depending on third party country.
For example, for country %s, it's code %s. DolibarrDemo=הדגמה של Dolibarr ERP/CRM StatsByAmount=סטטיסטיקה על כמות מוצרים/שירותים StatsByAmountProducts=סטטיסטיקה על כמות המוצרים @@ -336,3 +336,5 @@ FTPFailedToUploadFile=העלאת הקובץ %s נכשלה. AddFolder=צור תיקיה FileWasCreateFolder=התיקיה %s נוצרה FTPFailedToCreateFolder=יצירת התיקייה %s נכשלה. +SelectADay=Select a day in calendar +SelectANewDate=Select a new date diff --git a/htdocs/langs/he_IL/paypal.lang b/htdocs/langs/he_IL/paypal.lang index 86d5961c1e2..f80a0e9e746 100644 --- a/htdocs/langs/he_IL/paypal.lang +++ b/htdocs/langs/he_IL/paypal.lang @@ -34,4 +34,4 @@ ARollbackWasPerformedOnPostActions=בוצעה החזרה לאחור על כל פ ValidationOfPaymentFailed=אימות התשלום נכשל CardOwner=בעל כרטיס PayPalBalance=אשראי Paypal -OnlineSubscriptionPaymentLine=מנוי מקוון נרשם ב-%s
בתשלום באמצעות %s
כתובת ה-IP המקורית: %s
מזהה עסקה: +OnlineSubscriptionPaymentLine=Online subscription recorded on %s
Paid via %s
Originating IP address: %s
Transaction ID: %s diff --git a/htdocs/langs/he_IL/products.lang b/htdocs/langs/he_IL/products.lang index e458d0b7850..9713df556ec 100644 --- a/htdocs/langs/he_IL/products.lang +++ b/htdocs/langs/he_IL/products.lang @@ -208,11 +208,6 @@ unitSET=מַעֲרֶכֶת unitS=שְׁנִיָה unitH=שָׁעָה unitD=יְוֹם -unitG=גְרַם -unitM=מטר -unitLM=מטר ליניארי -unitM2=מטר מרובע -unitM3=מטר מרובע unitL=לִיטר unitT=טוֹן unitKG=ק"ג @@ -221,6 +216,7 @@ unitMG=מ"ג unitLB=לִירָה unitOZ=אוּנְקִיָה unitM=מטר +unitLM=מטר ליניארי unitDM=dm unitCM=ס"מ unitMM=מ"מ @@ -289,9 +285,9 @@ MinimumRecommendedPrice=מחיר מינימלי מומלץ הוא: %s PriceExpressionEditor=עורך ביטוי מחיר PriceExpressionSelected=ביטוי מחיר נבחר PriceExpressionEditorHelp1="מחיר = 2 + 2" או "2 + 2" להגדרת המחיר. להשתמש ; להפריד בין ביטויים -PriceExpressionEditorHelp2=אתה יכול לגשת ל-ExtraFields עם משתנים כמו #extrafield_myextrafieldkey# ומשתנים גלובליים עם 7360e8b0736e8b07 /span>#global_mycode# +PriceExpressionEditorHelp2=You can access ExtraFields with variables like #extrafield_myextrafieldkey# and global variables with #global_mycode# PriceExpressionEditorHelp3=גם במחירי המוצר/שירות וגם במחירי הספקים ישנם משתנים זמינים:
#tva_tx# #localtax1_tx# #localtax2_tx# weight# #length# #surface# #price_min# -PriceExpressionEditorHelp4=במחיר המוצר/שירות בלבד: #supplier_min_price#b0342fccfda19b#supplier_quantity# ו-#supplier_tva_tx# +PriceExpressionEditorHelp4=In product/service price only: #supplier_min_price#
In vendor prices only: #supplier_quantity# and #supplier_tva_tx# PriceExpressionEditorHelp5=ערכים גלובליים זמינים: PriceMode=מצב מחיר PriceNumeric=מספר @@ -437,4 +433,6 @@ ModifyValueExtrafields = שנה ערך של שדה נוסף OrProductsWithCategories=או מוצרים עם תגיות/קטגוריות WarningTransferBatchStockMouvToGlobal = אם ברצונך להפוך את המוצר הזה לסידריאליזציה, כל המלאי המסודר שלו יהפוך למלאי גלובלי WarningConvertFromBatchToSerial=אם יש לך כרגע כמות גבוהה או שווה ל-2 עבור המוצר, מעבר לבחירה זו אומר שעדיין יהיה לך מוצר עם אובייקטים שונים מאותה אצווה (בעוד שאתה רוצה מספר סידורי ייחודי). השכפול יישאר עד לביצוע מלאי או תנועת מלאי ידנית לתיקון זה. +AllowStockMovementVariantParent=Also records stock movements on parent products of variant products +AllowStockMovementVariantParentHelp=By default, a parent of a variant is a virtual product, so no stock is managed for it. By enabling this option, a stock will be managed for parent products and each time a stock quantity is modified for a variant product, the same quantity will be modified for the parent product. You should not need this option, except if you are using variant to manage the same product than parent (but with different descriptions, prices...) ConfirmSetToDraftInventory=האם אתה בטוח שברצונך לחזור למצב טיוטה?
הכמויות המוגדרות כעת במלאי יאופסו. diff --git a/htdocs/langs/he_IL/stocks.lang b/htdocs/langs/he_IL/stocks.lang index 35311e83d63..f4df2ff4ccb 100644 --- a/htdocs/langs/he_IL/stocks.lang +++ b/htdocs/langs/he_IL/stocks.lang @@ -164,14 +164,14 @@ InventoryCode=קוד תנועה או מלאי IsInPackage=כלול בחבילה WarehouseAllowNegativeTransfer=מלאי יכול להיות שלילי qtyToTranferIsNotEnough=אין לך מספיק מלאי ממחסן המקור שלך וההגדרה שלך לא מאפשרת מלאי שלילי. -qtyToTranferLotIsNotEnough=אין לך מספיק מלאי, עבור מספר מגרש זה, ממחסן המקור שלך וההגדרה שלך לא מאפשרת מלאי שלילי (כמות עבור מוצר '%s' עם מגרש '%s' הוא %s במחסן '%s'). +qtyToTranferLotIsNotEnough=You don't have enough stock, for this lot number, from your source warehouse and your setup does not allow negative stocks (Qty for product '%s' with lot '%s' is %s in warehouse '%s'). ShowWarehouse=הצג מחסן MovementCorrectStock=תיקון מלאי עבור מוצר %s MovementTransferStock=העברת מלאי של מוצר %s למחסן אחר BatchStockMouvementAddInGlobal=מלאי אצווה עובר למלאי גלובלי (המוצר לא משתמש יותר באצווה) InventoryCodeShort=Inv./Mov. קוד NoPendingReceptionOnSupplierOrder=אין קבלה בהמתנה עקב הזמנת רכש פתוחה -ThisSerialAlreadyExistWithDifferentDate=מגרש/מספר סידורי זה (%s) כבר קיים אבל עם תאריך אחר לאכול עד או למכור (נמצא %s < אבל אתה מזין span class='notranslate'>
%s). +ThisSerialAlreadyExistWithDifferentDate=This lot/serial number (%s) already exists but with different eatby or sellby date (found %s but you enter %s). OpenAnyMovement=פתוח (כל תנועה) OpenInternal=פתוח (רק תנועה פנימית) UseDispatchStatus=השתמש בסטטוס שליחה (אישור/סירוב) עבור קווי מוצרים בקבלת הזמנת רכש diff --git a/htdocs/langs/he_IL/stripe.lang b/htdocs/langs/he_IL/stripe.lang index 0e935f5d90b..7a00246cf80 100644 --- a/htdocs/langs/he_IL/stripe.lang +++ b/htdocs/langs/he_IL/stripe.lang @@ -22,7 +22,7 @@ ToOfferALinkForOnlinePaymentOnContractLine=כתובת אתר להציע %s דף ToOfferALinkForOnlinePaymentOnFreeAmount=כתובת אתר להציע %s דף תשלום מקוון בכל סכום ללא אובייקט קיים ToOfferALinkForOnlinePaymentOnMemberSubscription=כתובת אתר להציע %s דף תשלום מקוון עבור מנוי חבר ToOfferALinkForOnlinePaymentOnDonation=כתובת אתר להציע %s דף תשלום מקוון לתשלום תרומה -YouCanAddTagOnUrl=אתה יכול גם להוסיף פרמטר url &tag=value לכל אחת מכתובות ה-URL הללו (חובה רק עבור תשלום שאינו מקושר לאובייקט) כדי להוסיף תג משלך לתשלום.
עבור כתובת האתר של תשלומים ללא אובייקט קיים, תוכל גם להוסיף את הפרמטר &noidempotency=1 אז אותו קישור עם אותו תג ניתן להשתמש מספר פעמים (מצב תשלום מסוים עשוי להגביל את התשלום ל-1 עבור כל קישור אחר ללא פרמטר זה) +YouCanAddTagOnUrl=You can also add url parameter &tag=value to any of those URL (mandatory only for payment not linked to an object) to add your own payment comment tag.
For the URL of payments with no existing object, you may also add the parameter &noidempotency=1 so the same link with same tag can be used several times (some payment mode may limit the payment to 1 for each different link without this parameter) SetupStripeToHavePaymentCreatedAutomatically=הגדר את ה-Stripe שלך עם כתובת האתר %s כדי ליצור את התשלום באופן אוטומטי מאומת על ידי Stripe. AccountParameter=פרמטרים של חשבון UsageParameter=פרמטרי שימוש diff --git a/htdocs/langs/he_IL/trips.lang b/htdocs/langs/he_IL/trips.lang index 432376a99cd..e52093bd13c 100644 --- a/htdocs/langs/he_IL/trips.lang +++ b/htdocs/langs/he_IL/trips.lang @@ -68,9 +68,9 @@ ExpenseReportRuleErrorOnSave=שגיאה: %s ExpenseReportRuleSave=כלל דוח ההוצאות נשמר ExpenseReportRulesDesc=ניתן להגדיר כללי סכום מקסימלי עבור דוחות הוצאות. כללים אלה יחולו כאשר הוצאה חדשה תתווסף לדוח הוצאות ExpenseReportWaitingForApproval=דו"ח הוצאות חדש הוגש לאישור -ExpenseReportWaitingForApprovalMessage=דוח הוצאות חדש הוגש והוא ממתין לאישור.
- משתמש: %s
- תקופה: %s
לחץ כאן כדי לאמת: b0ecfda19bz8 span> +ExpenseReportWaitingForApprovalMessage=A new expense report has been submitted and is waiting for approval.
- User: %s
- Period: %s
Click here to validate: %s ExpenseReportWaitingForReApproval=דו"ח הוצאות הוגש לאישור מחדש -ExpenseReportWaitingForReApprovalMessage=דוח הוצאות הוגש והוא ממתין לאישור מחדש.
את %s, סירבת לאשר את דוח ההוצאות עבור סיבה זו: %s.
גרסה חדשה הוצעה ומחכה לאישורך.
- משתמש: %s
- תקופה: b0ecb2ec87f49
לחץ כאן כדי לאמת: %s +ExpenseReportWaitingForReApprovalMessage=An expense report has been submitted and is waiting for re-approval.
The %s, you refused to approve the expense report for this reason: %s.
A new version has been proposed and waiting for your approval.
- User: %s
- Period: %s
Click here to validate: %s ExpenseReportsIk=הגדרת דמי קילומטראז' ExpenseReportsRules=כללי דוח הוצאות ExpenseReportsToApprove=דוחות הוצאות לאישור diff --git a/htdocs/langs/he_IL/users.lang b/htdocs/langs/he_IL/users.lang index ebc9caac864..54f82ecbf1b 100644 --- a/htdocs/langs/he_IL/users.lang +++ b/htdocs/langs/he_IL/users.lang @@ -72,7 +72,7 @@ ExportDataset_user_1=משתמשים והמאפיינים שלהם DomainUser=משתמש דומיין %s Reactivate=הפעל מחדש CreateInternalUserDesc=טופס זה מאפשר לך ליצור משתמש פנימי בחברה/ארגון שלך. כדי ליצור משתמש חיצוני (לקוח, ספק וכו'...), השתמש בלחצן 'צור משתמש Dolibarr' מכרטיס הקשר של אותו צד שלישי. -InternalExternalDesc=משתמש פנימי הוא משתמש שהוא חלק מהחברה/ארגון שלך, או שהוא משתמש שותף מחוץ לארגון שלך שאולי יצטרך לראות יותר נתונים מאשר נתונים הקשורים לחברה שלו (מערכת ההרשאות תגדיר מה הוא יכול או לא יכול לראות או לעשות).
An external הוא לקוח, ספק או אחר שחייב להציג רק נתונים הקשורים לעצמו (יצירת משתמש חיצוני עבור צד שלישי יכולה להיות נעשה מתוך רשומת אנשי הקשר של הצד השלישי).

בשני המקרים, עליך להעניק הרשאות לתכונות הצורך של המשתמש. +InternalExternalDesc=An internal user is a user that is part of your company/organization, or is a partner user outside of your organization that may need to see more data than data related to his company (the permission system will define what he can or can't see or do).
An external user is a customer, vendor or other that must view ONLY data related to himself (Creating an external user for a third-party can be done from the contact record of the third-party).

In both cases, you must grant permissions on the features that the user need. PermissionInheritedFromAGroup=הרשאה ניתנה בגלל בירושה מאחד מקבוצת המשתמש. Inherited=ירש UserWillBe=המשתמש שנוצר יהיה diff --git a/htdocs/langs/he_IL/website.lang b/htdocs/langs/he_IL/website.lang index d7b772ddc6b..d6baed95ad4 100644 --- a/htdocs/langs/he_IL/website.lang +++ b/htdocs/langs/he_IL/website.lang @@ -54,7 +54,7 @@ ReadPerm=לקרוא WritePerm=לִכתוֹב TestDeployOnWeb=בדיקה/פריסה באינטרנט PreviewSiteServedByWebServer=תצוגה מקדימה של %s בכרטיסייה חדשה.

ה-%s יוגש על ידי שרת אינטרנט חיצוני (כמו Apache, Nginx, IIS ). עליך להתקין ולהגדיר את השרת הזה לפני כדי להצביע על הספרייה:
%s span>
כתובת אתר מוגשת על ידי שרת חיצוני:
%s -PreviewSiteServedByDolibarr=תצוגה מקדימה של %s בכרטיסייה חדשה.

ה-%s יוגש על ידי שרת Dolibarr כך שהוא לא צריך שום שרת אינטרנט נוסף (כמו Apache, Nginx, IIS) להתקנה.
הבלתי נוח הוא שכתובות האתרים של הדפים אינן ידידותיות למשתמש ומתחילות בנתיב של Dolibarr שלך.
כתובת אתר מוגשת על ידי Dolibarr:


You can make a redirect to another Page/Container with the following syntax (Note: do not output any content before a redirect):
<?php redirectToContainer('alias_of_container_to_redirect_to'); ?>

To add a link to another page, use the syntax:
<a href="alias_of_page_to_link_to.php">mylink<a>

To include a link to download a file stored into the documents directory, use the document.php wrapper:
Example, for a file into documents/ecm (need to be logged), syntax is:
<a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext">
For a file into documents/medias (open directory for public access), syntax is:
<a href="/document.php?modulepart=medias&file=[relative_dir/]filename.ext">
For a file shared with a share link (open access using the sharing hash key of file), syntax is:
<a href="/document.php?hashp=publicsharekeyoffile">
YouCanEditHtmlSource1=
To include an image stored into the documents directory, use the viewimage.php wrapper.
Example, for an image into documents/medias (open directory for public access), syntax is:
<img src="/viewimage.php?modulepart=medias&file=[relative_dir/]filename.ext">
YouCanEditHtmlSource2=עבור תמונה ששותפה עם קישור שיתוף (גישה פתוחה באמצעות מפתח ה-hash השיתוף של הקובץ), התחביר הוא:
<img src="/viewimage.php?hashp=12345679012...">070fcd9b
-YouCanEditHtmlSource3=כדי לקבל את כתובת האתר של התמונה של אובייקט PHP, השתמש ב
< span>img src="<?php print getImagePublicURLOfObject($object, 1, "_small") ?>" class='notranslate'>>
-YouCanEditHtmlSourceMore=
דוגמאות נוספות של HTML או קוד דינמי זמינות בתיעוד הוויקי >.
+YouCanEditHtmlSource3=To get the URL of the image of a PHP object, use
<img src="<?php print getImagePublicURLOfObject($object, 1, "_small") ?>">
+YouCanEditHtmlSourceMore=
More examples of HTML or dynamic code available on the wiki documentation.
ClonePage=שיבוט דף/מיכל CloneSite=אתר שיבוט SiteAdded=האתר נוסף diff --git a/htdocs/langs/hr_HR/admin.lang b/htdocs/langs/hr_HR/admin.lang index 27bcb2cf1d1..c0c789a96c5 100644 --- a/htdocs/langs/hr_HR/admin.lang +++ b/htdocs/langs/hr_HR/admin.lang @@ -76,7 +76,7 @@ DictionarySetup=Podešavanje definicija Dictionary=Definicije ErrorReservedTypeSystemSystemAuto=Vrijednosti 'sistem' i 'sistemauto' za tipove je rezervirana. Možete koristiti 'korisnik' kao vrijednost za dodavanje vlastitog podatka ErrorCodeCantContainZero=Kod ne može sadržavati vrijednost 0 -DisableJavascript=Onemogući JavaScript i AJAX funkcije +DisableJavascript=Onemogući JavaScript i AJAX funkcije DisableJavascriptNote=Napomena: Samo u svrhu testiranja ili otklanjanja pogrešaka. Za optimizaciju za slijepe osobe ili tekstualne preglednike, možda ćete radije koristiti postavke na profilu korisnika UseSearchToSelectCompanyTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant COMPANY_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string. UseSearchToSelectContactTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant CONTACT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string. @@ -213,7 +213,7 @@ BoxesDesc=Widgeti su komponente koje prikazuju neke informacije koje možete dod OnlyActiveElementsAreShown=Prikazani su samo elementi sa omogućenih modula ModulesDesc=Moduli/aplikacije određuju koje su značajke dostupne u softveru. Neki moduli zahtijevaju da se dozvole dodijele korisnicima nakon aktivacije modula. Kliknite gumb za uključivanje/isključivanje %s svakog modula kako biste omogućili ili onemogućili modul/aplikaciju. ModulesDesc2=Kliknite gumb kotačića %s da biste konfigurirali modul/aplikaciju. -ModulesMarketPlaceDesc=Možete pronaći više modula za download na vanjskim internet web lokacijama +ModulesMarketPlaceDesc=Možete pronaći više modula za download na vanjskim internet web lokacijama ModulesDeployDesc=Ako dozvole na vašem datotečnom sustavu to dopuštaju, možete koristiti ovaj alat za implementaciju vanjskog modula. Modul će tada biti vidljiv na kartici %s . ModulesMarketPlaces=Nađi vanjske aplikacije/module ModulesDevelopYourModule=Razvijte vlastitu aplikaciju/module @@ -260,7 +260,7 @@ Developpers=Kreatori/suradnici OfficialWebSite=Dolibarr službena web stranica OfficialWebSiteLocal=Lokalna web lokacija (%s) OfficialWiki=Dolibarr dokumentacija / Wiki -OfficialDemo=Dolibarr Online demo +OfficialDemo=Dolibarr Online demo OfficialMarketPlace=Ovlaštena trgovina za vanjske module/dodatke OfficialWebHostingService=Preporučeni web hosting servisi (Cloud hosting) ReferencedPreferredPartners=Preferirani partneri @@ -402,7 +402,7 @@ TestSubmitForm=Unesite obrazac testiranja ThisForceAlsoTheme=Korištenje ovog upravitelja izbornika također će koristiti vlastitu temu bez obzira na odabir korisnika. Također ovaj upravitelj izbornika specijaliziran za pametne telefone ne radi na svim pametnim telefonima. Koristite drugi upravitelj izbornika ako imate problema sa svojim. ThemeDir=Mapa stilova ConnectionTimeout=Vrijeme povezanosti je isteklo -ResponseTimeout=Odgovor +ResponseTimeout=Odgovor SmsTestMessage=Test poruka od __PHONEFROM__ za __PHONETO__ ModuleMustBeEnabledFirst=Modul %s mora biti omogućen ako želite koristiti ovu mogučnost. SecurityToken=Ključ za sigurne URL-ove @@ -766,7 +766,7 @@ Permission84=Ovjeri narudžbu kupca Permission85=Generirajte dokumente prodajnih naloga Permission86=Pošalji narudžbu kupca Permission87=Zatvori narudžbu kupca -Permission88=Otkaži potvrdu +Permission88=Otkaži potvrdu Permission89=Obriši narudžbe kupaca Permission91=Čitaj društvene ili fiskalne poreze i PDV Permission92=Izradi/izmjeni društvene ili fiskalne poreze i PDV @@ -1197,6 +1197,7 @@ Skin=Skin teme DefaultSkin=Zadani skin teme MaxSizeList=Maks. dužina za popis DefaultMaxSizeList=Zadana maks. dužina popisa +DisplayGrandTotalInList=Display grand total (for all pages) in lists footer DefaultMaxSizeShortList=Zadana maksimalna duljina za kratke liste (tj. u kartici korisnika) MessageOfDay=Poruka dana MessageLogin=Poruka na stranici za prijavu @@ -1777,7 +1778,7 @@ DeliveriesOrderAbility=Potvrde o isporuci proizvoda FreeLegalTextOnDeliveryReceipts=Slobodan unos teksta na primkama ##### FCKeditor ##### AdvancedEditor=Napredni uređivač -ActivateFCKeditor=Aktiviraj napredni uređivač za: +ActivateFCKeditor=Aktiviraj napredni uređivač za: FCKeditorForNotePublic=WYSIWYG kreiranje/izdanje polja "javne bilješke" elemenata FCKeditorForNotePrivate=WYSIWYG kreiranje/izdanje polja "privatne bilješke" elemenata FCKeditorForCompany=WYSIWYG izrada/izdanje polja opisa elemenata (osim proizvoda/usluga) @@ -1860,7 +1861,7 @@ PastDelayVCalExport=Ne izvoziti događaj stariji od SecurityKey = Sigurnosni ključ ##### ClickToDial ##### ClickToDialSetup=Podešavanje modula ClickToDial -ClickToDialUrlDesc=URL koji se poziva kada se izvrši klik na sliku telefona. U URL-u možete koristiti oznake
__PHONETO__ koje će biti zamijenjen telefonskim brojem osobe koju treba nazvati
__PHONEFROM__ koji bit će zamijenjen telefonskim brojem osobe koja zove (vaš)
__LOGIN__
koja će biti zamijenjena prijavom za biranje klika (definirana na korisničkoj kartici)
__PASS__ koja će biti zamijenjena lozinkom clicktodial (definirana na korisničkoj kartici). +ClickToDialUrlDesc=URL called when a click on phone picto is done. In URL, you can use tags
__PHONETO__ that will be replaced with the phone number of person to call
__PHONEFROM__ that will be replaced with phone number of calling person (yours)
__LOGIN__ that will be replaced with clicktodial login (defined on user card)
__PASS__ that will be replaced with clicktodial password (defined on user card). ClickToDialDesc=Ovaj modul mijenja telefonske brojeve, kada koristite stolno računalo, u veze na koje se može kliknuti. Klik će pozvati broj. Ovo se može koristiti za pokretanje telefonskog poziva kada koristite soft telefon na vašem stolnom računalu ili kada koristite CTI sustav koji se temelji na SIP protokolu, na primjer. Napomena: Kada koristite pametni telefon, telefonske brojeve uvijek možete kliknuti. ClickToDialUseTelLink=Koristi samo "tel:" kod telefona ClickToDialUseTelLinkDesc=Upotrijebite ovu metodu ako vaši korisnici imaju softphone ili softversko sučelje, instalirano na istom računalu kao i preglednik, i koji se poziva kada kliknete na vezu koja počinje s "tel:" u vaš preglednik. Ako trebate vezu koja počinje s "sip:" ili potpuno poslužiteljsko rješenje (nema potrebe za lokalnom instalacijom softvera), ovo morate postaviti na "Ne" i ispunite sljedeće polje. @@ -2161,7 +2162,7 @@ NoNewEmailToProcess=Nema nove e-pošte (odgovarajući filteri) za obradu NothingProcessed=Ništa nije učinjeno RecordEvent=Zabilježite događaj u dnevnom redu (s vrstom Email poslana ili primljena) CreateLeadAndThirdParty=izradi potencijalni klijent (i treća strana ako je potrebno) -CreateTicketAndThirdParty=izradi ulaznica (povezana s trećom stranom ako je treća strana učitana prethodnom operacijom ili je pogodena iz programa za praćenje u e-pošta zaglavlje, inače bez treće strane) +CreateTicketAndThirdParty=Create a ticket (linked to a third party if the third party was loaded by a previous operation or was guessed from a tracker in email header, without third party otherwise) CodeLastResult=Najnoviji kod rezultata NbOfEmailsInInbox=Broj e-poruka u izvornom direktoriju LoadThirdPartyFromName=Učitaj traženje treće strane na %s (samo učitavanje) @@ -2176,7 +2177,7 @@ CreateCandidature=Napravite prijavu za posao FormatZip=PBR MainMenuCode=Kôd za unos izbornika (glavni izbornik) ECMAutoTree=Prikaži automatsko ECM stablo -OperationParamDesc=Definirajte pravila koja će se koristiti za izdvajanje nekih podataka ili postavite vrijednosti za upotrebu za operaciju.

Primjer za izdvajanje tvrtka naziv iz e-pošta subjekta u privremenu varijablu:
tmp_var=EXTRACT:SUBJECT: Poruka od tvrtka ([^\n]*)

Primjeri za postavljanje svojstava objekta na izradi:
objproperty1=SET:tvrdo kodirana vrijednost
objproperty2=SET:__tmp_var__
objproperty3=SETIFEMPTY:vrijednost (vrijednost je postavljena samo ako svojstvo nije već definirano)
objproperty4=EXTRACT:HEADER:X-Myheaderkey:\\s*([ ^\\s]*)
options_myextrafield1=EXTRACT:SUBJECT:([^\n]*)
objekt .objproperty5=EXTRACT:BODY:Moje tvrtka ime je\\s([^\\s]*)

Upotrijebite novi redak za izdvajanje ili postavljanje nekoliko svojstava. +OperationParamDesc=Define the rules to use to extract some data or set values to use for operation.

Example to extract a company name from email subject into a temporary variable:
tmp_var=EXTRACT:SUBJECT:Message from company ([^\n]*)

Examples to set the properties of an object to create:
objproperty1=SET:a hard coded value
objproperty2=SET:__tmp_var__
objproperty3=SETIFEMPTY:a value (value is set only if property is not already defined)
objproperty4=EXTRACT:HEADER:X-Myheaderkey:\\s*([^\\s]*)
options_myextrafield1=EXTRACT:SUBJECT:([^\n]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a new line to extract or set several properties. OpeningHours=Radno vrijeme OpeningHoursDesc=Ovdje unesite redovno radno vrijeme Vaše tvrtke. ResourceSetup=Konfiguracija modula resursa @@ -2219,7 +2220,7 @@ ImportSetup=Postavljanje uvoza modula InstanceUniqueID=Jedinstveni ID instance SmallerThan=Manje od LargerThan=Veće od -IfTrackingIDFoundEventWillBeLinked=Imajte na umu da ako se ID praćenja objekta pronađe u e-pošta ili ako je e-pošta odgovor e-pošta već prikupljeni i povezan s objektom, stvoreni događaj automatski će se povezati s poznatim povezanim objektom. +IfTrackingIDFoundEventWillBeLinked=Note that If a tracking ID of an object is found into email, or if the email is an answer of an email already collected and linked to an object, the created event will be automatically linked to the known related object. WithGMailYouCanCreateADedicatedPassword=S GMail računom, ako ste omogućili provjeru valjanosti u 2 koraka, preporučuje se izradi namjenska druga lozinka za aplikaciju umjesto korištenja vlastite lozinke računa s https://myaccount .google.com/. EmailCollectorTargetDir=Možda bi bilo poželjno premjestiti e-pošta u drugi oznaka/direktorij nakon što je uspješno obrađen. Ovdje samo postavite ime direktorija da biste koristili ovu značajku (NEMOJTE koristiti posebne znakove u imenu). Imajte na umu da također morate koristiti račun za prijavu za čitanje/pisanje. EmailCollectorLoadThirdPartyHelp=Ovu radnju možete upotrijebiti za korištenje sadržaja e-pošta za pronalaženje i učitavanja postojeće treće strane u vašoj bazi podataka (pretražit će se na definiranom svojstvu između 'id','name','name_alias','e-pošta'). Pronađena (ili stvorena) treća strana koristit će se za sljedeće radnje koje to trebaju.
Na primjer, ako želite izradi treća strana s imenom izdvojenim iz niza 'Ime: ime za pronalaženje' prisutna u tijelu, koristite pošiljatelja e-pošta kao e-pošta, polje parametra možete postaviti ovako:
'e-pošta=HEADER:^From:(.*) ;name=EXTRACT:BODY:Name:\\s([^\\s]*);client=SET:2;'
@@ -2433,3 +2434,12 @@ UrlPublicInterfaceHelpAdmin=It is possible to define an alias to the web server ExportUseForce=Use the parameter -f ExportUseForceHelp=Force to continue the export even when an error is found (Backup may not be reliable) CustomPrompt=Custom prompts +AiDescription=AI (Artificial Intelligence) features +AiDescriptionLong=Provides AI (Artificial Intelligence) features in different part of the application. Need external AI API. +AI_KEY_API_CHATGPT= Key for ChatGPT IA api +AiSetup=AI module setup +AiCustomPrompt=AI customs prompt +AI_CONFIGURATIONS_PROMPT=Custom prompt +ImageGeneration=Image generation +AIPromptForFeatures=AI custom prompts for features +EnterAnIP=Enter an IP address diff --git a/htdocs/langs/hr_HR/cashdesk.lang b/htdocs/langs/hr_HR/cashdesk.lang index ae1a1be1270..ac9c4bd7086 100644 --- a/htdocs/langs/hr_HR/cashdesk.lang +++ b/htdocs/langs/hr_HR/cashdesk.lang @@ -97,7 +97,7 @@ ReceiptPrinterMethodDescription=Snažna metoda s puno parametara. Potpuno prilag ByTerminal=Po terminalu TakeposNumpadUsePaymentIcon=Koristite ikonu umjesto teksta na gumbima za plaćanje numeričke tipkovnice CashDeskRefNumberingModules=Modul numeracije za POS prodaju -CashDeskGenericMaskCodes6 =
{TN}
oznaka koristi se za dodavanje broja terminala +CashDeskGenericMaskCodes6 =
{TN} tag is used to add the terminal number TakeposGroupSameProduct=Merge lines of the same products StartAParallelSale=Započnite novu paralelnu prodaju SaleStartedAt=Prodaja je počela u %s diff --git a/htdocs/langs/hr_HR/errors.lang b/htdocs/langs/hr_HR/errors.lang index cd3b373dde4..e3b1941bbf4 100644 --- a/htdocs/langs/hr_HR/errors.lang +++ b/htdocs/langs/hr_HR/errors.lang @@ -114,7 +114,7 @@ ErrorMaxNumberReachForThisMask=Dosegnut je najveći broj za ovu masku ErrorCounterMustHaveMoreThan3Digits=Brojač mora imati više od 3 znamenke ErrorSelectAtLeastOne=Pogreška, odaberite barem jedan unos. ErrorDeleteNotPossibleLineIsConsolidated=Brisanje nije moguće jer je zapis povezan s bankovnom transakcijom koja je usklađena -ErrorProdIdAlreadyExist=%s je dodjeljen to drugom +ErrorProdIdAlreadyExist=%s je dodjeljen to drugom ErrorFailedToSendPassword=Slanje lozinke nije uspjelo ErrorFailedToLoadRSSFile=Ne uspijeva dobiti RSS feed. Pokušajte dodati konstantu MAIN_SIMPLEXMLLOAD_DEBUG ako poruke o grešci ne pružaju dovoljno informacija. ErrorForbidden=Pristup odbijen.
Pokušavate pristupiti stranici, području ili značajki onemogućenog modula ili bez da ste u autentificiranoj sesiji ili to nije dopušteno vašem korisniku. @@ -349,7 +349,7 @@ WarningCloseAlways=Upozorenje, zatvaranje se vrši čak i ako se iznos razlikuje WarningUsingThisBoxSlowDown=Upozorenje, korištenje ovog okvira ozbiljno usporava sve stranice koje prikazuju okvir. WarningClickToDialUserSetupNotComplete=Postavljanje ClickToDial informacija za vašeg korisnika nije dovršeno (pogledajte karticu ClickToDial na vašoj korisničkoj kartici). WarningFeatureDisabledWithDisplayOptimizedForBlindNoJs=Značajka je onemogućena kada je postavka zaslona optimizirana za slijepe osobe ili tekstualne preglednike. -WarningPaymentDateLowerThanInvoiceDate=Datum plaćanja (%s) je raniji od datuma fakture (%s) za fakturu %s. +WarningPaymentDateLowerThanInvoiceDate=Payment date (%s) is earlier than invoice date (%s) for invoice %s. WarningTooManyDataPleaseUseMoreFilters=Previše podataka (više od %s redaka). Upotrijebite više filtara ili postavite konstantu %s na višu granicu. WarningSomeLinesWithNullHourlyRate=Neki su korisnici zabilježili neka vremena, a njihova satnica nije bila definirana. Korištena je vrijednost od 0 %s po satu, ali to može dovesti do pogrešnog vrednovanja utrošenog vremena. WarningYourLoginWasModifiedPleaseLogin=Vaša prijava je promijenjena. Iz sigurnosnih razloga morat ćete se prijaviti sa svojom novom prijavom prije sljedeće radnje. diff --git a/htdocs/langs/hr_HR/mails.lang b/htdocs/langs/hr_HR/mails.lang index 41dd2155944..df4f482aec1 100644 --- a/htdocs/langs/hr_HR/mails.lang +++ b/htdocs/langs/hr_HR/mails.lang @@ -147,7 +147,7 @@ UseFormatFileEmailToTarget=Uvezena datoteka mora imati format email;name UseFormatInputEmailToTarget=Unesite niz u formatu email;name;firstname;other MailAdvTargetRecipients=Primatelji (napredni odabir) AdvTgtTitle=Ispunite polja za unos kako biste unaprijed odabrali treće strane ili kontakte/adrese za ciljanje -AdvTgtSearchTextHelp=Koristite %% kao zamjenske znakove. Na primjer, da biste pronašli sve stavke poput jean, joe, jim, možete unijeti j%%, također možete koristiti ; kao separator za vrijednost, i koristite ! osim ove vrijednosti. Na primjer jean;joe;jim%%;!jimo;!jima%% ciljat će sve jean, joe, započeti s jim, ali ne i jimo i ne sve što počinje s jima +AdvTgtSearchTextHelp=Use %% as wildcards. For example to find all item like jean, joe, jim, you can input j%%, you can also use ; as separator for value, and use ! for except this value. For example jean;joe;jim%%;!jimo;!jima%% will target all jean, joe, start with jim but not jimo and not everything that starts with jima AdvTgtSearchIntHelp=Koristite interval za odabir int ili float vrijednosti AdvTgtMinVal=Minimalna vrijednost AdvTgtMaxVal=Maksimalna vrijednost diff --git a/htdocs/langs/hr_HR/main.lang b/htdocs/langs/hr_HR/main.lang index 0487c472422..6324dbeeb3e 100644 --- a/htdocs/langs/hr_HR/main.lang +++ b/htdocs/langs/hr_HR/main.lang @@ -44,7 +44,7 @@ NotEnoughDataYet=Nedovoljno podataka NoError=Bez greške Error=Greška Errors=Greške -ErrorFieldRequired=Potrebno je polje '%s' +ErrorFieldRequired=Potrebno je polje '%s' ErrorFieldFormat=Neispravna vrijednost u polju '%s' ErrorFileDoesNotExists=Datoteka %s ne postoji ErrorFailedToOpenFile=Otvaranje datoteke %s nije uspjelo @@ -420,6 +420,8 @@ TotalTTCShort=Ukupno s PDV-om TotalHT=Ukupno bez PDV-a TotalHTforthispage=Ukupno (bez PDV-a) na ovoj stranici Totalforthispage=Ukupno na ovoj stranici +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=Ukupno s PDV-om TotalTTCToYourCredit=Ukupno s porezom na vaš račun TotalVAT=Iznos PDV-a @@ -647,6 +649,7 @@ ReportName=Naziv izvještaja ReportPeriod=Razdoblje izvještaja ReportDescription=Opis Report=Izvještaj +Reports=Reports Keyword=Ključna riječ Origin=Porijeklo Legend=Natpis @@ -712,7 +715,7 @@ AlreadyRead=Već pročitano NotRead=Nepročitano NoMobilePhone=Nema mobilnog telefona Owner=Vlasnik -FollowingConstantsWillBeSubstituted=Sljedeće konstante bit će zamjenjene s odgovarajućom vrijednošću. +FollowingConstantsWillBeSubstituted=Sljedeće konstante bit će zamjenjene s odgovarajućom vrijednošću. Refresh=Osvježi BackToList=Povratak na popis BackToTree=Natrag na stablo diff --git a/htdocs/langs/hr_HR/modulebuilder.lang b/htdocs/langs/hr_HR/modulebuilder.lang index 828ce58d2d7..2b266401558 100644 --- a/htdocs/langs/hr_HR/modulebuilder.lang +++ b/htdocs/langs/hr_HR/modulebuilder.lang @@ -94,7 +94,7 @@ SeeExamples=Ovdje pogledajte primjere EnabledDesc=Uvjet da ovo polje bude aktivno.

Primjeri:
1
isModEnabled('anothermodule')
getDolGlobalString('MYMODULE_OPTION')==2 VisibleDesc=Je li polje vidljivo? (Primjeri: 0=Nikad vidljivo, 1=Vidljivo na popisu i izradi/update/view forms, 2=Vidljivo na popisu samo, 3=Vidljivo samo na izradi/update/view obrascu (ne na popisima), 4=Vidljivo na popisima i ažuriranje /prikaži samo obrazac (ne izradi), 5=Vidljivo na popisu i samo prikaži obrazac (ne izradi, ne ažurirati).

Korištenje negativne vrijednosti znači da se polje prema zadanim postavkama ne prikazuje na popis ali se može odabrati za pregled). ItCanBeAnExpression=Može biti izraz. Primjer:
preg_match('/public/', $_SERVER['PHP_SELF'])?0:1
$user ->hasRight('praznik', 'defini_praznik')?1:5 -DisplayOnPdfDesc=Prikaži ovo polje na kompatibilnim PDF dokumentima, položajem možeš upravljati pomoću polja "Pozicija".
Za dokument:
0 = nije prikazan
1 = prikaz
2 = prikaži samo ako nije prazno

Za retke dokumenta:
0 = nije prikazano
1 = prikazano u stupcu
3 = prikaz u stupcu opisa retka nakon opisa
4 = prikaz u stupcu opisa nakon opisa samo ako nije prazna +DisplayOnPdfDesc=Display this field on compatible PDF documents, you can manage position with "Position" field.
For document :
0 = not displayed
1 = display
2 = display only if not empty

For document lines :
0 = not displayed
1 = displayed in a column
3 = display in line description column after the description
4 = display in description column after the description only if not empty DisplayOnPdf=U PDF-u IsAMeasureDesc=Može li se vrijednost polja kumulirati kako bi se zbroj donio na popis? (Primjeri: 1 ili 0) SearchAllDesc=Koristi li se polje za pretraživanje pomoću alata za brzo pretraživanje? (Primjeri: 1 ili 0) diff --git a/htdocs/langs/hr_HR/other.lang b/htdocs/langs/hr_HR/other.lang index 359ffab4495..b619b266a53 100644 --- a/htdocs/langs/hr_HR/other.lang +++ b/htdocs/langs/hr_HR/other.lang @@ -5,7 +5,7 @@ Tools=Alati TMenuTools=Alati ToolsDesc=Svi alati koji nisu uključeni u ostalim sučeljima grupirani su ovdje.
Možete im pristupiti uz pomoć izbornika lijevo. Birthday=Rođendan -BirthdayAlert=Birthday alert +BirthdayAlert=Upozorenje za rođendan BirthdayAlertOn=rođendansko upozorenje aktivno BirthdayAlertOff=rođendansko upozorenje neaktivno TransKey=Prijevod ključa TransKey @@ -31,7 +31,7 @@ PreviousYearOfInvoice=Prethodna godina datuma fakture NextYearOfInvoice=Sljedeća godina datuma fakture DateNextInvoiceBeforeGen=Datum sljedeće fakture (prije generiranja) DateNextInvoiceAfterGen=Datum sljedeće fakture (nakon generiranja) -GraphInBarsAreLimitedToNMeasures=Grafike su ograničene na mjere %s u načinu 'Bars'. Umjesto toga automatski je odabran način rada 'Linije'. +GraphInBarsAreLimitedToNMeasures=Grafika je ograničena na %s mjere u načinu 'Stupke'. Umjesto toga automatski je odabran način 'Linije'. OnlyOneFieldForXAxisIsPossible=Samo 1 polje je trenutno moguće kao X-os. Odabrano je samo prvo odabrano polje. AtLeastOneMeasureIsRequired=Potrebno je najmanje 1 polje za mjeru AtLeastOneXAxisIsRequired=Potrebno je najmanje 1 polje za X-os @@ -41,33 +41,35 @@ notiftofixedemail=Na fiksnu poštu notiftouserandtofixedemail=Na korisničku i fiksnu poštu Notify_ORDER_VALIDATE=Prodajni nalog potvrđen Notify_ORDER_SENTBYMAIL=Prodajni nalog poslan poštom -Notify_ORDER_CLOSE=Sales order delivered +Notify_ORDER_CLOSE=Prodajna narudžba isporučena Notify_ORDER_SUPPLIER_SENTBYMAIL=Narudžbenica poslana e-poštom Notify_ORDER_SUPPLIER_VALIDATE=Narudžbenica je snimljena Notify_ORDER_SUPPLIER_APPROVE=Narudžbenica odobrena +Notify_ORDER_SUPPLIER_SUBMIT=Narudžbenica poslana Notify_ORDER_SUPPLIER_REFUSE=Narudžbenica odbijena Notify_PROPAL_VALIDATE=Potvrđen prijedlog kupaca Notify_PROPAL_CLOSE_SIGNED=Prijedlog korisnika zatvoren potpisan Notify_PROPAL_CLOSE_REFUSED=Prijedlog korisnika zatvoren je odbijen Notify_PROPAL_SENTBYMAIL=Ponuda poslana poštom Notify_WITHDRAW_TRANSMIT=Povlačenje prijenosa -Notify_WITHDRAW_CREDIT=Credit withdrawal +Notify_WITHDRAW_CREDIT=Povlačenje kredita Notify_WITHDRAW_EMIT=Izvršite isplatu Notify_COMPANY_CREATE=Komitent kreiran -Notify_COMPANY_SENTBYMAIL=Mails sent from the page of third party -Notify_BILL_VALIDATE=Customer invoice validated -Notify_BILL_UNVALIDATE=Customer invoice unvalidated -Notify_BILL_PAYED=Customer invoice paid -Notify_BILL_CANCEL=Customer invoice canceled -Notify_BILL_SENTBYMAIL=Customer invoice sent by mail -Notify_BILL_SUPPLIER_VALIDATE=Vendor invoice validated -Notify_BILL_SUPPLIER_PAYED=Vendor invoice paid -Notify_BILL_SUPPLIER_SENTBYMAIL=Vendor invoice sent by mail -Notify_BILL_SUPPLIER_CANCELED=Vendor invoice cancelled +Notify_COMPANY_SENTBYMAIL=Pošta poslana sa stranice treće strane +Notify_BILL_VALIDATE=Faktura kupca potvrđena +Notify_BILL_UNVALIDATE=Faktura kupca nije potvrđena +Notify_BILL_PAYED=Plaćena faktura kupca +Notify_BILL_CANCEL=Faktura kupca otkazana +Notify_BILL_SENTBYMAIL=Račun kupca šalje poštom +Notify_BILL_SUPPLIER_VALIDATE=Faktura dobavljača potvrđena +Notify_BILL_SUPPLIER_PAYED=Plaćena faktura dobavljača +Notify_BILL_SUPPLIER_SENTBYMAIL=Faktura dobavljača poslana poštom +Notify_BILL_SUPPLIER_CANCELED=Faktura dobavljača poništena Notify_CONTRACT_VALIDATE=Ugovor potvrđen -Notify_FICHINTER_VALIDATE=Intervention validated -Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention -Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail +Notify_FICHINTER_VALIDATE=Intervencija potvrđena +Notify_FICHINTER_CLOSE=Intervencija zatvorena +Notify_FICHINTER_ADD_CONTACT=Dodan kontakt u Intervenciju +Notify_FICHINTER_SENTBYMAIL=Intervencija poslana poštom Notify_SHIPPING_VALIDATE=Dostava potvrđena Notify_SHIPPING_SENTBYMAIL=Dostava poslana poštom Notify_MEMBER_VALIDATE=Član potvrđen @@ -81,39 +83,39 @@ Notify_TASK_MODIFY=Zadatak izmijenjen Notify_TASK_DELETE=Zadatak je izbrisan Notify_EXPENSE_REPORT_VALIDATE=Potvrđeno izvješće o troškovima (potrebno je odobrenje) Notify_EXPENSE_REPORT_APPROVE=Izvješće o troškovima odobreno -Notify_HOLIDAY_VALIDATE=Leave request validated (approval required) -Notify_HOLIDAY_APPROVE=Leave request approved -Notify_ACTION_CREATE=Added action to Agenda +Notify_HOLIDAY_VALIDATE=Ostavi zahtjev potvrđen (potrebno je odobrenje) +Notify_HOLIDAY_APPROVE=Zahtjev za odlazak odobren +Notify_ACTION_CREATE=Dodana radnja na dnevni red SeeModuleSetup=Pogledajte postavljanje modula %s -NbOfAttachedFiles=Number of attached files/documents -TotalSizeOfAttachedFiles=Total size of attached files/documents +NbOfAttachedFiles=Broj priloženih datoteka/dokumenata +TotalSizeOfAttachedFiles=Ukupna veličina priloženih datoteka/dokumenata MaxSize=Maksimalna veličina -AttachANewFile=Attach a new file/document -LinkedObject=Linked object +AttachANewFile=Priložite novu datoteku/dokument +LinkedObject=Povezani objekt NbOfActiveNotifications=Broj obavijesti (br. e-poruka primatelja) -PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe lines are separated by a carriage return.\n\n__USER_SIGNATURE__ -PredefinedMailTestHtml=__(Hello)__
This is a test mail sent to __EMAIL__ (the word test must be in bold).
The lines are separated by a carriage return.

__USER_SIGNATURE__ -PredefinedMailContentContract=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find invoice __REF__ attached \n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to remind you that the invoice __REF__ seems to have not been paid. A copy of the invoice is attached as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find commercial proposal __REF__ attached \n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find price request __REF__ attached\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find order __REF__ attached\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find our order __REF__ attached\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find invoice __REF__ attached\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ +PredefinedMailTest=__(Zdravo)__\nOvo je probna pošta poslana na __EMAIL__.\nRedovi su odvojeni znakom za početak.\n\n__POTPIS_KORISNIKA__ +PredefinedMailTestHtml=__(Pozdrav)__
Ovo je test poruka poslana na __EMAIL__ (provjera riječi mora biti podebljana).
Reci su odvojeni znakom za početak.

__USER_SIGNATURE__ +PredefinedMailContentContract=__(Zdravo)__\n\n\n__(Iskreno)__\n\n__POTPIS_KORISNIKA__ +PredefinedMailContentSendInvoice=__(Zdravo)__\n\nU prilogu pogledajte fakturu __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Iskreno)__\n\n__POTPIS_KORISNIKA__ +PredefinedMailContentSendInvoiceReminder=__(Zdravo)__\n\nPodsjećamo da faktura __REF__ izgleda nije plaćena. Kao podsjetnik prilažemo kopiju računa.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Iskreno)__\n\n__POTPIS_KORISNIKA__ +PredefinedMailContentSendProposal=__(Zdravo)__\n\nU prilogu pogledajte komercijalni prijedlog __REF__\n\n\n__(Iskreno)__\n\n__POTPIS_KORISNIKA__ +PredefinedMailContentSendSupplierProposal=__(Zdravo)__\n\nU prilogu pronađite zahtjev za cijenu __REF__\n\n\n__(Iskreno)__\n\n__POTPIS_KORISNIKA__ +PredefinedMailContentSendOrder=__(Zdravo)__\n\nU prilogu pronađite narudžbu __REF__\n\n\n__(Iskreno)__\n\n__POTPIS_KORISNIKA__ +PredefinedMailContentSendSupplierOrder=__(Zdravo)__\n\nU prilogu pronađite našu narudžbu __REF__\n\n\n__(Iskreno)__\n\n__POTPIS_KORISNIKA__ +PredefinedMailContentSendSupplierInvoice=__(Zdravo)__\n\nU prilogu pogledajte fakturu __REF__\n\n\n__(Iskreno)__\n\n__POTPIS_KORISNIKA__ PredefinedMailContentSendShipping=Poštovana/ni,\nposlali smo vam robu prema dostavnici __REF__ u privitku.\n\nUkoliko je dostupna, na dostavnicu upisana je poveznica na stranice prijevoznika i broj pošiljke. Upišite broj na odredišnoj stranici i pratite vašu pošiljku.\n\nSrdačan pozdrav!\n__USER_SIGNATURE__ -PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find intervention __REF__ attached\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n -PredefinedMailContentGeneric=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendActionComm=Event reminder "__EVENT_LABEL__" on __EVENT_DATE__ at __EVENT_TIME__

This is an automatic message, please do not reply. -DemoDesc=Dolibarr is a compact ERP/CRM supporting several business modules. A demo showcasing all modules makes no sense as this scenario never occurs (several hundred available). So, several demo profiles are available. +PredefinedMailContentSendFichInter=__(Zdravo)__\n\nU prilogu pronađite intervenciju __REF__\n\n\n__(Iskreno)__\n\n__POTPIS_KORISNIKA__ +PredefinedMailContentLink=Možete kliknuti na poveznicu u nastavku da izvršite uplatu ako već nije učinjena.\n\n%s\n\n +PredefinedMailContentGeneric=__(Zdravo)__\n\n\n__(Iskreno)__\n\n__POTPIS_KORISNIKA__ +PredefinedMailContentSendActionComm=Podsjetnik na događaj "__EVENT_LABEL__" __EVENT_DATE__ u __EVENT_TIME__

Ovo je automatska poruka, nemojte odgovarati. +DemoDesc=Dolibarr je kompaktni ERP/CRM koji podržava nekoliko poslovnih modula. Demo koji prikazuje sve module nema smisla jer se ovaj scenarij nikada ne događa (dostupno nekoliko stotina). Dakle, dostupno je nekoliko demo profila. ChooseYourDemoProfil=Odaberite demo profil koji najbolje odgovara vašim potrebama... ChooseYourDemoProfilMore=...ili napravite vlastiti profil
(ručni odabir modula) DemoFundation=Upravljanje članovima zaklade DemoFundation2=Upravljanje članovima i bankovnim računom zaklade -DemoCompanyServiceOnly=Company or freelance selling service only -DemoCompanyShopWithCashDesk=Manage a shop with a cash box -DemoCompanyProductAndStocks=Shop selling products with Point Of Sales +DemoCompanyServiceOnly=tvrtka ili samo slobodna prodajna usluga +DemoCompanyShopWithCashDesk=Upravljajte trgovinom s kasom +DemoCompanyProductAndStocks=Kupujte prodajući proizvode na prodajnom mjestu DemoCompanyManufacturing=Tvrtka koja proizvodi proizvode DemoCompanyAll=Tvrtka s više djelatnosti (svi glavni moduli) CreatedBy=Izradio %s @@ -183,53 +185,57 @@ SizeUnitfoot=stopa SizeUnitpoint=točka BugTracker=Praćenje bugova SendNewPasswordDesc=This form allows you to request a new password. It will be sent to your email address.
Change will become effective once you click on the confirmation link in the email.
Check your inbox. -EnterNewPasswordHere=Enter your new password here +EnterNewPasswordHere=Unesite svoju novu lozinku ovdje BackToLoginPage=Povratak na stranicu za prijavu -AuthenticationDoesNotAllowSendNewPassword=Authentication mode is %s.
In this mode, Dolibarr can't know nor change your password.
Contact your system administrator if you want to change your password. -EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use this option. +AuthenticationDoesNotAllowSendNewPassword=Ovjera vjerodostojnosti način je %s .
U ovom načinu rada Dolibarr ne može znati niti promijeniti vašu lozinku.
Obratite se svom administratoru sustava ako želite promijeniti lozinku. +EnableGDLibraryDesc=Instalirajte ili omogućite GD knjižnicu na svojoj PHP instalaciji da biste koristili ovu opciju. ProfIdShortDesc=Prof Id %s je podatak ovisan o državi komitenta.
Na primjer, za zemlju %s, kod je %s. DolibarrDemo=Dolibarr ERP/CRM demo -StatsByAmount=Statistics on amount of products/services +StatsByAmount=Statistika o količini proizvoda/usluga +StatsByAmountProducts=Statistika o količini proizvoda +StatsByAmountServices=Statistika o količini usluga StatsByNumberOfUnits=Statistika za zbroj količine proizvoda/usluga -StatsByNumberOfEntities=Statistics for number of referring entities (no. of invoices, or orders...) -NumberOf=Number of %s -NumberOfUnits=Number of units on %s -AmountIn=Amount in %s +StatsByNumberOfUnitsProducts=Statistika za zbroj proizvoda +StatsByNumberOfUnitsServices=Statistika za zbroj usluga +StatsByNumberOfEntities=Statistika za broj subjekata koji upućuju (br. faktura ili narudžbi...) +NumberOf=Broj %s +NumberOfUnits=Broj jedinica na %s +AmountIn=Iznos u %s NumberOfUnitsMos=Broj jedinica za proizvodnju u proizvodnim narudžbama -EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. -EMailTextInterventionValidated=The intervention %s has been validated. +EMailTextInterventionAddedContact=Dodijeljena vam je nova intervencija %s. +EMailTextInterventionValidated=Intervencija %s je potvrđena. +EMailTextInterventionClosed=Intervencija %s je zatvorena. EMailTextInvoiceValidated=Račun %s je potvrđen. EMailTextInvoicePayed=Račun %s je plaćen. EMailTextProposalValidated=Prijedlog %s je potvrđen. EMailTextProposalClosedSigned=Prijedlog %s je zatvoren potpisan. -EMailTextProposalClosedSignedWeb=Proposal %s has been closed signed on portal page. -EMailTextProposalClosedRefused=Proposal %s has been closed refused. -EMailTextProposalClosedRefusedWeb=Proposal %s has been closed refuse on portal page. +EMailTextProposalClosedSignedWeb=Prijedlog %s je zatvoren potpisan na stranici portala. +EMailTextProposalClosedRefused=Prijedlog %s je zatvoren i odbijen. +EMailTextProposalClosedRefusedWeb=Prijedlog %s je zatvoren odbijen na stranici portala. EMailTextOrderValidated=Narudžba %s je potvrđena. -EMailTextOrderClose=Order %s has been delivered. -EMailTextOrderApproved=Narudžba %s je odobrena. -EMailTextOrderValidatedBy=Narudžbu %s zabilježio je %s. -EMailTextOrderApprovedBy=Narudžbu %s odobrio je %s. -EMailTextOrderRefused=Narudžba %s je odbijena. -EMailTextOrderRefusedBy=Narudžbu %s odbio je %s. +EMailTextOrderClose=Narudžba %s je isporučena. +EMailTextSupplierOrderApprovedBy=Narudžbenicu %s odobrio je %s. +EMailTextSupplierOrderValidatedBy=Narudžbenicu %s zabilježio je %s. +EMailTextSupplierOrderSubmittedBy=Narudžbenicu %s poslao je %s. +EMailTextSupplierOrderRefusedBy=Narudžbenicu %s odbio je %s. EMailTextExpeditionValidated=Dostava %s je potvrđena. EMailTextExpenseReportValidated=Izvješće o troškovima %s je potvrđeno. EMailTextExpenseReportApproved=Izvješće o troškovima %s je odobreno. EMailTextHolidayValidated=Zahtjev za dopustom %s je potvrđen. EMailTextHolidayApproved=Zahtjev za dopustom %s je odobren. -EMailTextActionAdded=The action %s has been added to the Agenda. -ImportedWithSet=Importation data set +EMailTextActionAdded=Radnja %s dodana je na dnevni red. +ImportedWithSet=Skup podataka o uvozu DolibarrNotification=Automatska obavijest -ResizeDesc=Enter new width OR new height. Ratio will be kept during resizing... +ResizeDesc=Unesite novu širinu ILI novu visinu. Omjer će se zadržati tijekom promjene veličine... NewLength=Nova širina NewHeight=Nova visina -NewSizeAfterCropping=New size after cropping -DefineNewAreaToPick=Define new area on image to pick (left click on image then drag until you reach the opposite corner) -CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image +NewSizeAfterCropping=Nova veličina nakon izrezivanja +DefineNewAreaToPick=Definirajte novo područje na slici za odabir (lijevi klik na sliku zatim povucite dok ne dođete do suprotnog kuta) +CurrentInformationOnImage=Ovaj je alat osmišljen kako bi vam pomogao promijeniti veličinu ili obrezivanje slike. Ovo su informacije o trenutačno uređenoj slici ImageEditor=Uređivač slika -YouReceiveMailBecauseOfNotification=You receive this message because your email has been added to list of targets to be informed of particular events into %s software of %s. -YouReceiveMailBecauseOfNotification2=This event is the following: -ThisIsListOfModules=This is a list of modules preselected by this demo profile (only most common modules are visible in this demo). Edit this to have a more personalized demo and click on "Start". +YouReceiveMailBecauseOfNotification=Primili ste ovu poruku jer je vaš e-pošta dodan na popis ciljeva za obavještavanje o određenim događajima u %s softveru %s. +YouReceiveMailBecauseOfNotification2=Ovaj događaj je sljedeći: +ThisIsListOfModules=Ovo je popis modula unaprijed odabranih ovim demo profilom (u ovoj demo verziji vidljivi su samo najčešći moduli). Uredite ovo da biste imali prilagođeniju demonstraciju i kliknite na "Start". UseAdvancedPerms=Koristite napredna dopuštenja nekih modula FileFormat=Format datoteke SelectAColor=Odaberite boju @@ -262,19 +268,19 @@ YourPasswordHasBeenReset=Vaša lozinka je uspješno poništena ApplicantIpAddress=IP adresa podnositelja zahtjeva SMSSentTo=SMS poslan na %s MissingIds=Nedostaju ID-ovi -ThirdPartyCreatedByEmailCollector=Third party created by email collector from email MSGID %s +ThirdPartyCreatedByEmailCollector=Treća strana koju je izradio e-pošta sakupljač iz e-pošta MSGID %s ContactCreatedByEmailCollector=Kontakt/adresa kreirana od strane sakupljača e-pošte iz e-pošte MSGID %s -ProjectCreatedByEmailCollector=Project created by email collector from email MSGID %s -TicketCreatedByEmailCollector=Ticket created by email collector from email MSGID %s -OpeningHoursFormatDesc=Use a - to separate opening and closing hours.
Use a space to enter different ranges.
Example: 8-12 14-18 +ProjectCreatedByEmailCollector=Projekt izradio e-pošta sakupljač iz e-pošta MSGID %s +TicketCreatedByEmailCollector=Ulaznicu izradio e-pošta kolekcionar iz e-pošta MSGID %s +OpeningHoursFormatDesc=Koristite - za odvajanje i radnog vremena.
Koristite razmak za unos različitih raspona.
Primjer: 8-12 14-18 SuffixSessionName=Sufiks za naziv sesije LoginWith=Prijavite se s %s ##### Export ##### ExportsArea=Područje izvoza AvailableFormats=Dostupni formati -LibraryUsed=Library used -LibraryVersion=Library version +LibraryUsed=Korištena biblioteka +LibraryVersion=Verzija biblioteke ExportableDatas=Podaci koji se mogu izvesti NoExportableData=Nema podataka za izvoz (nema modula s učitanim podacima za izvoz ili nedostaju dopuštenja) ##### External sites ##### @@ -283,16 +289,18 @@ WEBSITE_PAGEURL=URL stranice WEBSITE_TITLE=Naslov WEBSITE_DESCRIPTION=Opis WEBSITE_IMAGE=Slika -WEBSITE_IMAGEDesc=Relative path of the image media. You can keep this empty as this is rarely used (it can be used by dynamic content to show a thumbnail in a list of blog posts). Use __WEBSITE_KEY__ in the path if path depends on website name (for example: image/__WEBSITE_KEY__/stories/myimage.png). +WEBSITE_IMAGEDesc=Relativni put slikovnog medija. Ovo možete ostaviti praznim jer se rijetko koristi (može ga koristiti dinamički sadržaj za prikaz minijature na popisu postova na blogu). Koristite __WEBSITE_KEY__ u putu ako put ovisi o nazivu web mjesta (na primjer: image/__WEBSITE_KEY__/stories/myimage.png). WEBSITE_KEYWORDS=Ključne riječi LinesToImport=Linije za uvoz MemoryUsage=Korištenje memorije RequestDuration=Trajanje zahtjeva -ProductsPerPopularity=Proizvodi/usluge prema popularnosti -PopuProp=Products/Services by popularity in Proposals -PopuCom=Proizvodi/usluge prema popularnosti u narudžbama -ProductStatistics=Statistika proizvoda/usluga +ProductsServicesPerPopularity=Proizvodi|Usluge prema popularnosti +ProductsPerPopularity=Proizvodi po popularnosti +ServicesPerPopularity=Usluge prema popularnosti +PopuProp=Proizvodi|Usluge prema popularnosti u ponudama +PopuCom=Proizvodi|Usluge prema popularnosti u Narudžbama +ProductStatistics=Statistika proizvoda|usluga NbOfQtyInOrders=Količina u narudžbama SelectTheTypeOfObjectToAnalyze=Odaberite objekt za pregled njegove statistike... @@ -300,6 +308,7 @@ ConfirmBtnCommonContent = Jeste li sigurni da želite "%s"? ConfirmBtnCommonTitle = Potvrdite svoju radnju CloseDialog = Zatvori Autofill = Automatsko popunjavanje +OrPasteAnURL=ili Zalijepite URL # externalsite ExternalSiteSetup=Postavljanje linkova na vanjske web stranice @@ -309,8 +318,8 @@ ExampleMyMenuEntry=Moj izbornik unos # ftp FTPClientSetup=Postavljanje modula FTP ili SFTP klijenta -NewFTPClient=New FTP/SFTP connection setup -FTPArea=FTP/SFTP Area +NewFTPClient=Postavljanje nove FTP/SFTP veze +FTPArea=FTP/SFTP područje FTPAreaDesc=Ovaj zaslon prikazuje prikaz FTP i SFTP poslužitelja. SetupOfFTPClientModuleNotComplete=Čini se da postavljanje FTP ili SFTP klijentskog modula nije dovršeno FTPFeatureNotSupportedByYourPHP=Vaš PHP ne podržava FTP ili SFTP funkcije @@ -321,9 +330,11 @@ FTPFailedToRemoveDir=Uklanjanje direktorija %s nije uspjelo: provjerite FTPPassiveMode=Pasivni mod ChooseAFTPEntryIntoMenu=Odaberite FTP/SFTP stranicu s izbornika... FailedToGetFile=Neuspješno preuzimanje datoteka %s -ErrorFTPNodisconnect=Error to disconnect FTP/SFTP server -FileWasUpload=File %s was uploaded -FTPFailedToUploadFile=Failed to upload the file %s. -AddFolder=Create folder -FileWasCreateFolder=Folder %s has been created -FTPFailedToCreateFolder=Failed to create folder %s. +ErrorFTPNodisconnect=Pogreška pri odspajanju FTP/SFTP poslužitelja +FileWasUpload=Datoteka %s je prenesena +FTPFailedToUploadFile=Prijenos datoteke %s nije uspio. +AddFolder=izradi mapa +FileWasCreateFolder=Stvorena je mapa %s +FTPFailedToCreateFolder=Nije uspjelo izradi mapu %s . +SelectADay=Select a day in calendar +SelectANewDate=Select a new date diff --git a/htdocs/langs/hr_HR/products.lang b/htdocs/langs/hr_HR/products.lang index fe71dea284e..b6913872667 100644 --- a/htdocs/langs/hr_HR/products.lang +++ b/htdocs/langs/hr_HR/products.lang @@ -22,11 +22,11 @@ ProductVatMassChangeDesc=Ovaj alat ažurira stopu PDV-a definiranu za SV MassBarcodeInit=Masovni init barkoda MassBarcodeInitDesc=Ova stranica se može koristiti za inicijalizaciju barkoda na objektima koji nemaju definiran barkod. Provjerite prije da li su postavke barcode modula podešene. ProductAccountancyBuyCode=Konto (kupnja) -ProductAccountancyBuyIntraCode=Accounting code (purchase intra-community) -ProductAccountancyBuyExportCode=Accounting code (purchase import) +ProductAccountancyBuyIntraCode=Računovodstveni kod (kupnja unutar zajednice) +ProductAccountancyBuyExportCode=Knjigovodstveni kod (uvoz kupnje) ProductAccountancySellCode=Konto (prodaja) -ProductAccountancySellIntraCode=Accounting code (sale intra-Community) -ProductAccountancySellExportCode=Accounting code (sale export) +ProductAccountancySellIntraCode=Računovodstveni kod (prodaja unutar Zajednice) +ProductAccountancySellExportCode=Računovodstveni kod (prodaja izvoz) ProductOrService=Proizvod ili usluga ProductsAndServices=Proizvodi ili usluge ProductsOrServices=Proizvodi ili usluge @@ -43,7 +43,7 @@ ServicesOnSaleOnly=Usluga samo za prodaju ServicesOnPurchaseOnly=Usluga samo za nabavu ServicesNotOnSell=Usluge ni na prodaju ni za kupovinu ServicesOnSellAndOnBuy=Usluga za prodaju i za nabavu -LastModifiedProductsAndServices=Latest %s products/services which were modified +LastModifiedProductsAndServices=Najnoviji %s proizvodi/usluge koji su izmijenjeni LastRecordedProducts=Zadnja %s pohranjena proizvoda LastRecordedServices=Zadnje %s pohranjene usluge CardProduct0=Proizvod @@ -73,18 +73,18 @@ SellingPrice=Prodajna cijena SellingPriceHT=Prodajna cijena (bez PDV-a) SellingPriceTTC=Prodajna cijena (sa PDV-om) SellingMinPriceTTC=Minimalna prodajna cijena (s porezom) -CostPriceDescription=This price field (excl. tax) can be used to capture the average amount this product costs to your company. It may be any price you calculate yourself, for example, from the average buying price plus average production and distribution cost. +CostPriceDescription=Ovo polje cijene (bez poreza) može se koristiti za bilježenje prosječnog iznosa koji košta ovaj proizvod na vašem tvrtka. To može biti bilo koja cijena koju sami izračunate, na primjer, iz prosječne nabavne cijene plus prosječni proizvodni i troškovi distribucije. CostPriceUsage=Ova vrijednost se može koristiti za izračun marže. ManufacturingPrice=Cijena proizvodnje SoldAmount=Prodani iznos PurchasedAmount=Nabavni iznos NewPrice=Nova cijena MinPrice=Min. prodajna cijena -MinPriceHT=Min. selling price (excl. tax) -MinPriceTTC=Min. selling price (inc. tax) +MinPriceHT=Min. prodajna cijena (bez poreza) +MinPriceTTC=Min. prodajna cijena (uključujući porez) EditSellingPriceLabel=Uredite oznaku prodajne cijene -CantBeLessThanMinPrice=The selling price can't be lower than minimum allowed for this product (%s without tax). This message can also appear if you type a significant discount. -CantBeLessThanMinPriceInclTax=The selling price can't be lower than minimum allowed for this product (%s including taxes). This message can also appears if you type a too important discount. +CantBeLessThanMinPrice=Prodajna cijena ne može biti niža od minimalno dopuštene za ovaj proizvod (%s bez poreza). Ova se poruka također može pojaviti ako upišete značajan popust. +CantBeLessThanMinPriceInclTax=Prodajna cijena ne može biti niža od minimalne dopuštene za ovaj proizvod (%s uključujući poreze). Ova poruka se također može pojaviti ako upišete previše važan popust. ContractStatusClosed=Zatvoreno ErrorProductAlreadyExists=Proizvod s oznakom %s već postoji ErrorProductBadRefOrLabel=Neispravna vrijednost za referencu ili oznaku. @@ -108,12 +108,12 @@ SetDefaultBarcodeType=Odredi vrstu barkoda BarcodeValue=Vrijednost barkoda NoteNotVisibleOnBill=Bilješka (ne vidi se na računima, ponudama...) ServiceLimitedDuration=Ako je proizvod usluga ograničenog trajanja: -FillWithLastServiceDates=Fill with last service line dates -MultiPricesAbility=Multiple price segments per product/service (each customer is in one price segment) +FillWithLastServiceDates=Ispunite datume posljednje usluge +MultiPricesAbility=Više cjenovnih segmenata po proizvodu/usluzi (svaki kupac je u jednom cjenovnom segmentu) MultiPricesNumPrices=Broj cijena -DefaultPriceType=Base of prices per default (with versus without tax) when adding new sale prices -AssociatedProductsAbility=Enable Kits (set of several products) -VariantsAbility=Enable Variants (variations of products, for example color, size) +DefaultPriceType=Baza cijena prema zadanim postavkama (s usporedbom bez poreza) prilikom dodavanja novih prodajnih cijena +AssociatedProductsAbility=Omogući komplete (skup od nekoliko proizvoda) +VariantsAbility=Omogući varijante (varijacije proizvoda, na primjer boja, veličina) AssociatedProducts=Kompleti AssociatedProductsNumber=Broj proizvoda koji čine ovaj komplet ParentProductsNumber=Broj matičnih grupiranih proizvoda @@ -125,8 +125,8 @@ CategoryFilter=Filter po kategoriji ProductToAddSearch=Pronađi proizvod za dodavanje NoMatchFound=Ništa slično nije pronađeno ListOfProductsServices=Popis proizvoda/usluga -ProductAssociationList=List of products/services that are component(s) of this kit -ProductParentList=List of kits with this product as a component +ProductAssociationList=Popis proizvoda/usluga koji su dio(e) ovog kompleta +ProductParentList=Popis kompleta s ovim proizvodom kao komponentom ErrorAssociationIsFatherOfThis=Jedan od odabranih proizvoda je matični proizvod trenutnog proizvoda DeleteProduct=Obriši proizvod/uslugu ConfirmDeleteProduct=Jeste li sigurni da želite izbrisati ovaj proizvod/uslugu @@ -174,7 +174,7 @@ BuyingPrices=Nabavne cijene CustomerPrices=Cijene kupaca SuppliersPrices=Cijene dobavljača SuppliersPricesOfProductsOrServices=Cijene dobavljača (proizvoda ili usluga) -CustomCode=Customs|Commodity|HS code +CustomCode=Carina|Roba|HS šifra CountryOrigin=Zemlja porijekla RegionStateOrigin=Regija podrijetla StateOrigin=Država|Pokrajina podrijetla @@ -208,11 +208,6 @@ unitSET=Komplet unitS=Sekunda unitH=Sat unitD=Dan -unitG=Gram -unitM=Metar -unitLM=Linearni metar -unitM2=Četvorni metar -unitM3=Metar kubni unitL=Litra unitT=tona unitKG=kg @@ -221,6 +216,7 @@ unitMG=mg unitLB=funta unitOZ=unca unitM=Metar +unitLM=Linearni metar unitDM=dm unitCM=cm unitMM=mm @@ -253,7 +249,7 @@ UseMultipriceRules=Koristite pravila segmenta cijena (definirana u postavkama mo PercentVariationOver=%% varijacija preko %s PercentDiscountOver=%% popust preko %s KeepEmptyForAutoCalculation=Ostavite prazno kako bi se to automatski izračunalo iz težine ili volumena proizvoda -VariantRefExample=Examples: COL, SIZE +VariantRefExample=Primjeri: COL, SIZE VariantLabelExample=Primjeri: boja, veličina ### composition fabrication Build=Proizvodi @@ -265,24 +261,24 @@ Quarter1=1. tromjesečje Quarter2=2. tromjesečje Quarter3=3. tromjesečje Quarter4=4. tromjesečje -BarCodePrintsheet=Print barcodes -PageToGenerateBarCodeSheets=With this tool, you can print sheets of barcode stickers. Choose format of your sticker page, type of barcode and value of barcode, then click on button %s. +BarCodePrintsheet=Ispis barkodova +PageToGenerateBarCodeSheets=Pomoću ovog alata možete ispisati listove naljepnica s crtičnim kodom. Odaberite format svoje stranice s naljepnicom, vrstu crtičnog koda i vrijednost crtičnog koda, zatim kliknite gumb %s. NumberOfStickers=Broj naljepnica za ispis na stranici PrintsheetForOneBarCode=Ispiši nekoliko naljepnica s istim barkodom BuildPageToPrint=Generiraj stranicu za ispis FillBarCodeTypeAndValueManually=Popuni ručno tip barkoda i vrijednost. FillBarCodeTypeAndValueFromProduct=Popuni tip barkoda i vrijednost iz barkoda proizvoda. -FillBarCodeTypeAndValueFromThirdParty=Fill barcode type and value from barcode of a third party. -DefinitionOfBarCodeForProductNotComplete=Definition of type or value of barcode not complete for product %s. -DefinitionOfBarCodeForThirdpartyNotComplete=Definition of type or value of barcode non complete for third party %s. +FillBarCodeTypeAndValueFromThirdParty=Ispunite vrijednost vrste crtičnog koda i iz crtičnog koda treće strane. +DefinitionOfBarCodeForProductNotComplete=Definicija vrste ili vrijednosti crtičnog koda nije dovršena za proizvod %s. +DefinitionOfBarCodeForThirdpartyNotComplete=Definicija vrste ili vrijednosti crtičnog koda nije potpuna za treću stranu %s. BarCodeDataForProduct=Barkod podaci za proizvod %s: -BarCodeDataForThirdparty=Barcode information of third party %s: -ResetBarcodeForAllRecords=Define barcode value for all record (this will also reset barcode value already defined with new values) +BarCodeDataForThirdparty=Informacije o barkodu treće strane %s: +ResetBarcodeForAllRecords=Definirajte vrijednost barkoda za sve zapise (ovo će također poništiti vrijednost barkoda koja je već definirana s novim vrijednostima) PriceByCustomer=Različite cijene za svakog kupca PriceCatalogue=Jedinstvena prodajna cijena po proizvodu/usluzi PricingRule=Pravila za prodajne cijene AddCustomerPrice=Dodaj cijenu po kupcu -ForceUpdateChildPriceSoc=Set same price on customer's subsidiaries +ForceUpdateChildPriceSoc=Postavite istu cijenu za klijentove podružnice PriceByCustomerLog=Zabilježi prijašnje cijene kupca MinimumPriceLimit=Minimalna cijena ne može biti niža od %s. MinimumRecommendedPrice=Minimalna preporučena cijena je: %s @@ -291,7 +287,7 @@ PriceExpressionSelected=Odabrani izraz cijene PriceExpressionEditorHelp1="cijena = 2 + 2" ili "2 + 2" za postavljanje cijene. Koristite ; za odvajanje izraza PriceExpressionEditorHelp2=Možete pristupiti EkstraPoljima s varijablama #extrafield_myextrafieldkey# i globalnim varijablama #global_mycode# PriceExpressionEditorHelp3=In both product/service and vendor prices there are these variables available:
#tva_tx# #localtax1_tx# #localtax2_tx# #weight# #length# #surface# #price_min# -PriceExpressionEditorHelp4=In product/service price only: #supplier_min_price#
In vendor prices only: #supplier_quantity# and #supplier_tva_tx# +PriceExpressionEditorHelp4=Samo u cijeni proizvoda/usluge: #supplier_min_price#
U samo cijene dobavljača: #supplier_quantity# i #supplier_tva_tx# PriceExpressionEditorHelp5=Dostupne globalne vrijednosti: PriceMode=Način cijena PriceNumeric=Broj @@ -303,24 +299,24 @@ MinSupplierPrice=Minimalna kupovna cijena MinCustomerPrice=Minimalna prodajna cijena NoDynamicPrice=Nema dinamičke cijene DynamicPriceConfiguration=Dinamična konfiguracija cijene -DynamicPriceDesc=You may define mathematical formulae to calculate Customer or Vendor prices. Such formulas can use all mathematical operators, some constants and variables. You can define here the variables you wish to use. If the variable needs an automatic update, you may define the external URL to allow Dolibarr to update the value automatically. +DynamicPriceDesc=Možete definirati matematičke formule za izračun cijena kupaca ili dobavljača. Takve formule mogu koristiti sve matematičke operatore, neke konstante i varijable. Ovdje možete definirati varijable koje želite koristiti. Ako je varijabli potrebno automatsko ažuriranje, možete definirati vanjski URL kako biste Dolibarru omogućili automatsko ažuriranje vrijednosti. AddVariable=Dodaj varijablu AddUpdater=Dodaj promjenjivač GlobalVariables=Globalne varijable VariableToUpdate=Variabla za promjeniti -GlobalVariableUpdaters=External updaters for variables +GlobalVariableUpdaters=Vanjski programi za ažuriranje varijabli GlobalVariableUpdaterType0=JSON podaci -GlobalVariableUpdaterHelp0=Parses JSON data from specified URL, VALUE specifies the location of relevant value, +GlobalVariableUpdaterHelp0=Raščlanjuje JSON podatke iz navedenog URL-a, VALUE navodi lokaciju relevantne vrijednosti, GlobalVariableUpdaterHelpFormat0=Format zahtjeva {"URL": "http://example.com/urlofjson", "VALUE": "array1,array2,targetvalue"} -GlobalVariableUpdaterType1=WebService data -GlobalVariableUpdaterHelp1=Parses WebService data from specified URL, NS specifies the namespace, VALUE specifies the location of relevant value, DATA should contain the data to send and METHOD is the calling WS method -GlobalVariableUpdaterHelpFormat1=Format for request is {"URL": "http://example.com/urlofws", "VALUE": "array,targetvalue", "NS": "http://example.com/urlofns", "METHOD": "myWSMethod", "DATA": {"your": "data", "to": "send"}} +GlobalVariableUpdaterType1=WebService podaci +GlobalVariableUpdaterHelp1=Raščlanjuje podatke WebServicea iz navedenog URL-a, NS navodi prostor imena, VALUE navodi lokaciju relevantne vrijednosti, DATA treba sadržavati podatke za slanje i METHOD je WS metoda koja poziva +GlobalVariableUpdaterHelpFormat1=Format zahtjeva je {"URL": "http://example.com/urlofws", "VALUE": "array,targetvalue", "NS": "http://example.com/urlofns", "METHOD" : "myWSMethod", "DATA": {"vaš": "podaci", "za": "pošalji"}} UpdateInterval=Interval promjene (minute) LastUpdated=Zadnje ažuriranje CorrectlyUpdated=Ispravno promjenjeno PropalMergePdfProductActualFile=Datoteke za dodati u PDF Azur su/je PropalMergePdfProductChooseFile=Odaberite PDF datoteke -IncludingProductWithTag=Including products/services with the tag +IncludingProductWithTag=Uključujući proizvode/usluge s oznaka DefaultPriceRealPriceMayDependOnCustomer=Predefinirana cijena, stvarna cijena može ovisiti o kupcu WarningSelectOneDocument=Molimo odaberite barem jedan dokument DefaultUnitToShow=Jedinica @@ -342,29 +338,29 @@ SizeUnits=Jedinica veličine DeleteProductBuyPrice=Obriši nabavnu cijenu ConfirmDeleteProductBuyPrice=Jeste li sigurni da želite obrisati ovu nabavnu cijenu ? SubProduct=Podproizvod -ProductSheet=Product sheet -ServiceSheet=Service sheet +ProductSheet=List proizvoda +ServiceSheet=Servisni list PossibleValues=Moguće vrijednosti -GoOnMenuToCreateVairants=Go on menu %s - %s to prepare attribute variants (like colors, size, ...) -UseProductFournDesc=Add a feature to define the product description defined by the vendors (for each vendor reference) in addition to the description for customers +GoOnMenuToCreateVairants=Idite na izbornik %s - %s da pripremite varijante atributa (kao što su boje, veličina, ...) +UseProductFournDesc=Dodavanje značajke za definiranje opisa proizvoda definiranog od strane dobavljača (za svaku referencu dobavljača) uz opis za kupce ProductSupplierDescription=Opis dobavljača za proizvod -UseProductSupplierPackaging=Use the "packaging" feature to round the quantities to some given multiples (when adding/updating line in a vendor documents, recalculate quantities and purchase prices according to the higher multiple set on the purchase prices of a product) -PackagingForThisProduct=Packaging of quantities -PackagingForThisProductDesc=You will automatically purchase a multiple of this quantity. -QtyRecalculatedWithPackaging=The quantity of the line were recalculated according to supplier packaging +UseProductSupplierPackaging=Upotrijebite značajku "pakiranja" za zaokruživanje količina na neke dane višekratnike (prilikom dodavanja/ažuriranja retka u dokumentima dobavljača, ponovno izračunajte količine i nabavne cijene prema višem višekratniku postavljenom na nabavne cijene proizvoda) +PackagingForThisProduct=Pakiranje količina +PackagingForThisProductDesc=Automatski ćete kupiti višestruku količinu ove količine. +QtyRecalculatedWithPackaging=Količina linije preračunata je prema pakiranju dobavljača #Attributes -Attributes=Attributes +Attributes=Atributi VariantAttributes=Atributi varijante ProductAttributes=Varijanta atributa za proizvode ProductAttributeName=Atribut varijante %s ProductAttribute=Atribut varijante ProductAttributeDeleteDialog=Jeste li sigurni da želite izbrisati ovaj atribut? Sve vrijednosti će biti izbrisane -ProductAttributeValueDeleteDialog=Are you sure you want to delete the value "%s" with the reference "%s" of this attribute? +ProductAttributeValueDeleteDialog=Jeste li sigurni da želite za brisanje vrijednosti "%s" s referencom "%s" ovog atributa? ProductCombinationDeleteDialog=Jeste li sigurni da želite izbrisati varijantu proizvoda " %s "? ProductCombinationAlreadyUsed=Došlo je do pogreške prilikom brisanja varijante. Molimo provjerite da se ne koristi ni u jednom objektu ProductCombinations=Varijante -PropagateVariant=Propagate variants +PropagateVariant=Propagirati varijante HideProductCombinations=Sakrij varijantu proizvoda u izborniku proizvoda ProductCombination=Varijanta NewProductCombination=Nova varijanta @@ -381,20 +377,20 @@ ApplyToAllPriceImpactLevelHelp=Klikom ovdje postavljate isti utjecaj cijene na s WeightImpact=Utjecaj težine NewProductAttribute=Novi atribut NewProductAttributeValue=Nova vrijednost atributa -ErrorCreatingProductAttributeValue=There was an error while creating the attribute value. It could be because there is already an existing value with that reference -ProductCombinationGeneratorWarning=If you continue, before generating new variants, all previous ones will be DELETED. Already existing ones will be updated with the new values -TooMuchCombinationsWarning=Generating lots of variants may result in high CPU, memory usage and Dolibarr not able to create them. Enabling the option "%s" may help reduce memory usage. +ErrorCreatingProductAttributeValue=Došlo je do pogreške prilikom stvaranja vrijednosti atributa. To bi moglo biti zato što već postoji vrijednost s tom referencom +ProductCombinationGeneratorWarning=Ako nastavite, prije generiranja novih varijanti, sve prethodne će biti IZBRISANE. Već postojeći bit će ažurirani s novim vrijednostima +TooMuchCombinationsWarning=Generiranje puno varijanti može rezultirati visokom upotrebom procesora, memorije i Dolibarr ih ne može izradi. Omogućavanje opcije "%s" može pomoći u smanjenju upotrebe memorije. DoNotRemovePreviousCombinations=Nemojte uklanjati prethodne varijante UsePercentageVariations=Koristite postotne varijacije PercentageVariation=Postotna varijacija -ErrorDeletingGeneratedProducts=There was an error while trying to delete existing product variants +ErrorDeletingGeneratedProducts=Došlo je do pogreške prilikom pokušaja brisanja postojećih varijanti proizvoda NbOfDifferentValues=br. različitih vrijednosti NbProducts=Broj proizvoda ParentProduct=Matični proizvod -ParentProductOfVariant=Parent product of variant +ParentProductOfVariant=Matični proizvod varijante HideChildProducts=Sakrij varijante proizvoda ShowChildProducts=Prikaži varijante proizvoda -NoEditVariants=Go to Parent product card and edit variants price impact in the variants tab +NoEditVariants=Idite na matičnu karticu proizvoda i uredite utjecaj varijanti na cijenu na kartici varijanti ConfirmCloneProductCombinations=Želite li kopirati sve varijante proizvoda na drugi matični proizvod s navedenom referencom? CloneDestinationReference=Referenca odredišnog proizvoda ErrorCopyProductCombinations=Došlo je do pogreške prilikom kopiranja varijanti proizvoda @@ -404,36 +400,39 @@ ActionAvailableOnVariantProductOnly=Akcija dostupna samo na varijanti proizvoda ProductsPricePerCustomer=Cijene proizvoda po kupcu ProductSupplierExtraFields=Dodatni atributi (cijene dobavljača) DeleteLinkedProduct=Izbrišite podređeni proizvod povezan s kombinacijom -AmountUsedToUpdateWAP=Unit amount to use to update the Weighted Average Price +AmountUsedToUpdateWAP=Jedinični iznos koji se koristi za ažuriranje ponderirane prosječne cijene PMPValue=Procjenjena prosječna cijena PMPValueShort=PPC mandatoryperiod=Obvezna razdoblja mandatoryPeriodNeedTobeSet=Napomena: Razdoblje (datum početka i završetka) mora biti definirano mandatoryPeriodNeedTobeSetMsgValidate=Usluga zahtijeva razdoblje početka i završetka -mandatoryHelper=Check this if you want a message to the user when creating / validating an invoice, commercial proposal, sales order without entering a start and end date on lines with this service.
Note that the message is a warning and not a blocking error. +mandatoryHelper=Provjeri ovo ako želite poruku korisniku prilikom izrade/potvrde fakture, komercijalnog prijedloga, prodajnog naloga bez unosa početka i datum završetka na linijama ove usluge.
Imajte na umu da je poruka upozorenje i a ne pogreška blokiranja. DefaultBOM=Zadana BOM -DefaultBOMDesc=The default BOM recommended to use to manufacture this product. This field can be set only if nature of product is '%s'. +DefaultBOMDesc=Zadana sastavnica koja se preporučuje za proizvodnju ovog proizvoda. Ovo polje može se postaviti samo ako je priroda proizvoda '%s'. Rank=Rang MergeOriginProduct=Duplikat proizvoda (proizvod koji želite izbrisati) MergeProducts=Spojite proizvode -ConfirmMergeProducts=Are you sure you want to merge the chosen product with the current one? All linked objects (invoices, orders, ...) will be moved to the current product, after which the chosen product will be deleted. +ConfirmMergeProducts=Jeste li sigurni da želite spojiti odabrani proizvod s trenutnim? Svi povezani objekti (računi, narudžbe, ...) bit će premješteni na trenutni proizvod, nakon čega će se odabrani proizvod izbrisati. ProductsMergeSuccess=Proizvodi su spojeni ErrorsProductsMerge=Pogreške u spajanju proizvoda SwitchOnSaleStatus=Uključite status prodaje SwitchOnPurchaseStatus=Uključite status nabave -UpdatePrice=Increase/decrease customer price -StockMouvementExtraFields= Extra Fields (stock movement) +UpdatePrice=Povećanje/smanjenje cijene za kupca +StockMouvementExtraFields= Dodatna polja (kretanje dionica) InventoryExtraFields= Dodatna polja (inventar) -ScanOrTypeOrCopyPasteYourBarCodes=Scan or type or copy/paste your barcodes +ScanOrTypeOrCopyPasteYourBarCodes=Skenirajte ili upišite ili kopirajte/zalijepite svoje crtične kodove PuttingPricesUpToDate=Ažurirajte cijene s trenutačno poznatim cijenama -PuttingDescUpToDate=Update descriptions with current known descriptions +PuttingDescUpToDate=Ažurirajte opise trenutačno poznatim opisima PMPExpected=Očekivani PMP ExpectedValuation=Očekivana vrijednost PMPReal=Stvarni PMP RealValuation=Stvarna vrijednost -ConfirmEditExtrafield = Select the extrafield you want modify -ConfirmEditExtrafieldQuestion = Are you sure you want to modify this extrafield? -ModifyValueExtrafields = Modify value of an extrafield -OrProductsWithCategories=Or products with tags/categories -WarningTransferBatchStockMouvToGlobal = If you want to deserialize this product, all its serialized stock will be transformed into global stock -WarningConvertFromBatchToSerial=If you currently have a quantity higher or equal to 2 for the product, switching to this choice means you will still have a product with different objects of the same batch (while you want a unique serial number). The duplicate will remain until an inventory or a manual stock movement to fix this is done. +ConfirmEditExtrafield = Odaberite dodatno polje koje želite promjeni - izmjeni +ConfirmEditExtrafieldQuestion = Jeste li sigurni da želite u promjeni - izmjeni ovo dodatno polje? +ModifyValueExtrafields = promjeni - izmjeni vrijednost dodatnog polja +OrProductsWithCategories=Ili proizvodi s oznake/Kategorije +WarningTransferBatchStockMouvToGlobal = Ako želite deserijalizirati ovaj proizvod, sve njegove serijalizirane zalihe transformirat će se u globalne zalihe +WarningConvertFromBatchToSerial=Ako trenutno imate količinu veću ili jednaku 2 za proizvod, prebacivanje na ovaj izbor znači da ćete i dalje imati proizvod s različitim objektima iste serije (iako želite jedinstveni serijski broj). Duplikat će ostati dok se ne izvrši inventura ili ručno kretanje zaliha kako bi se to popravilo. +AllowStockMovementVariantParent=Also records stock movements on parent products of variant products +AllowStockMovementVariantParentHelp=By default, a parent of a variant is a virtual product, so no stock is managed for it. By enabling this option, a stock will be managed for parent products and each time a stock quantity is modified for a variant product, the same quantity will be modified for the parent product. You should not need this option, except if you are using variant to manage the same product than parent (but with different descriptions, prices...) +ConfirmSetToDraftInventory=Are you sure you want to go back to Draft status?
The quantities currently set in the inventory will be reset. diff --git a/htdocs/langs/hr_HR/website.lang b/htdocs/langs/hr_HR/website.lang index 72a2865f63c..a5fae9cdd7a 100644 --- a/htdocs/langs/hr_HR/website.lang +++ b/htdocs/langs/hr_HR/website.lang @@ -54,7 +54,7 @@ ReadPerm=Čitaj WritePerm=Piši TestDeployOnWeb=Testirajte / implementirajte na web PreviewSiteServedByWebServer=Pregledajte %s u novoj kartici.

%s posluživat će vanjski web poslužitelj (kao što je Apache, Nginx, IIS ). Morate instalirati i postavku ovog poslužitelja prije nego što usmjerite na direktorij:
%s
URL koji poslužuje vanjski poslužitelj:
%s -PreviewSiteServedByDolibarr=Pregledajte %s u novoj kartici.

%s posluživat će poslužitelj Dolibarr tako da ne treba dodatni web poslužitelj (kao što su Apache, Nginx, IIS) koje treba instalirati.
Nezgodno je to što URL-ovi stranica nisu prilagođeni korisniku i počnite s putanjom vašeg Dolibarra.
URL koji poslužuje Dolibarr:
%s

Da biste koristili vlastiti vanjski web poslužitelj za posluživanje ove web stranice, izradi virtualni host na vašem web poslužitelju koji pokazuje na direktorij
%s
zatim unesite naziv ovog virtualnog poslužitelja u svojstva ove web stranice i kliknite vezu "Testiraj/Postavi na web". +PreviewSiteServedByDolibarr=Preview %s in a new tab.

The %s will be served by Dolibarr server so it does not need any extra web server (like Apache, Nginx, IIS) to be installed.
The inconvenient is that the URLs of pages are not user friendly and start with the path of your Dolibarr.
URL served by Dolibarr:
%s

To use your own external web server to serve this web site, create a virtual host on your web server that points on directory
%s
then enter the name of this virtual server in the properties of this website and click on the link "Test/Deploy on the web". VirtualHostUrlNotDefined=URL virtualnog hosta kojeg poslužuje vanjski web poslužitelj nije definiran NoPageYet=Još nema stranica YouCanCreatePageOrImportTemplate=Možete stvoriti novu stranicu ili uvesti cijeli predložak web stranice diff --git a/htdocs/langs/hu_HU/accountancy.lang b/htdocs/langs/hu_HU/accountancy.lang index c3651a80fe2..5b1848b7fb6 100644 --- a/htdocs/langs/hu_HU/accountancy.lang +++ b/htdocs/langs/hu_HU/accountancy.lang @@ -287,7 +287,7 @@ TotalVente=Teljes forgalom adózás előtt TotalMarge=Teljes értékesítési árrés DescVentilCustomer=Tekintse meg itt a vevő számla sorok listáját, amelyek a számlatervből termékszámlához vannak kötve (vagy nem) -DescVentilMore=A legtöbb esetben, ha előre definiált termékeket vagy szolgáltatásokat használ, és beállítja a számlát (a számlatükörből) a termék-/szolgáltatáskártyán, az alkalmazás képes lesz minden kötést a számla között. sorokat és a számlatükör könyvelési számláját, egyetlen kattintással a "%s" gombbal . Ha a fiók nincs beállítva a termék-/szolgáltatáskártyákon, vagy még mindig vannak olyan sorok, amelyek nincsenek fiókhoz kötve, kézi összerendelést kell végrehajtania a „%s
". +DescVentilMore=In most cases, if you use predefined products or services and you set the account (from chart of account) on the product/service card, the application will be able to make all the binding between your invoice lines and the accounting account of your chart of accounts, just in one click with the button "%s". If account was not set on product/service cards or if you still have some lines not bound to an account, you will have to make a manual binding from the menu "%s". DescVentilDoneCustomer=Itt tekintheti meg a vevők számlasorainak listáját és termékszámlájukat a számlatükörből DescVentilTodoCustomer=A számla sorok kötése, amelyek még nem kötöttek egy termékfiókkal a számlatükörből ChangeAccount=Módosítsa a termék/szolgáltatás fiókot (a számlatükörből) a kiválasztott sorokhoz a következő fiókkal: @@ -352,7 +352,7 @@ ACCOUNTING_DISABLE_BINDING_ON_SALES=A kötés és az átvitel letiltása az ért ACCOUNTING_DISABLE_BINDING_ON_PURCHASES=A kötés és az átvitel letiltása a vásárlások könyvelésében (a szállítói számlák nem lesznek figyelembe véve a könyvelésben) ACCOUNTING_DISABLE_BINDING_ON_EXPENSEREPORTS=A kötés és az átvitel letiltása a könyvelésben a költségjelentéseken (a költségjelentéseket nem veszik figyelembe a könyvelésben) ACCOUNTING_ENABLE_LETTERING=Engedélyezze a feliratozás funkciót a számvitelben -ACCOUNTING_ENABLE_LETTERING_DESC=Ha ez az opció engedélyezve van, minden könyvelési bejegyzéshez megadhat egy kódot, így csoportosíthatja a különböző könyvelési mozgásokat. A múltban, amikor a különböző folyóiratokat egymástól függetlenül kezelték, ez a funkció szükséges volt a különböző folyóiratok mozgássorainak csoportosításához. A Dolibarr könyvelésnél azonban egy ilyen követőkód, az úgynevezett "%s span>" már automatikusan mentve van, tehát az automatikus feliratozás már megtörtént, hibaveszély nélkül, így ez a funkció használhatatlanná vált a szokásos használat során. A kézi feliratozási funkció azoknak a végfelhasználóknak van biztosítva, akik nem igazán bíznak a számviteli adatátvitelt végző számítógépes motorban. +ACCOUNTING_ENABLE_LETTERING_DESC=When this options is enabled, you can define, on each accounting entry, a code so you can group different accounting movements together. In the past, when different journals was managed independently, this feature was necessary to group movement lines of different journals together. However, with Dolibarr accountancy, such a tracking code, called "%s" is already saved automatically, so an automatic lettering is already done, with no risk of error so this feature has become useless for a common usage. Manual lettering feature is provided for end users that really don't trust the computer engine making the transfer of data in accountancy. EnablingThisFeatureIsNotNecessary=Ennek a funkciónak az engedélyezése már nem szükséges a szigorú számviteli kezeléshez. ACCOUNTING_ENABLE_AUTOLETTERING=Engedélyezze az automatikus feliratozást a könyvelésbe való áttéréskor ACCOUNTING_ENABLE_AUTOLETTERING_DESC=A betűk kódja automatikusan generálódik és növekszik, és nem a végfelhasználó választja ki diff --git a/htdocs/langs/hu_HU/admin.lang b/htdocs/langs/hu_HU/admin.lang index b21062fbb77..c2d0d00530e 100644 --- a/htdocs/langs/hu_HU/admin.lang +++ b/htdocs/langs/hu_HU/admin.lang @@ -62,7 +62,7 @@ UploadNewTemplate=Új sablon(ok) feltöltése FormToTestFileUploadForm=A fájlfeltöltés tesztelésének űrlapja (beállítás szerint) ModuleMustBeEnabled=A(z) %s modult/alkalmazást engedélyezni kell ModuleIsEnabled=A(z) %s modul/alkalmazás engedélyezve van -IfModuleEnabled=Megjegyzés: az 'igen' csak akkor eredményes, ha a %s modul engedélyezve van +IfModuleEnabled=Megjegyzés: az 'igen' csak akkor eredményes, ha a %s modul engedélyezve van RemoveLock=Távolítsa el / nevezze át a(z) %s fájlt, ha létezik, hogy engedélyezze a Frissítés / Telepítés eszközt. RestoreLock=Állítsa vissza az %s fájlt, csak olvasási jogokat engedélyezzen, hogy le lehessen tiltani a Frissítés / Telepítés eszköz további használatát. SecuritySetup=Biztonsági beállítások @@ -366,9 +366,9 @@ GenericMaskCodes2={cccc} az n karakteres ügyfélkód
{cccc000} GenericMaskCodes3=Az összes többi karakter a maszkban érintetlen marad.
A szóközök nem megengedettek.
GenericMaskCodes3EAN=A maszk összes többi karaktere érintetlen marad (kivéve a * vagy a ? jelet az EAN13 13. pozíciójában).
Szóközök nem megengedettek.
Az EAN13-ban a 13. pozícióban lévő utolsó } után az utolsó karakternek * vagy ? . Ezt a számított kulcs váltja fel.
GenericMaskCodes4a=Példa a partner 99. %s-jára a következővel: The20202 -01-31:
-GenericMaskCodes4b=Példa a következőre: partner, létrehozva: 2023. 01. 31.:b0aaa8784dz0 span class='notranslate'>
+GenericMaskCodes4b=Example on third party created on 2023-01-31:
GenericMaskCodes4c=Példa a 2023. 01. 31-én létrehozott termékre:
-GenericMaskCodes5=ABC{yy}{mm}-{000000} a b0aee833650
a következőt adja: 0199-ZZZ/31/XXX
IN{yy}{mm}-{0000}-{t} a következőt adja meg: IN2301-0099-A, ha a vállalat típusa „Responsable Inscripto” „A_RI” típusú kóddal +GenericMaskCodes5=ABC{yy}{mm}-{000000} will give ABC2301-000099
{0000+100@1}-ZZZ/{dd}/XXX will give 0199-ZZZ/31/XXX
IN{yy}{mm}-{0000}-{t} will give IN2301-0099-A if the type of company is 'Responsable Inscripto' with code for type that is 'A_RI' GenericNumRefModelDesc=Vissza szabható számot a meghatározott maszkot. ServerAvailableOnIPOrPort=Kiszolgálóhoz elérhető a címen %s %s porton ServerNotAvailableOnIPOrPort=A kiszolgáló nem elérhető címen %s %s porton @@ -464,7 +464,7 @@ ExtrafieldParamHelpPassword=Ha ezt a mezőt üresen hagyja, akkor ez az érték ExtrafieldParamHelpselect=Az értékek listájának olyan sorokat kell tartalmaznia, amelyek formátuma kulcs,érték (ahol a kulcs nem lehet '0')

például:
1,érték1
2,érték2
kód3,érték3< br>...

Ahhoz, hogy a lista egy másik kiegészítő attribútumlistától függ:
1,érték1|opciók_szülőlista_kódja:szülőkulcs
2,érték2|opciók_ parent_list_code:parent_key

Ahhoz, hogy a lista egy másik listától függjön:
1,érték1|szülőlista_kódja:parent_key
2,value2 |parent_list_code:parent_key ExtrafieldParamHelpcheckbox=Az értékek listájának soroknak kell lennie formátumkulccsal, értékkel (ahol a kulcs nem lehet „0”)

például:
1,érték1
2,érték2
3, érték3
... ExtrafieldParamHelpradio=Az értékek listájának soroknak kell lennie formátumkulccsal, értékkel (ahol a kulcs nem lehet „0”)

például:
1,érték1
2,érték2
3, érték3
... -ExtrafieldParamHelpsellist=Az értékek listája egy táblázatból származik
Syntax: table_name:label_field:id_field::filtersql
Példa: c_idtypent:libelle ::filtersql

– az id_field szükségszerűen elsődleges int kulcs
- A filtersql egy SQL feltétel. Ez lehet egy egyszerű teszt (pl. active=1), hogy csak az aktív értéket jelenítse meg
A $ID$ is használható a szűrőben, amely az aktuális objektum aktuális azonosítója
Ha SELECT-et szeretne használni a szűrőben, használja a $SEL$ kulcsszót a befecskendezés elleni védelem megkerüléséhez.
ha extra mezőkre szeretne szűrni használja a szintaxist extra.fieldcode=... (ahol a mezőkód az extramező kódja)

In megrendelés, hogy a lista egy másik kiegészítő attribútumlistától függ:
c_typent:libelle:id:options_b049271<08181fcze81 /span>parent_list_code
|parent_column:filter

class='notranslate'>megrendelés, hogy a lista egy másik listától függjön:
c_typent:libelle:id: span>parent_list_code|parent_column:filter +ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filtersql
Example: c_typent:libelle:id::filtersql

- id_field is necessarily a primary int key
- filtersql is a SQL condition. It can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter which is the current id of current object
To use a SELECT into the filter use the keyword $SEL$ to bypass anti-injection protection.
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=Az értékek listája egy táblázatból származik.
Szintaxis: tábla_neve:címkemező:id_mező::filtersql
Példa: c_typent:libelle:id::filtersql

a szűrő egy egyszerű teszt is lehet (pl. active=1 ) csak az aktív érték megjelenítéséhez
Használhatja a $ID$-t is a szűrőben, ez az aktuális objektum aktuális azonosítója
A szűrőben történő KIVÁLASZTÁSHOZ használja a $SEL$
ha extramezőkre szeretne szűrni, használja szintaxis extra.fieldcode=... (ahol a mezőkód az extramező kódja)

Ahhoz, hogy a lista egy másik kiegészítő attribútumlistától függ:
c_typent:libelle:id:options_ parent_list_code|parent_column:filter

Ahhoz, hogy a lista egy másik listától függjön:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=A paramétereknek ObjectName:Classpath típusúnak kell lennie
Szintaxis: ObjectName:Classpath ExtrafieldParamHelpSeparator=Hagyja üresen egyszerű elválasztó esetén
Állítsa ezt 1-re összecsukódó elválasztó esetén (alapértelmezés szerint nyitva van új munkamenethez, majd az állapot megmarad minden felhasználói munkamenethez)
Állítsa ezt 2-re összecsukódó elválasztó esetén (alapértelmezés szerint összecsukva új munkamenet, akkor az állapot minden felhasználói munkamenetre megmarad) @@ -1197,6 +1197,7 @@ Skin=Bőr téma DefaultSkin=Alapértelmezett skin téma MaxSizeList=Maximális hossza lista DefaultMaxSizeList=A listák alapértelmezett maximális hossza +DisplayGrandTotalInList=Display grand total (for all pages) in lists footer DefaultMaxSizeShortList=A rövid listák alapértelmezett maximális hossza (azaz az ügyfélkártyán) MessageOfDay=A nap üzenete MessageLogin=Belépés oldalra üzenet @@ -1860,7 +1861,7 @@ PastDelayVCalExport=Ne exportáljon régebbi eseményt mint SecurityKey = Biztonsági kulcs ##### ClickToDial ##### ClickToDialSetup=Kattintson a Tárcsázás modul beállítása -ClickToDialUrlDesc=Az URL akkor hívható meg, amikor a telefon képére kattintanak. Az URL-ben használhat címkéket
__PHONETO__ lecserélve a hívni kívánt személy telefonszámára
__PHONEFROM__ helyére a hívó személy telefonszáma kerül (az Öné)
__LOGIN__b09a4b739f1 span>, amelyet a clicktodial bejelentkezés váltja fel (a felhasználói kártyán meghatározott)
__PASS__ , amely a clicktodial jelszóra lesz cserélve (a felhasználói kártyán van meghatározva). +ClickToDialUrlDesc=URL called when a click on phone picto is done. In URL, you can use tags
__PHONETO__ that will be replaced with the phone number of person to call
__PHONEFROM__ that will be replaced with phone number of calling person (yours)
__LOGIN__ that will be replaced with clicktodial login (defined on user card)
__PASS__ that will be replaced with clicktodial password (defined on user card). ClickToDialDesc=Ez a modul megváltoztatja a telefonszámokat, amikor asztali számítógépet használ, kattintható hivatkozásokká. Egy kattintás hívja a számot. Ez használható a telefonhívás indítására, ha egy puha telefont használ az asztalon, vagy ha például SIP protokollon alapuló CTI rendszert használ. Megjegyzés: Okostelefon használatakor a telefonszámok mindig rákattinthatók. ClickToDialUseTelLink=Csak egy "tel:" hivatkozást használjon a telefonszámokon ClickToDialUseTelLinkDesc=Használja ezt a módszert, ha felhasználói szoftveres telefonnal vagy szoftveres interfésszel rendelkeznek, amely ugyanarra a számítógépre van telepítve, mint a böngésző, és akkor hívható meg, amikor a böngészőjében a „tel:” betűvel kezdődő hivatkozásra kattint. Ha olyan hivatkozásra van szüksége, amely "sip:"-vel kezdődik, vagy teljes szervermegoldásra (nincs szükség helyi szoftvertelepítésre), akkor ezt "Nem"-re kell állítania, és ki kell töltenie a következő mezőt. @@ -2291,7 +2292,7 @@ APIsAreNotEnabled=Az API-modulok nincsenek engedélyezve YouShouldSetThisToOff=Állítsa ezt 0-ra vagy ki InstallAndUpgradeLockedBy=A telepítést és a frissítéseket a %s fájl zárolja InstallLockedBy=A telepítést/újratelepítést a következő fájl zárolja: %s -InstallOfAddonIsNotBlocked=A kiegészítők telepítése nincs zárolva. Hozzon létre egy installmodules.lock fájlt a %s a külső kiegészítők/modulok telepítésének blokkolásához. +InstallOfAddonIsNotBlocked=Installations of addons are not locked. Create a file installmodules.lock into directory %s to block installations of external addons/modules. OldImplementation=Régi megvalósítás PDF_SHOW_LINK_TO_ONLINE_PAYMENT=Ha egyes online fizetési modulok engedélyezve vannak (Paypal, Stripe, ...), adjon hozzá egy hivatkozást a PDF-fájlhoz az online fizetéshez DashboardDisableGlobal=Globálisan letiltja a nyitott objektumok összes mutatóját @@ -2405,8 +2406,8 @@ NotAvailableByDefaultEnabledOnModuleActivation=Alapértelmezés szerint nincs l CSSPage=CSS stílus Defaultfortype=Alaptértelmezett DefaultForTypeDesc=Alapértelmezés szerint használt sablon új e-mail létrehozásakor a sablontípushoz -OptionXShouldBeEnabledInModuleY=A "%s" opciót engedélyezni kell a %s -OptionXIsCorrectlyEnabledInModuleY=A "%s" opció engedélyezve van a %s +OptionXShouldBeEnabledInModuleY=Option "%s" should be enabled into module %s +OptionXIsCorrectlyEnabledInModuleY=Option "%s" is enabled into module %s AllowOnLineSign=On Line aláírás engedélyezése AtBottomOfPage=Az oldal alján FailedAuth=sikertelen hitelesítések @@ -2433,3 +2434,12 @@ UrlPublicInterfaceHelpAdmin=It is possible to define an alias to the web server ExportUseForce=Use the parameter -f ExportUseForceHelp=Force to continue the export even when an error is found (Backup may not be reliable) CustomPrompt=Custom prompts +AiDescription=AI (Artificial Intelligence) features +AiDescriptionLong=Provides AI (Artificial Intelligence) features in different part of the application. Need external AI API. +AI_KEY_API_CHATGPT= Key for ChatGPT IA api +AiSetup=AI module setup +AiCustomPrompt=AI customs prompt +AI_CONFIGURATIONS_PROMPT=Custom prompt +ImageGeneration=Image generation +AIPromptForFeatures=AI custom prompts for features +EnterAnIP=Enter an IP address diff --git a/htdocs/langs/hu_HU/cashdesk.lang b/htdocs/langs/hu_HU/cashdesk.lang index 453052b1acd..2abc36229c0 100644 --- a/htdocs/langs/hu_HU/cashdesk.lang +++ b/htdocs/langs/hu_HU/cashdesk.lang @@ -136,7 +136,7 @@ PrintWithoutDetailsLabelDefault=Alapértelmezett vonalcímke részletek nélkül PrintWithoutDetails=Nyomtatás részletek nélkül YearNotDefined=Az év nincs megadva TakeposBarcodeRuleToInsertProduct=Vonalkód szabály a termék beillesztéséhez -TakeposBarcodeRuleToInsertProductDesc=Szabály a termékreferencia kinyerésére + egy mennyiség a beolvasott vonalkódból.
Ha üres (alapértelmezett érték), az alkalmazás a teljes beolvasott vonalkódot használja a termék megtalálásához.

Ha meg van adva, a szintaxisnak a következőnek kell lennie:
ref:NB+qu:NB+qd:NB+other:NB
ahol NB a a beolvasott vonalkódból az adatok kinyeréséhez használandó karakterek száma:
refb09a4b739f17f8z : termékreferencia
qu : mennyiség tétel (egységek) beillesztésekor beállítva
qd: mennyiség – beállítva az elem beszúrásakor (tizedesjegyek)
egyéb karakter +TakeposBarcodeRuleToInsertProductDesc=Rule to extract the product reference + a quantity from a scanned barcode.
If empty (default value), application will use the full barcode scanned to find the product.

If defined, syntax must be:
ref:NB+qu:NB+qd:NB+other:NB
where NB is the number of characters to use to extract data from the scanned barcode with:
ref : product reference
qu : quantity to set when inserting item (units)
qd : quantity to set when inserting item (decimals)
other : others characters AlreadyPrinted=Már kinyomtatva HideCategories=A kategóriakiválasztás teljes szakaszának elrejtése HideStockOnLine=A készlet elrejtése az interneten diff --git a/htdocs/langs/hu_HU/companies.lang b/htdocs/langs/hu_HU/companies.lang index e19e60a96cf..684ad2e8cd7 100644 --- a/htdocs/langs/hu_HU/companies.lang +++ b/htdocs/langs/hu_HU/companies.lang @@ -493,7 +493,7 @@ CurrentOutstandingBill=Jelenlegi kintlévőség OutstandingBill=Maximális kintlévőség OutstandingBillReached=Max. a kintlévőség elért OrderMinAmount=Minimális rendelési összeg -MonkeyNumRefModelDesc=Adjon vissza egy számot a következő formátumban: %syymm-nnnn a vevő kódhoz és a b0ecb2ec87f49ffz span>yymm-nnnn a szállítói kódhoz, ahol az yy az év, a mm a hónap és az nnnn egy szekvenciális automatikusan növekvő szám, törés és 0-hoz való visszatérés nélkül. +MonkeyNumRefModelDesc=Return a number in the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequential auto-incrementing number with no break and no return to 0. LeopardNumRefModelDesc=A kód szabad. Ez a kód bármikor módosítható. ManagingDirectors=Vezető(k) neve (ügyvezető, elnök, igazgató) MergeOriginThirdparty=Duplikált partner (a partnert törlésre kerül) diff --git a/htdocs/langs/hu_HU/errors.lang b/htdocs/langs/hu_HU/errors.lang index c60cb817c31..e5e2b40d3e3 100644 --- a/htdocs/langs/hu_HU/errors.lang +++ b/htdocs/langs/hu_HU/errors.lang @@ -134,7 +134,7 @@ ErrorLoginDoesNotExists=A(z) %s bejelentkezési névvel rendelkező felha ErrorLoginHasNoEmail=Ennek a felhasználónak nincs e-mail címe. A folyamat megszakítva. ErrorBadValueForCode=A biztonsági kód hibás értéke. Próbálja újra új értékkel... ErrorBothFieldCantBeNegative=A %s és a %s mező nem lehet negatív -ErrorFieldCantBeNegativeOnInvoice=A %s mező nem lehet negatív ezen a típusú számla. Ha kedvezménysort kell hozzáadnia, először csak hozza létre a kedvezményt (a harmadik féltől származó kártya „%s” mezőjéből), és alkalmazza a számla. +ErrorFieldCantBeNegativeOnInvoice=Field %s cannot be negative on this type of invoice. If you need to add a discount line, just create the discount first (from field '%s' in third-party card) and apply it to the invoice. ErrorLinesCantBeNegativeForOneVATRate=A sorok összessége (adó nélkül) nem lehet negatív egy adott nem null áfakulcs esetén (Negatív összeget találtunk a(z) %s%% áfakulcshoz. ErrorLinesCantBeNegativeOnDeposits=A sorok nem lehetnek negatívak a betétben. Problémákkal kell szembenéznie, amikor a végszámlán szereplő letétet fel kell használnia. ErrorQtyForCustomerInvoiceCantBeNegative=A vevői számlák sorának mennyisége nem lehet negatív diff --git a/htdocs/langs/hu_HU/main.lang b/htdocs/langs/hu_HU/main.lang index 2c1c7826bd6..66bf548f225 100644 --- a/htdocs/langs/hu_HU/main.lang +++ b/htdocs/langs/hu_HU/main.lang @@ -420,6 +420,8 @@ TotalTTCShort=Végösszeg (bruttó) TotalHT=Összesen (nettó) TotalHTforthispage=Összesen (nettó) ehhez az oldalhoz Totalforthispage=Végösszeg ezen az oldalon +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=Végösszeg (bruttó) TotalTTCToYourCredit=Végösszeg (bruttó) terhelve az ön számláján TotalVAT=ÁFA összesen @@ -647,6 +649,7 @@ ReportName=Jelentés neve ReportPeriod=Jelentés periódusa ReportDescription=Leírás Report=Jelentés +Reports=Riportok Keyword=Kulcsszó Origin=Eredet Legend=Jelmagyarázat diff --git a/htdocs/langs/hu_HU/modulebuilder.lang b/htdocs/langs/hu_HU/modulebuilder.lang index cb6dd2c1bd7..d273d94874c 100644 --- a/htdocs/langs/hu_HU/modulebuilder.lang +++ b/htdocs/langs/hu_HU/modulebuilder.lang @@ -94,7 +94,7 @@ SeeExamples=Példákat lásd itt EnabledDesc=Feltétel, hogy ez a mező aktív legyen.

Példák:
1
isModEnabled('anothermodule')
getDolGlobalString('MYMODULE_OPTION')==2 VisibleDesc=Látható a mező? (Példák: 0=soha nem látható, 1=látható a listán és az űrlapok létrehozása/frissítése/megtekintése, 2=csak a listán látható, 3=csak a létrehozási/frissítési/megtekintési űrlapon látható (nem a listákon), 4=látható a listákon és csak az űrlap frissítése/megtekintése (nem létrehozás), 5=Csak a listán és a megtekintési űrlapon látható (nem létrehozás, nem frissítés).

Negatív érték használata azt jelenti, hogy a mező alapértelmezés szerint nem jelenik meg a listán, de kiválasztható megtekintésre). ItCanBeAnExpression=Ez lehet egy kifejezés. Példa:
preg_match('/public/', $_SERVER['PHP_SELF'])?0:1
$user ->hasRight('holiday', 'define_holiday')?1:5 -DisplayOnPdfDesc=Jelenítse meg ezt a mezőt a kompatibilis PDF dokumentumokon, a pozíciót a „Pozíció” mezővel kezelheti.
A következő dokumentumhoz:
0 = nincs megjelenítve
1 = megjelenítés
2 = csak akkor jelenik meg, ha nem üres

b0e7843947 span>Dokumentumsorok esetén:

0 = nincs megjelenítve
1 = megjelenik egy oszlopban
3 = megjelenítés a sorleíró oszlopban a leírás után
4 = megjelenítés a leírás utáni oszlopban csak ha nem üres +DisplayOnPdfDesc=Display this field on compatible PDF documents, you can manage position with "Position" field.
For document :
0 = not displayed
1 = display
2 = display only if not empty

For document lines :
0 = not displayed
1 = displayed in a column
3 = display in line description column after the description
4 = display in description column after the description only if not empty DisplayOnPdf=PDF-en IsAMeasureDesc=A mező értéke összesíthető, hogy a listába kerüljön az összeg? (Példák: 1 vagy 0) SearchAllDesc=Használják a mezőt a gyorskereső eszközből történő kereséshez? (Példák: 1 vagy 0) @@ -148,7 +148,7 @@ CSSListClass=CSS a listához NotEditable=Nem szerkeszthető ForeignKey=Idegen kulcs ForeignKeyDesc=Ha ennek a mezőnek az értékét garantálni kell egy másik táblába. Adja meg a következő szintaxisnak megfelelő értéket: tablename.parentfieldtocheck -TypeOfFieldsHelp=Példa:
varchar(99)
e-mail
telefon
ip
url
jelszóccfda149bfz0 b03 span>double(24,8)
real
text
html
dátum
dátumidő
időbélyeg
egész
integer:ClassName:relativepath/to/classfile.class.php[:1[:filter]]b0342bccfda<19bcc0 /span>
"1" azt jelenti, hogy a kombó után hozzáadunk egy + gombot a rekord létrehozásához.
"szűrő" Univerzális szűrő szintaktikai feltétele, példa: '((status:=:1) AND (fk_user:=:__USER_ID__) AND (entity:IN:(__SHARED_ENTITIES__))' +TypeOfFieldsHelp=Example:
varchar(99)
email
phone
ip
url
password
double(24,8)
real
text
html
date
datetime
timestamp
integer
integer:ClassName:relativepath/to/classfile.class.php[:1[:filter]]

'1' means we add a + button after the combo to create the record
'filter' is an Universal Filter syntax condition, example: '((status:=:1) AND (fk_user:=:__USER_ID__) AND (entity:IN:(__SHARED_ENTITIES__))' TypeOfFieldsHelpIntro=Ez a mező/attribútum típusa. AsciiToHtmlConverter=Ascii-HTML konverter AsciiToPdfConverter=Ascii PDF konvertáló @@ -180,7 +180,7 @@ FailedToAddCodeIntoDescriptor=Nem sikerült kódot adni a leíróhoz. Ellenőriz DictionariesCreated=A szótár %s sikeresen létrehozva DictionaryDeleted=Szótár %s PropertyModuleUpdated=A %s tulajdon frissítése sikeresen megtörtént -InfoForApiFile=* Amikor először generál fájlt, az összes metódus létrejön minden objektumhoz.
* Ha rákattint a remove gombra, akkor csak eltávolítja a kijelölt objektum. +InfoForApiFile=* When you generate file for the first time then all methods will be created for each object.
* When you click in remove you just remove all methods for the selected object. SetupFile=Oldal a modul beállításához EmailingSelectors=Emails selectors EmailingSelectorDesc=Itt létrehozhatja és szerkesztheti az osztályfájlokat, hogy új e-mail célválasztókat biztosítson a tömeges e-mail modulhoz diff --git a/htdocs/langs/hu_HU/stocks.lang b/htdocs/langs/hu_HU/stocks.lang index 8c89788babf..d843aea6208 100644 --- a/htdocs/langs/hu_HU/stocks.lang +++ b/htdocs/langs/hu_HU/stocks.lang @@ -282,7 +282,7 @@ ModuleStockTransferName=Speciális készlettranszfer ModuleStockTransferDesc=A készlettranszfer fejlett kezelése transzfer lap generálásával StockTransferNew=Új készlet átadása StockTransferList=Készlettranszferek listája -ConfirmValidateStockTransfer=Biztosan érvényesíteni kívánja ezt a részvényátruházást a következő hivatkozással: %s span> ? +ConfirmValidateStockTransfer=Are you sure you want to validate this stocks transfer with the reference %s ? ConfirmDestock=Készletek csökkenése átutalással %s ConfirmDestockCancel=Törölje a készletcsökkentést %s átutalással DestockAllProduct=A készletek csökkenése diff --git a/htdocs/langs/hu_HU/website.lang b/htdocs/langs/hu_HU/website.lang index 7e8b0e389fd..2f58ebebb77 100644 --- a/htdocs/langs/hu_HU/website.lang +++ b/htdocs/langs/hu_HU/website.lang @@ -63,8 +63,8 @@ YouCanEditHtmlSourceckeditor=A HTML forráskódot a szerkesztő "Forrás" gombj YouCanEditHtmlSource=
You can include PHP code into this source using tags <?php ?>. The following global variables are available: $conf, $db, $mysoc, $user, $website, $websitepage, $weblangs, $pagelangs.

You can also include content of another Page/Container with the following syntax:
<?php includeContainer('alias_of_container_to_include'); ?>

You can make a redirect to another Page/Container with the following syntax (Note: do not output any content before a redirect):
<?php redirectToContainer('alias_of_container_to_redirect_to'); ?>

To add a link to another page, use the syntax:
<a href="alias_of_page_to_link_to.php">mylink<a>

To include a link to download a file stored into the documents directory, use the document.php wrapper:
Example, for a file into documents/ecm (need to be logged), syntax is:
<a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext">
For a file into documents/medias (open directory for public access), syntax is:
<a href="/document.php?modulepart=medias&file=[relative_dir/]filename.ext">
For a file shared with a share link (open access using the sharing hash key of file), syntax is:
<a href="/document.php?hashp=publicsharekeyoffile">
YouCanEditHtmlSource1=
To include an image stored into the documents directory, use the viewimage.php wrapper.
Example, for an image into documents/medias (open directory for public access), syntax is:
<img src="/viewimage.php?modulepart=medias&file=[relative_dir/]filename.ext">
YouCanEditHtmlSource2=Megosztási hivatkozással megosztott kép esetén (nyílt hozzáférés a fájl megosztási hash kulcsával) a szintaxis:
<img src="/viewimage.php?hashp=12345679012..."> ;
-YouCanEditHtmlSource3=Egy PHP-objektum képének URL-címének lekéréséhez használja a
< parancsot. span>img src="<?php print getImagePublicURLOfObject($object, 1, "_small") ?> class='notranslate'>>
-YouCanEditHtmlSourceMore=
További példák HTML-re vagy dinamikus kódra a wiki dokumentációban >.
+YouCanEditHtmlSource3=To get the URL of the image of a PHP object, use
<img src="<?php print getImagePublicURLOfObject($object, 1, "_small") ?>">
+YouCanEditHtmlSourceMore=
More examples of HTML or dynamic code available on the wiki documentation.
ClonePage=Oldal/tároló klónozása CloneSite=Webhely klónozása SiteAdded=Webhely hozzáadva diff --git a/htdocs/langs/hu_HU/workflow.lang b/htdocs/langs/hu_HU/workflow.lang index f3cc4586f58..d0bf9943a1c 100644 --- a/htdocs/langs/hu_HU/workflow.lang +++ b/htdocs/langs/hu_HU/workflow.lang @@ -12,13 +12,13 @@ descWORKFLOW_TICKET_CREATE_INTERVENTION=A jegy létrehozásakor automatikusan ho descWORKFLOW_ORDER_CLASSIFY_BILLED_PROPAL=A linkelt forrásra vonatkozó ajánlatok besorolása számlázottként, ha az értékesítés megrendelés számlázásra van állítva (és ha a megrendelés összege megegyezik a az aláírt linkelt ajánlatok teljes összege) descWORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL=A hivatkozott forrásajánlatok besorolása számlázottként, ha a vevő számla érvényes (és ha a számla megegyezik az aláírt linkelt ajánlatok teljes összegével) descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER=A linkelt forrásértékesítések megrendelés besorolása számlázottként, ha a vevő számla érvényes ( és ha a számla összege megegyezik a kapcsolt értékesítési rendelések teljes összegével). Ha 1 számla van érvényesítve n rendelésre, akkor ez az összes rendelést is számlázottra állíthatja. -descWORKFLOW_INVOICE_CLASSIFY_BILLED_ORDER=A kapcsolt forrásból származó értékesítési rendeléseket számlázottként kell besorolni, ha a vevő számla fizetésre van állítva (és ha a számla megegyezik a kapcsolt értékesítési rendelések teljes összegével). Ha 1 számla beállított n rendelést számláz ki, akkor ez az összes rendelést is számlázottra állíthatja. +descWORKFLOW_INVOICE_CLASSIFY_BILLED_ORDER=Classify linked source sales orders as billed when a customer invoice is set to paid (and if the amount of the invoice is the same as the total amount of the linked sales orders). If you have 1 invoice set billed for n orders, this may set all orders to billed too. descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING=A linkelt forrásból származó értékesítési rendelések besorolása szállítottként a szállítmány érvényesítésekor (és ha az összes szállítmány által kiszállított mennyiség megegyezik a frissítendő megrendelés-ban szereplővel) descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING_CLOSED=A kapcsolt forrás értékesítési rendelés besorolása a szállítmány lezárásakor (és ha az összes szállítmány által kiszállított mennyiség megegyezik a frissítendő rendelésben szereplővel) # Autoclassify purchase proposal descWORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL=A kapcsolódó forrásszállítói ajánlat besorolása számlázottként, ha a számla szállító érvényesítve van (és ha a számla összege megegyezik a teljes összeggel a linkelt ajánlatok mennyisége) # Autoclassify purchase order -descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER=A megrendelés linkelt forrásból történő vásárlás besorolása számlázottként, ha a számla szállító érvényesítve van (és ha a számla megegyezik a kapcsolt rendelések teljes összegével) +descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER=Classify linked source purchase order as billed when vendor invoice is validated (and if the amount of the invoice is the same as the total amount of the linked orders) descWORKFLOW_ORDER_CLASSIFY_RECEIVED_RECEPTION=A kapcsolt forrásból származó beszerzési rendelés besorolása beérkezettként, amikor egy fogadás érvényesül (és ha az összes fogadás által beérkezett mennyiség megegyezik a frissítendő beszerzési rendelésben szereplő mennyiséggel) descWORKFLOW_ORDER_CLASSIFY_RECEIVED_RECEPTION_CLOSED=A kapcsolt forrásból származó beszerzési rendelés besorolása a fogadás lezárásakor (és ha az összes fogadás által kapott mennyiség megegyezik a frissítendő beszerzési rendelésben szereplő mennyiséggel) # Autoclassify shipment diff --git a/htdocs/langs/id_ID/main.lang b/htdocs/langs/id_ID/main.lang index 7fdd1deaba9..2cc3d42f6c2 100644 --- a/htdocs/langs/id_ID/main.lang +++ b/htdocs/langs/id_ID/main.lang @@ -420,6 +420,8 @@ TotalTTCShort=Total (termasuk pajak) TotalHT=Total (tidak termasuk pajak) TotalHTforthispage=Total (tidak termasuk pajak) pada halaman ini Totalforthispage=Total untuk halaman ini +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=Total (termasuk pajak) TotalTTCToYourCredit=Total (termasuk pajak) ke kredit Anda TotalVAT=Total pajak @@ -647,6 +649,7 @@ ReportName=Nama laporan ReportPeriod=Periode laporan ReportDescription=Keterangan Report=Melaporkan +Reports=Laporan Keyword=Kata kunci Origin=Asal Legend=Legenda diff --git a/htdocs/langs/is_IS/main.lang b/htdocs/langs/is_IS/main.lang index 3e15d0bb175..390a0374425 100644 --- a/htdocs/langs/is_IS/main.lang +++ b/htdocs/langs/is_IS/main.lang @@ -420,6 +420,8 @@ TotalTTCShort=Samtals (Inc skatt) TotalHT=Total (excl. tax) TotalHTforthispage=Total (excl. tax) for this page Totalforthispage=Total for this page +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=Samtals (Inc skatt) TotalTTCToYourCredit=Samtals (Inc skatta) til að kredit TotalVAT=Samtals VSK @@ -647,6 +649,7 @@ ReportName=Heiti skýrslu ReportPeriod=Skýrsla tímabils ReportDescription=Lýsing Report=Skýrsla +Reports=Reports Keyword=Keyword Origin=Origin Legend=Legend diff --git a/htdocs/langs/it_CH/datapolicy.lang b/htdocs/langs/it_CH/datapolicy.lang deleted file mode 100644 index b73db9bf6c4..00000000000 --- a/htdocs/langs/it_CH/datapolicy.lang +++ /dev/null @@ -1,11 +0,0 @@ -# Dolibarr language file - Source file is en_US - datapolicy -datapolicySetupPage =Depending on the laws of your countries (Example Article 5 of the GDPR), personal data must be kept for a period not exceeding the duration the data is needed for the purpose for which it was collected, except for archival purposes.
The deletion will be done automatically after a certain duration without events (the duration which you will have indicated below). -DATAPOLICYSUBJECTMAIL =Subject of the email -DATAPOLICYREFUSE =Message after disagreement -TXTLINKDATAPOLICYREFUSE =Text for the link "disagreement" -DATAPOLICY_opposition_traitement =Opposes to the processing of his personal data -DATAPOLICY_opposition_prospection =Opposes to the processing of his personal data for the purposes of prospecting -DATAPOLICY_date =Date of agreement/disagreement GDPR -DATAPOLICY_send =Date agreement email sent -=Due to a technical problem, we were unable to register your choice. We apologize for that. Contact us to notify us your choice. -NUMBER_MONTH_BEFORE_DELETION =Number of months before deletion diff --git a/htdocs/langs/it_CH/languages.lang b/htdocs/langs/it_CH/languages.lang deleted file mode 100644 index 879813b70ad..00000000000 --- a/htdocs/langs/it_CH/languages.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - languages -Language_en_AE=English (United Arab Emirates) diff --git a/htdocs/langs/it_IT/main.lang b/htdocs/langs/it_IT/main.lang index 9ef43db1347..7b8ac27966d 100644 --- a/htdocs/langs/it_IT/main.lang +++ b/htdocs/langs/it_IT/main.lang @@ -420,6 +420,8 @@ TotalTTCShort=Totale (IVA inc.) TotalHT=Totale Netto TotalHTforthispage=Totale Netto per questa Pagina Totalforthispage=Totale in questa pagina +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=Totale (IVA inclusa) TotalTTCToYourCredit=Totale (IVA inclusa) a tuo credito TotalVAT=Totale IVA @@ -647,6 +649,7 @@ ReportName=Nome report ReportPeriod=Periodo report ReportDescription=Descrizione Report=Report +Reports=Report Keyword=Chiave Origin=Origine Legend=Legenda @@ -1098,7 +1101,7 @@ Deletedraft=Elimina bozza ConfirmMassDraftDeletion=Draft mass delete confirmation FileSharedViaALink=Public file shared via link SelectAThirdPartyFirst=Seleziona prima un Soggetto terzo... -YouAreCurrentlyInSandboxMode=Sei attualmente nella modalità "sandbox" di %s +YouAreCurrentlyInSandboxMode=Sei attualmente nella modalità "sandbox" di %s Inventory=Inventario AnalyticCode=Analytic code TMenuMRP=MRP diff --git a/htdocs/langs/ja_JP/main.lang b/htdocs/langs/ja_JP/main.lang index d3ea84e1e0f..8777f016f7c 100644 --- a/htdocs/langs/ja_JP/main.lang +++ b/htdocs/langs/ja_JP/main.lang @@ -420,6 +420,8 @@ TotalTTCShort=合計(税込) TotalHT=小計(税抜) TotalHTforthispage=このページの合計(税抜き) Totalforthispage=このページの合計 +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=合計(税込) TotalTTCToYourCredit=あなたのクレジットの合計(税込) TotalVAT=税額合計 @@ -647,6 +649,7 @@ ReportName=報告書名 ReportPeriod=報告書期間 ReportDescription=説明 Report=報告書 +Reports=Reports Keyword=キーワード Origin=原産地 Legend=凡例 @@ -720,7 +723,7 @@ GoBack=戻る CanBeModifiedIfOk=有効であれば変更することができる CanBeModifiedIfKo=有効でない場合は変更することができる ValueIsValid=値が有効。 -ValueIsNotValid=値が無効 +ValueIsNotValid=値が無効 RecordCreatedSuccessfully=レコードが正常に作成された RecordModifiedSuccessfully=レコードが正常に変更 RecordsModified=%sレコード(s)が変更された @@ -793,7 +796,7 @@ CoreErrorMessage=申し訳ないが、エラーが発生した。システム管 CreditCard=クレジットカード ValidatePayment=支払を検証 CreditOrDebitCard=クレジットカードまたはデビットカード -FieldsWithAreMandatory=%sのフィールドは必須 +FieldsWithAreMandatory=%sのフィールドは必須 FieldsWithIsForPublic= %s のフィールドは、構成員の公開リストに表示される。これを望まない場合は、「公開」ボックスのチェックを外すること。 AccordingToGeoIPDatabase=(GeoIP変換による) Line=ライン @@ -804,7 +807,7 @@ ToTest=テスト ValidateBefore=この機能を使用する前に、アイテムが要検証済 Visibility=可視性 Totalizable=合計可能 -TotalizableDesc=このフィールドはリストで合計可能 +TotalizableDesc=このフィールドはリストで合計可能 Private=非公開 Hidden=非表示 Resources=資源 @@ -1184,7 +1187,7 @@ CategTypeNotFound=レコードのタイプのタグタイプが見つからな SupervisorNotFound=スーパーバイザーが見つからない CopiedToClipboard=クリップボードにコピー InformationOnLinkToContract=この金額は、契約の全行の合計にすぎない。時間の概念は考慮されていない。 -ConfirmCancel=本当にキャンセルしたいか +ConfirmCancel=本当にキャンセルしたいか EmailMsgID=メールMsgID EmailDate=メール日付 SetToStatus=ステータス %s に設定 diff --git a/htdocs/langs/ja_JP/products.lang b/htdocs/langs/ja_JP/products.lang index 963a1a4a07a..69d6556460d 100644 --- a/htdocs/langs/ja_JP/products.lang +++ b/htdocs/langs/ja_JP/products.lang @@ -208,11 +208,6 @@ unitSET=セット unitS=秒 unitH=時間 unitD=日 -unitG=グラム -unitM=メートル -unitLM=直線メートル -unitM2=平方メートル -unitM3=立方メートル unitL=リットル unitT=トン unitKG=kg @@ -221,6 +216,7 @@ unitMG=mg unitLB=ポンド unitOZ=オンス unitM=メートル +unitLM=直線メートル unitDM=dm unitCM=cm unitMM=mm @@ -435,5 +431,8 @@ ConfirmEditExtrafield = 変更するエクストラフィールドを選択す ConfirmEditExtrafieldQuestion = このエクストラフィールドを変更してもよいか? ModifyValueExtrafields = エクストラフィールドの値を変更する OrProductsWithCategories=またはタグ/カテゴリのある製品 -WarningTransferBatchStockMouvToGlobal = この 製品 を逆シリアル化する場合、シリアル化されたすべての 在庫 はグローバル 在庫 に変換される。 +WarningTransferBatchStockMouvToGlobal = If you want to deserialize this product, all its serialized stock will be transformed into global stock WarningConvertFromBatchToSerial=現在 製品 の数量が 2 以上ある場合、この選択に切り替えると、製品 が引き続き存在することになる。同じバッチの異なるオブジェクトを使用する (一意のシリアル番号が必要な場合)。これを修正するためのインベントリまたは手動の 在庫 移動が完了するまで、重複は残る。 +AllowStockMovementVariantParent=Also records stock movements on parent products of variant products +AllowStockMovementVariantParentHelp=By default, a parent of a variant is a virtual product, so no stock is managed for it. By enabling this option, a stock will be managed for parent products and each time a stock quantity is modified for a variant product, the same quantity will be modified for the parent product. You should not need this option, except if you are using variant to manage the same product than parent (but with different descriptions, prices...) +ConfirmSetToDraftInventory=下書きステータスに戻したいか?
現在在庫に設定されている数量はリセットされる。 diff --git a/htdocs/langs/ka_GE/main.lang b/htdocs/langs/ka_GE/main.lang index 6f71ac82865..5446a557de0 100644 --- a/htdocs/langs/ka_GE/main.lang +++ b/htdocs/langs/ka_GE/main.lang @@ -420,6 +420,8 @@ TotalTTCShort=Total (inc. tax) TotalHT=Total (excl. tax) TotalHTforthispage=Total (excl. tax) for this page Totalforthispage=Total for this page +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=Total (inc. tax) TotalTTCToYourCredit=Total (inc. tax) to your credit TotalVAT=Total tax @@ -647,6 +649,7 @@ ReportName=Report name ReportPeriod=Report period ReportDescription=Description Report=Report +Reports=Reports Keyword=Keyword Origin=Origin Legend=Legend diff --git a/htdocs/langs/kk_KZ/accountancy.lang b/htdocs/langs/kk_KZ/accountancy.lang index 72e651b8d5b..62d3f68a4a2 100644 --- a/htdocs/langs/kk_KZ/accountancy.lang +++ b/htdocs/langs/kk_KZ/accountancy.lang @@ -287,7 +287,7 @@ TotalVente=Салыққа дейінгі жалпы айналым TotalMarge=Жалпы сату маржасы DescVentilCustomer=Шот жоспарынан өнім шотына байланыстырылған (немесе жоқ) тұтынушы шот-фактураларының тізімі осы жерден қараңыз. -DescVentilMore=Көп жағдайда, егер сіз алдын ала анықталған өнімдерді немесе қызметтерді пайдалансаңыз және өнім/қызмет картасына есептік жазбаны (шот жоспарынан) орнатсаңыз, қолданба сіздің шот-фактура жолдары мен диаграммаңыздың есеп шоты арасындағы барлық байланыстыруды жасай алады. есептік жазбаларды бір рет басу арқылы "%s"b0a65d071f6fc90z >. Есептік жазба өнім/қызмет карталарында орнатылмаған болса немесе тіркелгіге байланыстырылмаған кейбір жолдарыңыз болса, "%s". +DescVentilMore=In most cases, if you use predefined products or services and you set the account (from chart of account) on the product/service card, the application will be able to make all the binding between your invoice lines and the accounting account of your chart of accounts, just in one click with the button "%s". If account was not set on product/service cards or if you still have some lines not bound to an account, you will have to make a manual binding from the menu "%s". DescVentilDoneCustomer=Мұнда тұтынушылардың шот-фактураларының тізімі мен олардың өнім шоты шоттар жоспарынан қараңыз DescVentilTodoCustomer=Шот жоспарындағы өнім тіркелгісімен байланысы жоқ шот-фактура жолдарын байланыстырыңыз ChangeAccount=Таңдалған жолдар үшін өнім/қызмет шотын (шот жоспарынан) келесі есептік жазбамен өзгертіңіз: @@ -352,7 +352,7 @@ ACCOUNTING_DISABLE_BINDING_ON_SALES=Сату кезінде бухгалтерл ACCOUNTING_DISABLE_BINDING_ON_PURCHASES=Сатып алу кезінде бухгалтерлік есепте байланыстыруды және аударуды өшіру (жеткізушілердің шот -фактуралары бухгалтерлік есепке алынбайды) ACCOUNTING_DISABLE_BINDING_ON_EXPENSEREPORTS=Бухгалтерлік есепте міндеттемелер мен аударымдарды өшіру (шығындар туралы есептер бухгалтерлік есепке алынбайды) ACCOUNTING_ENABLE_LETTERING=Бухгалтерлік есепте әріптер функциясын қосыңыз -ACCOUNTING_ENABLE_LETTERING_DESC=Бұл опциялар қосылғанда, әр есеп жазбасында кодты анықтауға болады, осылайша әртүрлі есеп қозғалыстарын бірге топтауға болады. Бұрын әртүрлі журналдар дербес басқарылатын кезде, бұл мүмкіндік әртүрлі журналдардың қозғалыс сызықтарын біріктіру үшін қажет болды. Дегенмен, Dolibarr бухгалтериясында мұндай бақылау коды "%sb09a4b739fz01f деп аталады. span>" қазірдің өзінде автоматты түрде сақталған, сондықтан автоматты әріптер жасалып қойған, қате қаупі жоқ, сондықтан бұл мүмкіндік жалпы пайдалану үшін пайдасыз болып қалды. Қолмен әріптерді жазу мүмкіндігі бухгалтерлік есепте деректерді тасымалдауды жүзеге асыратын компьютер қозғалтқышына шынымен сенбейтін соңғы пайдаланушылар үшін қамтамасыз етілген. +ACCOUNTING_ENABLE_LETTERING_DESC=When this options is enabled, you can define, on each accounting entry, a code so you can group different accounting movements together. In the past, when different journals was managed independently, this feature was necessary to group movement lines of different journals together. However, with Dolibarr accountancy, such a tracking code, called "%s" is already saved automatically, so an automatic lettering is already done, with no risk of error so this feature has become useless for a common usage. Manual lettering feature is provided for end users that really don't trust the computer engine making the transfer of data in accountancy. EnablingThisFeatureIsNotNecessary=Бұл мүмкіндікті қосу бухгалтерлік есепті қатаң басқару үшін қажет емес. ACCOUNTING_ENABLE_AUTOLETTERING=Бухгалтерлік есепке көшкен кезде автоматты әріптерді қосыңыз ACCOUNTING_ENABLE_AUTOLETTERING_DESC=Әріптің коды автоматты түрде жасалады және көбейтіледі және соңғы пайдаланушы таңдамайды @@ -360,7 +360,7 @@ ACCOUNTING_LETTERING_NBLETTERS=Әріптік кодты жасау кезінд ACCOUNTING_LETTERING_NBLETTERS_DESC=Кейбір бухгалтерлік бағдарламалық құрал тек екі әріптік кодты қабылдайды. Бұл параметр осы аспектіні орнатуға мүмкіндік береді. Әдепкі әріптер саны үш. OptionsAdvanced=Қосымша опциялар ACCOUNTING_FORCE_ENABLE_VAT_REVERSE_CHARGE=Жеткізушінің сатып алулары бойынша ҚҚС кері төлемін басқаруды белсендіріңіз -ACCOUNTING_FORCE_ENABLE_VAT_REVERSE_CHARGE_DESC=Бұл опция қосылғанда, жеткізушінің немесе берілген жеткізушінің шот-фактурасын бухгалтерлік есепке басқаша аудару керектігін анықтауға болады: «<» шотында анықталған шот жоспарынан 2 берілген шот бойынша бухгалтерлік есепке қосымша дебет пен кредиттік желі жасалады. span class='notranslate'>%s" орнату беті. +ACCOUNTING_FORCE_ENABLE_VAT_REVERSE_CHARGE_DESC=When this option is enabled, you can define that a supplier or a given vendor invoice must be transferred into accountancy differently: A additional debit and a credit line will generated into the accounting on 2 given accounts from the chart of account defined into the "%s" setup page. ## Export NotExportLettering=Файлды жасау кезінде әріпті экспорттамаңыз diff --git a/htdocs/langs/kk_KZ/admin.lang b/htdocs/langs/kk_KZ/admin.lang index 6a83bf89f54..e40c2e042e5 100644 --- a/htdocs/langs/kk_KZ/admin.lang +++ b/htdocs/langs/kk_KZ/admin.lang @@ -268,8 +268,8 @@ OtherResources=Басқа ресурстар ExternalResources=Сыртқы ресурстар SocialNetworks=Әлеуметтік желілер SocialNetworkId=Әлеуметтік желі идентификаторы -ForDocumentationSeeWiki=Пайдаланушы немесе әзірлеуші құжаттамасы (Doc, FAQ...),
Dolibarr Wiki сайтын қараңыз:
%sb0e4078d -ForAnswersSeeForum=Кез келген басқа сұрақтар/анықтама үшін Dolibarr форумын пайдалана аласыз:
b00fab50ead9320 /span>%s
+ForDocumentationSeeWiki=For user or developer documentation (Doc, FAQs...),
take a look at the Dolibarr Wiki:
%s +ForAnswersSeeForum=For any other questions/help, you can use the Dolibarr forum:
%s HelpCenterDesc1=Міне, Dolibarr көмегімен көмек пен қолдау алуға арналған бірнеше ресурстар. HelpCenterDesc2=Бұл ресурстардың кейбірі ағылшын тілінде қол жетімді. CurrentMenuHandler=Ағымдағы мәзір өңдегіші @@ -366,9 +366,9 @@ GenericMaskCodes2= {cccc} n таңбалы клиент коды
< GenericMaskCodes3=Масканың барлық басқа кейіпкерлері өзгеріссіз қалады.
Бос орындарға рұқсат жоқ.
GenericMaskCodes3EAN=Маскадағы барлық басқа таңбалар өзгеріссіз қалады ( * немесе? EAN13 -те 13 -ші позициядан басқа).
Бос орындарға рұқсат жоқ.
EAN13 кезінде 13 -ші позициядағы соңғы} -дан кейінгі соңғы таңба * немесе? . Ол есептелген кілтпен ауыстырылады.
GenericMaskCodes4a=Үшінші тарап TheCompany компаниясының 99-шы %s үлгісі, 2023-01-31:
-GenericMaskCodes4b=31.01.2023 күні жасалған үшінші тараптағы мысал:b0342fccfda19b > -GenericMaskCodes4c=2023-01-31 жасалған өнім туралы мысал:b0342fccfda19b -GenericMaskCodes5=ABC{yy}{mm}-{000000} b0aee833608 береді span>ABC2301-000099

b0aee83365837{100@ }-ZZZ/{dd}/XXX
0199-ZZZ/31/XXX
IN{yy}{mm}-{0000}-{t} IN2301-0099-Ab09a4b739f17f80 болса, береді "A_RI" түрінің коды бар "Жауапты Inscripto" +GenericMaskCodes4b=Example on third party created on 2023-01-31:
+GenericMaskCodes4c=Example on product created on 2023-01-31:
+GenericMaskCodes5=ABC{yy}{mm}-{000000} will give ABC2301-000099
{0000+100@1}-ZZZ/{dd}/XXX will give 0199-ZZZ/31/XXX
IN{yy}{mm}-{0000}-{t} will give IN2301-0099-A if the type of company is 'Responsable Inscripto' with code for type that is 'A_RI' GenericNumRefModelDesc=Анықталған маска бойынша теңшелетін нөмірді қайтарады. ServerAvailableOnIPOrPort=Сервер %s а0ае83365837fz0 %s
портында бар ServerNotAvailableOnIPOrPort= %s %s адресінде сервер жоқ @@ -464,7 +464,7 @@ ExtrafieldParamHelpPassword=Бұл өрісті бос қалдырсаңыз, ExtrafieldParamHelpselect=Мәндер тізімі формат кілті бар жолдар болуы керек, онда мән (мұнда кілт '0' болмауы керек)

1, мән1
2, мән2 a0342fcc3f342f030429342943f04f34f34f34f34f34f34f34f34f34f3f34f319f342f34f3f34f34f34f34f34f34f34f34f31943 басқа толықтыратын атрибут тізімнен байланысты тізімі:
1, 1-мән | options_ parent_list_code : parent_key
2, 2-мән | options_ parent_list_code : parent_key

басқа тізімге байланысты тізімі болуы үшін:
1, значение1 | parent_list_code : parent_key
2, мән2 | parent_list_code : parent_key ExtrafieldParamHelpcheckbox=Мәндер тізімі формат кілті бар жолдар болуы керек, мән (мұнда кілт '0' болмауы керек)

1, мән1
2, мән2 a0342fccff319f03 ExtrafieldParamHelpradio=Мәндер тізімі формат кілті бар жолдар болуы керек, мән (мұнда кілт '0' болмауы керек)

1, мән1
2, мән2 a0342fccff319f03 -ExtrafieldParamHelpsellist=Мәндер тізімі кестеден алынған
Синтаксис: table_name:label_field:id_field::filtersql
Мысалы: c_typent: ::filtersql

- id_field міндетті түрде негізгі int кілті болып табыладыb0342fcczf01> - filtersql — SQL шарты. Бұл тек белсенді мәнді көрсету үшін қарапайым сынақ (мысалы, active=1) болуы мүмкін
Сонымен қатар ағымдағы нысанның ағымдағы идентификаторы
Сүзгіде ТАҢДАУ функциясын пайдалану үшін, инъекцияға қарсы қорғанысты айналып өту үшін $SEL$ кілт сөзін пайдаланыңыз.
Егер қосымша өрістерде сүзгіңіз келсе extra.fieldcode=... синтаксисін пайдаланыңыз (мұндағы өріс коды - экстра өріс коды)

басқа қосымша төлсипат тізіміне байланысты тізім:
c_typent:libelle:id:options_parent_list_codeb0ae64758baclum>033npar +ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filtersql
Example: c_typent:libelle:id::filtersql

- id_field is necessarily a primary int key
- filtersql is a SQL condition. It can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter which is the current id of current object
To use a SELECT into the filter use the keyword $SEL$ to bypass anti-injection protection.
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=Мәндер тізімі
кестесінен келеді Синтаксис: table_name: label_field: id_field :: filtersql
Мысал: c_typent: libelle: id :: filtersql
a0342 a0342 a03f2 a0342fccff19 $ ID $ сүзгіні қолдана алады, бұл ағымдағы нысанның идентификаторы
Сүзгіде SELECT жасау үшін $ SEL $
пайдаланыңыз, егер сіз қосымша өрістерде сүзгіңіз келсе, extra.fieldcode = ... синтаксисін қолданыңыз (өріс коды - бұл extrafield коды)

басқа толықтыратын атрибут тізімнен байланысты тізімі болуы үшін:
c_typent: Libelle: ID: options_ parent_list_code | parent_column: сүзгі

басқа тізімге байланысты тізімі болуы үшін:
c_typent: жала жабу: идентификатор: parent_list_code | ата -аналық баған: сүзгі ExtrafieldParamHelplink=Параметрлер ObjectName болуы керек: Classpath
Синтаксис: ObjectName: Classpath ExtrafieldParamHelpSeparator=Қарапайым сепаратор үшін бос ұстаңыз күй әр пайдаланушы сеансы алдында сақталады) @@ -483,7 +483,7 @@ ExternalModule=Сыртқы модуль InstalledInto=%s каталогына орнатылды BarcodeInitForThirdparties=Үшінші тараптар үшін жаппай штрих-код BarcodeInitForProductsOrServices=Штрих -кодтың жаппай басталуы немесе өнімдерге немесе қызметтерге қалпына келтіру -CurrentlyNWithoutBarCode=Қазіргі уақытта сізде %s жазбасы %s b0ecb4dedefined bar8cod . +CurrentlyNWithoutBarCode=Currently, you have %s record on %s %s without barcode defined. InitEmptyBarCode=%s бос штрих-кодтар үшін бастапқы мән EraseAllCurrentBarCode=Штрих -кодтың барлық ағымдағы мәндерін өшіріңіз ConfirmEraseAllCurrentBarCode=Штрих -кодтың барлық ағымдағы мәндерін шынымен өшіргіңіз келе ме? @@ -1197,6 +1197,7 @@ Skin=Тері тақырыбы DefaultSkin=Терінің әдепкі тақырыбы MaxSizeList=Тізім үшін максималды ұзындық DefaultMaxSizeList=Тізімдер үшін әдепкі максималды ұзындық +DisplayGrandTotalInList=Display grand total (for all pages) in lists footer DefaultMaxSizeShortList=Қысқа тізімдер үшін әдепкі максималды ұзындық (яғни тұтынушы картасында) MessageOfDay=Күннің хабарламасы MessageLogin=Кіру бетінің хабарламасы @@ -1281,7 +1282,7 @@ AvailableModules=Қол жетімді бағдарлама/модульдер ToActivateModule=Модульдерді іске қосу үшін «Аймақтарды реттеу» бөліміне өтіңіз (Үй-> Орнату-> Модульдер). SessionTimeOut=Сеанстың уақыты SessionExplanation=Бұл нөмір, егер сеанс тазалағышты PHP ішкі сеанс тазалаушысымен жасаса (және басқа ештеңе жоқ) сеанстың аяқталмайтынына кепілдік береді. PHP сеансының ішкі тазалағышы осы кідірістен кейін сеанстың аяқталатынына кепілдік бермейді. Ол осы кідірістен кейін және сеанс тазалағыш іске қосылғанда аяқталады, сондықтан әрбір %s/%s қатынау кезінде, бірақ басқа сеанстар арқылы кіру кезінде (егер мән 0 болса, бұл тек сессияның тазалануын білдіреді) процесс).
Ескертпе: сыртқы сеансты тазалау механизмі бар кейбір серверлерде (cron debian, ubuntu ... астында), сеанс сыртқы орнатумен анықталған кезеңнен кейін жойылуы мүмкін, мұнда қандай мән енгізілгеніне қарамастан. -SessionsPurgedByExternalSystem=Бұл сервердегі сеанстар сыртқы механизммен (Debian астында cron, ubuntu ...) тазартылған сияқты, мүмкін әрбір %s секунд (= параметрдің мәні session.gc_maxlifetime
құпия сөз. +YouMustRunCommandFromCommandLineAfterLoginToUser=You must run this command from command line after login to a shell with user %s or you must add -W option at end of command line to provide %s password. YourPHPDoesNotHaveSSLSupport=PHP -де SSL функциялары жоқ DownloadMoreSkins=Жүктеу үшін қосымша мұқабалар SimpleNumRefModelDesc=Анықтамалық нөмірді %syymm-nnnn форматында қайтарады, мұнда yy-жыл, мм-ай және nnnn-қалпына келтірусіз автоматты түрде қосылатын нөмір. @@ -1860,7 +1861,7 @@ PastDelayVCalExport=Ескі оқиғаны экспорттамаңыз SecurityKey = Қауіпсіздік кілті ##### ClickToDial ##### ClickToDialSetup=Теру үшін модульді орнату түймешігін басыңыз -ClickToDialUrlDesc=Телефон суретін басқан кезде URL шақырылады. URL мекенжайында
__PHONETO__b09a4b739f17f8z болатын тегтерді пайдалануға болады. қоңырау шалатын адамның телефон нөмірімен ауыстырылды
__PHONEFROM__b09a4b739f017
__LOGIN__b09a41709f span> ол басу арқылы логинмен ауыстырылады (пайдаланушы картасында анықталған)
__PASS__ ол басу арқылы терілетін құпия сөзбен ауыстырылады (пайдаланушы картасында анықталған). +ClickToDialUrlDesc=URL called when a click on phone picto is done. In URL, you can use tags
__PHONETO__ that will be replaced with the phone number of person to call
__PHONEFROM__ that will be replaced with phone number of calling person (yours)
__LOGIN__ that will be replaced with clicktodial login (defined on user card)
__PASS__ that will be replaced with clicktodial password (defined on user card). ClickToDialDesc=Бұл модуль жұмыс үстелінің компьютерін пайдаланған кезде телефон нөмірлерін басылатын сілтемелерге өзгертеді. Бір рет басу арқылы нөмірге қоңырау шалынады. Бұл жұмыс үстелінде жұмсақ телефонды пайдалану кезінде немесе мысалы SIP протоколына негізделген CTI жүйесін пайдалану кезінде телефон қоңырауын бастау үшін пайдаланылуы мүмкін. Ескерту: Смартфонды пайдаланған кезде телефон нөмірлері әрқашан басылады. ClickToDialUseTelLink=Телефон нөмірлеріндегі «tel:» сілтемесін пайдаланыңыз ClickToDialUseTelLinkDesc=Егер сіздің пайдаланушыларыңызда браузермен бір компьютерде орнатылған және шолғышта «tel:» деп басталатын сілтемені басқанда қоңырау шалатын телефон немесе бағдарламалық жасақтама интерфейсі болса, бұл әдісті қолданыңыз. Егер сізге «sip:» деп басталатын сілтеме немесе сервердің толық шешімі қажет болса (жергілікті бағдарламалық жасақтаманы орнатудың қажеті жоқ), оны «Жоқ» деп қойып, келесі өрісті толтыру қажет. @@ -2114,7 +2115,7 @@ YouCanDeleteFileOnServerWith=Бұл файлды пәрмен жолы арқы ChartLoaded=Есеп схемасы жүктелді SocialNetworkSetup=Әлеуметтік желілер модулін орнату EnableFeatureFor= %s мүмкіндіктерін қосу -VATIsUsedIsOff=Ескертпе: Сату салығын немесе ҚҚС пайдалану опциясы %s - %s, сондықтан сатылым салығы немесе пайдаланылған ҚҚС сату үшін әрқашан 0 болады. +VATIsUsedIsOff=Note: The option to use Sales Tax or VAT has been set to Off in the menu %s - %s, so Sales tax or Vat used will always be 0 for sales. SwapSenderAndRecipientOnPDF=PDF құжаттарында жіберуші мен алушының мекенжайын ауыстырыңыз FeatureSupportedOnTextFieldsOnly=Ескерту, мүмкіндік тек мәтін өрістерінде және құрама тізімдерде қолдау көрсетеді. Сонымен қатар URL параметрі action = create немесе action = edit орнатылуы керек НЕМЕСЕ беттің атауы бұл мүмкіндікті іске қосу үшін 'new.php' деп аяқталуы керек. EmailCollector=Электрондық пошта жинаушы @@ -2291,7 +2292,7 @@ APIsAreNotEnabled=API модульдері қосылмаған YouShouldSetThisToOff=Мұны 0 немесе өшіруге қою керек InstallAndUpgradeLockedBy=Орнату мен жаңарту %s файлымен құлыпталған. InstallLockedBy=Орнату/қайта орнату %s файлымен құлыпталған. -InstallOfAddonIsNotBlocked=Қосымшалардың орнатулары құлыпталмаған. installmodules.lock файлын b0aee83365837fzclass0 каталогына жасаңыз ='notranslate'>%s
сыртқы қосымшаларды/модульдерді орнатуды блоктау үшін. +InstallOfAddonIsNotBlocked=Installations of addons are not locked. Create a file installmodules.lock into directory %s to block installations of external addons/modules. OldImplementation=Ескі іске асыру PDF_SHOW_LINK_TO_ONLINE_PAYMENT=Кейбір онлайн төлем модульдері қосылған болса (Paypal, Stripe, ...), онлайн төлем жасау үшін PDF файлына сілтеме қосыңыз. DashboardDisableGlobal=Ашық нысандардың барлық бас бармақтарын жаһандық түрде өшіріңіз @@ -2405,8 +2406,8 @@ NotAvailableByDefaultEnabledOnModuleActivation=Әдепкі бойынша жа CSSPage=CSS стилі Defaultfortype=Әдепкі DefaultForTypeDesc=Үлгі түрі үшін жаңа электрондық поштаны жасау кезінде әдепкі бойынша пайдаланылатын үлгі -OptionXShouldBeEnabledInModuleY="%s" опциясы %s -OptionXIsCorrectlyEnabledInModuleY="%s" опциясы %s +OptionXShouldBeEnabledInModuleY=Option "%s" should be enabled into module %s +OptionXIsCorrectlyEnabledInModuleY=Option "%s" is enabled into module %s AllowOnLineSign=On line қолтаңбаға рұқсат беру AtBottomOfPage=Беттің төменгі жағында FailedAuth=сәтсіз аутентификациялар @@ -2433,3 +2434,12 @@ UrlPublicInterfaceHelpAdmin=It is possible to define an alias to the web server ExportUseForce=Use the parameter -f ExportUseForceHelp=Force to continue the export even when an error is found (Backup may not be reliable) CustomPrompt=Custom prompts +AiDescription=AI (Artificial Intelligence) features +AiDescriptionLong=Provides AI (Artificial Intelligence) features in different part of the application. Need external AI API. +AI_KEY_API_CHATGPT= Key for ChatGPT IA api +AiSetup=AI module setup +AiCustomPrompt=AI customs prompt +AI_CONFIGURATIONS_PROMPT=Custom prompt +ImageGeneration=Image generation +AIPromptForFeatures=AI custom prompts for features +EnterAnIP=Enter an IP address diff --git a/htdocs/langs/kk_KZ/banks.lang b/htdocs/langs/kk_KZ/banks.lang index 41d157a459d..b4f1336be02 100644 --- a/htdocs/langs/kk_KZ/banks.lang +++ b/htdocs/langs/kk_KZ/banks.lang @@ -115,7 +115,7 @@ MenuBankInternalTransfer=Ішкі аударым TransferDesc=Бір шоттан екіншісіне аудару үшін ішкі аударымды қолданыңыз, қосымшада екі жазба жазылады: бастапқы шоттағы дебет және мақсатты шоттағы несие. Бұл транзакция үшін сол сома, белгі және күн қолданылады. TransferFrom=Қайдан TransferTo=Кімге -TransferFromToDone=%s файлынан %s
%s жазылды. +TransferFromToDone=A transfer from %s to %s of %s %s has been recorded. CheckTransmitter=Жіберуші ValidateCheckReceipt=Бұл чек түбіртегін растау керек пе? ConfirmValidateCheckReceipt=Бұл чек түбіртегін тексеру үшін жібергіңіз келетініне сенімдісіз бе? Тексерілгеннен кейін ешқандай өзгерту мүмкін болмайды. diff --git a/htdocs/langs/kk_KZ/bills.lang b/htdocs/langs/kk_KZ/bills.lang index 888d05acc84..eb5982489c2 100644 --- a/htdocs/langs/kk_KZ/bills.lang +++ b/htdocs/langs/kk_KZ/bills.lang @@ -188,7 +188,7 @@ SuppliersDraftInvoices=Жеткізуші шот -фактуралар Unpaid=Төленбеген ErrorNoPaymentDefined=Қате Төлем анықталмады ConfirmDeleteBill=Бұл шот -фактураны шынымен жойғыңыз келе ме? -ConfirmValidateBill=Осы шот-фактураны %s сілтемесі арқылы растағыңыз келетініне сенімдісіз бе >? +ConfirmValidateBill=Are you sure you want to validate this invoice with the reference %s? ConfirmUnvalidateBill= %s шот -фактураны жоба күйіне өзгерткіңіз келетініне сенімдісіз бе? ConfirmClassifyPaidBill= %s шот -фактураны төленген күйге өзгерткіңіз келетініне сенімдісіз бе? ConfirmCancelBill= %s шот -фактурасынан бас тартқыңыз келетініне сенімдісіз бе? @@ -210,7 +210,7 @@ ConfirmClassifyPaidPartiallyReasonDiscountVatDesc=Кейбір елдерде б ConfirmClassifyPaidPartiallyReasonAvoirDesc=Егер басқалары сәйкес келмесе, бұл таңдауды қолданыңыз ConfirmClassifyPaidPartiallyReasonBadCustomerDesc= нашар клиент - бұл қарызын төлеуден бас тартатын клиент. ConfirmClassifyPaidPartiallyReasonProductReturnedDesc=Бұл таңдау төлем аяқталмаған кезде қолданылады, себебі кейбір өнімдер қайтарылды -ConfirmClassifyPaidPartiallyReasonBankChargeDesc=Төленбеген сома - делдалдық банк комиссиялары, тікелей b0aee3836z шегеріледі. >дұрыс сома Тұтынушы төлеген. +ConfirmClassifyPaidPartiallyReasonBankChargeDesc=The unpaid amount is intermediary bank fees, deducted directly from the correct amount paid by the Customer. ConfirmClassifyPaidPartiallyReasonWithholdingTaxDesc=Төленбеген сома ешқашан төленбейді, өйткені бұл ұсталатын салық ConfirmClassifyPaidPartiallyReasonOtherDesc=Егер басқалары сәйкес келмесе, бұл таңдауды қолданыңыз, мысалы, келесі жағдайда:
- кейбір өнімдер қайтарылғандықтан, төлем аяқталмады несиелік нотаны құру арқылы бухгалтерлік есеп жүйесінде. ConfirmClassifyPaidPartiallyReasonBadSupplierDesc=жаман жеткізуші - біз төлеуден бас тартатын жеткізуші. @@ -569,9 +569,9 @@ PDFCrabeDescription=Crabe шот -фактурасының PDF үлгісі. Ш PDFSpongeDescription=Шот -фактураның PDF үлгісі губка. Шот -фактураның толық үлгісі PDFCrevetteDescription=Шот -фактура PDF үлгісі Crevette. Жағдайлы шот -фактуралар үшін шот -фактураның толық үлгісі TerreNumRefModelDesc1=Стандартты шот-фактуралар үшін %syymm-nnnn және несиелік жазбалар үшін %syymm-nnnn пішіміндегі қайтару нөмірі, мұнда yy жыл, мм ай және nnnn үзіліссіз және 0-ге қайтарылмаған дәйекті автоматты өсетін сан -MarsNumRefModelDesc1=Стандартты шот-фактуралар үшін %syymm-nnnn, ауыстыру шот-фактуралары үшін %syymm-nnnn, %syymm-nnnn бастапқы төлем шоттары үшін және %syymm-nnnn несиелік ноталар үшін, мұнда yy – жыл, мм – ай және nnnn – дәйекті авто- Үзіліссіз және 0-ге қайтарылмаған көбейту +MarsNumRefModelDesc1=Return number in the format %syymm-nnnn for standard invoices, %syymm-nnnn for replacement invoices, %syymm-nnnn for down payment invoices and %syymm-nnnn for credit notes where yy is year, mm is month and nnnn is a sequential auto-incrementing number with no break and no return to 0 TerreNumRefModelError=$ Syymm -ден басталатын шот бұрыннан бар және бұл реттілік моделіне сәйкес келмейді. Бұл модульді іске қосу үшін оны алып тастаңыз немесе атын өзгертіңіз. -CactusNumRefModelDesc1=Стандартты шот-фактуралар үшін %syymm-nnnn, несиелік жазбалар үшін %syymm-nnnn және %syymm-nnnn бастапқы төлем шоттары үшін, мұнда yy – жыл, мм – ай және nnnn – үзіліссіз және 0-ге қайтарылмаған дәйекті автоматты ұлғайтылатын сан. +CactusNumRefModelDesc1=Return number in the format %syymm-nnnn for standard invoices, %syymm-nnnn for credit notes and %syymm-nnnn for down payment invoices where yy is year, mm is month and nnnn is a sequential auto-incrementing number with no break and no return to 0 EarlyClosingReason=Ерте жабылу себебі EarlyClosingComment=Ерте жабылу жазбасы ##### Types de contacts ##### diff --git a/htdocs/langs/kk_KZ/cashdesk.lang b/htdocs/langs/kk_KZ/cashdesk.lang index aa71194da18..cb83a99d065 100644 --- a/htdocs/langs/kk_KZ/cashdesk.lang +++ b/htdocs/langs/kk_KZ/cashdesk.lang @@ -136,7 +136,7 @@ PrintWithoutDetailsLabelDefault=Мәліметсіз басып шығаруда PrintWithoutDetails=Егжей-тегжейсіз басып шығарыңыз YearNotDefined=Жылы анықталмаған TakeposBarcodeRuleToInsertProduct=Өнімді енгізу үшін штрих-код ережесі -TakeposBarcodeRuleToInsertProductDesc=Өнім анықтамасын + сканерленген штрих-кодтан мөлшерді шығару ережесі.
Егер бос болса (әдепкі мән), қолданба өнімді табу үшін сканерленген толық штрих-кодты пайдаланады.

Анықталған болса, синтаксис келесідей болуы керек:
notranslate class='notranslate
ref:NB+qu:NB+qd:NB+басқа:NB
сканерленген штрих-кодтан деректерді шығару үшін пайдаланылатын таңбалар саны:
refb09a4b789z : өнім анықтамасы
qu: элементті (бірліктер) енгізу кезінде орнату
qdb09a4b739f17f8z>quantity элементті (ондық сандар) кірістіру кезінде орнату
басқаb09a4b739f17f8>0 басқа таңбалар +TakeposBarcodeRuleToInsertProductDesc=Rule to extract the product reference + a quantity from a scanned barcode.
If empty (default value), application will use the full barcode scanned to find the product.

If defined, syntax must be:
ref:NB+qu:NB+qd:NB+other:NB
where NB is the number of characters to use to extract data from the scanned barcode with:
ref : product reference
qu : quantity to set when inserting item (units)
qd : quantity to set when inserting item (decimals)
other : others characters AlreadyPrinted=Қазірдің өзінде басып шығарылған HideCategories=Санат таңдауының бүкіл бөлімін жасырыңыз HideStockOnLine=Желідегі қорды жасыру diff --git a/htdocs/langs/kk_KZ/companies.lang b/htdocs/langs/kk_KZ/companies.lang index 3e87e650b77..3de9110be4f 100644 --- a/htdocs/langs/kk_KZ/companies.lang +++ b/htdocs/langs/kk_KZ/companies.lang @@ -333,7 +333,7 @@ CustomerRelativeDiscountShort=Салыстырмалы жеңілдік CustomerAbsoluteDiscountShort=Абсолютті жеңілдік CompanyHasRelativeDiscount=Бұл тұтынушыда %s%% әдепкі бойынша жеңілдік бар. CompanyHasNoRelativeDiscount=Бұл тұтынушыда әдепкі бойынша салыстырмалы жеңілдік жоқ -HasRelativeDiscountFromSupplier=Сізде %s%%
осы жеткізушімен +HasRelativeDiscountFromSupplier=You have a default discount of %s%% with this vendor HasNoRelativeDiscountFromSupplier=Бұл жеткізушіде әдепкі салыстырмалы жеңілдік жоқ CompanyHasAbsoluteDiscount=Бұл тұтынушыда %s %s үшін жеңілдіктер бар (несиелік жазбалар немесе бастапқы жарналар). CompanyHasDownPaymentOrCommercialDiscount=Бұл тұтынушыда %s %s үшін жеңілдіктер бар (коммерциялық, бастапқы жарналар). diff --git a/htdocs/langs/kk_KZ/compta.lang b/htdocs/langs/kk_KZ/compta.lang index 958966fba82..d8d3a7aecfc 100644 --- a/htdocs/langs/kk_KZ/compta.lang +++ b/htdocs/langs/kk_KZ/compta.lang @@ -175,10 +175,10 @@ AnnualSummaryDueDebtMode=Кірістер мен шығыстар балансы AnnualSummaryInputOutputMode=Кірістер мен шығыстар балансы, жылдық қорытынды AnnualByCompanies=Есептердің алдын ала анықталған топтары бойынша кірістер мен шығыстардың қалдығы AnnualByCompaniesDueDebtMode=Кірістер мен шығыстар балансы, алдын ала анықталған топтар бойынша егжей-тегжейлі, режим %sТалаптар-Борыштар809f Міндеттеме есебі деді. -AnnualByCompaniesInputOutputMode=Кірістер мен шығыстар балансы, алдын ала анықталған топтар бойынша егжей-тегжейлі, режим %sКірістер-шығындар қолма-қол ақшаны есепке алу деді. -SeeReportInInputOutputMode=%sтөлемдердің талдауын қараңыз%s
+SeeReportInBookkeepingMode=See %sanalysis of bookkeeping ledger table%s for a report based on Bookkeeping Ledger table RulesAmountWithTaxIncluded=- Көрсетілген сомалар барлық салықтарды қосқанда RulesAmountWithTaxExcluded=- Көрсетілген шот-фактуралардың сомалары барлық салықтарды есептемегенде RulesResultDue=- Оған барлық шот-фактуралар, шығыстар, ҚҚС, қайырылымдар, жалақы төленгеніне немесе төленбегеніне қарамастан кіреді.
- Ол шот-фактуралардың есеп айырысу күніне және төлем мерзіміне негізделген. шығындар немесе салық төлемдері. Жалақы үшін кезеңнің аяқталу күні пайдаланылады. diff --git a/htdocs/langs/kk_KZ/cron.lang b/htdocs/langs/kk_KZ/cron.lang index af9b464fcf4..a41598ec5e8 100644 --- a/htdocs/langs/kk_KZ/cron.lang +++ b/htdocs/langs/kk_KZ/cron.lang @@ -66,7 +66,7 @@ CronModuleHelp=Dolibarr модуль каталогының атауы (соны CronClassFileHelp=Жүктелетін салыстырмалы жол мен файл атауы (жол веб -сервердің каталогына қатысты).
Мысалы, Dolibarr Өнім объектісінің алу әдісін шақыру үшін htdocs/product/class/ product.class.php , сынып файлының атауының мәні a0342fccfda19bz8 өнім болып табылады a049271 CronObjectHelp=Жүктелетін объект атауы.
Мысалы, Dolibarr Product объектісінің алу әдісін шақыру үшін /htdocs/product/class/product.class.php, сынып файл атауының мәні
Өнім CronMethodHelp=Іске қосылатын объект әдісі.
Мысалы, Dolibarr Product объектісінің алу әдісін шақыру үшін /htdocs/product/class/product.class.php, әдіс мәні
алу -CronArgsHelp=Әдіс аргументтері.
Мысалы, Dolibarr өнімі нысанының /htdocs/product/class/product.class.php алу әдісін шақыру үшін, параметрлердің мәні
0, ProductRef +CronArgsHelp=The method arguments.
For example to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for parameters can be
0, ProductRef CronCommandHelp=Орындалатын жүйелік пәрмен жолы. CronCreateJob=Жаңа жоспарланған жұмысты құру CronFrom=Қайдан diff --git a/htdocs/langs/kk_KZ/errors.lang b/htdocs/langs/kk_KZ/errors.lang index bf7488551d8..c0fd9b4c91d 100644 --- a/htdocs/langs/kk_KZ/errors.lang +++ b/htdocs/langs/kk_KZ/errors.lang @@ -94,10 +94,10 @@ ErrorRecordIsUsedCantDelete=Жазбаны жою мүмкін емес. Ол қ ErrorModuleRequireJavascript=Бұл мүмкіндік жұмыс істеуі үшін JavaScript өшірілмеуі керек. JavaScript қосу/өшіру үшін Басты->Орнату->Дисплей мәзіріне өтіңіз. ErrorPasswordsMustMatch=Екі терілген пароль бір -біріне сәйкес келуі керек ErrorContactEMail=Техникалық қате орын алды. Келесі электрондық поштаға әкімшіге хабарласыңыз %s және қатені көрсетіңіз. Хабардағы %s кодын немесе экрандық көшірмесін қосыңыз осы бет. -ErrorWrongValueForField=Өріс %s: '%s
-ErrorHtmlInjectionForField=%s өрісі: '%s' рұқсат етілмеген зиянды деректерден тұрады +ErrorWrongValueForField=Field %s: '%s' does not match regex rule %s +ErrorHtmlInjectionForField=Field %s: The value '%s' contains a malicious data not allowed ErrorFieldValueNotIn=Өріс %s : « %s » мән %s %s саласында табылған жоқ -ErrorFieldRefNotIn=Өріс %s: '%s
бар сілтеме +ErrorFieldRefNotIn=Field %s: '%s' is not a %s existing ref ErrorMultipleRecordFoundFromRef=%s сілтемесінен іздеу кезінде бірнеше жазба табылды. Қай идентификаторды пайдалану керектігін білу мүмкін емес. ErrorsOnXLines=%s қателері табылды ErrorFileIsInfectedWithAVirus=Антивирустық бағдарлама файлды тексере алмады (файл вирус жұқтырған болуы мүмкін) @@ -263,7 +263,7 @@ ErrorReplaceStringEmpty=Қате, ауыстырылатын жол бос ErrorProductNeedBatchNumber=Қате, ' %s ' өніміне көп/сериялық нөмір қажет ErrorProductDoesNotNeedBatchNumber=Қате, ' %s ' өнімі көп/сериялық нөмірді қабылдамайды ErrorFailedToReadObject=Қате, %s түріндегі объект оқылмады -ErrorParameterMustBeEnabledToAllwoThisFeature=Қате, %s параметрі conf/conf.php<> пәрмен жолы интерфейсін ішкі жұмыс жоспарлаушысымен пайдалануға рұқсат беру үшін +ErrorParameterMustBeEnabledToAllwoThisFeature=Error, parameter %s must be enabled into conf/conf.php<> to allow use of Command Line Interface by the internal job scheduler ErrorLoginDateValidity=Қате, бұл кіру мерзімі жарамдылық мерзімінен тыс ErrorValueLength=' %s ' өрісінің ұзындығы ' %s ' жоғары болуы керек ErrorReservedKeyword=' %s ' сөзі сақталған кілт сөз @@ -311,7 +311,7 @@ ErrorValueCantBeNull=%s мәні нөл болуы мүмкін емес ErrorDateOfMovementLowerThanDateOfFileTransmission=Банк операциясының күні файлды жіберу күнінен төмен болмауы керек ErrorTooMuchFileInForm=Пішінде файлдар тым көп, максималды саны - %s файл(лар) ErrorSessionInvalidatedAfterPasswordChange=Сеанс құпия сөз, электрондық пошта, күй немесе жарамдылық мерзімі өзгергеннен кейін жарамсыз деп танылды. Қайта кіріңіз. -ErrorExistingPermission = Рұқсат %s notranslate
%s бұрыннан бар +ErrorExistingPermission = Permission %s for object %s already exists ErrorFieldExist=%s мәні бұрыннан бар ErrorEqualModule=Модуль %s ішінде жарамсыз ErrorFieldValue=%s мәні дұрыс емес diff --git a/htdocs/langs/kk_KZ/eventorganization.lang b/htdocs/langs/kk_KZ/eventorganization.lang index ffe44d94d22..010827fcc20 100644 --- a/htdocs/langs/kk_KZ/eventorganization.lang +++ b/htdocs/langs/kk_KZ/eventorganization.lang @@ -36,7 +36,7 @@ EventOrganizationSetup=Іс -шараны ұйымдастыру EventOrganization=Іс-шараны ұйымдастыру EventOrganizationSetupPage = Оқиғаны ұйымдастыру беті EVENTORGANIZATION_TASK_LABEL = Жоба расталған кезде автоматты түрде жасалатын тапсырмалар белгісі -EVENTORGANIZATION_TASK_LABELTooltip = Ұйымдастыру үшін оқиғаны растаған кезде, кейбір тапсырмалар жобада автоматты түрде жасалуы мүмкін

Мысалы:
Конференцияларға шақыру жіберу
Конференцияларға шақыру жіберу

Stencils қолданбасын тексеру
Қатысушылар үшін оқиғаға жазылуларды ашуb0342fccfda19b>az спикерлерге оқиға туралы
Бут хостерлеріне оқиға туралы еске салу жіберу
Қатысушыларға оқиға туралы еске салу жіберу +EVENTORGANIZATION_TASK_LABELTooltip = When you validate an event to organize, some tasks can be automatically created in the project

For example:
Send Call for Conferences
Send Call for Booths
Validate suggestions of Conferences
Validate application for Booths
Open subscriptions to the event for attendees
Send a remind of the event to speakers
Send a remind of the event to Booth hosters
Send a remind of the event to attendees EVENTORGANIZATION_TASK_LABELTooltip2=Тапсырмаларды автоматты түрде жасау қажет болмаса, бос қалдырыңыз. EVENTORGANIZATION_CATEG_THIRDPARTY_CONF = Біреу конференция ұсынған кезде үшінші тараптарға автоматты түрде қосылатын санат EVENTORGANIZATION_CATEG_THIRDPARTY_BOOTH = Үшінші тараптарға стенд ұсынылған кезде автоматты түрде қосылатын санат @@ -88,6 +88,7 @@ PriceOfRegistration=Тіркеу бағасы PriceOfRegistrationHelp=Тіркелу немесе шараға қатысу үшін төлейтін баға PriceOfBooth=Кабинаға жазылу бағасы PriceOfBoothHelp=Кабинаға жазылу бағасы +EventOrganizationICSLinkProject=Link ICS for the event EventOrganizationICSLink=Конференциялар үшін ICS сілтемесі ConferenceOrBoothInformation=Конференция немесе стенд туралы ақпарат Attendees=Қатысушылар diff --git a/htdocs/langs/kk_KZ/exports.lang b/htdocs/langs/kk_KZ/exports.lang index 5ff41eb9f0e..a55c0400c59 100644 --- a/htdocs/langs/kk_KZ/exports.lang +++ b/htdocs/langs/kk_KZ/exports.lang @@ -94,8 +94,8 @@ NbOfLinesOK=Қатесіз және ескертусіз жолдар саны: NbOfLinesImported=Сәтті импортталған жолдар саны: %s . DataComeFromNoWhere=Кірістіру мәні бастапқы файлдың ешқайсысынан болмайды. DataComeFromFileFieldNb=Енгізілетін мән бастапқы файлдағы %s бағанынан алынады. -DataComeFromIdFoundFromRef=Бастапқы файлдан келетін мән пайдаланылатын негізгі нысанның идентификаторын табу үшін пайдаланылады (сондықтан %s
бастапқы файлдан алынған сілтеме дерекқорда болуы керек). -DataComeFromIdFoundFromCodeId=Бастапқы файлдан келетін кодтың мәні пайдаланылатын негізгі нысанның идентификаторын табу үшін пайдаланылады (сондықтан бастапқы файлдағы код %s). Идентификаторды білсеңіз, оны кодтың орнына бастапқы файлда да пайдалануға болатынын ескеріңіз. Импорт екі жағдайда да жұмыс істеуі керек. +DataComeFromIdFoundFromRef=The value that comes from the source file will be used to find the id of the parent object to use (so the object %s that has the ref. from source file must exist in the database). +DataComeFromIdFoundFromCodeId=The value of code that comes from source file will be used to find the id of the parent object to use (so the code from source file must exist in the dictionary %s). Note that if you know the id, you can also use it in the source file instead of the code. Import should work in both cases. DataIsInsertedInto=Бастапқы файлдан алынған деректер келесі өріске енгізіледі: DataIDSourceIsInsertedInto=Бастапқы файлдағы деректерді пайдалану арқылы табылған негізгі нысанның идентификаторы келесі өріске кірістіріледі: DataCodeIDSourceIsInsertedInto=Кодтан табылған ата-аналық жолдың идентификаторы келесі өріске енгізіледі: diff --git a/htdocs/langs/kk_KZ/hrm.lang b/htdocs/langs/kk_KZ/hrm.lang index 9535a3f93d2..efde73ae05b 100644 --- a/htdocs/langs/kk_KZ/hrm.lang +++ b/htdocs/langs/kk_KZ/hrm.lang @@ -45,7 +45,7 @@ Eval=Бағалау Evals=Бағалар NewEval=Жаңа бағалау ValidateEvaluation=Бағалауды растау -ConfirmValidateEvaluation=Бұл бағалауды %sb09a4b739f17f80z сілтемесі арқылы растағыңыз келетініне сенімдісіз бе >? +ConfirmValidateEvaluation=Are you sure you want to validate this evaluation with the reference %s? EvaluationCard=Бағалау картасы RequiredRank=Жұмыс профилі үшін қажетті дәреже RequiredRankShort=Міндетті дәреже diff --git a/htdocs/langs/kk_KZ/install.lang b/htdocs/langs/kk_KZ/install.lang index 5d4dc90349c..160493e8197 100644 --- a/htdocs/langs/kk_KZ/install.lang +++ b/htdocs/langs/kk_KZ/install.lang @@ -14,7 +14,7 @@ PHPSupportPOSTGETKo=Мүмкін сіздің PHP орнату POST және/н PHPSupportSessions=Бұл PHP сеанстарды қолдайды. PHPSupport=Бұл PHP %s функцияларын қолдайды. PHPMemoryOK=PHP максималды сеанс жады %s күйіне орнатылған. Бұл жеткілікті болуы керек. -PHPMemoryTooLow=Сіздің PHP сеансының максималды жады %s байт етіп орнатылған. Бұл тым төмен. php.ini параметрін сыныбын орнату үшін өзгертіңіз. ='notranslate'> параметрін кем дегенде %sb09a18f /span> байт. +PHPMemoryTooLow=Your PHP max session memory is set to %s bytes. This is too low. Change your php.ini to set memory_limit parameter to at least %s bytes. Recheck=Толығырақ тест алу үшін мына жерді басыңыз ErrorPHPDoesNotSupportSessions=PHP орнату сеанстарды қолдамайды. Бұл функция Dolibarr жұмыс істеуі үшін қажет. PHP параметрлерін және сеанс каталогының рұқсаттарын тексеріңіз. ErrorPHPDoesNotSupport=Сіздің PHP қондырғыңыз %s функцияларын қолдамайды. @@ -108,7 +108,7 @@ DatabaseVersion=Мәліметтер қорының нұсқасы ServerVersion=Мәліметтер қоры серверінің нұсқасы YouMustCreateItAndAllowServerToWrite=Сіз бұл каталогты құрып, оған веб -сервердің жазуына рұқсат беруіңіз керек. DBSortingCollation=Таңбаларды сұрыптау тәртібі -YouAskDatabaseCreationSoDolibarrNeedToConnect=Сіз дерекқор жасауды таңдадыңыз %s, бірақ бұл үшін Dolibar қажет %s серверіне супер пайдаланушы %s рұқсаттары. +YouAskDatabaseCreationSoDolibarrNeedToConnect=You selected create database %s, but for this, Dolibarr needs to connect to server %s with super user %s permissions. YouAskLoginCreationSoDolibarrNeedToConnect=Дерекқор пайдаланушысы %s жасау таңдалған, бірақ бұл үшін, Dolibarr супер пайдаланушы %s рұқсаттарымен серверге %s қосылу үшін қажет. BecauseConnectionFailedParametersMayBeWrong=Дерекқорға қосылу сәтсіз аяқталды: хост немесе супер пайдаланушы параметрлері қате болуы керек. OrphelinsPaymentsDetectedByMethod=Жетім балалардың төлемі %s әдісімен анықталды diff --git a/htdocs/langs/kk_KZ/mails.lang b/htdocs/langs/kk_KZ/mails.lang index 3601bb2fad8..6901e48dd14 100644 --- a/htdocs/langs/kk_KZ/mails.lang +++ b/htdocs/langs/kk_KZ/mails.lang @@ -139,7 +139,7 @@ AddNewNotification=Жаңа автоматты электрондық хабар ListOfActiveNotifications=Электрондық поштаға автоматты түрде хабарландыру үшін барлық белсенді жазылымдардың (мақсатты/оқиғалардың) тізімі ListOfNotificationsDone=Барлық автоматты электрондық пошта хабарландыруларының тізімі MailSendSetupIs=Электрондық поштаны жіберу конфигурациясы '%s' күйіне орнатылды. Бұл режим жаппай электрондық поштаны жіберу үшін қолданылмайды. -MailSendSetupIs2='%s' ''. Бұл режим арқылы Интернет провайдері ұсынатын SMTP серверін орнатуға және жаппай электрондық пошта жіберу мүмкіндігін пайдалануға болады. +MailSendSetupIs2=You must first go, with an admin account, into menu %sHome - Setup - EMails%s to change parameter '%s' to use mode '%s'. With this mode, you can enter setup of the SMTP server provided by your Internet Service Provider and use Mass emailing feature. MailSendSetupIs3=Егер SMTP серверін орнату туралы сұрақтарыңыз болса, %s сұрай аласыз. YouCanAlsoUseSupervisorKeyword=Пайдаланушы бақылаушысына электрондық поштаны жіберу үшін __SUPERVISOREMAIL__ кілт сөзін қосуға болады (тек осы супервайзер үшін электрондық пошта анықталған жағдайда ғана жұмыс істейді) NbOfTargetedContacts=Мақсатты байланыс хаттарының қазіргі саны @@ -147,7 +147,7 @@ UseFormatFileEmailToTarget=Импортталған файлда эле UseFormatInputEmailToTarget= электрондық поштасы бар жолды енгізіңіз; аты; аты; басқа MailAdvTargetRecipients=Алушылар (кеңейтілген таңдау) AdvTgtTitle=Үшінші тараптарды немесе мақсатты контактілерді/мекенжайларды алдын ала таңдау үшін енгізу өрістерін толтырыңыз -AdvTgtSearchTextHelp=Қойылмалы таңбалар ретінде %% пайдаланыңыз. Мысалы, jean, joe, jim сияқты барлық элементтерді табу үшін енгізуге болады. j%%, сіз де пайдалана аласыз ; мән үшін бөлгіш ретінде және пайдаланыңыз! осы мәннен басқасы үшін. Мысалы, jean;joe;jim%%;!jimo;!jimab07e631701f span> барлық Джин, Джоға бағытталған, Джиммен басталады, бірақ Джимо емес, Джимамен басталатын барлық нәрселер емес +AdvTgtSearchTextHelp=Use %% as wildcards. For example to find all item like jean, joe, jim, you can input j%%, you can also use ; as separator for value, and use ! for except this value. For example jean;joe;jim%%;!jimo;!jima%% will target all jean, joe, start with jim but not jimo and not everything that starts with jima AdvTgtSearchIntHelp=Int немесе float мәнін таңдау үшін интервалды пайдаланыңыз AdvTgtMinVal=Ең төменгі мән AdvTgtMaxVal=Максималды мән @@ -182,7 +182,7 @@ IsAnAnswer=Бұл бастапқы электрондық поштаға жау RecordCreatedByEmailCollector=%s электрондық пошта жинаушысы %s электрондық поштасынан жасаған жазба DefaultBlacklistMailingStatus=Жаңа контакт жасау кезінде '%s' өрісінің әдепкі мәні DefaultStatusEmptyMandatory=Бос, бірақ міндетті -WarningLimitSendByDay=ЕСКЕРТУ: дананы орнату немесе келісім-шарт күніне %s. Көбірек жіберу әрекеті дананың баяулауына немесе уақытша тоқтатылуына әкелуі мүмкін. Сізге жоғары квота қажет болса, қолдау қызметіне хабарласыңыз. +WarningLimitSendByDay=WARNING: The setup or contract of your instance limits your number of emails per day to %s. Trying to send more may result in having your instance slow down or suspended. Please contact your support if you need a higher quota. NoMoreRecipientToSendTo=Электрондық поштаны жіберетін алушы жоқ EmailOptedOut=Электрондық пошта иесі оған енді осы электрондық пошта арқылы хабарласпауды сұрады EvenUnsubscribe=Бас тарту электрондық пошталарын қосыңыз diff --git a/htdocs/langs/kk_KZ/modulebuilder.lang b/htdocs/langs/kk_KZ/modulebuilder.lang index 998c5826f3c..97a0a052ef4 100644 --- a/htdocs/langs/kk_KZ/modulebuilder.lang +++ b/htdocs/langs/kk_KZ/modulebuilder.lang @@ -94,7 +94,7 @@ SeeExamples=Мысалдарды мына жерден қараңыз EnabledDesc=Бұл өрістің белсенді болуы шарты.

Мысалдар:
1
isModEnabled('anothermodule')
getDolGlobalString('MYMODULE_OPTION')==2 VisibleDesc=Өріс көрінеді ме? (Мысалдар: 0=Ешқашан көрінбейді, 1=Тізімде көрінеді және пішіндерді жасау/жаңарту/қарау, 2=Тек тізімде көрінеді, 3=Тек пішінді жасау/жаңарту/қарау кезінде көрінеді (тізімде емес), 4=Тізімде көрінеді және тек пішінді жаңарту/қарау (жасау емес), 5=Тізімде көрінеді және пішінді ғана қарау (жасау емес, жаңарту емес).

Теріс мәнді пайдалану өрістің тізімде әдепкі бойынша көрсетілмейтінін, бірақ оны көру үшін таңдауға болатынын білдіреді). ItCanBeAnExpression=Бұл өрнек болуы мүмкін. Мысал:
preg_match('/public/', $_SERVER['PHP_SELF'])?0:1
$user ->hasRight('holiday', 'define_holiday')?1:5 -DisplayOnPdfDesc=Бұл өрісті үйлесімді PDF құжаттарында көрсетіңіз, орынды "Орын" өрісімен басқара аласыз.
Құжат үшін:
0 = көрсетілмейді
1 = display

0 = көрсетілмейді
= бағанда көрсетіледі
3 = сипаттамадан кейін жол сипаттамасы бағанында көрсетіледі
4 = сипаттамадан кейін сипаттама бағанында көрсетіледі бос болмаса ғана +DisplayOnPdfDesc=Display this field on compatible PDF documents, you can manage position with "Position" field.
For document :
0 = not displayed
1 = display
2 = display only if not empty

For document lines :
0 = not displayed
1 = displayed in a column
3 = display in line description column after the description
4 = display in description column after the description only if not empty DisplayOnPdf=PDF форматында IsAMeasureDesc=Тізімге жиынтық алу үшін өрістің мәні жинақталуы мүмкін бе? (Мысалдар: 1 немесе 0) SearchAllDesc=Өріс жылдам іздеу құралынан іздеу үшін пайдаланылады ма? (Мысалдар: 1 немесе 0) @@ -148,7 +148,7 @@ CSSListClass=Тізімге арналған CSS NotEditable=Өңдеуге болмайды ForeignKey=Сыртқы кілт ForeignKeyDesc=Егер бұл өрістің мәні басқа кестеде бар екеніне кепілдік беру керек болса. Мұнда мәнге сәйкес келетін синтаксисті енгізіңіз: tablename.parentfieldtocheck -TypeOfFieldsHelp=Мысал:
varchar(99)
электрондық пошта
телефон ='notranslate'>
ip
url
құпия сөз
күн
datetime
уақыт белгісі
'1' жазба жасау үшін комбодан кейін + түймесін қосамыз дегенді білдіреді
'сүзгі' Әмбебап сүзгі синтаксисі шарты, мысал: '((күйі:=:1) ЖӘНЕ (fk_user:=:__USER_ID__) ЖӘНЕ (нысан:IN:(__SHARED_ENTITIES__))' +TypeOfFieldsHelp=Example:
varchar(99)
email
phone
ip
url
password
double(24,8)
real
text
html
date
datetime
timestamp
integer
integer:ClassName:relativepath/to/classfile.class.php[:1[:filter]]

'1' means we add a + button after the combo to create the record
'filter' is an Universal Filter syntax condition, example: '((status:=:1) AND (fk_user:=:__USER_ID__) AND (entity:IN:(__SHARED_ENTITIES__))' TypeOfFieldsHelpIntro=Бұл өрістің/атрибуттың түрі. AsciiToHtmlConverter=Ascii - HTML түрлендіргіші AsciiToPdfConverter=Ascii - PDF түрлендіргіші @@ -180,7 +180,7 @@ FailedToAddCodeIntoDescriptor=Дескрипторға код қосылмады DictionariesCreated=%s сөздігі сәтті жасалды. DictionaryDeleted=%s сөздігі жойылды PropertyModuleUpdated=%s сипаты сәтті жаңартылды -InfoForApiFile=* Файлды бірінші рет жасағанда, әрбір нысан үшін барлық әдістер құрылады.
* жоюды басқанда сыныптың барлық әдістерін ғана алып тастайсыз. ='notranslate'>таңдалған нысан. +InfoForApiFile=* When you generate file for the first time then all methods will be created for each object.
* When you click in remove you just remove all methods for the selected object. SetupFile=Модульді орнату беті EmailingSelectors=Emails selectors EmailingSelectorDesc=Жаппай электрондық пошта жіберу модулі үшін жаңа электрондық пошта мақсатты таңдаушыларын қамтамасыз ету үшін осы жерде сынып файлдарын жасауға және өңдеуге болады diff --git a/htdocs/langs/kk_KZ/multicurrency.lang b/htdocs/langs/kk_KZ/multicurrency.lang index cfe180be814..2a4c0ab24fe 100644 --- a/htdocs/langs/kk_KZ/multicurrency.lang +++ b/htdocs/langs/kk_KZ/multicurrency.lang @@ -25,7 +25,7 @@ CreateRate=Тариф құру FormCreateRate=Бағаны құру FormUpdateRate=Бағаны өзгерту successRateCreate=Дерекқорға %s валютасының бағамы қосылды -ConfirmDeleteLineRate=%s
%s валютасының %s бағамын шынымен алып тастағыңыз келе ме? > күні? +ConfirmDeleteLineRate=Are you sure you want to remove the %s rate for currency %s on %s date? DeleteLineRate=Таза тариф successRateDelete=Бағасы жойылды errorRateDelete=Тарифті жою кезінде қате пайда болды diff --git a/htdocs/langs/kk_KZ/oauth.lang b/htdocs/langs/kk_KZ/oauth.lang index 154786e9a8b..e296715be88 100644 --- a/htdocs/langs/kk_KZ/oauth.lang +++ b/htdocs/langs/kk_KZ/oauth.lang @@ -29,7 +29,7 @@ OAUTH_GOOGLE_SECRET=OAuth Google құпиясы OAUTH_GITHUB_NAME=OAuth GitHub қызметі OAUTH_GITHUB_ID=OAuth GitHub идентификаторы OAUTH_GITHUB_SECRET=OAuth GitHub құпиясы -OAUTH_URL_FOR_CREDENTIAL=осы бетке өтіңіз
аралығы>. +NewPartnershipRequestDesc=This form allows you to request to be part of one of our partnership program. If you need help to fill this form, please contact by email %s. ThisUrlMustContainsAtLeastOneLinkToWebsite=Бұл бетте келесі домендердің біріне кемінде бір сілтеме болуы керек: %s IPOfApplicant=Өтініш берушінің IP - diff --git a/htdocs/langs/kk_KZ/paypal.lang b/htdocs/langs/kk_KZ/paypal.lang index e10ad781a3e..736280eaedc 100644 --- a/htdocs/langs/kk_KZ/paypal.lang +++ b/htdocs/langs/kk_KZ/paypal.lang @@ -34,4 +34,4 @@ ARollbackWasPerformedOnPostActions=Барлық Post әрекеттері бой ValidationOfPaymentFailed=Төлем расталмады CardOwner=Карточка ұстаушы PayPalBalance=Paypal несиесі -OnlineSubscriptionPaymentLine=%s
жазылымында жазылған онлайн жазылым %s
Бастапқы IP мекенжайы: %s
Транзакция идентификаторы: +OnlineSubscriptionPaymentLine=Online subscription recorded on %s
Paid via %s
Originating IP address: %s
Transaction ID: %s diff --git a/htdocs/langs/kk_KZ/receptions.lang b/htdocs/langs/kk_KZ/receptions.lang index 0c226769b67..26be602d9ce 100644 --- a/htdocs/langs/kk_KZ/receptions.lang +++ b/htdocs/langs/kk_KZ/receptions.lang @@ -32,7 +32,7 @@ StatusReceptionProcessedShort=Өңделді ReceptionSheet=Қабылдау парағы ValidateReception=Қабылдауды растау ConfirmDeleteReception=Бұл қабылдауды шынымен жойғыңыз келе ме? -ConfirmValidateReception=Бұл қабылдауды %s
? +ConfirmValidateReception=Are you sure you want to validate this reception with the reference %s? ConfirmCancelReception=Бұл қабылдаудан бас тартқыңыз келетініне сенімдісіз бе? StatsOnReceptionsOnlyValidated=Тек расталған қабылдаулар бойынша жүргізілген статистика. Қолданылған күн - қабылдауды растау күні (жоспарланған жеткізу күні әрқашан белгілі емес). SendReceptionByEMail=Қабылдауды электрондық пошта арқылы жіберіңіз diff --git a/htdocs/langs/kk_KZ/sendings.lang b/htdocs/langs/kk_KZ/sendings.lang index 89bae344240..e26e7f36fb1 100644 --- a/htdocs/langs/kk_KZ/sendings.lang +++ b/htdocs/langs/kk_KZ/sendings.lang @@ -39,7 +39,7 @@ StatusSendingValidatedShort=Тексерілді StatusSendingProcessedShort=Өңделді SendingSheet=Жеткізу парағы ConfirmDeleteSending=Бұл жүкті шынымен жойғыңыз келе ме? -ConfirmValidateSending=Бұл жөнелтімді %s сілтемесімен растағыңыз келетініне сенімдісіз бе >? +ConfirmValidateSending=Are you sure you want to validate this shipment with the reference %s? ConfirmCancelSending=Бұл жөнелтуден бас тартқыңыз келетініне сенімдісіз бе? DocumentModelMerou=Merou A5 моделі WarningNoQtyLeftToSend=Ескерту, жөнелтуді күтетін өнімдер жоқ. diff --git a/htdocs/langs/kk_KZ/stocks.lang b/htdocs/langs/kk_KZ/stocks.lang index fde782d0dc3..081816ae7ec 100644 --- a/htdocs/langs/kk_KZ/stocks.lang +++ b/htdocs/langs/kk_KZ/stocks.lang @@ -282,7 +282,7 @@ ModuleStockTransferName=Жетілдірілген қорды тасымалда ModuleStockTransferDesc=Тасымалдау парағын генерациялай отырып, Stock Transfer қызметін кеңейтілген басқару StockTransferNew=Жаңа акцияларды аудару StockTransferList=Акциялар тізімі -ConfirmValidateStockTransfer=Осы акциялардың аударымын %s сілтемесі арқылы растағыңыз келетініне сенімдісіз бе span> ? +ConfirmValidateStockTransfer=Are you sure you want to validate this stocks transfer with the reference %s ? ConfirmDestock=%s аударымымен қорлардың азаюы ConfirmDestockCancel=%s тасымалдау арқылы акциялардың азаюын болдырмау DestockAllProduct=Қорлардың азаюы diff --git a/htdocs/langs/kk_KZ/trips.lang b/htdocs/langs/kk_KZ/trips.lang index 6d726eb26f5..de3e90f11f8 100644 --- a/htdocs/langs/kk_KZ/trips.lang +++ b/htdocs/langs/kk_KZ/trips.lang @@ -47,7 +47,7 @@ ExpenseReportApplyTo=Қолдану ExpenseReportApproved=Шығындар есебі бекітілді ExpenseReportApprovedMessage=%s шығыс есебі мақұлданды.
- Пайдаланушы: %s
- Мақұлдаған: %s
Шығындар есебін көрсету үшін мына жерді басыңыз: %s ExpenseReportCanceled=Шығындар туралы есеп жойылды -ExpenseReportCanceledMessage=%s шығыс есебінен бас тартылды.
- Пайдаланушы: %s
- Болдырмады: %s
- Бас тарту себебі: %s
Шығындар есебін көрсету үшін осы жерді басыңыз: %s +ExpenseReportCanceledMessage=The expense report %s was canceled.
- User: %s
- Canceled by: %s
- Motive for cancellation: %s
Click here to show the expense report: %s ExpenseReportConstraintViolationError=Максималды сомадан асып кетті (%s ережесі): %s %s мәнінен жоғары ( Артық тыйым салынған) ExpenseReportConstraintViolationWarning=Максималды сомадан асып кетті (%s ережесі): %s %s мәнінен жоғары ( Рұқсат етілгеннен асып кету) ExpenseReportDateEnd=Аяқталу күні diff --git a/htdocs/langs/kk_KZ/website.lang b/htdocs/langs/kk_KZ/website.lang index 566cbfed362..920506aa8dc 100644 --- a/htdocs/langs/kk_KZ/website.lang +++ b/htdocs/langs/kk_KZ/website.lang @@ -49,11 +49,11 @@ SetHereVirtualHost=Apache/NGinx/...
қосулыreate қолданб ExampleToUseInApacheVirtualHostConfig=Apache виртуалды хостын орнатуда қолданылатын мысал: YouCanAlsoTestWithPHPS=PHP ендірілген серверімен пайдалану
Ортаның дамуы мүмкін. сайтты PHP ендірілген веб-серверімен (PHP 5.5 қажет)
php -S 0.0.0.0 іске қосу арқылы сынауды қалайды :8080 -t %s YouCanAlsoDeployToAnotherWHP=Веб-сайтыңызды басқа Dolibarr хостинг провайдерімен іске қосыңыз
If Интернетте қол жетімді Apache немесе NGinx сияқты веб-сервер болмаса, веб-сайт модулімен толық интеграцияны қамтамасыз ететін басқа Dolibarr хостинг провайдері ұсынатын басқа Dolibarr данасына веб-сайтыңызды экспорттауға және импорттауға болады. Кейбір Dolibarr хостинг провайдерлерінің тізімін
https://saas.dolibarr.org сайтынан таба аласыз. -CheckVirtualHostPerms=Сондай-ақ виртуалды хост пайдаланушысында (мысалы, www-data) %sb0a65d071f6fc90 бар екенін тексеріңіз. файлдарға
%s +CheckVirtualHostPerms=Check also that the virtual host user (for example www-data) has %s permissions on files into
%s ReadPerm=Оқыңыз WritePerm=Жазу TestDeployOnWeb=Вебте тестілеу/орналастыру -PreviewSiteServedByWebServer= %s жаңа қойындыда алдын ала қарау.

%s сыртқы веб-сервермен (мысалы, Apache, Nginx) қызмет көрсетеді. ). Каталогты көрсетпес бұрын осы серверді орнатып, орнатуыңыз керек:
%s span>
URL сыртқы сервер арқылы қызмет етеді:
%s +PreviewSiteServedByWebServer=Preview %s in a new tab.

The %s will be served by an external web server (like Apache, Nginx, IIS). You must install and setup this server before to point to directory:
%s
URL served by external server:
%s PreviewSiteServedByDolibarr= %s жаңа қойындыда алдын ала қарау.

%s Dolibarr серверінде қызмет етеді, сондықтан оған қосымша веб -сервер қажет емес (Apache, Nginx, IIS).
Қолайсыз нәрсе - беттердің URL мекенжайлары қолданушыларға ыңғайлы емес және сіздің Dolibarr жолынан басталады. URL мекенжайына
Dolibarr қызмет:
%s

каталогына
%s
бойынша балл, содан кейін осы виртуалды сервер атауын енгізіңіз, бұл сіздің веб-серверде виртуалды хост жасау, осы веб-сайтты қызмет үшін өз сыртқы веб-серверін пайдалану үшін осы веб -сайттың қасиеттерінде «Сынақ/Интернетте орналастыру» сілтемесін нұқыңыз. VirtualHostUrlNotDefined=Сыртқы веб -сервер қызмет ететін виртуалды хосттың URL мекенжайы анықталмаған NoPageYet=Әлі беттер жоқ @@ -63,8 +63,8 @@ YouCanEditHtmlSourceckeditor=Редактордағы «Дереккөз» ба YouCanEditHtmlSource=
You can include PHP code into this source using tags <?php ?>. The following global variables are available: $conf, $db, $mysoc, $user, $website, $websitepage, $weblangs, $pagelangs.

You can also include content of another Page/Container with the following syntax:
<?php includeContainer('alias_of_container_to_include'); ?>

You can make a redirect to another Page/Container with the following syntax (Note: do not output any content before a redirect):
<?php redirectToContainer('alias_of_container_to_redirect_to'); ?>

To add a link to another page, use the syntax:
<a href="alias_of_page_to_link_to.php">mylink<a>

To include a link to download a file stored into the documents directory, use the document.php wrapper:
Example, for a file into documents/ecm (need to be logged), syntax is:
<a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext">
For a file into documents/medias (open directory for public access), syntax is:
<a href="/document.php?modulepart=medias&file=[relative_dir/]filename.ext">
For a file shared with a share link (open access using the sharing hash key of file), syntax is:
<a href="/document.php?hashp=publicsharekeyoffile">
YouCanEditHtmlSource1=
To include an image stored into the documents directory, use the viewimage.php wrapper.
Example, for an image into documents/medias (open directory for public access), syntax is:
<img src="/viewimage.php?modulepart=medias&file=[relative_dir/]filename.ext">
YouCanEditHtmlSource2=Бөлісу сілтемесімен бөлісілген кескін үшін (файлдың ортақ хэш кілтін қолдана отырып, ашық қатынас), синтаксис:
<img src = «/viewimage.php? Hashp = 12345679012z00f01f01f0f1f0f4f0f0f0f0f0f09f0f0f0f09b029» -YouCanEditHtmlSource3=PHP нысаны кескінінің URL мекенжайын алу үшін
< пайдаланыңыз. span>img src="<?php басып шығару getImagePublicURLOfObject($object, 1, "_small") ?b0012c7dcbe0870 class='notranslate'>>
-YouCanEditHtmlSourceMore=
HTML немесе динамикалық кодтың қосымша мысалдары wiki құжаттамасындаb0e40dc6508d.
+YouCanEditHtmlSource3=To get the URL of the image of a PHP object, use
<img src="<?php print getImagePublicURLOfObject($object, 1, "_small") ?>">
+YouCanEditHtmlSourceMore=
More examples of HTML or dynamic code available on
the wiki documentation.
ClonePage=Бетті/контейнерді клондау CloneSite=Сайтты клондау SiteAdded=Веб -сайт қосылды diff --git a/htdocs/langs/kk_KZ/withdrawals.lang b/htdocs/langs/kk_KZ/withdrawals.lang index 3b76bfe1774..cd117d018ae 100644 --- a/htdocs/langs/kk_KZ/withdrawals.lang +++ b/htdocs/langs/kk_KZ/withdrawals.lang @@ -47,7 +47,7 @@ MakeBankTransferOrder=Несие аудару туралы өтініш жаса WithdrawRequestsDone=%s тікелей дебет бойынша төлем сұраулары жазылды BankTransferRequestsDone=%s несие аудару сұраныстары жазылды ThirdPartyBankCode=Үшінші тараптың банк коды -NoInvoiceCouldBeWithdrawed=Ешбір шот-фактура сәтті өңделмеді. Шот-фактуралардың жарамды IBAN нөмірі бар компанияларда екенін және IBAN-да %s< режимі бар UMR (бірегей мандат анықтамасы) бар екенін тексеріңіз. span class='notranslate'>. +NoInvoiceCouldBeWithdrawed=No invoice processed successfully. Check that invoices are on companies with a valid IBAN and that IBAN has a UMR (Unique Mandate Reference) with mode %s. NoInvoiceCouldBeWithdrawedSupplier=Ешбір шот-фактура сәтті өңделмеді. Шот-фактуралардың жарамды IBAN нөмірі бар компанияларда екенін тексеріңіз. NoSalariesCouldBeWithdrawed=Ешбір жалақы сәтті өңделмеді. Жарамды IBAN бар пайдаланушылардың жалақысы екенін тексеріңіз. WithdrawalCantBeCreditedTwice=Бұл шығыс түбіртегі есептелген деп белгіленді; бұл екі рет жасалуы мүмкін емес, себебі бұл қайталанатын төлемдер мен банктік жазбаларды тудыруы мүмкін. @@ -171,4 +171,3 @@ SalaryWaitingWithdraw=Несие аудару арқылы төлеуді күт RefSalary=Жалақы NoSalaryInvoiceToWithdraw='%s' күтетін жалақы жоқ. Сұрау жасау үшін жалақы картасындағы '%s' қойындысына өтіңіз. SalaryInvoiceWaitingWithdraw=Несие аудару арқылы төлеуді күткен жалақы - diff --git a/htdocs/langs/kn_IN/main.lang b/htdocs/langs/kn_IN/main.lang index 2a49728e55c..cb29adfbf0c 100644 --- a/htdocs/langs/kn_IN/main.lang +++ b/htdocs/langs/kn_IN/main.lang @@ -420,6 +420,8 @@ TotalTTCShort=Total (inc. tax) TotalHT=Total (excl. tax) TotalHTforthispage=Total (excl. tax) for this page Totalforthispage=Total for this page +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=Total (inc. tax) TotalTTCToYourCredit=Total (inc. tax) to your credit TotalVAT=Total tax @@ -647,6 +649,7 @@ ReportName=Report name ReportPeriod=Report period ReportDescription=Description Report=Report +Reports=Reports Keyword=Keyword Origin=Origin Legend=Legend diff --git a/htdocs/langs/ko_KR/main.lang b/htdocs/langs/ko_KR/main.lang index f4c7e771513..3e85c215d49 100644 --- a/htdocs/langs/ko_KR/main.lang +++ b/htdocs/langs/ko_KR/main.lang @@ -420,6 +420,8 @@ TotalTTCShort=합계 (세금 포함) TotalHT=Total (excl. tax) TotalHTforthispage=Total (excl. tax) for this page Totalforthispage=이 페이지의 합계 +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=합계 (세금 포함) TotalTTCToYourCredit=신용합계 (세금 포함) TotalVAT=총 세금 @@ -647,6 +649,7 @@ ReportName=보고서 이름 ReportPeriod=보고서 기간 ReportDescription=설명 Report=보고서 +Reports=Reports Keyword=키워드 Origin=원산지 Legend=전설 diff --git a/htdocs/langs/lo_LA/accountancy.lang b/htdocs/langs/lo_LA/accountancy.lang index 6236441b00a..47a32e97a8a 100644 --- a/htdocs/langs/lo_LA/accountancy.lang +++ b/htdocs/langs/lo_LA/accountancy.lang @@ -352,7 +352,7 @@ ACCOUNTING_DISABLE_BINDING_ON_SALES=ປິດໃຊ້ງານການຜູ ACCOUNTING_DISABLE_BINDING_ON_PURCHASES=ປິດໃຊ້ງານການຜູກມັດແລະການໂອນບັນຊີຢູ່ໃນການຊື້ (ໃບເກັບເງິນຂອງຜູ້ຂາຍຈະບໍ່ຖືກເອົາເຂົ້າໃນບັນຊີ) ACCOUNTING_DISABLE_BINDING_ON_EXPENSEREPORTS=ປິດໃຊ້ງານການຜູກມັດແລະການໂອນບັນຊີຢູ່ໃນລາຍງານລາຍຈ່າຍ (ບົດລາຍງານຄ່າໃຊ້ຈ່າຍຈະບໍ່ຖືກເອົາເຂົ້າໃນບັນຊີ) ACCOUNTING_ENABLE_LETTERING=ເປີດໃຊ້ຟັງຊັນຕົວອັກສອນໃນການບັນຊີ -ACCOUNTING_ENABLE_LETTERING_DESC=ເມື່ອຕົວເລືອກນີ້ຖືກເປີດໃຊ້, ທ່ານສາມາດກໍານົດ, ໃນແຕ່ລະບັນຊີລາຍການ, ລະຫັດເພື່ອໃຫ້ທ່ານສາມາດຈັດກຸ່ມການເຄື່ອນໄຫວບັນຊີທີ່ແຕກຕ່າງກັນຮ່ວມກັນ. ໃນອະດີດ, ເມື່ອວາລະສານຕ່າງໆຖືກຄຸ້ມຄອງຢ່າງເປັນເອກະລາດ, ຄຸນສົມບັດນີ້ແມ່ນຈໍາເປັນເພື່ອຈັດກຸ່ມສາຍການເຄື່ອນໄຫວຂອງວາລະສານຕ່າງໆຮ່ວມກັນ. ຢ່າງໃດກໍຕາມ, ດ້ວຍບັນຊີ Dolibarr, ລະຫັດຕິດຕາມດັ່ງກ່າວ, ເອີ້ນວ່າ "%sb09a4b739f17f80 span>" ຖືກບັນທຶກໂດຍອັດຕະໂນມັດແລ້ວ, ສະນັ້ນການພິມຕົວອັກສອນອັດຕະໂນມັດແມ່ນເຮັດແລ້ວ, ບໍ່ມີຄວາມສ່ຽງຕໍ່ຄວາມຜິດພາດ, ດັ່ງນັ້ນຄຸນສົມບັດນີ້ຈຶ່ງບໍ່ມີປະໂຫຍດຕໍ່ການນໍາໃຊ້ທົ່ວໄປ. ຄຸນນະສົມບັດຕົວອັກສອນຄູ່ມືແມ່ນສະຫນອງໃຫ້ສໍາລັບຜູ້ໃຊ້ສຸດທ້າຍທີ່ບໍ່ໄວ້ວາງໃຈເຄື່ອງຈັກຄອມພິວເຕີເຮັດໃຫ້ການໂອນຂໍ້ມູນໃນບັນຊີ. +ACCOUNTING_ENABLE_LETTERING_DESC=When this options is enabled, you can define, on each accounting entry, a code so you can group different accounting movements together. In the past, when different journals was managed independently, this feature was necessary to group movement lines of different journals together. However, with Dolibarr accountancy, such a tracking code, called "%s" is already saved automatically, so an automatic lettering is already done, with no risk of error so this feature has become useless for a common usage. Manual lettering feature is provided for end users that really don't trust the computer engine making the transfer of data in accountancy. EnablingThisFeatureIsNotNecessary=ການເປີດໃຊ້ຄຸນສົມບັດນີ້ບໍ່ຈໍາເປັນສໍາລັບການຄຸ້ມຄອງບັນຊີທີ່ເຂັ້ມງວດ. ACCOUNTING_ENABLE_AUTOLETTERING=ເປີດໃຊ້ຕົວອັກສອນອັດຕະໂນມັດເມື່ອໂອນເຂົ້າບັນຊີ ACCOUNTING_ENABLE_AUTOLETTERING_DESC=ລະ​ຫັດ​ສໍາ​ລັບ​ຕົວ​ອັກ​ສອນ​ໄດ້​ຖືກ​ສ້າງ​ຂຶ້ນ​ອັດ​ຕະ​ໂນ​ມັດ​ແລະ​ເພີ່ມ​ຂຶ້ນ​ແລະ​ບໍ່​ໄດ້​ຮັບ​ຄັດ​ເລືອກ​ໂດຍ​ຜູ້​ໃຊ້​ສຸດ​ທ້າຍ​ diff --git a/htdocs/langs/lo_LA/admin.lang b/htdocs/langs/lo_LA/admin.lang index 1418e0e6b28..c70618a84ce 100644 --- a/htdocs/langs/lo_LA/admin.lang +++ b/htdocs/langs/lo_LA/admin.lang @@ -268,7 +268,7 @@ OtherResources=ຊັບພະຍາກອນອື່ນ ExternalResources=ຊັບພະຍາກອນພາຍນອກ SocialNetworks=ເຄືອຂ່າຍສັງຄົມ SocialNetworkId=ID ເຄືອຂ່າຍສັງຄົມ -ForDocumentationSeeWiki=ສໍາລັບເອກະສານຜູ້ໃຊ້ ຫຼືຜູ້ພັດທະນາ (Doc, FAQs...),
ເບິ່ງທີ່ Dolibarr Wiki:
%sb0e40dc807 +ForDocumentationSeeWiki=For user or developer documentation (Doc, FAQs...),
take a look at the Dolibarr Wiki:
%s ForAnswersSeeForum=ສຳລັບຄຳຖາມ/ຄວາມຊ່ວຍເຫຼືອອື່ນໆ, ທ່ານສາມາດໃຊ້ກະດານສົນທະນາ Dolibarr:
%s HelpCenterDesc1=ນີ້ແມ່ນແຫຼ່ງຂໍ້ມູນ ຈຳ ນວນ ໜຶ່ງ ເພື່ອໃຫ້ໄດ້ຮັບການຊ່ວຍເຫຼືອແລະການສະ ໜັບ ສະ ໜູນ ກັບ Dolibarr. HelpCenterDesc2=ບາງແຫຼ່ງຂໍ້ມູນເຫຼົ່ານີ້ມີຢູ່ໃນ english ເທົ່ານັ້ນ. @@ -368,7 +368,7 @@ GenericMaskCodes3EAN=ຕົວອັກສອນອື່ນ All ທັງinົ GenericMaskCodes4a=ຕົວຢ່າງຂອງວັນທີ 99 %s ຂອງພາກສ່ວນທີສາມ TheCompany, ກັບວັນທີ 2023-01-31:
GenericMaskCodes4b=ຕົວຢ່າງຂອງພາກສ່ວນທີສາມສ້າງເມື່ອ 2023-01-31:
GenericMaskCodes4c=ຕົວຢ່າງຂອງຜະລິດຕະພັນທີ່ສ້າງຂຶ້ນໃນວັນທີ 2023-01-31:
-GenericMaskCodes5=ABC{yy}{mm}-{000000} ຈະໃຫ້ b0aee83365837fz span>ABC2301-000099

01/span> }-ZZZ/{dd}/XXX ຈະໃຫ້ 0199-ZZZ/31/XXX
IN{yy}{mm}-{0000}-{t} ຈະໃຫ້ IN2301-0099-A is 'Responsable Inscripto' ທີ່ມີລະຫັດສໍາລັບປະເພດທີ່ເປັນ 'A_RI' +GenericMaskCodes5=ABC{yy}{mm}-{000000} will give ABC2301-000099
{0000+100@1}-ZZZ/{dd}/XXX will give 0199-ZZZ/31/XXX
IN{yy}{mm}-{0000}-{t} will give IN2301-0099-A if the type of company is 'Responsable Inscripto' with code for type that is 'A_RI' GenericNumRefModelDesc=ຕອບຕົວເລກທີ່ປັບແຕ່ງໄດ້ຕາມ ໜ້າ ກາກທີ່ ກຳ ນົດໄວ້. ServerAvailableOnIPOrPort=ເຊີບເວີມີຢູ່ທີ່ທີ່ຢູ່ %s ຢູ່ທີ່ Port %s ServerNotAvailableOnIPOrPort=ເຊີບເວີບໍ່ສາມາດໃຊ້ໄດ້ຢູ່ທີ່ຢູ່ %s ຢູ່ທີ່ Port %s @@ -464,7 +464,7 @@ ExtrafieldParamHelpPassword=ການປະຊ່ອງນີ້ຫວ່າງ ExtrafieldParamHelpselect=ບັນຊີລາຍຊື່ຂອງຄ່າຕ້ອງການສາຍທີ່ມີທີ່ສໍາຄັນຮູບແບບ, ມູນຄ່າ (ທີ່ສໍາຄັນບໍ່ສາມາດຈະ '0')

ສໍາລັບຕົວຢ່າງເຊັ່ນ:
1, value1
2, value2
ທຸລະການ 3, value3
...

ເພື່ອມີ ບັນຊີລາຍຊື່ໂດຍອີງຕາມບັນຊີລາຍຊື່ຄຸນລັກສະນະຄົນອື່ນແລ້ວ:
1, value1 | options_ parent_list_code : parent_key
2, value2 | options_ parent_list_code : parent_key

ເພື່ອທີ່ຈະມີບັນຊີລາຍການໂດຍອີງຕາມບັນຊີລາຍຊື່ອື່ນ:
1, value1 | parent_list_code : parent_key
2, value2 | parent_list_code : parent_key ExtrafieldParamHelpcheckbox=ລາຍການຄ່າຕ້ອງເປັນແຖວທີ່ມີລະຫັດຮູບແບບ, ຄ່າ (ບ່ອນທີ່ກະແຈບໍ່ສາມາດເປັນ '0')

ຕົວຢ່າງ:
1, value1
2, value2
3, value3 a0cc2 ... ExtrafieldParamHelpradio=ລາຍການຄ່າຕ້ອງເປັນແຖວທີ່ມີລະຫັດຮູບແບບ, ຄ່າ (ບ່ອນທີ່ກະແຈບໍ່ສາມາດເປັນ '0')

ຕົວຢ່າງ:
1, value1
2, value2
3, value3 a0cc2 ... -ExtrafieldParamHelpsellist=ລາຍຊື່ຂອງຄ່າມາຈາກຕາຕະລາງ
Syntax: table_name:label_field:id_field::filtersql
ຕົວຢ່າງ: c_typent:libelle ::filtersql

- id_field ຈຳເປັນເປັນກະແຈຫຼັກ int b0342fccfdab0342fccfda19 - filtersql ແມ່ນເງື່ອນໄຂ SQL. ມັນສາມາດເປັນການທົດສອບງ່າຍໆ (ເຊັ່ນ: active=1) ເພື່ອສະແດງຄ່າທີ່ໃຊ້ໄດ້ເທົ່ານັ້ນ
ນອກນັ້ນທ່ານຍັງສາມາດໃຊ້ $ID$ ໃນຕົວກອງທີ່ເປັນ id ປະຈຸບັນຂອງວັດຖຸປັດຈຸບັນ
ເພື່ອໃຊ້ SELECT ເຂົ້າໄປໃນຕົວກອງ ໃຫ້ໃຊ້ຄໍາສໍາຄັນ $SEL$ ເພື່ອຂ້າມການປ້ອງກັນການສີດຢາ.
ຖ້າທ່ານຕ້ອງການການກັ່ນຕອງໃນ extrafields ໃຊ້ syntax extra.fieldcode=... (ບ່ອນທີ່ລະຫັດພາກສະຫນາມແມ່ນລະຫັດຂອງ extrafield)

ເພື່ອໃຫ້ມີ ລາຍຊື່ຂຶ້ນກັບລາຍຊື່ຄຸນສົມບັດເພີ່ມເຕີມອື່ນ:
c_typent:libelle:id:options_parent_list_code |parent_column:filter

ເພື່ອໃຫ້ມີລາຍຊື່ຂຶ້ນກັບລາຍຊື່ອື່ນ:
c_typent:libelle:id:parent_list_code +ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filtersql
Example: c_typent:libelle:id::filtersql

- id_field is necessarily a primary int key
- filtersql is a SQL condition. It can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter which is the current id of current object
To use a SELECT into the filter use the keyword $SEL$ to bypass anti-injection protection.
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=ບັນຊີລາຍຊື່ຂອງຄ່າແມ່ນມາຈາກຕາຕະລາງ
Syntax: table_name: label_field: id_field :: filtersql
ຕົວຢ່າງ: c_typent: libelle: id :: filtersql

ຕົວຢ່າງສາມາດເປັນຕົວທົດສອບຕົວຈິງໄດ້ (ຕົວຢ່າງເທົ່ານັ້ນ) active0 (ຕົວຢ່າງເທົ່ານັ້ນ) ຈະໃຊ້ໄດ້ເທົ່ານັ້ນ ຍັງສາມາດໃຊ້ $ ID $ ໃນຕົວກັ່ນຕອງແມ່ມົດເປັນ id ປະຈຸບັນຂອງວັດຖຸປັດຈຸບັນ
ເພື່ອເຮັດການຄັດເລືອກໃນຕົວກອງໃຫ້ໃຊ້ $ SEL $
ຖ້າເຈົ້າຕ້ອງການກັ່ນຕອງຢູ່ໃນເຂດນອກໃຫ້ໃຊ້ໄວຍາກອນ extra.fieldcode = ... (ບ່ອນທີ່ລະຫັດພາກສະ ໜາມ ແມ່ນ ລະຫັດຂອງ extrafield)

ເພື່ອທີ່ຈະມີບັນຊີລາຍການໂດຍອີງຕາມບັນຊີລາຍຊື່ຄຸນລັກສະນະຄົນອື່ນແລ້ວ:
c_typent: libel: id: options_ parent_list_code | parent_column: ການກັ່ນຕອງ

ເພື່ອທີ່ຈະມີບັນຊີລາຍການໂດຍອີງຕາມບັນຊີລາຍຊື່ອື່ນ: c_typent
: libelle: id: parent_list_code | parent_column: ຕົວກັ່ນຕອງ ExtrafieldParamHelplink=ພາຣາມິເຕີຕ້ອງເປັນ ObjectName: Classpath
Syntax: ObjectName: Classpath ExtrafieldParamHelpSeparator=ຮັກສາຫວ່າງເປົ່າສໍາລັບຕົວແຍກແບບງ່າຍ simple
ຕັ້ງອັນນີ້ເປັນ 1 ສໍາລັບຕົວແຍກຕົວຫຍໍ້ (ເປີດຕາມຄ່າເລີ່ມຕົ້ນສໍາລັບຊ່ວງເວລາເຂົ້າໃ,່, ຈາກນັ້ນສະຖານະຈະຖືກເກັບໄວ້ສໍາລັບແຕ່ລະຊ່ວງເວລາຂອງຜູ້ໃຊ້)
ກໍານົດອັນນີ້ເປັນ 2 ສໍາລັບຕົວແຍກການຫຍໍ້ (ຫຍໍ້ລົງຕາມຄ່າເລີ່ມຕົ້ນສໍາລັບເຊດຊັນໃ,່, ຈາກນັ້ນ ສະຖານະພາບໄດ້ຖືກເກັບຮັກສາໄວ້ໃນແຕ່ລະກອງປະຊຸມຜູ້ໃຊ້) @@ -483,7 +483,7 @@ ExternalModule=ໂມດູນພາຍນອກ InstalledInto=ຕິດຕັ້ງໃສ່ໄດເຣັກທໍຣີ %s BarcodeInitForThirdparties=ການລິເລີ່ມບາໂຄດ ຈຳ ນວນຫຼາຍ ສຳ ລັບພາກສ່ວນທີສາມ BarcodeInitForProductsOrServices=ເລີ່ມຫຼືຕັ້ງບາໂຄດຄືນໃfor່ ສຳ ລັບຜະລິດຕະພັນຫຼືການບໍລິການ -CurrentlyNWithoutBarCode=ໃນປັດຈຸບັນ, ທ່ານມີ %s ຢູ່ໃນ %s b0ecb2ecz87f4 . +CurrentlyNWithoutBarCode=Currently, you have %s record on %s %s without barcode defined. InitEmptyBarCode=ຄ່າ init ສໍາລັບ %s ບາໂຄດເປົ່າ EraseAllCurrentBarCode=ລຶບຄ່າ barcode ປັດຈຸບັນທັງົດ ConfirmEraseAllCurrentBarCode=ເຈົ້າແນ່ໃຈບໍວ່າເຈົ້າຕ້ອງການລຶບຄ່າ barcode ປັດຈຸບັນທັງ?ົດ? @@ -1197,6 +1197,7 @@ Skin=ຮູບແບບສີສັນຜິວ ໜັງ DefaultSkin=ຮູບແບບສີສັນເລີ່ມຕົ້ນ MaxSizeList=ຄວາມຍາວສູງສຸດຂອງລາຍການ DefaultMaxSizeList=ຄວາມຍາວສູງສຸດເລີ່ມຕົ້ນ ສຳ ລັບລາຍຊື່ +DisplayGrandTotalInList=Display grand total (for all pages) in lists footer DefaultMaxSizeShortList=ຄວາມຍາວສູງສຸດເລີ່ມຕົ້ນ ສຳ ລັບລາຍຊື່ສັ້ນ (ເຊັ່ນ: ໃນບັດລູກຄ້າ) MessageOfDay=ຂໍ້ຄວາມຂອງມື້ MessageLogin=ຂໍ້ຄວາມ ໜ້າ ເຂົ້າສູ່ລະບົບ @@ -1860,7 +1861,7 @@ PastDelayVCalExport=ຢ່າສົ່ງອອກເຫດການທີ່ເ SecurityKey = ກະແຈຄວາມປອດໄພ ##### ClickToDial ##### ClickToDialSetup=ຄລິກເພື່ອໂທຫາການຕັ້ງໂມດູນ -ClickToDialUrlDesc=URL ເອີ້ນວ່າເມື່ອຄລິກໃສ່ຮູບໂທລະສັບແລ້ວ. ໃນ URL, ທ່ານສາມາດນໍາໃຊ້ tags
__PHONETO__ ແທນທີ່ດ້ວຍເບີໂທລະສັບຂອງຄົນທີ່ຈະໂທຫາ
__PHONEFROM__b09a4b739f17f80z ຈະຖືກແທນທີ່ດ້ວຍເບີໂທລະສັບຂອງຜູ້ໂທ (ຂອງເຈົ້າ)
__LOGIN__b09a4b7390f17f17 span> ທີ່ຈະຖືກແທນທີ່ດ້ວຍການເຂົ້າສູ່ລະບົບ clicktodial (ກຳນົດໄວ້ໃນບັດຜູ້ໃຊ້)
__PASS__ ທີ່ຈະຖືກແທນທີ່ດ້ວຍລະຫັດຜ່ານ clicktodial (ກໍານົດໄວ້ໃນບັດຜູ້ໃຊ້). +ClickToDialUrlDesc=URL called when a click on phone picto is done. In URL, you can use tags
__PHONETO__ that will be replaced with the phone number of person to call
__PHONEFROM__ that will be replaced with phone number of calling person (yours)
__LOGIN__ that will be replaced with clicktodial login (defined on user card)
__PASS__ that will be replaced with clicktodial password (defined on user card). ClickToDialDesc=ໂມດູນນີ້ປ່ຽນເບີໂທລະສັບ, ເມື່ອໃຊ້ຄອມພິວເຕີຕັ້ງໂຕະ, ເຂົ້າໄປໃນລິ້ງທີ່ສາມາດກົດໄດ້. ຄລິກຈະໂທຫາເບີ. ອັນນີ້ສາມາດໃຊ້ເພື່ອເລີ່ມໂທລະສັບໄດ້ເມື່ອໃຊ້ໂທລະສັບອ່ອນຢູ່ເທິງຄອມພິວເຕີຂອງເຈົ້າຫຼືເມື່ອໃຊ້ລະບົບ CTI ອີງຕາມພິທີການ SIP. Noteາຍເຫດ: ເມື່ອໃຊ້ສະມາດໂຟນ, ຕົວເລກໂທລະສັບສາມາດກົດໄດ້ຕະຫຼອດ. ClickToDialUseTelLink=ໃຊ້ພຽງແຕ່ການເຊື່ອມຕໍ່ "tel:" ຢູ່ໃນເບີໂທລະສັບ ClickToDialUseTelLinkDesc=ໃຊ້ວິທີນີ້ຖ້າຜູ້ໃຊ້ຂອງເຈົ້າມີ softphone ຫຼືມີການໂຕ້ຕອບຊອບແວ, ຕິດຕັ້ງຢູ່ໃນຄອມພິວເຕີດຽວກັນກັບ browser, ແລະໂທຫາເມື່ອເຈົ້າຄລິກໃສ່ລິ້ງທີ່ເລີ່ມຕົ້ນດ້ວຍ "tel:" ຢູ່ໃນ browser ຂອງເຈົ້າ. ຖ້າເຈົ້າຕ້ອງການການເຊື່ອມຕໍ່ທີ່ເລີ່ມຕົ້ນດ້ວຍ "sip:" ຫຼືການແກ້ໄຂບັນຫາ server ເຕັມ (ບໍ່ຈໍາເປັນຕ້ອງມີການຕິດຕັ້ງຊອບແວໃນທ້ອງຖິ່ນ), ເຈົ້າຕ້ອງຕັ້ງອັນນີ້ເປັນ "ບໍ່" ແລະຕື່ມໃສ່ຊ່ອງຂໍ້ມູນຕໍ່ໄປ. @@ -2291,7 +2292,7 @@ APIsAreNotEnabled=ໂມດູນ APIs ບໍ່ໄດ້ຖືກເປີດ YouShouldSetThisToOff=ເຈົ້າຄວນຕັ້ງອັນນີ້ເປັນ 0 ຫຼືປິດ InstallAndUpgradeLockedBy=ການຕິດຕັ້ງແລະອັບເກຣດຖືກລັອກໂດຍໄຟລ a %s InstallLockedBy=ການຕິດຕັ້ງ/ຕິດຕັ້ງຄືນໃໝ່ຖືກລັອກໂດຍໄຟລ໌ %s -InstallOfAddonIsNotBlocked=ການຕິດຕັ້ງ addons ບໍ່ໄດ້ຖືກລັອກ. ສ້າງໄຟລ໌ installmodules.lock ເຂົ້າໄປໃນໄດເລກະທໍລີ
%s ເພື່ອບລັອກການຕິດຕັ້ງ addons/modules ພາຍນອກ. +InstallOfAddonIsNotBlocked=Installations of addons are not locked. Create a file installmodules.lock into directory %s to block installations of external addons/modules. OldImplementation=ການຈັດຕັ້ງປະຕິບັດເກົ່າ PDF_SHOW_LINK_TO_ONLINE_PAYMENT=ຖ້າບາງໂມດູນການຈ່າຍເງິນອອນໄລນ໌ຖືກເປີດໃຊ້ (Paypal, Stripe, ...), ເພີ່ມການເຊື່ອມຕໍ່ໃນ PDF ເພື່ອເຮັດໃຫ້ການຊໍາລະເງິນອອນໄລນ໌. DashboardDisableGlobal=ປິດການນຳໃຊ້ນິ້ວໂປ້ມືທັງໝົດຂອງວັດຖຸທີ່ເປີດຢູ່ທົ່ວໂລກ @@ -2433,3 +2434,12 @@ UrlPublicInterfaceHelpAdmin=It is possible to define an alias to the web server ExportUseForce=Use the parameter -f ExportUseForceHelp=Force to continue the export even when an error is found (Backup may not be reliable) CustomPrompt=Custom prompts +AiDescription=AI (Artificial Intelligence) features +AiDescriptionLong=Provides AI (Artificial Intelligence) features in different part of the application. Need external AI API. +AI_KEY_API_CHATGPT= Key for ChatGPT IA api +AiSetup=AI module setup +AiCustomPrompt=AI customs prompt +AI_CONFIGURATIONS_PROMPT=Custom prompt +ImageGeneration=Image generation +AIPromptForFeatures=AI custom prompts for features +EnterAnIP=Enter an IP address diff --git a/htdocs/langs/lo_LA/banks.lang b/htdocs/langs/lo_LA/banks.lang index 4a28770a2ff..7471a976580 100644 --- a/htdocs/langs/lo_LA/banks.lang +++ b/htdocs/langs/lo_LA/banks.lang @@ -115,7 +115,7 @@ MenuBankInternalTransfer=ການໂອນພາຍໃນ TransferDesc=ໃຊ້ການໂອນພາຍໃນເພື່ອໂອນຈາກບັນຊີ ໜຶ່ງ ໄປຫາບັນຊີອື່ນ, ແອັບພລິເຄຊັນຈະຂຽນສອງບັນທຶກຄື: ການຫັກບັນຊີໃນບັນຊີຕົ້ນທາງແລະການປ່ອຍສິນເຊື່ອໃນບັນຊີເປົ້າາຍ. ຈຳ ນວນດຽວກັນ, ປ້າຍ ກຳ ກັບແລະວັນທີຈະຖືກໃຊ້ ສຳ ລັບທຸລະ ກຳ ນີ້. TransferFrom=ຈາກ TransferTo=ເຖິງ -TransferFromToDone=ການໂອນຍ້າຍຈາກ %s ໄປ %s ຂອງ b0aee83365837fz 'notranslate'>%s
%s ຖືກບັນທຶກແລ້ວ. +TransferFromToDone=A transfer from %s to %s of %s %s has been recorded. CheckTransmitter=ຜູ້ສົ່ງ ValidateCheckReceipt=ຮັບຮອງໃບຮັບເງິນນີ້ບໍ? ConfirmValidateCheckReceipt=ເຈົ້າແນ່ໃຈບໍ່ວ່າເຈົ້າຕ້ອງການສົ່ງໃບຮັບເງິນກວດສອບຄວາມຖືກຕ້ອງນີ້? ຈະບໍ່ສາມາດປ່ຽນແປງໄດ້ເມື່ອກວດສອບແລ້ວ. diff --git a/htdocs/langs/lo_LA/bills.lang b/htdocs/langs/lo_LA/bills.lang index 1dd85b21aba..7f845aa1ad5 100644 --- a/htdocs/langs/lo_LA/bills.lang +++ b/htdocs/langs/lo_LA/bills.lang @@ -210,7 +210,7 @@ ConfirmClassifyPaidPartiallyReasonDiscountVatDesc=ໃນບາງປະເທດ ConfirmClassifyPaidPartiallyReasonAvoirDesc=ໃຊ້ທາງເລືອກນີ້ຖ້າອັນອື່ນບໍ່ເsuitາະສົມ ConfirmClassifyPaidPartiallyReasonBadCustomerDesc=ລູກຄ້າທີ່ບໍ່ດີ ແມ່ນລູກຄ້າທີ່ປະຕິເສດທີ່ຈະຊໍາລະ ໜີ້ ຂອງລາວ. ConfirmClassifyPaidPartiallyReasonProductReturnedDesc=ທາງເລືອກນີ້ຖືກໃຊ້ເມື່ອການຊໍາລະເງິນບໍ່ສໍາເລັດເພາະວ່າບາງຜະລິດຕະພັນຖືກສົ່ງຄືນ -ConfirmClassifyPaidPartiallyReasonBankChargeDesc=ຈຳນວນທີ່ຍັງບໍ່ໄດ້ຈ່າຍແມ່ນ ຄ່າທຳນຽມທະນາຄານຕົວກາງ, ຫັກອອກໂດຍກົງຈາກ b0aee8336583 >ຈຳນວນທີ່ຖືກຕ້ອງ
ລູກຄ້າຈ່າຍໃຫ້. +ConfirmClassifyPaidPartiallyReasonBankChargeDesc=The unpaid amount is intermediary bank fees, deducted directly from the correct amount paid by the Customer. ConfirmClassifyPaidPartiallyReasonWithholdingTaxDesc=ຈໍານວນທີ່ບໍ່ໄດ້ຈ່າຍຈະບໍ່ຖືກຈ່າຍຍ້ອນວ່າມັນເປັນພາສີຫັກຢູ່ບ່ອນຈ່າຍ ConfirmClassifyPaidPartiallyReasonOtherDesc=ໃຊ້ຕົວເລືອກນີ້ຖ້າຄົນອື່ນທັງareົດບໍ່ເsuitableາະສົມ, ຕົວຢ່າງໃນສະຖານະການຕໍ່ໄປນີ້:
- ການຊໍາລະເງິນບໍ່ສໍາເລັດເພາະວ່າບາງຜະລິດຕະພັນຖືກສົ່ງຄືນ
- ຈໍານວນທີ່ອ້າງວ່າສໍາຄັນເກີນໄປເພາະວ່າມີສ່ວນຫຼຸດຖືກລືມ
ໃນທຸກກໍລະນີ, ຈໍານວນເງິນທີ່ອ້າງສິດເກີນໄປຕ້ອງໄດ້ຮັບການແກ້ໄຂ. ໃນລະບົບບັນຊີໂດຍການສ້າງບັນທຶກສິນເຊື່ອ. ConfirmClassifyPaidPartiallyReasonBadSupplierDesc=A ຜູ້ສະໜອງທີ່ບໍ່ດີ ເປັນຜູ້ສະໜອງທີ່ພວກເຮົາປະຕິເສດທີ່ຈະຈ່າຍເງິນ. diff --git a/htdocs/langs/lo_LA/errors.lang b/htdocs/langs/lo_LA/errors.lang index 078ba70e355..ac64d28046d 100644 --- a/htdocs/langs/lo_LA/errors.lang +++ b/htdocs/langs/lo_LA/errors.lang @@ -94,10 +94,10 @@ ErrorRecordIsUsedCantDelete=ບໍ່ສາມາດລຶບບັນທຶກ ErrorModuleRequireJavascript=JavaScript ຈະຕ້ອງບໍ່ຖືກປິດໃຊ້ງານເພື່ອໃຫ້ຄຸນສົມບັດນີ້ເຮັດວຽກໄດ້. ເພື່ອເປີດ/ປິດ JavaScript, ໃຫ້ໄປທີ່ເມນູ Home->Setup->Display. ErrorPasswordsMustMatch=ລະຫັດຜ່ານທີ່ພິມທັງສອງອັນຕ້ອງກົງກັນ ErrorContactEMail=ເກີດຄວາມຜິດພາດທາງດ້ານວິຊາການ. ກະລຸນາຕິດຕໍ່ຜູ້ເບິ່ງແຍງລະບົບເພື່ອຕິດຕາມອີເມວ %s ແລະໃຫ້ຂໍ້ຜິດພາດ ລະຫັດ %s ໃນຂໍ້ຄວາມຂອງທ່ານ, ຫຼືເພີ່ມສຳເນົາໜ້າຈໍຂອງ ໜ້ານີ້. -ErrorWrongValueForField=Field %s: ' %s' ບໍ່ກົງກັບກົດລະບຽບ regex b0587833 %s +ErrorWrongValueForField=Field %s: '%s' does not match regex rule %s ErrorHtmlInjectionForField=Field %s: ຄ່າ '%s' ມີຂໍ້ມູນທີ່ເປັນອັນຕະລາຍທີ່ບໍ່ໄດ້ຮັບອະນຸຍາດ. ErrorFieldValueNotIn=ພາກສະຫນາມ %s : ' %s ' ບໍ່ແມ່ນມູນຄ່າທີ່ພົບເຫັນໃນພາກສະຫນາມ %s ຂອງ %s -ErrorFieldRefNotIn=Field %s: ' %s' ບໍ່ແມ່ນ b0aee><83spanf36583 class='notranslate'>%s ອ້າງອີງທີ່ມີຢູ່ແລ້ວ +ErrorFieldRefNotIn=Field %s: '%s' is not a %s existing ref ErrorMultipleRecordFoundFromRef=ພົບບັນທຶກຫຼາຍຢ່າງເມື່ອຊອກຫາຈາກ ref %s. ບໍ່ມີທາງທີ່ຈະຮູ້ວ່າຈະໃຊ້ ID ໃດ. ErrorsOnXLines=ພົບຂໍ້ຜິດພາດ %s ErrorFileIsInfectedWithAVirus=ໂປຣແກມປ້ອງກັນໄວຣັດບໍ່ສາມາດກວດສອບໄຟລໄດ້ (ໄຟລ might ອາດຈະຕິດໄວຣັດ) diff --git a/htdocs/langs/lo_LA/eventorganization.lang b/htdocs/langs/lo_LA/eventorganization.lang index a8c4d32f689..a5c04cde748 100644 --- a/htdocs/langs/lo_LA/eventorganization.lang +++ b/htdocs/langs/lo_LA/eventorganization.lang @@ -36,7 +36,7 @@ EventOrganizationSetup=ການຕັ້ງອົງການຈັດຕັ້ EventOrganization=ອົງການຈັດຕັ້ງເຫດການ EventOrganizationSetupPage = ໜ້າ ການຕັ້ງອົງການຈັດຕັ້ງເຫດການ EVENTORGANIZATION_TASK_LABEL = ປ້າຍ ກຳ ກັບ ໜ້າ ວຽກເພື່ອສ້າງອັດຕະໂນມັດເມື່ອໂຄງການໄດ້ຮັບການກວດສອບ -EVENTORGANIZATION_TASK_LABELTooltip = ເມື່ອທ່ານກວດສອບເຫດການເພື່ອຈັດຕັ້ງ, ບາງໜ້າວຽກສາມາດຖືກສ້າງໂດຍອັດຕະໂນມັດໃນໂຄງການ

ຕົວຢ່າງ:
ສົ່ງການໂທເຂົ້າປະຊຸມ
ສົ່ງການໂທສຳລັບບູດ
ກວດສອບການແນະນຳການຈັດກອງປະຊຸມ ='notranslate'>
ກວດສອບການສະໝັກສຳລັບ Booths
ເປີດການສະໝັກສະມາຊິກເຂົ້າຮ່ວມງານ
Send ຂອງເຫດການເຖິງລໍາໂພງ
ສົ່ງການເຕືອນເຫດການໃຫ້ຜູ້ຈັດບູດ
ສົ່ງຄໍາເຕືອນເຫດການໃຫ້ຜູ້ເຂົ້າຮ່ວມ +EVENTORGANIZATION_TASK_LABELTooltip = When you validate an event to organize, some tasks can be automatically created in the project

For example:
Send Call for Conferences
Send Call for Booths
Validate suggestions of Conferences
Validate application for Booths
Open subscriptions to the event for attendees
Send a remind of the event to speakers
Send a remind of the event to Booth hosters
Send a remind of the event to attendees EVENTORGANIZATION_TASK_LABELTooltip2=ເກັບໄວ້ຫວ່າງເປົ່າຖ້າທ່ານບໍ່ຈໍາເປັນຕ້ອງສ້າງຫນ້າວຽກໂດຍອັດຕະໂນມັດ. EVENTORGANIZATION_CATEG_THIRDPARTY_CONF = Categoryວດtoູ່ເພື່ອເພີ່ມໃສ່ພາກສ່ວນທີສາມສ້າງໂດຍອັດຕະໂນມັດເມື່ອມີຄົນແນະ ນຳ ການປະຊຸມ EVENTORGANIZATION_CATEG_THIRDPARTY_BOOTH = Categoryວດtoູ່ເພື່ອເພີ່ມໃສ່ພາກສ່ວນທີສາມສ້າງໂດຍອັດຕະໂນມັດເມື່ອພວກເຂົາແນະ ນຳ ບູດ @@ -88,6 +88,7 @@ PriceOfRegistration=ລາຄາການລົງທະບຽນ PriceOfRegistrationHelp=ລາຄາເພື່ອລົງທະບຽນຫຼືເຂົ້າຮ່ວມກິດຈະກໍາ PriceOfBooth=ລາຄາຈອງເພື່ອຢືນບູດ PriceOfBoothHelp=ລາຄາຈອງເພື່ອຢືນບູດ +EventOrganizationICSLinkProject=Link ICS for the event EventOrganizationICSLink=ເຊື່ອມຕໍ່ ICS ສໍາລັບກອງປະຊຸມ ConferenceOrBoothInformation=ຂໍ້ມູນກອງປະຊຸມ ຫຼື Booth Attendees=ຜູ້ເຂົ້າຮ່ວມ diff --git a/htdocs/langs/lo_LA/exports.lang b/htdocs/langs/lo_LA/exports.lang index 0b4ba1aad82..5664d12162c 100644 --- a/htdocs/langs/lo_LA/exports.lang +++ b/htdocs/langs/lo_LA/exports.lang @@ -114,7 +114,7 @@ Enclosure=Stim Delimiter SpecialCode=ລະຫັດພິເສດ ExportStringFilter=%% ອະນຸຍາດໃຫ້ປ່ຽນຕົວອັກສອນ ໜຶ່ງ ຕົວຫຼືຫຼາຍຕົວໃນຂໍ້ຄວາມ ExportDateFilter=YYYY, YYYYMM, YYYYMMDD: ການກັ່ນຕອງໂດຍ ໜຶ່ງ ປີ/ເດືອນ/ມື້
YYYY+YYYY, YYYYMM+YYYYMM, YYYYMMDD+YYYYMMDD: ການກັ່ນຕອງໃນຊ່ວງຫຼາຍປີ/ເດືອນ/ມື້ a0342fccYY>, ປີຕໍ່ໄປ/ເດືອນ/ມື້
NNNNNN+NNNNNN ການກັ່ນຕອງໃນໄລຍະຂອງຄ່າ
b08912a07ede2 /span>> NNNNN ການກັ່ນຕອງໂດຍຄ່າທີ່ສູງກວ່າ +ExportNumericFilter=NNNNN filters by one value
NNNNN+NNNNN filters over a range of values
< NNNNN filters by lower values
> NNNNN filters by higher values ImportFromLine=ການ ນຳ ເຂົ້າເລີ່ມຈາກlineາຍເລກແຖວ EndAtLineNb=ລົງທ້າຍດ້ວຍຕົວເລກແຖວ ImportFromToLine=ຂອບເຂດຈໍາກັດ (ຈາກ - ຫາ). ຕົວຢ່າງ: ເພື່ອລະເວັ້ນແຖວຫົວຂໍ້. diff --git a/htdocs/langs/lo_LA/main.lang b/htdocs/langs/lo_LA/main.lang index 40d77899416..41abbc65335 100644 --- a/htdocs/langs/lo_LA/main.lang +++ b/htdocs/langs/lo_LA/main.lang @@ -420,6 +420,8 @@ TotalTTCShort=ທັງ(ົດ (ລວມພາສີ) TotalHT=ທັງ(ົດ (ບໍ່ຮວມອາກອນ) TotalHTforthispage=ທັງ(ົດ (ບໍ່ລວມອາກອນ) ສໍາລັບ ໜ້າ ນີ້ Totalforthispage=ທັງforົດ ສຳ ລັບ ໜ້າ ນີ້ +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=ທັງ(ົດ (ລວມພາສີ) TotalTTCToYourCredit=ທັງ(ົດ (ລວມພາສີ) ຕໍ່ສິນເຊື່ອຂອງທ່ານ TotalVAT=ອາກອນທັງົດ @@ -647,6 +649,7 @@ ReportName=ຊື່ລາຍງານ ReportPeriod=ໄລຍະເວລາລາຍງານ ReportDescription=ລາຍລະອຽດ Report=ລາຍງານ +Reports=ບົດລາຍງານ Keyword=ຄໍາສໍາຄັນ Origin=ຕົ້ນກໍາເນີດ Legend=ຄວາມຫມາຍ diff --git a/htdocs/langs/lo_LA/modulebuilder.lang b/htdocs/langs/lo_LA/modulebuilder.lang index 1ace0b5d352..236e7944007 100644 --- a/htdocs/langs/lo_LA/modulebuilder.lang +++ b/htdocs/langs/lo_LA/modulebuilder.lang @@ -94,7 +94,7 @@ SeeExamples=ເບິ່ງຕົວຢ່າງທີ່ນີ້ EnabledDesc=ເງື່ອນໄຂເພື່ອໃຫ້ຊ່ອງຂໍ້ມູນນີ້ເຮັດວຽກໄດ້.

ຕົວຢ່າງ:
1
isModEnabled('anothermodule')
getDolGlobalString('MYMODULE_OPTION')==2 VisibleDesc=ສະໜາມແມ່ນເຫັນໄດ້ບໍ? (ຕົວຢ່າງ: 0=ບໍ່ເຄີຍເຫັນ, 1=ເບິ່ງເຫັນໄດ້ໃນລາຍການ ແລະສ້າງ/ອັບເດດ/ເບິ່ງແບບຟອມ, 2=ເບິ່ງເຫັນໄດ້ໃນລາຍການເທົ່ານັ້ນ, 3=ເບິ່ງເຫັນໄດ້ໃນແບບຟອມສ້າງ/ອັບເດດ/ເບິ່ງເທົ່ານັ້ນ (ບໍ່ຢູ່ໃນລາຍການ), 4=ເບິ່ງເຫັນໄດ້ໃນລາຍການ ແລະອັບເດດ/ເບິ່ງແບບຟອມເທົ່ານັ້ນ (ບໍ່ສ້າງ), 5=ເບິ່ງເຫັນໄດ້ໃນລາຍການ ແລະເບິ່ງແບບຟອມເທົ່ານັ້ນ (ບໍ່ສ້າງ, ບໍ່ອັບເດດ).

ການ​ນໍາ​ໃຊ້​ຄ່າ​ລົບ​ຫມາຍ​ຄວາມ​ວ່າ​ພາກ​ສະ​ຫນາມ​ບໍ່​ໄດ້​ສະ​ແດງ​ໃຫ້​ເຫັນ​ໂດຍ​ຄ່າ​ເລີ່ມ​ຕົ້ນ​ໃນ​ລາຍ​ການ​ແຕ່​ສາ​ມາດ​ເລືອກ​ສໍາ​ລັບ​ການ​ເບິ່ງ). ItCanBeAnExpression=ມັນສາມາດເປັນການສະແດງອອກ. ຕົວຢ່າງ:
preg_match('/public/', $_SERVER['PHP_SELF'])?0:1
$user ->hasRight('holiday', 'define_holiday')?1:5 -DisplayOnPdfDesc=ສະແດງຊ່ອງຂໍ້ມູນນີ້ຢູ່ໃນເອກະສານ PDF ທີ່ເຂົ້າກັນໄດ້, ທ່ານສາມາດຈັດການຕຳແໜ່ງດ້ວຍຊ່ອງຂໍ້ມູນ "Position" ໄດ້.
ສຳລັບເອກະສານ :
0 = ບໍ່ສະແດງ
1 = display
2 = ສະແດງພຽງແຕ່ຖ້າບໍ່ຫວ່າງ

b0e78463907c span>ສຳລັບແຖວເອກະສານ :

0 = ບໍ່ສະແດງ
1 =ສະແດງຢູ່ໃນຖັນ
3 =ສະແດງຢູ່ໃນຖັນລາຍລະອຽດແຖວຫຼັງຄຳອະທິບາຍ
4 =ສະແດງໃນຖັນລາຍລະອຽດຫຼັງຄຳອະທິບາຍ ພຽງແຕ່ຖ້າບໍ່ຫວ່າງ +DisplayOnPdfDesc=Display this field on compatible PDF documents, you can manage position with "Position" field.
For document :
0 = not displayed
1 = display
2 = display only if not empty

For document lines :
0 = not displayed
1 = displayed in a column
3 = display in line description column after the description
4 = display in description column after the description only if not empty DisplayOnPdf=ໃນ PDF IsAMeasureDesc=ສາມາດສະສົມມູນຄ່າຂອງຊ່ອງຂໍ້ມູນເພື່ອເອົາຈໍານວນທັງintoົດເຂົ້າໃນບັນຊີໄດ້ບໍ? (ຕົວຢ່າງ: 1 ຫຼື 0) SearchAllDesc=ພາກສະ ໜາມ ໄດ້ຖືກນໍາໃຊ້ເພື່ອເຮັດການຄົ້ນຫາຈາກເຄື່ອງມືຄົ້ນຫາໄວບໍ? (ຕົວຢ່າງ: 1 ຫຼື 0) @@ -148,7 +148,7 @@ CSSListClass=CSS ສຳ ລັບລາຍຊື່ NotEditable=ບໍ່ສາມາດແກ້ໄຂໄດ້ ForeignKey=ກະແຈຕ່າງປະເທດ ForeignKeyDesc=ຖ້າຄ່າຂອງຊ່ອງຂໍ້ມູນນີ້ຕ້ອງໄດ້ຮັບການຮັບປະກັນວ່າມີຢູ່ໃນຕາຕະລາງອື່ນ. ກະລຸນາໃສ່ syntax ທີ່ກົງກັບຄ່າທີ່ນີ້: tablename.parentfieldtocheck -TypeOfFieldsHelp=ຕົວຢ່າງ:
varchar(99)
email
ໂທລະສັບ
ip
url
passwordb0342fcc span>double(24,8)
ຈິງ
text
html
date
datetime
timestamp
integer
integer:ClassName:relativepath/to/classfile.class.php[:1[:filter]]b0342bzcfda /span>
'1' ໝາຍ​ຄວາມ​ວ່າ​ພວກ​ເຮົາ​ເພີ່ມ​ປຸ່ມ + ຫຼັງ​ຈາກ​ຄອມ​ໂບ​ເພື່ອ​ສ້າງ​ບັນ​ທຶກ
'filter' ເປັນ ເງື່ອນໄຂ syntax ຂອງ Universal Filter, ຕົວຢ່າງ: '((ສະຖານະ:=:1) AND (fk_user:=:_USER_ID__) AND (entity:IN:(__SHARED_ENTITIES__))' +TypeOfFieldsHelp=Example:
varchar(99)
email
phone
ip
url
password
double(24,8)
real
text
html
date
datetime
timestamp
integer
integer:ClassName:relativepath/to/classfile.class.php[:1[:filter]]

'1' means we add a + button after the combo to create the record
'filter' is an Universal Filter syntax condition, example: '((status:=:1) AND (fk_user:=:__USER_ID__) AND (entity:IN:(__SHARED_ENTITIES__))' TypeOfFieldsHelpIntro=ນີ້ແມ່ນປະເພດຂອງພາກສະຫນາມ / ຄຸນລັກສະນະ. AsciiToHtmlConverter=ຕົວປ່ຽນ Ascii ເປັນ HTML AsciiToPdfConverter=Ascii ເປັນຕົວປ່ຽນ PDF @@ -180,7 +180,7 @@ FailedToAddCodeIntoDescriptor=ລົ້ມເຫລວໃນການເພີ DictionariesCreated=ວັດຈະນານຸກົມ %s ສ້າງສຳເລັດແລ້ວ DictionaryDeleted=ວັດຈະນານຸກົມ %s ອອກສຳເລັດແລ້ວ PropertyModuleUpdated=ຊັບສິນ %s ໄດ້ຮັບການອັບເດດສຳເລັດແລ້ວ -InfoForApiFile=* ເມື່ອທ່ານສ້າງໄຟລ໌ເປັນຄັ້ງທຳອິດ, ວິທີການທັງໝົດຈະຖືກສ້າງ ສຳລັບແຕ່ລະວັດຖຸ.
* ເມື່ອທ່ານຄລິກໃນ remove ທ່ານພຽງແຕ່ລຶບວິທີການທັງໝົດສຳລັບ
ວັດຖຸທີ່ເລືອກ. +InfoForApiFile=* When you generate file for the first time then all methods will be created for each object.
* When you click in remove you just remove all methods for the selected object. SetupFile=ຫນ້າສໍາລັບການຕິດຕັ້ງໂມດູນ EmailingSelectors=ຕົວເລືອກອີເມວ EmailingSelectorDesc=ທ່ານສາມາດສ້າງແລະແກ້ໄຂໄຟລ໌ຫ້ອງຮຽນໄດ້ທີ່ນີ້ເພື່ອສະຫນອງຕົວເລືອກເປົ້າຫມາຍອີເມວໃຫມ່ສໍາລັບໂມດູນການສົ່ງອີເມວມະຫາຊົນ diff --git a/htdocs/langs/lo_LA/website.lang b/htdocs/langs/lo_LA/website.lang index 8ded35b6c3f..b62e73f04ed 100644 --- a/htdocs/langs/lo_LA/website.lang +++ b/htdocs/langs/lo_LA/website.lang @@ -63,8 +63,8 @@ YouCanEditHtmlSourceckeditor=ເຈົ້າສາມາດແກ້ໄຂລະ YouCanEditHtmlSource=
You can include PHP code into this source using tags <?php ?>. The following global variables are available: $conf, $db, $mysoc, $user, $website, $websitepage, $weblangs, $pagelangs.

You can also include content of another Page/Container with the following syntax:
<?php includeContainer('alias_of_container_to_include'); ?>

You can make a redirect to another Page/Container with the following syntax (Note: do not output any content before a redirect):
<?php redirectToContainer('alias_of_container_to_redirect_to'); ?>

To add a link to another page, use the syntax:
<a href="alias_of_page_to_link_to.php">mylink<a>

To include a link to download a file stored into the documents directory, use the document.php wrapper:
Example, for a file into documents/ecm (need to be logged), syntax is:
<a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext">
For a file into documents/medias (open directory for public access), syntax is:
<a href="/document.php?modulepart=medias&file=[relative_dir/]filename.ext">
For a file shared with a share link (open access using the sharing hash key of file), syntax is:
<a href="/document.php?hashp=publicsharekeyoffile">
YouCanEditHtmlSource1=
To include an image stored into the documents directory, use the viewimage.php wrapper.
Example, for an image into documents/medias (open directory for public access), syntax is:
<img src="/viewimage.php?modulepart=medias&file=[relative_dir/]filename.ext">
YouCanEditHtmlSource2=ສໍາລັບຮູບພາບທີ່ແບ່ງປັນກັບການເຊື່ອມຕໍ່ແບ່ງປັນ (ເປີດການເຂົ້າເຖິງໂດຍໃຊ້ລະຫັດ hash ການແບ່ງປັນຂອງໄຟລ)), ໄວຍະກອນແມ່ນ:
<img src = "/viewimage.php? hashp = 12345679012 ... " a0012c7d009007700775 a039c087007c007c007c007c0b087c07c0b0785c087b07b0770c087b087b07b0770c07b07b07b07b0775c0b087b087b07b07b087b087b087a087b087b087b087c087c087c07b07b07b087c06b08770 -YouCanEditHtmlSource3=ເພື່ອເອົາ URL ຂອງຮູບຂອງວັດຖຸ PHP, ໃຫ້ໃຊ້
<img src="<?php ພິມ getImagePublicURLOfObject($object, 1, "_small") ?>" class='notranslate'>>

-YouCanEditHtmlSourceMore=
ຕົວຢ່າງເພີ່ມເຕີມຂອງ HTML ຫຼືລະຫັດໄດນາມິກທີ່ມີຢູ່ໃນ ເອກະສານ wiki >.
+YouCanEditHtmlSource3=To get the URL of the image of a PHP object, use
<img src="<?php print getImagePublicURLOfObject($object, 1, "_small") ?>">
+YouCanEditHtmlSourceMore=
More examples of HTML or dynamic code available on the wiki documentation.
ClonePage=Clone page/container CloneSite=Clone site SiteAdded=ເພີ່ມເວັບໄຊທແລ້ວ diff --git a/htdocs/langs/lt_LT/main.lang b/htdocs/langs/lt_LT/main.lang index 6633115ff0d..75cf180073c 100644 --- a/htdocs/langs/lt_LT/main.lang +++ b/htdocs/langs/lt_LT/main.lang @@ -420,6 +420,8 @@ TotalTTCShort=Iš viso (su PVM) TotalHT=Total (excl. tax) TotalHTforthispage=Total (excl. tax) for this page Totalforthispage=Total for this page +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=Iš viso (su PVM) TotalTTCToYourCredit=Iš viso (su PVM) prie Jūsų kredito TotalVAT=Iš viso PVM @@ -647,6 +649,7 @@ ReportName=Ataskaitos pavadinimas ReportPeriod=Ataskaitos laikotarpis ReportDescription=Aprašymas Report=Ataskaita +Reports=Ataskaitos Keyword=Keyword Origin=Origin Legend=Legenda diff --git a/htdocs/langs/lv_LV/admin.lang b/htdocs/langs/lv_LV/admin.lang index 0a16a201d58..3153da43412 100644 --- a/htdocs/langs/lv_LV/admin.lang +++ b/htdocs/langs/lv_LV/admin.lang @@ -253,7 +253,7 @@ MainDbPasswordFileConfEncrypted=Šifrēt datubāzes paroli, kas saglabāta conf. InstrucToEncodePass=Lai paroli šifrētu conf.php failā, nomainiet rindiņu
$ dolibarr_main_db_pass = "...";
ar
$ dolibarr_main_db_pass = "crypted: %s"; InstrucToClearPass=Lai conf.php failā dekodētu (dzēstu) paroli, nomainiet rindu
$dolibarr_main_db_pass = "crypted: ...";
ar
$dolibarr_main_db_pass = "%s"; ProtectAndEncryptPdfFiles=Aizsargāt ģenerētos PDF failus. Tas nav ieteicams, jo tas pārtrauc lielapjoma PDF ģenerēšanu. -ProtectAndEncryptPdfFilesDesc=Aizsardzība PDF dokumentu saglabā to pieejamu lasīt un izdrukāt ar jebkuru PDF pārlūkprogrammu. Tomēr, rediģēšana un kopēšana nav iespējams vairs. Ņemiet vērā, ka, izmantojot šo funkciju veidojot kopējos apvienotos pdf nedarbojas (piemēram, neapmaksātiem rēķiniem). +ProtectAndEncryptPdfFilesDesc=Aizsardzība PDF dokumentu saglabā to pieejamu lasīt un izdrukāt ar jebkuru PDF pārlūkprogrammu. Tomēr, rediģēšana un kopēšana nav iespējams vairs. Ņemiet vērā, ka, izmantojot šo funkciju veidojot kopējos apvienotos pdf nedarbojas (piemēram, neapmaksātiem rēķiniem). Feature=Iespēja DolibarrLicense=Licence Developpers=Izstrādātāji/ziedotāji @@ -366,9 +366,9 @@ GenericMaskCodes2= {cccc} klienta kods uz n rakstzīmēm
{cccc GenericMaskCodes3=Visas citas rakstzīmes masku paliks neskartas.
Atstarpes nav atļautas.
GenericMaskCodes3EAN=Visas pārējās maskas rakstzīmes paliks neskartas (izņemot * vai? EAN13 13. pozīcijā).
Atstarpes nav atļautas.
EAN13, pēdējam rakstzīmei pēc pēdējā} 13. pozīcijā jābūt * vai? . To aizstās aprēķinātā atslēga.
GenericMaskCodes4a=Piemērs par trešās puses TheCompany 99. piemēru %s ar datumu 2023. 01.31.:
-GenericMaskCodes4b=Piemērs par trešo pusi, izveidots 31.01.2023.:b0342fccfda +GenericMaskCodes4b=Example on third party created on 2023-01-31:
GenericMaskCodes4c=Piemērs par produktu, kas izveidots 2023.01.31.:
-GenericMaskCodes5=ABC{yy}{mm}-{000000} sniegs b0aee833650ABC2301-000099

b0aee83365837{0@0 }-ZZZ/{dd}/XXX sniegs 0199-ZZZ/31/XXX
IN{yy}{mm}-{0000}-{t} sniegs IN2301-0099-A, ja uzņēmuma veids "Atbildīgs Inscripto" ar kodu tipam, kas ir "A_RI" +GenericMaskCodes5=ABC{yy}{mm}-{000000} will give ABC2301-000099
{0000+100@1}-ZZZ/{dd}/XXX will give 0199-ZZZ/31/XXX
IN{yy}{mm}-{0000}-{t} will give IN2301-0099-A if the type of company is 'Responsable Inscripto' with code for type that is 'A_RI' GenericNumRefModelDesc=Atgriež pielāgojamu numuru atbilstoši noteiktajai maskai. ServerAvailableOnIPOrPort=Serveris ir pieejams adresē %s ports %s ServerNotAvailableOnIPOrPort=Serveris nav pieejams adresē %s ports %s @@ -464,7 +464,7 @@ ExtrafieldParamHelpPassword=Ja atstājat šo lauku tukšu, šī vērtība tiks s ExtrafieldParamHelpselect=Vērtību sarakstam jābūt rindām ar formāta atslēgu, vērtība (kur atslēga nevar būt '0')

, piemēram,: 1, vērtība1
2, vērtība2
kods3, vērtība3 < br> ...

Lai saraksts būtu atkarīgs no cita papildinošā atribūtu saraksta:
1, vērtība1 | opcijas_ vecāku_līmeņa kods : vecāku_skava
2, vērtība2 | opcijas_ vecāku saraksts_code : parent_key

Lai saraksts būtu atkarīgs no cita saraksta:
1, vērtība1 | vecāku saraksts_code : vecāku_skava
2, vērtība2 | vecāku saraksts_code : vecāku_poga ExtrafieldParamHelpcheckbox=Vērtību sarakstam jābūt rindām ar formāta atslēgu, vērtība (kur atslēga nevar būt '0')

, piemēram,: 1, vērtība1
2, vērtība2
3, vērtība3 < br> ... ExtrafieldParamHelpradio=Vērtību sarakstam jābūt rindām ar formāta atslēgu, vērtība (kur atslēga nevar būt '0')

, piemēram,: 1, vērtība1
2, vērtība2
3, vērtība3 < br> ... -ExtrafieldParamHelpsellist=Vērtību saraksts nāk no tabulas
Sintakse: table_name:label_field:id_field::filtersql
Piemērs: c_idtypent:libelle ::filtersql

 — lauks id_field noteikti ir primārā int atslēgab0342fccfda
Varat arī izmantot $ID$ filtrā, kas ir pašreizējā objekta pašreizējais ID
Lai filtrā izmantotu SELECT, izmantojiet atslēgvārdu $SEL$, lai apietu pretinjekcijas aizsardzību.
ja vēlaties filtrēt papildu laukus. izmantojiet sintaksi extra.fieldcode=... (kur lauka kods ir ekstralauka kods)

Lai saraksts atkarībā no cita papildu atribūtu saraksta:
c_typent:libelle:id:options_parent_list_code |parent_column:filter

Lai saraksts būtu atkarīgs no cita saraksta:
c_typent:libelle:id:parent_list_code| +ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filtersql
Example: c_typent:libelle:id::filtersql

- id_field is necessarily a primary int key
- filtersql is a SQL condition. It can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter which is the current id of current object
To use a SELECT into the filter use the keyword $SEL$ to bypass anti-injection protection.
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=Vērtību saraksts nāk no tabulas
Sintakse: table_name: label_field: id_field :: filtersql
Piemērs: c_typent: libelle: id :: filtersql

tikai aktīvs displejs var izmantot arī $ ID $ filtrā. ragana ir pašreizējā objekta
ID. Lai atlasītu filtru, izmantojiet $ SEL $
, ja vēlaties filtrēt ekstra laukos, izmantojiet sintaksi extra.fieldcode = ... (kur lauka kods ir kods extrafield)

lai būtu sarakstu atkarībā citā papildu atribūtu saraksta:
c_typent: Libelle: id: options_ parent_list_code | parent_column: filtrs

lai iegūtu sarakstu, atkarībā no citu sarakstā:
c_typent: libelle: id: parent_list_code | parent_column: filtrs ExtrafieldParamHelplink=Parametriem jābūt ObjectName: Classpath
Sintakse: ObjectName: Classpath ExtrafieldParamHelpSeparator=Vienkārša atdalītāja atstāšana tukša
Iestatiet to uz 1 sabrūkošajam atdalītājam (pēc noklusējuma atveriet jaunu sesiju, pēc tam katras lietotāja sesijai tiek saglabāts statuss)
Iestatiet to uz 2 sabrukušajam atdalītājam (jaunajai sesijai pēc noklusējuma sabrūk, pēc tam katras lietotāja sesijas laikā tiek saglabāts statuss) @@ -1197,6 +1197,7 @@ Skin=Izskats DefaultSkin=Noklusētais izskats MaxSizeList=Maksimālais saraksta garums DefaultMaxSizeList=Noklusētais maksimālais sarakstu garums +DisplayGrandTotalInList=Display grand total (for all pages) in lists footer DefaultMaxSizeShortList=Īsu saraksta noklusējuma maksimālais garums (t.i., klienta kartē) MessageOfDay=Dienas ziņa MessageLogin=Pieteikšanās lapas paziņojums @@ -1449,7 +1450,7 @@ MustBeInvoiceMandatory=Obligāti, lai apstiprinātu rēķinus? TechnicalServicesProvided=Tehniskie pakalpojumi ##### WebDAV ##### WebDAVSetupDesc=Šī ir saite, lai piekļūtu WebDAV direktorijai. Tā satur "publisku" dir., Kas atvērts jebkuram lietotājam, kurš zina URL (ja publiskā kataloga piekļuve ir atļauta) un "privātu" direktoriju, kuram ir nepieciešams esošs pieteikšanās konts / parole. -WebDavServer=%s servera%s saknes URL: +WebDavServer=%s servera%s saknes URL: ##### WebCAL setup ##### WebCalUrlForVCalExport=Eksporta saite uz %s formātā ir pieejams šādā tīmekļa vietnē: %s ##### Invoices ##### @@ -1860,7 +1861,7 @@ PastDelayVCalExport=Neeksportē notikums, kuri vecāki par SecurityKey = Drošības atslēga ##### ClickToDial ##### ClickToDialSetup=Klikšķiniet lai Dial moduļa uzstādīšanas -ClickToDialUrlDesc=URL tiek izsaukts, kad tiek noklikšķināts uz tālruņa attēla. Vietrādī URL varat izmantot tagus
__PHONETO__ aizstāts ar zvanāmās personas tālruņa numuru
__PHONEFROM__ tiks aizstāts ar zvanītās personas tālruņa numuru (jūsu)
__LOGIN__b09a4b739f1 span>, kas tiks aizstāts ar clicktodial pieteikšanos (noteikts lietotāja kartē)
__PASS__ , kas tiks aizstāta ar clicktodial paroli (noteikta lietotāja kartē). +ClickToDialUrlDesc=URL called when a click on phone picto is done. In URL, you can use tags
__PHONETO__ that will be replaced with the phone number of person to call
__PHONEFROM__ that will be replaced with phone number of calling person (yours)
__LOGIN__ that will be replaced with clicktodial login (defined on user card)
__PASS__ that will be replaced with clicktodial password (defined on user card). ClickToDialDesc=Šis modulis maina tālruņu numurus, izmantojot galddatoru, uz noklikšķināmām saitēm. Klikšķis piezvanīs uz numuru. To var izmantot, lai sāktu tālruņa zvanu, kad, izmantojot darbvirsmu, izmantojat mīksto tālruni vai, piemēram, izmantojot CTI sistēmu, kuras pamatā ir SIP protokols. Piezīme. Izmantojot viedtālruni, uz tālruņu numuriem vienmēr var noklikšķināt. ClickToDialUseTelLink=Use just a link "tel:" on phone numbers ClickToDialUseTelLinkDesc=Izmantojiet šo metodi, ja jūsu lietotājiem ir programmatūra vai programmatūras saskarne, kas instalēta tajā pašā datorā, kurā atrodas pārlūkprogramma, un zvanīja, kad pārlūkprogrammā noklikšķinājāt uz saites, kas sākas ar "tel:". Ja jums nepieciešama saite, kas sākas ar "sip:", vai pilns servera risinājums (nav nepieciešama vietējās programmatūras instalēšana), jums jāiestata tā uz "Nē" un jāaizpilda nākamais lauks. @@ -1943,7 +1944,7 @@ ShowFiscalYear=Rādīt grāmatvedības periodu AlwaysEditable=Vienmēr var rediģēt MAIN_APPLICATION_TITLE=Force visible name of application (warning: setting your own name here may break autofill login feature when using DoliDroid mobile application) NbMajMin=Minimālais lielo burtu skaits -NbNumMin=Minimālais ciparu skaits +NbNumMin=Minimālais ciparu skaits NbSpeMin=Minimālais speciālo simbolu skaits NbIteConsecutive=Maksimālais atkārtojošos simbolu skaits NoAmbiCaracAutoGeneration=Do not use ambiguous characters ("1","l","i","|","0","O") for automatic generation @@ -2433,3 +2434,12 @@ UrlPublicInterfaceHelpAdmin=Ir iespējams definēt tīmekļa servera aizstājvā ExportUseForce=Use the parameter -f ExportUseForceHelp=Force to continue the export even when an error is found (Backup may not be reliable) CustomPrompt=Custom prompts +AiDescription=AI (Artificial Intelligence) features +AiDescriptionLong=Provides AI (Artificial Intelligence) features in different part of the application. Need external AI API. +AI_KEY_API_CHATGPT= Key for ChatGPT IA api +AiSetup=AI module setup +AiCustomPrompt=AI customs prompt +AI_CONFIGURATIONS_PROMPT=Custom prompt +ImageGeneration=Image generation +AIPromptForFeatures=AI custom prompts for features +EnterAnIP=Enter an IP address diff --git a/htdocs/langs/lv_LV/main.lang b/htdocs/langs/lv_LV/main.lang index 11f583d9558..e1f1e3a4d31 100644 --- a/htdocs/langs/lv_LV/main.lang +++ b/htdocs/langs/lv_LV/main.lang @@ -420,6 +420,8 @@ TotalTTCShort=Pavisam (ar PVN) TotalHT=Kopā (bez nodokļiem) TotalHTforthispage=Kopā (izņemot nodokli) šai lapai Totalforthispage=Kopā par šo lapu +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=Pavisam (ar PVN) TotalTTCToYourCredit=Pavisam (ieskaitot nodokli), pie jūsu kredīta TotalVAT=Kopējā nodokļu @@ -647,6 +649,7 @@ ReportName=Atskaites nosaukums ReportPeriod=Atskaites periods ReportDescription=Apraksts Report=Ziņojums +Reports=Atskaites Keyword=Atslēgas vārdi Origin=Izcelsme Legend=Leģenda diff --git a/htdocs/langs/lv_LV/modulebuilder.lang b/htdocs/langs/lv_LV/modulebuilder.lang index 9b1eef67b60..30aafd8e147 100644 --- a/htdocs/langs/lv_LV/modulebuilder.lang +++ b/htdocs/langs/lv_LV/modulebuilder.lang @@ -148,7 +148,7 @@ CSSListClass=CSS sarakstam NotEditable=Nav rediģējams ForeignKey=Sveša atslēga ForeignKeyDesc=Ja šī lauka vērtībai ir jāgarantē, ka tā pastāv citā tabulā. Ievadiet šeit vērtību, kas atbilst sintakse: tablename.parentfieldtocheck -TypeOfFieldsHelp=Piemērs:
varchar(99)
e-pasts
tālrunis
ip
url
parole0double(24,8)
real
text
html
datums
datetime
laika zīmogs
vesels skaitlis
integer:ClassName:relativepath/to/classfile.class.php[:1[:filter]]b0342bccfda<99bcc0 /span>
“1” nozīmē, ka aiz kombinācijas tiek pievienota poga +, lai izveidotu ierakstu.
“filtrs” ir Universālā filtra sintakses nosacījums, piemērs: '((statuss:=:1) UN (fk_user:=:__USER_ID__) AND (entity:IN:(__SHARED_ENTITIES__))' +TypeOfFieldsHelp=Example:
varchar(99)
email
phone
ip
url
password
double(24,8)
real
text
html
date
datetime
timestamp
integer
integer:ClassName:relativepath/to/classfile.class.php[:1[:filter]]

'1' means we add a + button after the combo to create the record
'filter' is an Universal Filter syntax condition, example: '((status:=:1) AND (fk_user:=:__USER_ID__) AND (entity:IN:(__SHARED_ENTITIES__))' TypeOfFieldsHelpIntro=Šis ir lauka/atribūta veids. AsciiToHtmlConverter=Ascii uz HTML pārveidotāju AsciiToPdfConverter=Ascii uz PDF pārveidotāju @@ -180,7 +180,7 @@ FailedToAddCodeIntoDescriptor=Neizdevās pievienot kodu deskriptoram. Pārbaudie DictionariesCreated=Vārdnīca %s ir veiksmīgi izveidota DictionaryDeleted=Vārdnīca %s veiksmīgi noņemta PropertyModuleUpdated=Īpašums %s ir veiksmīgi atjaunināts -InfoForApiFile=* Katram objektam ģenerējot failu pirmo reizi, visas metodes tiks izveidotas .
* Noklikšķinot uz noņemt, jūs vienkārši noņemat visas atlasīts objekts. +InfoForApiFile=* When you generate file for the first time then all methods will be created for each object.
* When you click in remove you just remove all methods for the selected object. SetupFile=Lapa moduļa iestatīšanai EmailingSelectors=E-pasta atlasītāji EmailingSelectorDesc=Šeit varat ģenerēt un rediģēt klases failus, lai nodrošinātu jaunus e-pasta mērķa atlasītājus masveida e-pasta sūtīšanas modulim diff --git a/htdocs/langs/lv_LV/stocks.lang b/htdocs/langs/lv_LV/stocks.lang index 963a0b97a27..8b27cf6beeb 100644 --- a/htdocs/langs/lv_LV/stocks.lang +++ b/htdocs/langs/lv_LV/stocks.lang @@ -282,7 +282,7 @@ ModuleStockTransferName=Uzlabota akciju pārsūtīšana ModuleStockTransferDesc=Uzlabota krājumu pārsūtīšanas pārvaldība ar pārsūtīšanas lapas ģenerēšanu StockTransferNew=Jaunu akciju nodošana StockTransferList=Krājumu pārvedumu saraksts -ConfirmValidateStockTransfer=Vai tiešām vēlaties apstiprināt šo akciju nodošanu ar atsauci %s span> ? +ConfirmValidateStockTransfer=Are you sure you want to validate this stocks transfer with the reference %s ? ConfirmDestock=Krājumu samazinājums ar pārskaitījumu %s ConfirmDestockCancel=Atcelt krājumu samazināšanu ar pārskaitījumu %s DestockAllProduct=Krājumu samazināšanās diff --git a/htdocs/langs/lv_LV/website.lang b/htdocs/langs/lv_LV/website.lang index 8294c2e6647..1497fa49f4c 100644 --- a/htdocs/langs/lv_LV/website.lang +++ b/htdocs/langs/lv_LV/website.lang @@ -60,11 +60,11 @@ NoPageYet=Vēl nav nevienas lapas YouCanCreatePageOrImportTemplate=Jūs varat izveidot jaunu lapu vai importēt pilnu vietnes veidni SyntaxHelp=Palīdzība par konkrētiem sintakses padomiem YouCanEditHtmlSourceckeditor=Jūs varat rediģēt HTML avota kodu, izmantojot redaktorā pogu "Avots". -YouCanEditHtmlSource=
Šajā avotā varat iekļaut PHP kodu, izmantojot tagus <?php ?>
ccfda192bz0 /span> Varat veikt novirzīšanu uz citu lapu/konteineru, izmantojot šādu sintaksi (piezīme: neizvadiet nevienu saturs pirms novirzīšanas):
<?php redirectToContainer alias_of_container_to_redirect_to'); ?>
ccfda192bz0 /span> Lai pievienotu saiti uz citu lapu, izmantojiet sintaksi:
<a href="alias_of_page_to_link_to.php"b0012c7d0bemana saite<a>

='notranslate'>
saite, lai lejupielādētu failu, kas saglabāts dokumentos direktorijā, izmantojiet document.php class'no:translate' class'no: >
Piemērs, failam dokumentos/ecm (jāreģistrē), sintakse ir šāda:
><a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext">
Dokumentos/multivides failam (atvērts publiskai piekļuvei), sintakse ir šāda:
<a href="/document.php?modulepart=medias&file=[relative_name ext">
Failam, kas kopīgots ar kopīgošanas saiti ( atvērta piekļuve, izmantojot faila koplietošanas jaucējatslēgu), sintakse ir:
<a href="/document.php?hashp=publicsharekeyoffile">
-YouCanEditHtmlSource1=
Lai iekļautu attēls, kas saglabāts dokumentosb0701
b07009f6fcz09 , izmantojiet viewimage.php iesaiņojumu.
,Piemēram attēlu dokumentos/multivides (atvērts direktorijs publiskai piekļuvei), sintakse ir:
<img src="/viewimage.php?modulepart=medias&file=[relative_dir/]filename.ext"

You can make a redirect to another Page/Container with the following syntax (Note: do not output any content before a redirect):
<?php redirectToContainer('alias_of_container_to_redirect_to'); ?>

To add a link to another page, use the syntax:
<a href="alias_of_page_to_link_to.php">mylink<a>

To include a link to download a file stored into the documents directory, use the document.php wrapper:
Example, for a file into documents/ecm (need to be logged), syntax is:
<a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext">
For a file into documents/medias (open directory for public access), syntax is:
<a href="/document.php?modulepart=medias&file=[relative_dir/]filename.ext">
For a file shared with a share link (open access using the sharing hash key of file), syntax is:
<a href="/document.php?hashp=publicsharekeyoffile">
+YouCanEditHtmlSource1=
To include an image stored into the documents directory, use the viewimage.php wrapper.
Example, for an image into documents/medias (open directory for public access), syntax is:
<img src="/viewimage.php?modulepart=medias&file=[relative_dir/]filename.ext">
YouCanEditHtmlSource2=Attēlam, kas tiek koplietots ar koplietošanas saiti (atvērta piekļuve, izmantojot faila koplietošanas hash atslēgu), sintakse ir:
<img src = "/ viewimage.php? Hashp = 123456790120f0f0f0f0f0f0c0f0fcfcfcfcfcfcfcfcfcfcfcflcflcfcflcflcfl0f0flffcfcfcflflfcflflflflflflflflflflflflflflflflflflflflflflfcflflflflflflflflflflflflflrlxlrg" " -YouCanEditHtmlSource3=Lai iegūtu PHP objekta attēla URL, izmantojiet
<. span>img src="<?php print getImagePublicURLOfObject($object, 1, "_small") ?> class='notranslate'>>
-YouCanEditHtmlSourceMore=
Citi HTML vai dinamiskā koda piemēri ir pieejami wiki dokumentācijā >.
+YouCanEditHtmlSource3=To get the URL of the image of a PHP object, use
<img src="<?php print getImagePublicURLOfObject($object, 1, "_small") ?>">
+YouCanEditHtmlSourceMore=
More examples of HTML or dynamic code available on the wiki documentation.
ClonePage=Klonēt lapu / konteineru CloneSite=Klonēt vietni SiteAdded=Tīmekļa vietne ir pievienota diff --git a/htdocs/langs/lv_LV/withdrawals.lang b/htdocs/langs/lv_LV/withdrawals.lang index dc4dc5af141..db511322ea3 100644 --- a/htdocs/langs/lv_LV/withdrawals.lang +++ b/htdocs/langs/lv_LV/withdrawals.lang @@ -47,7 +47,7 @@ MakeBankTransferOrder=Veiciet kredīta pārveduma pieprasījumu WithdrawRequestsDone=%s reģistrēti tiešā debeta maksājumu pieprasījumi BankTransferRequestsDone=%s reģistrēti kredīta pārveduma pieprasījumi ThirdPartyBankCode=Trešās puses bankas kods -NoInvoiceCouldBeWithdrawed=Neviens rēķins nav veiksmīgi apstrādāts. Pārbaudiet, vai rēķini ir no uzņēmumiem ar derīgu IBAN un vai IBAN ir UMR (unikālā mandāta atsauce) ar režīmu %s<. span class='notranslate'>
. +NoInvoiceCouldBeWithdrawed=No invoice processed successfully. Check that invoices are on companies with a valid IBAN and that IBAN has a UMR (Unique Mandate Reference) with mode %s. NoInvoiceCouldBeWithdrawedSupplier=Neviens rēķins nav veiksmīgi apstrādāts. Pārbaudiet, vai rēķini ir no uzņēmumiem ar derīgu IBAN. NoSalariesCouldBeWithdrawed=Neviena alga nav veiksmīgi apstrādāta. Pārbaudiet, vai alga ir lietotājiem ar derīgu IBAN. WithdrawalCantBeCreditedTwice=Šī izņemšanas kvīts jau ir atzīmēta kā ieskaitīta; to nevar izdarīt divreiz, jo tas potenciāli radītu maksājumu un bankas ierakstu dublikātus. @@ -171,4 +171,3 @@ SalaryWaitingWithdraw=Algas gaida samaksu ar pārskaitījumu RefSalary=Alga NoSalaryInvoiceToWithdraw=Nav algas, kas gaida “%s”. Lai iesniegtu pieprasījumu, atveriet algas kartes cilni %s. SalaryInvoiceWaitingWithdraw=Algas gaida samaksu ar pārskaitījumu - diff --git a/htdocs/langs/mk_MK/main.lang b/htdocs/langs/mk_MK/main.lang index 35459e8f355..d5f3362a305 100644 --- a/htdocs/langs/mk_MK/main.lang +++ b/htdocs/langs/mk_MK/main.lang @@ -420,6 +420,8 @@ TotalTTCShort=Total (inc. tax) TotalHT=Total (excl. tax) TotalHTforthispage=Total (excl. tax) for this page Totalforthispage=Total for this page +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=Total (inc. tax) TotalTTCToYourCredit=Total (inc. tax) to your credit TotalVAT=Total tax @@ -647,6 +649,7 @@ ReportName=Report name ReportPeriod=Report period ReportDescription=Description Report=Report +Reports=Reports Keyword=Keyword Origin=Origin Legend=Legend diff --git a/htdocs/langs/nb_NO/admin.lang b/htdocs/langs/nb_NO/admin.lang index 5204958ad24..c12b7287862 100644 --- a/htdocs/langs/nb_NO/admin.lang +++ b/htdocs/langs/nb_NO/admin.lang @@ -231,7 +231,7 @@ SetOptionTo=Sett alternativet %s til %s Updated=Oppdatert AchatTelechargement=Kjøp/Last ned GoModuleSetupArea=For å distribuere/installere en ny modul, gå til området for Moduloppsett på %s. -DoliStoreDesc=DoliStore, den offisielle markedsplassen for eksterne moduler til Dolibarr ERP/CRM +DoliStoreDesc=DoliStore, den offisielle markedsplassen for eksterne moduler til Dolibarr ERP/CRM DoliPartnersDesc=Liste over selskaper som tilbyr spesialutviklede moduler eller funksjoner.
Merk: Siden Dolibarr er et program med åpen kildekode, bør alle med erfaring i PHP-programmering kunne utvikle en modul. WebSiteDesc=Eksterne nettsteder for flere tilleggs- (ikke-kjerne) moduler ... DevelopYourModuleDesc=Noen løsninger for å utvikle din egen modul... @@ -352,7 +352,7 @@ NotExistsDirect=Alternativ rotkatalog er ikke definert til en eksisterende katal InfDirAlt=Fra versjon 3 er det mulig å definere en alternativ rotkatalog. Dette gjør det mulig å lagre plug-ins og egendefinerte maler.
Opprett en katalog i roten til Dolibarr (f.eks min katalog).
InfDirExample=
Deklarer det i filen conf.php
$ dolibarr_main_url_root_alt='/custom'
$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/tilpasset'
Hvis disse linjene er kommentert med "#", er det bare å fjerne tegnet "#" for å aktivere linjene. YouCanSubmitFile=Du kan laste opp .zip-filen til modulpakken herfra: -CurrentVersion=Gjeldende versjon av Dolibarr +CurrentVersion=Gjeldende versjon av Dolibarr CallUpdatePage=Gå til siden som oppdaterer databasestrukturen og dataene: %s. LastStableVersion=Siste stabile versjon LastActivationDate=Siste aktiveringsdato @@ -365,9 +365,9 @@ GenericMaskCodes=Her kan du legge inn nummereringsmal. I malen kan du bruke føl GenericMaskCodes2= {cccc} klientkoden på n tegn
{cccc000} klientkoden på n tegn etterfølges av en teller dedikert for kunden. Denne telleren tilbakestilles samtidig med global teller.
{tttt} Koden til tredjepartstype på n tegn (se menyen Hjem - Oppsett - Ordbok - Typer av tredjeparter) . Hvis du legger til denne taggen, vil telleren være forskjellig for hver type tredjepart.
GenericMaskCodes3=Alle andre tegn i masken vil være intakt.
Mellomrom er ikke tillatt.
GenericMaskCodes3EAN=Alle andre tegn i masken forblir intakte (unntatt * eller ? I 13. posisjon i EAN13).
Mellomrom er ikke tillatt.
I EAN13 skal det siste tegnet etter det siste} i 13. posisjon være * eller? . Den vil bli erstattet av den beregnede nøkkelen.
-GenericMaskCodes4a= Eksempel på den 99. %s av tredjeparten Firmaet, med dato 2023-01-31:
+GenericMaskCodes4a= Eksempel på den 99. %s av tredjeparten Firmaet, med dato 2023-01-31:
GenericMaskCodes4b= Eksempel på tredjepart opprettet 2023-01-31:
-GenericMaskCodes4c= Eksempel på vare opprettet 2023-01-31:
+GenericMaskCodes4c= Eksempel på vare opprettet 2023-01-31:
GenericMaskCodes5= ABC{åå}{mm}-{000000} vil gi ABC2301-000099
{0000+100@1}-ZZZ/{dd}/XXX vil gi 0199-ZZZ/31/XXX
IN{yy}{mm}-{0000}-{t} vil gi IN2301-0099-A hvis selskapstypen er 'Responsable Inscripto' med kode for type som er 'A_RI' GenericNumRefModelDesc=Gir et egendefinert nummer etter en definert mal. ServerAvailableOnIPOrPort=Serveren er tilgjengelig på adressen %s på port %s @@ -684,7 +684,7 @@ Module5000Desc=Lar deg administrere flere selskaper Module6000Name=Intermoduler Arbeidsflyt Module6000Desc=Arbeidsflytstyring mellom forskjellige moduler (automatisk oppretting av objekt og/eller automatisk statusendring) Module10000Name=Websider -Module10000Desc=CMS to create websites with a WYSIWYG editor. This is a webmaster or developer oriented Content Management System (it is better to know HTML and CSS language). Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the internet with your own domain name. +Module10000Desc=CMS for å lage nettsteder med en WYSIWYG-editor. Dette er et webmaster- eller utviklerorientert innholdsstyringssystem (det er bedre å kunne HTML og CSS-språk). Bare konfigurer webserveren din (Apache, Nginx, ...) for å peke til den dedikerte Dolibarr-katalogen for å ha den online på internett med ditt eget domenenavn. Module20000Name=Håndtering av permisjonsforespørsler Module20000Desc=Definer og spor ansattes permisjonsforespørsler Module39000Name=Varelotter @@ -1042,7 +1042,7 @@ Permission50440=Administrer kontooversikt, oppsett av regnskap Permission51001=Les eiendeler Permission51002=Opprett/oppdater eiendeler Permission51003=Slett eiendeler -Permission51005=Oppsett av aktivatyper +Permission51005=Oppsett av aktivatyper Permission54001=Skriv ut Permission55001=Les meningsmålinger Permission55002=Opprett/endre meningsmålinger @@ -1147,7 +1147,7 @@ LocalTax2IsNotUsedExampleES=I Spania er de bedrifter som ikke er ikke skatteplik RevenueStampDesc="Avgiftsstempelet" eller "inntektsstempelet" er en fast avgift du betaler per faktura (det avhenger ikke av fakturabeløpet). Det kan også være en prosentskatt, men å bruke den andre eller tredje typen skatt er bedre for prosentskatt, ettersom avgiftsstempler ikke gir noen rapportering. Bare få land bruker denne typen avgifter. UseRevenueStamp=Bruk et avgiftsstempel UseRevenueStampExample=Verdien av avgiftstempelet er definert som standard i oppsettet av ordbøker (%s - %s - %s) -CalcLocaltax=Rapport over lokale avgifter +CalcLocaltax=Rapport over lokale avgifter CalcLocaltax1=Salg - Innkjøp CalcLocaltax1Desc=Lokale skatter-rapporter kalkuleres med forskjellen mellom kjøp og salg CalcLocaltax2=Innkjøp @@ -1197,6 +1197,7 @@ Skin=Tema DefaultSkin=Standard tema MaxSizeList=Makslengde på lister DefaultMaxSizeList=Standard maks.lengde for lister +DisplayGrandTotalInList=Vis totalsum (for alle sider) i listens bunntekst DefaultMaxSizeShortList=Standard maks lengde for korte lister (dvs. i kundekort) MessageOfDay=Dagens melding MessageLogin=Meldingstekst på innloggingsbildet @@ -1466,7 +1467,7 @@ FreeLegalTextOnInvoices=Fritekst på fakturaer WatermarkOnDraftInvoices=Vannmerke på fakturakladder (ingen hvis tom) PaymentsNumberingModule=Modell for betalingsnummerering SuppliersPayment=Leverandørbetalinger -SupplierPaymentSetup=Oppsett av leverandørbetaling +SupplierPaymentSetup=Oppsett av leverandørbetaling InvoiceCheckPosteriorDate=Sjekk fakturadato før validering InvoiceCheckPosteriorDateHelp=Validering av en faktura vil være forbudt hvis datoen er foran datoen for siste faktura av samme type. InvoiceOptionCategoryOfOperations=Vis omtale "kategori av operasjoner" på fakturaen. @@ -1573,7 +1574,7 @@ LDAPMemberDn=Dolibarr-medlemmers DN LDAPMemberDnExample=Komplett DN (eks: ou=medlemmer,dc=eksempel,dc=com) LDAPMemberObjectClassList=Liste over objectClass LDAPMemberObjectClassListExample=Liste over objectClass som definerer postattributter (eks: topp, inetOrgPerson eller topp, bruker for ActiveDirectory) -LDAPMemberTypeDn=Dolibarr medlemmer DN-typer +LDAPMemberTypeDn=Dolibarr medlemmer DN-typer LDAPMemberTypepDnExample=Komplett DN (eks: ou=medlemstyper, dc=eksempel, dc=com) LDAPMemberTypeObjectClassList=Liste over objectClass LDAPMemberTypeObjectClassListExample=Liste over objectClass som definerer postattributter (eks: topp, groupOfUniqueNames) @@ -1700,7 +1701,7 @@ ProductServiceSetup=Oppsett av varer- og tjenester-modulen NumberOfProductShowInSelect=Maksimalt antall varer som skal vises i kombinasjonslister (0 = ingen grense) ViewProductDescInFormAbility=Vis produktbeskrivelser i varelinjer (ellers vis beskrivelse i et popup-vindu med verktøytips) OnProductSelectAddProductDesc=Hvordan bruke varebeskrivelsen når du legger til en en vare som en linje i et dokument -AutoFillFormFieldBeforeSubmit=Fyll ut beskrivelsesfeltet med varebeskrivelsen automatisk +AutoFillFormFieldBeforeSubmit=Fyll ut beskrivelsesfeltet med varebeskrivelsen automatisk DoNotAutofillButAutoConcat=Ikke fyll inn inndatafeltet med varebeskrivelse. Varebeskrivelsen blir automatisk sammenkoblet til den angitte beskrivelsen. DoNotUseDescriptionOfProdut=Varebeskrivelse vil aldri bli inkludert i beskrivelsen på dokumentlinjer MergePropalProductCard=I "Vedlagte filer"-fanen i "Varer og tjenester" kan du aktivere en opsjon for å flette PDF-varedokument til tilbud PDF-azur hvis varen/tjenesten er i tilbudet @@ -2294,8 +2295,8 @@ InstallLockedBy=Installer/Reinstaller er låst av filen %s InstallOfAddonIsNotBlocked=Installasjoner av tillegg er ikke låst. Opprett en fil installmodules.lock i katalogen %s for å blokkere installasjoner av eksterne tilleggsmoduler. OldImplementation=Gammel implementering PDF_SHOW_LINK_TO_ONLINE_PAYMENT=Hvis noen elektroniske betalingsmoduler er aktivert (Paypal, Stripe, ...), legg til en lenke på PDF-en for å foreta online betaling -DashboardDisableGlobal=Deaktiver alle knapper til åpne objekter globalt -BoxstatsDisableGlobal=Deaktiver boksstatistikk fullstendig +DashboardDisableGlobal=Deaktiver alle knapper til åpne objekter globalt +BoxstatsDisableGlobal=Deaktiver boksstatistikk fullstendig DashboardDisableBlocks=Knapper for åpne objekter (for å behandle eller for sen) på hoveddashbordet DashboardDisableBlockAgenda=Deaktiver knappen for agenda DashboardDisableBlockProject=Deaktiver knappen for prosjekter @@ -2433,3 +2434,12 @@ UrlPublicInterfaceHelpAdmin=Det er mulig å definere et alias til webserveren og ExportUseForce=Bruk parameteren -f ExportUseForceHelp=Tving til å fortsette eksporten selv når en feil blir funnet (sikkerhetskopiering er kanskje ikke pålitelig) CustomPrompt=Egendefinerte forespørsler +AiDescription=KI (kunstig intelligense) funksjoner +AiDescriptionLong=Gir KI (kunstig intelligens) funksjoner i forskjellige deler av applikasjonen. Trenger ekstern AI API. +AI_KEY_API_CHATGPT= Nøkkel for ChatGPT IA API +AiSetup=AI-moduloppsett +AiCustomPrompt=KI Egendefinert ledetekst +AI_CONFIGURATIONS_PROMPT=Egendefinert ledetekst +ImageGeneration=Bildegenerering +AIPromptForFeatures=AI Egendefinert ledetekst for funksjoner +EnterAnIP=Skriv inn en IP-adresse diff --git a/htdocs/langs/nb_NO/bills.lang b/htdocs/langs/nb_NO/bills.lang index d631941ffc7..9f6a6a18ef5 100644 --- a/htdocs/langs/nb_NO/bills.lang +++ b/htdocs/langs/nb_NO/bills.lang @@ -93,6 +93,9 @@ CodePaymentMode=Betalingsmåte (kode) LabelPaymentMode=Betalingsmåte (etikett) PaymentModeShort=Betalingsmetode PaymentTerm=Betalingsbetingelser +IdPaymentTerm=Betalingsbetingelse (id) +CodePaymentTerm=Betalingsbetingelse (kode) +LabelPaymentTerm=Betalingsbetingelse (etikett) PaymentConditions=Betalingsbetingelser PaymentConditionsShort=Betalingsbetingelser PaymentAmount=Beløp til betaling @@ -377,14 +380,14 @@ SplitDiscount=Del rabatt i to ConfirmSplitDiscount=Er du sikker på at du vil dele rabatten på%s? %s i to mindre rabatter? TypeAmountOfEachNewDiscount=Sett inn beløp for hver av de to delene: TotalOfTwoDiscountMustEqualsOriginal=Totalen for de to nye rabattene må være lik det originale rabattbeløpet. -ConfirmRemoveDiscount=Er du sikker på at du vil +ConfirmRemoveDiscount=Er du sikker på at du vil RelatedBill=Relatert faktura RelatedBills=Relaterte fakturaer RelatedCustomerInvoices=Relaterte kundefakturaer RelatedSupplierInvoices=Relaterte leverandørfakturaer LatestRelatedBill=Siste tilknyttede faktura WarningBillExist=Advarsel: en eller flere fakturaer finnes allerede -MergingPDFTool=Verktøy for fletting av PDF +MergingPDFTool=Verktøy for fletting av PDF AmountPaymentDistributedOnInvoice=Beløp fordelt på faktura PaymentOnDifferentThirdBills=Tillat betaling av fakturaer for ulike tredjeparter under samme foreldre-firma PaymentNote=Betalingsnotat @@ -613,7 +616,7 @@ ToCreateARecurringInvoice=For å opprette en gjentakende faktura for denne kontr ToCreateARecurringInvoiceGene=For å opprette fremtidige periodiske fakturaer manuelt, gå til meny %s - %s - %s. ToCreateARecurringInvoiceGeneAuto=Hvis du vil opprette slike fakturaer automatisk, ta kontakt med administrator for å aktivere og sette opp modulen %s. Husk at begge metoder (manuell og automatisk) kan bruke om hverandre uten fare for duplisering. DeleteRepeatableInvoice=Slett fakturamal -ConfirmDeleteRepeatableInvoice=Er du sikker på at du vil +ConfirmDeleteRepeatableInvoice=Er du sikker på at du vil CreateOneBillByThird=Opprett én faktura per tredjepart (ellers én faktura per valgt objekt) BillCreated=%s faktura(er) generert BillXCreated=Faktura %s generert diff --git a/htdocs/langs/nb_NO/errors.lang b/htdocs/langs/nb_NO/errors.lang index 33e0ce4a5ad..db457ebd9c6 100644 --- a/htdocs/langs/nb_NO/errors.lang +++ b/htdocs/langs/nb_NO/errors.lang @@ -93,7 +93,7 @@ ErrorRecordHasAtLeastOneChildOfType=Objekt %s har minst ett barn av typen %s ErrorRecordIsUsedCantDelete=Kan ikke slette posten. Den er allerede brukt eller inkludert i et annet objekt. ErrorModuleRequireJavascript=JavaScript må ikke deaktiveres for at denne funksjonen skal fungere. For å aktivere/deaktivere JavaScript, gå til menyen Hjem->Oppsett->Skjerm. ErrorPasswordsMustMatch=Passordene må samsvare med hverandre -ErrorContactEMail=Det oppsto en teknisk feil. Vennligst kontakt administrator på følge epost %s og oppgi feilkoden 8 i meldingen din, eller legg til en skjermkopi av denne siden. +ErrorContactEMail=A technical error occurred. Please, contact administrator to following email %s and provide the error code %s in your message, or add a screen copy of this page. ErrorWrongValueForField=Felt %s : ' %s ' stemmer ikke overens med regexregel %s ErrorHtmlInjectionForField=Felt %s : Verdien ' %s ' inneholder ikke tillatte data ErrorFieldValueNotIn=Felt %s : ' %s ' er ikke en verdi funnet i felt %s av %s @@ -101,7 +101,7 @@ ErrorFieldRefNotIn=Felt %s : ' %s ' er ikke en %s eksist ErrorMultipleRecordFoundFromRef=Flere poster funnet ved søk fra ref %s . Ingen måte å vite hvilken ID du skal bruke. ErrorsOnXLines=%s feil funnet ErrorFileIsInfectedWithAVirus=Antivirus-programmet var ikke i stand til å validere filen (filen kan være infisert av et virus) -ErrorFileIsAnInfectedPDFWithJSInside=Filen er en PDF-fil infisert av Javascript +ErrorFileIsAnInfectedPDFWithJSInside=Filen er en PDF-fil infisert av Javascript ErrorNumRefModel=En referanse finnes i databasen (%s), og er ikke kompatibel med denne nummereringsregelen. Fjern posten eller omdøp referansen for å aktivere denne modulen. ErrorQtyTooLowForThisSupplier=Mengde for lav for denne leverandøren eller ingen pris angitt på dette produktet for denne leverandøren ErrorOrdersNotCreatedQtyTooLow=Noen ordrer er ikke opprettet på grunn av for lave mengder @@ -386,7 +386,7 @@ SwissQrDebitorAddressInvalid = Debitorinformasjonen var ugyldig (%s) # Validate RequireValidValue = Verdien er ikke gyldig RequireAtLeastXString = Krever minst %s tegn -RequireXStringMax = Krever maks%s tegn +RequireXStringMax = Krever maks%s tegn RequireAtLeastXDigits = Krever minst %s siffer RequireXDigitsMax = Krever maks %s siffer RequireValidNumeric = Krever en numerisk verdi @@ -407,7 +407,7 @@ ErrorTooManyAttempts= For mange forsøk, prøv igjen senere TotalAmountEmpty=Totalt beløp tomt FailedToFoundTheConversionRateForInvoice=Fant ikke konverteringsfrekvensen for faktura -ThisIdNotDefined=Id not defined -OperNotDefined=Payment method not defined -ErrorThisContactXIsAlreadyDefinedAsThisType=%s is already defined as contact for this type. -ErrorThisGroupIsAlreadyDefinedAsThisType=The contacts with this group are already defined as contact for this type. +ThisIdNotDefined=ID ikke definert +OperNotDefined=Betalingsmåte er ikke definert +ErrorThisContactXIsAlreadyDefinedAsThisType=%s er allerede definert som kontakt for denne typen. +ErrorThisGroupIsAlreadyDefinedAsThisType=Kontaktene med denne gruppen er allerede definert som kontakt for denne typen. diff --git a/htdocs/langs/nb_NO/eventorganization.lang b/htdocs/langs/nb_NO/eventorganization.lang index 38b71fe4ad1..3a93d65d65e 100644 --- a/htdocs/langs/nb_NO/eventorganization.lang +++ b/htdocs/langs/nb_NO/eventorganization.lang @@ -88,6 +88,7 @@ PriceOfRegistration=Pris for registrering PriceOfRegistrationHelp=Pris for å registrere seg eller delta i arrangementet PriceOfBooth=Abonnementspris for en stand PriceOfBoothHelp=Abonnementspris for en stand +EventOrganizationICSLinkProject=Koble til ICS for arrangementet EventOrganizationICSLink=Koble til ICS for konferanser ConferenceOrBoothInformation=Informasjon om konferanse eller stand Attendees=Deltakere diff --git a/htdocs/langs/nb_NO/main.lang b/htdocs/langs/nb_NO/main.lang index 206289faf76..4a60660f3eb 100644 --- a/htdocs/langs/nb_NO/main.lang +++ b/htdocs/langs/nb_NO/main.lang @@ -58,7 +58,7 @@ ErrorGoToGlobalSetup=Gå til 'Firma/organisasjon' for å fikse dette ErrorGoToModuleSetup=Gå til Modul oppsett for å rette dette ErrorFailedToSendMail=Klarte ikke å sende epost (avsender=%s, mottager=%s) ErrorFileNotUploaded=Filen ble ikke lastet oppp. Sjekk at den ikke er større en maksimumsgrensen, at det er plass igjen på disken og at det ikke ligger en fil med samme navn i katalogen. -ErrorInternalErrorDetected=Feil oppdaget +ErrorInternalErrorDetected=Feil oppdaget ErrorWrongHostParameter=Feil vertsparameter ErrorYourCountryIsNotDefined=Landet ditt er ikke definert. Gå til Home-Setup-Company/Foundation og legg ut skjemaet på nytt. ErrorRecordIsUsedByChild=Kunne ikke slette denne posten. Denne posten brukes av minst en under-post. @@ -420,6 +420,8 @@ TotalTTCShort=Totalt (inkl. MVA) TotalHT=Totalt (ekskl. MVA) TotalHTforthispage=Totalt (ekskl. MVA) for denne siden Totalforthispage=Totalt for denne siden +GrandTotal=Totalsum +TotalforAllPages=Totalt for alle sider TotalTTC=Totalt (inkl. MVA) TotalTTCToYourCredit=Totalt (inkl. MVA) godskrevet deg TotalVAT=Total MVA @@ -647,6 +649,7 @@ ReportName=Rapportnavn ReportPeriod=Rapport for perioden ReportDescription=Beskrivelse Report=Rapport +Reports=Rapporter Keyword=Nøkkelord Origin=Opprinnelse Legend=Historikk @@ -1174,7 +1177,7 @@ ConfirmAffectTag=Bulk etikettildeling ConfirmAffectUser=Bulk brukertildeling ProjectRole=Rolle tildelt på hvert prosjekt/mulighet TasksRole=Rolle tildelt hver oppgave (hvis brukt) -ConfirmSetSupervisor=Sett Bulk Supervisor +ConfirmSetSupervisor=Sett Bulk Supervisor ConfirmUpdatePrice=Velg en øknings-/reduksjonssats ConfirmAffectTagQuestion=Er du sikker på at du vil tilordne merker til %s valgte post(er)? ConfirmAffectUserQuestion=Er du sikker på at du vil tilordne brukere til %s valgte post(er)? @@ -1217,7 +1220,7 @@ Position=Posisjon AddLineOnPosition=Legg til linje på posisjon (på slutten hvis tom) ConfirmAllocateCommercial=Tildel salgsrepresentant bekreftelse ConfirmAllocateCommercialQuestion=Er du sikker på at du vil tilordne %s valgte post(er)? -CommercialsAffected=Tildelt salgsrepresentanter +CommercialsAffected=Tildelt salgsrepresentanter CommercialAffected=Tildelt salgsrepresentant YourMessage=Din beskjed YourMessageHasBeenReceived=Meldingen din er mottatt. Vi vil svare eller kontakte deg så snart som mulig. @@ -1231,7 +1234,7 @@ ExternalUser=Ekstern bruker NoSpecificContactAddress=Ingen spesifikk kontakt eller adresse NoSpecificContactAddressBis=Denne fanen er dedikert til å tvinge spesifikke kontakter eller adresser for gjeldende objekt. Bruk den bare hvis du ønsker å definere en eller flere spesifikke kontakter eller adresser for objektet når informasjonen om tredjeparten ikke er tilstrekkelig eller nøyaktig. HideOnVCard=Skjul %s -ShowOnVCard=Show %s +ShowOnVCard=Vis %s AddToContacts=Legg til adresse i kontaktene mine LastAccess=Siste tilgang UploadAnImageToSeeAPhotoHere=Last opp et bilde fra fanen %s for å se et bilde her @@ -1261,7 +1264,7 @@ AmountSalary=Lønnsbeløp InvoiceSubtype=Faktura undertype ConfirmMassReverse=Bulk reversert bekreftelse ConfirmMassReverseQuestion=Er du sikker på at du vil reversere %s valgte post(er)? -ElementType=Element type -ElementId=Element Id -Encrypted=Encrypted +ElementType=Elementtype +ElementId=Element-ID +Encrypted=Kryptert Settings=Innstillinger diff --git a/htdocs/langs/nb_NO/other.lang b/htdocs/langs/nb_NO/other.lang index 6a40456a1da..fc2eeb505df 100644 --- a/htdocs/langs/nb_NO/other.lang +++ b/htdocs/langs/nb_NO/other.lang @@ -31,7 +31,7 @@ PreviousYearOfInvoice=Forrige års fakturadato NextYearOfInvoice=Følgende år av fakturadato DateNextInvoiceBeforeGen=Dato for neste faktura (før generering) DateNextInvoiceAfterGen=Dato for neste faktura (etter generering) -GraphInBarsAreLimitedToNMeasures=Grafikk er begrenset til %s-mål i 'Barer' -modus. Modusen 'Linjer' ble automatisk valgt i stedet. +GraphInBarsAreLimitedToNMeasures=Grafikken er begrenset til %s mål i «Søyler»-modus. Modusen 'Linjer' ble automatisk valgt i stedet. OnlyOneFieldForXAxisIsPossible=Bare ett felt er for øyeblikket mulig som X-Akse. Bare det første valgte feltet er valgt. AtLeastOneMeasureIsRequired=Det kreves minst ett felt for mål AtLeastOneXAxisIsRequired=Minst ett felt for X-akse er påkrevd @@ -45,6 +45,7 @@ Notify_ORDER_CLOSE=Salgsordre levert Notify_ORDER_SUPPLIER_SENTBYMAIL=Innkjøpsordre sendt via e-post Notify_ORDER_SUPPLIER_VALIDATE=Innkjøpsordre er registrert Notify_ORDER_SUPPLIER_APPROVE=Innkjøpsordre godkjent +Notify_ORDER_SUPPLIER_SUBMIT=Innkjøpsordre sendt Notify_ORDER_SUPPLIER_REFUSE=Innkjøpsordre avvist Notify_PROPAL_VALIDATE=Kundetilbud validert Notify_PROPAL_CLOSE_SIGNED=Kundetilbud lukket signert @@ -66,6 +67,7 @@ Notify_BILL_SUPPLIER_SENTBYMAIL=Leverandørfaktura sendt via post Notify_BILL_SUPPLIER_CANCELED=Leverandørfaktura kansellert Notify_CONTRACT_VALIDATE=Kontrakt validert Notify_FICHINTER_VALIDATE=Intervensjon validert +Notify_FICHINTER_CLOSE=Intervensjon lukket Notify_FICHINTER_ADD_CONTACT=Kontakt lagt til intervensjon Notify_FICHINTER_SENTBYMAIL=Intervensjon sendt med post Notify_SHIPPING_VALIDATE=Leveranse validert @@ -190,7 +192,11 @@ EnableGDLibraryDesc=Installer eller aktiver GD-bibliotek i din PHP-installasjon ProfIdShortDesc=Prof-ID %s er avhengig av tredjepartens land.
For eksempel er det for %s, koden %s. DolibarrDemo=Dolibarr ERP/CRM demo StatsByAmount=Statistikk over mengde varer/tjenester +StatsByAmountProducts=Statistikk over varermengde +StatsByAmountServices=Statistikk over antall tjenester StatsByNumberOfUnits=Statistikk over summen av produkter/tjenester +StatsByNumberOfUnitsProducts=Statistikk for summen av antall varer +StatsByNumberOfUnitsServices=Statistikk for summen av antall tjenester StatsByNumberOfEntities=Statistikk for antall henvisende enheter (antall fakturaer, eller bestillinger...) NumberOf=Antall %s NumberOfUnits=Antall enheter på %s @@ -198,6 +204,7 @@ AmountIn=Beløp i %s NumberOfUnitsMos=Antall enheter som skal produseres i produksjonsordre EMailTextInterventionAddedContact=En ny intervensjon %s har blitt tildelt deg. EMailTextInterventionValidated=Intervensjonen %s har blitt validert. +EMailTextInterventionClosed=Intervensjonen %s er avsluttet. EMailTextInvoiceValidated=Faktura %s er validert. EMailTextInvoicePayed=Faktura %s er betalt. EMailTextProposalValidated=Tilbud %s er validert. @@ -207,11 +214,10 @@ EMailTextProposalClosedRefused=Tilbud %s er lukket avvist. EMailTextProposalClosedRefusedWeb=Tilbud %s har blitt stengt avvist på portalside. EMailTextOrderValidated=Ordre %s er validert. EMailTextOrderClose=Ordre %s er levert. -EMailTextOrderApproved=Ordre %s er godkjent. -EMailTextOrderValidatedBy=Ordre %s har blitt registrert av %s. -EMailTextOrderApprovedBy=Ordre %s har blitt godkjent av %s. -EMailTextOrderRefused=Ordre%s har blitt avvist. -EMailTextOrderRefusedBy=Ordre %s har blitt avvist av %s. +EMailTextSupplierOrderApprovedBy=Kjøpsordre %s er godkjent av %s. +EMailTextSupplierOrderValidatedBy=Kjøpsordre %s er registrert av %s. +EMailTextSupplierOrderSubmittedBy=Kjøpsordre %s er sendt inn av %s. +EMailTextSupplierOrderRefusedBy=Kjøpsordre %s har blitt avvist av %s. EMailTextExpeditionValidated=Forsendelse %s er validert. EMailTextExpenseReportValidated=Utgiftsrapport %s er validert. EMailTextExpenseReportApproved=Utgiftsrapport %s er godkjent. @@ -289,10 +295,12 @@ LinesToImport=Linjer å importere MemoryUsage=Minnebruk RequestDuration=Varighet av forespørsel -ProductsPerPopularity=Varer/tjenester etter popularitet -PopuProp=Varer/tjenester etter popularitet i tilbud -PopuCom=Varer/tjenester etter popularitet i ordre -ProductStatistics=Varer/Tjenestestatistikk +ProductsServicesPerPopularity=Varer|Tjenester etter popularitet +ProductsPerPopularity=Varer etter popularitet +ServicesPerPopularity=Tjenester etter popularitet +PopuProp=Varer|Tjenester etter popularitet i tilbud +PopuCom=Varer|Tjenester etter popularitet i ordre +ProductStatistics=Varer-|Tjenestestatistikk NbOfQtyInOrders=Antall i ordre SelectTheTypeOfObjectToAnalyze=Velg et objekt for å se dets statistikk... @@ -309,7 +317,7 @@ ExternalSiteModuleNotComplete=Modulen Ekstern Side ble ikke riktig konfigurert. ExampleMyMenuEntry=Meny overskrift # ftp -FTPClientSetup=Modul for oppsett av FTP- eller SFTP-klient +FTPClientSetup=Modul for oppsett av FTP- eller SFTP-klient NewFTPClient=Nytt oppsett av FTP/SFTP-tilkobling FTPArea=FTP/SFTP-område FTPAreaDesc=Dette skjermbildet viser en FTP et SFTP-server. @@ -328,3 +336,5 @@ FTPFailedToUploadFile=Kunne ikke laste opp filen %s . AddFolder=Lag mappe FileWasCreateFolder=Mappe %s er opprettet FTPFailedToCreateFolder=Kunne ikke opprette mappen %s . +SelectADay=Velg en dag i kalenderen +SelectANewDate=Velg en ny dato diff --git a/htdocs/langs/nb_NO/products.lang b/htdocs/langs/nb_NO/products.lang index 9d256ab9f21..ded86d28790 100644 --- a/htdocs/langs/nb_NO/products.lang +++ b/htdocs/langs/nb_NO/products.lang @@ -80,11 +80,11 @@ SoldAmount=Mengde solgt PurchasedAmount=Mengde kjøpt NewPrice=Ny pris MinPrice=Min. salgspris -MinPriceHT=Min. selling price (excl. tax) +MinPriceHT=Min. utsalgspris (ekskl. mva) MinPriceTTC=Minste utsalgspris (inkl. MVA) EditSellingPriceLabel=Rediger salgsprisetikett -CantBeLessThanMinPrice=The selling price can't be lower than minimum allowed for this product (%s without tax). This message can also appear if you type a significant discount. -CantBeLessThanMinPriceInclTax=The selling price can't be lower than minimum allowed for this product (%s including taxes). This message can also appears if you type a too important discount. +CantBeLessThanMinPrice=Utsalgspris kan ikke være lavere enn minimum tillatt for denne varen (%s uten MVA). Denne meldingen kan også vises hvis du skriver inn en betydelig rabatt. +CantBeLessThanMinPriceInclTax=Utsalgspris kan ikke være lavere enn minimum tillatt for denne varen (%s inkludert MVA). Denne meldingen kan også vises hvis du skriver inn en for stor rabatt. ContractStatusClosed=Lukket ErrorProductAlreadyExists=En vare med varenummere %s eksisterer allerede. ErrorProductBadRefOrLabel=Ugyldig verdi for referanse eller etikett. @@ -208,11 +208,6 @@ unitSET=Sett unitS=Sekund unitH=Time unitD=Dag -unitG=Gram -unitM=Meter -unitLM=Lineær meter -unitM2=Kvadratmeter -unitM3=Kubikkmeter unitL=Liter unitT=tonn unitKG=kg @@ -221,6 +216,7 @@ unitMG=mg unitLB=pund unitOZ=unse unitM=Meter +unitLM=Lineær meter unitDM=dm unitCM=cm unitMM=mm @@ -326,7 +322,7 @@ WarningSelectOneDocument=Velg minst ett dokument DefaultUnitToShow=Enhet NbOfQtyInProposals=Antall i tilbud ClinkOnALinkOfColumn=Klikk på en link i kolonnen %s for detaljert visning... -ProductsOrServicesTranslations=Oversettelser for Varer/Tjenester +ProductsOrServicesTranslations=Oversettelser for Varer/Tjenester TranslatedLabel=Oversatt etikett TranslatedDescription=Oversatt beskrivelse TranslatedNote=Oversatte notater @@ -350,7 +346,7 @@ UseProductFournDesc=Legg til en funksjon for å definere produktbeskrivelsen def ProductSupplierDescription=Leverandørs beskrivelse av produktet UseProductSupplierPackaging=Bruk "pakking"-funksjonen for å avrunde mengdene til noen gitte multipler (når du legger til/oppdaterer linje i leverandørdokumenter, beregner du mengder og innkjøpspriser på nytt i henhold til det høyere multiplumet som er satt på innkjøpsprisene til et produkt) PackagingForThisProduct=Pakking av mengder -PackagingForThisProductDesc=You will automatically purchase a multiple of this quantity. +PackagingForThisProductDesc=Du vil automatisk kjøpe et multiplum av denne mengden. QtyRecalculatedWithPackaging=Mengden på linjen ble beregnet på nytt i henhold til leverandøremballasje #Attributes @@ -360,7 +356,7 @@ ProductAttributes=Variantattributter for varer ProductAttributeName=Variantattributt %s ProductAttribute=Variantattributt ProductAttributeDeleteDialog=Er du sikker på at du vil slette denne attributten? Alle verdier vil bli slettet. -ProductAttributeValueDeleteDialog=Are you sure you want to delete the value "%s" with the reference "%s" of this attribute? +ProductAttributeValueDeleteDialog=Er du sikker på at du vil slette verdien "%s" med referansen "%s" for dette attributtet? ProductCombinationDeleteDialog=Er du sikker på at du vil slette varevarianten "%s"? ProductCombinationAlreadyUsed=Det oppsto en feil ved sletting av varianten. Kontroller at den ikke blir brukt av noen objekter ProductCombinations=Varianter @@ -422,7 +418,7 @@ ErrorsProductsMerge=Feil i varesammenslåing SwitchOnSaleStatus=Slå på salgsstatus SwitchOnPurchaseStatus=Slå på kjøpsstatus UpdatePrice=Øk/reduser kundepris -StockMouvementExtraFields= Extra Fields (stock movement) +StockMouvementExtraFields= Ekstra felt (varebevegelse) InventoryExtraFields= Ekstra felt (beholdning) ScanOrTypeOrCopyPasteYourBarCodes=Skann eller skriv eller kopier/lim inn strekkodene dine PuttingPricesUpToDate=Oppdater priser med gjeldende kjente priser @@ -435,5 +431,8 @@ ConfirmEditExtrafield = Velg ekstrafeltet du vil endre ConfirmEditExtrafieldQuestion = Er du sikker på at du vil endre dette ekstrafeltet? ModifyValueExtrafields = Endre verdien for et ekstrafelt OrProductsWithCategories=Eller varer med tagger/kategorier -WarningTransferBatchStockMouvToGlobal = If you want to deserialize this product, all its serialized stock will be transformed into global stock -WarningConvertFromBatchToSerial=If you currently have a quantity higher or equal to 2 for the product, switching to this choice means you will still have a product with different objects of the same batch (while you want a unique serial number). The duplicate will remain until an inventory or a manual stock movement to fix this is done. +WarningTransferBatchStockMouvToGlobal = Hvis du ønsker å deserialisere denne varen, vil alle dens serialiserte beholdning bli transformert til globale vare +WarningConvertFromBatchToSerial=Hvis du for øyeblikket har en mengde høyere eller lik 2 for vare, betyr å bytte til dette valget at du fortsatt vil ha en vare med forskjellige objekter av samme batch (mens du ønsker et unikt serienummer). Duplikatet vil forbli til en inventar eller en manuell varebevegelse for å fikse dette er gjort. +AllowStockMovementVariantParent=Registrerer også varebevegelser på overordnede varer av varianter +AllowStockMovementVariantParentHelp=Som standard er en forelder til en variant en virtuell vare, så ingen beholdning administreres for den. Ved å aktivere dette alternativet vil en beholdning bli administrert for overordnede varer og hver gang en beholdning mengde endres for en variant vare, vil samme mengde bli endret for den overordnede vare. Du bør ikke trenge dette alternativet, bortsett fra hvis du bruker variant for å administrere den samme vare i stedet for overordnet (men med andre beskrivelser, priser...) +ConfirmSetToDraftInventory=Er du sikker på at du vil gå tilbake til utkaststatus?
Mengdene som for øyeblikket er angitt i beholdningen vil bli tilbakestilt. diff --git a/htdocs/langs/nb_NO/projects.lang b/htdocs/langs/nb_NO/projects.lang index 6d8b613e79b..2e92d44cac3 100644 --- a/htdocs/langs/nb_NO/projects.lang +++ b/htdocs/langs/nb_NO/projects.lang @@ -127,7 +127,7 @@ ValidateProject=Valider prosjektet ConfirmValidateProject=Er du sikker på at du vil validere dette prosjektet? CloseAProject=Lukk prosjektet ConfirmCloseAProject=Er du sikker på at du vil lukke dette prosjektet? -AlsoCloseAProject=Lukk prosjekt også +AlsoCloseAProject=Lukk prosjekt også AlsoCloseAProjectTooltip=Hold den åpen hvis du fortsatt trenger å følge produksjonsoppgaver på den ReOpenAProject=Åpne prosjekt ConfirmReOpenAProject=Er du sikker på at du vil gjenåpne dette prosjektet? @@ -249,7 +249,7 @@ LatestProjects=Siste %s prosjekter LatestModifiedProjects=Siste %s endrede prosjekter OtherFilteredTasks=Andre filtrerte oppgaver NoAssignedTasks=Ingen tildelte oppgaver funnet (tilordne prosjekt/oppgaver til den nåværende brukeren fra den øverste valgboksen for å legge inn tid på den) -ThirdPartyRequiredToGenerateInvoice=En tredjepart må defineres på prosjektet for å kunne fakturere det. +ThirdPartyRequiredToGenerateIntervention=En tredjepart må være definert på prosjekt for å kunne skape intervensjon. ThirdPartyRequiredToGenerateInvoice=En tredjepart må defineres på prosjektet for å kunne fakturere det. ChooseANotYetAssignedTask=Velg en oppgave som du ennå ikke er tildelt # Comments trans diff --git a/htdocs/langs/nb_NO/receiptprinter.lang b/htdocs/langs/nb_NO/receiptprinter.lang index 6a4cdb6dd04..17f75449a4b 100644 --- a/htdocs/langs/nb_NO/receiptprinter.lang +++ b/htdocs/langs/nb_NO/receiptprinter.lang @@ -10,6 +10,7 @@ ReceiptPrinterTemplateDesc=Oppsett av maler ReceiptPrinterTypeDesc=Eksempel på mulige verdier for feltet "Parametere" i henhold til drivertype ReceiptPrinterProfileDesc=Beskrivelse av skriverprofil ListPrinters=Liste over skrivere +FromServerPointOfView=Fra webserverens synspunkt. Denne metoden må være tilgjengelig fra webserververten. SetupReceiptTemplate=Maloppsett CONNECTOR_DUMMY=Dummyskriver CONNECTOR_NETWORK_PRINT=Nettverksskriver @@ -63,7 +64,7 @@ YearInvoice=Fakturaår DOL_VALUE_MONTH_LETTERS=Fakturamåned med bokstaver DOL_VALUE_MONTH=Fakturamåned DOL_VALUE_DAY=Fakturadag -DOL_VALUE_DAY_LETTERS=Fakturadag med bokstaver +DOL_VALUE_DAY_LETTERS=fakturadag i bokstaver DOL_LINE_FEED_REVERSE=Linjemating revers InvoiceID=Faktura-ID InvoiceRef=Fakturareferanse diff --git a/htdocs/langs/nb_NO/resource.lang b/htdocs/langs/nb_NO/resource.lang index 2fabc89415f..2e3f7dee637 100644 --- a/htdocs/langs/nb_NO/resource.lang +++ b/htdocs/langs/nb_NO/resource.lang @@ -5,7 +5,7 @@ DeleteResource=Slett ressurs ConfirmDeleteResourceElement=Bekreft sletting av ressursen for dette elementet NoResourceInDatabase=Ingen ressurs i databasen NoResourceLinked=Ingen koblet ressurs - +ActionsOnResource=Hendelser om denne ressursen ResourcePageIndex=Ressursliste ResourceSingular=Ressurs ResourceCard=Ressurskort @@ -34,3 +34,8 @@ IdResource=ID ressurs AssetNumber=Serienummer ResourceTypeCode=Ressurskode ImportDataset_resource_1=Ressurser + +ErrorResourcesAlreadyInUse=Noen ressurser er i bruk +ErrorResourceUseInEvent=%s brukt i %s hendelse + +MaxUsers=Maksimalt antall brukere (plasser, seter osv.) diff --git a/htdocs/langs/nl_BE/main.lang b/htdocs/langs/nl_BE/main.lang index 0c349b7d7fb..bd30e372b03 100644 --- a/htdocs/langs/nl_BE/main.lang +++ b/htdocs/langs/nl_BE/main.lang @@ -84,6 +84,7 @@ ToDate=aan ToLocation=aan ApprovedBy2=Goedgekeurd door (tweede goedkeuring) DateFormatYYYYMMDDHHMM=JJJJ-MM-DD HH: SS +Reports=Rapporten NotRead=Ongelezen Offered=Beschikbaar SetLinkToAnotherThirdParty=Link naar een derde partij diff --git a/htdocs/langs/nl_NL/admin.lang b/htdocs/langs/nl_NL/admin.lang index f7e98a69090..d1eb6b110bd 100644 --- a/htdocs/langs/nl_NL/admin.lang +++ b/htdocs/langs/nl_NL/admin.lang @@ -365,9 +365,9 @@ GenericMaskCodes=U kunt elk nummeringsmasker invoeren. In dit masker kunnen de v GenericMaskCodes2= {cccc} de klantcode op n tekens
{cccc000} de klant wordt gevolgd door een teller. Deze teller voor de klant wordt tegelijk met de globale teller gereset.
{tttt} De code van derde partij type op n karakters (zie menu Home - Instellingen - Woordenboek - Soorten derde partijen). Als u deze tag toevoegt, is de teller voor elk type derde partij anders.
GenericMaskCodes3=Alle andere karakters in het masker zullen intact blijven.
Spaties zijn niet toegestaan.
GenericMaskCodes3EAN=Alle andere tekens in het masker blijven intact (behalve * of ? op de 13e positie in EAN13).
Spaties zijn niet toegestaan.
In EAN13 moet het laatste teken na de laatste } op de 13e positie * of ? . Deze wordt vervangen door de berekende sleutel.
-GenericMaskCodes4a= Voorbeeld op de 99e %s van de derde partij TheCompany, met datum 31-01-2023:
-GenericMaskCodes4b= Voorbeeld op derde partij gemaakt op 31-01-2023:
-GenericMaskCodes4c= Voorbeeld van product gemaakt op 31-01-2023:
+GenericMaskCodes4a= Voorbeeld op de 99e %s van de derde partij TheCompany, met datum 31-01-2023:
+GenericMaskCodes4b= Voorbeeld op derde partij gemaakt op 31-01-2023:
+GenericMaskCodes4c= Voorbeeld van product gemaakt op 31-01-2023:
GenericMaskCodes5= ABC{jj}{mm}-{000000} geeft ABC2301-000099
{0000+100@1}-ZZZ/{dd}/XXX geeft 0199-ZZZ/31/XXX
IN{jj}{mm}-{0000}-{t} geeft IN2301-0099-A als het type bedrijf 'Responsable Inscripto' is met code voor type dat 'A_RI' is GenericNumRefModelDesc=Geeft een aanpasbaar nummer volgens een gedefinieerd masker. ServerAvailableOnIPOrPort=Server is beschikbaar op het IP-adres %s met poort %s @@ -1118,7 +1118,7 @@ BackToModuleList=Terug naar modulelijst BackToDictionaryList=Terug naar woordenboekenlijst TypeOfRevenueStamp=Soort belastingstempel VATManagement=Omzetbelastingbeheer -VATIsUsedDesc=Standaard volgt bij het aanmaken van prospects, Facturen, bestellingen etc. het verkooppercentage belasting de actieve standaardregel:
Als de verkoper niet onderworpen is aan Sales belasting, dan wordt Sales belasting standaard ingesteld op 0. Einde van de regel.
Als (land van de verkoper = land van de koper), dan is de Verkoop belasting standaard gelijk aan de Verkoop belasting van het product in het land van de verkoper. Einde van de regel.
Als de verkoper en de koper zich beide in de Europese Gemeenschap bevinden en de goederen transportgerelateerde producten zijn (vervoer, verzending, luchtvaartmaatschappij), is de standaard BTW 0. Dit regel is afhankelijk van het land van de verkoper - raadpleeg uw accountant. De BTW moet door de koper worden betaald aan het douanekantoor in zijn land en niet aan de verkoper. Einde van de regel.
Als de verkoper en de koper zich beide in de Europese Gemeenschap bevinden en de koper geen bedrijf is (met een geregistreerd intracommunautair BTW-nummer), dan wordt de BTW standaard ingesteld op het BTW-tarief van het land van de verkoper. Einde van de regel.
Als de verkoper en de koper zich beide in de Europese Gemeenschap bevinden en de koper een bedrijf is (met een geregistreerd intracommunautair BTW-nummer), dan is de BTW standaard 0. Einde van de regel.
In elk ander geval is de voorgestelde standaard Verkoop belasting=0. Einde van de heerschappij. +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sales Tax rate follows the active standard rule:
If the seller is not subject to Sales tax, then Sales tax defaults to 0. End of rule.
If the (seller's country = buyer's country), then the Sales tax by default equals the Sales tax of the product in the seller's country. End of rule.
If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default VAT is 0. This rule is dependent on the seller's country - please consult with your accountant. The VAT should be paid by the buyer to the customs office in their country and not to the seller. End of rule.
If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community VAT number) then the VAT defaults to the VAT rate of the seller's country. End of rule.
If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community VAT number), then the VAT is 0 by default. End of rule.
In any other case the proposed default is Sales tax=0. End of rule. VATIsNotUsedDesc=Standaard is de voorgestelde btw 0. Dit kan gebruikt worden in situaties zoals verenigingen, particulieren of kleine bedrijven. VATIsUsedExampleFR=In Frankrijk betekent dit dat bedrijven of organisaties een echt fiscaal systeem hebben (Vereenvoudigd echt of normaal echt). Een systeem waarin btw wordt aangegeven. VATIsNotUsedExampleFR=In Frankrijk betekent dit verenigingen die niet-omzetbelasting zijn aangegeven of bedrijven, organisaties of vrije beroepen die hebben gekozen voor het micro-onderneming fiscale systeem (omzetbelasting in franchise) en een franchise omzetbelasting hebben betaald zonder aangifte omzetbelasting. Bij deze keuze wordt de verwijzing "Niet van toepassing omzetbelasting - art-293B van CGI" op facturen weergegeven. @@ -1197,6 +1197,7 @@ Skin=Thema DefaultSkin=Standaard thema MaxSizeList=Maximale lijstlengte DefaultMaxSizeList=Standaard maximum lengte voor lijsten +DisplayGrandTotalInList=Display grand total (for all pages) in lists footer DefaultMaxSizeShortList=Standaard maximale lengte voor korte lijsten (bijv. In klantenkaart) MessageOfDay=Bericht van de dag MessageLogin=Bericht op inlogpagina @@ -1860,7 +1861,7 @@ PastDelayVCalExport=Exporteer geen gebeurtenissen ouder dan SecurityKey = Veiligheidssleutel ##### ClickToDial ##### ClickToDialSetup='Click-To-Dial' moduleinstellingen -ClickToDialUrlDesc=URL die wordt aangeroepen wanneer er op het telefoonpictogram wordt geklikt. In de URL kunt u tags
gebruiken\n __PHONETO__ dat wordt vervangen door het telefoonnummer van de te bellen persoon
__PHONEFROM__ dat wordt vervangen door het telefoonnummer van de bellende persoon (van u)
__LOGIN__ die zal worden vervangen door clicktodial login (gedefinieerd op gebruikerskaart)
__PASS__ dat wordt vervangen door het clicktodial-wachtwoord (gedefinieerd op de gebruikerskaart). +ClickToDialUrlDesc=URL called when a click on phone picto is done. In URL, you can use tags
__PHONETO__ that will be replaced with the phone number of person to call
__PHONEFROM__ that will be replaced with phone number of calling person (yours)
__LOGIN__ that will be replaced with clicktodial login (defined on user card)
__PASS__ that will be replaced with clicktodial password (defined on user card). ClickToDialDesc=Deze module verandert telefoonnummers bij gebruik van een desktopcomputer in klikbare links. Bij een klik zal het nummer gebeld worden. Dit kan worden gebruikt om het telefoongesprek te starten wanneer u een softphone op uw bureaublad gebruikt of wanneer u bijvoorbeeld een CTI-systeem op basis van het SIP-protocol gebruikt. Let op: Bij het gebruik van een smartphone zijn telefoonnummers altijd klikbaar. ClickToDialUseTelLink=Gebruik alleen de link "tel:" bij telefoonnummers ClickToDialUseTelLinkDesc=Gebruik deze methode als uw gebruikers een softphone of een software-interface hebben, geïnstalleerd op dezelfde computer als de browser, en gebeld wanneer u klikt op een link die begint met "tel:" in uw browser. Als u een link nodig heeft die begint met "sip:" of een volledige serveroplossing (geen lokale software-installatie nodig), moet u deze op "Nee" zetten en het volgende veld invullen. @@ -2433,3 +2434,12 @@ UrlPublicInterfaceHelpAdmin=It is possible to define an alias to the web server ExportUseForce=Use the parameter -f ExportUseForceHelp=Force to continue the export even when an error is found (Backup may not be reliable) CustomPrompt=Custom prompts +AiDescription=AI (Artificial Intelligence) features +AiDescriptionLong=Provides AI (Artificial Intelligence) features in different part of the application. Need external AI API. +AI_KEY_API_CHATGPT= Key for ChatGPT IA api +AiSetup=AI module setup +AiCustomPrompt=AI customs prompt +AI_CONFIGURATIONS_PROMPT=Custom prompt +ImageGeneration=Image generation +AIPromptForFeatures=AI custom prompts for features +EnterAnIP=Enter an IP address diff --git a/htdocs/langs/nl_NL/cron.lang b/htdocs/langs/nl_NL/cron.lang index 8a0e4820a8e..baca7206277 100644 --- a/htdocs/langs/nl_NL/cron.lang +++ b/htdocs/langs/nl_NL/cron.lang @@ -1,6 +1,5 @@ # Dolibarr language file - Source file is en_US - cron -# About page -# Right +# Permissions Permission23101 = Lees geplande taak Permission23102 = Maak/wijzig geplande taak Permission23103 = Verwijder geplande taak @@ -14,7 +13,7 @@ FileToLaunchCronJobs=Opdrachtregel om gekwalificeerde cron-taken te controleren CronExplainHowToRunUnix=In een Unix-omgeving moet u het volgende crontab-item gebruiken om de opdrachtregel elke 5 minuten uit te voeren CronExplainHowToRunWin=In een Microsoft (tm) Windows-omgeving kunt u de geplande taakhulpmiddelen gebruiken om de opdrachtregel elke 5 minuten uit te voeren CronMethodDoesNotExists=Class%sbevat geen methode%s -CronMethodNotAllowed=Methode %s van class %s staat op de zwarte lijst met verboden methoden +CronMethodNotAllowed=Methode %s van klasse %s staat in de blokkeerlijst van verboden methoden CronJobDefDesc=Cron-taakprofielen worden gedefinieerd in het modulebeschrijvingsbestand. Wanneer de module is geactiveerd, zijn ze geladen en beschikbaar, zodat u de taken kunt beheren vanuit het menu admin tools %s. CronJobProfiles=Lijst met vooraf gedefinieerde cron-functieprofielen # Menu @@ -67,7 +66,7 @@ CronModuleHelp=Naam van Dolibarr-modulemap (werkt ook met externe Dolibarr-modul CronClassFileHelp=Het relatieve pad en de bestandsnaam die moet worden geladen (pad is relatief ten opzichte van de hoofdmap van de webserver).
Als u bijvoorbeeld de ophaalmethode van Dolibarr Product-object htdocs / product / class / product.class.php wilt aanroepen, is de waarde voor de klasse bestandsnaam
product / class / product.class.php CronObjectHelp=De objectnaam die moet worden geladen.
Als u bijvoorbeeld de ophaalmethode van Dolibarr Product-object /htdocs/product/class/product.class.php wilt aanroepen, is de waarde voor de klasse bestandsnaam
Product CronMethodHelp=De objectmethode om te starten.
Als u bijvoorbeeld de ophaalmethode van Dolibarr Product-object /htdocs/product/class/product.class.php wilt aanroepen, is de waarde voor methode
halen -CronArgsHelp=De methode argumenten.
Om bijvoorbeeld de ophaalmethode van het Dolibarr-productobject /htdocs/product/class/product.class.php aan te roepen, kan de waarde voor paramters zijn
0, ProductRef +CronArgsHelp=The method arguments.
For example to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for parameters can be
0, ProductRef CronCommandHelp=De te uitvoeren opdrachtregel. CronCreateJob=Aanmaken nieuwe geplande taak CronFrom=Van @@ -91,6 +90,7 @@ WarningCronDelayed=Opgelet, voor prestatiedoeleinden, ongeacht de volgende datum DATAPOLICYJob=Gegevens opschonen en anonimiseren JobXMustBeEnabled=Taak %s moet zijn ingeschakeld EmailIfError=E-mail voor waarschuwing bij fout +JobNotFound=Taak %s niet gevonden in de lijst met taken (probeer de module uit/in te schakelen) ErrorInBatch=Fout bij het uitvoeren van de taak %s # Cron Boxes diff --git a/htdocs/langs/nl_NL/eventorganization.lang b/htdocs/langs/nl_NL/eventorganization.lang index 49ecf092cc0..91f493015e3 100644 --- a/htdocs/langs/nl_NL/eventorganization.lang +++ b/htdocs/langs/nl_NL/eventorganization.lang @@ -88,6 +88,7 @@ PriceOfRegistration=Prijs van registratie PriceOfRegistrationHelp=Prijs te betalen om te registreren of deel te nemen aan het evenement PriceOfBooth=Abonnementsprijs om een stand te staan PriceOfBoothHelp=Abonnementsprijs om een stand te staan +EventOrganizationICSLinkProject=Link ICS for the event EventOrganizationICSLink=Koppel ICS voor conferenties ConferenceOrBoothInformation=Conferentie- of standinformatie Attendees=deelnemers @@ -173,7 +174,7 @@ DateStartEvent=Startdatum evenement DateEndEvent=Einddatum evenement ModifyStatus=Status wijzigen ConfirmModifyStatus=Bevestig statuswijziging -ConfirmModifyStatusQuestion=Weet u zeker dat u de %s\n geselecteerde record(s) wilt wijzigen? +ConfirmModifyStatusQuestion=Are you sure you want to modify the %s selected record(s)? RecordsUpdated = %s Records bijgewerkt RecordUpdated = Record bijgewerkt NoRecordUpdated = Geen record bijgewerkt diff --git a/htdocs/langs/nl_NL/main.lang b/htdocs/langs/nl_NL/main.lang index 6289bfae54a..d1689c7f776 100644 --- a/htdocs/langs/nl_NL/main.lang +++ b/htdocs/langs/nl_NL/main.lang @@ -420,6 +420,8 @@ TotalTTCShort=Totaal incl. BTW TotalHT=Totaal (excl. BTW) TotalHTforthispage=Totaal (excl. BTW) voor deze pagina Totalforthispage=Totaal voor deze pagina +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=Totaal (incl. BTW) TotalTTCToYourCredit=Totaal (incl. BTW) op uw krediet TotalVAT=Totaal BTW @@ -647,6 +649,7 @@ ReportName=Rapportnaam ReportPeriod=Periode-analyse ReportDescription=Omschrijving Report=Verslag +Reports=Reports Keyword=Trefwoord Origin=Origineel Legend=Legende @@ -715,7 +718,7 @@ Owner=Eigenaar FollowingConstantsWillBeSubstituted=De volgende constanten worden vervangen met de overeenkomstige waarde. Refresh=Vernieuwen BackToList=Terug naar het overzicht -BackToTree=Terug +BackToTree=Terug GoBack=Ga terug CanBeModifiedIfOk=Kan worden gewijzigd indien geldig CanBeModifiedIfKo=Kan worden gewijzigd indien ongeldig @@ -956,7 +959,7 @@ WebSite=Website WebSites=Websites WebSiteAccounts=Webtoegangsaccounts ExpenseReport=Rapportage kosten -ExpenseReports=Onkostennota's +ExpenseReports=Onkostennota's HR=HR HRAndBank=HR en Bank AutomaticallyCalculated=Automatisch berekend @@ -1070,7 +1073,7 @@ SearchIntoSupplierProposals=Leveranciersvoorstellen SearchIntoInterventions=Interventies SearchIntoContracts=Contracten SearchIntoCustomerShipments=Klantzendingen -SearchIntoExpenseReports=Onkostennota's +SearchIntoExpenseReports=Onkostennota's SearchIntoLeaves=Vertrekken SearchIntoKM=Kennis basis SearchIntoTickets=Tickets diff --git a/htdocs/langs/nl_NL/modulebuilder.lang b/htdocs/langs/nl_NL/modulebuilder.lang index df5776e3390..7295eab2adf 100644 --- a/htdocs/langs/nl_NL/modulebuilder.lang +++ b/htdocs/langs/nl_NL/modulebuilder.lang @@ -180,7 +180,7 @@ FailedToAddCodeIntoDescriptor=Kan code niet toevoegen aan descriptor. Controleer DictionariesCreated=Woordenboek %s succesvol aangemaakt DictionaryDeleted=Woordenboek %s succesvol verwijderd PropertyModuleUpdated=Property %s is succesvol bijgewerkt -InfoForApiFile=* Wanneer u voor de eerste keer een bestand genereert, worden alle methoden voor elk object gemaakt.
* Wanneer u in remove klikt, verwijdert u gewoon alle methoden voor de
geselecteerd object. +InfoForApiFile=* When you generate file for the first time then all methods will be created for each object.
* When you click in remove you just remove all methods for the selected object. SetupFile=Pagina voor module-instellingen EmailingSelectors=Emails selectors EmailingSelectorDesc=U kunt hier de klasbestanden genereren en bewerken om nieuwe e-maildoelkiezers te bieden voor de module voor massa-e-mailen diff --git a/htdocs/langs/nl_NL/website.lang b/htdocs/langs/nl_NL/website.lang index 1294eabd0f2..90fbdd704a0 100644 --- a/htdocs/langs/nl_NL/website.lang +++ b/htdocs/langs/nl_NL/website.lang @@ -63,7 +63,7 @@ YouCanEditHtmlSourceckeditor=U kunt HTML-broncode bewerken met de knop "Bron" in YouCanEditHtmlSource=
You can include PHP code into this source using tags <?php ?>. The following global variables are available: $conf, $db, $mysoc, $user, $website, $websitepage, $weblangs, $pagelangs.

You can also include content of another Page/Container with the following syntax:
<?php includeContainer('alias_of_container_to_include'); ?>

You can make a redirect to another Page/Container with the following syntax (Note: do not output any content before a redirect):
<?php redirectToContainer('alias_of_container_to_redirect_to'); ?>

To add a link to another page, use the syntax:
<a href="alias_of_page_to_link_to.php">mylink<a>

To include a link to download a file stored into the documents directory, use the document.php wrapper:
Example, for a file into documents/ecm (need to be logged), syntax is:
<a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext">
For a file into documents/medias (open directory for public access), syntax is:
<a href="/document.php?modulepart=medias&file=[relative_dir/]filename.ext">
For a file shared with a share link (open access using the sharing hash key of file), syntax is:
<a href="/document.php?hashp=publicsharekeyoffile">
YouCanEditHtmlSource1=
To include an image stored into the documents directory, use the viewimage.php wrapper.
Example, for an image into documents/medias (open directory for public access), syntax is:
<img src="/viewimage.php?modulepart=medias&file=[relative_dir/]filename.ext">
YouCanEditHtmlSource2=For an image shared with a share link (open access using the sharing hash key of file), syntax is:
<img src="/viewimage.php?hashp=12345679012...">
-YouCanEditHtmlSource3=Om de URL van de afbeelding van een PHP-object te verkrijgen, gebruikt u
<<< span>img src="<?php print getImagePublicURLOfObject($object, 1, "_small") ?>">
+YouCanEditHtmlSource3=To get the URL of the image of a PHP object, use
<img src="<?php print getImagePublicURLOfObject($object, 1, "_small") ?>">
YouCanEditHtmlSourceMore=
Meer voorbeelden van HTML of dynamische code beschikbaar op de wiki-documentatie.
ClonePage=Kloon pagina/container CloneSite=Klonen site diff --git a/htdocs/langs/pl_PL/commercial.lang b/htdocs/langs/pl_PL/commercial.lang index 0aec7ae53c4..10b440d02f9 100644 --- a/htdocs/langs/pl_PL/commercial.lang +++ b/htdocs/langs/pl_PL/commercial.lang @@ -9,7 +9,7 @@ DeleteAction=Usuń wydarzenie NewAction=Nowe zdarzenie AddAction=Utwórz wydarzenie AddAnAction=Utwórz wydarzenie -AddActionRendezVous=Stwórz umówione spotkanie +AddActionRendezVous=Stwórz umówione spotkanie ConfirmDeleteAction=Czy jesteś pewien, że chcesz usunąć to wydarzenie? CardAction=Karta zdarzenia ActionOnCompany=Powiązana firma @@ -43,7 +43,7 @@ StatusActionInProcess=W trakcie TasksHistoryForThisContact=Działania na rzecz tego kontaktu LastProspectDoNotContact=Nie kontaktować się LastProspectNeverContacted=Nigdy nie skontaktowano -LastProspectToContact=Do skontaktowania +LastProspectToContact=Do skontaktowania LastProspectContactInProcess=W trakcie kontaktu LastProspectContactDone=Kontakt wykonany ActionAffectedTo=Zdarzenie przypisane do @@ -74,7 +74,7 @@ StatusProsp=Stan oferty DraftPropals=Szkic oferty handlowej NoLimit=Bez limitu ToOfferALinkForOnlineSignature=Link dla podpisu online -WelcomeOnOnlineSignaturePageProposal=Witamy na stronie, na której można akceptować oferty handlowe od %s +WelcomeOnOnlineSignaturePageProposal=Witamy na stronie, na której można akceptować wyceny i oferty przygotowane przez %s WelcomeOnOnlineSignaturePageContract=Witamy na %s stronie podpisywania umowy w formacie PDF WelcomeOnOnlineSignaturePageFichinter=Witamy na %s stronie interwencyjnego podpisywania plików PDF WelcomeOnOnlineSignaturePageSociete_rib=Witamy na stronie %s mandatu SEPA na stronie podpisywania plików PDF diff --git a/htdocs/langs/pl_PL/errors.lang b/htdocs/langs/pl_PL/errors.lang index 94f8183d90a..65e7daddd0d 100644 --- a/htdocs/langs/pl_PL/errors.lang +++ b/htdocs/langs/pl_PL/errors.lang @@ -300,7 +300,7 @@ ErrorAjaxRequestFailed=Żądanie nie powiodło się ErrorThirpdartyOrMemberidIsMandatory=Osoba trzecia lub członek spółki jest obowiązkowa ErrorFailedToWriteInTempDirectory=Nie udało się zapisać w katalogu tymczasowym ErrorQuantityIsLimitedTo=Ilość jest ograniczona do %s -ErrorFailedToLoadThirdParty=Nie udało się znaleźć/załadować strony trzeciej z id=%s, email=%s, name= %s +ErrorFailedToLoadThirdParty=Failed to find/load third party from id=%s, email=%s, name=%s ErrorThisPaymentModeIsNotSepa=Ten sposób płatności nie jest kontem bankowym ErrorStripeCustomerNotFoundCreateFirst=Klient Stripe nie jest ustawiony dla tej strony trzeciej (lub ma ustawioną wartość usuniętą po stronie Stripe). Najpierw utwórz go (lub dołącz ponownie). ErrorCharPlusNotSupportedByImapForSearch=Wyszukiwanie IMAP nie jest w stanie przeszukać nadawcy ani odbiorcy ciągu zawierającego znak + diff --git a/htdocs/langs/pl_PL/mails.lang b/htdocs/langs/pl_PL/mails.lang index 8c2b821d903..3d878cd2d71 100644 --- a/htdocs/langs/pl_PL/mails.lang +++ b/htdocs/langs/pl_PL/mails.lang @@ -20,7 +20,7 @@ MailCCC=Kopi w pamięci do MailTopic=Temat wiadomości e-mail MailText=Wiadomość MailFile=Dołączone pliki -MailMessage=Zawartość emaila +MailMessage=Zawartość emaila SubjectNotIn=Nie w temacie BodyNotIn=Nie w ciele ShowEMailing=Pokaż mailingi @@ -182,7 +182,7 @@ IsAnAnswer=To odpowiedź na pierwszą wiadomość e-mail RecordCreatedByEmailCollector=Rekord utworzony przez moduł zbierający wiadomości e-mail %s z wiadomości e-mail %s DefaultBlacklistMailingStatus=Domyślna wartość pola „%s” podczas tworzenia nowego kontaktu DefaultStatusEmptyMandatory=Puste, ale obowiązkowe -WarningLimitSendByDay=OSTRZEŻENIE: konfiguracja lub umowa Twojej instancji ogranicza liczbę e-maili dziennie do %s. Próba wysłania większej liczby może spowodować spowolnienie lub zawieszenie instancji. Jeśli potrzebujesz większego limitu, skontaktuj się ze swoim wsparciem. +WarningLimitSendByDay=WARNING: The setup or contract of your instance limits your number of emails per day to %s. Trying to send more may result in having your instance slow down or suspended. Please contact your support if you need a higher quota. NoMoreRecipientToSendTo=Nie ma już odbiorcy, do którego można wysłać wiadomość e-mail EmailOptedOut=Właściciel adresu e-mail poprosił o zaprzestanie kontaktowania się z nim za pomocą tego e-maila EvenUnsubscribe=Dołącz e-maile dotyczące rezygnacji diff --git a/htdocs/langs/pl_PL/main.lang b/htdocs/langs/pl_PL/main.lang index 895aea986bb..67c73f63821 100644 --- a/htdocs/langs/pl_PL/main.lang +++ b/htdocs/langs/pl_PL/main.lang @@ -420,6 +420,8 @@ TotalTTCShort=Ogółem (z VAT) TotalHT=Kwota (Bez VAT) TotalHTforthispage=Razem (bez podatku) dla tej strony Totalforthispage=Suma dla tej strony +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=Ogółem (z VAT) TotalTTCToYourCredit=Ogółem (z VAT) na twoje konto TotalVAT=Razem VAT @@ -436,7 +438,7 @@ INCVATONLY=Zawiera VAT INCT=Zawiera wszystkie podatki VAT=Stawka VAT VATIN=IGST -VATs=Podatek od sprzedaży +VATs=Podatek od sprzedaży VATINs=Zintegrowany podatek od towarów i usług LT1=Podatek obrotowy 2 LT1Type=Rodzaj podatku od sprzedaży 2 @@ -647,6 +649,7 @@ ReportName=Nazwa raportu ReportPeriod=Raport z okresu ReportDescription=Opis Report=Sprawozdanie +Reports=Raporty Keyword=Słowo klucz Origin=Pochodzenie Legend=Legenda @@ -703,7 +706,7 @@ SendByMail=Wyślij przez e-mail MailSentBy=E-mail został wysłany przez MailSentByTo=E-mail wysłany przez %s do %s NotSent=Nie wysłał -TextUsedInTheMessageBody=Zawartość emaila +TextUsedInTheMessageBody=Zawartość emaila SendAcknowledgementByMail=Wyślij email potwierdzający SendMail=Wyślij wiadomość email Email=Adres e-mail @@ -782,7 +785,7 @@ FreeZone=Produkt opisany dowolnym tekstem FreeLineOfType=Pozycja opisana dowolnym tekstem, rodzaj: CloneMainAttributes=Skopiuj obiekt z jego głównymi atrybutami ReGeneratePDF=Wygeneruj ponownie PDF -PDFMerge=Scalanie/ dzielenie PDF +PDFMerge=Scalanie/ dzielenie PDF Merge=Scalanie/ dzielenie DocumentModelStandardPDF=Standardowy szablon PDF PrintContentArea=Pokaż stronę do wydruku głównej treści diff --git a/htdocs/langs/pl_PL/modulebuilder.lang b/htdocs/langs/pl_PL/modulebuilder.lang index 37b3e5eefae..f7298b0b958 100644 --- a/htdocs/langs/pl_PL/modulebuilder.lang +++ b/htdocs/langs/pl_PL/modulebuilder.lang @@ -148,7 +148,7 @@ CSSListClass=CSS dla listy NotEditable=Nie można edytować ForeignKey=Klucz obcy ForeignKeyDesc=Jeśli wartość tego pola musi być gwarantowana w innej tabeli. Wprowadź tutaj składnię pasującą do wartości: nazwa tabeli.pole nadrzędne do sprawdzenia -TypeOfFieldsHelp=Przykład:
varchar(99)
e-mail
telefon
ip
url
hasło
double(24,8)
real
text
html
data
datetime
znacznik czasu
integer
integer:ClassName:relativepath/to/classfile.class.php[:1[:filter]]

'1' oznacza, że dodajemy przycisk + po kombinacji, aby utworzyć rekord
'filtr' to Warunek składni filtra uniwersalnego, przykład: '((status:=:1) AND (fk_user:=:__USER_ID__) AND (entity:IN:(__SHARED_ENTITIES__))' +TypeOfFieldsHelp=Example:
varchar(99)
email
phone
ip
url
password
double(24,8)
real
text
html
date
datetime
timestamp
integer
integer:ClassName:relativepath/to/classfile.class.php[:1[:filter]]

'1' means we add a + button after the combo to create the record
'filter' is an Universal Filter syntax condition, example: '((status:=:1) AND (fk_user:=:__USER_ID__) AND (entity:IN:(__SHARED_ENTITIES__))' TypeOfFieldsHelpIntro=To jest typ pola/atrybutu. AsciiToHtmlConverter=Konwerter Ascii na HTML AsciiToPdfConverter=Konwerter ASCII na PDF @@ -180,7 +180,7 @@ FailedToAddCodeIntoDescriptor=Nie udało się dodać kodu do deskryptora. Sprawd DictionariesCreated=Słownik %s pomyślnie utworzono DictionaryDeleted=Słownik %s pomyślnie usunięto PropertyModuleUpdated=Właściwość %s została pomyślnie zaktualizowana -InfoForApiFile=* Kiedy wygenerujesz plik po raz pierwszy, wszystkie metody zostaną utworzone dla każdego obiektu.
* Klikając usuń, po prostu usuwasz wszystkie metody dla klasy wybrany obiekt. +InfoForApiFile=* When you generate file for the first time then all methods will be created for each object.
* When you click in remove you just remove all methods for the selected object. SetupFile=Strona konfiguracji modułu EmailingSelectors=Emails selectors EmailingSelectorDesc=You can generate and edit here the class files to provide new email target selectors for the mass emailing module diff --git a/htdocs/langs/pl_PL/partnership.lang b/htdocs/langs/pl_PL/partnership.lang index 4093f760713..23511a1c18c 100644 --- a/htdocs/langs/pl_PL/partnership.lang +++ b/htdocs/langs/pl_PL/partnership.lang @@ -91,8 +91,7 @@ CountLastUrlCheckError=Liczba błędów podczas ostatniego sprawdzania adresu UR LastCheckBacklink=Data ostatniego sprawdzenia adresu URL NewPartnershipRequest=Nowa prośba o partnerstwo -NewPartnershipRequestDesc=Za pomocą tego formularza możesz złożyć wniosek o przyłączenie się do jednego z naszych programów partnerskich. Jeśli potrzebujesz pomocy w wypełnieniu tego formularza, skontaktuj się z nami e-mailem %s. +NewPartnershipRequestDesc=This form allows you to request to be part of one of our partnership program. If you need help to fill this form, please contact by email %s. ThisUrlMustContainsAtLeastOneLinkToWebsite=Ta strona musi zawierać co najmniej jeden link do jednej z następujących domen: %s IPOfApplicant=Adres IP wnioskodawcy - diff --git a/htdocs/langs/pl_PL/paypal.lang b/htdocs/langs/pl_PL/paypal.lang index 63c2dd530ee..0240d745597 100644 --- a/htdocs/langs/pl_PL/paypal.lang +++ b/htdocs/langs/pl_PL/paypal.lang @@ -1,25 +1,25 @@ # Dolibarr language file - Source file is en_US - paypal PaypalSetup=PayPal konfiguracji modułu -PaypalDesc=This module allows payment by customers via PayPal. This can be used for a ad-hoc payment or for a payment related to a Dolibarr object (invoice, order, ...) -PaypalOrCBDoPayment=Pay with PayPal (Card or PayPal) -PaypalDoPayment=Pay with PayPal +PaypalDesc=Moduł ten umożliwia dokonywanie płatności przez klientów za pośrednictwem PayPal. Można to wykorzystać do płatności ad hoc lub płatności związanej z obiektem Dolibarr (faktura, zamówienie, ...) +PaypalOrCBDoPayment=Zapłać za pomocą PayPal (karta lub PayPal) +PaypalDoPayment=Zapłać z PayPal-em PAYPAL_API_SANDBOX=Tryb testu / sandbox PAYPAL_API_USER=API użytkownika PAYPAL_API_PASSWORD=API hasło PAYPAL_API_SIGNATURE=Podpis API PAYPAL_SSLVERSION=Wersja Curl SSL -PAYPAL_API_INTEGRAL_OR_PAYPALONLY=Offer "integral" payment (Credit card+PayPal) or "PayPal" only +PAYPAL_API_INTEGRAL_OR_PAYPALONLY=Oferuj płatność „integralną” (karta kredytowa + PayPal) lub tylko „PayPal” PaypalModeIntegral=Integralny PaypalModeOnlyPaypal=Tylko PayPal -ONLINE_PAYMENT_CSS_URL=Optional URL of CSS stylesheet on online payment page +ONLINE_PAYMENT_CSS_URL=Opcjonalny adres URL arkusza stylów CSS na stronie płatności online ThisIsTransactionId=Jest to id transakcji: %s -PAYPAL_ADD_PAYMENT_URL=Include the PayPal payment url when you send a document by email +PAYPAL_ADD_PAYMENT_URL=Wysyłając dokument pocztą e-mail, dołącz adres URL płatności PayPal NewOnlinePaymentReceived=Otrzymano nową płatność online -NewOnlinePaymentFailed=New online payment tried but failed -ONLINE_PAYMENT_SENDEMAIL=Email address for notifications after each payment attempt (for success and fail) +NewOnlinePaymentFailed=Nowa płatność online została podjęta, ale nie powiodła się +ONLINE_PAYMENT_SENDEMAIL=Adres e-mail do powiadomień po każdej próbie płatności (w przypadku sukcesu i niepowodzenia) ReturnURLAfterPayment=Zwróć adres URL po dokonaniu płatności ValidationOfOnlinePaymentFailed=Niepowodzenie potwierdzenia płatności online -PaymentSystemConfirmPaymentPageWasCalledButFailed=Payment confirmation page was called by payment system returned an error +PaymentSystemConfirmPaymentPageWasCalledButFailed=Strona potwierdzenia płatności została wywołana przez system płatności zwróciła błąd SetExpressCheckoutAPICallFailed=Wywołanie API poprzez SetExpressCheckout nie powiodło się DoExpressCheckoutPaymentAPICallFailed=Wywołanie API poprzez DoExpressCheckoutPayment nie powiodło się. DetailedErrorMessage=Szczegółowa informacja o błędzie @@ -27,10 +27,11 @@ ShortErrorMessage=Krotka informacja o błędzie ErrorCode=Kod błędu ErrorSeverityCode=Kod ważności błędu OnlinePaymentSystem=System płatności online -PaypalLiveEnabled=PayPal "live" mode enabled (otherwise test/sandbox mode) -PaypalImportPayment=Import PayPal payments -PostActionAfterPayment=Post actions after payments -ARollbackWasPerformedOnPostActions=A rollback was performed on all Post actions. You must complete post actions manually if they are necessary. -ValidationOfPaymentFailed=Validation of payment has failed -CardOwner=Card holder -PayPalBalance=Paypal credit +PaypalLiveEnabled=Tryb „na żywo” PayPal włączony (w przeciwnym razie tryb testowy / piaskownicy) +PaypalImportPayment=Importuj płatności PayPal +PostActionAfterPayment=Opublikuj akcje po dokonaniu płatności +ARollbackWasPerformedOnPostActions=Wszystkie akcje związane z wpisem zostały wycofane. Jeśli to konieczne, musisz ręcznie wykonać czynności związane z publikowaniem. +ValidationOfPaymentFailed=Weryfikacja płatności nie powiodła się +CardOwner=Posiadacz karty +PayPalBalance=Kredyt PayPal +OnlineSubscriptionPaymentLine=Online subscription recorded on %s
Paid via %s
Originating IP address: %s
Transaction ID: %s diff --git a/htdocs/langs/pl_PL/stocks.lang b/htdocs/langs/pl_PL/stocks.lang index 458ae7aecb9..289d62beeb1 100644 --- a/htdocs/langs/pl_PL/stocks.lang +++ b/htdocs/langs/pl_PL/stocks.lang @@ -282,7 +282,7 @@ ModuleStockTransferName=Zaawansowany transfer zapasów ModuleStockTransferDesc=Zaawansowane zarządzanie przesunięciami magazynowymi z generowaniem arkusza przeniesień StockTransferNew=Nowy transfer akcji StockTransferList=Lista transferów akcji -ConfirmValidateStockTransfer=Czy na pewno chcesz zatwierdzić ten transfer zapasów za pomocą referencji %s? +ConfirmValidateStockTransfer=Are you sure you want to validate this stocks transfer with the reference %s ? ConfirmDestock=Zmniejszenie zapasów wraz z przeniesieniem %s ConfirmDestockCancel=Anuluj zmniejszenie zapasów poprzez przeniesienie %s DestockAllProduct=Zmniejszenie zapasów diff --git a/htdocs/langs/pt_AO/errors.lang b/htdocs/langs/pt_AO/errors.lang deleted file mode 100644 index c07bad2b19c..00000000000 --- a/htdocs/langs/pt_AO/errors.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - errors -ErrorRefAlreadyExists=Reference %s used for creation already exists. diff --git a/htdocs/langs/pt_AO/holiday.lang b/htdocs/langs/pt_AO/holiday.lang deleted file mode 100644 index 254b07b0308..00000000000 --- a/htdocs/langs/pt_AO/holiday.lang +++ /dev/null @@ -1,4 +0,0 @@ -# Dolibarr language file - Source file is en_US - holiday -MenuCollectiveAddCP=New collective leave -NewHolidayForGroup=New collective leave -SendRequestCollectiveCP=Create collective leave diff --git a/htdocs/langs/pt_AO/languages.lang b/htdocs/langs/pt_AO/languages.lang deleted file mode 100644 index 879813b70ad..00000000000 --- a/htdocs/langs/pt_AO/languages.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - languages -Language_en_AE=English (United Arab Emirates) diff --git a/htdocs/langs/pt_AO/modulebuilder.lang b/htdocs/langs/pt_AO/modulebuilder.lang deleted file mode 100644 index 23cb0d02f7a..00000000000 --- a/htdocs/langs/pt_AO/modulebuilder.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - modulebuilder -EnterNameOfObjectToDeleteDesc=You can delete an object. WARNING: All coding files (generated or created manually) related to the object will be deleted! diff --git a/htdocs/langs/pt_AO/partnership.lang b/htdocs/langs/pt_AO/partnership.lang deleted file mode 100644 index 6a2455e0302..00000000000 --- a/htdocs/langs/pt_AO/partnership.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - partnership -ReasonDeclineOrCancel=Reason for refusal or cancellation diff --git a/htdocs/langs/pt_BR/admin.lang b/htdocs/langs/pt_BR/admin.lang index 6e15a2c0401..0b4d4b0f3fe 100644 --- a/htdocs/langs/pt_BR/admin.lang +++ b/htdocs/langs/pt_BR/admin.lang @@ -472,7 +472,6 @@ Module5000Name=Multi-Empresas Module5000Desc=Permite gerenciar várias empresas Module6000Name=Fluxo de trabalho entre módulos Module6000Desc=Gerenciamento de fluxo de trabalho entre diferentes módulos (criação automática de objeto e / ou mudança automática de status) -Module10000Desc=CMS to create websites with a WYSIWYG editor. This is a webmaster or developer oriented Content Management System (it is better to know HTML and CSS language). Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the internet with your own domain name. Module20000Name=Deixar o gerenciamento de solicitações Module20000Desc=Definir e rastrear solicitações de saída de funcionários Module39000Name=Lotes de Produtos diff --git a/htdocs/langs/pt_BR/modulebuilder.lang b/htdocs/langs/pt_BR/modulebuilder.lang index 37206bdb2a3..0c352531cc3 100644 --- a/htdocs/langs/pt_BR/modulebuilder.lang +++ b/htdocs/langs/pt_BR/modulebuilder.lang @@ -8,7 +8,6 @@ ModuleBuilderDeschooks=Esta aba é dedicada aos ganchos. ModuleBuilderDescwidgets=Esta aba é dedicada a gerenciar / construir widgets. ModuleBuilderDescbuildpackage=Você pode gerar aqui um arquivo de pacote "pronto para distribuir" (um arquivo .zip normalizado) do seu módulo e um arquivo de documentação "pronto para distribuir". Basta clicar no botão para criar o pacote ou arquivo de documentação. EnterNameOfModuleToDeleteDesc=Você pode excluir seu módulo. AVISO: Todos os arquivos de codificação do módulo (gerados ou criados manualmente) e dados estruturados e documentação serão apagados! -EnterNameOfObjectToDeleteDesc=You can delete an object. WARNING: All coding files (generated or created manually) related to the object will be deleted! BuildDocumentation=Documentação de compilação ModuleIsLive=Este módulo foi ativado. Qualquer alteração pode interromper um recurso atual ao vivo. DescriptionLong=Longa descrição diff --git a/htdocs/langs/pt_BR/zapier.lang b/htdocs/langs/pt_BR/zapier.lang index a1150fab1bc..16991cc5822 100644 --- a/htdocs/langs/pt_BR/zapier.lang +++ b/htdocs/langs/pt_BR/zapier.lang @@ -2,4 +2,3 @@ ModuleZapierForDolibarrName =Zapier para Dolibarr ModuleZapierForDolibarrDesc =Módulo Zapier para Dolibarr ZapierForDolibarrSetup=Configurações do Zapier para Dolibarr -ZapierDescription=Interface com Zapier diff --git a/htdocs/langs/pt_MZ/admin.lang b/htdocs/langs/pt_MZ/admin.lang index cb71d41b386..b13c12e4765 100644 --- a/htdocs/langs/pt_MZ/admin.lang +++ b/htdocs/langs/pt_MZ/admin.lang @@ -457,7 +457,6 @@ Module5000Name=Multi-Empresas Module5000Desc=Permite gerenciar várias empresas Module6000Name=Fluxo de trabalho entre módulos Module6000Desc=Gerenciamento de fluxo de trabalho entre diferentes módulos (criação automática de objeto e / ou mudança automática de status) -Module10000Desc=CMS to create websites with a WYSIWYG editor. This is a webmaster or developer oriented Content Management System (it is better to know HTML and CSS language). Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the internet with your own domain name. Module20000Name=Deixar o gerenciamento de solicitações Module20000Desc=Definir e rastrear solicitações de saída de funcionários Module39000Name=Lotes de Produtos diff --git a/htdocs/langs/pt_MZ/modulebuilder.lang b/htdocs/langs/pt_MZ/modulebuilder.lang index 37206bdb2a3..0c352531cc3 100644 --- a/htdocs/langs/pt_MZ/modulebuilder.lang +++ b/htdocs/langs/pt_MZ/modulebuilder.lang @@ -8,7 +8,6 @@ ModuleBuilderDeschooks=Esta aba é dedicada aos ganchos. ModuleBuilderDescwidgets=Esta aba é dedicada a gerenciar / construir widgets. ModuleBuilderDescbuildpackage=Você pode gerar aqui um arquivo de pacote "pronto para distribuir" (um arquivo .zip normalizado) do seu módulo e um arquivo de documentação "pronto para distribuir". Basta clicar no botão para criar o pacote ou arquivo de documentação. EnterNameOfModuleToDeleteDesc=Você pode excluir seu módulo. AVISO: Todos os arquivos de codificação do módulo (gerados ou criados manualmente) e dados estruturados e documentação serão apagados! -EnterNameOfObjectToDeleteDesc=You can delete an object. WARNING: All coding files (generated or created manually) related to the object will be deleted! BuildDocumentation=Documentação de compilação ModuleIsLive=Este módulo foi ativado. Qualquer alteração pode interromper um recurso atual ao vivo. DescriptionLong=Longa descrição diff --git a/htdocs/langs/pt_MZ/zapier.lang b/htdocs/langs/pt_MZ/zapier.lang index a1150fab1bc..16991cc5822 100644 --- a/htdocs/langs/pt_MZ/zapier.lang +++ b/htdocs/langs/pt_MZ/zapier.lang @@ -2,4 +2,3 @@ ModuleZapierForDolibarrName =Zapier para Dolibarr ModuleZapierForDolibarrDesc =Módulo Zapier para Dolibarr ZapierForDolibarrSetup=Configurações do Zapier para Dolibarr -ZapierDescription=Interface com Zapier diff --git a/htdocs/langs/pt_PT/accountancy.lang b/htdocs/langs/pt_PT/accountancy.lang index 21d86242c44..5ea0dfb07f1 100644 --- a/htdocs/langs/pt_PT/accountancy.lang +++ b/htdocs/langs/pt_PT/accountancy.lang @@ -95,7 +95,7 @@ AccountancyAreaDescClosePeriod=ETAPA %s: feche o período para que não possamos TheFiscalPeriodIsNotDefined=Uma etapa obrigatória na configuração não foi concluída (o período fiscal não está definido) TheJournalCodeIsNotDefinedOnSomeBankAccount=Uma etapa obrigatória na configuração não foi concluída (Contabilista Código diário não definido para todas as contas bancárias) -Selectchartofaccounts=Selecione gráfico de contas ativo +Selectchartofaccounts=Selecione gráfico de contas ativo CurrentChartOfAccount=Gráfico ativo atual de conta ChangeAndLoad=Mudar e carregar Addanaccount=Adicione uma conta contabilística @@ -397,7 +397,7 @@ ChartofaccountsId=ID de plano de contas ## Tools - Init accounting account on product / service InitAccountancy=Iniciar contabilidade InitAccountancyDesc=Essa página pode ser usada para inicializar uma conta contábil em produtos e serviços que não tenham uma conta contábil definida para vendas e compras. -DefaultBindingDesc=Esta página pode ser usada para definir as contas padrão (do gráfico de conta) a serem usadas em objetos de negócios hiperligação, conexão com um conta, como pagamento de salários, doações, impostos e IVA, quando não há conta já estavam definidos. +DefaultBindingDesc=This page can be used to set the default accounts (from the chart of account) to use to link business objects with an account, like payment salaries, donation, taxes and VAT, when no specific account were already set. DefaultClosureDesc=Esta página pode ser usada para definir parâmetros usados para fechamentos Contabilista. Options=Opções OptionModeProductSell=Modo de vendas @@ -422,7 +422,7 @@ AccountRemovedFromGroup=conta removido do grupo SaleLocal=Venda local SaleExport=Venda de exportação SaleEEC=Venda em EEC -SaleEECWithVAT=Venda em EEC com IVA não nulo, então supomos que esta NÃO seja uma venda intracomunitária e a conta é o produto padrão conta. +SaleEECWithVAT=Sale in EEC with a VAT not null, so we suppose this is NOT an intracommunautary sale and the suggested account is the standard product account. SaleEECWithoutVATNumber=Venda em EEC sem IVA, mas o IVA Id. de terceiros não está definido. Recorremos ao conta para vendas padrão. Você pode corrigir o IVA Id. do terceiro ou alterar o produto conta sugerido para vinculação, se necessário. ForbiddenTransactionAlreadyExported=Proibido: a transação foi validada e/ou exportada. ForbiddenTransactionAlreadyValidated=Proibido: A transação foi validada. diff --git a/htdocs/langs/pt_PT/admin.lang b/htdocs/langs/pt_PT/admin.lang index c9e4482b07a..4955b3db094 100644 --- a/htdocs/langs/pt_PT/admin.lang +++ b/htdocs/langs/pt_PT/admin.lang @@ -465,7 +465,7 @@ ExtrafieldParamHelpselect=Lista de valores devem ser linhas com chave de formato ExtrafieldParamHelpcheckbox=A lista de valores deve ser composta por linhas com chave de formato, valor (onde a chave não pode ser '0')

por exemplo:
1, valor1
2, valor2
19bz3, valor3 ExtrafieldParamHelpradio=A lista de valores deve ser composta por linhas com chave de formato, valor (onde a chave não pode ser '0')

por exemplo:
1, valor1
2, valor2
19bz3, valor3 ExtrafieldParamHelpsellist=A lista de valores vem de uma tabela
Sintaxe: table_name:label_field: id_field::filtersql
Exemplo: c_typent:libelle:Id.::filtersql

- id_field é necessariamente uma chave int primária
- filtersql é uma condição SQL. Pode ser um teste simples (por exemplo, active=1) para exibir apenas o valor ativo
Você também pode usar $Id.$ em filtro que é o Id. atual do objeto atual
Para usar um SELECT no filtro, use a palavra-chave $SEL$ para ignorar o anti -proteção contra injeção.
se você deseja filtrar campos extras, use a sintaxe extra.fieldcode=... (onde o campo Código é o Código do campo extra)

Em encomenda para ter a lista dependendo de outra lista de atributos complementares:
c_typent:libelle:Id.:options_ PANTER_LIST_CODE Parent_Column BS0582FAFE CFDA19BZ0
Em encomenda para ter a lista dependendo de outra lista:
c_typent:libelle:Id.:parent_list_code|parent_column:filtro -ExtrafieldParamHelpchkbxlst=A lista de valores vem de uma tabela
Sintaxe: table_name:label_field: id_field::filtersql
Exemplo: c_typent:libelle:Id.::filtersql

o filtro pode ser um teste simples (por exemplo, active=1 ) para exibir apenas o valor ativo
Você também pode usar $Id.$ no filtro que é o Id. do objeto atual
Para fazer um SELECT no filtro use $SEL$
se desejar filtrar em campos extras use a sintaxe extra.fieldcode=... (onde o campo Código é o Código do campo extra)

Em encomenda para ter a lista dependendo de outra lista de atributos complementares:
c_typent:libelle: Id.:options_parent_list_code |parent_column:filtro

Em encomenda para ter a lista dependendo de outra lista:
c_typent:libelle:Id.:parent_list_code|parent_column:filtro +ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filtersql
Example: c_typent:libelle:id::filtersql

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Os parâmetros devem ser ObjectName:Classpath
Sintaxe: ObjectName:Classpath ExtrafieldParamHelpSeparator=Mantenha vazio para um separador simples
Defina como 1 para um separador recolhível (abrir por padrão para uma nova sessão, então o status é mantido para cada sessão utilizador)
Defina como 2 para um separador recolhido (recolhido por padrão para uma nova sessão, então o status é mantido antes de cada sessão utilizador) LibraryToBuildPDF=Biblioteca utilizada para gerar PDF @@ -543,7 +543,7 @@ DAV_ALLOW_PRIVATE_DIRTooltip=O diretoria genérico privado é um WebDAV diretori DAV_ALLOW_PUBLIC_DIR=Ative o público genérico diretoria (WebDAV dedicado diretoria chamado "public" - não é necessário fazer login) DAV_ALLOW_PUBLIC_DIRTooltip=O público genérico diretoria é um WebDAV diretoria que qualquer pessoa pode acessar (em leitura e modo de gravação), sem necessidade de autorização (login/senha conta). DAV_ALLOW_ECM_DIR=Habilite o diretoria privado do DMS/ECM (raiz diretoria do DMS/ECM módulo - login necessário) -DAV_ALLOW_ECM_DIRTooltip=A raiz diretoria onde todos os arquivos são manualmente carregados ao usar o DMS/ECM módulo. Da mesma forma que o acesso pela interface web, você precisará de um login/senha válido com permissões adequadas para acessá-lo. +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Similarly as access from the web interface, you will need a valid login/password with adequate permissions to access it. ##### Modules ##### Module0Name=Utilizadores e Grupos Module0Desc=Gestão de Utilizadores / Funcionários e Grupos @@ -1197,6 +1197,7 @@ Skin=Tema DefaultSkin=Tema predefinido MaxSizeList=Tamanho máximo da lista DefaultMaxSizeList=Tamanho máximo predefinido para listas +DisplayGrandTotalInList=Display grand total (for all pages) in lists footer DefaultMaxSizeShortList=Comprimento máximo padrão para listas curtas (ou seja, no cartão do cliente) MessageOfDay=Mensagem do día MessageLogin=Mensagem da página de inicio de sessão @@ -1953,7 +1954,7 @@ Format=Formato TypePaymentDesc=0:cliente tipo de pagamento, 1:Fornecedor, Vendedor tipo de pagamento, 2:Ambos clientes e forma de pagamento de fornecedores IncludePath=Caminho para o dirétorio "include" (definido na variável %s) ExpenseReportsSetup=Configuração do módulo "Relatórios de Despesas" -TemplatePDFExpenseReports=Modelos de documentos para a produção de relatórios de despesa +TemplatePDFExpenseReports=Modelos de documentos para a produção de relatórios de despesa ExpenseReportsRulesSetup=Configuração do módulo Relatórios de despesas - Regras ExpenseReportNumberingModules=Módulo de numeração de relatórios de despesas NoModueToManageStockIncrease=Não foi ativado nenhum módulo capaz de efetuar a gestão automática do acréscimo de stock. O acrescimo de stock será efetuado manualmente. @@ -2433,3 +2434,12 @@ UrlPublicInterfaceHelpAdmin=It is possible to define an alias to the web server ExportUseForce=Use the parameter -f ExportUseForceHelp=Force to continue the export even when an error is found (Backup may not be reliable) CustomPrompt=Custom prompts +AiDescription=AI (Artificial Intelligence) features +AiDescriptionLong=Provides AI (Artificial Intelligence) features in different part of the application. Need external AI API. +AI_KEY_API_CHATGPT= Key for ChatGPT IA api +AiSetup=AI module setup +AiCustomPrompt=AI customs prompt +AI_CONFIGURATIONS_PROMPT=Custom prompt +ImageGeneration=Image generation +AIPromptForFeatures=AI custom prompts for features +EnterAnIP=Enter an IP address diff --git a/htdocs/langs/pt_PT/errors.lang b/htdocs/langs/pt_PT/errors.lang index 20e6bd23664..ea7e9ae0ae4 100644 --- a/htdocs/langs/pt_PT/errors.lang +++ b/htdocs/langs/pt_PT/errors.lang @@ -292,7 +292,7 @@ ErrorNotApproverForHoliday=Você não é o aprovador da licença %s ErrorAttributeIsUsedIntoProduct=Este atributo é usado em uma ou mais variantes de produto ErrorAttributeValueIsUsedIntoProduct=Este valor de atributo é usado em uma ou mais variantes de produto ErrorPaymentInBothCurrency=Erro, todos os valores devem ser inseridos na mesma coluna -ErrorYouTryToPayInvoicesInACurrencyFromBankWithAnotherCurrency=Você tenta pagar faturas na moeda %s de um conta com a moeda %s +ErrorYouTryToPayInvoicesInACurrencyFromBankWithAnotherCurrency=You try to pay invoices in the currency %s from an account with the currency %s ErrorInvoiceLoadThirdParty=Não é possível carregar objeto de terceiros para fatura "%s" ErrorInvoiceLoadThirdPartyKey=Chave de terceiros "%s" não definida para fatura "%s" ErrorDeleteLineNotAllowedByObjectStatus=A linha eliminar, apagar não é permitida pelo status atual do objeto @@ -313,7 +313,7 @@ ErrorTooMuchFileInForm=Muitos arquivos em formulário, o número máximo é %s f ErrorSessionInvalidatedAfterPasswordChange=A sessão foi invalidada após uma alteração de senha, e-mail, status ou datas de validade. Faça login novamente. ErrorExistingPermission = Permissão %s para o objeto %s já existe ErrorFieldExist=O valor de %s já existe -ErrorEqualModule=módulo inválido em %s +ErrorEqualModule=módulo inválido em %s ErrorFieldValue=O valor de %s está incorreto ErrorCoherenceMenu=%s é obrigatório quando %s é 'esquerda' ErrorUploadFileDragDrop=Ocorreu um erro enquanto o(s) ficheiro(s) enviar diff --git a/htdocs/langs/pt_PT/eventorganization.lang b/htdocs/langs/pt_PT/eventorganization.lang index 30661ca3ca8..cb1e48d1d32 100644 --- a/htdocs/langs/pt_PT/eventorganization.lang +++ b/htdocs/langs/pt_PT/eventorganization.lang @@ -88,6 +88,7 @@ PriceOfRegistration=Preço da inscrição PriceOfRegistrationHelp=Preço a pagar para se inscrever ou participar do evento PriceOfBooth=Preço da assinatura para ficar em um estande PriceOfBoothHelp=Preço da assinatura para ficar em um estande +EventOrganizationICSLinkProject=Link ICS for the event EventOrganizationICSLink=hiperligação, conexão ICS para conferências ConferenceOrBoothInformation=Informações sobre conferência ou estande Attendees=Participantes diff --git a/htdocs/langs/pt_PT/exports.lang b/htdocs/langs/pt_PT/exports.lang index 9ae12d61cc5..a05f4406b12 100644 --- a/htdocs/langs/pt_PT/exports.lang +++ b/htdocs/langs/pt_PT/exports.lang @@ -72,7 +72,7 @@ FieldsTarget=Domínios orientados FieldTarget=Campo alvo FieldSource=Campo da Fonte NbOfSourceLines=Número de linhas no arquivo de origem -NowClickToTestTheImport=verificar que o formato ficheiro (campo e delimitadores de string) do seu verificar span class='notranslate'>ficheiro corresponde às opções mostradas e que você omitiu a linha do cabeçalho ou serão sinalizadas como erros na simulação a seguir.
Clique em "%s " para executar um verificar da ficheiro estrutura/conteúdo e simula o processo de importação.
Nenhum dado será alterado em seu banco de dados. +NowClickToTestTheImport=Check that the file format (field and string delimiters) of your file matches the options shown and that you have omitted the header line, or these will be flagged as errors in the following simulation.
Click on the "%s" button to run a check of the file structure/contents and simulate the import process.
No data will be changed in your database. RunSimulateImportFile=Executar Simulação de Importação FieldNeedSource=Este campo requer dados do ficheiro fonte SomeMandatoryFieldHaveNoSource=Alguns campos obrigatórios não têm nenhuma fonte de dados de arquivo @@ -95,7 +95,7 @@ NbOfLinesImported=Número de linhas de importados com sucesso: %s. DataComeFromNoWhere=Valor para inserir vem do nada no arquivo fonte. DataComeFromFileFieldNb=O valor a ser inserido vem da coluna %s na fonte ficheiro. DataComeFromIdFoundFromRef=O valor que vem da fonte ficheiro será usado para encontrar o Id. do origem, fonte objeto a ser usado (portanto, o objeto %s que tem a referência da fonte ficheiro deve existir no banco de dados). -DataComeFromIdFoundFromCodeId=O valor de Código que vem da fonte ficheiro será usado para encontrar o Id. do objeto origem, fonte a ser usado (portanto, o Código da fonte ficheiro deve existir no dicionário %s). Observe que se você conhece o Id., também pode usá-lo na fonte ficheiro em vez do Código. A importação deve funcionar em ambos os casos. +DataComeFromIdFoundFromCodeId=The value of code that comes from source file will be used to find the id of the parent object to use (so the code from source file must exist in the dictionary %s). Note that if you know the id, you can also use it in the source file instead of the code. Import should work in both cases. DataIsInsertedInto=Dados provenientes de arquivo de origem será inserido no seguinte campo: DataIDSourceIsInsertedInto=O Id. do objeto origem, fonte, que foi encontrado usando os dados na fonte ficheiro, será inserido no seguinte campo: DataCodeIDSourceIsInsertedInto=O Id. da linha origem, fonte, que foi encontrada em Código, será ser inserido no seguinte campo: diff --git a/htdocs/langs/pt_PT/main.lang b/htdocs/langs/pt_PT/main.lang index 278d821fc7f..cd2f1779f44 100644 --- a/htdocs/langs/pt_PT/main.lang +++ b/htdocs/langs/pt_PT/main.lang @@ -420,6 +420,8 @@ TotalTTCShort=Total (IVA inc.) TotalHT=Total (excl. IVA) TotalHTforthispage=Total desta página (excl. IVA) Totalforthispage=Total para esta página +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=Total (IVA inc.) TotalTTCToYourCredit=Total (IVA inc.) a crédito TotalVAT=Total do IVA @@ -647,6 +649,7 @@ ReportName=Nome do Relatório ReportPeriod=Periodo de análise ReportDescription=Descrição Report=Relatório +Reports=Relatórios Keyword=Palavra-chave Origin=Origem Legend=Legenda @@ -787,7 +790,7 @@ Merge=Junção DocumentModelStandardPDF=Modelo PDF padrão PrintContentArea=Visualizar página para impressão área de conteúdo principal MenuManager=Gestão do menu -WarningYouAreInMaintenanceMode=Atenção, você está em modo de manutenção: Só o login %s está autorizado a usar a aplicação neste modo. +WarningYouAreInMaintenanceMode=Atenção, você está em modo de manutenção: Só o login %s está autorizado a usar a aplicação neste modo. CoreErrorTitle=Erro de sistema CoreErrorMessage=Ocorreu um erro. Contacte o seu administrador do sistema de forma a que este proceda à análise do relatórios ou desative a opção $dolibarr_main_prod=1 para obter mais informação. CreditCard=Cartão de crédito diff --git a/htdocs/langs/pt_PT/orders.lang b/htdocs/langs/pt_PT/orders.lang index 0613dc76592..debcd70bc81 100644 --- a/htdocs/langs/pt_PT/orders.lang +++ b/htdocs/langs/pt_PT/orders.lang @@ -1,5 +1,5 @@ # Dolibarr language file - Source file is en_US - orders -OrderExists=Um encomenda já estava abrir vinculado a este orçamento, então nenhum outro orçamento span class='notranslate'>encomenda
foi criado automaticamente +OrderExists=An order was already open linked to this proposal, so no other order was created automatically OrdersArea=Área de encomendas de clientes SuppliersOrdersArea=Área de encomendas de compra OrderCard=Ficha da encomenda diff --git a/htdocs/langs/pt_PT/other.lang b/htdocs/langs/pt_PT/other.lang index 73c49ca53ed..367470eeccd 100644 --- a/htdocs/langs/pt_PT/other.lang +++ b/htdocs/langs/pt_PT/other.lang @@ -336,3 +336,5 @@ FTPFailedToUploadFile=Falha ao enviar o ficheiro %s. AddFolder=Criar pasta FileWasCreateFolder=A pasta %s foi criada FTPFailedToCreateFolder=Falha ao criar a pasta %s. +SelectADay=Select a day in calendar +SelectANewDate=Select a new date diff --git a/htdocs/langs/pt_PT/products.lang b/htdocs/langs/pt_PT/products.lang index da213a9e84a..53f27605ad7 100644 --- a/htdocs/langs/pt_PT/products.lang +++ b/htdocs/langs/pt_PT/products.lang @@ -433,4 +433,6 @@ ModifyValueExtrafields = modificar valor de um campo extra OrProductsWithCategories=Ou produtos com tags/Categorias WarningTransferBatchStockMouvToGlobal = Caso queira desserializar este produto, todo o seu estoque serializado será transformado em estoque global WarningConvertFromBatchToSerial=Se você atualmente possui uma quantidade maior ou igual a 2 para o produto, mudar para esta opção significa que você ainda terá um produto com objetos diferentes do mesmo lote (embora queira um número de série exclusivo). A duplicata permanecerá até que um inventário ou estoque manual movimento para corrigir isso seja feito. +AllowStockMovementVariantParent=Also records stock movements on parent products of variant products +AllowStockMovementVariantParentHelp=By default, a parent of a variant is a virtual product, so no stock is managed for it. By enabling this option, a stock will be managed for parent products and each time a stock quantity is modified for a variant product, the same quantity will be modified for the parent product. You should not need this option, except if you are using variant to manage the same product than parent (but with different descriptions, prices...) ConfirmSetToDraftInventory=Tem a certeza que pretende retornar ao status Rascunho?
As quantidades atualmente definidas no inventário serão redefinidas. diff --git a/htdocs/langs/pt_PT/projects.lang b/htdocs/langs/pt_PT/projects.lang index b9d0189c79f..cbd904745c9 100644 --- a/htdocs/langs/pt_PT/projects.lang +++ b/htdocs/langs/pt_PT/projects.lang @@ -115,7 +115,7 @@ ListTaskTimeForTask=Lista de tempo gasto na tarefa ActivityOnProjectToday=Atividade de hoje no projeto ActivityOnProjectYesterday=Atividade de ontem no projeto ActivityOnProjectThisWeek=Atividade da semana no projeto -ActivityOnProjectThisMonth=Atividades do mês no projeto +ActivityOnProjectThisMonth=Atividades do mês no projeto ActivityOnProjectThisYear=Atividade do ano no projeto ChildOfProjectTask=Sub projeto/tarefa ChildOfTask=Sub tarefa @@ -214,7 +214,7 @@ TasksAssignedTo=Tarefas atribuídas a AssignTaskToMe=Atribuir tarefa para mim mesmo AssignTaskToUser=Atribuir tarefa a %s SelectTaskToAssign=Selecione a tarefa para atribuir ... -AssignTask=Atribuir +AssignTask=Atribuir ProjectOverview=Resumo ManageTasks=Use projetos para monitorar tarefas e / ou relatar o tempo gasto (tabelas de tempos) ManageOpportunitiesStatus=Usar projetos para seguir potenciais/oportunidades @@ -246,7 +246,7 @@ OppStatusLOST=Perdido Budget=Orçamento AllowToLinkFromOtherCompany=Permitir hiperligação, conexão um elemento com um projeto de outra empresa

Valores suportados:
- Manter vazio: pode hiperligação, conexão elementos com qualquer projeto no mesmo empresa, companhia (padrão)
- "all": Pode hiperligação, conexão elementos com qualquer projeto, até mesmo projetos de outras empresas
- Uma lista de IDs de terceiros separados por vírgulas: podem hiperligação, conexão elementos com quaisquer projetos desses terceiros (Exemplo: 123,4795,53)
LatestProjects=Últimos projetos %s -LatestModifiedProjects=Últimos %s projetos modificados +LatestModifiedProjects=Últimos %s projetos modificados OtherFilteredTasks=Outras tarefas filtradas NoAssignedTasks=Nenhuma tarefa atribuída encontrada (atribua projetos/tarefas ao utilizador atual na caixa de seleção superior para inserir o tempo nele) ThirdPartyRequiredToGenerateIntervention=Um terceiro deve ser definido no projeto para poder criar intervensão. @@ -289,7 +289,7 @@ ProfitIsCalculatedWith=O lucro é calculado usando AddPersonToTask=Adicione também às tarefas UsageOrganizeEvent=Uso: Organização de Eventos PROJECT_CLASSIFY_CLOSED_WHEN_ALL_TASKS_DONE=Classificar o projeto como encerrado quando todas as suas tarefas forem concluídas (100%% progresso) -PROJECT_CLASSIFY_CLOSED_WHEN_ALL_TASKS_DONE_help=Observação: projetos existentes com todas as tarefas já definidas para um progresso de 100%% não serão afetados: você terá que fechá-los manualmente. Esta opção afeta apenas projetos abrir. +PROJECT_CLASSIFY_CLOSED_WHEN_ALL_TASKS_DONE_help=Note: existing projects with all tasks already set to a progress of 100 %% won't be affected: you will have to close them manually. This option only affects open projects. SelectLinesOfTimeSpentToInvoice=Selecione as linhas de tempo gasto que não são faturadas e, em seguida, execute a ação em massa "Gerar fatura" para cobrá-las ProjectTasksWithoutTimeSpent=Tarefas do projeto sem perda de tempo FormForNewLeadDesc=Obrigado por preencher o seguinte formulário para entrar em contato conosco. Você também pode nos enviar um e-mail diretamente para %s. diff --git a/htdocs/langs/pt_PT/resource.lang b/htdocs/langs/pt_PT/resource.lang index b5980757000..22854f9e425 100644 --- a/htdocs/langs/pt_PT/resource.lang +++ b/htdocs/langs/pt_PT/resource.lang @@ -5,7 +5,7 @@ DeleteResource=Apagar recurso ConfirmDeleteResourceElement=Confirme apagar o recurso para este elemento NoResourceInDatabase=Nenhum recurso na base de dados NoResourceLinked=Nenhum recurso interligado - +ActionsOnResource=Eventos sobre este recurso ResourcePageIndex=Lista de recursos ResourceSingular=Recurso ResourceCard=Ficha do recurso @@ -34,3 +34,8 @@ IdResource=ID do recurso AssetNumber=Número de série ResourceTypeCode=Código do tipo de recurso ImportDataset_resource_1=Recursos + +ErrorResourcesAlreadyInUse=Alguns recursos estão em uso +ErrorResourceUseInEvent=%s usado no evento %s + +MaxUsers=Maximum users (places, seats, etc.) diff --git a/htdocs/langs/pt_PT/stocks.lang b/htdocs/langs/pt_PT/stocks.lang index 3c58179a72c..c2bde408375 100644 --- a/htdocs/langs/pt_PT/stocks.lang +++ b/htdocs/langs/pt_PT/stocks.lang @@ -174,7 +174,7 @@ NoPendingReceptionOnSupplierOrder=Nenhum receção pendente devido à compra de ThisSerialAlreadyExistWithDifferentDate=Este lote / número de série ( %s ) já existe, mas com data diferente de eatby ou sellby (encontrado %s , mas você insere %s ). OpenAnyMovement=abrir (todos movimento) OpenInternal=abrir (somente movimento interno) -UseDispatchStatus=Use um status de envio (Aprovar/refuse) para linhas de produtos na compra encomenda receção +UseDispatchStatus=Use a dispatch status (approve/refuse) for product lines on purchase order reception OptionMULTIPRICESIsOn=A opção "vários preços por segmento" está ativada. Isso significa que um produto tem vários preços de venda, portanto, o valor para venda não pode ser calculado ProductStockWarehouseCreated=Limite de estoque para estoque ideal de alerta e desejado criado corretamente ProductStockWarehouseUpdated=Limite de estoque para estoque ótimo de alerta e desejado atualizado corretamente diff --git a/htdocs/langs/pt_PT/users.lang b/htdocs/langs/pt_PT/users.lang index ec6ee64bf7b..8cf5e186f9b 100644 --- a/htdocs/langs/pt_PT/users.lang +++ b/htdocs/langs/pt_PT/users.lang @@ -72,7 +72,7 @@ ExportDataset_user_1=Utilizadores e as suas propriedades DomainUser=Utilizador de Domínio %s Reactivate=Reativar CreateInternalUserDesc=Este formulário permite que você crie um utilizador interno em sua empresa, companhia/organização . Para criar um utilizador externo (cliente, Fornecedor, Vendedor etc..) , use o botão 'Criar Dolibarr utilizador' do cartão de contato desse terceiro. -InternalExternalDesc=Um utilizador interno é um utilizador que faz parte da sua empresa, companhia/organização ou é um parceiro utilizador fora da sua organização que pode precisa ver mais dados do que dados relacionados ao seu empresa, companhia (o sistema de permissão definirá o que ele pode ou não ver ou fazer).
Uma externa utilizador é uma cliente, Fornecedor, Vendedor ou outro que deva visualizar APENAS dados relacionados a si mesmo (Criando um utilizador
para terceiros pode ser feito a partir do registro de contato do terceiro).

Em ambos os casos, você deve conceder permissões nos recursos que o utilizador precisa. +InternalExternalDesc=An internal user is a user that is part of your company/organization, or is a partner user outside of your organization that may need to see more data than data related to his company (the permission system will define what he can or can't see or do).
An external user is a customer, vendor or other that must view ONLY data related to himself (Creating an external user for a third-party can be done from the contact record of the third-party).

In both cases, you must grant permissions on the features that the user need. PermissionInheritedFromAGroup=A permissão dá-se já que o herda de um grupo ao qual pertenece o utilizador. Inherited=Herdado UserWillBe=utilizador criado será diff --git a/htdocs/langs/pt_PT/website.lang b/htdocs/langs/pt_PT/website.lang index e0e41e99f49..6b508da28d4 100644 --- a/htdocs/langs/pt_PT/website.lang +++ b/htdocs/langs/pt_PT/website.lang @@ -54,7 +54,7 @@ ReadPerm=Ler WritePerm=Escrever TestDeployOnWeb=Testar/implantar na web PreviewSiteServedByWebServer= Pré-visualize %s num novo separador.

O %s será servido por um servidor Web externo (como Apache, Nginx, IIS). Você deve instalar e configurar este servidor antes de apontar para o diretório:
%s
URL fornecida pelo servidor externo:
%s -PreviewSiteServedByDolibarr=Visualize %s em uma nova guia.

O %s será servido pelo servidor Dolibarr, portanto não precisa de nenhum servidor web extra (como Apache, Nginx, IIS) a serem instalados.
O inconveniente é que os URLs das páginas não são utilizador amigáveis e comece com o caminho do seu Dolibarr.
URL servido por Dolibarr:
%s

Para usar seu próprio servidor web externo para servir este site, crie um anfitrião, hospedeiro em seu servidor web que aponta para o diretório
%s
em seguida, insira o nome deste servidor virtual nas propriedades deste Site da Web e clique em hiperligação, conexão "Testar/Implantar na web". +PreviewSiteServedByDolibarr=Preview %s in a new tab.

The %s will be served by Dolibarr server so it does not need any extra web server (like Apache, Nginx, IIS) to be installed.
The inconvenient is that the URLs of pages are not user friendly and start with the path of your Dolibarr.
URL served by Dolibarr:
%s

To use your own external web server to serve this web site, create a virtual host on your web server that points on directory
%s
then enter the name of this virtual server in the properties of this website and click on the link "Test/Deploy on the web". VirtualHostUrlNotDefined=URL do host virtual servido pelo servidor da web externo não definido NoPageYet=Ainda sem páginas YouCanCreatePageOrImportTemplate=Você pode criar uma nova página ou importar um modelo de site completo diff --git a/htdocs/langs/pt_PT/withdrawals.lang b/htdocs/langs/pt_PT/withdrawals.lang index e12911f78d8..039660b3dc1 100644 --- a/htdocs/langs/pt_PT/withdrawals.lang +++ b/htdocs/langs/pt_PT/withdrawals.lang @@ -159,10 +159,10 @@ InfoTransData=Valor: %s
Metode: %s
Data: %s InfoRejectSubject=Pedido de pagamento por débito direto recusado InfoRejectMessage=Olá,

a ordem de pagamento de débito directo da factura %s relacionada com a empresa %s, com uma quantidade de %s foi recusada pelo banco.



%s ModeWarning=Opção para o modo real não foi definido, nós paramos depois desta simulação -ErrorCompanyHasDuplicateDefaultBAN=empresa, companhia com Id. %s tem mais de um conta bancária. Não há como saber qual usar. +ErrorCompanyHasDuplicateDefaultBAN=Company with id %s has more than one default bank account. No way to know which one to use. ErrorICSmissing=ICS ausente em conta bancária %s TotalAmountOfdirectDebitOrderDiffersFromSumOfLines=A quantidade total de Débito direto encomenda difere da soma das linhas -WarningSomeDirectDebitOrdersAlreadyExists=Aviso: já existem alguns pedidos pendentes de Débito direto (%s) solicitados no valor de %s +WarningSomeDirectDebitOrdersAlreadyExists=Aviso: já existem alguns pedidos pendentes de Débito direto (%s) solicitados no valor de %s WarningSomeCreditTransferAlreadyExists=Aviso: já existem algumas transferências de crédito pendentes (%s) solicitadas no valor de %s UsedFor=Usado para %s Societe_ribSigned=Mandato SEPA assinado @@ -171,4 +171,3 @@ SalaryWaitingWithdraw=Salários aguardando pagamento por transferência bancári RefSalary=Salário NoSalaryInvoiceToWithdraw=Nenhum salário esperando por um '%s'. Acesse a aba '%s' no cartão de salário para fazer uma solicitação. SalaryInvoiceWaitingWithdraw=Salários aguardando pagamento por transferência bancária - diff --git a/htdocs/langs/pt_PT/zapier.lang b/htdocs/langs/pt_PT/zapier.lang index da5156793a5..08637594d5e 100644 --- a/htdocs/langs/pt_PT/zapier.lang +++ b/htdocs/langs/pt_PT/zapier.lang @@ -16,6 +16,6 @@ ModuleZapierForDolibarrName = Zapier for Dolibarr ModuleZapierForDolibarrDesc = Zapier para o módulo Dolibarr ZapierForDolibarrSetup=Configuração do Zapier para Dolibarr -ZapierDescription=Interface with Zapier -ZapierAbout=About the module Zapier -ZapierSetupPage=There is no need for a setup on Dolibarr side to use Zapier. However, you must generate and publish a package on zapier to be able to use Zapier with Dolibarr. See documentation on this wiki page. +ZapierDescription=Interface com Zapier +ZapierAbout=Sobre o módulo Zapier +ZapierSetupPage=Não há necessidade de configuração no Dolibarr para usar o Zapier. No entanto, deve gerar e publicar um pacote no zapier para o poder usar com o Dolibarr. Consulte a documentação em nesta página wiki . diff --git a/htdocs/langs/ro_RO/admin.lang b/htdocs/langs/ro_RO/admin.lang index 3aeb4fefa2e..fdb21ec91ac 100644 --- a/htdocs/langs/ro_RO/admin.lang +++ b/htdocs/langs/ro_RO/admin.lang @@ -111,7 +111,7 @@ NoMaxSizeByPHPLimit=Notă: Nicio limită setată în configuraţia PHP MaxSizeForUploadedFiles=Mărimea maximă pentru fişierele încărcate (0 pentru a interzice orice încărcare) UseCaptchaCode=Utilizare cod grafic (CAPTCHA) pe pagina de conectare și pe unele pagini publice AntiVirusCommand=Calea completă la comanda antivirus -AntiVirusCommandExample=Exemplu pentru ClamAv Daemon (necesită clamav-daemon): /usr/bin/clamdscan
Exemplu pentru ClamWin (foarte foarte lent): c:\\Progra~1\\ClamWin\\bin\\clamscan.exe +AntiVirusCommandExample=Exemplu pentru ClamAv Daemon (necesită clamav-daemon): /usr/bin/clamdscan
Exemplu pentru ClamWin (foarte foarte lent): c:\\Progra~1\\ClamWin\\bin\\clamscan.exe AntiVirusParam= Mai multe despre parametrii liniei de comandă AntiVirusParamExample=Exemplu pentru ClamAv Daemon: --fdpass
Exemplu pentru ClamWin: --database="C:\\Program Files (x86)\\ClamWin\\lib" ComptaSetup=Setări modul Contabilitate @@ -161,9 +161,9 @@ SystemToolsAreaDesc=Această zonă oferă funcții de administrare. Utilizați m Purge=Curăţenie PurgeAreaDesc=Această pagină vă permite să ștergeți toate fișierele generate sau stocate de Dolibarr (fișiere temporare sau toate fișierele din directorul %s). Utilizarea acestei funcții nu este în mod normal necesară. Este oferită ca soluție pentru utilizatorii care găzduiesc Dolibarr la un furnizor care nu oferă permisiuni de ștergere a fișierelor generate de serverul web. PurgeDeleteLogFile=Ștergeți fișierele din jurnal, inclusiv %s definite pentru modulul Syslog (fără risc de pierdere a datelor) -PurgeDeleteTemporaryFiles=Ștergeți toate fișierele jurnal și temporare (fără risc de pierdere a datelor). Parametrul poate fi 'tempfilesold', 'logfiles' sau ambele 'tempfilesold + logfiles'. Notă: Ștergerea fișierelor temporare se face numai dacă directorul temporar a fost creat acum mai mult de 24 de ore. +PurgeDeleteTemporaryFiles=Ștergeți toate fișierele jurnal și temporare (fără risc de pierdere a datelor). Parametrul poate fi 'tempfilesold', 'logfiles' sau ambele 'tempfilesold + logfiles'. Notă: Ștergerea fișierelor temporare se face numai dacă directorul temporar a fost creat acum mai mult de 24 de ore. PurgeDeleteTemporaryFilesShort=Ștergere fișiere jurnal și temporare (fără risc de pierdere a datelor) -PurgeDeleteAllFilesInDocumentsDir=Ștergeți toate fișierele din directorul: %s.
Aceasta va șterge toate documentele generate legate de elemente (terțe părți, facturi etc.), fișierele încărcate în modulul ECM, backup-urile pentru baze de date și fișierele temporare. +PurgeDeleteAllFilesInDocumentsDir=Ștergeți toate fișierele din directorul: %s.
Aceasta va șterge toate documentele generate legate de elemente (terțe părți, facturi etc.), fișierele încărcate în modulul ECM, backup-urile pentru baze de date și fișierele temporare. PurgeRunNow=Curăţă acum PurgeNothingToDelete=Niciun director sau fișier de șters. PurgeNDirectoriesDeleted=%s fişiere sau directoare şterse. @@ -175,7 +175,7 @@ Backup=Backup Restore=Restaurare RunCommandSummary=Backup-ul poate fi lansat cu următoarea comandă BackupResult=Rezultat backup -BackupFileSuccessfullyCreated=Fişier backup generat +BackupFileSuccessfullyCreated=Fişier backup generat YouCanDownloadBackupFile=Fișierul generat poate fi acum descărcat NoBackupFileAvailable=Niciun fişier backup disponibil. ExportMethod=Metodă export @@ -192,7 +192,7 @@ CommandsToDisableForeignKeysForImportWarning=Necesar dacă doriți să puteţi r ExportCompatibility=Compatibilitatea fişierului de export generat ExportUseMySQLQuickParameter=Foloseşte parametrul --quick ExportUseMySQLQuickParameterHelp=Parametrul '--quick' ajută la limitarea consumului de memorie RAM pentru tabelele mari. -MySqlExportParameters=Parametri export MySQL +MySqlExportParameters=Parametri export MySQL PostgreSqlExportParameters= Parametrii export PostgreSQL UseTransactionnalMode=Utilizare mod tranzacţional FullPathToMysqldumpCommand=Calea completă către comanda mysqldump @@ -319,7 +319,7 @@ MAIN_MAIL_DEFAULT_FROMTYPE=Email expeditor prestabilit preselectat în formulare UserEmail=Email utilizator CompanyEmail=Email companie FeatureNotAvailableOnLinux=Caracteristică indisponibilă pe sistemele tip Unix. Testaţi-vă programul sendmail la nivel local. -FixOnTransifex=Remediază traducerea pe platforma de traducere online a proiectului +FixOnTransifex=Remediază traducerea pe platforma de traducere online a proiectului SubmitTranslation=Dacă traducerea pentru această limbă nu este completă sau dacă găsiți erori, puteți corecta aceasta prin editarea fișierelor din directorul langs / %s și trimiteți modificarea la www.transifex.com/dolibarr-association/dolibarr/ SubmitTranslationENUS=Dacă traducerea pentru această limbă nu este completă sau găsiți erori, puteți corecta aceasta modificând fișierele din directorul langs/%s şi trimiţând fişierele modificate la dolibarr.org/forum sau, dacă eşti developer cu un PR la github.com/Dolibarr/dolibarr ModuleSetup=Configurare modul @@ -402,7 +402,7 @@ TestSubmitForm=Test introducere date în formular ThisForceAlsoTheme=Utilizând acest meniu, managerul va folosi și propria temă indiferent de alegerea utilizatorului. De asemenea, acest manager de meniu specializat pentru smartphone-uri nu funcționează pe toate smartphone-urile. Utilizează un alt manager de meniuri dacă întâmpini probleme pe smartphone-ul tău. ThemeDir=Director teme ConnectionTimeout=Pauză de conectare -ResponseTimeout=Timeout răspuns +ResponseTimeout=Timeout răspuns SmsTestMessage=SMS de test de la __PHONEFROM__ to __PHONETO__ ModuleMustBeEnabledFirst=Modulul %s trebuie să fie activat daca aveti nevoie de aceasta funcţionalitate. SecurityToken=Cheia pentru URL-uri securizate @@ -423,7 +423,7 @@ PlaceCustomerAddressToIsoLocation=Utilizați poziția standard franceză (La Pos Library=Bibliotecă UrlGenerationParameters=Parametrii pentru URL-uri securizate SecurityTokenIsUnique=Utilizaţi un parametru unic securekey pentru fiecare URL -EnterRefToBuildUrl=Introdu referinţa pentru obiectul %s +EnterRefToBuildUrl=Introdu referinţa pentru obiectul %s GetSecuredUrl=Obţineţi URL-ul calculat ButtonHideUnauthorized=Ascunde butoanele de acțiuni neautorizate și pentru utilizatorii interni (gri în caz contrar) OldVATRates=Vechea cotă de TVA @@ -466,7 +466,7 @@ ExtrafieldParamHelpcheckbox=Lista de valori trebuie să fie linii cu formatul ch ExtrafieldParamHelpradio=Lista de valori trebuie să fie linii cu formatul cheie,valoare (unde cheia nu poate fi '0')

de exemplu:
1,valoare1
2,valoare2
3,valoare3
... ExtrafieldParamHelpsellist=Lista de valori provine dintr-o tabelă
Sintaxă: table_name:label_field:id_field::filtersql
Exemplu: c_typent:libelle:id::filtersql

- id_field este în mod necesar o cheie int primară
- filtersql este o condiție SQL. Poate fi un test simplu (de exemplu, activ=1) pentru a afișa numai valoarea activă.
De asemenea, poți utiliza $ID$ în filtru, care este id-ul curent al obiectului curent.
Pentru a utiliza un SELECT în filtru, utilizează cuvântul cheie $SEL$ pentru a ocoli protecția anti-injecție.
dacă vrei să filtrezi pe extracâmpuri folosește sintaxa extra.fieldcode=... (unde codul campului este codul extracâmpului)

Pentru ca lista să depindă de o altă listă de atribut complementar:
list:c_typent:libelle:id:options_parent_list_code|parent_column :filter

Pentru ca lista să depindă de altă listă:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=Lista valorilor provine dintr-un tabel
Sintaxă: table_name:label_field:id_field::filtersql
Exemplu: c_typent:libelle:id::filtersql

filtru care poate fi un test simplu (de exemplu, activ = 1) pentru a afișa doar valoarea activă
Puteți utiliza, de asemenea, $ID$ în filtru care este ID-ul curent al obiectului curent
Pentru a efectua o selecție în filtru folosiți $SEL$
dacă doriți să filtrați pe câmpuri suplimentare utilizați sintaxa extra.fieldcode=... (unde codul de câmp este codul câmpului extra)

Pentru a avea o listă dependentă de un de atribut complementar:
c_typent:libelle:id:options_parent_list_code| parent_column:filter

Pentru a avea o listă în funcție de altă listă:
c_typent:libelle:id: parent_list_code|parent_column: filter -ExtrafieldParamHelplink=Parametrii trebuie să fie ObjectName:Classpath
Sintaxă: ObjectName: Classpath +ExtrafieldParamHelplink=Parametrii trebuie să fie ObjectName:Classpath
Sintaxă: ObjectName: Classpath ExtrafieldParamHelpSeparator=Păstrați liber pentru un separator simplu
Setați acest lucru la 1 pentru un separator care se prăbușește (deschis în mod implicit pentru o nouă sesiune, apoi starea este păstrată pentru fiecare sesiune de utilizator)
Setați acest lucru la 2 pentru un separator care se prăbușește (se prăbușește implicit pentru o nouă sesiune, apoi starea este păstrată pentru fiecare sesiune a utilizatorului) LibraryToBuildPDF=Bibliotecă utilizată pentru generarea PDF-urilor LocalTaxDesc=Unele țări pot aplica două sau trei taxe pe fiecare linie de facturare. Dacă este cazul, alegeți tipul pentru a doua și a treia taxă și rata acestora. Tipuri posibile sunt:
1: taxa locală se aplică produselor și serviciilor fără TVA (localtax se calculează pe valoare fără taxă)
2: taxa locală se aplică produselor și serviciilor, inclusiv TVA (localtax se calculează în funcție de valoare+ taxa principală )
3: taxa locală se aplică produselor fără TVA (localtax se calculează pe valoare fără taxă)
4: taxa locală se aplică produselor şi includ tva (localtax se calculeaza pe valoare + TVA principală)
5: taxa locală se aplică serviciilor fără TVA (localtax se calculează pe valoarea fără TVA)
6: taxa locală se aplică serviciilor, inclusiv TVA (localtax se calculează pe sumă + taxă) @@ -485,7 +485,7 @@ BarcodeInitForThirdparties=Coduri de bare în masă pentru terți BarcodeInitForProductsOrServices=Iniţializare sau resetare coduri de bare în masă pentru produse şi servicii CurrentlyNWithoutBarCode=În prezent, aveţi %s înregistrări pe %s %s fără cod de bare definit. InitEmptyBarCode=Valoarea inițială pentru codurile de bare %s goale -EraseAllCurrentBarCode=Ștergeți toate valorile curente de coduri de bare +EraseAllCurrentBarCode=Ștergeți toate valorile curente de coduri de bare ConfirmEraseAllCurrentBarCode=Sigur doriți să ștergeți toate valorile actuale ale codurilor de bare? AllBarcodeReset=Toate valorile codurilor de bare au fost şterse NoBarcodeNumberingTemplateDefined=Nu este activat niciun șablon de cod de bare de numere în configurare modulului Coduri de bare @@ -506,7 +506,7 @@ Use3StepsApproval=În mod implicit, comenzile de achiziţie trebuie să fie crea UseDoubleApproval=Utilizați o aprobare în 3 pași atunci când suma (fără taxă) este mai mare decât... WarningPHPMail=ATENŢIE: Configurarea pentru trimitea de email-uri din aplicație utilizează configurarea generică implicită. De multe ori este mai bine să configurați email-urile de ieșire pentru a utiliza serverul de email al furnizorului dvs. de servicii email în loc de configurarea implicită din mai multe motive: WarningPHPMailA=- Utilizarea serverului furnizorului de servicii de e-mail crește fiabilitatea e-mailului dvs., astfel încât crește livrabilitatea fără a fi semnalată ca SPAM -WarningPHPMailB=- Unii furnizori de servicii de email (cum ar fi Yahoo) nu vă permit să trimiteți un email de pe alt server decât propriul server. Configurarea dvs. actuală utilizează serverul aplicației pentru a trimite email-uri și nu serverul furnizorului dvs. de email, deci unii destinatari (cei compatibili cu protocolul restrictiv DMARC), vă vor întreba furnizorul de email dacă vă pot accepta emailul și unii furnizori de email (cum ar fi Yahoo) poate răspunde "nu" deoarece serverul nu este al lor, așa că puține emailuri trimise pot să nu fie acceptate pentru livrare (aveți grijă și la cota de trimitere a furnizorului dvs. de email). +WarningPHPMailB=- Unii furnizori de servicii de email (cum ar fi Yahoo) nu vă permit să trimiteți un email de pe alt server decât propriul server. Configurarea dvs. actuală utilizează serverul aplicației pentru a trimite email-uri și nu serverul furnizorului dvs. de email, deci unii destinatari (cei compatibili cu protocolul restrictiv DMARC), vă vor întreba furnizorul de email dacă vă pot accepta emailul și unii furnizori de email (cum ar fi Yahoo) poate răspunde "nu" deoarece serverul nu este al lor, așa că puține emailuri trimise pot să nu fie acceptate pentru livrare (aveți grijă și la cota de trimitere a furnizorului dvs. de email). WarningPHPMailC=- Utilizând serverul SMTP al furnizorului de servicii email pentru a trimite email-uri este, de asemenea, interesantă, astfel încât toate email-urile trimise din aplicație vor fi, de asemenea, salvate în directorul "Trimise" al cutiei poștale. WarningPHPMailD=Prin urmare, este recomandat să schimbi metoda de trimitere a email-urilor la valoarea "SMTP". WarningPHPMailDbis=Dacă vrei cu adevărat să păstrezi metoda implicită "PHP" pentru a trimite email-uri, ignoră acest avertisment sau elimină-l făcând %sclic aici%s. @@ -586,7 +586,7 @@ Module55Desc=Management coduri de bare şi coduri QR Module56Name=Plăţi transfer credit Module56Desc=Gestionarea plăților furnizorilor sau a salariilor prin ordine de transfer credit. Include generarea de fișiere SEPA pentru țările europene. Module57Name=Plăţi prin direct debit -Module57Desc=Gestionarea ordinelor de direct debit. Acesta include generarea de fișiere SEPA pentru țările europene. +Module57Desc=Gestionarea ordinelor de direct debit. Acesta include generarea de fișiere SEPA pentru țările europene. Module58Name=ClickToDial Module58Desc=Integrare cu un sistem ClickToDial (Asterisk, ...) Module60Name=Stickere @@ -608,9 +608,9 @@ Module200Desc=Sincronizarea directorului LDAP Module210Name=PostNuke Module210Desc=Integrare PostNuke Module240Name=Export date -Module240Desc=Instrument pentru export date din Dolibarr (asistat) +Module240Desc=Instrument pentru export date din Dolibarr (asistat) Module250Name=Import date -Module250Desc=Instrument pentru import date în Dolibarr (asistat) +Module250Desc=Instrument pentru import date în Dolibarr (asistat) Module310Name=Membri Module310Desc=Managementul membrilor unei fundaţii Module320Name=Feed RSS @@ -644,7 +644,7 @@ Module1120Name=Oferte comerciale de la furnizori Module1120Desc=Solicitați furnizorilor oferte şi cereri de prețuri Module1200Name=Mantis Module1200Desc=Integrare Mantis -Module1520Name=Generare document +Module1520Name=Generare document Module1520Desc=Generarea de newslettere Module1780Name=Tag-uri/Categorii Module1780Desc=Creați etichete/categorii (produse, clienti, furnizori, contacte sau membri) @@ -715,7 +715,7 @@ Module62000Name=Incoterm Module62000Desc=Adăugați caracteristici pentru a gestiona Incoterms Module63000Name=Resurse Module63000Desc=Gestionarea resurselor (imprimante, mașini, camere, ...) pentru a le aloca evenimentelor -Module66000Name=Management token OAuth2 +Module66000Name=Management token OAuth2 Module66000Desc=Furnizează un instrument pentru a genera și gestiona token-uri OAuth2. Token-ul poate fi apoi folosit de alte module. Module94160Name=Recepţii ModuleBookCalName=Sistem calendar de rezervări @@ -800,7 +800,7 @@ Permission147=Citeşte statisticile Permission151=Citeşte ordinele de plată prin debitare directă Permission152=Creare/modificare ordin de plată prin debit direct Permission153=Trimite/transmite ordine de plată prin debit direct -Permission154=Înregistrează creditarea/respingerea ordinelor de plată prin debitare directă +Permission154=Înregistrează creditarea/respingerea ordinelor de plată prin debitare directă Permission161=Citește contracte/abonamente Permission162=Creare/modificare contracte/abonamente Permission163=Activează un serviciu/abonament al unui contract @@ -905,7 +905,7 @@ Permission536=Vede/administrează serviciile ascunse Permission538=Export servicii Permission561=Citire ordine de plată prin transfer de credit Permission562=Creare/modificare comandă de plată prin transfer de credit -Permission563=Trimitere/Transmitere comanda de plată prin transfer de credit +Permission563=Trimitere/Transmitere comanda de plată prin transfer de credit Permission564=Înregistrare debite/respingeri de transfer de credit Permission601=Citeşte stickere Permission602=Creare/modificare stickere @@ -978,7 +978,7 @@ Permission1521=Citeşte documente Permission1522=Ştergere documente Permission2401=Citeşte acțiuni (evenimente sau task-uri) legate de contul său de utilizator (dacă este proprietar al unui eveniment sau doar i s-a atribuit) Permission2402=Creare/modificare acțiuni (evenimente sau task-uri) legate de contul său de utilizator (dacă este proprietar al evenimentului) -Permission2403=Șterge acțiuni (evenimente sau task-uri) legate de contul său de utilizator (dacă este proprietar al evenimentului) +Permission2403=Șterge acțiuni (evenimente sau task-uri) legate de contul său de utilizator (dacă este proprietar al evenimentului) Permission2411=Citeşte acţiuni (evenimente sau task-uri) ale altor persoane Permission2412=Creare/modificarea acţiuni (evenimente sau task-uri) ale altor persoane Permission2413=Şterge acţiuni (evenimente sau task-uri) ale altor persoane @@ -986,7 +986,7 @@ Permission2414=Export acțiuni activităţi/task-uri ale altora Permission2501=Citeşte/descarcă documente Permission2502=Descărcare documente Permission2503=Trimite sau şterge documente -Permission2515=Configurare directoare documente +Permission2515=Configurare directoare documente Permission2610=Cheie API de generare/modificare utilizatori Permission2801=Foloseşte clientul FTP în modul de citire (numai navigare și descărcare) Permission2802=Foloseşte clientul FTP în modul de scriere (ştergere şi încărcare fişiere) @@ -1040,7 +1040,7 @@ Permission50420=Rapoarte și export de rapoarte (cifră de afaceri, balanţe, ju Permission50430=Defineşte perioadele fiscale. Validează tranzacţiile şi perioadele fiscale. Permission50440=Administrează schema de conturi, configurează contabilitatea Permission51001=Citeşte active -Permission51002=Creare/Modificare active +Permission51002=Creare/Modificare active Permission51003=Ştergere active Permission51005=Setare tipuri de active Permission54001=Tipărire @@ -1197,6 +1197,7 @@ Skin=Temă vizuală DefaultSkin=Temă vizuală implicită MaxSizeList=Lungime maximă pentru liste DefaultMaxSizeList=Lungime maximă implicită pentru liste +DisplayGrandTotalInList=Display grand total (for all pages) in lists footer DefaultMaxSizeShortList=Lungimea maximă implicită pentru listele scurte (de ex. în fişa client) MessageOfDay=Mesajul zilei MessageLogin=Mesaj pagină de autentificare @@ -1246,8 +1247,8 @@ Delays_MAIN_DELAY_EXPENSEREPORTS=Raport de cheltuieli de aprobat Delays_MAIN_DELAY_HOLIDAYS=Cereri de concediu de aprobat SetupDescription1=Înainte de a începe să utilizați sistemul, unii parametri inițiali trebuie să fie definiți şi anumite module activate/configurate. SetupDescription2=Următoarele două secțiuni sunt obligatorii (primele două intrări din meniul de configurare) -SetupDescription3=%s->%s

Parametri de bază folosiți pentru a personaliza comportamentul implicit al aplicației (de exemplu, pentru funcțiile legate de țară). -SetupDescription4=%s->%s

Acest software este o suită de mai multe module/aplicații. Modulele necesare trebuie să fie activate și configurate. Intrările din meniu vor apărea odată cu activarea acestor module. +SetupDescription3=%s->%s

Parametri de bază folosiți pentru a personaliza comportamentul implicit al aplicației (de exemplu, pentru funcțiile legate de țară). +SetupDescription4=%s->%s

Acest software este o suită de mai multe module/aplicații. Modulele necesare trebuie să fie activate și configurate. Intrările din meniu vor apărea odată cu activarea acestor module. SetupDescription5=Meniul Alte setări gestionează parametrii opționali. SetupDescriptionLink=%s - %s SetupDescription3b=Parametrii de bază utilizați pentru a personaliza comportamentul implicit al aplicației (de exemplu, pentru funcționalităţile legate de țară). @@ -1277,7 +1278,7 @@ MoreNetworksAvailableWithModule=Mai multe rețele sociale pot fi disponibile act AccountantDesc= Dacă aveți un contabil/firmă de contabilitate externă, puteți modifica aici informațiile aferente. AccountantFileNumber=Cod contabil DisplayDesc=Parametrii care afectează aspectul și prezentarea aplicației pot fi modificați aici. -AvailableModules=Aplicații/module disponibile +AvailableModules=Aplicații/module disponibile ToActivateModule=Pentru a activa module, du-te la zona de configurare (Acasă->Setări-Module). SessionTimeOut=Timeout pentru sesiune SessionExplanation=Acest număr garantează că sesiunea nu va expira niciodată înainte de această întârziere, în cazul în care curățarea sesiunii este efectuată de Cleaner intern pentru sesiuni PHP (și nimic altceva). Interfața de curățare internă a sesiunii PHP nu garantează că sesiunea va expira după această întârziere. Va expira, după această întârziere și atunci când curățătorul sesiunii va fi rulat, astfel încât fiecare %s / %s , acces dar numai în timpul accesului realizat de alte sesiuni (dacă valoarea este 0, înseamnă că ștergerea sesiunii se face numai printr-un proces extern).
Notă: pe unele servere cu mecanism extern de curățare a sesiunilor (cron sub debian, ubuntu ...) sesiunile pot fi distruse după o perioadă definită de o configurație externă, indiferent de valoarea introdusă aici. @@ -1369,7 +1370,7 @@ PathToDocuments=Cale documente PathDirectory=Director SendmailOptionMayHurtBuggedMTA=Funcția de trimitere a e-mailurilor utilizând metoda "PHP mail direct" va genera un mesaj email care ar putea să nu fie analizat corect de către unele servere de email . Rezultatul este că unele email-uri nu pot fi citite de persoanele găzduite de acele platforme cu probleme. Acesta este cazul pentru unii furnizori de Internet (Ex: Orange în Franța). Aceasta nu este o problemă de sistem sau de PHP, ci cu server-ul de mail. Cu toate acestea, puteți adăuga o opțiune MAIN_FIX_FOR_BUGGED_MTA la 1 din Setări - Alte setări ca Dolibarr să poată evita acest lucru. Cu toate acestea, este posibil să întâmpinați probleme cu alte servere care utilizează strict standardul SMTP. Cealaltă soluție (recomandată) este utilizarea metodei "SMTP socket library" care nu are aceste dezavantaje. TranslationSetup=Configurare traducere -TranslationKeySearch=Căutați o cheie sau un șir de traducere +TranslationKeySearch=Căutați o cheie sau un șir de traducere TranslationOverwriteKey=Suprascrieți un șir de traducere TranslationDesc=Cum se setează limba de afișare:
* Implicit/Pentru tot sistemul: meniul Acasă -> Setări -> Afișare
* Per utilizator: Clic pe numele utilizatorului în partea de sus a ecranului și modificați fila Setări afișare utilizator din fişa de utilizator. TranslationOverwriteDesc=Poți, de asemenea, să înlocuieşti șiruri de caractere care completează următorul tabel . Alege limba ta din meniul derulant "%s", inserează șirul cheie de traducere în "%s" şi noua ta traducere în "%s" @@ -1474,9 +1475,9 @@ InvoiceOptionCategoryOfOperationsHelp=In functie de situatie, mentiunea va apare InvoiceOptionCategoryOfOperationsYes1=Da, sub blocul de adresă InvoiceOptionCategoryOfOperationsYes2=Da, în colțul din stânga jos ##### Proposals ##### -PropalSetup=Configurare modul Oferte Comerciale -ProposalsNumberingModules=Modele numerotare Oferte comerciale -ProposalsPDFModules=Şabloane documente Oferte comerciale +PropalSetup=Configurare modul Oferte Comerciale +ProposalsNumberingModules=Modele numerotare Oferte comerciale +ProposalsPDFModules=Şabloane documente Oferte comerciale SuggestedPaymentModesIfNotDefinedInProposal=Modalitatea de plată sugerată pe ofertă în mod implicit, dacă nu este definită pe oferta comercială FreeLegalTextOnProposal=Text liber pe ofertele comerciale WatermarkOnDraftProposal=Filigranul pe ofertele comerciale schiţă (niciunul daca e gol) @@ -1507,7 +1508,7 @@ FicheinterNumberingModules=Modele de numerotare pentru intervenţie TemplatePDFInterventions=Şabloane documente Fişă intervenţie WatermarkOnDraftInterventionCards=Filigranul pe documentele fişelor de intervenţie (niciunul dacă e gol) ##### Contracts ##### -ContractsSetup=Configurare modul Contracte/Abonamente +ContractsSetup=Configurare modul Contracte/Abonamente ContractsNumberingModules=Modele numerotare Contracte TemplatePDFContracts=Şaboane documente contracte FreeLegalTextOnContracts=Text liber pe contracte @@ -1620,7 +1621,7 @@ LDAPFieldFirstName=Prenume LDAPFieldFirstNameExample=Exemplu: givenName LDAPFieldMail=Adresă email LDAPFieldMailExample=Exemplu: mail -LDAPFieldPhone=Nr. telefon profesional +LDAPFieldPhone=Nr. telefon profesional LDAPFieldPhoneExample=Exemplu: telephonenumber LDAPFieldHomePhone=Numărul de telefon personal LDAPFieldHomePhoneExample=Exemplu: homephone @@ -1820,7 +1821,7 @@ FailedToInitializeMenu=Eroare la inițializarea meniului ##### Tax ##### TaxSetup=Configurare modul Taxe sociale sau fiscale şi dividente OptionVatMode=Plătitor de TVA -OptionVATDefault=Bază standard +OptionVATDefault=Bază standard OptionVATDebitOption=Bază acumulare debit OptionVatDefaultDesc=TVA se datorează:
- pentru livrare de mărfuri (bazată pe facturare)
- Pe plăţi pentru servicii OptionVatDebitOptionDesc=TVA se datorează:
- pentru livrare de mărfuri (bazată pe facturare)
- pe facturi(debit) pentru servicii @@ -1915,7 +1916,7 @@ SuppliersCommandModel=Şablon complet pentru comanda de achiziţie SuppliersCommandModelMuscadet=Şablon complet pentru Comandă de achiziţie (vechea implementare a şablonului cornas) SuppliersInvoiceModel=Şablon complet de factură furnizor SuppliersInvoiceNumberingModel=Modele de numerotare a facturilor furnizor -IfSetToYesDontForgetPermission=Dacă este setată o valoare nulă, nu uitați să furnizați permisiuni grupurilor sau utilizatorilor autorizați pentru a doua aprobare +IfSetToYesDontForgetPermission=Dacă este setată o valoare nulă, nu uitați să furnizați permisiuni grupurilor sau utilizatorilor autorizați pentru a doua aprobare ##### GeoIPMaxmind ##### GeoIPMaxmindSetup=Configurare modul GeoIP Maxmind PathToGeoIPMaxmindCountryDataFile=Calea către fișierul care conține conversia IP Maxmind în țară @@ -1960,10 +1961,10 @@ NoModueToManageStockIncrease=Nu a fost activat niciun modul capabil să gestione YouMayFindNotificationsFeaturesIntoModuleNotification=Puteți găsi opțiuni pentru notificările prin email activând şi configurând modulul "Notificare". TemplatesForNotifications=Şabloane pentru notificări ListOfNotificationsPerUser=Lista notificărilor automate pentru utilizator* -ListOfNotificationsPerUserOrContact=Lista posibilelor notificări automate (în cadrul evenimentului comercial) disponibile pentru utilizator* sau pentru contact** +ListOfNotificationsPerUserOrContact=Lista posibilelor notificări automate (în cadrul evenimentului comercial) disponibile pentru utilizator* sau pentru contact** ListOfFixedNotifications=Listă notificări automate GoOntoUserCardToAddMore=Accesați fişa "Notificări" a unui utilizator pentru a adăuga sau elimina notificări -GoOntoContactCardToAddMore=Accesați fila "Notificări" a terțului pentru a adăuga sau elimina notificări pentru contacte/adrese +GoOntoContactCardToAddMore=Accesați fila "Notificări" a terțului pentru a adăuga sau elimina notificări pentru contacte/adrese Threshold=Prag BackupDumpWizard=Wizard pentru generarea fişierului dump al bazei de date BackupZipWizard=Wizard pentru generarea arhivei cu directul de documente @@ -2017,7 +2018,7 @@ ExpectedSize=Dimensiune aşteptată CurrentSize=Dimensiune curentă ForcedConstants=Valori constante necesare MailToSendProposal=Oferte clienţi -MailToSendOrder=Comenzi de vânzări +MailToSendOrder=Comenzi de vânzări MailToSendInvoice=Facturi clienţi MailToSendShipment=Livrări MailToSendIntervention=Intervenţii @@ -2077,9 +2078,9 @@ WarningNoteModulePOSForFrenchLaw=Acest modul %s respectă legile franceze (Loi F WarningInstallationMayBecomeNotCompliantWithLaw=Încercați să instalați modulul %s care este un modul extern. Activarea unui modul extern presupune că aveți încredere în editorul modulului şi că sunteți sigur că acest modul nu afectează negativ comportamentul aplicației şi este în concordanţă cu legile țării tale (%s). Dacă modulul introduce o o caracteristică ilegală, devii responsabil pentru utilizarea necorespunzătoare a software-ului. MAIN_PDF_MARGIN_LEFT=Marginea stângă a PDF-ului -MAIN_PDF_MARGIN_RIGHT=Marginea dreaptă a PDF-ului -MAIN_PDF_MARGIN_TOP=Marginea superioară a PDF-ului -MAIN_PDF_MARGIN_BOTTOM=Marginea inferioară a PDF-ului +MAIN_PDF_MARGIN_RIGHT=Marginea dreaptă a PDF-ului +MAIN_PDF_MARGIN_TOP=Marginea superioară a PDF-ului +MAIN_PDF_MARGIN_BOTTOM=Marginea inferioară a PDF-ului MAIN_DOCUMENTS_LOGO_HEIGHT=Înălţime logo în PDF DOC_SHOW_FIRST_SALES_REP=Afișează primul reprezentant de vânzări MAIN_GENERATE_PROPOSALS_WITH_PICTURE=Adaugă coloană pentru imagine pe liniile de ofertă @@ -2115,13 +2116,13 @@ ChartLoaded=Planul de conturi a fost încărcat SocialNetworkSetup=Configurarea modulului Rețele sociale EnableFeatureFor=Activați caracteristici pentru %s VATIsUsedIsOff=Nota: Opțiunea de a utiliza impozitul pe vânzări sau taxa TVA a fost setată la Oprit în meniul %s - %s, astfel încât impozitul pe vânzări sau taxa TVA utilizate vor fi întotdeauna 0 pentru vânzări. -SwapSenderAndRecipientOnPDF=Interschimbă poziţia adreselor expeditorului şi destinatarului în documentele PDF generate +SwapSenderAndRecipientOnPDF=Interschimbă poziţia adreselor expeditorului şi destinatarului în documentele PDF generate FeatureSupportedOnTextFieldsOnly=Atenție, caracteristică acceptată numai pe câmpurile de text și pe listele combinate. De asemenea, trebuie setat un parametru URL action=create sau action=edit SAU numele paginii trebuie să se termine cu 'new.php' pentru a declanșa această caracteristică. EmailCollector=Colector de emailuri EmailCollectors=Colectoare email EmailCollectorDescription=Adăugați un job programat și o pagină de configurare pentru a scana în mod regulat căsuţele de email (utilizând protocolul IMAP) și pentru a înregistra emailurile primite în aplicația ta, la locul potrivit și/sau pentru a crea automat înregistrări (cum ar fi clienții). NewEmailCollector=Colector de emailuri nou -EMailHost=Server gazdă de email IMAP +EMailHost=Server gazdă de email IMAP EMailHostPort=Port email server IMAP loginPassword=Login/Parolă oauthToken=Token OAuth2 @@ -2133,13 +2134,13 @@ ImapEncryptionHelp = Examplu: none, ssl, tls, notls NoRSH = Utilizare configurare NoRSH NoRSHHelp = Nu se utilizează protocoale RSH sau SSH pentru a stabili o sesiune de pre-identificare IMAP MailboxSourceDirectory=Directorul sursă al cutiei poștale -MailboxTargetDirectory=Directorul ţintă al cutiei poștale +MailboxTargetDirectory=Directorul ţintă al cutiei poștale EmailcollectorOperations=Operațiuni de făcut de către colector EmailcollectorOperationsDesc=Operațiunile sunt executate în ordinea de sus în jos MaxEmailCollectPerCollect=Număr maxim de email-uri colectae per operaţiune TestCollectNow=Test colectare CollectNow=Colectați acum -ConfirmCloneEmailCollector=Sigur vrei să clonezi colectorul de email-uri %s? +ConfirmCloneEmailCollector=Sigur vrei să clonezi colectorul de email-uri %s? DateLastCollectResult=Data ultimei încercări de colectare DateLastcollectResultOk=Data ultimei colectări cu succes LastResult=Ultimul rezultat @@ -2179,7 +2180,7 @@ ECMAutoTree=Afișați arborele ECM automat OperationParamDesc=Definește regulile de utilizat pentru extragerea unor date sau setează valorile de utilizat pentru operare.

Exemplu pentru extragerea unui nume de companie din subiectul email-ului într-o variabilă temporară:
tmp_var=EXTRACT:SUBJECT:Mesaj de la companie ([^\n]*)

Exemple pentru a seta proprietățile unui obiect de creat:
objproperty1=SET:o valoare codată
objproperty2=SET:__tmp_var__
objproperty3=SETIFEMPTY:o valoare (valoarea este setată numai dacă proprietatea nu este deja definită)
objproperty4=EXTRACT:HEADER:X-Myheaderkey:\\s*([^\\s]*)
options_myextrafield1=EXTRACT:SUBJECT:([^\n]*)
object.objproperty5=EXTRACT:BODY:Numele companiei mele este \\s([^\\s]*)

Utilizează o linie nouă pentru a extrage sau pentru a seta proprietăți. OpeningHours=Program de lucru OpeningHoursDesc=Introduceți aici programul de lucru normal ale companiei dvs. -ResourceSetup=Configurarea modulului Resurse +ResourceSetup=Configurarea modulului Resurse UseSearchToSelectResource=Utilizați un formular de căutare pentru a alege o resursă (mai degrabă decât o listă derulantă). DisabledResourceLinkUser=Dezactivați funcţia care conectează o resursă la utilizatori DisabledResourceLinkContact=Dezactivați funcţia care conectează o resursă la contacte @@ -2190,7 +2191,7 @@ DisableProspectCustomerType=Dezactivați tipul terțului „Prospect + Client” MAIN_OPTIMIZEFORTEXTBROWSER=Simplificați interfața pentru o persoană nevăzătoare MAIN_OPTIMIZEFORTEXTBROWSERDesc=Activați această opțiune dacă sunteți o persoană nevăzătoare sau dacă utilizați aplicația dintr-un browser text precum Lynx sau Links. MAIN_OPTIMIZEFORCOLORBLIND=Schimbă culorile interfeţei pentru persoanele cu disabilităţi vizuale -MAIN_OPTIMIZEFORCOLORBLINDDesc=Activează această opţiune dacă eşti o persoană cu probleme vizuale, în anumite cazuri interfaţa îşi va schimba paleta de culori pentru a mări contrastul. +MAIN_OPTIMIZEFORCOLORBLINDDesc=Activează această opţiune dacă eşti o persoană cu probleme vizuale, în anumite cazuri interfaţa îşi va schimba paleta de culori pentru a mări contrastul. Protanopia=Protanopie Deuteranopes=Deuteranopie Tritanopes=Tritanopie @@ -2282,7 +2283,7 @@ CheckForModuleUpdateHelp=Această acțiune se va conecta la editori de module ex ModuleUpdateAvailable=O actualizare este disponibilă NoExternalModuleWithUpdate=Nu au fost găsite actualizări pentru modulele externe SwaggerDescriptionFile=Fişier descriptor Swagger API (pentru utilizare redoc de exemplu) -YouEnableDeprecatedWSAPIsUseRESTAPIsInstead=Ai activat WS API care este învechit. Ar trebui să foloseşti REST API. +YouEnableDeprecatedWSAPIsUseRESTAPIsInstead=Ai activat WS API care este învechit. Ar trebui să foloseşti REST API. RandomlySelectedIfSeveral=Selectat aleatoriu dacă sunt disponibile mai multe imagini SalesRepresentativeInfo=Pentru Oferte, Comenzi, Facturi. DatabasePasswordObfuscated=Parola bazei de date este eclipsată în fişierul conf @@ -2352,7 +2353,7 @@ INVOICE_SHOW_SHIPPING_ADDRESS=Afișează adresa de livrare INVOICE_SHOW_SHIPPING_ADDRESSMore=Mențiune obligatorie în unele țări (Franța, ...) UrlSocialNetworksDesc=Link URL rețea socială. Utilizează {socialid} pentru partea variabilă care conține ID-ul rețelei sociale. IfThisCategoryIsChildOfAnother=Dacă această categorie este un copil al alteia -DarkThemeMode=Mod întunecat temă +DarkThemeMode=Mod întunecat temă AlwaysDisabled=Întotdeauna dezactivat AccordingToBrowser=Conform browser-ului AlwaysEnabled=Întotdeauna activat @@ -2433,3 +2434,12 @@ UrlPublicInterfaceHelpAdmin=Este posibil să definești un alias pentru serverul ExportUseForce=Folosește parametrul -f ExportUseForceHelp=Forțare continuare export chiar și atunci când este găsită o eroare (backup-ul poate să nu fie de încredere) CustomPrompt=Solicitări personalizate +AiDescription=Caracteristici AI (Inteligență Artificială) +AiDescriptionLong=Oferă funcții AI (Inteligență Artificială) în diferite părți ale aplicației. Ai nevoie de un API AI extern. +AI_KEY_API_CHATGPT= Cheie API pentru AI ChatGPT +AiSetup=Configurare modul AI +AiCustomPrompt=AI customs prompt +AI_CONFIGURATIONS_PROMPT=Custom prompt +ImageGeneration=Generare imagine +AIPromptForFeatures=AI custom prompts for features +EnterAnIP=Introdu o adresă IP diff --git a/htdocs/langs/ro_RO/main.lang b/htdocs/langs/ro_RO/main.lang index 6e15d6424d1..114b093fc9e 100644 --- a/htdocs/langs/ro_RO/main.lang +++ b/htdocs/langs/ro_RO/main.lang @@ -115,7 +115,7 @@ LastConnexion=Ultima autentificare PreviousConnexion=Autentificarea anterioară PreviousValue=Valoare anterioară ConnectedOnMultiCompany=Conectat la entitatea -ConnectedSince=Conectat din +ConnectedSince=Conectat din AuthenticationMode=Mod autentificare RequestedUrl=URL solicitat DatabaseTypeManager=Tip manager bază de date @@ -420,6 +420,8 @@ TotalTTCShort=Total (cu taxe) TotalHT=Total (fără taxe) TotalHTforthispage=Total (fără taxe) pentru această pagină Totalforthispage=Total pentru această pagină +GrandTotal=Total final +TotalforAllPages=Total pentru toate paginile TotalTTC=Total (cu taxe) TotalTTCToYourCredit=Total (cu taxe) în creditul tău TotalVAT=Total taxe @@ -551,7 +553,7 @@ Drafts=Schiţe StatusInterInvoiced=Facturată Done=Efectuat Validated=Validat -ValidatedToProduce=Validate (De fabricat) +ValidatedToProduce=Validate (De fabricat) Opened=Deschis OpenAll=Deschise (Toate) ClosedAll=Închise (Toate) @@ -647,6 +649,7 @@ ReportName=Nume raport ReportPeriod=Perioadă de raportare ReportDescription=Descriere Report=Raport +Reports=Rapoarte Keyword=Cuvânt cheie Origin=Origine Legend=Legendă @@ -725,7 +728,7 @@ RecordCreatedSuccessfully=Înregistrare creată cu succes RecordModifiedSuccessfully=Înregistrare modificată cu succes RecordsModified=Înregistrările (Înregistrarea) %s au fost modificate RecordsDeleted=Înregistrările(rarea) %s au fost șterse -RecordsGenerated=%s înregistrare(ări) au fost generate +RecordsGenerated=%s înregistrare(ări) au fost generate ValidatedRecordWhereFound = Unele dintre înregistrările selectate au fost deja validate. Nu au fost șterse înregistrări. AutomaticCode=Cod automat FeatureDisabled=Funcţionalitate dezactivată diff --git a/htdocs/langs/ro_RO/other.lang b/htdocs/langs/ro_RO/other.lang index 5d7171ccebe..4fcf77ca45f 100644 --- a/htdocs/langs/ro_RO/other.lang +++ b/htdocs/langs/ro_RO/other.lang @@ -32,7 +32,7 @@ NextYearOfInvoice=Anul următor datei facturii DateNextInvoiceBeforeGen=Data următoarei facturi (înainte de generare) DateNextInvoiceAfterGen=Data următoarei facturi (după generare) GraphInBarsAreLimitedToNMeasures=Graficele sunt limitate la %s măsuri în modul 'Bare'. În schimb, a fost selectat automat modul 'Linii'. -OnlyOneFieldForXAxisIsPossible=Doar 1 câmp este posibil pentru axa X. Doar primul câmp a fost selectat. +OnlyOneFieldForXAxisIsPossible=Doar 1 câmp este posibil pentru axa X. Doar primul câmp a fost selectat. AtLeastOneMeasureIsRequired=Cel puţin 1 câmp pentru metrică este necesar AtLeastOneXAxisIsRequired=Cel puţin 1 câmp pentru axa X este necesar LatestBlogPosts=Ultimile postări din blog @@ -301,7 +301,7 @@ ServicesPerPopularity=Servicii după popularitate PopuProp=Produse|Servicii după popularitate din oferte PopuCom=Produse|Servicii după popularitate din comenzi ProductStatistics=Statistici Produse|Servicii -NbOfQtyInOrders=Cantitate în comenzi +NbOfQtyInOrders=Cantitate în comenzi SelectTheTypeOfObjectToAnalyze=Selectează un obiect pentru a-i vedea statisticile... ConfirmBtnCommonContent = Eşti sigur că vrei să "%s" ? @@ -312,7 +312,7 @@ OrPasteAnURL=sau Lipește un URL # externalsite ExternalSiteSetup=Link-ul de instalare pentru site-ul extern -ExternalSiteURL=URL-ul site-ului extern care va fi conținut în iframe HTML +ExternalSiteURL=URL-ul site-ului extern care va fi conținut în iframe HTML ExternalSiteModuleNotComplete=Modulul Site extern nu a fost configurat corespunzător. ExampleMyMenuEntry=Intrare în Meniul meu @@ -321,7 +321,7 @@ FTPClientSetup=Configurare modul client FTP sau SFTP NewFTPClient=Configurare nouă de conexiune FTP/SFTP FTPArea=FTP/SFTP FTPAreaDesc=Acest ecran arată o vedere a unui server FTP și SFTP. -SetupOfFTPClientModuleNotComplete=Configurarea modulului client FTP sau SFTP pare să fie incompletă +SetupOfFTPClientModuleNotComplete=Configurarea modulului client FTP sau SFTP pare să fie incompletă FTPFeatureNotSupportedByYourPHP=PHP-ul nu suportă funcţii FTP sau SFTP FailedToConnectToFTPServer=Conectarea la server a eşuat ( server %s, port %s) FailedToConnectToFTPServerWithCredentials=Autentificarea la server a eşuat cu numele/parola definită @@ -336,3 +336,5 @@ FTPFailedToUploadFile=Eșec la încărcarea fișierului %s. AddFolder=Creare folder FileWasCreateFolder=Folderul %s a fost creat FTPFailedToCreateFolder=Eșec la crearea folderului %s. +SelectADay=Select a day in calendar +SelectANewDate=Selectare dată nouă diff --git a/htdocs/langs/ro_RO/products.lang b/htdocs/langs/ro_RO/products.lang index 2d1522fa8cb..e517f270661 100644 --- a/htdocs/langs/ro_RO/products.lang +++ b/htdocs/langs/ro_RO/products.lang @@ -33,7 +33,7 @@ ProductsOrServices=Produse sau servicii ProductsPipeServices=Produse | Servicii ProductsOnSale=Produse de vânzare ProductsOnPurchase=Produse de achiziţionat -ProductsOnSaleOnly=Produse doar de vânzare +ProductsOnSaleOnly=Produse doar de vânzare ProductsOnPurchaseOnly=Produse doar pentru achiziţie ProductsNotOnSell=Produse care nu sunt de vânzare și nici de achiziţionat ProductsOnSellAndOnBuy=Produse de vânzare sau de achiziţionat @@ -45,7 +45,7 @@ ServicesNotOnSell=Servicii care nu sunt nici de vânzare și nici de achiziţion ServicesOnSellAndOnBuy=Servicii de vânzare sau de achiziţionat LastModifiedProductsAndServices=Ultimele %s produse/servicii modificate LastRecordedProducts=Ultimele %s produse înregistrate -LastRecordedServices=Ultimele %s servicii înregistrate +LastRecordedServices=Ultimele %s servicii înregistrate CardProduct0=Produs CardProduct1=Serviciu Stock=Stoc @@ -170,7 +170,7 @@ CloneCombinationsProduct=Clonare variante de produs ProductIsUsed=Acest produs este utilizat NewRefForClone=Ref. noului produs/serviciu SellingPrices=Preţuri de vânzare -BuyingPrices=Prețuri de achiziție +BuyingPrices=Prețuri de achiziție CustomerPrices=Preţuri client SuppliersPrices=Prețuri furnizor SuppliersPricesOfProductsOrServices=Prețuri furnizori (pentru produse sau servicii) @@ -208,11 +208,6 @@ unitSET=Set unitS=Secundă unitH=Oră unitD=Zi -unitG=Gram -unitM=Metru -unitLM=Metru liniar -unitM2=Metru pătrat -unitM3=Metru cub unitL=Litru unitT=tonă unitKG=kg @@ -221,6 +216,7 @@ unitMG=mg unitLB=livră unitOZ=uncie unitM=Metru +unitLM=Metru liniar unitDM=dm unitCM=cm unitMM=mm @@ -241,7 +237,7 @@ unitIN3=in³ unitOZ3=uncie unitgallon=galon ProductCodeModel=Şablon ref Produs -ServiceCodeModel=Şablon ref Serviciu +ServiceCodeModel=Şablon ref Serviciu CurrentProductPrice=Preţ curent AlwaysUseNewPrice=Foloseşte întotdeauna preţul curent al produsului/serviciului AlwaysUseFixedPrice=Foloseşte preţ fix @@ -334,7 +330,7 @@ ProductWeight=Greutate pentru 1 produs ProductVolume=Volum pentru 1 produs WeightUnits=Unitate de greutate VolumeUnits=Unitate de volum -WidthUnits=Unitate lățime +WidthUnits=Unitate lățime LengthUnits=Unitate lungime HeightUnits=Unitate înălţime SurfaceUnits=Unitate suprafaţă @@ -364,7 +360,7 @@ ProductAttributeValueDeleteDialog=Sigur vrei să ștergi valoarea "%s" cu referi ProductCombinationDeleteDialog=Sigur doriți să ștergeți varianta de produs "%s"? ProductCombinationAlreadyUsed=A apărut o eroare la ștergerea variantei. Verificați că nu este folosită de niciun obiect ProductCombinations=Variante -PropagateVariant=Propagare variante de produs +PropagateVariant=Propagare variante de produs HideProductCombinations=Ascunde varianta de produs în selectorul de produse ProductCombination=Variantă NewProductCombination=Variantă nouă @@ -396,7 +392,7 @@ HideChildProducts=Ascundeți variantele de produs ShowChildProducts=Afișare variante de produs NoEditVariants=Accesați fişa produsul părinte și modificați impactul asupra prețurilor variantelor în fişa Variante ConfirmCloneProductCombinations=Doriți să copiați toate variantele de produs la celălalt produs părinte cu referința dată? -CloneDestinationReference=Referință produs destinație +CloneDestinationReference=Referință produs destinație ErrorCopyProductCombinations=A apărut o eroare la copierea variantelor de produs ErrorDestinationProductNotFound=Produsul destinația nu a fost găsit ErrorProductCombinationNotFound=Varianta de produs nu a fost găsită @@ -437,3 +433,6 @@ ModifyValueExtrafields = Modificare valoare extracâmp OrProductsWithCategories=Sau produse cu etichete/categorii WarningTransferBatchStockMouvToGlobal = Dacă vrei să deserializezi acest produs, tot stocul serializat/lotizat al acestuia va fi transformat în stoc global WarningConvertFromBatchToSerial=Dacă în prezent ai o cantitate mai mare sau egală cu 2 pentru produs, trecerea la această opțiune înseamnă că vei avea în continuare un produs cu diferite obiecte din același lot (în timp ce vrei un număr de serie unic). Dublura va rămâne până când se face un inventar sau o mișcare manuală a stocului pentru a remedia acest lucru. +AllowStockMovementVariantParent=Also records stock movements on parent products of variant products +AllowStockMovementVariantParentHelp=În mod implicit, un părinte al unei variante este un produs virtual, deci nu este gestionat stoc pentru acesta. Prin activarea acestei opțiuni, un stoc va fi gestionat pentru produsele părinte și de fiecare dată când se modifică o cantitate de stoc pentru un variantă de produs, aceeași cantitate va fi modificată pentru produsul părinte. Nu ar trebui să ai nevoie de această opțiune, cu excepția cazului în care utilizezi varianta pentru a gestiona același produs ca părinte (dar cu descrieri, prețuri diferite...) +ConfirmSetToDraftInventory=Sigur vrei să reîntorci în starea Schiță?
Cantitățile stabilite în prezent în inventar vor fi resetate. diff --git a/htdocs/langs/ro_RO/resource.lang b/htdocs/langs/ro_RO/resource.lang index 1839baa3439..67e57480c19 100644 --- a/htdocs/langs/ro_RO/resource.lang +++ b/htdocs/langs/ro_RO/resource.lang @@ -1,39 +1,41 @@ # Dolibarr language file - Source file is en_US - resource MenuResourceIndex=Resurse MenuResourceAdd=Resursă nouă -DeleteResource=Şterge resursa +DeleteResource=Şterge resursă ConfirmDeleteResourceElement=Confirmaţi ştergerea resursei pentru acest element NoResourceInDatabase=Nicio resursă în baza de date. -NoResourceLinked=Nicio resursă legată +NoResourceLinked=Nicio resursă asociată ActionsOnResource=Evenimente despre această resursă -ResourcePageIndex=Lista resurse +ResourcePageIndex=Listă resurse ResourceSingular=Resursă ResourceCard=Fişă resursă -AddResource=Crează resursă +AddResource=Creare resursă ResourceFormLabel_ref=Nume resursă ResourceType=Tip resursă ResourceFormLabel_description=Descriere resursă ResourcesLinkedToElement=Resurse legate de elementul -ShowResource=Arata Resursă +ShowResource=Arată resursă -ResourceElementPage=Element resurse -ResourceCreatedWithSuccess=Resursă creată +ResourceElementPage=Resurse element +ResourceCreatedWithSuccess=Resursa a fost creată cu succes RessourceLineSuccessfullyDeleted=Linie resursă ștearsă -RessourceLineSuccessfullyUpdated=Linie resursă actualizată -ResourceLinkedWithSuccess=Resursă legată cu succes +RessourceLineSuccessfullyUpdated=Linie resursă actualizată +ResourceLinkedWithSuccess=Resursă asociată cu succes ConfirmDeleteResource=Confirmaţi ştergerea acestei resurse RessourceSuccessfullyDeleted=Resursă ştearsă DictionaryResourceType=Tipuri resurse -SelectResource=Selectează resursa +SelectResource=Selectare resursă IdResource=Id resursă AssetNumber=Număr serial -ResourceTypeCode=Codul tipului de resursă +ResourceTypeCode=Cod tip resursă ImportDataset_resource_1=Resurse ErrorResourcesAlreadyInUse=O parte din resurse sunt deja în uz -ErrorResourceUseInEvent= %sutilizat în %seveniment +ErrorResourceUseInEvent= %sutilizată în %seveniment + +MaxUsers=Număr maxim de utilizatori (locuri, scaune etc.) diff --git a/htdocs/langs/ru_RU/accountancy.lang b/htdocs/langs/ru_RU/accountancy.lang index fe30b68b439..80160f4e631 100644 --- a/htdocs/langs/ru_RU/accountancy.lang +++ b/htdocs/langs/ru_RU/accountancy.lang @@ -309,7 +309,7 @@ DescValidateMovements=Любое изменение или удаление на ValidateHistory=Связывать автоматически AutomaticBindingDone=Выполнено автоматическое связывание (%s) — автоматическое связывание невозможно для некоторых записей (%s) -DoManualBindingForFailedRecord=Вам необходимо выполнить вручную ссылка для строк %s, которые не связаны автоматически< /пролет>. +DoManualBindingForFailedRecord=You have to do a manual link for the %s row(s) not linked automatically. ErrorAccountancyCodeIsAlreadyUse=Ошибка, вы не можете удалить или отключить этот счет плана счетов, потому что он используется MvtNotCorrectlyBalanced=Движение неправильно сбалансировано. Дебет = %s и кредит = %s @@ -335,7 +335,6 @@ CategoryDeleted=Категория учетной записи удалена AccountingJournals=Бухгалтерские журналы AccountingJournal=Бухгалтерский журнал NewAccountingJournal=Новый бухгалтерский журнал -ShowAccountingJournal=Показать бухгалтерский журнал NatureOfJournal=Природа журнала AccountingJournalType1=Разные операции AccountingJournalType2=Продажи @@ -353,7 +352,7 @@ ACCOUNTING_DISABLE_BINDING_ON_SALES=Отключить привязку и пе ACCOUNTING_DISABLE_BINDING_ON_PURCHASES=Отключить привязку и перенос в бухгалтерии по закупкам (счета поставщика не будут учитываться в бухгалтерии) ACCOUNTING_DISABLE_BINDING_ON_EXPENSEREPORTS=Отключить привязку и перенос в бухгалтерском учете в отчетах о расходах (отчеты о расходах не будут учитываться в бухгалтерском учете) ACCOUNTING_ENABLE_LETTERING=Включить функцию надписей в бухгалтерии -ACCOUNTING_ENABLE_LETTERING_DESC=Если эта опция включена, вы можете определить для каждой бухгалтерской записи код, чтобы группировать различные учетные движения вместе. Раньше, когда разные журналы управлялись независимо, этот особенность был необходим для группировки перемещения линии разных журналов вместе. Однако в бухгалтерском учете Dolibarr такое отслеживание код называется "%s" уже сохранен автоматически, поэтому автоматическое написание букв уже выполнено без риска ошибки, поэтому этот особенность стал бесполезным для обычного использования. Ручное написание букв особенность предназначено для конечных пользователей, которые действительно не доверяют компьютерному механизму, создающему перевод данных в бухгалтерском учете. +ACCOUNTING_ENABLE_LETTERING_DESC=When this options is enabled, you can define, on each accounting entry, a code so you can group different accounting movements together. In the past, when different journals was managed independently, this feature was necessary to group movement lines of different journals together. However, with Dolibarr accountancy, such a tracking code, called "%s" is already saved automatically, so an automatic lettering is already done, with no risk of error so this feature has become useless for a common usage. Manual lettering feature is provided for end users that really don't trust the computer engine making the transfer of data in accountancy. EnablingThisFeatureIsNotNecessary=Включение этого особенность больше не требуется для строгого управления бухгалтерским учетом. ACCOUNTING_ENABLE_AUTOLETTERING=Включить автоматическое написание букв при передаче в бухгалтерию ACCOUNTING_ENABLE_AUTOLETTERING_DESC=код для надписи: автоматически сгенерировано и и увеличено и не выбран окончательно пользователь @@ -462,7 +461,7 @@ ConfirmMassUnletteringAuto=Массовое автоматическое под ConfirmMassUnletteringManual=Массовое подтверждение несогласования вручную ConfirmMassUnletteringQuestion=Вы действительно хотите, чтобы отменить согласование выбранных записей %s? ConfirmMassDeleteBookkeepingWriting=Подтверждение пакетного удаления -ConfirmMassDeleteBookkeepingWritingQuestion=Это приведет к удалить проводка из учета (все линия записи class='notranslate'>Связанный на тот же проводка будет удален). Вы действительно хотите на удалить выбранные записи %s? +ConfirmMassDeleteBookkeepingWritingQuestion=This will delete the transaction from the accounting (all line entries related to the same transaction will be deleted). Are you sure you want to delete the %s selected entries? AccountancyClosureConfirmClose=Вы действительно хотите закрыть текущий финансовый период? Вы понимаете, что закрытие финансового периода является необратимым действием, и навсегда заблокирует любое изменение или удаление записей за этот период. AccountancyClosureConfirmAccountingReversal=Вы действительно хотите для записи записей «Нераспределенная прибыль»? @@ -477,7 +476,7 @@ NoJournalDefined=Журнал не определен Binded=Линии связаны ToBind=Линии для привязки UseMenuToSetBindindManualy=Строки еще не связаны, используйте меню %s, чтобы выполнить привязку вручную -SorryThisModuleIsNotCompatibleWithTheExperimentalFeatureOfSituationInvoices=Примечание. Эта модуль или страница не полностью совместима с экспериментальной особенность из ситуация счета-фактуры. Некоторые данные могут быть неверными. +SorryThisModuleIsNotCompatibleWithTheExperimentalFeatureOfSituationInvoices=Note: this module or page is not completely compatible with the experimental feature of situation invoices. Some data may be wrong. AccountancyErrorMismatchLetterCode=Несоответствие в коде согласования AccountancyErrorMismatchBalanceAmount=Баланс (%s) не равен 0 AccountancyErrorLetteringBookkeeping=Произошли ошибки, связанные с транзакциями: %s diff --git a/htdocs/langs/ru_RU/admin.lang b/htdocs/langs/ru_RU/admin.lang index 1d3a73d62fc..845c207963c 100644 --- a/htdocs/langs/ru_RU/admin.lang +++ b/htdocs/langs/ru_RU/admin.lang @@ -358,7 +358,7 @@ LastStableVersion=Последняя стабильная версия LastActivationDate=Последняя дата активации LastActivationAuthor=Последний активированный автор LastActivationIP=Последний активированный IP-адрес -LastActivationVersion=Последняя версия активации +LastActivationVersion=Последняя версия активации UpdateServerOffline=Сервер обновления недоступен WithCounter=Управление счетчиком GenericMaskCodes=Вы можете ввести любую маску нумерации. В этой маске можно использовать следующие теги:
{000000} соответствует числу, которое будет увеличиваться на каждом %s. Введите столько нулей, сколько желаемая длина счетчика. Счетчик будет дополнен нулями слева, чтобы было столько же нулей, сколько в маске.
{000000+000} То же, что и предыдущий, но смещение, соответствующее числу справа от знака +, применяется, начиная с первого %s.
{000000@x} То же, что и предыдущий, но счетчик сбрасывается на ноль при достижении месяца x (x от 1 до 12, или 0 для использования первых месяцев финансового года, определенных в вашей конфигурации, или от 99 до сбрасывать на ноль каждый месяц). Если используется этот параметр и x равно 2 или больше, то также требуется последовательность {yy}{mm} или {yyyy}{mm}.
{dd} день (с 01 по 31).
{mm} месяц (с 01 по 12).
{yy}, {yyyy} или {y} год более 2, 4 или 1 числа.
@@ -460,7 +460,7 @@ ComputedFormula=Вычисленное поле ComputedFormulaDesc=Вы можете ввести здесь формулу, используя другие свойства объекта или любой код PHP, чтобы получить динамическое вычисляемое значение. Вы можете использовать любые формулы, совместимые с PHP, включая "?" оператор условия и следующий глобальный объект: $db, $conf, $langs, $mysoc, $user, $objectoffield .
ПРЕДУПРЕЖДЕНИЕ : Если вам нужны незагруженные свойства объекта, просто выберите объект в своей формуле, как во втором примере.
Использование вычисляемого поля означает, что вы не можете ввести себе какое-либо значение из интерфейса. Кроме того, при наличии синтаксической ошибки формула может ничего не возвращать.

Пример формулы:
$objectoffield->id < 10 ? round($objectoffield-> id / 2, 2): ($objectoffield->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2 )

Пример перезагрузки объекта
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetchNoCompute($objectoffield->id) > 0 ? $reloadedobj->array_options['options_extra ключ поля'] * $reloadedobj ->capital / 5: '-1')

Другой пример формулы для принудительной загрузки объекта и его родительского объекта:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetchNoCompute($objectoffield) ->id) > 0) && ($secondloadedobj = новый проект($db)) && ($secondloadedobj->fetchNoCompute($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Родительский проект не найден' Computedpersistent=Сохранить вычисленное поле ComputedpersistentDesc=Вычисленные дополнительные поля будут сохранены в базе данных, однако значение будет пересчитано только при изменении объекта этого поля. Если вычисляемое поле зависит от других объектов или глобальных данных, это значение может быть неправильным!! -ExtrafieldParamHelpPassword=Если оставить это поле пустым, это значение будет храниться БЕЗ шифрования (поле просто скрыто звездочками на экране).

Введите значение «dolcrypt» для кодирования значения с помощью алгоритма обратимого шифрования. Очистить данные все еще можно узнать, и отредактировать, но они зашифрованы в база данных.

Введите «auto» (или «md5», «sha256», «password_hash», ...), чтобы использовать по умолчанию (или md5, sha256, pass_hash...) для сохранения необратимого хешированного пароля в база данных (нет возможности получить исходное значение) +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored WITHOUT encryption (field is just hidden with stars on screen).

Enter value 'dolcrypt' to encode value with a reversible encryption algorithm. Clear data can still be known and edited but is encrypted into database.

Enter 'auto' (or 'md5', 'sha256', 'password_hash', ...) to use the default password encryption algorithm (or md5, sha256, password_hash...) to save the non reversible hashed password into database (no way to retrieve original value) ExtrafieldParamHelpselect=Список значений должен быть строками формата: ключ, значение (где ключ не может быть равен 0)

например:
1, значение1
2, значение2
code3, значение3
...

Чтобы иметь список в зависимости от другого списка дополнительных атрибутов:
1, значение1|options_ parent_list_code:parent_key
2, значение2|options_ parent_list_code:parent_key

Чтобы иметь список в зависимости от другого списка:
1, значение1|parent_list_code:parent_key
2, значение2 | parent_list_code:parent_key ExtrafieldParamHelpcheckbox=Список значений должен быть строками с форматом: ключ, значение (где ключ не может быть равен 0)

например:
1, значение1
2, значение2
3, значение3
... ExtrafieldParamHelpradio=Список значений должен быть строками с форматом: ключ, значение (где ключ не может быть равен 0)

например:
1, значение1
2, значение2
3, значение3
... @@ -543,7 +543,7 @@ DAV_ALLOW_PRIVATE_DIRTooltip=Общий частный каталог - это DAV_ALLOW_PUBLIC_DIR=Включить общий публичный каталог (выделенный каталог WebDAV с именем «public» - вход в систему не требуется) DAV_ALLOW_PUBLIC_DIRTooltip=Общий публичный каталог - это каталог WebDAV, к которому может получить доступ каждый (в режиме чтения и записи) без авторизации (логин/пароль). DAV_ALLOW_ECM_DIR=Включить приватный каталог DMS/ECM (корневой каталог модуля DMS/ECM - требуется вход в систему) -DAV_ALLOW_ECM_DIRTooltip=Корневой каталог каталог, где все файлы вручную загружены при использовании DMS/ECM модуль. Как и при доступе через веб-интерфейс, вам потребуется действительный логин/пароль с соответствующими разрешениями для доступа к нему. +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Similarly as access from the web interface, you will need a valid login/password with adequate permissions to access it. ##### Modules ##### Module0Name=Пользователи и Группы Module0Desc=Управление Пользователями/Сотрудниками и Группами @@ -790,7 +790,7 @@ Permission121=Просмотр контрагентов, связанных с Permission122=Создать/изменить контрагентов, связанных с пользователем Permission125=Удалить контрагентов, связанных с пользователем Permission126=Экспорт контрагентов -Permission130=Создание/изменение платежной информации третьих лиц +Permission130=Создание/изменение платежной информации третьих лиц Permission141=Читать все проекты и задачи (а также частные проекты, по которым я не контактный) Permission142=Создавать/изменять все проекты и задачи (а также частные проекты, для которых я не являюсь контактным лицом) Permission144=Удалить все проекты и задачи (а также частные проекты я не в контакте) @@ -1197,6 +1197,7 @@ Skin=Тема оформления DefaultSkin=Тема по умолчанию MaxSizeList=Максимальная длина списка DefaultMaxSizeList=Максимальная длина по умолчанию для списков +DisplayGrandTotalInList=Display grand total (for all pages) in lists footer DefaultMaxSizeShortList=Максимальная длина по умолчанию для коротких списков (т.е. в карточке клиента) MessageOfDay=Сообщение дня MessageLogin=Сообщение на странице входа @@ -1404,8 +1405,8 @@ PHPModuleLoaded=Компонент PHP %s загружен PreloadOPCode=Используется предварительно загруженный OPCode AddRefInList=Отображение ссылки на клиента/поставщика в комбо-списки.
Третьи стороны будут отображаться с форматом имени "CC12345 - SC45678 - The Big Company corp." вместо "Корпорация Большой Компании". AddVatInList=Отображение номера НДС клиента/поставщика в комбинированных списках. -AddAdressInList=Отображать клиент/адрес поставщика в комбинированных списках.
Появится третий стороны с форматом названия «The Big компания Corp. – 21 Jump Street 123456 Big Town – USA» вместо «The Big компания корпорация». -AddEmailPhoneTownInContactList=Отобразить контактный адрес электронной почты (или телефоны, если не определены) и город информация Список (выберите Список или поле со списком)
Контакты будут отображаться с именем в формате «Dupond Durand - dupond.durand@Пример.com – Париж» или «Дюпон Дюран – 06 07 59 65 66 – Париж» вместо «Дюпон Дюран». +AddAdressInList=Display Customer/Vendor address into combo lists.
Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp". +AddEmailPhoneTownInContactList=Display Contact email (or phones if not defined) and town info list (select list or combobox)
Contacts will appear with a name format of "Dupond Durand - dupond.durand@example.com - Paris" or "Dupond Durand - 06 07 59 65 66 - Paris" instead of "Dupond Durand". AskForPreferredShippingMethod=Запросить предпочтительный способ доставки для контрагентов. FieldEdition=Редакция поля %s FillThisOnlyIfRequired=Например, +2 (заполняйте это поле только тогда, когда ваш часовой пояс отличается от того, который используется на сервере) @@ -1517,7 +1518,7 @@ MembersSetup=Настройка модуля участников MemberMainOptions=Основные настройки MemberCodeChecker=Параметры автоматического создания кодов член AdherentLoginRequired=Управляйте логином и паролем для каждого член -AdherentLoginRequiredDesc=Добавьте значение для входа и и пароля на член файл. Если член связан с пользователь, обновление имени входа член < Пароль span class='notranslate'>и
также обновит пароль для входа пользователь и. +AdherentLoginRequiredDesc=Add a value for a login and a password on the member file. If the member is linked to a user, updating the member login and password will also update the user login and password. AdherentMailRequired=Требуется электронная почта для создания нового участника MemberSendInformationByMailByDefault=Чекбокс отправить по почте подтверждение участников по умолчанию MemberCreateAnExternalUserForSubscriptionValidated=Создайте внешний пользовательский логин для каждой подтвержденной подписки нового участника @@ -1780,7 +1781,7 @@ AdvancedEditor=Расширенный редактор ActivateFCKeditor=Включить FCKeditor для: FCKeditorForNotePublic=WYSIWYG создание/редактирование поля «публичные заметки» элементов FCKeditorForNotePrivate=WYSIWYG создание/редактирование поля «личные заметки» элементов -FCKeditorForCompany=WYSIWYG создание/редактирование поля Описание элементов (кроме продукты/услуги) +FCKeditorForCompany=WYSIWYG creation/edition of the field description of elements (except products/services) FCKeditorForProductDetails=WYSIWYG-создание/редактирование продукты Описание или линии для объектов (линии из предложения, заказы, счета-фактуры и т. д.). FCKeditorForProductDetails2=Предупреждение. Использование этой опции в этом случае категорически не рекомендуется, так как это может привести к создать проблемам со специальными символами, и форматированием страницы при создании PDF-файла. файлы. FCKeditorForMailing= Создание/редактирование WYSIWYG для массовых рассылок по электронной почте (инструменты->eMailing) @@ -2153,7 +2154,7 @@ EmailCollectorExampleToCollectAnswersFromExternalEmailSoftwareDesc=Сканир EmailCollectorExampleToCollectAnswersFromExternalEmailSoftware=Пример сбора ответов по электронной почте, отправленных из внешнего программного обеспечения электронной почты EmailCollectorExampleToCollectDolibarrAnswersDesc=Соберите все электронные письма, которые являются ответом на электронное письмо, отправленное из вашего приложения. Событие (Module Agenda должно быть включено) с ответом по электронной почте будет записано в нужном месте. Например, если вы отправляете коммерческое предложение, заказ, счет или сообщение на билет по электронной почте из приложения, и получатель отвечает на ваше письмо, система автоматически поймает ответ и добавит его в вашу ERP. EmailCollectorExampleToCollectDolibarrAnswers=Пример сбора всех входящих сообщений, являющихся ответами на сообщения, отправленные Долибарром. -EmailCollectorExampleToCollectLeadsDesc=Собирать электронные письма, соответствующие некоторым правилам 'notranslate'>лид (модуль проект должен быть включен) с информацией об электронной почте. Вы можете использовать этот сборщик, если хотите следить за своим лид с помощью модуль проект (1 лид = 1 проект), поэтому ваш Лиды будет быть сгенерирован автоматически. Если сборщик Collect_Responses также включен, когда вы отправляете электронное письмо с вашего Лиды, предложения или любого другого объекта, вы также можете смотрите ответы вашего клиенты или партнеров непосредственно в приложении.
Примечание: с этим начальным Пример, заголовок лид генерируется вместе с электронным письмом. Если третью сторону невозможно найти в база данных (новый клиент), лид будет прикреплен к третьей стороне с помощью ID 1. +EmailCollectorExampleToCollectLeadsDesc=Collect emails that match some rules and create automatically a lead (Module Project must be enabled) with the email information. You can use this collector if you want to follow your lead using the module Project (1 lead = 1 project), so your leads will be automatically generated. If the collector Collect_Responses is also enabled, when you send an email from your leads, proposals or any other object, you may also see answers of your customers or partners directly on the application.
Note: With this initial example, the title of the lead is generated including the email. If the third party can't be found in database (new customer), the lead will be attached to the third party with ID 1. EmailCollectorExampleToCollectLeads=Пример сбора лидов EmailCollectorExampleToCollectJobCandidaturesDesc=Собирайте электронные письма с предложениями о работе (Module Recruitment должен быть включен). Вы можете заполнить этот коллектор, если хотите автоматически создать кандидатуру для запроса на работу. Примечание. В этом начальном примере заголовок кандидата генерируется вместе с адресом электронной почты. EmailCollectorExampleToCollectJobCandidatures=Пример сбора кандидатур на работу, полученных по электронной почте @@ -2433,3 +2434,12 @@ UrlPublicInterfaceHelpAdmin=It is possible to define an alias to the web server ExportUseForce=Use the parameter -f ExportUseForceHelp=Force to continue the export even when an error is found (Backup may not be reliable) CustomPrompt=Custom prompts +AiDescription=AI (Artificial Intelligence) features +AiDescriptionLong=Provides AI (Artificial Intelligence) features in different part of the application. Need external AI API. +AI_KEY_API_CHATGPT= Key for ChatGPT IA api +AiSetup=AI module setup +AiCustomPrompt=AI customs prompt +AI_CONFIGURATIONS_PROMPT=Custom prompt +ImageGeneration=Image generation +AIPromptForFeatures=AI custom prompts for features +EnterAnIP=Enter an IP address diff --git a/htdocs/langs/ru_RU/banks.lang b/htdocs/langs/ru_RU/banks.lang index 2492d4601bd..7be578b576c 100644 --- a/htdocs/langs/ru_RU/banks.lang +++ b/htdocs/langs/ru_RU/banks.lang @@ -190,6 +190,6 @@ NoBankAccountDefined=Банковский счет не указан NoRecordFoundIBankcAccount=Никаких записей на банковском счете не найдено. Обычно это происходит, когда запись была вручную удалена из списка транзакций на банковском счете (например, во время выверки банковского счета). Другая причина в том, что платеж был записан при отключении модуля «%s». AlreadyOneBankAccount=Уже определен один банковский счет SEPAXMLPlacePaymentTypeInformationInCreditTransfertransactionInformation=SEPA файл вариант -SEPAXMLPlacePaymentTypeInformationInCreditTransfertransactionInformationHelp=Да = сохранить 'платеж Type' в разделе 'Credit перевод' файла SEPA

При создании SEPA XML файл для кредитных переводов раздел "PaymentTypeInformation" теперь можно поместить внутри " CreditTransferTransactionInformation» (вместо раздела «платеж»). Мы настоятельно рекомендуем оставить этот флажок снятым и поместить информацию о типе платежа в платеж уровень, так как не все банки обязательно примут ее в CreditTransferTransactionInformation уровень
. Прежде чем размещать информацию о типе платежа в CreditTransferTransactionInformation уровень, свяжитесь со своим банком. +SEPAXMLPlacePaymentTypeInformationInCreditTransfertransactionInformationHelp=Yes = Store 'Payment Type' in 'Credit Transfer' section of SEPA file

When generating a SEPA XML file for Credit transfers, the section "PaymentTypeInformation" can now be placed inside the "CreditTransferTransactionInformation" section (instead of "Payment" section). We strongly recommend to keep this unchecked to place PaymentTypeInformation at Payment level, as all banks will not necessarily accept it at CreditTransferTransactionInformation level. Contact your bank before placing PaymentTypeInformation at CreditTransferTransactionInformation level. ToCreateRelatedRecordIntoBank=Чтобы создать отсутствующую связанную банковскую запись XNewLinesConciliated=%s новый линия(s) согласован diff --git a/htdocs/langs/ru_RU/blockedlog.lang b/htdocs/langs/ru_RU/blockedlog.lang index 4c3f0973dee..4d5c167068e 100644 --- a/htdocs/langs/ru_RU/blockedlog.lang +++ b/htdocs/langs/ru_RU/blockedlog.lang @@ -29,7 +29,7 @@ RestrictYearToExport=Ограничить экспорт по месяцам/г BlockedLogEnabled=Включена система для отслеживания событий в неизменяемых журналах. BlockedLogDisabled=Система для отслеживания событий в неизменяемых журналах была отключена после того, как были сделаны некоторые записи. Мы сохранили специальный отпечаток пальца, чтобы отслеживать цепочку как сломанную. BlockedLogDisabledBis=Система для отслеживания событий в неизменяемых журналах отключена. Это возможно, потому что запись еще не была сделана. -LinkHasBeenDisabledForPerformancePurpose=В целях повышения производительности прямой ссылка на документ не отображается после 100-го линия. +LinkHasBeenDisabledForPerformancePurpose=For performance purpose, direct link to the document is not shown after the 100th line. ## logTypes logBILL_DELETE=Счет клиента удален логически diff --git a/htdocs/langs/ru_RU/boxes.lang b/htdocs/langs/ru_RU/boxes.lang index ba59880516e..5cd4446c98d 100644 --- a/htdocs/langs/ru_RU/boxes.lang +++ b/htdocs/langs/ru_RU/boxes.lang @@ -23,7 +23,8 @@ BoxLastMembersSubscriptions=Последние подписки участник BoxFicheInter=Последние вмешательства BoxCurrentAccounts=Остаток на открытых счетах BoxTitleMemberNextBirthdays=Дни рождения в этом месяце (участники) -BoxTitleMembersByType=Участники по типу +BoxTitleMembersByType=Участники по типу и статусу +BoxTitleMembersByTags=Members by tags and status BoxTitleMembersSubscriptionsByYear=Подписки участников по годам BoxTitleLastRssInfos=Последние %s новостей от %s BoxTitleLastProducts=Продукты/Услуги: последних %s изменений @@ -44,8 +45,11 @@ BoxTitleSupplierOrdersAwaitingReception=Заказы поставщика ожи BoxTitleLastModifiedContacts=Контакты/Адреса: последнее изменение %s BoxMyLastBookmarks=Закладки: последние %s BoxOldestExpiredServices=Старейшие активных истек услуги +BoxOldestActions=Самые старые события, которые стоит сделать BoxLastExpiredServices=Последние %s самые старые контакты с активными просроченными услугами BoxTitleLastActionsToDo=Последние действия %s, которые нужно сделать +BoxTitleOldestActionsToDo=Самые старые события %s, которые необходимо выполнить, не завершены +BoxTitleFutureActions=Следующие %s предстоящие мероприятия BoxTitleLastContracts=Последние контракты %s, которые были изменены BoxTitleLastModifiedDonations=Последние пожертвования %s, которые были изменены BoxTitleLastModifiedExpenses=Последние отчеты о расходах %s, которые были изменены @@ -109,12 +113,34 @@ NumberOfLinesInSuspenseAccount=Номер строки в предварител SuspenseAccountNotDefined=Приостановленный аккаунт не определен BoxLastCustomerShipments=Последние поставки клиентам BoxTitleLastCustomerShipments=Последние поставки от клиентов %s +BoxTitleLastLeaveRequests=Последний %s измененные запросы на отпуск NoRecordedShipments=Отгрузка от клиента не зафиксирована -BoxCustomersOutstandingBillReached=Достигнуты клиенты с невыполненным лимитом +BoxCustomersOutstandingBillReached=клиенты достигнут лимит непогашенной задолженности # Pages UsersHome=Главная Пользователи и группы MembersHome=Главная Участники ThirdpartiesHome=Главная Контрагенты +productindex=Home products and services +mrpindex=Главная ППМ +commercialindex=Главная рекламный ролик +projectsindex=Главная Проекты +invoiceindex=Главная счета-фактуры +hrmindex=Главная счета-фактуры TicketsHome=Главная Тикеты +stockindex=Главная Остатки +sendingindex=Главная доставки +receptionindex=Главная получения +activityindex=Главная активность +proposalindex=Главная предложение +ordersindex=Главная продажа заказы +orderssuppliersindex=Главная покупка заказы +contractindex=Главная контракты +interventionindex=Главная вмешательства +suppliersproposalsindex=Главная Поставщики предложения +donationindex=Главная пожертвования +specialexpensesindex=Главная специальные расходы +expensereportindex=Главная отчет о расходах +mailingindex=Главная рассылка +opensurveyindex=Главная opensurvey AccountancyHome=Главная Бухгалтерия ValidatedProjects=Проверенные проекты diff --git a/htdocs/langs/ru_RU/cron.lang b/htdocs/langs/ru_RU/cron.lang index c8a9bf1efdc..4fbdfd06955 100644 --- a/htdocs/langs/ru_RU/cron.lang +++ b/htdocs/langs/ru_RU/cron.lang @@ -1,6 +1,5 @@ # Dolibarr language file - Source file is en_US - cron -# About page -# Right +# Permissions Permission23101 = Просмотр Запланированных задач Permission23102 = Создать/обновить Запланированную задачу Permission23103 = Удалить Запланированную задачу @@ -13,7 +12,7 @@ KeyForCronAccess=Ключ безопасности для запуска зап FileToLaunchCronJobs=Командная строка для проверки и запуска квалифицированных заданий cron CronExplainHowToRunUnix=В среде Unix вы должны использовать следующую запись crontab для запуска командной строки каждые 5 минут CronExplainHowToRunWin=В среде Microsoft (tm) Windows вы можете использовать инструменты запланированного задания для запуска командной строки каждые 5 минут. -CronMethodDoesNotExists=Class %s does not contain any method %s +CronMethodDoesNotExists=Класс %s не содержит методов %s CronMethodNotAllowed=Метод %s класса %s находится в черном списке запрещенных методов CronJobDefDesc=Профили заданий Cron определены в файле дескриптора модуля. Когда модуль активирован, они загружаются и становятся доступными, поэтому вы можете управлять заданиями из меню инструментов администратора %s. CronJobProfiles=Список предопределенных профилей вакансий cron @@ -67,7 +66,7 @@ CronModuleHelp=Имя каталога модуля Dolibarr (также раб CronClassFileHelp=Относительный путь и имя файла для загрузки (путь относительно корневого каталога веб-сервера).
Например, чтобы вызвать метод выборки объекта продукта Dolibarr htdocs/product/class/product.class.php, значение для имени файла класса -
product/class/product.class.php CronObjectHelp=Имя загружаемого объекта.
Например, чтобы вызвать метод выборки объекта продукта Dolibarr /htdocs/product/class/product.class.php, значение имени файла класса будет
Product CronMethodHelp=Метод объекта для запуска.
Например, чтобы вызвать метод выборки объекта продукта Dolibarr /htdocs/product/class/product.class.php, значение метода будет
fetch -CronArgsHelp=Аргументы метода.
Например, чтобы вызвать метод выборки объекта Dolibarr Product /htdocs/product/class/product.class.php, значение параметров может быть
0, ProductRef +CronArgsHelp=Аргументы метода.
Для Пример для вызова метода выборки объекта Dolibarr продукт /htdocs /продукт/class/продукт.class.php, значение параметров может быть
0, ProductRef CronCommandHelp=Команда для выполнения CronCreateJob=Создать новое запланированное задание CronFrom=От @@ -84,17 +83,18 @@ MakeLocalDatabaseDumpShort=Резервное копирование локал MakeLocalDatabaseDump=Создайте дамп локальной базы данных. Параметры: сжатие ('gz' или 'bz' или 'none'), тип резервной копии ('mysql', 'pgsql', 'auto'), 1, 'auto' или имя файла для создания, количество файлов резервных копий для хранения MakeSendLocalDatabaseDumpShort=Отправить резервную копию локальной базы данных MakeSendLocalDatabaseDump=Отправить резервную копию локальной базы данных по электронной почте. Параметры: кому, от, тема, сообщение, имя файла (имя отправляемого файла), фильтр («sql» только для резервного копирования базы данных) -BackupIsTooLargeSend=Sorry, last backup file is too large to be send by email -CleanUnfinishedCronjobShort=Clean unfinished cronjob -CleanUnfinishedCronjob=Clean cronjob stuck in processing when the process is no longer running +BackupIsTooLargeSend=К сожалению, последний резервная копия файл слишком велик для отправки по электронной почте. +CleanUnfinishedCronjobShort=Очистить незаконченный cronjob +CleanUnfinishedCronjob=Очистить cronjob, зависший в обработке, когда процесс больше не выполняется WarningCronDelayed=Внимание, для повышения производительности, какой бы ни была следующая дата выполнения включенных заданий, ваши задания могут быть отложены максимум на %s часов перед запуском. DATAPOLICYJob=Очиститель и анонимайзер данных JobXMustBeEnabled=Должно быть включено задание %s -EmailIfError=Email for warning on error -ErrorInBatch=Error when running the job %s +EmailIfError=Электронная почта для предупреждения об ошибке +JobNotFound=Job %s not found in list of jobs (try to disable/enabled module) +ErrorInBatch=Ошибка при запуске задания %s # Cron Boxes LastExecutedScheduledJob=Последнее выполненное запланированное задание NextScheduledJobExecute=Следующее запланированное задание для выполнения NumberScheduledJobError=Количество запланированных заданий с ошибкой -NumberScheduledJobNeverFinished=Number of scheduled jobs never finished +NumberScheduledJobNeverFinished=номер запланированных заданий так и не были завершены diff --git a/htdocs/langs/ru_RU/ecm.lang b/htdocs/langs/ru_RU/ecm.lang index 1193f40aebd..e62cfa30b66 100644 --- a/htdocs/langs/ru_RU/ecm.lang +++ b/htdocs/langs/ru_RU/ecm.lang @@ -3,9 +3,9 @@ ECMNbOfDocs=Количество документов в каталоге ECMSection=Директория ECMSectionManual=Директория в ручном режиме ECMSectionAuto=Директория в автоматическом режиме -ECMSectionsManual=Ручное дерево директории -ECMSectionsAuto=Автоматическое дерево директории -ECMSectionsMedias=Medias tree +ECMSectionsManual=Частное ручное дерево +ECMSectionsAuto=Частное автоматическое дерево +ECMSectionsMedias=Публичное дерево ECMSections=Директории ECMRoot=Корень ECM ECMNewSection=Новая директория @@ -17,9 +17,9 @@ ECMNbOfFilesInSubDir=Количество файлов в поддиректор ECMCreationUser=Создатель ECMArea=Область DMS/ECM ECMAreaDesc=Область DMS/ECM (Система управления документами / Управление электронным контентом) позволяет сохранять, обмениваться и быстро искать все виды документов в Dolibarr. -ECMAreaDesc2a=* Manual directories can be used to save documents not linked to a particular element. -ECMAreaDesc2b=* Automatic directories are filled automatically when adding documents from the page of an element. -ECMAreaDesc3=* Medias directories are files into the subdirectory /medias of documents directory, readable by everybody with no need to be logged and no need to have the file shared explicitely. It is used to store image files from emailing or website module. +ECMAreaDesc2a=* Ручные каталоги могут использоваться для сохранения документов со свободной организацией древовидной структуры. +ECMAreaDesc2b=* Каталоги заполняются автоматически автоматически при добавлении документов со страницы элемента. +ECMAreaDesc3=* Public directories are files into the subdirectory /medias of the documents directory, readable by everybody with no need to be logged and no need to have the file shared explicitly. It is used to store image files for the emailing or website module for example. ECMSectionWasRemoved=Каталог %s удален. ECMSectionWasCreated=Каталог %s создан. ECMSearchByKeywords=Поиск по ключевым словам @@ -45,8 +45,12 @@ ExtraFieldsEcmFiles=Файлы Extrafields Ecm ExtraFieldsEcmDirectories=Каталоги Extrafields Ecm ECMSetup=Настройка ECM GenerateImgWebp=Дублируйте все изображения с другой версией в формате .webp -ConfirmGenerateImgWebp=Если вы подтвердите, вы сгенерируете изображение в формате .webp для всех изображений, находящихся в настоящее время в этой папке (подпапки не включены) ... +ConfirmGenerateImgWebp=Если вы подтвердите, вы создадите изображение в формате .webp для всех изображений, находящихся в данный момент в этой папке (подпапки не включены, изображения WebP не будут созданы, если Размер больше исходного )... ConfirmImgWebpCreation=Подтвердите дублирование всех изображений +GenerateChosenImgWebp=Дублируйте выбранное изображение другой версией в формате .webp. +ConfirmGenerateChosenImgWebp=Если вы подтвердите, вы создадите изображение в формате .webp для изображения %s +ConfirmChosenImgWebpCreation=Подтвердите дублирование выбранных изображений SucessConvertImgWebp=Изображения успешно скопированы +SucessConvertChosenImgWebp=Выбранное изображение успешно дублировано ECMDirName=Имя режиссера ECMParentDirectory=Родительский каталог diff --git a/htdocs/langs/ru_RU/errors.lang b/htdocs/langs/ru_RU/errors.lang index 42d91d37454..73a7909fe27 100644 --- a/htdocs/langs/ru_RU/errors.lang +++ b/htdocs/langs/ru_RU/errors.lang @@ -95,10 +95,10 @@ ErrorModuleRequireJavascript=JavaScript не должен быть Отключ ErrorPasswordsMustMatch=Оба введенных пароля должны совпадать друг с другом ErrorContactEMail=Произошла техническая ошибка. Пожалуйста, свяжитесь с администратором по адресу следующий по электронной почте %s и укажите ошибку код %s в свое сообщение или добавьте копию экрана этой страницы. ErrorWrongValueForField=Поле %s: '%s' не совпадает с регулярным выражением %s -ErrorHtmlInjectionForField=Поле %s: значение '%s' содержит вредоносные данные, которые запрещены +ErrorHtmlInjectionForField=Field %s: The value '%s' contains a malicious data not allowed ErrorFieldValueNotIn=Поле %s: '%s' не является найденным значением в поле %s из %s ErrorFieldRefNotIn=Поле %s: '%s' не является %s существующей ссылкой -ErrorMultipleRecordFoundFromRef=При поиске по ссылка %s
. Невозможно узнать, какой ID использовать. +ErrorMultipleRecordFoundFromRef=Several record found when searching from ref %s. No way to know which ID to use. ErrorsOnXLines=%s обнаружены ошибки ErrorFileIsInfectedWithAVirus=Антивирусная программа не смогла проверить файл (файл может быть заражен вирусом) ErrorFileIsAnInfectedPDFWithJSInside=The file is a PDF infected by some Javascript inside @@ -305,15 +305,15 @@ ErrorThisPaymentModeIsNotSepa=Этот режим платеж не являет ErrorStripeCustomerNotFoundCreateFirst=Полоса клиент не установлена для этой третьей стороны (или ей присвоено значение, удаленное на стороне Stripe). создать (или прикрепите его сначала). ErrorCharPlusNotSupportedByImapForSearch=Поиск IMAP не может найти у отправителя или получателя строку, содержащую символ + ErrorTableNotFound=Таблица %s не найдена -ErrorRefNotFound=ссылка %s не найден +ErrorRefNotFound=Ref %s not found ErrorValueForTooLow=Значение для %s слишком низкое ErrorValueCantBeNull=Значение для %s не может быть нулевым ErrorDateOfMovementLowerThanDateOfFileTransmission=дата банка проводка не может быть ниже, чем дата передачи файл ErrorTooMuchFileInForm=Слишком много файлов в форма, максимальное значение номер – %s файл(s) -ErrorSessionInvalidatedAfterPasswordChange=Сеанс был признан недействительным следующий сменой пароля, электронной почты, статус или даты срока действия. Пожалуйста, перезайдите. +ErrorSessionInvalidatedAfterPasswordChange=The session was been invalidated following a change of password, email, status or dates of validity. Please relogin. ErrorExistingPermission = Разрешение %s для объекта %s уже существует ErrorFieldExist=Значение для %s уже существует -ErrorEqualModule=модуль недействителен в %s +ErrorEqualModule=модуль недействителен в %s ErrorFieldValue=Значение для %s неверно ErrorCoherenceMenu=%s требуется, когда %s — «слева» ErrorUploadFileDragDrop=Произошла ошибка при выполнении файл(s) загрузить diff --git a/htdocs/langs/ru_RU/mails.lang b/htdocs/langs/ru_RU/mails.lang index 71139ac99fb..f62b225bb00 100644 --- a/htdocs/langs/ru_RU/mails.lang +++ b/htdocs/langs/ru_RU/mails.lang @@ -187,7 +187,7 @@ NoMoreRecipientToSendTo=Больше нет получателя, котором EmailOptedOut=Владелец электронной почты попросил больше не связываться с ним по этому адресу. EvenUnsubscribe=Включить электронные письма для отказа EvenUnsubscribeDesc=Включите электронные письма об отказе от рассылки, когда вы выбираете электронные письма в качестве целевых. Полезно для обязательных электронных писем услуга для Пример. -XEmailsDoneYActionsDone=%s электронные письма предварительно квалифицированы, %s электронные письма успешно обработаны (для %s class='notranslate'>%s запись/действия выполнены) +XEmailsDoneYActionsDone=%s emails pre-qualified, %s emails successfully processed (for %s record/actions done) helpWithAi=Generate message from AI YouCanMakeSomeInstructionForEmail=You can make some instructions for your Email (Example: generate image in email template...) ModelTemplate=Email template diff --git a/htdocs/langs/ru_RU/main.lang b/htdocs/langs/ru_RU/main.lang index 69644c7265e..8d03f9ac64d 100644 --- a/htdocs/langs/ru_RU/main.lang +++ b/htdocs/langs/ru_RU/main.lang @@ -105,7 +105,7 @@ LevelOfFeature=Уровень возможностей NotDefined=Неопределено DolibarrInHttpAuthenticationSoPasswordUseless=Режим аутентификации Dolibarr установлен в %s в файле конфигурации conf.php.
Это означает, что Dolibarr хранит пароли во внешней базе, поэтому изменение этого поля может не помочь. Administrator=Системный администратор -AdministratorDesc=Системный администратор (может администрировать пользователь, разрешения, а также системные настройка и < конфигурация span class='notranslate'>модули
) +AdministratorDesc=System administrator (can administer user, permissions but also system setup and modules configuration) Undefined=Неопределено PasswordForgotten=Забыли пароль? NoAccount=Нет аккаунта? @@ -420,6 +420,8 @@ TotalTTCShort=Всего (вкл-я налог) TotalHT=Всего (без налога) TotalHTforthispage=Всего (без налога) для этой страницы Totalforthispage=Итого для этой страницы +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=Всего (вкл-я налог) TotalTTCToYourCredit=Всего (вкл-я налог) с Вашей кредитной TotalVAT=Всего НДС @@ -647,6 +649,7 @@ ReportName=Имя отчета ReportPeriod=Период отчета ReportDescription=Описание Report=Отчет +Reports=Отчёты Keyword=Ключевое слово Origin=Происхождение Legend=Легенда diff --git a/htdocs/langs/ru_RU/members.lang b/htdocs/langs/ru_RU/members.lang index 9faa5d68823..e363c55a0cb 100644 --- a/htdocs/langs/ru_RU/members.lang +++ b/htdocs/langs/ru_RU/members.lang @@ -27,7 +27,7 @@ MembersListNotUpToDate=Список действительных участни MembersListExcluded=Список исключенных участников MembersListResiliated=Список прекращенных участников MembersListQualified=Список квалифицированных участников -MembersShowMembershipTypesTable=Показать таблица всех доступных типов членства (если нет, Показать непосредственно регистрация форма< /пролет>) +MembersShowMembershipTypesTable=Show a table of all available membership types (if no, show directly the registration form) MembersShowVotesAllowed=Показать разрешено ли голосование, в таблице типов членства MenuMembersToValidate=Проект участники MenuMembersValidated=Подтвержденные участники @@ -171,7 +171,7 @@ HTPasswordExport=htpassword файл поколения NoThirdPartyAssociatedToMember=Никакая третья сторона не связана с этим участником MembersAndSubscriptions=Члены и взносы MoreActions=Дополнительные меры по записи -MoreActionsOnSubscription=Дополнительное действие, предложенное по умолчанию при записи вклада, также выполняется автоматически в Интернете платеж вклада +MoreActionsOnSubscription=Complementary action suggested by default when recording a contribution, also done automatically on online payment of a contribution MoreActionBankDirect=Создайте прямую запись на банковский счет MoreActionBankViaInvoice=Создайте счет-фактуру и оплату на банковский счет MoreActionInvoiceOnly=Создание счета без каких-либо оплаты diff --git a/htdocs/langs/ru_RU/modulebuilder.lang b/htdocs/langs/ru_RU/modulebuilder.lang index 5858265b2f3..7202a23fe1d 100644 --- a/htdocs/langs/ru_RU/modulebuilder.lang +++ b/htdocs/langs/ru_RU/modulebuilder.lang @@ -106,7 +106,7 @@ PermissionsDefDesc=Определите здесь новые разрешени MenusDefDescTooltip=Меню, предоставляемые вашим модулем/приложением, определены в массиве $this->menus в файле дескриптора модуля. Вы можете редактировать этот файл вручную или использовать встроенный редактор.

Примечание. После определения (и повторной активации модуля) меню также отображаются в редакторе меню, доступном для пользователей-администраторов на %s. DictionariesDefDescTooltip=Словари, предоставляемые вашим модулем / приложением, определены в массиве $ this-> dictionaries в файле дескриптора модуля. Вы можете редактировать этот файл вручную или использовать встроенный редактор.

Примечание. После определения (и повторной активации модуля) словари также отображаются в области настройки для пользователей-администраторов на %s. PermissionsDefDescTooltip=Разрешения, предоставляемые вашим модулем / приложением, определены в массиве $ this-> rights в файле дескриптора модуля. Вы можете редактировать этот файл вручную или использовать встроенный редактор.

Примечание. После определения (и повторной активации модуля) разрешения отображаются в настройках разрешений по умолчанию %s. -HooksDefDesc=Определите в свойстве module_parts['hooks'], в модуль файл, Список контекстов, когда ваш перехватчик должен быть выполнен (Список возможных контекстов можно найти с помощью поиска по запросу 'initHooks(' в ядре код).
Затем отредактируйте файл с помощью хуков код с код ваших подключаемых функций (Список подключаемых функций можно найти с помощью поиска по ' executeHooks' в ядре код). +HooksDefDesc=Define in the property module_parts['hooks'], in the module descriptor file, the list of contexts when your hook must be executed (the list of possible contexts can be found by a search on 'initHooks(' in core code).
Then edit the file with hooks code with the code of your hooked functions (the list of hookable functions can be found by a search on 'executeHooks' in core code). TriggerDefDesc=Определите в файле триггера код, который вы хотите выполнять при выполнении бизнес-события, внешнего по отношению к вашему модулю (события, инициированные другими модулями). SeeIDsInUse=См. Идентификаторы, используемые в вашей установке SeeReservedIDsRangeHere=См. Диапазон зарезервированных идентификаторов @@ -177,8 +177,8 @@ ApiObjectDeleted=API для объекта %s был успешно удален CRUDRead=Читать CRUDCreateWrite=создать или Обновить FailedToAddCodeIntoDescriptor=Не удалось добавить код в дескриптор. проверить что строковый комментарий "%s" все еще присутствует в файл . -DictionariesCreated=Словарь %s создан успешно -DictionaryDeleted=Словарь %s удален успешно +DictionariesCreated=Словарь %s создан успешно +DictionaryDeleted=Словарь %s удален успешно PropertyModuleUpdated=Свойство %s обновлено успешно InfoForApiFile=* При первом создании файл для каждого объекта будут созданы все методы .
* При нажатии кнопки remove вы просто удаляете все методы для выбранного объекта. SetupFile=Страница для модуль настройка diff --git a/htdocs/langs/ru_RU/mrp.lang b/htdocs/langs/ru_RU/mrp.lang index 038df26e7b9..d1478c7a8d6 100644 --- a/htdocs/langs/ru_RU/mrp.lang +++ b/htdocs/langs/ru_RU/mrp.lang @@ -27,13 +27,18 @@ ConfirmCloneBillOfMaterials=Вы уверены, что хотите клони ConfirmCloneMo=Вы действительно хотите клонировать заказ на производство %s? ManufacturingEfficiency=Эффективность производства ConsumptionEfficiency=Эффективность потребления -Consumption=Consumption +Consumption=Потребление ValueOfMeansLoss=Значение 0,95 означает в среднем 5%% потерь при изготовлении или разборке. ValueOfMeansLossForProductProduced=Значение 0.95 означает в среднем 5%% потерь произведенного продукта. DeleteBillOfMaterials=Удалить перечень элементов +CancelMo=отменить Производство заказ +MoCancelConsumedAndProducedLines=отменить также все потребленные и произведенные линии (удалить линии и откат Остатки) +ConfirmCancelMo=Вы действительно хотите в отменить это производство заказ? DeleteMo=Удалить производственный заказ ConfirmDeleteBillOfMaterials=Вы уверены, что хотите удалить эту спецификацию материалов? ConfirmDeleteMo=Вы действительно хотите удалить этот заказ на производство? +DeleteMoChild = удалить дочерние МО, связанные с этим МО %s +MoChildsDeleted = Все дочерние МО удалены. MenuMRP=Заказы на производство NewMO=Новый заказ на производство QtyToProduce=Кол-во для производства @@ -60,6 +65,8 @@ ToProduce=Производить ToObtain=Чтобы получить QtyAlreadyConsumed=Кол-во уже израсходовано QtyAlreadyProduced=Кол-во уже произведено +QtyAlreadyConsumedShort=Qty consumed +QtyAlreadyProducedShort=Qty produced QtyRequiredIfNoLoss=Кол-во, необходимое для производства количества, указанного в спецификации, если нет потерь (если эффективность производства равна 100%%) ConsumeOrProduce=Потребляйте или производите ConsumeAndProduceAll=Потребляйте и производите все @@ -102,7 +109,7 @@ NbOperatorsRequired=Требуемое количество операторов THMOperatorEstimated=Предполагаемый оператор THM THMMachineEstimated=Ориентировочная машина THM WorkstationType=Тип рабочего места -DefaultWorkstation=Default workstation +DefaultWorkstation=по умолчанию рабочая станция Human=Человек Machine=Машина HumanMachine=Человек / Машина @@ -112,13 +119,20 @@ THMEstimatedHelp=Эта ставка позволяет определить п BOM=Спецификации материалов CollapseBOMHelp=Вы можете определить отображение деталей номенклатуры по умолчанию в конфигурации модуля Спецификации материалов. MOAndLines=Производственные заказы и строки -MoChildGenerate=Generate Child Mo -ParentMo=MO Parent -MOChild=MO Child -BomCantAddChildBom=The nomenclature %s is already present in the tree leading to the nomenclature %s -BOMNetNeeds = BOM Net Needs -BOMProductsList=BOM's products -BOMServicesList=BOM's services -Manufacturing=Manufacturing -Disassemble=Disassemble -ProducedBy=Produced by +MoChildGenerate=Создать дочерний Мо +ParentMo=МО родитель +MOChild=МО Чайлд +BomCantAddChildBom=Номенклатура %s уже присутствует в дереве, ведущем к номенклатуре %s +BOMNetNeeds = Спецификация Чистые потребности +BOMProductsList=Спецификация продукты +BOMServicesList=Спецификация услуги +Manufacturing=Производство +Disassemble=Разобрать +ProducedBy=Произведено +QtyTot=Кол-во Итого + +QtyCantBeSplit= Количество Не может будет разделено +NoRemainQtyToDispatch=Не осталось количества для разделения + +THMOperatorEstimatedHelp=Ориентировочная стоимость часа работы оператора. Будет использоваться для оценки стоимости Спецификация с использованием этой рабочей станции. +THMMachineEstimatedHelp=Ориентировочная стоимость машины в час. Будет использоваться для оценки стоимости Спецификация с использованием этой рабочей станции. diff --git a/htdocs/langs/ru_RU/orders.lang b/htdocs/langs/ru_RU/orders.lang index 944d78612d4..001db0f507d 100644 --- a/htdocs/langs/ru_RU/orders.lang +++ b/htdocs/langs/ru_RU/orders.lang @@ -1,5 +1,5 @@ # Dolibarr language file - Source file is en_US - orders -OrderExists=заказ уже открыть связан с этим предложение, поэтому никаких других < создан span class='notranslate'>заказ
автоматически +OrderExists=An order was already open linked to this proposal, so no other order was created automatically OrdersArea=Раздел заказов клиентов SuppliersOrdersArea=Область заказов на закупку OrderCard=Карточка заказа diff --git a/htdocs/langs/ru_RU/partnership.lang b/htdocs/langs/ru_RU/partnership.lang index 9cbf2834408..be3d7b3a2c4 100644 --- a/htdocs/langs/ru_RU/partnership.lang +++ b/htdocs/langs/ru_RU/partnership.lang @@ -92,7 +92,6 @@ LastCheckBacklink=Дата последней проверки URL NewPartnershipRequest=Новый запрос на партнерство NewPartnershipRequestDesc=Эта форма позволяет вам подать заявку на участие в одной из наших партнерских программ. Если вам нужна помощь в заполнении этой формы, свяжитесь с нами по электронной почте %s . -ThisUrlMustContainsAtLeastOneLinkToWebsite=Эта страница должна содержать хотя бы один ссылка в одном из доменов следующий: %s +ThisUrlMustContainsAtLeastOneLinkToWebsite=This page must contains at least one link to one of the following domain: %s IPOfApplicant=ИП заявителя - diff --git a/htdocs/langs/ru_RU/products.lang b/htdocs/langs/ru_RU/products.lang index e1b3bc46ae6..315af2461af 100644 --- a/htdocs/langs/ru_RU/products.lang +++ b/htdocs/langs/ru_RU/products.lang @@ -80,8 +80,8 @@ SoldAmount=Сумма продажи PurchasedAmount=Сумма покупки NewPrice=Новая цена MinPrice=Мин. цена продажи -MinPriceHT=Min. selling price (excl. tax) -MinPriceTTC=Min. selling price (inc. tax) +MinPriceHT=Мин. цена продажи (исключая налог) +MinPriceTTC=Мин. цена продажи (включая налог) EditSellingPriceLabel=Изменить ярлык цены продажи CantBeLessThanMinPrice=The selling price can't be lower than minimum allowed for this product (%s without tax). This message can also appear if you type a significant discount. CantBeLessThanMinPriceInclTax=The selling price can't be lower than minimum allowed for this product (%s including taxes). This message can also appears if you type a too important discount. @@ -208,11 +208,6 @@ unitSET=Установить unitS=Второй unitH=Час unitD=День -unitG=Грамм -unitM=Метр -unitLM=Линейный метр -unitM2=Квадратный метр -unitM3=Кубический метр unitL=Литр unitT=тонна unitKG=кг @@ -221,6 +216,7 @@ unitMG=мг unitLB=фунт unitOZ=унция unitM=Метр +unitLM=Линейный метр unitDM=дм unitCM=см unitMM=мм @@ -350,7 +346,7 @@ UseProductFournDesc=Добавьте функцию для определени ProductSupplierDescription=Описание продавца продукта UseProductSupplierPackaging=Используйте функцию «упаковки» для округления количества до заданного кратного значения (при добавлении/обновлении строки в документах поставщика пересчитывайте количество и закупочные цены в соответствии с более высоким множителем, установленным в закупочных ценах продукта) PackagingForThisProduct=Упаковка количества -PackagingForThisProductDesc=You will automatically purchase a multiple of this quantity. +PackagingForThisProductDesc=Вы получите автоматически покупка кратное этому количеству. QtyRecalculatedWithPackaging=Количество линии пересчитано в соответствии с упаковкой поставщика. #Attributes @@ -391,7 +387,7 @@ ErrorDeletingGeneratedProducts=При попытке удалить сущест NbOfDifferentValues=Кол-во разных значений NbProducts=Количество продуктов ParentProduct=Родительский продукт -ParentProductOfVariant=Parent product of variant +ParentProductOfVariant=родитель продукт варианта HideChildProducts=Скрыть варианты продуктов ShowChildProducts=Показать варианты продуктов NoEditVariants=Перейдите в карточку родительского продукта и отредактируйте влияние вариантов на цену на вкладке вариантов. @@ -404,7 +400,7 @@ ActionAvailableOnVariantProductOnly=Действие доступно тольк ProductsPricePerCustomer=Цены на продукцию для каждого покупателя ProductSupplierExtraFields=Дополнительные атрибуты (цены поставщиков) DeleteLinkedProduct=Удалить дочерний продукт, связанный с комбинацией -AmountUsedToUpdateWAP=Unit amount to use to update the Weighted Average Price +AmountUsedToUpdateWAP=ед.измерения сумма, используемая для обновления средневзвешенного значения цена PMPValue=Средневзвешенная цена PMPValueShort=СВЦ mandatoryperiod=Обязательные периоды @@ -421,12 +417,12 @@ ProductsMergeSuccess=Продукты были объединены ErrorsProductsMerge=Ошибки в объединении продуктов SwitchOnSaleStatus=Включить статус продажи SwitchOnPurchaseStatus=Включить статус покупки -UpdatePrice=Increase/decrease customer price -StockMouvementExtraFields= Extra Fields (stock movement) +UpdatePrice=Увеличение/уменьшить клиент цена +StockMouvementExtraFields= Дополнительные поля (перемещение остаток) InventoryExtraFields= Дополнительные поля (инвентарь) ScanOrTypeOrCopyPasteYourBarCodes=Отсканируйте или введите или скопируйте/вставьте свои штрих-коды PuttingPricesUpToDate=Обновить цены с текущими известными ценами -PuttingDescUpToDate=Update descriptions with current known descriptions +PuttingDescUpToDate=Обновить описания, используя текущие известные описания. PMPExpected=Ожидаемый PMP ExpectedValuation=Ожидаемая оценка PMPReal=Настоящий пмп @@ -434,6 +430,9 @@ RealValuation=Реальная оценка ConfirmEditExtrafield = Выберите дополнительное поле, которое вы хотите изменить ConfirmEditExtrafieldQuestion = Вы уверены, что хотите изменить это дополнительное поле? ModifyValueExtrafields = Изменить значение дополнительного поля -OrProductsWithCategories=Or products with tags/categories -WarningTransferBatchStockMouvToGlobal = If you want to deserialize this product, all its serialized stock will be transformed into global stock -WarningConvertFromBatchToSerial=If you currently have a quantity higher or equal to 2 for the product, switching to this choice means you will still have a product with different objects of the same batch (while you want a unique serial number). The duplicate will remain until an inventory or a manual stock movement to fix this is done. +OrProductsWithCategories=Или продукты с ярлыки/категории +WarningTransferBatchStockMouvToGlobal = Если вы хотите десериализовать этот продукт, все его сериализованные остаток будут преобразованы в глобальные остаток +WarningConvertFromBatchToSerial=Если в настоящее время у вас есть количество, превышающее или равное 2 для продукт, переключение на этот вариант означает, что у вас все еще будет продукт с разными объектами одного пакета (хотя вам нужен уникальный Серийный номер). Дубликат останется до тех пор, пока не будет произведена инвентаризация или перемещение вручную остаток для исправления ситуации. +AllowStockMovementVariantParent=Also records stock movements on parent products of variant products +AllowStockMovementVariantParentHelp=By default, a parent of a variant is a virtual product, so no stock is managed for it. By enabling this option, a stock will be managed for parent products and each time a stock quantity is modified for a variant product, the same quantity will be modified for the parent product. You should not need this option, except if you are using variant to manage the same product than parent (but with different descriptions, prices...) +ConfirmSetToDraftInventory=Are you sure you want to go back to Draft status?
The quantities currently set in the inventory will be reset. diff --git a/htdocs/langs/ru_RU/stocks.lang b/htdocs/langs/ru_RU/stocks.lang index 1f54e81f248..66731f03e2b 100644 --- a/htdocs/langs/ru_RU/stocks.lang +++ b/htdocs/langs/ru_RU/stocks.lang @@ -283,7 +283,7 @@ ModuleStockTransferDesc=Расширенное управление остато StockTransferNew=Новый остаток перевод StockTransferList=остаток передает Список ConfirmValidateStockTransfer=Вы действительно хотите на подтвердить этот Остатки перевод со ссылкой %s ? -ConfirmDestock=уменьшить из Остатки с перевод %s +ConfirmDestock=уменьшить из Остатки с перевод %s ConfirmDestockCancel=отменить уменьшить из Остатки с перевод %s DestockAllProduct=уменьшить из Остатки DestockAllProductCancel=отменить уменьшить из Остатки @@ -295,8 +295,8 @@ DatePrevueDepart=Предполагаемый дата отбытия DateReelleDepart=действительный дата отправления DatePrevueArrivee=Предполагаемое дата прибытия DateReelleArrivee=действительный дата прибытия -HelpWarehouseStockTransferSource=Если этот склад установлен, только сам и его дочерние элементы будут доступны в качестве источника склад< /пролет> -HelpWarehouseStockTransferDestination=Если этот склад установлен, только сам и его дочерние элементы будут доступны в качестве пункта назначения склад< /пролет> +HelpWarehouseStockTransferSource=If this warehouse is set, only itself and its children will be available as source warehouse +HelpWarehouseStockTransferDestination=If this warehouse is set, only itself and its children will be available as destination warehouse LeadTimeForWarning=лид время до оповещения (в днях) TypeContact_stocktransfer_internal_STFROM=Отправитель Остатки перевод TypeContact_stocktransfer_internal_STDEST=Получатель Остатки перевод @@ -326,7 +326,7 @@ ReverseConfirmed=остаток движение было отменено ус WarningThisWIllAlsoDeleteStock=Внимание! При этом также будут уничтожены все количества в остаток в склад. ValidateInventory=Инвентарь подтверждение IncludeSubWarehouse=Включить под-склад ? -IncludeSubWarehouseExplanation=проверить в этом поле, если вы хотите включить все суб-Склады связанного склад в инвентаре +IncludeSubWarehouseExplanation=Check this box if you want to include all sub-warehouses of the associated warehouse in the inventory DeleteBatch=удалить партия/serial ConfirmDeleteBatch=Вы действительно хотите до удалить партия/serial ? WarehouseUsage=склад использование diff --git a/htdocs/langs/ru_RU/workflow.lang b/htdocs/langs/ru_RU/workflow.lang index 59f76192b17..5214a5f8fb7 100644 --- a/htdocs/langs/ru_RU/workflow.lang +++ b/htdocs/langs/ru_RU/workflow.lang @@ -9,26 +9,26 @@ descWORKFLOW_CONTRACT_AUTOCREATE_INVOICE=Автоматически создав descWORKFLOW_ORDER_AUTOCREATE_INVOICE=Автоматически создавать счет клиента после закрытия заказа на продажу (новый счет будет иметь ту же сумму, что и заказ) descWORKFLOW_TICKET_CREATE_INTERVENTION=При создании заявки автоматически создайте вмешательство. # Autoclassify customer proposal or order -descWORKFLOW_ORDER_CLASSIFY_BILLED_PROPAL=Classify linked source proposals as billed when a sales order is set to billed (and if the amount of the order is the same as the total amount of the signed linked proposals) +descWORKFLOW_ORDER_CLASSIFY_BILLED_PROPAL=Классифицировать связанный источник предложения как счет выставлен, если продажи заказ имеет значение счет выставлен (и, если количество заказ соответствует общей сумме подписанной ссылки предложения) descWORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL=Classify linked source proposals as billed when a customer invoice is validated (and if the amount of the invoice is the same as the total amount of the signed linked proposals) -descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER=Classify linked source sales order as billed when a customer invoice is validated (and if the amount of the invoice is the same as the total amount of the linked sales orders). If you have 1 invoice validated for n orders, this may set all orders to billed too. -descWORKFLOW_INVOICE_CLASSIFY_BILLED_ORDER=Classify linked source sales orders as billed when a customer invoice is set to paid (and if the amount of the invoice is the same as the total amount of the linked sales orders). If you have 1 invoice set billed for n orders, this may set all orders to billed too. -descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING=Classify linked source sales orders as shipped when a shipment is validated (and if the quantity shipped by all shipments is the same as in the order to update) +descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER=Классифицировать связанный источник продажи заказ как счет выставлен, когда счет-фактура клиента проверяется (и, если сумма счет-фактура равна общей сумме связанные заказы продажи). Если у вас есть 1 счет-фактура, проверенный для n заказов, это также может установить для всех заказов значение счет выставлен. +descWORKFLOW_INVOICE_CLASSIFY_BILLED_ORDER=Классифицировать связанный источник продажи как счет выставлен, если для счет-фактура клиента установлено значение Оплачен (и, если сумма счет-фактура равна общей сумме количество связанных продажи заказов). Если у вас есть 1 счет-фактура set счет выставлен для n заказов, это может установить для всех заказов значение счет выставлен тоже. +descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING=Классифицировать заказы из связанного источника продажи как отгруженные, если отгрузка подтверждена (и, если количество, отгруженное всеми поставками, такое же, как в заказ для обновления) descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING_CLOSED=Классифицируйте связанный исходный заказ на продажу как отгруженный, когда отгрузка закрывается (и если количество, отгруженное всеми отгрузками, такое же, как в заказе на обновление) # Autoclassify purchase proposal descWORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL=Classify linked source vendor proposal as billed when vendor invoice is validated (and if the amount of the invoice is the same as the total amount of the linked proposals) # Autoclassify purchase order -descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER=Classify linked source purchase order as billed when vendor invoice is validated (and if the amount of the invoice is the same as the total amount of the linked orders) +descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER=Классифицировать связанный источник покупка заказ как счет выставлен, если поставщик счет-фактура проверяется (и, если сумма счет-фактура равна общей сумме связанные заказы) descWORKFLOW_ORDER_CLASSIFY_RECEIVED_RECEPTION=Классифицировать связанный исходный заказ на покупку как полученный, когда прием подтвержден (и если количество, полученное всеми приемами, такое же, как в заказе на покупку для обновления) descWORKFLOW_ORDER_CLASSIFY_RECEIVED_RECEPTION_CLOSED=Классифицировать связанный исходный заказ на покупку как полученный, когда прием закрыт (и если количество, полученное всеми приемами, такое же, как в заказе на покупку для обновления) # Autoclassify shipment -descWORKFLOW_SHIPPING_CLASSIFY_CLOSED_INVOICE=Classify linked source shipment as closed when a customer invoice is validated (and if the amount of the invoice is the same as the total amount of the linked shipments) -descWORKFLOW_SHIPPING_CLASSIFY_BILLED_INVOICE=Classify linked source shipment as billed when a customer invoice is validated (and if the amount of the invoice is the same as the total amount of the linked shipments) +descWORKFLOW_SHIPPING_CLASSIFY_CLOSED_INVOICE=Классифицировать поставку связанного источника как закрытую, если счет-фактура клиента подтвержден (и, если сумма счет-фактура соответствует общей сумме связанных поставок) +descWORKFLOW_SHIPPING_CLASSIFY_BILLED_INVOICE=Классифицировать отправку связанного источника как счет выставлен, если счет-фактура клиента подтвержден (и, если сумма счет-фактура равна общей сумме связанных отправлений) # Autoclassify receptions -descWORKFLOW_RECEPTION_CLASSIFY_CLOSED_INVOICE=Classify linked source receptions as billed when a purchase invoice is validated (and if the amount of the invoice is the same as the total amount of the linked receptions) -descWORKFLOW_RECEPTION_CLASSIFY_BILLED_INVOICE=Classify linked source receptions as billed when a purchase invoice is validated (and if the amount of the invoice is the same as the total amount of the linked receptions) +descWORKFLOW_RECEPTION_CLASSIFY_CLOSED_INVOICE=Классифицировать приемы связанных источников как счет выставлен, если покупка счет-фактура проверен (и, если сумма счет-фактура равна общей сумме связанных приемов) +descWORKFLOW_RECEPTION_CLASSIFY_BILLED_INVOICE=Классифицировать приемы связанных источников как счет выставлен, если покупка счет-фактура проверен (и, если сумма счет-фактура равна общей сумме связанных приемов) # Automatically link ticket to contract -descWORKFLOW_TICKET_LINK_CONTRACT=When creating a ticket, link all available contracts of matching third parties +descWORKFLOW_TICKET_LINK_CONTRACT=При создании талон, ссылка всех доступных контрактов соответствия третьему стороны descWORKFLOW_TICKET_USE_PARENT_COMPANY_CONTRACTS=При привязке договоров искать среди договоров материнских компаний # Autoclose intervention descWORKFLOW_TICKET_CLOSE_INTERVENTION=Закройте все вмешательства, связанные с заявкой, когда заявка закрыта diff --git a/htdocs/langs/ru_UA/errors.lang b/htdocs/langs/ru_UA/errors.lang new file mode 100644 index 00000000000..a2f9be5ee1f --- /dev/null +++ b/htdocs/langs/ru_UA/errors.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - errors +ErrorParameterMustBeEnabledToAllwoThisFeature=Error, parameter %s must be enabled into conf/conf.php<> to allow use of Command Line Interface by the internal job scheduler diff --git a/htdocs/langs/sk_SK/accountancy.lang b/htdocs/langs/sk_SK/accountancy.lang index ac4edd65d27..e5cde6708c1 100644 --- a/htdocs/langs/sk_SK/accountancy.lang +++ b/htdocs/langs/sk_SK/accountancy.lang @@ -335,7 +335,6 @@ CategoryDeleted=Kategória pre účtovný účet bola odstránená AccountingJournals=Účtovné denníky AccountingJournal=Účtovný denník NewAccountingJournal=Nový účtovný denník -ShowAccountingJournal=Zobraziť účtovný denník NatureOfJournal=Povaha časopisu AccountingJournalType1=Rôzne operácie AccountingJournalType2=Predaje @@ -353,7 +352,7 @@ ACCOUNTING_DISABLE_BINDING_ON_SALES=Zakázať viazanie a prevod v účtovníctve ACCOUNTING_DISABLE_BINDING_ON_PURCHASES=Zakázať viazanie a prevod v účtovníctve pri nákupoch (faktúry dodávateľa sa nebudú brať do úvahy v účtovníctve) ACCOUNTING_DISABLE_BINDING_ON_EXPENSEREPORTS=Zakázať viazanie a prevod v účtovníctve na výkazoch výdavkov (výdavkové výkazy sa nebudú brať do úvahy v účtovníctve) ACCOUNTING_ENABLE_LETTERING=Povoliť funkciu písma v účtovníctve -ACCOUNTING_ENABLE_LETTERING_DESC=Keď je táto možnosť zapnutá, môžete definovať pre každý účtovný zápis kód, aby ste mohli zoskupovať rôzne účtovné pohyby. V minulosti, keď sa rôzne časopisy spravovali nezávisle, bola táto funkcia potrebná na zoskupenie línií pohybu rôznych časopisov. S účtovníctvom Dolibarr sa však takýto kód sledovania nazýva "%sb09a4f739f17 span>" je už uložený automaticky, takže automatické písanie je už vykonané, bez rizika chyby, takže táto funkcia je pre bežné použitie zbytočná. Funkcia ručného písania je určená pre koncových používateľov, ktorí skutočne neveria počítačovému stroju, ktorý prenáša údaje v účtovníctve. +ACCOUNTING_ENABLE_LETTERING_DESC=When this options is enabled, you can define, on each accounting entry, a code so you can group different accounting movements together. In the past, when different journals was managed independently, this feature was necessary to group movement lines of different journals together. However, with Dolibarr accountancy, such a tracking code, called "%s" is already saved automatically, so an automatic lettering is already done, with no risk of error so this feature has become useless for a common usage. Manual lettering feature is provided for end users that really don't trust the computer engine making the transfer of data in accountancy. EnablingThisFeatureIsNotNecessary=Povolenie tejto funkcie už nie je potrebné pre dôslednú správu účtovníctva. ACCOUNTING_ENABLE_AUTOLETTERING=Povoliť automatické písanie pri prenose do účtovníctva ACCOUNTING_ENABLE_AUTOLETTERING_DESC=Kód pre písmo sa generuje automaticky a zvyšuje a nevyberá si ho koncový používateľ diff --git a/htdocs/langs/sk_SK/admin.lang b/htdocs/langs/sk_SK/admin.lang index e94246e391d..b4c2b5ac4cd 100644 --- a/htdocs/langs/sk_SK/admin.lang +++ b/htdocs/langs/sk_SK/admin.lang @@ -106,7 +106,7 @@ NextValueForInvoices=Ďalšie hodnota (faktúry) NextValueForCreditNotes=Ďalšie hodnota (dobropisov) NextValueForDeposit=Ďalšia hodnota (záloha) NextValueForReplacements=Ďalšie hodnota (náhrady) -MustBeLowerThanPHPLimit=Poznámka: Vaša konfigurácia PHP momentálne obmedzuje maximálnu veľkosť súboru na nahrávanie do %s span> %s, bez ohľadu na hodnotu tohto parametra +MustBeLowerThanPHPLimit=Note: your PHP configuration currently limits the maximum filesize for upload to %s %s, irrespective of the value of this parameter NoMaxSizeByPHPLimit=Poznámka: No limit je nastavený v konfigurácii PHP MaxSizeForUploadedFiles=Maximálna veľkosť nahraných súborov (0, aby tak zabránil akejkoľvek odosielanie) UseCaptchaCode=Použite grafický kód (CAPTCHA) na prihlasovacej stránke a niektorých verejných stránkach @@ -163,7 +163,7 @@ PurgeAreaDesc=Táto stránka vám umožňuje vymazať všetky súbory vygenerova PurgeDeleteLogFile=Odstráňte súbory denníka vrátane %s (definovaný pre modul Sys riziko straty údajov) PurgeDeleteTemporaryFiles=Odstráňte všetky protokoly a dočasné súbory (bez rizika straty údajov). Parameter môže byť 'tempfilesold', 'logfiles' alebo oba 'tempfilesold+logfiles'. Poznámka: Vymazanie dočasných súborov sa vykoná iba vtedy, ak bol dočasný adresár vytvorený pred viac ako 24 hodinami. PurgeDeleteTemporaryFilesShort=Odstráňte denník a dočasné súbory (bez rizika straty údajov) -PurgeDeleteAllFilesInDocumentsDir=Odstráňte všetky súbory v adresári: %s.%s.%s. 'notranslate'>
Týmto sa vymažú všetky vygenerované dokumenty súvisiace s prvkami (tretie strany, faktúry atď...), súbory nahrané do modulu ECM, výpisy zálohy databázy a dočasné súbory. +PurgeDeleteAllFilesInDocumentsDir=Delete all files in directory: %s.
This will delete all generated documents related to elements (third parties, invoices etc...), files uploaded into the ECM module, database backup dumps and temporary files. PurgeRunNow=Vyčistiť teraz PurgeNothingToDelete=Žiadne súbory alebo priečinky na zmazanie PurgeNDirectoriesDeleted=%s súbory alebo adresáre odstránené. @@ -221,13 +221,13 @@ ModulesDevelopDesc=Môžete si tiež vytvoriť svoj vlastný modul alebo nájsť DOLISTOREdescriptionLong=Namiesto zapínania www.dolistore.com webovej stránky na nájdenie externého modulu môžete použiť tento vložený nástroj, ktorý vykoná vyhľadávanie na externom trhu za vás (môže byť pomalé, vyžaduje prístup na internet)... FreeModule=zadarmo CompatibleUpTo=Kompatibilné s verziou %s -NotCompatible=Zdá sa, že tento modul nie je kompatibilný s vaším Dolibarr %s (Min. %s – Max b0ecb2zec87f49 rozpätie>). -CompatibleAfterUpdate=Tento modul vyžaduje aktualizáciu vášho Dolibarr %s (min. %s – max. %s >). +NotCompatible=This module does not seem compatible with your Dolibarr %s (Min %s - Max %s). +CompatibleAfterUpdate=This module requires an update to your Dolibarr %s (Min %s - Max %s). SeeInMarkerPlace=Pozrite si na Trhovisku SeeSetupOfModule=Pozrite si nastavenie modulu %s SeeSetupPage=Pozrite si stránku nastavenia na %s SeeReportPage=Pozrite si stránku správy na adrese %s -SetOptionTo=Nastavte možnosť %s na $dolibarr_main_db_pass="...";b0342bzccfda19 >by
$dolibarr_main_db_pass="crypted:b0ecb2ec87f49";f span class='notranslate'> -InstrucToClearPass=Ak chcete, aby bolo heslo dekódované (vymazané) do súboru conf.php, nahraďte riadok
$dolibarr_main_db_pass="crypted:...";b09a4b739f17f8z'no
by
$dolibarr_main_db_pass="65d40 -ForAnswersSeeForum=V prípade akýchkoľvek ďalších otázok alebo pomoci môžete použiť fórum Dolibarr:
/span>%s +ForDocumentationSeeWiki=For user or developer documentation (Doc, FAQs...),
take a look at the Dolibarr Wiki:
%s +ForAnswersSeeForum=For any other questions/help, you can use the Dolibarr forum:
%s HelpCenterDesc1=Tu je niekoľko zdrojov na získanie pomoci a podpory s Dolibarrom. HelpCenterDesc2=Niektoré z týchto zdrojov sú dostupné iba v angličtine. CurrentMenuHandler=Aktuálna ponuka handler @@ -290,8 +290,8 @@ EMailsSetup=Nastavenie e-mailov EMailsDesc=Táto stránka vám umožňuje nastaviť parametre alebo možnosti odosielania e-mailov. EmailSenderProfiles=Profily odosielateľov e-mailov EMailsSenderProfileDesc=Túto sekciu môžete ponechať prázdnu. Ak sem zadáte nejaké e-maily, pridajú sa do zoznamu možných odosielateľov v rozbaľovacom poli, keď napíšete nový e-mail. -MAIN_MAIL_SMTP_PORT=Port SMTP/SMTPS (predvolená hodnota v php.ini: %sb09a4f739f17 >) -MAIN_MAIL_SMTP_SERVER=Hostiteľ SMTP/SMTPS (predvolená hodnota v php.ini: %sb09a4f739f17 >) +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: %s) +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: %s) MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=Port SMTP/SMTPS MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=Hostiteľ SMTP/SMTPS MAIN_MAIL_EMAIL_FROM=E-mail odosielateľa pre automatické e-maily @@ -345,12 +345,12 @@ ThisIsAlternativeProcessToFollow=Toto je alternatívne nastavenie na manuálne s StepNb=Krok %s FindPackageFromWebSite=Nájdite balík, ktorý poskytuje funkcie, ktoré potrebujete (napríklad na oficiálnej webovej stránke %s). DownloadPackageFromWebSite=Stiahnite si balík (napríklad z oficiálnej webovej stránky %s). -UnpackPackageInDolibarrRoot=Rozbaľte/rozbaľte zabalené súbory do adresára vášho servera Dolibarr: %sb09a4b839fb09a4b839f > +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into your Dolibarr server directory: %s UnpackPackageInModulesRoot=Ak chcete nasadiť/inštalovať externý modul, musíte rozbaliť/rozbaliť archívny súbor do adresára servera vyhradeného pre externé moduly:
%s SetupIsReadyForUse=Nasadenie modulu je dokončené. Musíte však povoliť a nastaviť modul vo svojej aplikácii tak, že prejdete na moduly nastavenia stránky: %s
. NotExistsDirect=Alternatívny koreňový adresár nie je definovaný pre existujúci adresár.
InfDirAlt=Od verzie 3 je možné definovať alternatívny koreňový adresár. To vám umožňuje ukladať do vyhradeného adresára zásuvné moduly a vlastné šablóny.
Stačí vytvoriť adresár v koreňovom adresári Dolibarr (napr.: custom).
-InfDirExample=
Potom to deklarujte v súbore conf.phpb0a65d071f6>
$dolibarr_main_url_root_alt='/custom'
$dolibarr_main_document_root_alt/docht='/span> 'notranslate'>
Ak sú tieto riadky zakomentované znakom „#“, ak ich chcete povoliť, odkomentujte ich odstránením znaku „#“. +InfDirExample=
Then declare it in the file conf.php
$dolibarr_main_url_root_alt='/custom'
$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'
If these lines are commented with "#", to enable them, just uncomment by removing the "#" character. YouCanSubmitFile=Súbor .zip balíka modulu môžete nahrať odtiaľto: CurrentVersion=Dolibarr aktuálna verzia CallUpdatePage=Prejdite na stránku, ktorá aktualizuje štruktúru databázy a údaje: %s. @@ -361,14 +361,14 @@ LastActivationIP=Posledná aktivačná IP LastActivationVersion=Najnovšia verzia aktivácie UpdateServerOffline=Aktualizovať server offline WithCounter=Spravovať počítadlo -GenericMaskCodes=Môžete zadať akúkoľvek masku číslovania. V tejto maske možno použiť nasledujúce značky:
{000000}b09a4b839f /span> zodpovedá číslu, ktoré sa zvýši pri každom %s. Zadajte toľko núl, koľko je požadovaná dĺžka počítadla. Počítadlo bude doplnené nulami zľava, aby bolo toľko núl ako maska.
{000000+000}, ale rovnaký ako predchádzajúci posun zodpovedajúci číslu napravo od znamienka + sa použije od prvého %s.
{000000@x} ako predchádzajúci, ale rovnaké počítadlo sa vynuluje po dosiahnutí mesiaca x (x medzi 1 a 12, alebo 0, ak chcete použiť prvé mesiace fiškálneho roka definovaného vo vašej konfigurácii, alebo 99 na vynulovanie každý mesiac). Ak sa použije táto možnosť a x je 2 alebo vyššie, potom sa vyžaduje aj postupnosť {yy}{mm} alebo {yyyy}{mm}.
{dd} deň (01 až 3). span class='notranslate'>
{mm} mesiac (01 až 12). class='notranslate'>
{yy}, {yyyy} alebo {y}b09a4b739f17f8 rok nad 2, 4 alebo 1 číslo.
-GenericMaskCodes2={cccc} klientsky kód na'n znakov
{cccc000}b09fa4b8>39 klient
b06a5f451419e8z Kód typu tretej strany na n znakoch (pozri menu Domov - Nastavenie - Slovník - Typy tretích strán). Ak pridáte túto značku, počítadlo sa bude líšiť pre každý typ tretej strany.
+GenericMaskCodes=You may enter any numbering mask. In this mask, the following tags can be used:
{000000} corresponds to a number which will be incremented on each %s. Enter as many zeros as the desired length of the counter. The counter will be completed by zeros from the left in order to have as many zeros as the mask.
{000000+000} same as the previous one but an offset corresponding to the number to the right of the + sign is applied starting on the first %s.
{000000@x} same as the previous one but the counter is reset to zero when month x is reached (x between 1 and 12, or 0 to use the early months of fiscal year defined in your configuration, or 99 to reset to zero every month). If this option is used and x is 2 or higher, then the sequence {yy}{mm} or {yyyy}{mm} is also required.
{dd} day (01 to 31).
{mm} month (01 to 12).
{yy}, {yyyy} or {y} year over 2, 4 or 1 numbers.
+GenericMaskCodes2={cccc} the client code on n characters
{cccc000} the client code on n characters is followed by a counter dedicated to the customer. This counter dedicated to customer is reset at same time as the global counter.
{tttt} The code of third party type on n characters (see menu Home - Setup - Dictionary - Types of third parties). If you add this tag, the counter will be different for each type of third party.
GenericMaskCodes3=Všetky ostatné znaky v maske zostanú nedotknuté.
Medzery nie sú povolené.
GenericMaskCodes3EAN=Všetky ostatné znaky v maske zostanú nedotknuté (okrem * alebo ? na 13. pozícii v EAN13).
Medzery nie sú povolené.
span>V EAN13 by mal byť posledný znak za posledným } na 13. pozícii * alebo ? . Bude nahradený vypočítaným kľúčom.
GenericMaskCodes4a=Príklad na 99. %s tretej strany TheCompany s dátumom 2023-01-31:
-GenericMaskCodes4b=Príklad na tretej strane vytvorený 31.01.2023:b0342fccfda19b > -GenericMaskCodes4c=Príklad produktu vytvoreného 31.01.2023:
-GenericMaskCodes5=ABC{yy}{mm}-{000000} poskytne b0aeeABC2301-000099

b0aee833065101+01 }-ZZZ/{dd}/XXX
poskytne 0199-ZZZ/31/XXX
IN{yy}{mm}-{0000}-{t} poskytne IN2301-0099-Ab09a4b730 typ spoločnostiak je typ spoločnosti 8 'Responsable Inscripto' s kódom pre typ, ktorý je 'A_RI' +GenericMaskCodes4b=Example on third party created on 2023-01-31:
+GenericMaskCodes4c=Example on product created on 2023-01-31:
+GenericMaskCodes5=ABC{yy}{mm}-{000000} will give ABC2301-000099
{0000+100@1}-ZZZ/{dd}/XXX will give 0199-ZZZ/31/XXX
IN{yy}{mm}-{0000}-{t} will give IN2301-0099-A if the type of company is 'Responsable Inscripto' with code for type that is 'A_RI' GenericNumRefModelDesc=Vracia číslo prispôsobiteľný podľa tvarovanou maskou. ServerAvailableOnIPOrPort=Server je k dispozícii na adrese %s na porte %s ServerNotAvailableOnIPOrPort=Server nie je k dispozícii na adrese %s na porte %s @@ -390,9 +390,9 @@ LanguageFilesCachedIntoShmopSharedMemory=Súbory. Lang vložený do zdieľanej p LanguageFile=Jazykový súbor ExamplesWithCurrentSetup=Príklady s aktuálnou konfiguráciou ListOfDirectories=Zoznam OpenDocument šablóny zoznamov -ListOfDirectoriesForModelGenODT=Zoznam adresárov obsahujúcich súbory šablón vo formáte OpenDocument.

Sem vložte úplnú cestu k adresárom.
Pridajte návrat vozíka medzi každý adresár.
Ak chcete pridať adresár modulu GED, pridajte sem >DOL_DATA_ROOT/ecm/yourdirectoryname.
b0342fz0Files in 9 directories in musí končiť reťazcom .odt alebo b0aee83365837.ods0 ='notranslate'>
. +ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.

Put here full path of directories.
Add a carriage return between eah directory.
To add a directory of the GED module, add here DOL_DATA_ROOT/ecm/yourdirectoryname.

Files in those directories must end with .odt or .ods. NumberOfModelFilesFound=Počet súborov šablón ODT/ODS nájdených v týchto adresároch -ExampleOfDirectoriesForModelGen=Príklady syntaxe:
c:\\myapp\\mydocumentdir\\mysubdir
/home/myapp/mydocumentdir
DOL_DATA_ROOT/ecm/ecmdir +ExampleOfDirectoriesForModelGen=Examples of syntax:
c:\\myapp\\mydocumentdir\\mysubdir
/home/myapp/mydocumentdir/mysubdir
DOL_DATA_ROOT/ecm/ecmdir FollowingSubstitutionKeysCanBeUsed=
Ak chcete vedieť, ako vytvoriť svoje ODT šablóny dokumentov pred ich uložením do týchto adresárov, prečítajte si wiki dokumentácie: FullListOnOnlineDocumentation=https://wiki.dolibarr.org/index.php/Create_an_ODT_document_template FirstnameNamePosition=Pozícia Meno / Priezvisko @@ -461,10 +461,10 @@ ComputedFormulaDesc=Tu môžete zadať vzorec pomocou iných vlastností objektu Computedpersistent=Uložiť vypočítané pole ComputedpersistentDesc=Vypočítané nadbytočné polia sa uložia do databázy, avšak hodnota sa prepočíta len pri zmene objektu tohto poľa. Ak vypočítané pole závisí od iných objektov alebo globálnych údajov, táto hodnota môže byť nesprávna!! ExtrafieldParamHelpPassword=Ak toto pole ponecháte prázdne, znamená to, že táto hodnota bude uložená BEZ šifrovania (pole je na obrazovke iba skryté hviezdičkami).

Zadajte hodnota 'dolcrypt' na zakódovanie hodnoty pomocou reverzibilného šifrovacieho algoritmu. Jasné údaje možno stále poznať a upravovať, ale sú zašifrované do databázy.

Zadajte 'auto' (alebo 'md5', 'sha256', 'password_hash', ...) na použitie predvoleného algoritmu šifrovania hesla (alebo md5, sha256, password_hash...) na uloženie nevratného hashovaného hesla do databázy (žiadny spôsob, ako získať pôvodnú hodnotu) -ExtrafieldParamHelpselect=Zoznam hodnôt musí byť riadky s formátom key,value (kde kľúč nemôže byť '0')

:
1,value1
2,value2b0342fccfda19bzz0,3 span class='notranslate'>
...

Aby bol zoznam závislý od iného zoznam doplnkových atribútov:
1,value1|options_parent_list_codeb0bac>3408 parent_key
2,value2|options_parent_list_codeb0ae_key :parentba8 class='notranslate'>

Ak chcete, aby bol zoznam závislý od iného zoznamu:
1, value1|parent_list_code:parent_keyb0342fccfda>29bz0 class='notranslate'>parent_list_code:parent_key -ExtrafieldParamHelpcheckbox=Zoznam hodnôt musí byť riadky s formátom key,value (kde kľúč nemôže byť '0')

:
1,value1
2,value2
span class='notranslate'>
... -ExtrafieldParamHelpradio=Zoznam hodnôt musí byť riadky s formátom key,value (kde kľúč nemôže byť '0')

:
1,value1
2,value2
span class='notranslate'>
... -ExtrafieldParamHelpsellist=Zoznam hodnôt pochádza z tabuľky
Syntax: table_name:label_field:id_field::filtersql
Príklad: c_typid:libelle: ::filtersql

- id_field je nevyhnutne primárny kľúč typu intb0342fccfda19b - filtersql je podmienka SQL. Môže to byť jednoduchý test (napr. active=1) na zobrazenie iba aktívnej hodnoty
Vo filtri môžete použiť aj $ID$, čo je aktuálne ID aktuálneho objektu
Ak chcete vo filtri použiť SELECT, použite kľúčové slovo $SEL$ na obídenie ochrany proti vstreknutiu.
ak chcete filtrovať extrapole použite syntax extra.fieldcode=... (kde kód poľa je kód extrapola)

Ak chcete mať zoznam závisí od iného zoznamu doplnkových atribútov:
c_typent:libelle:id:options_parent_list_code |parent_column:filter

Ak chcete, aby bol zoznam závislý od iného zoznamu:
c_typent:libelle:id:parent_list_codeb0ae64758bac>33z0_filter +ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key +ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... +ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... +ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filtersql
Example: c_typent:libelle:id::filtersql

- id_field is necessarily a primary int key
- filtersql is a SQL condition. It can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter which is the current id of current object
To use a SELECT into the filter use the keyword $SEL$ to bypass anti-injection protection.
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=Zoznam hodnôt pochádza z tabuľky
Syntax: table_name:label_field:id_field::filtersql
Príklad: c_typid:libelle: ::filtersql

filter môže byť jednoduchým testom (napr. active=1) na zobrazenie iba aktívnej hodnoty
Vo filtri môžete použiť aj $ID$, čo je aktuálne ID aktuálneho objektu
Na vykonanie SELECT vo filtri použite $SEL$
ak chcete filtrovať extrapolia, použite syntax extra.fieldcode=... (kde kód poľa je kód extrafield)

Ak chcete, aby bol zoznam závislý od iného zoznamu doplnkových atribútov:
c_typent:libelle:id:options_parent_list_code|parent_column:filter b0342fccfda19translate'>0319bzf'cc Ak chcete, aby bol zoznam závislý od iného zoznamu:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parametre musia byť ObjectName:Classpath
Syntax: ObjectName:Classpath ExtrafieldParamHelpSeparator=Ponechajte prázdne pre jednoduchý oddeľovač
Nastavte toto na 1 pre zbalený oddeľovač (predvolene otvorený pre novú reláciu, potom sa stav zachová pre každú reláciu používateľa)
Nastavte toto na 2 pre zbalený oddeľovač (predvolene zbalený pre novú reláciu, potom sa stav zachová pre každú reláciu používateľa) @@ -518,8 +518,8 @@ DependsOn=Tento modul potrebuje modul(y) RequiredBy=Tento modul vyžadujú moduly TheKeyIsTheNameOfHtmlField=Toto je názov poľa HTML. Na čítanie obsahu stránky HTML, aby ste získali názov kľúča poľa, sú potrebné technické znalosti. PageUrlForDefaultValues=Musíte zadať relatívnu cestu adresy URL stránky. Ak do URL zahrniete parametre, bude to účinné, ak všetky parametre v prehliadanej URL budú mať tu definovanú hodnotu. -PageUrlForDefaultValuesCreate=
Príklad:
Pre formulár na vytvorenie novej tretej strany je to b0e7843947c06b /span>%s
.
Pre adresu URL externých modulov nainštalovaných do vlastný adresár, nezahŕňajte "custom/", takže použite cestu ako mymodule/mypage.php a nie vlastnú /mymodule/mypage.php.
Ak chcete predvolenú hodnotu, iba ak adresa URL obsahuje nejaký parameter, môžete použiť %s -PageUrlForDefaultValuesList=
Príklad:
Pre stránku, ktorá obsahuje zoznam tretích strán, je to >%s.
Pre adresy URL externých modulov nainštalovaných do vlastného adresára , nezahŕňajte „custom/“, takže použite cestu ako mymodule/mypagelist.php a nie custom/mymodule /mypagelist.php.
Ak chcete predvolenú hodnotu iba vtedy, ak adresa URL obsahuje nejaký parameter, môžete použiť %s +PageUrlForDefaultValuesCreate=
Example:
For the form to create a new third party, it is %s.
For URL of external modules installed into custom directory, do not include the "custom/", so use path like mymodule/mypage.php and not custom/mymodule/mypage.php.
If you want default value only if url has some parameter, you can use %s +PageUrlForDefaultValuesList=
Example:
For the page that lists third parties, it is %s.
For URL of external modules installed into custom directory, do not include the "custom/" so use a path like mymodule/mypagelist.php and not custom/mymodule/mypagelist.php.
If you want default value only if url has some parameter, you can use %s AlsoDefaultValuesAreEffectiveForActionCreate=Všimnite si tiež, že prepísanie predvolených hodnôt pre vytváranie formulárov funguje len pre stránky, ktoré boli správne navrhnuté (takže s parametrom action=create alebo presend...) EnableDefaultValues=Povoliť prispôsobenie predvolených hodnôt EnableOverwriteTranslation=Povoliť prispôsobenie prekladov @@ -1197,6 +1197,7 @@ Skin=Skin téma DefaultSkin=Default skin téma MaxSizeList=Maximálna dĺžka zoznamu DefaultMaxSizeList=Základná max. dĺžka zoznamu +DisplayGrandTotalInList=Display grand total (for all pages) in lists footer DefaultMaxSizeShortList=Predvolená maximálna dĺžka pre krátke zoznamy (t. j. na zákazníckej karte) MessageOfDay=Správa dňa MessageLogin=Prihlasovacia stránka správu @@ -1249,7 +1250,7 @@ SetupDescription2=Nasledujúce dve časti sú povinné (prvé dve položky v pon SetupDescription3=%s -> %s

Tento softvér je balíkom mnohých modulov/aplikácií. Moduly súvisiace s vašimi potrebami musia byť povolené a nakonfigurované. Po aktivácii týchto modulov sa zobrazia položky ponuky. SetupDescription5=Ďalšie položky ponuky Setup spravujú voliteľné parametre. -SetupDescriptionLink=
%s - %s8cz08 /span> +SetupDescriptionLink=%s - %s SetupDescription3b=Základné parametre používané na prispôsobenie predvoleného správania vašej aplikácie (napr. pre funkcie súvisiace s krajinou). SetupDescription4b=Tento softvér je balíkom mnohých modulov/aplikácií. Moduly súvisiace s vašimi potrebami musia byť aktivované. Po aktivácii týchto modulov sa zobrazia položky ponuky. AuditedSecurityEvents=Udalosti zabezpečenia, ktoré sú auditované @@ -1281,7 +1282,7 @@ AvailableModules=Dostupné aplikácie/moduly ToActivateModule=Pre aktiváciu modulov, prejdite na nastavenie priestoru (Domov-> Nastavenie-> Modules). SessionTimeOut=Time out na zasadnutí SessionExplanation=Toto číslo zaručuje, že relácia nikdy nevyprší pred týmto oneskorením, ak čistenie relácie vykoná Internal PHP session cleaner (a nič iné). Interný čistič relácie PHP nezaručuje, že relácia po tomto oneskorení vyprší. Jeho platnosť vyprší po tomto oneskorení a keď sa spustí čistič relácie, takže každý %s/%s prístup, ale iba počas prístupu vykonaného inými reláciami (ak je hodnota 0, znamená to, že vymazanie relácie vykonáva iba externý proces) .
Poznámka: na niektorých serveroch s externým mechanizmom čistenia relácií (cron v debiane, ubuntu ...) môžu byť relácie zničené po uplynutí doby definovanej externým nastavením, bez ohľadu na to, aká je tu zadaná hodnota. -SessionsPurgedByExternalSystem=Zdá sa, že relácie na tomto serveri sú vyčistené externým mechanizmom (cron pod debianom, ubuntu ...), pravdepodobne každý %s sekúnd (= hodnota parametra session.gc_maxlifetimeb09a4b8z39f) , takže zmena hodnoty tu nemá žiadny vplyv. O zmenu oneskorenia relácie musíte požiadať správcu servera. +SessionsPurgedByExternalSystem=Sessions on this server seems to be cleaned by an external mechanism (cron under debian, ubuntu ...), probably every %s seconds (= value of parameter session.gc_maxlifetime), so changing the value here has no effect. You must ask the server administrator to change session delay. TriggersAvailable=Dostupné spúšťače TriggersDesc=Spúšťače sú súbory, ktoré po skopírovaní do adresára htdocs/core/triggers zmenia správanie pracovného postupu Dolibarr. Realizujú nové akcie, aktivované na udalostiach Dolibarr (založenie novej firmy, validácia faktúr, ...). TriggerDisabledByName=Trigger v tomto súbore sú zakázané-NoRun prípona vo svojom názve. @@ -1306,7 +1307,7 @@ NoEventOrNoAuditSetup=Nebola zaznamenaná žiadna udalosť zabezpečenia. To je NoEventFoundWithCriteria=Pre tieto kritériá vyhľadávania sa nenašla žiadna udalosť zabezpečenia. SeeLocalSendMailSetup=Pozrite sa na miestne sendmail nastavenie BackupDesc=úplná záloha inštalácie Dolibarr vyžaduje dva kroky. -BackupDesc2=Zálohujte obsah adresára „documents“ (%sb09a4b739f17>f8z0 obsahujúce všetky nahrané a vygenerované súbory. To bude zahŕňať aj všetky súbory výpisu vygenerované v kroku 1. Táto operácia môže trvať niekoľko minút. +BackupDesc2=Backup the contents of the "documents" directory (%s) containing all uploaded and generated files. This will also include all the dump files generated in Step 1. This operation may last several minutes. BackupDesc3=Zálohujte štruktúru a obsah svojej databázy (%s) súbor výpisu. Na tento účel môžete použiť nasledujúceho asistenta. BackupDescX=Archivovaný adresár by mal byť uložený na bezpečnom mieste. BackupDescY=Vygenerovaný súbor výpisu by sa mal skladovať na bezpečnom mieste. @@ -1349,8 +1350,8 @@ DefineHereComplementaryAttributes=Definujte všetky ďalšie / vlastné atribút ExtraFields=Doplnkové atribúty ExtraFieldsLines=Doplnkové atribúty (linky) ExtraFieldsLinesRec=Doplnkové atribúty (šablóny riadkov faktúr) -ExtraFieldsSupplierOrdersLines=Doplnkové hodnoty ( riadky objednávky ) -ExtraFieldsSupplierInvoicesLines=Doplnkové hodnoty ( riadky faktúry ) +ExtraFieldsSupplierOrdersLines=Doplnkové hodnoty ( riadky objednávky ) +ExtraFieldsSupplierInvoicesLines=Doplnkové hodnoty ( riadky faktúry ) ExtraFieldsThirdParties=Doplnkové atribúty (tretia strana) ExtraFieldsContacts=Doplnkové atribúty (kontakty/adresa) ExtraFieldsMember=Doplnkové atribúty (člen) @@ -1371,7 +1372,7 @@ SendmailOptionMayHurtBuggedMTA=Funkcia odosielania e-mailov pomocou metódy „P TranslationSetup=Nastavenie prekladu TranslationKeySearch=Vyhľadajte prekladový kľúč alebo reťazec TranslationOverwriteKey=Preprísať prekladový reľazec -TranslationDesc=Ako nastaviť jazyk zobrazenia:
* Predvolené/Celý systém: ponuka Domov -> Nastavenie -> Displej
* Pre používateľa: Kliknite na používateľské meno v hornej časti obrazovky a upravte b0e7843947c06b span>Nastavenie zobrazenia používateľa
na karte používateľa. +TranslationDesc=How to set the display language:
* Default/Systemwide: menu Home -> Setup -> Display
* Per user: Click on the username at the top of the screen and modify the User Display Setup tab on the user card. TranslationOverwriteDesc=Môžete tiež prepísať reťazce vypĺňajúce nasledujúcu tabuľku. Vyberte si jazyk z rozbaľovacej ponuky „%s“, vložte reťazec kľúča prekladu do „%s“ a váš nový preklad do „%s" TranslationOverwriteDesc2=Môžete použiť druhú kartu, ktorá vám pomôže zistiť, ktorý prekladový kľúč máte použiť TranslationString=Prekladový reťazec @@ -1379,7 +1380,7 @@ CurrentTranslationString=Aktuálny prekladovy reťazec WarningAtLeastKeyOrTranslationRequired=Kritériá vyhľadávania sa vyžadujú aspoň pre kľúč alebo reťazec prekladu NewTranslationStringToShow=Novy prekladový reťazec na zobrzenie OriginalValueWas=Pôvodný preklad je prepísaný. Pôvodná hodnota bola:

%s -TransKeyWithoutOriginalValue=Vynútili ste nový preklad pre prekladový kľúč '%s ktorý neexistuje v žiadnych jazykových súboroch +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '%s' that does not exist in any language files TitleNumberOfActivatedModules=Aktivované moduly TotalNumberOfActivatedModules=Aktivované moduly: %s /
%s YouMustEnableOneModule=Musíte povoliť aspoň jeden modul @@ -1511,7 +1512,7 @@ ContractsSetup=Nastaviť modul Zmluvy / Predplatné ContractsNumberingModules=Zákazky číslovanie moduly TemplatePDFContracts=Modely zmlúv FreeLegalTextOnContracts=Poznámka k zmluve -WatermarkOnDraftContractCards=Vodoznak na návrhy zmluvy ( nie ak prázdne ) +WatermarkOnDraftContractCards=Vodoznak na návrhy zmluvy ( nie ak prázdne ) ##### Members ##### MembersSetup=Členovia modul nastavenia MemberMainOptions=Hlavné voľby @@ -1686,7 +1687,7 @@ CacheByServerDesc=Napríklad pomocou direktívy Apache "ExpiresByType image/gif CacheByClient=Cache v prehliadači CompressionOfResources=Kompresia odpovedí HTTP CompressionOfResourcesDesc=Napríklad pomocou direktívy Apache "AddOutputFilterByType DEFLATE" -TestNotPossibleWithCurrentBrowsers=So súčasnými prehliadačmi taká automatická detekcia nie je možná +TestNotPossibleWithCurrentBrowsers=So súčasnými prehliadačmi taká automatická detekcia nie je možná DefaultValuesDesc=Tu môžete definovať predvolenú hodnotu, ktorú chcete použiť pri vytváraní nového záznamu, a/alebo predvolené filtre alebo poradie triedenia pri uvádzaní záznamov. DefaultCreateForm=Predvolené hodnoty (na použitie vo formulároch) DefaultSearchFilters=Predvolené filtre vyhľadávania @@ -1860,7 +1861,7 @@ PastDelayVCalExport=Neexportovať udalosti staršie ako SecurityKey = Bezpečnostný kľúč ##### ClickToDial ##### ClickToDialSetup=Kliknite pre Dial Nastavenie modulu -ClickToDialUrlDesc=Adresa URL volaná po kliknutí na ikonu telefónu. V adrese URL môžete použiť značky
__PHONETO__b09a4b739f17f to bude nahradené telefónnym číslom osoby, ktorej chcete zavolať
__PHONEFROM__b09a4f739f17> bude nahradené telefónnym číslom volajúcej osoby (vaším)
__LOGIN__b09a4b839 span>, ktoré bude nahradené prihlásením pomocou kliknutia (definované na karte používateľa)
__PASS__ , ktoré bude nahradené heslom clicktodial (definovaným na karte používateľa). +ClickToDialUrlDesc=URL called when a click on phone picto is done. In URL, you can use tags
__PHONETO__ that will be replaced with the phone number of person to call
__PHONEFROM__ that will be replaced with phone number of calling person (yours)
__LOGIN__ that will be replaced with clicktodial login (defined on user card)
__PASS__ that will be replaced with clicktodial password (defined on user card). ClickToDialDesc=Tento modul mení telefónne čísla, keď používate stolný počítač, na klikateľné odkazy. Kliknutím zavoláte na číslo. Toto je možné použiť na začatie telefonického hovoru, keď používate softvérový telefón na pracovnej ploche alebo keď používate systém CTI založený napríklad na protokole SIP. Poznámka: Pri používaní smartfónu sa na telefónne čísla vždy dá kliknúť. ClickToDialUseTelLink=Na telefónne čísla použite iba odkaz „tel:“. ClickToDialUseTelLinkDesc=Túto metódu použite, ak vaši používatelia majú softvérový telefón alebo softvérové rozhranie nainštalované na rovnakom počítači ako prehliadač a volajú po kliknutí na odkaz začínajúci „tel:“ vo vašom prehliadači. Ak potrebujete odkaz začínajúci „sip:“ alebo úplné serverové riešenie (nie je potrebná inštalácia lokálneho softvéru), musíte to nastaviť na „Nie“ a vyplniť ďalšie pole. @@ -1967,11 +1968,11 @@ GoOntoContactCardToAddMore=Ak chcete pridať alebo odstrániť upozornenia pre k Threshold=Maximálna hodnota BackupDumpWizard=Sprievodca zostavením súboru výpisu databázy BackupZipWizard=Sprievodca vytvorením adresára archívu dokumentov -SomethingMakeInstallFromWebNotPossible=Inštalácia externého modulu z webu nie je možná kôli : +SomethingMakeInstallFromWebNotPossible=Inštalácia externého modulu z webu nie je možná kôli : SomethingMakeInstallFromWebNotPossible2=Z tohto dôvodu je proces aktualizácie popísaný tu manuálnym procesom, ktorý môže vykonať iba privilegovaný používateľ. InstallModuleFromWebHasBeenDisabledContactUs=Inštalácia alebo vývoj externých modulov alebo dynamických webových stránok z aplikácie je momentálne z bezpečnostných dôvodov uzamknutý. Ak potrebujete povoliť túto funkciu, kontaktujte nás. InstallModuleFromWebHasBeenDisabledByFile=Inštaláciu externého modulu z aplikácie zakázal váš administrátor. Ak to chcete povoliť, musíte ho požiadať o odstránenie súboru %s vlastnosť. -ConfFileMustContainCustom=Pri inštalácii alebo zostavovaní externého modulu z aplikácie je potrebné uložiť súbory modulu do adresára %s . Ak chcete, aby tento adresár spracoval Dolibarr, musíte nastaviť conf/conf.php na pridanie 2 riadkov direktív:
$dolibarr_main_url_root_alt='/custom';071f065d ='notranslate'>
$dolibarr_main_document_root_alt='b0ecb2ec'spanec87f49/translate= '> +ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory %s. To have this directory processed by Dolibarr, you must setup your conf/conf.php to add the 2 directive lines:
$dolibarr_main_url_root_alt='/custom';
$dolibarr_main_document_root_alt='%s/custom'; HighlightLinesOnMouseHover=Zvýrazniť riadok pre prechode kurzora HighlightLinesColor=Zvýrazniť farbu čiary pri prechode myšou (použite „ffffff“ pre žiadne zvýraznenie) HighlightLinesChecked=Zvýrazniť farbu čiary, keď je začiarknutá (použite 'ffffff' pre žiadne zvýraznenie) @@ -2065,7 +2066,7 @@ DetectionNotPossible=Zmazanie nie je možné UrlToGetKeyToUseAPIs=Adresa URL na získanie tokenu na používanie rozhrania API (po prijatí tokenu sa uloží do tabuľky používateľov databázy a musí byť poskytnutá pri každom volaní rozhrania API) ListOfAvailableAPIs=Zoznam dostupných API activateModuleDependNotSatisfied=Modul "%s" závisí od modulu "%s", ktorý chýba, takže modul " %1$s" nemusí fungovať správne. Nainštalujte modul "%2$s" alebo deaktivujte modul "%1$s", ak chcete byť v bezpečí pred akýmkoľvek prekvapením -CommandIsNotInsideAllowedCommands=Príkaz, ktorý sa pokúšate spustiť, nie je v zozname povolených príkazov definovaných v parametri $dolibarr_main_restrict_os_commands v class='notranslate'>
conf.php. +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter $dolibarr_main_restrict_os_commands in the conf.php file. LandingPage=Vstupná stránka SamePriceAlsoForSharedCompanies=Ak používate modul pre viacero spoločností, s voľbou „Jedna cena“ bude cena rovnaká pre všetky spoločnosti, ak sú produkty zdieľané medzi prostrediami ModuleEnabledAdminMustCheckRights=Modul bol aktivovaný. Povolenia pre aktivované moduly boli udelené iba administrátorom. V prípade potreby možno budete musieť udeliť povolenia iným používateľom alebo skupinám manuálne. @@ -2074,7 +2075,7 @@ TypeCdr=Ak je dátumom splatnosti dátum faktúry plus delta v dňoch, použite BaseCurrency=Referenčná mena spoločnosti (pre zmenu prejdite do nastavenia spoločnosti) WarningNoteModuleInvoiceForFrenchLaw=Tento modul %s je v súlade s francúzskymi zákonmi (Loi Finance 2016). WarningNoteModulePOSForFrenchLaw=Tento modul %s je v súlade s francúzskymi zákonmi (Loi Finance 2016), pretože modul Non Reversible Logs je automaticky aktivovaný. -WarningInstallationMayBecomeNotCompliantWithLaw=Pokúšate sa nainštalovať modul %s, ktorý je externým modulom. Aktivácia externého modulu znamená, že dôverujete vydavateľovi tohto modulu a ste si istí, že tento modul nemá nepriaznivý vplyv na správanie vašej aplikácie a je v súlade so zákonmi vašej krajiny (%s). Ak modul zavádza nelegálnu funkciu, preberáte zodpovednosť za používanie nelegálneho softvéru. +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software. MAIN_PDF_MARGIN_LEFT=Ľavý okraj na PDF MAIN_PDF_MARGIN_RIGHT=Pravý okraj v PDF @@ -2262,7 +2263,7 @@ ModuleActivatedMayExposeInformation=Toto rozšírenie PHP môže odhaliť citliv ModuleActivatedDoNotUseInProduction=Bol aktivovaný modul určený pre vývoj. Nepovoľujte ho v produkčnom prostredí. CombinationsSeparator=Oddeľovací znak pre kombinácie produktov SeeLinkToOnlineDocumentation=Príklady nájdete v odkaze na online dokumentáciu v hornej ponuke -SHOW_SUBPRODUCT_REF_IN_PDF=Ak je funkcia "%s" modulu %s, zobraziť podrobnosti o vedľajších produktoch súpravy vo formáte PDF. +SHOW_SUBPRODUCT_REF_IN_PDF=If the feature "%s" of module %s is used, show details of subproducts of a kit on PDF. AskThisIDToYourBank=Ak chcete získať toto ID, kontaktujte svoju banku AdvancedModeOnly=Povolenie je k dispozícii iba v rozšírenom režime povolení ConfFileIsReadableOrWritableByAnyUsers=Súbor conf je čitateľný alebo zapisovateľný pre všetkých používateľov. Udeľte povolenie iba používateľovi a skupine webového servera. @@ -2291,7 +2292,7 @@ APIsAreNotEnabled=Moduly API nie sú povolené YouShouldSetThisToOff=Mali by ste to nastaviť na 0 alebo vypnúť InstallAndUpgradeLockedBy=Inštalácia a inovácie sú uzamknuté súborom %s InstallLockedBy=Inštalácia/opätovná inštalácia je uzamknutá súborom %s -InstallOfAddonIsNotBlocked=Inštalácie doplnkov nie sú uzamknuté. Vytvorte súbor installmodules.lock do adresára ='notranslate'>%s na blokovanie inštalácií externých doplnkov/modulov. +InstallOfAddonIsNotBlocked=Installations of addons are not locked. Create a file installmodules.lock into directory %s to block installations of external addons/modules. OldImplementation=Stará implementácia PDF_SHOW_LINK_TO_ONLINE_PAYMENT=Ak sú povolené niektoré online platobné moduly (Paypal, Stripe, ...), pridajte do PDF odkaz na uskutočnenie online platby DashboardDisableGlobal=Globálne zakázať všetky palce otvorených objektov @@ -2405,8 +2406,8 @@ NotAvailableByDefaultEnabledOnModuleActivation=Predvolene nie je vytvorený. Vyt CSSPage=CSS štýl Defaultfortype=Štandardné DefaultForTypeDesc=Šablóna sa predvolene používa pri vytváraní nového e-mailu pre daný typ šablóny -OptionXShouldBeEnabledInModuleY=Možnosť "%s" by mala byť povolená v module ='notranslate'>%s -OptionXIsCorrectlyEnabledInModuleY=Možnosť „%s“ je povolená v module
%s +OptionXShouldBeEnabledInModuleY=Option "%s" should be enabled into module %s +OptionXIsCorrectlyEnabledInModuleY=Option "%s" is enabled into module %s AllowOnLineSign=Povoliť podpis online AtBottomOfPage=V spodnej časti stránky FailedAuth=neúspešné overenia @@ -2433,3 +2434,12 @@ UrlPublicInterfaceHelpAdmin=It is possible to define an alias to the web server ExportUseForce=Use the parameter -f ExportUseForceHelp=Force to continue the export even when an error is found (Backup may not be reliable) CustomPrompt=Custom prompts +AiDescription=AI (Artificial Intelligence) features +AiDescriptionLong=Provides AI (Artificial Intelligence) features in different part of the application. Need external AI API. +AI_KEY_API_CHATGPT= Key for ChatGPT IA api +AiSetup=AI module setup +AiCustomPrompt=AI customs prompt +AI_CONFIGURATIONS_PROMPT=Custom prompt +ImageGeneration=Image generation +AIPromptForFeatures=AI custom prompts for features +EnterAnIP=Enter an IP address diff --git a/htdocs/langs/sk_SK/agenda.lang b/htdocs/langs/sk_SK/agenda.lang index 22b41d8436f..6c7564666e6 100644 --- a/htdocs/langs/sk_SK/agenda.lang +++ b/htdocs/langs/sk_SK/agenda.lang @@ -5,7 +5,7 @@ Agenda=Program rokovania TMenuAgenda=Program rokovania Agendas=Program LocalAgenda=Predvolený kalendár -ActionsOwnedBy=Udalosť vytvorená: +ActionsOwnedBy=Udalosť vytvorená: ActionsOwnedByShort=Majiteľ AffectedTo=Priradené EventsNb=Počet udalostí @@ -22,7 +22,7 @@ ListOfEvents=Zoznam udalostí (predvolený kalendár) ActionsAskedBy=Akcia hlásené ActionsToDoBy=Akcia priradené ActionsDoneBy=Akcie vykonané -ActionAssignedTo=Udalosť priradená na +ActionAssignedTo=Udalosť priradená na ViewCal=Mesačný pohľad ViewDay=Denné zobrazenie ViewWeek=Zobraziť týždeň @@ -137,8 +137,8 @@ DateActionEnd=Dátum ukončenia AgendaUrlOptions1=Môžete tiež pridať nasledujúce parametre filtrovania výstupu: AgendaUrlOptions3=logina=%s pre obmedzenie výstupu akciam ktoré vlastní užívateľ %s. AgendaUrlOptionsNotAdmin=logina=!%s na obmedzenie výstupu na akcie, ktoré nie sú vlastnené používateľ %s. -AgendaUrlOptions4=logint=%s na obmedzenie < výstupu na akcie priradené používateľovi span class='notranslate'>
%s (vlastník a ďalší). -AgendaUrlOptionsProject=project=__PROJECT_ID__, aby ste obmedzili výstup na akcie spojené s projektom b0aeee>3650838 __PROJECT_ID__. +AgendaUrlOptions4=logint=%s to restrict output to actions assigned to user %s (owner and others). +AgendaUrlOptionsProject=project=__PROJECT_ID__ to restrict output to actions linked to project __PROJECT_ID__. AgendaUrlOptionsNotAutoEvent=notactiontype=systemauto na vylúčenie automatických udalostí. AgendaUrlOptionsIncludeHolidays=includeholidays=1 na zahrnutie udalostí sviatkov. AgendaShowBirthdayEvents=Narodeniny kontaktov diff --git a/htdocs/langs/sk_SK/bills.lang b/htdocs/langs/sk_SK/bills.lang index 00b5edeb9a5..7dfb71ba667 100644 --- a/htdocs/langs/sk_SK/bills.lang +++ b/htdocs/langs/sk_SK/bills.lang @@ -93,6 +93,9 @@ CodePaymentMode=Spôsob platby (kód) LabelPaymentMode=Spôsob platby (štítok) PaymentModeShort=Spôsob platby PaymentTerm=Lehota splatnosti +IdPaymentTerm=Payment term (id) +CodePaymentTerm=Payment term (code) +LabelPaymentTerm=Payment term (label) PaymentConditions=Platobné podmienky PaymentConditionsShort=Platobné podmienky PaymentAmount=Suma platby @@ -185,7 +188,7 @@ SuppliersDraftInvoices=Dodávateľské návrhy faktúr Unpaid=Nezaplatený ErrorNoPaymentDefined=Chyba Nie je definovaná žiadna platba ConfirmDeleteBill=Naozaj chcete odstrániť túto faktúru? -ConfirmValidateBill=Naozaj chcete overiť túto faktúru pomocou odkazu %s >? +ConfirmValidateBill=Are you sure you want to validate this invoice with the reference %s? ConfirmUnvalidateBill=Naozaj chcete zmeniť faktúru %s na stav konceptu ? ConfirmClassifyPaidBill=Naozaj chcete zmeniť faktúru %s na stav zaplatená ? ConfirmCancelBill=Naozaj chcete zrušiť faktúru %s? @@ -207,7 +210,7 @@ ConfirmClassifyPaidPartiallyReasonDiscountVatDesc=V niektorých krajinách môž ConfirmClassifyPaidPartiallyReasonAvoirDesc=Použite túto voľbu, ak všetky ostatné nesluší ConfirmClassifyPaidPartiallyReasonBadCustomerDesc=Zlý zákazník je zákazník, ktorý odmieta zaplatiť svoj dlh. ConfirmClassifyPaidPartiallyReasonProductReturnedDesc=Táto voľba sa používa, keď platba nie je kompletná, pretože niektoré z výrobkov boli vrátené -ConfirmClassifyPaidPartiallyReasonBankChargeDesc=Nezaplatená suma je poplatky sprostredkovateľskej banky, ktoré sa odpočítavajú priamo z b0aee37336 >správna suma zaplatená zákazníkom. +ConfirmClassifyPaidPartiallyReasonBankChargeDesc=The unpaid amount is intermediary bank fees, deducted directly from the correct amount paid by the Customer. ConfirmClassifyPaidPartiallyReasonWithholdingTaxDesc=Nezaplatená suma nebude nikdy vyplatená, keďže ide o zrážkovú daň ConfirmClassifyPaidPartiallyReasonOtherDesc=Túto voľbu použite, ak všetky ostatné nevyhovujú, napríklad v nasledujúcej situácii:
- platba nie je dokončená, pretože niektoré produkty boli odoslané späť
- požadovaná suma je príliš dôležitá, pretože sa zabudlo na zľavu
Vo všetkých prípadoch musí byť nadmerne nárokovaná suma opravená v účtovnom systéme vytvorením dobropisu. ConfirmClassifyPaidPartiallyReasonBadSupplierDesc=zlý dodávateľ je dodávateľ, ktorému odmietame zaplatiť. @@ -374,7 +377,7 @@ DisabledBecauseReplacedInvoice=Akcia zakázané, pretože faktúra bola nahraden DescTaxAndDividendsArea=Táto oblasť predstavuje súhrn všetkých platieb uskutočnených na mimoriadne výdavky. Tu sú zahrnuté iba záznamy s platbami počas fixného roka. NbOfPayments=Počet platieb SplitDiscount=Rozdeliť zľavu v dvoch -ConfirmSplitDiscount=Naozaj si chcete rozdeliť túto zľavu vo výške %s span class='notranslate'>%s
do dvoch menších zliav? +ConfirmSplitDiscount=Are you sure you want to split this discount of %s %s into two smaller discounts? TypeAmountOfEachNewDiscount=Vstupné množstvo pre každú z dvoch častí: TotalOfTwoDiscountMustEqualsOriginal=Súčet dvoch nových zliav sa musí rovnať pôvodnej výške zľavy. ConfirmRemoveDiscount=Naozaj chcete odstrániť túto zľavu? diff --git a/htdocs/langs/sk_SK/cashdesk.lang b/htdocs/langs/sk_SK/cashdesk.lang index 1adf91bd230..17bfd2d7b76 100644 --- a/htdocs/langs/sk_SK/cashdesk.lang +++ b/htdocs/langs/sk_SK/cashdesk.lang @@ -136,7 +136,7 @@ PrintWithoutDetailsLabelDefault=Riadkový štítok predvolene pri tlači bez pod PrintWithoutDetails=Tlač bez detailov YearNotDefined=Rok nie je definovaný TakeposBarcodeRuleToInsertProduct=Pravidlo čiarového kódu na vloženie produktu -TakeposBarcodeRuleToInsertProductDesc=Pravidlo na extrahovanie referencie produktu + množstva z naskenovaného čiarového kódu.
Ak je prázdne (predvolená hodnota), aplikácia na nájdenie produktu použije celý naskenovaný čiarový kód.

Ak je definovaná, syntax musí byť:
ref:NB+qu:NB+qd:NB+other:NB
kde je NB počet znakov, ktoré sa majú použiť na extrahovanie údajov z naskenovaného čiarového kódu pomocou:
refb09a4f839f17 : referencia produktu
qu do nastaviť pri vkladaní položky (jednotiek)
qdmnožstvo:8z0 nastaviť pri vkladaní položky (desatinné miesta)
other other characters +TakeposBarcodeRuleToInsertProductDesc=Rule to extract the product reference + a quantity from a scanned barcode.
If empty (default value), application will use the full barcode scanned to find the product.

If defined, syntax must be:
ref:NB+qu:NB+qd:NB+other:NB
where NB is the number of characters to use to extract data from the scanned barcode with:
ref : product reference
qu : quantity to set when inserting item (units)
qd : quantity to set when inserting item (decimals)
other : others characters AlreadyPrinted=Už vytlačené HideCategories=Skryť celú sekciu výberu kategórií HideStockOnLine=Skryť zásoby online diff --git a/htdocs/langs/sk_SK/companies.lang b/htdocs/langs/sk_SK/companies.lang index 29fe6611cf5..14dbb1f2f30 100644 --- a/htdocs/langs/sk_SK/companies.lang +++ b/htdocs/langs/sk_SK/companies.lang @@ -1,95 +1,100 @@ # Dolibarr language file - Source file is en_US - companies +newSocieteAdded=Vaše kontaktné údaje boli zaznamenané. Čoskoro sa vám ozveme... +ContactUsDesc=Tento formulár vám umožňuje poslať nám správu pre prvý kontakt. ErrorCompanyNameAlreadyExists=Názov spoločnosti %s už existuje. Vyberte si inú. ErrorSetACountryFirst=Nastavenie krajiny prvý SelectThirdParty=Vyberte tretiu stranu -ConfirmDeleteCompany=Are you sure you want to delete this company and all related information? +ConfirmDeleteCompany=Naozaj chcete odstrániť túto spoločnosť a všetky súvisiace informácie? DeleteContact=Odstránenie kontaktu / adresa -ConfirmDeleteContact=Are you sure you want to delete this contact and all related information? -MenuNewThirdParty=New Third Party -MenuNewCustomer=New Customer -MenuNewProspect=New Prospect -MenuNewSupplier=New Vendor +ConfirmDeleteContact=Naozaj chcete odstrániť tento kontakt a všetky súvisiace informácie? +MenuNewThirdParty=Nová tretia strana +MenuNewCustomer=Nový zákazník +MenuNewProspect=Nový výhľad +MenuNewSupplier=Nový predajca MenuNewPrivateIndividual=Nová súkromná osoba -NewCompany=New company (prospect, customer, vendor) -NewThirdParty=New Third Party (prospect, customer, vendor) -CreateDolibarrThirdPartySupplier=Create a third party (vendor) +NewCompany=Nová spoločnosť (potenciálny zákazník, predajca) +NewThirdParty=Nová tretia strana (potenciálny, zákazník, predajca) +CreateDolibarrThirdPartySupplier=Vytvorte tretiu stranu (dodávateľa) CreateThirdPartyOnly=Vytvoriť tretiu stranu -CreateThirdPartyAndContact=Create a third party + a child contact +CreateThirdPartyAndContact=Vytvorte kontakt na tretiu stranu + dieťa ProspectionArea=Prospekcia plochy IdThirdParty=Id treťou stranou IdCompany=IČ IdContact=Contact ID -ThirdPartyAddress=Third-party address -ThirdPartyContacts=Third-party contacts -ThirdPartyContact=Third-party contact/address +ThirdPartyAddress=Adresa tretej strany +ThirdPartyContacts=Kontakty tretích strán +ThirdPartyContact=Kontakt/adresa tretej strany Company=Spoločnosť CompanyName=Názov spoločnosti -AliasNames=Alias name (commercial, trademark, ...) -AliasNameShort=Alias Name +AliasNames=Názov aliasu (komerčný, ochranná známka, ...) +AliasNameShort=Názov aliasu Companies=Firmy -CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price display format in the current language and currency -ThirdPartyName=Third-party name -ThirdPartyEmail=Third-party email -ThirdParty=Third-party -ThirdParties=Third-parties +CountryIsInEEC=Krajina je v rámci Európskeho hospodárskeho spoločenstva +PriceFormatInCurrentLanguage=Formát zobrazenia ceny v aktuálnom jazyku a mene +ThirdPartyName=Názov tretej strany +ThirdPartyEmail=E-mail tretej strany +ThirdParty=Tretia strana +ThirdParties=Tretie strany ThirdPartyProspects=Vyhliadky ThirdPartyProspectsStats=Vyhliadky ThirdPartyCustomers=Zákazníci ThirdPartyCustomersStats=Zákazníci ThirdPartyCustomersWithIdProf12=Zákazníci s %s alebo %s -ThirdPartySuppliers=Vendors -ThirdPartyType=Third-party type +ThirdPartySuppliers=Predajcovia +ThirdPartyType=Typ tretej strany Individual=Súkromná osoba -ToCreateContactWithSameName=Will automatically create a contact/address with same information as the third party under the third party. In most cases, even if your third party is a physical person, creating a third party alone is enough. +ToCreateContactWithSameName=Automaticky vytvorí kontakt/adresu s rovnakými informáciami ako tretia strana pod treťou stranou. Vo väčšine prípadov, aj keď je vašou treťou stranou fyzická osoba, stačí vytvoriť tretiu stranu. ParentCompany=Materská spoločnosť Subsidiaries=Dcérske spoločnosti -ReportByMonth=Report per month -ReportByCustomers=Report per customer -ReportByThirdparties=Report per thirdparty -ReportByQuarter=Report per rate +ReportByMonth=Správa za mesiac +ReportByCustomers=Správa podľa zákazníka +ReportByThirdparties=Správa od tretej strany +ReportByQuarter=Správa podľa sadzby CivilityCode=Zdvorilosť kód RegisteredOffice=Sídlo spoločnosti Lastname=Priezvisko Firstname=Krstné meno -RefEmployee=Employee reference -NationalRegistrationNumber=National registration number +RefEmployee=Referencia zamestnanca +NationalRegistrationNumber=Národné registračné číslo PostOrFunction=Poradie úlohy UserTitle=Názov -NatureOfThirdParty=Nature of Third party -NatureOfContact=Nature of Contact +NatureOfThirdParty=Povaha tretej strany +NatureOfContact=Povaha kontaktu Address=Adresa State=Štát / Provincia -StateId=State ID -StateCode=State/Province code -StateShort=State +StateId=ID štátu +StateCode=Kód štátu/provincie +StateShort=Štát Region=Kraj -Region-State=Region - State +Region-State=Región – Štát Country=Krajina CountryCode=Kód krajiny -CountryId=Country ID +CountryId=ID krajiny Phone=Telefón PhoneShort=Telefón Skype=Skype Call=Volanie Chat=Chat -PhonePro=Bus. phone +PhonePro=Autobus. telefón PhonePerso=Os. telefón PhoneMobile=Mobilné -No_Email=Refuse bulk emailings +No_Email=Odmietnuť hromadné e-maily Fax=Fax Zip=Poštové smerovacie číslo Town=Mesto Web=Web Poste= Pozícia -DefaultLang=Default language -VATIsUsed=Sales tax used -VATIsUsedWhenSelling=This defines if this third party includes a sales tax or not when it makes an invoice to its own customers -VATIsNotUsed=Sales tax is not used -CopyAddressFromSoc=Copy address from third-party details -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects -ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor vendor, discounts are not available -PaymentBankAccount=Payment bank account +DefaultLang=Predvolený jazyk +VATIsUsed=Použitá daň z obratu +VATIsUsedWhenSelling=Toto definuje, či táto tretia strana zahŕňa daň z obratu alebo nie, keď vystavuje faktúru svojim vlastným zákazníkom +VATIsNotUsed=Daň z obratu sa nepoužíva +VATReverseCharge=prenesenie daňovej povinnosti +VATReverseChargeByDefault=Štandardne prenesenie DPH +VATReverseChargeByDefaultDesc=Na dodávateľskej faktúre sa štandardne používa prenesenie DPH +CopyAddressFromSoc=Skopírujte adresu z údajov tretích strán +ThirdpartyNotCustomerNotSupplierSoNoRef=Tretia strana, ani zákazník, ani predajca, žiadne dostupné odkazujúce objekty +ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Tretia strana ani zákazník ani predajca, zľavy nie sú dostupné +PaymentBankAccount=Platobný bankový účet OverAllProposals=Návrhy OverAllOrders=Objednávky OverAllInvoices=Faktúry @@ -102,24 +107,32 @@ LocalTax2IsUsed=Použitie tretí daň LocalTax2IsUsedES= IRPF sa používa LocalTax2IsNotUsedES= IRPF sa nepoužíva WrongCustomerCode=Zákaznícky kód neplatný -WrongSupplierCode=Vendor code invalid +WrongSupplierCode=Kód dodávateľa je neplatný CustomerCodeModel=Zákaznícky kód modelu -SupplierCodeModel=Vendor code model +SupplierCodeModel=Model kódu dodávateľa Gencod=Čiarový kód -GencodBuyPrice=Barcode of price ref +GencodBuyPrice=Čiarový kód ceny ref ##### Professional ID ##### ProfId1Short=Prof id 1 ProfId2Short=Prof id 2 ProfId3Short=Prof id 3 ProfId4Short=Prof id 4 ProfId5Short=Prof id 5 -ProfId6Short=Prof. id 6 +ProfId6Short=ID prof. 6 +ProfId7Short=ID prof. 7 +ProfId8Short=ID prof. 8 +ProfId9Short=ID prof. 9 +ProfId10Short=ID prof. 10 ProfId1=Profesionálne ID 1 ProfId2=Profesionálne ID 2 ProfId3=Profesionálne ID 3 ProfId4=Profesionálne ID 4 ProfId5=Profesionálne ID 5 ProfId6=Profesionálne ID 6 +ProfId7=Profesijný preukaz 7 +ProfId8=Profesionálny preukaz 8 +ProfId9=Profesijný preukaz 9 +ProfId10=Profesionálny preukaz 10 ProfId1AR=Prof Id 1 (cuite / Cuile) ProfId2AR=Prof Id 2 (Rebarbora beštie) ProfId3AR=- @@ -130,7 +143,7 @@ ProfId1AT=Prof Id 1 (ust-IdNr) ProfId2AT=Prof Id 2 (ust-Nr) ProfId3AT=Prof ID 3 (Handelsregister-Nr.) ProfId4AT=- -ProfId5AT=EORI number +ProfId5AT=číslo EORI ProfId6AT=- ProfId1AU=Prof Id 1 (ABN) ProfId2AU=- @@ -142,7 +155,7 @@ ProfId1BE=Prof Id 1 (Professional číslo) ProfId2BE=- ProfId3BE=- ProfId4BE=- -ProfId5BE=EORI number +ProfId5BE=číslo EORI ProfId6BE=- ProfId1BR=- ProfId2BR=IE (Inscricao Estadual) @@ -150,11 +163,11 @@ ProfId3BR=IM (Inscricao obecnej) ProfId4BR=CPF #ProfId5BR=CNAE #ProfId6BR=INSS -ProfId1CH=UID-Nummer +ProfId1CH=UID-číslo ProfId2CH=- ProfId3CH=Prof Id 1 (Federálne číslo) ProfId4CH=Prof Id 2 (obchodné Záznam číslo) -ProfId5CH=EORI number +ProfId5CH=číslo EORI ProfId6CH=- ProfId1CL=Prof Id 1 (RUT) ProfId2CL=- @@ -162,16 +175,16 @@ ProfId3CL=- ProfId4CL=- ProfId5CL=- ProfId6CL=- -ProfId1CM=Id. prof. 1 (Trade Register) -ProfId2CM=Id. prof. 2 (Taxpayer No.) -ProfId3CM=Id. prof. 3 (No. of creation decree) -ProfId4CM=Id. prof. 4 (Deposit certificate No.) -ProfId5CM=Id. prof. 5 (Others) +ProfId1CM=Id. Prednášal prof. 1 (obchodný register) +ProfId2CM=Id. Prednášal prof. 2 (Číslo daňového poplatníka) +ProfId3CM=Id. Prednášal prof. 3 (č. zriaďovacej vyhlášky) +ProfId4CM=Id. Prednášal prof. 4 (číslo depozitného certifikátu) +ProfId5CM=Id. Prednášal prof. 5 (iné) ProfId6CM=- -ProfId1ShortCM=Trade Register -ProfId2ShortCM=Taxpayer No. -ProfId3ShortCM=No. of creation decree -ProfId4ShortCM=Deposit certificate No. +ProfId1ShortCM=živnostenského registra +ProfId2ShortCM=Daňovník č. +ProfId3ShortCM=č. kreačného dekrétu +ProfId4ShortCM=číslo depozitného certifikátu ProfId5ShortCM=Ostatné ProfId6ShortCM=- ProfId1CO=Prof Id 1 (RUT) @@ -184,26 +197,34 @@ ProfId1DE=Prof Id 1 (ust-IdNr) ProfId2DE=Prof Id 2 (ust-Nr) ProfId3DE=Prof ID 3 (Handelsregister-Nr.) ProfId4DE=- -ProfId5DE=EORI number +ProfId5DE=číslo EORI ProfId6DE=- ProfId1ES=Prof Id 1 (CIF / NIF) ProfId2ES=Prof Id 2 (Číslo sociálneho poistenia) ProfId3ES=Prof ID 3 (CNAE) ProfId4ES=Prof Id 4 (Collegiate číslo) -ProfId5ES=Prof Id 5 (EORI number) +ProfId5ES=Prof Id 5 (číslo EORI) ProfId6ES=- ProfId1FR=Prof Id 1 (siréna) ProfId2FR=Prof Id 2 (SIRET) ProfId3FR=Prof ID 3 (NAF, starý APE) ProfId4FR=Prof Id 4 (RCS / RM) -ProfId5FR=Prof Id 5 (numéro EORI) +ProfId5FR=Prof Id 5 (číslo EORI) ProfId6FR=- -ProfId1ShortFR=SIREN +ProfId7FR=- +ProfId8FR=- +ProfId9FR=- +ProfId10FR=- +ProfId1ShortFR=SIRÉNA ProfId2ShortFR=SIRET ProfId3ShortFR=NAF ProfId4ShortFR=RCS ProfId5ShortFR=EORI ProfId6ShortFR=- +ProfId7ShortFR=- +ProfId8ShortFR=- +ProfId9ShortFR=- +ProfId10ShortFR=- ProfId1GB=Registračné číslo ProfId2GB=- ProfId3GB=SIC @@ -226,13 +247,13 @@ ProfId1IT=- ProfId2IT=- ProfId3IT=- ProfId4IT=- -ProfId5IT=EORI number +ProfId5IT=číslo EORI ProfId6IT=- -ProfId1LU=Id. prof. 1 (R.C.S. Luxembourg) -ProfId2LU=Id. prof. 2 (Business permit) +ProfId1LU=Id. Prednášal prof. 1 (R.C.S. Luxembursko) +ProfId2LU=Id. Prednášal prof. 2 (živnostenské povolenie) ProfId3LU=- ProfId4LU=- -ProfId5LU=EORI number +ProfId5LU=číslo EORI ProfId6LU=- ProfId1MA=Id prof. 1 (RC) ProfId2MA=Id prof. 2 (Patente) @@ -242,7 +263,7 @@ ProfId5MA=Id prof. 5 (I.C.E.) ProfId6MA=- ProfId1MX=Prof Id 1 (RFC). ProfId2MX=Prof Id 2 (R.. P. IMSS) -ProfId3MX=Prof ID 3 (Profesional Charta) +ProfId3MX=Prof Id 3 (Professional Charter) ProfId4MX=- ProfId5MX=- ProfId6MX=- @@ -250,13 +271,13 @@ ProfId1NL=KVK Nummer ProfId2NL=- ProfId3NL=- ProfId4NL=Burgerservicenummer (BSN) -ProfId5NL=EORI number +ProfId5NL=číslo EORI ProfId6NL=- ProfId1PT=Prof Id 1 (Nipča) ProfId2PT=Prof Id 2 (Číslo sociálneho poistenia) ProfId3PT=Prof ID 3 (obchodný Záznam číslo) ProfId4PT=Prof Id 4 (konzervatórium) -ProfId5PT=Prof Id 5 (EORI number) +ProfId5PT=Prof Id 5 (číslo EORI) ProfId6PT=- ProfId1SN=RC ProfId2SN=Ninea @@ -280,7 +301,7 @@ ProfId1RO=Prof Id 1 (CUI) ProfId2RO=Prof Id 2 (Nr. Înmatriculare) ProfId3RO=Prof Id 3 (CAEN) ProfId4RO=Prof Id 5 (EUID) -ProfId5RO=Prof Id 5 (EORI number) +ProfId5RO=Prof Id 5 (číslo EORI) ProfId6RO=- ProfId1RU=Prof Id 1 (OGRN) ProfId2RU=Prof Id 2 (INN) @@ -291,107 +312,107 @@ ProfId6RU=- ProfId1UA=Prof Id 1 (EDRPOU) ProfId2UA=Prof Id 2 (DRFO) ProfId3UA=Prof Id 3 (INN) -ProfId4UA=Prof Id 4 (Certificate) +ProfId4UA=Prof Id 4 (certifikát) ProfId5UA=Prof Id 5 (RNOKPP) ProfId6UA=Prof Id 6 (TRDPAU) ProfId1DZ=RC -ProfId2DZ=Art. +ProfId2DZ=čl. ProfId3DZ=NIF ProfId4DZ=NIS -VATIntra=VAT ID -VATIntraShort=VAT ID +VATIntra=IČ DPH +VATIntraShort=IČ DPH VATIntraSyntaxIsValid=Syntax je platná -VATReturn=VAT return +VATReturn=priznanie k DPH ProspectCustomer=Prospect / zákazník Prospect=Vyhliadka CustomerCard=Zákaznícka karta Customer=Zákazník CustomerRelativeDiscount=Relatívna zákazník zľava -SupplierRelativeDiscount=Relative vendor discount +SupplierRelativeDiscount=Relatívna zľava predajcu CustomerRelativeDiscountShort=Relatívna zľava CustomerAbsoluteDiscountShort=Absolútna zľava CompanyHasRelativeDiscount=Tento zákazník má predvolenú zľavu %s%% CompanyHasNoRelativeDiscount=Tento zákazník nemá relatívnej zľavu v predvolenom nastavení -HasRelativeDiscountFromSupplier=You have a default discount of %s%% from this vendor -HasNoRelativeDiscountFromSupplier=You have no default relative discount from this vendor +HasRelativeDiscountFromSupplier=Máte predvolenú zľavu %s%% s týmto dodávateľom +HasNoRelativeDiscountFromSupplier=Žiadna predvolená relatívna zľava u tohto dodávateľa CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for %s %s CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for %s %s CompanyHasCreditNote=Tento zákazník má stále dobropisy pre %s %s -HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this vendor +HasNoAbsoluteDiscountFromSupplier=Od tohto predajcu nie je k dispozícii žiadna zľava/kredit HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for %s %s from this vendor -HasDownPaymentOrCommercialDiscountFromSupplier=You have discounts available (commercial, down payments) for %s %s from this vendor +HasDownPaymentOrCommercialDiscountFromSupplier=Máte k dispozícii zľavy (komerčné, zálohové platby) pre %s %s od tohto dodávateľa HasCreditNoteFromSupplier=You have credit notes for %s %s from this vendor CompanyHasNoAbsoluteDiscount=Tento zákazník nemá diskontné úver k dispozícii -CustomerAbsoluteDiscountAllUsers=Absolute customer discounts (granted by all users) -CustomerAbsoluteDiscountMy=Absolute customer discounts (granted by yourself) -SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users) -SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) +CustomerAbsoluteDiscountAllUsers=Absolútne zákaznícke zľavy (poskytované všetkými používateľmi) +CustomerAbsoluteDiscountMy=Absolútne zákaznícke zľavy (udeľujete sami) +SupplierAbsoluteDiscountAllUsers=Absolútne zľavy dodávateľa (zadané všetkými používateľmi) +SupplierAbsoluteDiscountMy=Absolútne zľavy dodávateľov (zadané sami) DiscountNone=Nikto -Vendor=Vendor -Supplier=Vendor +Vendor=Predajca +Supplier=Predajca AddContact=Vytvoriť kontakt AddContactAddress=Vytvoriť kontakt/adresu EditContact=Upraviť kontakt EditContactAddress=Upraviť kontakt / adresa -Contact=Contact/Address +Contact=Kontaktná adresa Contacts=Kontakty / adresy -ContactId=Contact id +ContactId=ID kontaktu ContactsAddresses=Kontakty / adresy -FromContactName=Name: +FromContactName=Názov: NoContactDefinedForThirdParty=Žiadny kontakt definovaná pre túto tretiu stranu NoContactDefined=Žiadny kontakt definované DefaultContact=Predvolené kontakt / adresa -ContactByDefaultFor=Default contact/address for +ContactByDefaultFor=Predvolený kontakt/adresa pre AddThirdParty=Vytvoriť tretiu stranu DeleteACompany=Odstránenie spoločnosť PersonalInformations=Osobné údaje AccountancyCode=Accounting account -CustomerCode=Customer Code -SupplierCode=Vendor Code -CustomerCodeShort=Customer Code -SupplierCodeShort=Vendor Code -CustomerCodeDesc=Customer Code, unique for all customers -SupplierCodeDesc=Vendor Code, unique for all vendors +CustomerCode=Zákaznický kód +SupplierCode=Kód dodávateľa +CustomerCodeShort=Zákaznický kód +SupplierCodeShort=Kód dodávateľa +CustomerCodeDesc=Zákaznícky kód, jedinečný pre všetkých zákazníkov +SupplierCodeDesc=Kód predajcu, jedinečný pre všetkých predajcov RequiredIfCustomer=Požadované, ak tretia osoba zákazníka alebo perspektíva -RequiredIfSupplier=Required if third party is a vendor -ValidityControledByModule=Validity controlled by the module -ThisIsModuleRules=Rules for this module +RequiredIfSupplier=Vyžaduje sa, ak je tretia strana predajcom +ValidityControledByModule=Platnosť riadená modulom +ThisIsModuleRules=Pravidlá pre tento modul ProspectToContact=Prospect kontaktovať CompanyDeleted=Spoločnosť "%s" vymazaný z databázy. ListOfContacts=Zoznam kontaktov adries / ListOfContactsAddresses=Zoznam kontaktov adries / -ListOfThirdParties=List of Third Parties -ShowCompany=Third Party -ShowContact=Contact-Address +ListOfThirdParties=Zoznam tretích strán +ShowCompany=Tretia strana +ShowContact=Kontaktná adresa ContactsAllShort=Všetko (Bez filtra) -ContactType=Contact role +ContactType=Kontaktná rola ContactForOrders=Order kontakt -ContactForOrdersOrShipments=Order's or shipment's contact +ContactForOrdersOrShipments=Kontakt objednávky alebo zásielky ContactForProposals=Návrh je kontakt ContactForContracts=Zmluva je kontakt ContactForInvoices=Faktúra je kontakt NoContactForAnyOrder=Tento kontakt nie je kontakt na ľubovoľnom poradí -NoContactForAnyOrderOrShipments=This contact is not a contact for any order or shipment +NoContactForAnyOrderOrShipments=Tento kontakt nie je kontaktom pre žiadnu objednávku alebo zásielku NoContactForAnyProposal=Tento kontakt nie je kontaktnou osobou pre akékoľvek komerčné návrhu NoContactForAnyContract=Tento kontakt nie je kontakt u každej zákazky NoContactForAnyInvoice=Tento kontakt nie je kontakt pre každé faktúre NewContact=Nový kontakt -NewContactAddress=New Contact/Address +NewContactAddress=Nový kontakt/adresa MyContacts=Moje kontakty Capital=Kapitál CapitalOf=Hlavné mesto %s EditCompany=Upraviť spoločnosť -ThisUserIsNot=This user is not a prospect, customer or vendor +ThisUserIsNot=Tento používateľ nie je potenciálnym zákazníkom, zákazníkom ani predajcom VATIntraCheck=Kontrola -VATIntraCheckDesc=The VAT ID must include the country prefix. The link %s uses the European VAT checker service (VIES) which requires internet access from the Dolibarr server. -VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do -VATIntraCheckableOnEUSite=Check the intra-Community VAT ID on the European Commission website -VATIntraManualCheck=You can also check manually on the European Commission website %s +VATIntraCheckDesc=IČ DPH musí obsahovať predvoľbu krajiny. Odkaz %s používa európsku službu kontroly DPH (VIES) ktorý vyžaduje prístup na internet zo servera Dolibarr. +VATIntraCheckURL=https://ec.europa.eu/taxation_customs/vies/#/vat-validation +VATIntraCheckableOnEUSite=Skontrolujte si IČ DPH v rámci Spoločenstva na webovej stránke Európskej komisie +VATIntraManualCheck=Môžete to skontrolovať aj manuálne na webovej stránke Európskej komisie %s ErrorVATCheckMS_UNAVAILABLE=Skontrolujte, nie je možné. Skontrolujte, služba nie je poskytovaná členským štátom (%s). -NorProspectNorCustomer=Not prospect, nor customer -JuridicalStatus=Business entity type -Workforce=Workforce -Staff=Employees +NorProspectNorCustomer=Nie záujemca, ani zákazník +JuridicalStatus=Typ obchodného subjektu +Workforce=Pracovná sila +Staff=zamestnancov ProspectLevelShort=Potenciál ProspectLevel=Prospect potenciál ContactPrivate=Súkromný @@ -412,17 +433,17 @@ TE_MEDIUM=Stredná firma TE_ADMIN=Vládne TE_SMALL=Malé spoločnosti TE_RETAIL=Maloobchodník -TE_WHOLE=Wholesaler +TE_WHOLE=Veľkoobchodník TE_PRIVATE=Súkromná osoba TE_OTHER=Ostatné StatusProspect-1=Nedotýkajte sa StatusProspect0=Nikdy nekontaktoval -StatusProspect1=To be contacted +StatusProspect1=Byť kontaktovaný StatusProspect2=Kontakt v procese StatusProspect3=Spojiť sa vykonáva ChangeDoNotContact=Zmeniť stav na "Nedotýkajte sa" ChangeNeverContacted=Zmeniť stav na "nikdy nekontaktoval" -ChangeToContact=Change status to 'To be contacted' +ChangeToContact=Zmeniť stav na „Na kontaktovanie“ ChangeContactInProcess=Zmeniť stav na "Kontakt v procese" ChangeContactDone=Zmeniť stav na "Kontaktujte urobiť" ProspectsByStatus=Vyhliadky podľa postavenia @@ -431,70 +452,79 @@ ExportCardToFormat=Export do formátu karty ContactNotLinkedToCompany=Kontaktu, ktorý nie je spojený s akoukoľvek treťou stranou DolibarrLogin=Dolibarr prihlásenie NoDolibarrAccess=Žiadny prístup Dolibarr -ExportDataset_company_1=Third-parties (companies/foundations/physical people) and their properties -ExportDataset_company_2=Contacts and their properties -ImportDataset_company_1=Third-parties and their properties -ImportDataset_company_2=Third-parties additional contacts/addresses and attributes -ImportDataset_company_3=Third-parties Bank accounts -ImportDataset_company_4=Third-parties Sales representatives (assign sales representatives/users to companies) -PriceLevel=Price Level -PriceLevelLabels=Price Level Labels +ExportDataset_company_1=Tretie strany (firmy/nadácie/fyzické osoby) a ich majetok +ExportDataset_company_2=Kontakty a ich vlastnosti +ImportDataset_company_1=Tretie strany a ich vlastnosti +ImportDataset_company_2=Ďalšie kontakty/adresy a atribúty tretích strán +ImportDataset_company_3=Bankové účty tretích strán +ImportDataset_company_4=Tretie strany Obchodní zástupcovia (priraďte obchodných zástupcov/používateľov spoločnostiam) +PriceLevel=Cenová hladina +PriceLevelLabels=Štítky cenovej hladiny DeliveryAddress=Dodacia adresa AddAddress=Pridať adresu -SupplierCategory=Vendor category -JuridicalStatus200=Independent +SupplierCategory=Kategória predajcu +JuridicalStatus200=Nezávislý DeleteFile=Zmazať súbor -ConfirmDeleteFile=Ste si istí, že chcete zmazať tento súbor? -AllocateCommercial=Assigned to sales representative +ConfirmDeleteFile=Naozaj chcete odstrániť tento súbor %s? +AllocateCommercial=Pridelené obchodnému zástupcovi Organization=Organizácia -FiscalYearInformation=Fiscal Year +FiscalYearInformation=Fiškálny rok FiscalMonthStart=Počiatočný mesiac fiškálneho roka -SocialNetworksInformation=Social networks +SocialNetworksInformation=Sociálne siete SocialNetworksFacebookURL=Facebook URL SocialNetworksTwitterURL=Twitter URL SocialNetworksLinkedinURL=Linkedin URL -SocialNetworksInstagramURL=Instagram URL -SocialNetworksYoutubeURL=Youtube URL -SocialNetworksGithubURL=Github URL -YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification. -YouMustCreateContactFirst=To be able to add email notifications, you must first define contacts with valid emails for the third party -ListSuppliersShort=List of Vendors -ListProspectsShort=List of Prospects -ListCustomersShort=List of Customers -ThirdPartiesArea=Third Parties/Contacts -LastModifiedThirdParties=Latest %s Third Parties which were modified -UniqueThirdParties=Total number of Third Parties +SocialNetworksInstagramURL=Adresa URL Instagramu +SocialNetworksYoutubeURL=Adresa URL služby YouTube +SocialNetworksGithubURL=Adresa URL Github +YouMustAssignUserMailFirst=Aby ste mohli pridať e-mailové upozornenie, musíte pre tohto používateľa vytvoriť e-mail. +YouMustCreateContactFirst=Aby ste mohli pridávať e-mailové upozornenia, musíte najprv definovať kontakty s platnými e-mailami pre tretiu stranu +ListSuppliersShort=Zoznam predajcov +ListProspectsShort=Zoznam perspektív +ListCustomersShort=Zoznam zákazníkov +ThirdPartiesArea=Tretie strany/Kontakty +LastModifiedThirdParties=Najnovšie %s tretie strany, ktoré boli upravené +UniqueThirdParties=Celkový počet tretích strán InActivity=Otvorení ActivityCeased=Zatvorené -ThirdPartyIsClosed=Third party is closed -ProductsIntoElements=List of products/services mapped to %s -CurrentOutstandingBill=Current outstanding bill +ThirdPartyIsClosed=Tretia strana je zatvorená +ProductsIntoElements=Zoznam produktov/služieb namapovaných na %s +CurrentOutstandingBill=Aktuálna neuhradená faktúra OutstandingBill=Max. za vynikajúce účet -OutstandingBillReached=Max. for outstanding bill reached -OrderMinAmount=Minimum amount for order -MonkeyNumRefModelDesc=Return a number in the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequencial auto-incrementing number with no break and no return to 0. +OutstandingBillReached=Max. za dosiahnutý neuhradený účet +OrderMinAmount=Minimálna suma pre objednávku +MonkeyNumRefModelDesc=Vráťte číslo vo formáte %syymm-nnnn pre kód zákazníka a %syymm-nnnn pre kód dodávateľa, kde je yy rok, mm je mesiac a nnnn je sekvenčné automaticky sa zvyšujúce číslo bez prerušenia a bez návratu na 0. LeopardNumRefModelDesc=Kód je zadarmo. Tento kód je možné kedykoľvek zmeniť. -ManagingDirectors=Manager(s) name (CEO, director, president...) -MergeOriginThirdparty=Duplicate third party (third party you want to delete) -MergeThirdparties=Merge third parties -ConfirmMergeThirdparties=Are you sure you want to merge the chosen third party with the current one? All linked objects (invoices, orders, ...) will be moved to the current third party, after which the chosen third party will be deleted. -ThirdpartiesMergeSuccess=Third parties have been merged -SaleRepresentativeLogin=Login of sales representative -SaleRepresentativeFirstname=First name of sales representative -SaleRepresentativeLastname=Last name of sales representative -ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted. -NewCustomerSupplierCodeProposed=Customer or Vendor code already used, a new code is suggested -KeepEmptyIfGenericAddress=Keep this field empty if this address is a generic address +ManagingDirectors=Meno manažéra (výkonný riaditeľ, riaditeľ, prezident...) +MergeOriginThirdparty=Duplicitná tretia strana (tretia strana, ktorú chcete odstrániť) +MergeThirdparties=Zlúčiť tretie strany +ConfirmMergeThirdparties=Naozaj chcete zlúčiť vybratú tretiu stranu s aktuálnou? Všetky prepojené objekty (faktúry, objednávky, ...) budú presunuté na aktuálnu tretiu stranu, po čom bude zvolená tretia strana vymazaná. +ThirdpartiesMergeSuccess=Tretie strany boli zlúčené +SaleRepresentativeLogin=Prihlásenie obchodného zástupcu +SaleRepresentativeFirstname=Krstné meno obchodného zástupcu +SaleRepresentativeLastname=Priezvisko obchodného zástupcu +ErrorThirdpartiesMerge=Pri odstraňovaní tretích strán sa vyskytla chyba. Skontrolujte denník. Zmeny boli vrátené. +NewCustomerSupplierCodeProposed=Kód zákazníka alebo dodávateľa sa už používa, navrhuje sa nový kód +KeepEmptyIfGenericAddress=Ak je táto adresa všeobecná, ponechajte toto pole prázdne #Imports -PaymentTypeCustomer=Payment Type - Customer -PaymentTermsCustomer=Payment Terms - Customer -PaymentTypeSupplier=Payment Type - Vendor -PaymentTermsSupplier=Payment Term - Vendor -PaymentTypeBoth=Payment Type - Customer and Vendor -MulticurrencyUsed=Use Multicurrency +PaymentTypeCustomer=Typ platby - Zákazník +PaymentTermsCustomer=Platobné podmienky – zákazník +PaymentTypeSupplier=Typ platby - Dodávateľ +PaymentTermsSupplier=Platobná lehota - Predajca +PaymentTypeBoth=Typ platby - Zákazník a Dodávateľ +MulticurrencyUsed=Použite viac mien MulticurrencyCurrency=Mena -InEEC=Europe (EEC) -RestOfEurope=Rest of Europe (EEC) -OutOfEurope=Out of Europe (EEC) -CurrentOutstandingBillLate=Current outstanding bill late -BecarefullChangeThirdpartyBeforeAddProductToInvoice=Be carefull, depending on your product price settings, you should change thirdparty before adding product to POS. +InEEC=Európa (EHS) +RestOfEurope=zvyšok Európy (EHS) +OutOfEurope=Mimo Európy (EHS) +CurrentOutstandingBillLate=Aktuálna neuhradená faktúra je oneskorená +BecarefullChangeThirdpartyBeforeAddProductToInvoice=Buďte opatrní, v závislosti od nastavení ceny vášho produktu by ste mali pred pridaním produktu na POS zmeniť tretiu stranu. +EmailAlreadyExistsPleaseRewriteYourCompanyName=e-mail už existuje, prepíšte názov svojej spoločnosti +TwoRecordsOfCompanyName=pre túto spoločnosť existuje viac ako jeden záznam, kontaktujte nás, aby ste dokončili svoju žiadosť o partnerstvo +CompanySection=Firemná sekcia +ShowSocialNetworks=Zobraziť sociálne siete +HideSocialNetworks=Skryť sociálne siete +ExternalSystemID=ID externého systému +IDOfPaymentInAnExternalSystem=ID platobného režimu do externého systému (ako Stripe, Paypal, ...) +AADEWebserviceCredentials=Poverenia webovej služby AADE +ThirdPartyMustBeACustomerToCreateBANOnStripe=Tretia strana musí byť zákazníkom, aby povolila vytvorenie svojich bankových informácií na strane Stripe diff --git a/htdocs/langs/sk_SK/compta.lang b/htdocs/langs/sk_SK/compta.lang index fc0d4be5ef5..b4d132565be 100644 --- a/htdocs/langs/sk_SK/compta.lang +++ b/htdocs/langs/sk_SK/compta.lang @@ -1,7 +1,7 @@ # Dolibarr language file - Source file is en_US - compta -MenuFinancial=Billing | Payment +MenuFinancial=Fakturácia | Platba TaxModuleSetupToModifyRules=Prejsť na daniach z modulu nastavenie zmeniť pravidlá pre výpočet -TaxModuleSetupToModifyRulesLT=Go to Company setup to modify rules for calculation +TaxModuleSetupToModifyRulesLT=Ak chcete upraviť pravidlá výpočtu, prejdite na Nastavenie spoločnosti OptionMode=Voľba pre účtovníctvo OptionModeTrue=Možnosť Príjmy-Výdavky OptionModeVirtual=Možnosť deklaráciami Pohľadávky @@ -9,216 +9,217 @@ OptionModeTrueDesc=V tejto súvislosti sa počíta obrat cez platby (dátum plat OptionModeVirtualDesc=V tejto súvislosti sa počíta obrat cez faktúr (dátum schválenia). Ak sú tieto faktúry sú splatné, či boli zaplatené alebo nie, sú uvedené v obrate výstupu. FeatureIsSupportedInInOutModeOnly=Funkcie dostupné iba v ÚVERY-dlhy účtovného režimu (pozri konfigurácia modulu Účtovníctvo) VATReportBuildWithOptionDefinedInModule=Sumy uvedené tu sú vypočítané na základe pravidiel stanovených daňovými Nastavenie modulu. -LTReportBuildWithOptionDefinedInModule=Amounts shown here are calculated using rules defined by Company setup. +LTReportBuildWithOptionDefinedInModule=Tu zobrazené sumy sú vypočítané pomocou pravidiel definovaných nastavením spoločnosti. Param=Setup -RemainingAmountPayment=Amount payment remaining: +RemainingAmountPayment=Zostávajúca suma platby: Account=Účet -Accountparent=Parent account -Accountsparent=Parent accounts +Accountparent=Rodičovský účet +Accountsparent=Rodičovské účty Income=Príjem Outcome=Výdavok MenuReportInOut=Výnosy / náklady -ReportInOut=Balance of income and expenses -ReportTurnover=Turnover invoiced -ReportTurnoverCollected=Turnover collected +ReportInOut=Bilancia príjmov a výdavkov +ReportTurnover=Fakturovaný obrat +ReportTurnoverCollected=Zhromaždený obrat PaymentsNotLinkedToInvoice=Platby nesúvisiace s akoukoľvek faktúru, takže nie sú spojené žiadne tretej strane PaymentsNotLinkedToUser=Platby nesúvisiace všetkých užívateľov Profit=Zisk -AccountingResult=Accounting result -BalanceBefore=Balance (before) +AccountingResult=Výsledok účtovníctva +BalanceBefore=Zostatok (predtým) Balance=Zostatok Debit=Debet Credit=Úver AccountingDebit=Debet AccountingCredit=Úver -Piece=Accounting Doc. +Piece=Účtovníctvo Doc. AmountHTVATRealReceived=Net zhromaždený AmountHTVATRealPaid=Čisté platené -VATToPay=Tax sales -VATReceived=Tax received -VATToCollect=Tax purchases -VATSummary=Tax monthly -VATBalance=Tax Balance -VATPaid=Tax paid -LT1Summary=Tax 2 summary -LT2Summary=Tax 3 summary +VATToPay=Daňový predaj +VATReceived=Prijatá daň +VATToCollect=Daňové nákupy +VATSummary=Daň mesačne +VATBalance=Daňový zostatok +VATPaid=Zaplatená daň +LT1Summary=Súhrn dane 2 +LT2Summary=Súhrn dane 3 LT1SummaryES=RE Balance LT2SummaryES=IRPF Balance -LT1SummaryIN=CGST Balance -LT2SummaryIN=SGST Balance -LT1Paid=Tax 2 paid -LT2Paid=Tax 3 paid -LT1PaidES=RE Paid +LT1SummaryIN=Zostatok CGST +LT2SummaryIN=Zostatok SGST +LT1Paid=Daň 2 zaplatená +LT2Paid=Daň 3 zaplatená +LT1PaidES=RE zaplatené LT2PaidES=IRPF Platené -LT1PaidIN=CGST Paid -LT2PaidIN=SGST Paid -LT1Customer=Tax 2 sales -LT1Supplier=Tax 2 purchases -LT1CustomerES=RE sales -LT1SupplierES=RE purchases -LT1CustomerIN=CGST sales -LT1SupplierIN=CGST purchases -LT2Customer=Tax 3 sales -LT2Supplier=Tax 3 purchases +LT1PaidIN=CGST zaplatené +LT2PaidIN=SGST zaplatené +LT1Customer=Daň 2 predaj +LT1Supplier=Daň za 2 nákupy +LT1CustomerES=RE predaj +LT1SupplierES=RE nákupy +LT1CustomerIN=Predaj CGST +LT1SupplierIN=Nákupy CGST +LT2Customer=Daň 3 predaj +LT2Supplier=Daň za 3 nákupy LT2CustomerES=IRPF predaj LT2SupplierES=IRPF nákupy -LT2CustomerIN=SGST sales -LT2SupplierIN=SGST purchases +LT2CustomerIN=Predaj SGST +LT2SupplierIN=SGST nákupy VATCollected=Vybrané DPH StatusToPay=Zaplatiť -SpecialExpensesArea=Area for all special payments -VATExpensesArea=Area for all TVA payments -SocialContribution=Social or fiscal tax -SocialContributions=Social or fiscal taxes -SocialContributionsDeductibles=Deductible social or fiscal taxes -SocialContributionsNondeductibles=Nondeductible social or fiscal taxes -DateOfSocialContribution=Date of social or fiscal tax -LabelContrib=Label contribution -TypeContrib=Type contribution +SpecialExpensesArea=Oblasť pre všetky špeciálne platby +VATExpensesArea=Oblasť pre všetky platby TVA +SocialContribution=Sociálna alebo fiškálna daň +SocialContributions=Sociálne alebo fiškálne dane +SocialContributionsDeductibles=Odpočítateľné sociálne alebo fiškálne dane +SocialContributionsNondeductibles=Neodpočítateľné sociálne alebo fiškálne dane +DateOfSocialContribution=Dátum sociálnej alebo fiškálnej dane +LabelContrib=Príspevok štítku +TypeContrib=Typ príspevku MenuSpecialExpenses=špeciálne rozšírenia MenuTaxAndDividends=Dane a dividendy -MenuSocialContributions=Social/fiscal taxes -MenuNewSocialContribution=New social/fiscal tax -NewSocialContribution=New social/fiscal tax -AddSocialContribution=Add social/fiscal tax -ContributionsToPay=Social/fiscal taxes to pay -AccountancyTreasuryArea=Accounting area -InvoicesArea=Billing and payment area +MenuSocialContributions=Sociálne/fiškálne dane +MenuNewSocialContribution=Nová sociálna/fiškálna daň +NewSocialContribution=Nová sociálna/fiškálna daň +AddSocialContribution=Pridajte sociálnu/fiškálnu daň +ContributionsToPay=Platiť sociálne/fiškálne dane +AccountancyTreasuryArea=Účtovná oblasť +InvoicesArea=Oblasť fakturácie a platieb NewPayment=Nový platobný PaymentCustomerInvoice=Zákazník faktúru -PaymentSupplierInvoice=vendor invoice payment +PaymentSupplierInvoice=úhrada faktúry dodávateľa PaymentSocialContribution=Platba sociálnej/fiškálnej dane PaymentVat=DPH platba -AutomaticCreationPayment=Automatically record the payment +AutomaticCreationPayment=Automaticky zaznamenajte platbu ListPayment=Zoznam platieb ListOfCustomerPayments=Zoznam zákazníckych platieb -ListOfSupplierPayments=List of vendor payments -DateStartPeriod=Date start period -DateEndPeriod=Date end period -newLT1Payment=New tax 2 payment -newLT2Payment=New tax 3 payment -LT1Payment=Tax 2 payment -LT1Payments=Tax 2 payments -LT2Payment=Tax 3 payment -LT2Payments=Tax 3 payments -newLT1PaymentES=New RE payment +ListOfSupplierPayments=Zoznam platieb dodávateľa +DateStartPeriod=Dátum začiatku obdobia +DateEndPeriod=Dátum ukončenia obdobia +newLT1Payment=Nová platba dane 2 +newLT2Payment=Nová platba dane 3 +LT1Payment=Platba dane 2 +LT1Payments=Platby dane 2 +LT2Payment=Platba dane 3 +LT2Payments=Platby dane 3 +newLT1PaymentES=Nová platba RE newLT2PaymentES=Nový IRPF platba -LT1PaymentES=RE Payment -LT1PaymentsES=RE Payments +LT1PaymentES=RE platba +LT1PaymentsES=RE platby LT2PaymentES=IRPF platby LT2PaymentsES=IRPF Platby -VATPayment=Sales tax payment -VATPayments=Sales tax payments -VATDeclarations=VAT declarations -VATDeclaration=VAT declaration -VATRefund=Sales tax refund -NewVATPayment=New sales tax payment -NewLocalTaxPayment=New tax %s payment -Refund=Refund -SocialContributionsPayments=Social/fiscal taxes payments +VATPayment=Platba dane z obratu +VATPayments=Platby dane z obratu +VATDeclarations=priznania k DPH +VATDeclaration=priznanie k DPH +VATRefund=Vrátenie dane z predaja +NewVATPayment=Nová platba dane z obratu +NewLocalTaxPayment=Nová daňová platba %s +Refund=Vrátenie peňazí +SocialContributionsPayments=Platby sociálnych/fiškálnych daní ShowVatPayment=Zobraziť DPH platbu TotalToPay=Celkom k zaplateniu -BalanceVisibilityDependsOnSortAndFilters=Balance is visible in this list only if table is sorted on %s and filtered on 1 bank account (with no other filters) -CustomerAccountancyCode=Customer accounting code -SupplierAccountancyCode=Vendor accounting code -CustomerAccountancyCodeShort=Cust. account. code -SupplierAccountancyCodeShort=Sup. account. code +BalanceVisibilityDependsOnSortAndFilters=Zostatok je v tomto zozname viditeľný iba vtedy, ak je tabuľka zoradená podľa %s a filtrovaná na 1 bankovom účte (bez ďalších filtrov) +CustomerAccountancyCode=Účtovný kód zákazníka +SupplierAccountancyCode=Účtovný kód dodávateľa +CustomerAccountancyCodeShort=Cust. účtu. kód +SupplierAccountancyCodeShort=Súp. účtu. kód AccountNumber=Číslo účtu NewAccountingAccount=Nový účet -Turnover=Turnover invoiced -TurnoverCollected=Turnover collected -SalesTurnoverMinimum=Minimum turnover -ByExpenseIncome=By expenses & incomes +Turnover=Fakturovaný obrat +TurnoverCollected=Zhromaždený obrat +SalesTurnoverMinimum=Minimálny obrat +ByExpenseIncome=Podľa výdavkov a príjmov ByThirdParties=Tretími stranami ByUserAuthorOfInvoice=Faktúrou autorovi CheckReceipt=Doklad o vklade CheckReceiptShort=Doklad o vklade -LastCheckReceiptShort=Latest %s deposit slips -LastPaymentForDepositShort=Latest %s %s deposit slips +LastCheckReceiptShort=Najnovšie vkladové listy %s +LastPaymentForDepositShort=Najnovšie vkladové listy %s %s NewCheckReceipt=Nová zľava -NewCheckDeposit=New deposit slip +NewCheckDeposit=Nový vkladový list NewCheckDepositOn=Vytvorte potvrdenie o vklade na účet: %s -NoWaitingChecks=No checks awaiting deposit. -NoWaitingPaymentForDeposit=No %s payment awaiting deposit. -DateChequeReceived=Check receiving date -DatePaymentReceived=Date of document reception -NbOfCheques=No. of checks -PaySocialContribution=Pay a social/fiscal tax -PayVAT=Pay a VAT declaration -PaySalary=Pay a salary card -ConfirmPaySocialContribution=Are you sure you want to classify this social or fiscal tax as paid ? -ConfirmPayVAT=Are you sure you want to classify this VAT declaration as paid ? -ConfirmPaySalary=Are you sure you want to classify this salary card as paid? -DeleteSocialContribution=Delete a social or fiscal tax payment -DeleteVAT=Delete a VAT declaration -DeleteSalary=Delete a salary card -DeleteVariousPayment=Delete a various payment -ConfirmDeleteSocialContribution=Are you sure you want to delete this social/fiscal tax payment ? -ConfirmDeleteVAT=Are you sure you want to delete this VAT declaration ? -ConfirmDeleteSalary=Are you sure you want to delete this salary ? -ConfirmDeleteVariousPayment=Are you sure you want to delete this various payment ? -ExportDataset_tax_1=Social and fiscal taxes and payments +NoWaitingChecks=Žiadne šeky čakajúce na vklad. +NoWaitingPaymentForDeposit=Žiadna platba %s nečaká na vklad. +DateChequeReceived=Skontrolujte dátum prijatia +DatePaymentReceived=Dátum prijatia dokumentu +NbOfCheques=Počet šekov +PaySocialContribution=Platiť sociálnu/fiškálnu daň +PayVAT=Zaplatiť priznanie k DPH +PaySalary=Zaplatiť platovú kartu +ConfirmPaySocialContribution=Naozaj chcete klasifikovať túto sociálnu alebo daňovú daň ako zaplatenú? +ConfirmPayVAT=Naozaj chcete toto vyhlásenie o DPH klasifikovať ako zaplatené? +ConfirmPaySalary=Naozaj chcete klasifikovať túto mzdovú kartu ako platenú? +DeleteSocialContribution=Odstráňte platbu sociálnej alebo daňovej dane +DeleteVAT=Vymažte priznanie DPH +DeleteSalary=Vymažte mzdovú kartu +DeleteVariousPayment=Odstráňte rôzne platby +ConfirmDeleteSocialContribution=Naozaj chcete odstrániť túto platbu sociálnej/fiškálnej dane? +ConfirmDeleteVAT=Naozaj chcete vymazať toto vyhlásenie o DPH? +ConfirmDeleteSalary=Naozaj chcete odstrániť tento plat? +ConfirmDeleteVariousPayment=Naozaj chcete odstrániť tieto rôzne platby? +ExportDataset_tax_1=Sociálne a fiškálne dane a platby CalcModeVATDebt=Režim %sVAT na záväzky accounting%s. CalcModeVATEngagement=Režim %sVAT z príjmov-expense%sS. -CalcModeDebt=Analysis of known recorded documents -CalcModeEngagement=Analysis of known recorded payments -CalcModeBookkeeping=Analysis of data journalized in Bookkeeping Ledger table. -CalcModeNoBookKeeping=Even if they are not yet accounted in Ledger -CalcModeLT1= Mode %sRE on customer invoices - suppliers invoices%s -CalcModeLT1Debt=Mode %sRE on customer invoices%s -CalcModeLT1Rec= Mode %sRE on suppliers invoices%s -CalcModeLT2= Mode %sIRPF on customer invoices - suppliers invoices%s -CalcModeLT2Debt=Mode %sIRPF on customer invoices%s -CalcModeLT2Rec= Mode %sIRPF on suppliers invoices%s +CalcModeDebt=Analýza známych zaznamenaných dokumentov +CalcModeEngagement=Analýza známych zaznamenaných platieb +CalcModePayment=Analysis of known recorded payments +CalcModeBookkeeping=Analýza údajov žurnalizovaných v tabuľke účtovnej knihy. +CalcModeNoBookKeeping=Aj keď ešte nie sú zaúčtované v účtovnej knihe +CalcModeLT1= Režim %sRE na zákazníckych faktúrach – dodávateľské faktúry%s +CalcModeLT1Debt=Režim %sRE na zákazníckych faktúrach%s +CalcModeLT1Rec= Režim %sRE na dodávateľských faktúrach%s +CalcModeLT2= Režim %sIRPF na faktúrach zákazníkov – faktúry dodávateľov%s +CalcModeLT2Debt=Režim %sIRPF na zákazníckych faktúrach%s
+CalcModeLT2Rec= Režim %sIRPF na dodávateľských faktúrach%s
AnnualSummaryDueDebtMode=Bilancia príjmov a výdavkov, ročné zhrnutie AnnualSummaryInputOutputMode=Bilancia príjmov a výdavkov, ročné zhrnutie -AnnualByCompanies=Balance of income and expenses, by predefined groups of account -AnnualByCompaniesDueDebtMode=Balance of income and expenses, detail by predefined groups, mode %sClaims-Debts%s said Commitment accounting. -AnnualByCompaniesInputOutputMode=Balance of income and expenses, detail by predefined groups, mode %sIncomes-Expenses%s said cash accounting. -SeeReportInInputOutputMode=See %sanalysis of payments%s for a calculation based on recorded payments made even if they are not yet accounted in Ledger -SeeReportInDueDebtMode=See %sanalysis of recorded documents%s for a calculation based on known recorded documents even if they are not yet accounted in Ledger -SeeReportInBookkeepingMode=See %sanalysis of bookeeping ledger table%s for a report based on Bookkeeping Ledger table +AnnualByCompanies=Saldo príjmov a výdavkov podľa vopred definovaných účtových skupín +AnnualByCompaniesDueDebtMode=Zostatok príjmov a výdavkov, detail podľa vopred definovaných skupín, režim %sPohľadávky-Dluhyb0ecb92ec8 povedal Účtovanie záväzkov.8z0 +AnnualByCompaniesInputOutputMode=Zostatok príjmov a výdavkov, podrobnosti podľa preddefinovaných skupín, režim %sPríjmy-Výdavkyb0449fz0 povedal hotovostné účtovníctvo. +SeeReportInInputOutputMode=Pozrite si %sanalýzu platieb%s pre výpočet založený na zaúčtovaných platbách uskutočnených v Ledger, aj keď ešte nie sú zaúčtované +SeeReportInDueDebtMode=Pozrite si %sanalýzu zaznamenaných dokumentov%s pre výpočet založený na známych zaznamenaných dokumentoch, aj keď ešte nie sú zaúčtované v Ledger +SeeReportInBookkeepingMode=Pozrite si %sanalýzu tabuľky účtovnej knihyb0ecb2ec87f49fz' pre prehľad založený na Tabuľka účtovnej knihy RulesAmountWithTaxIncluded=- Uvedené sumy sú so všetkými daňami -RulesAmountWithTaxExcluded=- Amounts of invoices shown are with all taxes excluded -RulesResultDue=- It includes all invoices, expenses, VAT, donations, salaries, whether they are paid or not.
- It is based on the billing date of invoices and on the due date for expenses or tax payments. For salaries, the date of end of period is used. -RulesResultInOut=- It includes the real payments made on invoices, expenses, VAT and salaries.
- It is based on the payment dates of the invoices, expenses, VAT, donations and salaries. -RulesCADue=- It includes the customer's due invoices whether they are paid or not.
- It is based on the billing date of these invoices.
-RulesCAIn=- It includes all the effective payments of invoices received from customers.
- It is based on the payment date of these invoices
-RulesCATotalSaleJournal=It includes all credit lines from the Sale journal. -RulesSalesTurnoverOfIncomeAccounts=It includes (credit - debit) of lines for product accounts in group INCOME -RulesAmountOnInOutBookkeepingRecord=It includes record in your Ledger with accounting accounts that has the group "EXPENSE" or "INCOME" -RulesResultBookkeepingPredefined=It includes record in your Ledger with accounting accounts that has the group "EXPENSE" or "INCOME" -RulesResultBookkeepingPersonalized=It show record in your Ledger with accounting accounts grouped by personalized groups -SeePageForSetup=See menu %s for setup -DepositsAreNotIncluded=- Down payment invoices are not included -DepositsAreIncluded=- Down payment invoices are included -LT1ReportByMonth=Tax 2 report by month -LT2ReportByMonth=Tax 3 report by month -LT1ReportByCustomers=Report tax 2 by third party -LT2ReportByCustomers=Report tax 3 by third party -LT1ReportByCustomersES=Report by third party RE +RulesAmountWithTaxExcluded=- Uvedené sumy na faktúrach sú bez všetkých daní +RulesResultDue=- Zahŕňa všetky faktúry, výdavky, DPH, dary, platy, či už sú zaplatené alebo nie.
- Zakladá sa na dátume fakturácie faktúr a na dátume splatnosti za výdavky alebo platby daní. Pri platoch sa používa dátum konca obdobia. +RulesResultInOut=- Zahŕňa skutočné platby uskutočnené na faktúrach, výdavky, DPH a mzdy.
- Vychádza z dátumov platieb faktúr, výdavkov, DPH, darov a miezd. +RulesCADue=- Zahŕňa splatné faktúry zákazníka bez ohľadu na to, či sú zaplatené alebo nie.
– Vychádza z dátumu fakturácie týchto faktúr.
+RulesCAIn=– Zahŕňa všetky platné platby faktúr prijatých od zákazníkov.
– Zakladá sa na dátume platby týchto faktúr
+RulesCATotalSaleJournal=Zahŕňa všetky úverové linky z denníka predaja. +RulesSalesTurnoverOfIncomeAccounts=Zahŕňa (kreditné - debetné) riadky pre produktové účty v skupine PRÍJMY +RulesAmountOnInOutBookkeepingRecord=Zahŕňa záznam vo vašej účtovnej knihe s účtovnými účtami, ktoré majú skupinu „NÁKLADY“ alebo „PRÍJMY“ +RulesResultBookkeepingPredefined=Zahŕňa záznam vo vašej účtovnej knihe s účtovnými účtami, ktoré majú skupinu „NÁKLADY“ alebo „PRÍJMY“ +RulesResultBookkeepingPersonalized=Zobrazuje záznam vo vašej účtovnej knihe s účtovnými účtami zoskupenými podľa prispôsobených skupín +SeePageForSetup=Nastavenie nájdete v ponuke %s +DepositsAreNotIncluded=- Zálohové faktúry nie sú zahrnuté +DepositsAreIncluded=- Súčasťou sú aj zálohové faktúry +LT1ReportByMonth=Správa o dani 2 podľa mesiaca +LT2ReportByMonth=Správa o dani 3 podľa mesiaca +LT1ReportByCustomers=Nahláste daň 2 treťou stranou +LT2ReportByCustomers=Nahláste daň 3 treťou stranou +LT1ReportByCustomersES=Správa tretej strany RE LT2ReportByCustomersES=Správa o treťou stranou IRPF -VATReport=Sales tax report -VATReportByPeriods=Sales tax report by period -VATReportByMonth=Sales tax report by month -VATReportByRates=Sales tax report by rate -VATReportByThirdParties=Sales tax report by third party -VATReportByCustomers=Sales tax report by customer +VATReport=Správa o dani z predaja +VATReportByPeriods=Správa o dani z obratu podľa obdobia +VATReportByMonth=Správa o dani z predaja podľa mesiaca +VATReportByRates=Správa o dani z obratu podľa sadzby +VATReportByThirdParties=Správa o dani z predaja od tretej strany +VATReportByCustomers=Správa o dani z predaja zákazníkom VATReportByCustomersInInputOutputMode=Správa zákazníka DPH vyzdvihnúť a zaplatiť -VATReportByQuartersInInputOutputMode=Report by Sales tax rate of the tax collected and paid -VATReportShowByRateDetails=Show details of this rate -LT1ReportByQuarters=Report tax 2 by rate -LT2ReportByQuarters=Report tax 3 by rate -LT1ReportByQuartersES=Report by RE rate -LT2ReportByQuartersES=Report by IRPF rate +VATReportByQuartersInInputOutputMode=Správa o sadzbe dane z obratu vybranej a zaplatenej dane +VATReportShowByRateDetails=Zobraziť podrobnosti o tejto sadzbe +LT1ReportByQuarters=Vykazujte daň 2 podľa sadzby +LT2ReportByQuarters=Vykazujte daň 3 podľa sadzby +LT1ReportByQuartersES=Správa podľa sadzby RE +LT2ReportByQuartersES=Správa podľa sadzby IRPF SeeVATReportInInputOutputMode=See report %sVAT collection%s for a standard calculation -SeeVATReportInDueDebtMode=See report %sVAT on debit%s for a calculation with an option on the invoicing -RulesVATInServices=- For services, the report includes the VAT of payments actually received or paid on the basis of the date of payment. -RulesVATInProducts=- For material assets, the report includes the VAT on the basis of the date of payment. -RulesVATDueServices=- For services, the report includes VAT of due invoices, paid or not, based on the invoice date. -RulesVATDueProducts=- For material assets, the report includes the VAT of due invoices, based on the invoice date. +SeeVATReportInDueDebtMode=Pozrite si prehľad %sDPH na debet%s
pre výpočet s možnosťou fakturácie +RulesVATInServices=- V prípade služieb správa obsahuje DPH skutočne prijatých alebo zaplatených platieb na základe dátumu platby. +RulesVATInProducts=- V prípade hmotného majetku výkaz obsahuje DPH na základe dátumu platby. +RulesVATDueServices=- V prípade služieb výkaz zahŕňa DPH splatných faktúr, zaplatených alebo nezaplatených, na základe dátumu faktúry. +RulesVATDueProducts=- Pre hmotný majetok výkaz obsahuje DPH splatných faktúr na základe dátumu faktúry. OptionVatInfoModuleComptabilite=Poznámka: U hmotného majetku, mal by používať termín dodania bude spravodlivejší. -ThisIsAnEstimatedValue=This is a preview, based on business events and not from the final ledger table, so final results may differ from this preview values +ThisIsAnEstimatedValue=Toto je náhľad založený na obchodných udalostiach a nie z konečnej tabuľky hlavnej knihy, takže konečné výsledky sa môžu líšiť od hodnôt tohto náhľadu PercentOfInvoice=%% / Faktúra NotUsedForGoods=Nepoužíva sa na tovar ProposalStats=Štatistiky o návrhoch @@ -233,80 +234,82 @@ PurchasesJournal=Nákupy Journal DescSellsJournal=Predaj Journal DescPurchasesJournal=Nákupy Journal CodeNotDef=Nie je definované -WarningDepositsNotIncluded=Down payment invoices are not included in this version with this accountancy module. +WarningDepositsNotIncluded=Zálohové faktúry nie sú zahrnuté v tejto verzii s týmto modulom účtovníctva. DatePaymentTermCantBeLowerThanObjectDate=Termín vyplatenia dátum nemôže byť nižšia ako objektu dáta. -Pcg_version=Chart of accounts models +Pcg_version=Modely účtovnej osnovy Pcg_type=PCG typ Pcg_subtype=PCG podtyp InvoiceLinesToDispatch=Faktúra linky na expedíciu -ByProductsAndServices=By product and service +ByProductsAndServices=Podľa produktu a služby RefExt=Externé ref -ToCreateAPredefinedInvoice=To create a template invoice, create a standard invoice, then, without validating it, click on button "%s". -LinkedOrder=Link to order -Mode1=Method 1 +ToCreateAPredefinedInvoice=Ak chcete vytvoriť šablónu faktúry, vytvorte štandardnú faktúru a potom bez jej overenia kliknite na tlačidlo "%s". +LinkedOrder=Odkaz na objednávku +Mode1=Metóda 1 Mode2=Metóda 2 CalculationRuleDesc=Ak chcete vypočítať celkovú sumu DPH, tam sú dve metódy:
Metóda 1 je zaokrúhlenie DPH na každom riadku, potom sa spočítajú tak.
Metóda 2 je súčtom všetkých sud na každom riadku, potom sa výsledok zaokrúhľovania.
Konečný výsledok môže sa líši od niekoľkých centov. Predvolený režim je režim %s. -CalculationRuleDescSupplier=According to vendor, choose appropriate method to apply same calculation rule and get same result expected by your vendor. -TurnoverPerProductInCommitmentAccountingNotRelevant=The report of Turnover collected per product is not available. This report is only available for turnover invoiced. -TurnoverPerSaleTaxRateInCommitmentAccountingNotRelevant=The report of Turnover collected per sale tax rate is not available. This report is only available for turnover invoiced. +CalculationRuleDescSupplier=Podľa dodávateľa vyberte vhodnú metódu na uplatnenie rovnakého pravidla výpočtu a získajte rovnaký výsledok, aký očakáva váš dodávateľ. +TurnoverPerProductInCommitmentAccountingNotRelevant=Správa o obrate zhromaždených na produkt nie je k dispozícii. Tento prehľad je dostupný len pre fakturovaný obrat. +TurnoverPerSaleTaxRateInCommitmentAccountingNotRelevant=Prehľad obratu inkasovaného podľa sadzby dane z predaja nie je k dispozícii. Tento prehľad je dostupný len pre fakturovaný obrat. CalculationMode=Výpočet režim -AccountancyJournal=Accounting code journal -ACCOUNTING_VAT_SOLD_ACCOUNT=Account (from the Chart Of Account) to be used as the default account for VAT on sales (used if not defined on VAT dictionary setup) -ACCOUNTING_VAT_BUY_ACCOUNT=Account (from the Chart Of Account) to be used as the default account for VAT on purchases (used if not defined on VAT dictionary setup) -ACCOUNTING_VAT_PAY_ACCOUNT=Account (from the Chart Of Account) to be used as the default account for paying VAT -ACCOUNTING_VAT_BUY_REVERSE_CHARGES_CREDIT=Account (from the Chart Of Account) to be used as the default account for VAT on purchases for reverse charges (Credit) -ACCOUNTING_VAT_BUY_REVERSE_CHARGES_DEBIT=Account (from the Chart Of Account) to be used as the default account for VAT on purchases for reverse charges (Debit) -ACCOUNTING_ACCOUNT_CUSTOMER=Account (from the Chart Of Account) used for "customer" third parties -ACCOUNTING_ACCOUNT_CUSTOMER_Desc=The dedicated accounting account defined on third party card will be used for Subledger accounting only. This one will be used for General Ledger and as default value of Subledger accounting if dedicated customer accounting account on third party is not defined. -ACCOUNTING_ACCOUNT_SUPPLIER=Account (from the Chart of Account) used for the "vendor" third parties -ACCOUNTING_ACCOUNT_SUPPLIER_Desc=The dedicated accounting account defined on third party card will be used for Subledger accounting only. This one will be used for General Ledger and as default value of Subledger accounting if dedicated vendor accounting account on third party is not defined. -ConfirmCloneTax=Confirm the clone of a social/fiscal tax -ConfirmCloneVAT=Confirm the clone of a VAT declaration -ConfirmCloneSalary=Confirm the clone of a salary -CloneTaxForNextMonth=Clone it for next month -SimpleReport=Simple report -AddExtraReport=Extra reports (add foreign and national customer report) -OtherCountriesCustomersReport=Foreign customers report -BasedOnTwoFirstLettersOfVATNumberBeingDifferentFromYourCompanyCountry=Based on the two first letters of the VAT number being different from your own company's country code -SameCountryCustomersWithVAT=National customers report -BasedOnTwoFirstLettersOfVATNumberBeingTheSameAsYourCompanyCountry=Based on the two first letters of the VAT number being the same as your own company's country code -LinkedFichinter=Link to an intervention -ImportDataset_tax_contrib=Social/fiscal taxes -ImportDataset_tax_vat=Vat payments -ErrorBankAccountNotFound=Error: Bank account not found -FiscalPeriod=Accounting period -ListSocialContributionAssociatedProject=List of social contributions associated with the project -DeleteFromCat=Remove from accounting group -AccountingAffectation=Accounting assignment -LastDayTaxIsRelatedTo=Last day of period the tax is related to -VATDue=Sale tax claimed -ClaimedForThisPeriod=Claimed for the period -PaidDuringThisPeriod=Paid for this period -PaidDuringThisPeriodDesc=This is the sum of all payments linked to VAT declarations which have an end-of-period date in the selected date range -ByVatRate=By sale tax rate -TurnoverbyVatrate=Turnover invoiced by sale tax rate -TurnoverCollectedbyVatrate=Turnover collected by sale tax rate -PurchasebyVatrate=Purchase by sale tax rate +AccountancyJournal=Denník účtovných kódov +ACCOUNTING_VAT_SOLD_ACCOUNT=Účet (z účtovnej osnovy), ktorý sa má použiť ako predvolený účet pre DPH z predaja (používa sa, ak nie je definovaný v nastaveniach slovníka DPH) +ACCOUNTING_VAT_BUY_ACCOUNT=Účet (z účtovnej osnovy), ktorý sa má použiť ako predvolený účet pre DPH z nákupov (používa sa, ak nie je definovaný v nastavení slovníka DPH) +ACCOUNTING_REVENUESTAMP_SOLD_ACCOUNT=Účet (z Účtovnej osnovy), ktorý sa má použiť pre príjmovú známku pri predaji +ACCOUNTING_REVENUESTAMP_BUY_ACCOUNT=Účet (z Účtovnej osnovy), ktorý sa má použiť pre príjmovú známku pri nákupoch +ACCOUNTING_VAT_PAY_ACCOUNT=Účet (z účtovnej osnovy), ktorý sa má použiť ako predvolený účet na platenie DPH +ACCOUNTING_VAT_BUY_REVERSE_CHARGES_CREDIT=Účet (z účtovnej osnovy), ktorý sa má použiť ako predvolený účet pre DPH z nákupov na účely prenesenia daňovej povinnosti (Kredit) +ACCOUNTING_VAT_BUY_REVERSE_CHARGES_DEBIT=Účet (z účtovnej osnovy), ktorý sa má použiť ako predvolený účet pre DPH pri nákupoch na účely prenesenia daňovej povinnosti (Debet) +ACCOUNTING_ACCOUNT_CUSTOMER=Účet (z Účtovnej osnovy) používaný pre „zákaznícke“ tretie strany +ACCOUNTING_ACCOUNT_CUSTOMER_Desc=Vyhradený účtovný účet definovaný na karte tretej strany sa použije len na účtovníctvo vedľajšej knihy. Tento sa použije pre hlavnú knihu a ako predvolená hodnota účtovníctva vedľajšej knihy, ak nie je definovaný špeciálny zákaznícky účtovný účet na tretej strane. +ACCOUNTING_ACCOUNT_SUPPLIER=Účet (z Účtovnej osnovy) používaný pre tretie strany „predávajúceho“. +ACCOUNTING_ACCOUNT_SUPPLIER_Desc=Vyhradený účtovný účet definovaný na karte tretej strany sa bude používať iba na účtovníctvo vedľajšej knihy. Toto sa použije pre hlavnú knihu a ako predvolená hodnota pre účtovníctvo vedľajšej knihy, ak nie je definovaný osobitný účtovný účet dodávateľa na tretej strane. +ConfirmCloneTax=Potvrďte klon sociálnej/fiškálnej dane +ConfirmCloneVAT=Potvrďte klon daňového priznania k DPH +ConfirmCloneSalary=Potvrďte klon platu +CloneTaxForNextMonth=Naklonujte to na budúci mesiac +SimpleReport=Jednoduchá správa +AddExtraReport=Extra správy (pridať správu o zahraničných a národných zákazníkoch) +OtherCountriesCustomersReport=Hlásia sa zahraniční zákazníci +BasedOnTwoFirstLettersOfVATNumberBeingDifferentFromYourCompanyCountry=Na základe dvoch prvých písmen IČ DPH, ktoré sa líšia od kódu krajiny vašej vlastnej spoločnosti +SameCountryCustomersWithVAT=Správa národných zákazníkov +BasedOnTwoFirstLettersOfVATNumberBeingTheSameAsYourCompanyCountry=Na základe dvoch prvých písmen IČ DPH, ktoré sú rovnaké ako kód krajiny vašej vlastnej spoločnosti +LinkedFichinter=Odkaz na zásah +ImportDataset_tax_contrib=Sociálne/fiškálne dane +ImportDataset_tax_vat=Platby DPH +ErrorBankAccountNotFound=Chyba: Bankový účet sa nenašiel +FiscalPeriod=Účtovného obdobia +ListSocialContributionAssociatedProject=Zoznam sociálnych príspevkov spojených s projektom +DeleteFromCat=Odstrániť z účtovnej skupiny +AccountingAffectation=Účtovná úloha +LastDayTaxIsRelatedTo=Posledný deň obdobia, na ktorý sa daň vzťahuje +VATDue=Nárokovaná daň z predaja +ClaimedForThisPeriod=Nárokované za obdobie +PaidDuringThisPeriod=Zaplatené za toto obdobie +PaidDuringThisPeriodDesc=Toto je súčet všetkých platieb spojených s priznaniami DPH, ktoré majú dátum konca obdobia vo vybranom rozsahu dátumov +ByVatRate=Podľa sadzby dane z predaja +TurnoverbyVatrate=Obrat fakturovaný podľa sadzby dane z predaja +TurnoverCollectedbyVatrate=Obrat vyberaný podľa sadzby dane z predaja +PurchasebyVatrate=Nákup podľa sadzby dane z predaja LabelToShow=Krátky názov -PurchaseTurnover=Purchase turnover -PurchaseTurnoverCollected=Purchase turnover collected -RulesPurchaseTurnoverDue=- It includes the supplier's due invoices whether they are paid or not.
- It is based on the invoice date of these invoices.
-RulesPurchaseTurnoverIn=- It includes all the effective payments of invoices done to suppliers.
- It is based on the payment date of these invoices
-RulesPurchaseTurnoverTotalPurchaseJournal=It includes all debit lines from the purchase journal. -RulesPurchaseTurnoverOfExpenseAccounts=It includes (debit - credit) of lines for product accounts in group EXPENSE -ReportPurchaseTurnover=Purchase turnover invoiced -ReportPurchaseTurnoverCollected=Purchase turnover collected -IncludeVarpaysInResults = Include various payments in reports -IncludeLoansInResults = Include loans in reports -InvoiceLate30Days = Late (> 30 days) -InvoiceLate15Days = Late (15 to 30 days) -InvoiceLateMinus15Days = Late (< 15 days) -InvoiceNotLate = To be collected (< 15 days) -InvoiceNotLate15Days = To be collected (15 to 30 days) -InvoiceNotLate30Days = To be collected (> 30 days) -InvoiceToPay=To pay (< 15 days) -InvoiceToPay15Days=To pay (15 to 30 days) -InvoiceToPay30Days=To pay (> 30 days) -ConfirmPreselectAccount=Preselect accountancy code -ConfirmPreselectAccountQuestion=Are you sure you want to preselect the %s selected lines with this accountancy code ? -AmountPaidMustMatchAmountOfDownPayment=Amount paid must match amount of down payment +PurchaseTurnover=Nákupný obrat +PurchaseTurnoverCollected=Zhromaždený nákupný obrat +RulesPurchaseTurnoverDue=- Zahŕňa splatné faktúry dodávateľa bez ohľadu na to, či sú zaplatené alebo nie.
– Vychádza z dátumu faktúry týchto faktúr.
+RulesPurchaseTurnoverIn=– Zahŕňa všetky skutočné platby faktúr uskutočnené dodávateľom.
– Zakladá sa na dátume platby týchto faktúr
+RulesPurchaseTurnoverTotalPurchaseJournal=Zahŕňa všetky debetné riadky z nákupného denníka. +RulesPurchaseTurnoverOfExpenseAccounts=Zahŕňa (debetné - kreditné) riadky pre produktové účty v skupine NÁKLADY +ReportPurchaseTurnover=Fakturovaný nákupný obrat +ReportPurchaseTurnoverCollected=Zhromaždený nákupný obrat +IncludeVarpaysInResults = Zahrňte do prehľadov rôzne platby +IncludeLoansInResults = Zahrnúť pôžičky do prehľadov +InvoiceLate30Days = Neskoro (> 30 dní) +InvoiceLate15Days = Neskoro (15 až 30 dní) +InvoiceLateMinus15Days = Neskoro (< 15 dní) +InvoiceNotLate = Na vyzdvihnutie (< 15 dní) +InvoiceNotLate15Days = Na vyzdvihnutie (15 až 30 dní) +InvoiceNotLate30Days = Na vyzdvihnutie (> 30 dní) +InvoiceToPay=Na zaplatenie (< 15 dní) +InvoiceToPay15Days=Platiť (15 až 30 dní) +InvoiceToPay30Days=Na zaplatenie (> 30 dní) +ConfirmPreselectAccount=Predvoľba účtovného kódu +ConfirmPreselectAccountQuestion=Naozaj chcete vopred vybrať %s vybraté riadky s týmto účtovným kódom? +AmountPaidMustMatchAmountOfDownPayment=Zaplatená suma sa musí zhodovať so sumou akontácie diff --git a/htdocs/langs/sk_SK/errors.lang b/htdocs/langs/sk_SK/errors.lang index 2ead219694c..9c06abfba86 100644 --- a/htdocs/langs/sk_SK/errors.lang +++ b/htdocs/langs/sk_SK/errors.lang @@ -16,7 +16,7 @@ ErrorEmailAlreadyExists=E-mail %s už existuje. ErrorRecordNotFound=Záznam nie je nájdený. ErrorRecordNotFoundShort=Nenájdené ErrorFailToCopyFile=Nepodarilo sa skopírovať súbor "%s" na "%s". -ErrorFailToCopyDir=Nepodarilo sa skopírovať adresár '%s do '<' ='notranslate'>
%s'. +ErrorFailToCopyDir=Failed to copy directory '%s' into '%s'. ErrorFailToRenameFile=Nepodarilo sa premenovať súbor "%s" na "%s". ErrorFailToDeleteFile=Nepodarilo sa odstrániť súbor "%s". ErrorFailToCreateFile=Nepodarilo sa vytvoriť súbor "%s". @@ -94,10 +94,10 @@ ErrorRecordIsUsedCantDelete=Záznam sa nedá vymazať. Je už použitý alebo za ErrorModuleRequireJavascript=Aby táto funkcia fungovala, nesmie byť zakázaný JavaScript. Ak chcete povoliť/zakázať JavaScript, prejdite do ponuky Domov->Nastavenie->Zobrazenie. ErrorPasswordsMustMatch=Obaja napísaný hesla sa musia zhodovať sa navzájom ErrorContactEMail=Vyskytla sa technická chyba. Obráťte sa na správcu na nasledujúci e-mail %s a uveďte chybu kód %s do správy alebo pridajte kópiu táto strana. -ErrorWrongValueForField=Pole %s: ''notrans %s' nezodpovedá pravidlu regulárneho výrazu %s' does not match regex rule %s ErrorHtmlInjectionForField=Pole %s: hodnota '%s' obsahuje škodlivé údaje, ktoré nie sú povolené -ErrorFieldValueNotIn=Pole %s: ''notrans %s' nie je hodnota nájdená v poli 38365 span>%s z 'notrans %s' nie je 350aee83 class='notranslate'>%s existujúci ref. +ErrorFieldValueNotIn=Field %s: '%s' is not a value found in field %s of %s +ErrorFieldRefNotIn=Field %s: '%s' is not a %s existing ref ErrorMultipleRecordFoundFromRef=Pri vyhľadávaní z ref %s sa našlo niekoľko záznamov. Žiadny spôsob, ako zistiť, ktoré ID použiť. ErrorsOnXLines=Našli sa %s chyby ErrorFileIsInfectedWithAVirus=Antivírusový program nebol schopný overiť súbor (súbor môže byť napadnutý vírusom) @@ -219,7 +219,7 @@ ErrorPhpMailDelivery=Skontrolujte, či nepoužívate príliš vysoký počet pr ErrorUserNotAssignedToTask=Používateľ musí byť priradený k úlohe, aby mohol zadať spotrebovaný čas. ErrorTaskAlreadyAssigned=Úloha je už priradená používateľovi ErrorModuleFileSeemsToHaveAWrongFormat=Zdá sa, že balík modulov má nesprávny formát. -ErrorModuleFileSeemsToHaveAWrongFormat2=V súbore zip modulu musí existovať aspoň jeden povinný adresár: %s > alebo %s +ErrorModuleFileSeemsToHaveAWrongFormat2=At least one mandatory directory must exists into zip of module: %s or %s ErrorFilenameDosNotMatchDolibarrPackageRules=Názov balíka modulu (%s) sa nezhoduje očakávaná syntax názvu: %s ErrorDuplicateTrigger=Chyba, duplicitný názov spúšťača %s. Už načítané z %s. ErrorNoWarehouseDefined=Chyba, nie sú definované žiadne sklady. @@ -260,12 +260,12 @@ ErrorBatchNoFoundEnoughQuantityForProductInWarehouse=Pre túto šaržu/sériu ni ErrorOnlyOneFieldForGroupByIsPossible=Je možné len 1 pole pre „Zoskupiť podľa“ (ostatné sú vyradené) ErrorTooManyDifferentValueForSelectedGroupBy=Našlo sa príliš veľa rôznych hodnôt (viac ako %s) pole '%s', takže ho nemôžeme použiť ako „Skupina podľa“ pre grafiku. Pole „Skupina podľa“ bolo odstránené. Možno by ste ho chceli použiť ako os X? ErrorReplaceStringEmpty=Chyba, reťazec, do ktorého sa má nahradiť, je prázdny -ErrorProductNeedBatchNumber=Chyba, produkt '%s/serial>' vyžaduje číslo šarže +ErrorProductNeedBatchNumber=Error, product '%s' need a lot/serial number ErrorProductDoesNotNeedBatchNumber=Chyba, produkt '%s' neprijíma sériové číslo ErrorFailedToReadObject=Chyba, nepodarilo sa prečítať objekt typu %s -ErrorParameterMustBeEnabledToAllwoThisFeature=Chyba, parameter %s musí byť povolený v triede 'notranslate'>conf/conf.php<> na umožnenie použitia rozhrania príkazového riadka interným plánovačom úloh +ErrorParameterMustBeEnabledToAllwoThisFeature=Error, parameter %s must be enabled into conf/conf.php<> to allow use of Command Line Interface by the internal job scheduler ErrorLoginDateValidity=Chyba, toto prihlásenie je mimo rozsahu dátumov platnosti -ErrorValueLength=Dĺžka poľa '%s' musí byť väčšia ako span class='notranslate'>%s' +ErrorValueLength=Length of field '%s' must be higher than '%s' ErrorReservedKeyword=Slovo '%s' je vyhradené kľúčové slovo ErrorFilenameReserved=Názov súboru %s nie je možné použiť tak, ako je vyhradený a chránený príkaz. ErrorNotAvailableWithThisDistribution=Nie je k dispozícii s touto distribúciou @@ -315,7 +315,7 @@ ErrorExistingPermission = Povolenie %s pre objekt notrans %s už existuje ErrorEqualModule=Modul je neplatný v %s ErrorFieldValue=Hodnota pre %s je nesprávna -ErrorCoherenceMenu=%s, keď sa vyžaduje Opravte to tu @@ -366,7 +366,7 @@ WarningCreateSubAccounts=Upozornenie, podúčet nemôžete vytvoriť priamo, mus WarningAvailableOnlyForHTTPSServers=Dostupné iba pri použití zabezpečeného pripojenia HTTPS. WarningModuleXDisabledSoYouMayMissEventHere=Modul %s nebol povolený. Takže tu môžete zmeškať veľa udalostí. WarningPaypalPaymentNotCompatibleWithStrict=Hodnota 'Strict' spôsobuje, že funkcie online platieb nefungujú správne. Namiesto toho použite „Lax“. -WarningThemeForcedTo=Upozornenie, motív bol vynútený %s MAIN_FORHEC skrytými konštantami MAIN_FORHEC +WarningThemeForcedTo=Warning, theme has been forced to %s by hidden constant MAIN_FORCETHEME WarningPagesWillBeDeleted=Upozornenie, týmto sa odstránia aj všetky existujúce stránky/kontajnery webovej lokality. Svoju webovú stránku by ste mali exportovať predtým, aby ste mali zálohu, ktorú môžete neskôr znova importovať. WarningAutoValNotPossibleWhenStockIsDecreasedOnInvoiceVal=Automatická validácia je vypnutá, keď je možnosť zníženia zásob nastavená na "Overenie faktúry". WarningModuleNeedRefresh = Modul %s bol zakázaný. Nezabudnite ho povoliť diff --git a/htdocs/langs/sk_SK/eventorganization.lang b/htdocs/langs/sk_SK/eventorganization.lang index dc3e9ec6bc5..7e6804e91eb 100644 --- a/htdocs/langs/sk_SK/eventorganization.lang +++ b/htdocs/langs/sk_SK/eventorganization.lang @@ -36,7 +36,7 @@ EventOrganizationSetup=Nastavenie organizácie udalosti EventOrganization=Organizácia podujatia EventOrganizationSetupPage = Stránka nastavenia organizácie udalosti EVENTORGANIZATION_TASK_LABEL = Označenie úloh, ktoré sa vytvorí automaticky pri overení projektu -EVENTORGANIZATION_TASK_LABELTooltip = Keď potvrdíte organizáciu udalosti, niektoré úlohy sa môžu automaticky vytvoriť v projekte

Napríklad:
Odoslať výzvu na konferencie
Odoslať výzvu na stánok
návrhy na konferenciuValispandate class ='notranslate'>
Overiť prihlášku pre stánky
Otvoriť odbery udalosti pre účastníkovb0342fccfda>Sbz0 udalosti prednášajúcim
Poslať pripomienku udalosti hosťom stánku
Poslať účastníkom pripomienku udalosti +EVENTORGANIZATION_TASK_LABELTooltip = When you validate an event to organize, some tasks can be automatically created in the project

For example:
Send Call for Conferences
Send Call for Booths
Validate suggestions of Conferences
Validate application for Booths
Open subscriptions to the event for attendees
Send a remind of the event to speakers
Send a remind of the event to Booth hosters
Send a remind of the event to attendees EVENTORGANIZATION_TASK_LABELTooltip2=Ponechajte prázdne, ak nepotrebujete vytvárať úlohy automaticky. EVENTORGANIZATION_CATEG_THIRDPARTY_CONF = Kategória na pridanie k tretím stranám sa automaticky vytvorí, keď niekto navrhne konferenciu EVENTORGANIZATION_CATEG_THIRDPARTY_BOOTH = Kategória na pridanie k tretím stranám sa automaticky vytvorí, keď navrhnú stánok @@ -88,6 +88,7 @@ PriceOfRegistration=Cena registrácie PriceOfRegistrationHelp=Cena za registráciu alebo účasť na podujatí PriceOfBooth=Cena predplatného na státie stánku PriceOfBoothHelp=Cena predplatného na státie stánku +EventOrganizationICSLinkProject=Link ICS for the event EventOrganizationICSLink=Prepojiť ICS pre konferencie ConferenceOrBoothInformation=Informácie o konferencii alebo stánku Attendees=Účastníci @@ -127,8 +128,8 @@ PublicAttendeeSubscriptionPage = Verejný odkaz na registráciu iba na túto uda MissingOrBadSecureKey = Bezpečnostný kľúč je neplatný alebo chýba EvntOrgWelcomeMessage = Tento formulár vám umožňuje zaregistrovať sa ako nový účastník podujatia EvntOrgDuration = Táto konferencia sa začína %s a končí sa %s. -ConferenceAttendeeFee = Účastnícky poplatok za udalosť: '%s' od %s do b0ecb2ec87f49f >. -BoothLocationFee = Miesto stánku pre udalosť: '%s' od %s do %s +ConferenceAttendeeFee = Conference attendee fee for the event : '%s' occurring from %s to %s. +BoothLocationFee = Booth location for the event : '%s' occurring from %s to %s EventType = Typ udalosti LabelOfBooth=Označenie stánku LabelOfconference=Konferenčný štítok diff --git a/htdocs/langs/sk_SK/exports.lang b/htdocs/langs/sk_SK/exports.lang index b781a584de8..a071e076d18 100644 --- a/htdocs/langs/sk_SK/exports.lang +++ b/htdocs/langs/sk_SK/exports.lang @@ -87,7 +87,7 @@ ErrorMissingMandatoryValue=V zdrojovom súbore v stĺpci %s sú povinné TooMuchErrors=Stále existujú %s ďalšie zdrojové riadky s chybami, ale výstup má boli obmedzené. TooMuchWarnings=Stále existujú %s iné zdrojové riadky s upozorneniami boli obmedzené. EmptyLine=Prázdny riadok (budú odstránené) -CorrectErrorBeforeRunningImport=musíte opraviť všetky chyby b0aee83365837fore class
spustí definitívny import. +CorrectErrorBeforeRunningImport=You must correct all errors before running the definitive import. FileWasImported=Súbor bol importovaný s číslom %s. YouCanUseImportIdToFindRecord=Všetky importované záznamy môžete nájsť vo svojej databáze filtrovaním podľa poľa import_key='%s'. NbOfLinesOK=Počet riadkov bez chýb a bez varovania: %s. @@ -103,9 +103,9 @@ SourceRequired=Hodnota dát je povinné SourceExample=Príklad možné hodnoty údajov ExampleAnyRefFoundIntoElement=Akékoľvek ref našli prvkov %s ExampleAnyCodeOrIdFoundIntoDictionary=Kód (alebo ID) nájdené v slovníku %s -CSVFormatDesc=Hodnota oddelená čiarkou formát súboru (.csv).
je formát textového súboru, kde sú polia oddelené oddeľovačom [ %s ]. Ak sa v obsahu poľa nájde oddeľovač, pole sa zaokrúhli na okrúhly znak [ %s ]. Únikový znak na únikový kruhový znak je [ %s ]. +CSVFormatDesc=Comma Separated Value file format (.csv).
This is a text file format where fields are separated by a separator [ %s ]. If separator is found inside a field content, field is rounded by round character [ %s ]. Escape character to escape round character is [ %s ]. Excel95FormatDesc=Excel formát súboru (.xls)
Formát Excel 95 (BIFF5). -Excel2007FormatDesc=Excel formát súboru (.xlsx)
Formát Excel 2007 (Tabuľkový hárokML). +Excel2007FormatDesc=Excel file format (.xlsx)
This is the native Excel 2007 format (SpreadsheetML). TsvFormatDesc=Tab Hodnoty oddelené formát súboru (. TSV)
Jedná sa o textový formát súboru, kde sú polia oddelené tabulátorom [Tab]. ExportFieldAutomaticallyAdded=Pole %s bolo pridané automaticky. Vyhnete sa tak tomu, že podobné riadky sa budú považovať za duplicitný záznam (pri pridaní tohto poľa budú mať všetky riadky svoje vlastné ID a budú sa líšiť). CsvOptions=Možnosti formátu CSV @@ -113,8 +113,8 @@ Separator=Oddeľovač polí Enclosure=Oddeľovač reťazcov SpecialCode=Špeciálny kód ExportStringFilter=%% umožňuje nahradenie jedného alebo viac znakov v texte -ExportDateFilter=RRRR, RRRRMM, RRRRMMDD: filtre podľa jedného roka/mesiaca/deň
RRRR+RRRR, RRRRMM+RRRRMMDD+RRRRMMDD+ RRRRMMDD roky/mesiace/dni span class='notranslate'>
> RRRR, > RRRRMM, > RRRRMMDD: filtre pre všetky nasledujúce roky/mesiace/dni
< RRRR, < RRRR, < RRRR RRRRMMDD: filtruje všetky predchádzajúce roky/mesiace/dni -ExportNumericFilter=NNNNN filtruje podľa jednej hodnoty
NNNNN+NNNNNN filtruje v rozsahu hodnôt
b08912a027 /span>> NNNNN filtruje vyššie hodnoty +ExportDateFilter=YYYY, YYYYMM, YYYYMMDD: filters by one year/month/day
YYYY+YYYY, YYYYMM+YYYYMM, YYYYMMDD+YYYYMMDD: filters over a range of years/months/days
> YYYY, > YYYYMM, > YYYYMMDD: filters on all following years/months/days
< YYYY, < YYYYMM, < YYYYMMDD: filters on all previous years/months/days +ExportNumericFilter=NNNNN filters by one value
NNNNN+NNNNN filters over a range of values
< NNNNN filters by lower values
> NNNNN filters by higher values ImportFromLine=Import začína od riadka číslo EndAtLineNb=Číslo konca riadka ImportFromToLine=Limitný rozsah (Od - Do). Napr. vynechať riadok(y) hlavičky. diff --git a/htdocs/langs/sk_SK/hrm.lang b/htdocs/langs/sk_SK/hrm.lang index 7b44243dff1..0052aa63aff 100644 --- a/htdocs/langs/sk_SK/hrm.lang +++ b/htdocs/langs/sk_SK/hrm.lang @@ -2,91 +2,96 @@ # Admin -HRM_EMAIL_EXTERNAL_SERVICE=Email to prevent HRM external service -Establishments=Establishments -Establishment=Establishment -NewEstablishment=New establishment -DeleteEstablishment=Delete establishment -ConfirmDeleteEstablishment=Are you sure you wish to delete this establishment? -OpenEtablishment=Open establishment -CloseEtablishment=Close establishment +HRM_EMAIL_EXTERNAL_SERVICE=E-mail na zabránenie externej službe HRM +Establishments=Prevádzkarne +Establishment=Založenie +NewEstablishment=Nová prevádzka +DeleteEstablishment=Odstrániť prevádzkareň +ConfirmDeleteEstablishment=Naozaj chcete odstrániť túto inštitúciu? +OpenEtablishment=Otvorená prevádzka +CloseEtablishment=Zatvorte prevádzkareň # Dictionary -DictionaryPublicHolidays=Leave - Public holidays -DictionaryDepartment=HRM - Organizational Unit -DictionaryFunction=HRM - Job positions +DictionaryPublicHolidays=Dovolenka - štátne sviatky +DictionaryDepartment=HRM – organizačná jednotka +DictionaryFunction=HRM - Pracovné pozície # Module -Employees=Employees +Employees=zamestnancov Employee=Zamestnanec -NewEmployee=New employee -ListOfEmployees=List of employees -HrmSetup=HRM module setup -SkillsManagement=Skills management -HRM_MAXRANK=Maximum number of levels to rank a skill -HRM_DEFAULT_SKILL_DESCRIPTION=Default description of ranks when skill is created +NewEmployee=Nový zamestnanec +ListOfEmployees=Zoznam zamestnancov +HrmSetup=Nastavenie modulu HRM +SkillsManagement=Manažment zručností +HRM_MAXRANK=Maximálny počet úrovní na hodnotenie zručnosti +HRM_DEFAULT_SKILL_DESCRIPTION=Predvolený popis hodností pri vytváraní zručnosti deplacement=Shift -DateEval=Evaluation date -JobCard=Job card -JobPosition=Job profile -JobsPosition=Job profiles -NewSkill=New Skill -SkillType=Skill type -Skilldets=List of ranks for this skill -Skilldet=Skill level -rank=Rank -ErrNoSkillSelected=No skill selected -ErrSkillAlreadyAdded=This skill is already in the list -SkillHasNoLines=This skill has no lines -skill=Skill -Skills=Skills -SkillCard=Skill card -EmployeeSkillsUpdated=Employee skills have been updated (see "Skills" tab of employee card) -Eval=Evaluation -Evals=Evaluations -NewEval=New evaluation -ValidateEvaluation=Validate evaluation -ConfirmValidateEvaluation=Are you sure you want to validate this evaluation with reference %s? -EvaluationCard=Evaluation card -RequiredRank=Required rank for this job -EmployeeRank=Employee rank for this skill -EmployeePosition=Employee position -EmployeePositions=Employee positions -EmployeesInThisPosition=Employees in this position -group1ToCompare=Usergroup to analyze -group2ToCompare=Second usergroup for comparison -OrJobToCompare=Compare to job skills requirements +DateEval=Dátum hodnotenia +JobCard=Pracovná karta +NewJobProfile=Nový pracovný profil +JobProfile=Pracovný profil +JobsProfiles=Pracovné profily +NewSkill=Nová zručnosť +SkillType=Typ zručnosti +Skilldets=Zoznam hodností pre túto zručnosť +Skilldet=Úroveň zručnosti +rank=Poradie +ErrNoSkillSelected=Nie je vybratá žiadna zručnosť +ErrSkillAlreadyAdded=Táto zručnosť je už v zozname +SkillHasNoLines=Táto zručnosť nemá žiadne čiary +Skill=Zručnosť +Skills=Zručnosti +SkillCard=Karta zručnosti +EmployeeSkillsUpdated=Zručnosti zamestnanca boli aktualizované (pozri kartu „Zručnosti“ na karte zamestnanca) +Eval=Hodnotenie +Evals=hodnotenia +NewEval=Nové hodnotenie +ValidateEvaluation=Overiť hodnotenie +ConfirmValidateEvaluation=Are you sure you want to validate this evaluation with the reference %s? +EvaluationCard=Hodnotiaca karta +RequiredRank=Požadovaná hodnosť pre pracovný profil +RequiredRankShort=Požadovaná hodnosť +PositionsWithThisProfile=Pozície s týmto pracovným profilom +EmployeeRank=Hodnosť zamestnanca za túto zručnosť +EmployeeRankShort=Zamestnanecká hodnosť +EmployeePosition=Zamestnanecká pozícia +EmployeePositions=Zamestnanecké pozície +EmployeesInThisPosition=Zamestnanci na tejto pozícii +group1ToCompare=Používateľská skupina na analýzu +group2ToCompare=Druhá skupina používateľov na porovnanie +OrJobToCompare=Porovnajte s požiadavkami na zručnosti profilu zamestnania difference=Rozdiel -CompetenceAcquiredByOneOrMore=Competence acquired by one or more users but not requested by the second comparator -MaxlevelGreaterThan=Max level greater than the one requested -MaxLevelEqualTo=Max level equal to that demand -MaxLevelLowerThan=Max level lower than that demand -MaxlevelGreaterThanShort=Employee level greater than the one requested -MaxLevelEqualToShort=Employee level equals to that demand -MaxLevelLowerThanShort=Employee level lower than that demand -SkillNotAcquired=Skill not acquired by all users and requested by the second comparator +CompetenceAcquiredByOneOrMore=Kompetencia získaná jedným alebo viacerými používateľmi, ale nevyžiadaná druhým porovnávačom +MaxlevelGreaterThan=Úroveň zamestnancov je vyššia ako očakávaná úroveň +MaxLevelEqualTo=Úroveň zamestnancov sa rovná očakávanej úrovni +MaxLevelLowerThan=Úroveň zamestnancov je nižšia ako očakávaná úroveň +MaxlevelGreaterThanShort=Úroveň vyššia, ako sa očakávalo +MaxLevelEqualToShort=Úroveň rovná očakávanej úrovni +MaxLevelLowerThanShort=Úroveň nižšia, ako sa očakávalo +SkillNotAcquired=Zručnosť, ktorú nezískali všetci používatelia a ktorú vyžaduje druhý porovnávač legend=Legenda -TypeSkill=Skill type -AddSkill=Add skills to job -RequiredSkills=Required skills for this job -UserRank=User Rank -SkillList=Skill list -SaveRank=Save rank -TypeKnowHow=Know how -TypeHowToBe=How to be -TypeKnowledge=Knowledge -AbandonmentComment=Abandonment comment -DateLastEval=Date last evaluation -NoEval=No evaluation done for this employee -HowManyUserWithThisMaxNote=Number of users with this rank -HighestRank=Highest rank -SkillComparison=Skill comparison -ActionsOnJob=Events on this job -VacantPosition=job vacancy -VacantCheckboxHelper=Checking this option will show unfilled positions (job vacancy) -SaveAddSkill = Skill(s) added -SaveLevelSkill = Skill(s) level saved -DeleteSkill = Skill removed -SkillsExtraFields=Attributs supplémentaires (Compétences) -JobsExtraFields=Attributs supplémentaires (Emplois) -EvaluationsExtraFields=Attributs supplémentaires (Evaluations) -NeedBusinessTravels=Need business travels -NoDescription=No description +TypeSkill=Typ zručnosti +AddSkill=Pridajte zručnosti do pracovného profilu +RequiredSkills=Požadované zručnosti pre tento pracovný profil +UserRank=Hodnotenie používateľa +SkillList=Zoznam zručností +SaveRank=Uložiť hodnosť +TypeKnowHow=Know-how +TypeHowToBe=Ako byť +TypeKnowledge=Vedomosti +AbandonmentComment=Komentár o opustení +DateLastEval=Dátum posledného hodnotenia +NoEval=Pre tohto zamestnanca nebolo vykonané žiadne hodnotenie +HowManyUserWithThisMaxNote=Počet používateľov s týmto hodnotením +HighestRank=Najvyššia hodnosť +SkillComparison=Porovnanie zručností +ActionsOnJob=Udalosti v tejto práci +VacantPosition=voľné pracovné miesto +VacantCheckboxHelper=Zaškrtnutím tejto možnosti sa zobrazia neobsadené pozície (voľné pracovné miesto) +SaveAddSkill = Pridané zručnosti +SaveLevelSkill = Úroveň zručností bola uložená +DeleteSkill = Zručnosť odstránená +SkillsExtraFields=Doplnkové atribúty (zručnosti) +JobsExtraFields=Doplnkové atribúty (Profil úlohy) +EvaluationsExtraFields=Doplnkové atribúty (hodnotenia) +NeedBusinessTravels=Potrebujete služobné cesty +NoDescription=žiadny popis +TheJobProfileHasNoSkillsDefinedFixBefore=Hodnotený pracovný profil tohto zamestnanca nemá definovanú žiadnu zručnosť. Pridajte zručnosti, potom odstráňte a reštartujte hodnotenie. diff --git a/htdocs/langs/sk_SK/install.lang b/htdocs/langs/sk_SK/install.lang index 06f2fbed1cf..1e1c1cf66a4 100644 --- a/htdocs/langs/sk_SK/install.lang +++ b/htdocs/langs/sk_SK/install.lang @@ -2,36 +2,36 @@ InstallEasy=Stačí sledovať inštrukcie krok za krokom. MiscellaneousChecks=Kontrola predpokladov ConfFileExists=Konfiguračný súbor %s existuje. -ConfFileDoesNotExistsAndCouldNotBeCreated=Configuration file %s does not exist and could not be created! +ConfFileDoesNotExistsAndCouldNotBeCreated=Konfiguračný súbor %s neexistuje a nebolo možné ho vytvoriť! ConfFileCouldBeCreated=%s Konfiguračný súbor môže byť vytvorený. -ConfFileIsNotWritable=Configuration file %s is not writable. Check permissions. For first install, your web server must be able to write into this file during configuration process ("chmod 666" for example on a Unix like OS). +ConfFileIsNotWritable=Konfiguračný súbor %s nie je zapisovateľný. Skontrolujte povolenia. Pri prvej inštalácii musí byť váš webový server schopný zapisovať do tohto súboru počas procesu konfigurácie („chmod 666“ napríklad na OS typu Unix). ConfFileIsWritable=Konfiguračný súbor %s je zapisovatelný. -ConfFileMustBeAFileNotADir=Configuration file %s must be a file, not a directory. -ConfFileReload=Reloading parameters from configuration file. -NoReadableConfFileSoStartInstall=The configuration file conf/conf.php does not exists or is not readable. We will run the installation process to try to initialize it. +ConfFileMustBeAFileNotADir=Konfiguračný súbor %s musí byť súbor, nie adresár. +ConfFileReload=Opätovné načítanie parametrov z konfiguračného súboru. +NoReadableConfFileSoStartInstall=Konfiguračný súbor conf/conf.php neexistuje alebo nie je čitateľný. Spustíme proces inštalácie a pokúsime sa ho inicializovať. PHPSupportPOSTGETOk=Vaše PHP podporuje premenné POST a GET. -PHPSupportPOSTGETKo=It's possible your PHP setup does not support variables POST and/or GET. Check the parameter variables_order in php.ini. +PHPSupportPOSTGETKo=Je možné, že vaše nastavenie PHP nepodporuje premenné POST a/alebo GET. Skontrolujte parameter variables_order v php.ini. PHPSupportSessions=Vaše PHP podporuje relácie. -PHPSupport=This PHP supports %s functions. +PHPSupport=Toto PHP podporuje funkcie %s. PHPMemoryOK=Maximálna pamäť pre relácie v PHP je nastavená na %s. To by malo stačiť. PHPMemoryTooLow=Your PHP max session memory is set to %s bytes. This is too low. Change your php.ini to set memory_limit parameter to at least %s bytes. -Recheck=Click here for a more detailed test -ErrorPHPDoesNotSupportSessions=Your PHP installation does not support sessions. This feature is required to allow Dolibarr to work. Check your PHP setup and permissions of the sessions directory. -ErrorPHPDoesNotSupport=Your PHP installation does not support %s functions. +Recheck=Kliknutím sem zobrazíte podrobnejší test +ErrorPHPDoesNotSupportSessions=Vaša inštalácia PHP nepodporuje relácie. Táto funkcia je potrebná na to, aby Dolibarr fungoval. Skontrolujte nastavenie PHP a oprávnenia adresára sessions. +ErrorPHPDoesNotSupport=Vaša inštalácia PHP nepodporuje funkcie %s. ErrorDirDoesNotExists=Adresár %s neexistuje. -ErrorGoBackAndCorrectParameters=Go back and check/correct the parameters. +ErrorGoBackAndCorrectParameters=Vráťte sa a skontrolujte/opravte parametre. ErrorWrongValueForParameter=Možno ste zadali nesprávnu hodnotu pre parameter "%s". ErrorFailedToCreateDatabase=Nepodarilo sa vytvoriť databázu "%s". ErrorFailedToConnectToDatabase=Nepodarilo sa pripojiť k databáze "%s". ErrorDatabaseVersionTooLow=Verzia databázy (%s) je príliš stará. Vyžaduje sa verzia %s alebo vyššia. -ErrorPHPVersionTooLow=PHP version too old. Version %s or higher is required. -ErrorPHPVersionTooHigh=PHP version too high. Version %s or lower is required. -ErrorConnectedButDatabaseNotFound=Connection to server successful but database '%s' not found. +ErrorPHPVersionTooLow=Verzia PHP je príliš stará. Vyžaduje sa verzia %s alebo vyššia. +ErrorPHPVersionTooHigh=Verzia PHP je príliš vysoká. Vyžaduje sa verzia %s alebo nižšia. +ErrorConnectedButDatabaseNotFound=Pripojenie k serveru úspešné, ale databáza '%s' sa nenašla. ErrorDatabaseAlreadyExists=Databáza '%s' už existuje. -ErrorNoMigrationFilesFoundForParameters=No migration file found for the selected versions -IfDatabaseNotExistsGoBackAndUncheckCreate=If the database does not exist, go back and check option "Create database". +ErrorNoMigrationFilesFoundForParameters=Pre vybraté verzie sa nenašiel žiadny súbor migrácie +IfDatabaseNotExistsGoBackAndUncheckCreate=Ak databáza neexistuje, vráťte sa späť a zaškrtnite možnosť „Vytvoriť databázu“. IfDatabaseExistsGoBackAndCheckCreate=Ak databáza už existuje, vráťte sa späť a zrušte začiarknutie políčka "Vytvoriť databázu". -WarningBrowserTooOld=Version of browser is too old. Upgrading your browser to a recent version of Firefox, Chrome or Opera is highly recommended. +WarningBrowserTooOld=Verzia prehliadača je príliš stará. Dôrazne sa odporúča inovovať prehliadač na najnovšiu verziu prehliadača Firefox, Chrome alebo Opera. PHPVersion=Verzia PHP License=Používa sa licencia ConfigurationFile=Konfiguračný súbor @@ -44,23 +44,22 @@ DolibarrDatabase=Dolibarr databáza DatabaseType=Typ databázy DriverType=Typ ovládača Server=Server -ServerAddressDescription=Name or ip address for the database server. Usually 'localhost' when the database server is hosted on the same server as the web server. +ServerAddressDescription=Názov alebo IP adresa databázového servera. Zvyčajne „localhost“, keď je databázový server umiestnený na rovnakom serveri ako webový server. ServerPortDescription=Port databázového servera. Nechajte prázdne, ak je neznámy. DatabaseServer=Databázový server DatabaseName=Názov databázy -DatabasePrefix=Database table prefix -DatabasePrefixDescription=Database table prefix. If empty, defaults to llx_. -AdminLogin=User account for the Dolibarr database owner. -PasswordAgain=Retype password confirmation +DatabasePrefix=Predpona databázovej tabuľky +DatabasePrefixDescription=Predpona databázovej tabuľky. Ak je prázdny, predvolená hodnota je llx_. +AdminLogin=Používateľský účet vlastníka databázy Dolibarr. AdminPassword=Heslo pre vlastníka databázy Dolibarr. CreateDatabase=Vytvoriť databázu -CreateUser=Create user account or grant user account permission on the Dolibarr database +CreateUser=Vytvorte používateľské konto alebo udeľte povolenie používateľskému kontu v databáze Dolibarr DatabaseSuperUserAccess=Databázový server - prístup Superuser -CheckToCreateDatabase=Check the box if the database does not exist yet and so must be created.
In this case, you must also fill in the user name and password for the superuser account at the bottom of this page. -CheckToCreateUser=Check the box if:
the database user account does not yet exist and so must be created, or
if the user account exists but the database does not exist and permissions must be granted.
In this case, you must enter the user account and password and also the superuser account name and password at the bottom of this page. If this box is unchecked, database owner and password must already exist. -DatabaseRootLoginDescription=Superuser account name (to create new databases or new users), mandatory if the database or its owner does not already exist. -KeepEmptyIfNoPassword=Leave empty if superuser has no password (NOT recommended) -SaveConfigurationFile=Saving parameters to +CheckToCreateDatabase=Začiarknite políčko, ak databáza ešte neexistuje, a preto musí byť vytvorená.
V tomto prípade musíte v spodnej časti vyplniť aj používateľské meno a heslo pre superužívateľský účet tejto stránky. +CheckToCreateUser=Začiarknite políčko, ak:
používateľský účet databázy ešte neexistuje, a preto ho treba vytvoriť, alebo
ak používateľský účet existuje, ale databáza neexistuje a musia byť udelené povolenia.
V tomto prípade musíte zadať používateľský účet a heslo a span>tiež meno a heslo superužívateľského účtu v spodnej časti tejto stránky. Ak toto políčko nie je začiarknuté, vlastník databázy a heslo už musia existovať. +DatabaseRootLoginDescription=Názov účtu superužívateľa (na vytvorenie nových databáz alebo nových používateľov), povinný, ak databáza alebo jej vlastník ešte neexistuje. +KeepEmptyIfNoPassword=Nechajte prázdne, ak superužívateľ nemá žiadne heslo (NEODPORÚČANÉ) +SaveConfigurationFile=Ukladanie parametrov do ServerConnection=Pripojenie k serveru DatabaseCreation=Vytvorenie databázy CreateDatabaseObjects=Tvorba objektov databázy @@ -71,9 +70,9 @@ CreateOtherKeysForTable=Vytvorte cudzie kľúče a indexy pre tabuľky %s OtherKeysCreation=Cudzie kľúče a indexy tvorba FunctionsCreation=Funkcia vytvárania AdminAccountCreation=Administrator login tvorba -PleaseTypePassword=Please type a password, empty passwords are not allowed! -PleaseTypeALogin=Please type a login! -PasswordsMismatch=Passwords differs, please try again! +PleaseTypePassword=Zadajte heslo, prázdne heslá nie sú povolené! +PleaseTypeALogin=Zadajte prihlasovacie meno! +PasswordsMismatch=Heslá sa líšia, skúste to znova! SetupEnd=Koniec nastavenie SystemIsInstalled=Táto inštalácia je dokončená. SystemIsUpgraded=Dolibarr bol aktualizovaný úspešne. @@ -81,73 +80,73 @@ YouNeedToPersonalizeSetup=Je potrebné nakonfigurovať Dolibarr aby vyhovoval va AdminLoginCreatedSuccessfuly=Dolibarr administrátorský účet '%s' úspešne vytvorený GoToDolibarr=Prejsť na Dolibarr GoToSetupArea=Prejsť na Dolibarr (nastavenie plochy) -MigrationNotFinished=The database version is not completely up to date: run the upgrade process again. +MigrationNotFinished=Verzia databázy nie je úplne aktuálna: spustite proces aktualizácie znova. GoToUpgradePage=Prejsť na stránku znova upgradovať WithNoSlashAtTheEnd=Bez lomítka "/" na koniec -DirectoryRecommendation=IMPORTANT: You must use a directory that is outside of the web pages (so do not use a subdirectory of previous parameter). +DirectoryRecommendation=DÔLEŽITÉ: Musíte použiť adresár, ktorý sa nachádza mimo webových stránok (takže nepoužívajte podadresár predchádzajúceho parametra ). LoginAlreadyExists=Už existuje DolibarrAdminLogin=Dolibarr admin login -AdminLoginAlreadyExists=Dolibarr administrator account '%s' already exists. Go back if you want to create another one. +AdminLoginAlreadyExists=Účet správcu Dolibarr '%s už existuje.' Ak chcete vytvoriť ďalší, vráťte sa späť. FailedToCreateAdminLogin=Vytvorenie Dolibarr administratórskeho účtu zlyhalo -WarningRemoveInstallDir=Warning, for security reasons, once the install or upgrade is complete, you should add a file called install.lock into the Dolibarr document directory in order to prevent the accidental/malicious use of the install tools again. -FunctionNotAvailableInThisPHP=Not available in this PHP +WarningRemoveInstallDir=Upozornenie, z bezpečnostných dôvodov musíte po dokončení procesu inštalácie pridať súbor s názvom install.lock do Adresár dokumentov Dolibarr, aby ste zabránili opätovnému náhodnému/neúmyselnému použitiu inštalačných nástrojov. +FunctionNotAvailableInThisPHP=Nie je k dispozícii v tomto PHP ChoosedMigrateScript=Vyberte si skript migrácie -DataMigration=Database migration (data) -DatabaseMigration=Database migration (structure + some data) +DataMigration=Migrácia databázy (údaje) +DatabaseMigration=Migrácia databázy (štruktúra + niektoré údaje) ProcessMigrateScript=Skript pre spracovanie ChooseYourSetupMode=Vyberte si režim inštalácie a kliknite na tlačidlo "Štart" ... FreshInstall=Čerstvá inštalácia -FreshInstallDesc=Use this mode if this is your first install. If not, this mode can repair a incomplete previous install. If you want to upgrade your version, choose "Upgrade" mode. +FreshInstallDesc=Tento režim použite, ak ide o vašu prvú inštaláciu. Ak nie, tento režim môže opraviť nedokončenú predchádzajúcu inštaláciu. Ak chcete aktualizovať svoju verziu, vyberte režim „Aktualizovať“. Upgrade=Vylepšiť UpgradeDesc=Tento režim použite, ak ste vymenili staré Dolibarr súbory sa súbory z novšej verzie. To bude aktualizovať databázy a dáta. Start=Začiatok InstallNotAllowed=Inštalácia nie je povolené conf.php oprávnenia YouMustCreateWithPermission=Musíte vytvoriť súbor %s a nastaviť povolenia na zápis na tom webovom serveri počas procesu inštalácie. -CorrectProblemAndReloadPage=Please fix the problem and press F5 to reload the page. +CorrectProblemAndReloadPage=Opravte problém a stlačením klávesu F5 znova načítajte stránku. AlreadyDone=Už sa sťahoval DatabaseVersion=Verzia databázy ServerVersion=Databázový server verzia YouMustCreateItAndAllowServerToWrite=Musíte vytvoriť tento adresár a umožniť pre webový server zapisovať do neho. DBSortingCollation=Znak triedením -YouAskDatabaseCreationSoDolibarrNeedToConnect=You selected create database %s, but for this, Dolibarr needs to connect to server %s with super user %s permissions. -YouAskLoginCreationSoDolibarrNeedToConnect=You selected create database user %s, but for this, Dolibarr needs to connect to server %s with super user %s permissions. -BecauseConnectionFailedParametersMayBeWrong=The database connection failed: the host or super user parameters must be wrong. +YouAskDatabaseCreationSoDolibarrNeedToConnect=Vybrali ste vytvoriť databázu %s, ale na to potrebuje Dolibarr na pripojenie k serveru %s so super používateľom %s. +YouAskLoginCreationSoDolibarrNeedToConnect=Vybrali ste používateľa vytvorenia databázy %s, ale pre toto, Dolibarr potrebuje sa pripojiť k serveru %s so super používateľom %s. +BecauseConnectionFailedParametersMayBeWrong=Pripojenie k databáze zlyhalo: parametre hostiteľa alebo superužívateľa musia byť nesprávne. OrphelinsPaymentsDetectedByMethod=Siroty platba detegované metódou %s RemoveItManuallyAndPressF5ToContinue=Odstrániť ručne a stlačte klávesu F5 pokračovať. FieldRenamed=Pole premenovaný -IfLoginDoesNotExistsCheckCreateUser=If the user does not exist yet, you must check option "Create user" +IfLoginDoesNotExistsCheckCreateUser=Ak používateľ ešte neexistuje, musíte zaškrtnúť možnosť „Vytvoriť používateľa“ ErrorConnection=Server "%s", database name "%s", login "%s", or database password may be wrong or the PHP client version may be too old compared to the database version. InstallChoiceRecommanded=Odporúčaná voľba pre inštaláciu verzie %s od aktuálnej verzie %s InstallChoiceSuggested=Nainštalujte voľbou navrhol inštaláciu. -MigrateIsDoneStepByStep=The targeted version (%s) has a gap of several versions. The install wizard will come back to suggest a further migration once this one is complete. -CheckThatDatabasenameIsCorrect=Check that the database name "%s" is correct. +MigrateIsDoneStepByStep=Cieľová verzia (%s) má medzeru niekoľkých verzií. Sprievodca inštaláciou sa vráti a navrhne ďalšiu migráciu po dokončení tejto. +CheckThatDatabasenameIsCorrect=Skontrolujte, či je názov databázy "%s" správny. IfAlreadyExistsCheckOption=Ak to je správny názov a databázy doteraz neexistuje, musíte skontrolovať voľbu "Vytvoriť databázu". OpenBaseDir=PHP OpenBasedir parametrov -YouAskToCreateDatabaseSoRootRequired=You checked the box "Create database". For this, you need to provide the login/password of superuser (bottom of form). -YouAskToCreateDatabaseUserSoRootRequired=You checked the box "Create database owner". For this, you need to provide the login/password of superuser (bottom of form). -NextStepMightLastALongTime=The current step may take several minutes. Please wait until the next screen is shown completely before continuing. -MigrationCustomerOrderShipping=Migrate shipping for sales orders storage +YouAskToCreateDatabaseSoRootRequired=Zaškrtli ste políčko „Vytvoriť databázu“. Na tento účel musíte zadať prihlasovacie meno/heslo superužívateľa (spodná časť formulára). +YouAskToCreateDatabaseUserSoRootRequired=Zaškrtli ste políčko „Vytvoriť vlastníka databázy“. Na tento účel musíte zadať prihlasovacie meno/heslo superužívateľa (spodná časť formulára). +NextStepMightLastALongTime=Aktuálny krok môže trvať niekoľko minút. Pred pokračovaním počkajte, kým sa úplne nezobrazí ďalšia obrazovka. +MigrationCustomerOrderShipping=Migrujte zásielky pre sklad predajných objednávok MigrationShippingDelivery=Aktualizujte skladovanie lodnej dopravy MigrationShippingDelivery2=Aktualizujte skladovaní dopravy 2 MigrationFinished=Migrácia dokončená -LastStepDesc=Last step: Define here the login and password you wish to use to connect to Dolibarr. Do not lose this as it is the master account to administer all other/additional user accounts. +LastStepDesc=Posledný krok: Tu definujte prihlasovacie meno a heslo, ktoré chcete použiť na pripojenie k službe Dolibarr. Nestratíte to, pretože je to hlavný účet na správu všetkých ostatných/ďalších používateľských účtov. ActivateModule=Aktivácia modulu %s ShowEditTechnicalParameters=Kliknite tu pre zobrazenie / editovať pokročilé parametre (expertný režim) -WarningUpgrade=Warning:\nDid you run a database backup first?\nThis is highly recommended. Loss of data (due to for example bugs in mysql version 5.5.40/41/42/43) may be possible during this process, so it is essential to take a complete dump of your database before starting any migration.\n\nClick OK to start migration process... -ErrorDatabaseVersionForbiddenForMigration=Your database version is %s. It has a critical bug, making data loss possible if you make structural changes in your database, such as is required by the migration process. For his reason, migration will not be allowed until you upgrade your database to a layer (patched) version (list of known buggy versions: %s) -KeepDefaultValuesWamp=You used the Dolibarr setup wizard from DoliWamp, so values proposed here are already optimized. Change them only if you know what you are doing. -KeepDefaultValuesDeb=You used the Dolibarr setup wizard from a Linux package (Ubuntu, Debian, Fedora...), so the values proposed here are already optimized. Only the password of the database owner to create must be entered. Change other parameters only if you know what you are doing. -KeepDefaultValuesMamp=You used the Dolibarr setup wizard from DoliMamp, so the values proposed here are already optimized. Change them only if you know what you are doing. -KeepDefaultValuesProxmox=You used the Dolibarr setup wizard from a Proxmox virtual appliance, so the values proposed here are already optimized. Change them only if you know what you are doing. -UpgradeExternalModule=Run dedicated upgrade process of external module -SetAtLeastOneOptionAsUrlParameter=Set at least one option as a parameter in URL. For example: '...repair.php?standard=confirmed' -NothingToDelete=Nothing to clean/delete -NothingToDo=Nothing to do +WarningUpgrade=POZOR:\nSpustili ste najskôr zálohu databázy?\nToto sa dôrazne odporúča. Počas tohto procesu môže dôjsť k strate údajov (napríklad kvôli chybám v mysql verzii 5.5.40/41/42/43), preto je nevyhnutné pred začatím akejkoľvek migrácie vytvoriť úplný výpis databázy.\n\nKliknutím na tlačidlo OK spustíte proces migrácie... +ErrorDatabaseVersionForbiddenForMigration=Verzia vašej databázy je %s. Obsahuje kritickú chybu, ktorá umožňuje stratu údajov, ak vo svojej databáze vykonáte štrukturálne zmeny, ako to vyžaduje proces migrácie. Z tohto dôvodu nebude migrácia povolená, kým neupgradujete svoju databázu na vrstvu (opravenú) verziu (zoznam známych chybných verzií: %s) +KeepDefaultValuesWamp=Použili ste sprievodcu nastavením Dolibarr z DoliWamp, takže tu navrhované hodnoty sú už optimalizované. Zmeňte ich iba vtedy, ak viete, čo robíte. +KeepDefaultValuesDeb=Použili ste sprievodcu nastavením Dolibarr z balíka Linux (Ubuntu, Debian, Fedora...), takže tu navrhnuté hodnoty sú už optimalizované. Musíte zadať iba heslo vlastníka databázy, ktorú chcete vytvoriť. Ostatné parametre meňte len vtedy, ak viete, čo robíte. +KeepDefaultValuesMamp=Použili ste sprievodcu nastavením Dolibarr od DoliMamp, takže tu navrhnuté hodnoty sú už optimalizované. Zmeňte ich iba vtedy, ak viete, čo robíte. +KeepDefaultValuesProxmox=Použili ste sprievodcu nastavením Dolibarr z virtuálneho zariadenia Proxmox, takže tu navrhnuté hodnoty sú už optimalizované. Zmeňte ich iba vtedy, ak viete, čo robíte. +UpgradeExternalModule=Spustite vyhradený proces aktualizácie externého modulu +SetAtLeastOneOptionAsUrlParameter=Nastavte aspoň jednu možnosť ako parameter v adrese URL. Napríklad: '...repair.php?standard=confirmed' +NothingToDelete=Nie je čo čistiť/vymazávať +NothingToDo=Nič na práci ######### # upgrade MigrationFixData=Oprava pre denormalized dát MigrationOrder=Migrácia dát pre zákazníkovej objednávky -MigrationSupplierOrder=Data migration for vendor's orders +MigrationSupplierOrder=Migrácia dát pre objednávky dodávateľa MigrationProposal=Migrácia dát na komerčné návrhov MigrationInvoice=Migrácia dát pre zákazníka faktúry MigrationContract=Migrácia dát pre zmluvy @@ -163,9 +162,9 @@ MigrationContractsUpdate=Zmluva korekcia dát MigrationContractsNumberToUpdate=%s zmluva (y) aktualizovať MigrationContractsLineCreation=Vytvorte riadku zmluvy pre %s zmluvných ref MigrationContractsNothingToUpdate=Žiadne ďalšie vecí, ktoré sa -MigrationContractsFieldDontExist=Field fk_facture does not exist anymore. Nothing to do. +MigrationContractsFieldDontExist=Pole fk_facture už neexistuje. Nič na práci. MigrationContractsEmptyDatesUpdate=Zmluva prázdna dáta korekcia -MigrationContractsEmptyDatesUpdateSuccess=Contract empty date correction done successfully +MigrationContractsEmptyDatesUpdateSuccess=Oprava prázdneho dátumu zmluvy bola úspešne vykonaná MigrationContractsEmptyDatesNothingToUpdate=Žiadna zmluva prázdny Dátum opraviť MigrationContractsEmptyCreationDatesNothingToUpdate=Žiadna zmluva dátum vytvorenia opraviť MigrationContractsInvalidDatesUpdate=Bad valuty zmluva korekcia @@ -179,7 +178,7 @@ MigrationReopeningContracts=Otvorte zmluva uzatvorená chyby MigrationReopenThisContract=Znovu zmluvné %s MigrationReopenedContractsNumber=%s zmluvy zmenená MigrationReopeningContractsNothingToUpdate=Žiadne uzatvorené zmluvy o otvorení -MigrationBankTransfertsUpdate=Update links between bank entry and a bank transfer +MigrationBankTransfertsUpdate=Aktualizujte prepojenia medzi bankovým záznamom a bankovým prevodom MigrationBankTransfertsNothingToUpdate=Všetky odkazy sú aktuálne MigrationShipmentOrderMatching=Sendings príjem aktualizácie MigrationDeliveryOrderMatching=Potvrdenie o doručení aktualizácie @@ -187,29 +186,34 @@ MigrationDeliveryDetail=Dodávka aktualizácie MigrationStockDetail=Aktualizovať hodnotu zásob výrobkov MigrationMenusDetail=Aktualizácia dynamická menu tabuľky MigrationDeliveryAddress=Aktualizovať adresu dodania zásielky -MigrationProjectTaskActors=Data migration for table llx_projet_task_actors +MigrationProjectTaskActors=Migrácia údajov pre tabuľku llx_projet_task_actors MigrationProjectUserResp=Migrácia dát z poľa fk_user_resp llx_projet na llx_element_contact MigrationProjectTaskTime=Aktualizovať čas strávený v sekundách MigrationActioncommElement=Aktualizovať údaje o činnosti -MigrationPaymentMode=Data migration for payment type +MigrationPaymentMode=Migrácia údajov pre typ platby MigrationCategorieAssociation=Migrácia kategórií -MigrationEvents=Migration of events to add event owner into assignment table -MigrationEventsContact=Migration of events to add event contact into assignment table +MigrationEvents=Migrácia udalostí na pridanie vlastníka udalosti do tabuľky priradenia +MigrationEventsContact=Migrácia udalostí na pridanie kontaktu udalosti do tabuľky priradenia MigrationRemiseEntity=Aktualizácia hodnoty llx_societe_remise MigrationRemiseExceptEntity=Aktualizácia hodnoty llx_societe_remise_except -MigrationUserRightsEntity=Update entity field value of llx_user_rights -MigrationUserGroupRightsEntity=Update entity field value of llx_usergroup_rights -MigrationUserPhotoPath=Migration of photo paths for users -MigrationFieldsSocialNetworks=Migration of users fields social networks (%s) +MigrationUserRightsEntity=Aktualizujte hodnotu poľa entity llx_user_rights +MigrationUserGroupRightsEntity=Aktualizujte hodnotu poľa entity llx_usergroup_rights +MigrationUserPhotoPath=Migrácia fotografických ciest pre používateľov +MigrationFieldsSocialNetworks=Migrácia používateľských polí sociálnych sietí (%s) MigrationReloadModule=Znovu načítať modul %s -MigrationResetBlockedLog=Reset module BlockedLog for v7 algorithm -MigrationImportOrExportProfiles=Migration of import or export profiles (%s) -ShowNotAvailableOptions=Show unavailable options -HideNotAvailableOptions=Hide unavailable options -ErrorFoundDuringMigration=Error(s) were reported during the migration process so next step is not available. To ignore errors, you can click here, but the application or some features may not work correctly until the errors are resolved. -YouTryInstallDisabledByDirLock=The application tried to self-upgrade, but the install/upgrade pages have been disabled for security (directory renamed with .lock suffix).
-YouTryInstallDisabledByFileLock=The application tried to self-upgrade, but the install/upgrade pages have been disabled for security (by the existence of a lock file install.lock in the dolibarr documents directory).
-ClickHereToGoToApp=Click here to go to your application -ClickOnLinkOrRemoveManualy=If an upgrade is in progress, please wait. If not, click on the following link. If you always see this same page, you must remove/rename the file install.lock in the documents directory. -Loaded=Loaded -FunctionTest=Function test +MigrationResetBlockedLog=Resetujte modul BlockedLog pre algoritmus v7 +MigrationImportOrExportProfiles=Migrácia importných alebo exportných profilov (%s) +ShowNotAvailableOptions=Zobraziť nedostupné možnosti +HideNotAvailableOptions=Skryť nedostupné možnosti +ErrorFoundDuringMigration=Počas procesu migrácie boli hlásené chyby, takže ďalší krok nie je k dispozícii. Ak chcete chyby ignorovať, kliknite sem, ale aplikácia alebo niektoré funkcie nemusia fungovať správne, kým sa chyby nevyriešia . +YouTryInstallDisabledByDirLock=Aplikácia sa pokúsila o samoinováciu, ale stránky inštalácie/inovácie boli z bezpečnostných dôvodov deaktivované (adresár bol premenovaný s príponou .lock).
+YouTryInstallDisabledByFileLock=Aplikácia sa pokúsila o samoinováciu, ale stránky inštalácie/inovácie boli z bezpečnostných dôvodov deaktivované (existenciou súboru zámku install.lock v adresári dokumentov dolibarr).
+YouTryUpgradeDisabledByMissingFileUnLock=Aplikácia sa pokúsila o samoinováciu, ale proces inovácie momentálne nie je povolený.
+ClickHereToGoToApp=Kliknutím sem prejdete na svoju aplikáciu +ClickOnLinkOrRemoveManualy=Ak prebieha inovácia, počkajte. Ak nie, kliknite na nasledujúci odkaz. Ak sa vždy zobrazuje rovnaká stránka, musíte odstrániť/premenovať súbor install.lock v adresári dokumentov. +ClickOnLinkOrCreateUnlockFileManualy=Ak prebieha aktualizácia, počkajte... Ak nie, musíte odstrániť súbor install.lock alebo vytvoriť súbor upgrade.unlock v adresári dokumentov Dolibarr. +Loaded=Naložený +FunctionTest=Funkčný test +NodoUpgradeAfterDB=Po aktualizácii databázy nie je vyžadovaná žiadna akcia externými modulmi +NodoUpgradeAfterFiles=Po aktualizácii súborov alebo adresárov externé moduly nevyžadujú žiadnu akciu +MigrationContractLineRank=Migrujte zmluvnú líniu, aby ste mohli používať hodnotenie (a povoliť zmenu poradia) diff --git a/htdocs/langs/sk_SK/mails.lang b/htdocs/langs/sk_SK/mails.lang index d0185a2b586..1911a8ffffc 100644 --- a/htdocs/langs/sk_SK/mails.lang +++ b/htdocs/langs/sk_SK/mails.lang @@ -147,7 +147,7 @@ UseFormatFileEmailToTarget=Importovaný súbor musí mať formát email; UseFormatInputEmailToTarget=Zadajte reťazec vo formáte email;name;firstname;other MailAdvTargetRecipients=Príjemcovia (rozšírený výber) AdvTgtTitle=Vyplnením vstupných polí vopred vyberte tretie strany alebo kontakty/adresy, na ktoré chcete zacieliť -AdvTgtSearchTextHelp=Ako zástupné znaky použite %%. Ak chcete napríklad nájsť všetky položky ako jean, joe, jim, môžete zadať j%%, môžete použiť aj ; ako oddeľovač hodnoty a použite ! okrem tejto hodnoty. Napríklad jean;joe;jim%%;!jimo;!jimab07e63171f span> sa zameria na všetkých jean, joe, začínajú s Jimom, ale nie na Jimo a nie na všetko, čo začína na jima +AdvTgtSearchTextHelp=Use %% as wildcards. For example to find all item like jean, joe, jim, you can input j%%, you can also use ; as separator for value, and use ! for except this value. For example jean;joe;jim%%;!jimo;!jima%% will target all jean, joe, start with jim but not jimo and not everything that starts with jima AdvTgtSearchIntHelp=Použite interval na výber hodnoty int alebo float AdvTgtMinVal=Minimálna hodnota AdvTgtMaxVal=Maximálna hodnota diff --git a/htdocs/langs/sk_SK/main.lang b/htdocs/langs/sk_SK/main.lang index 8f6e335ac6e..c9b489b454f 100644 --- a/htdocs/langs/sk_SK/main.lang +++ b/htdocs/langs/sk_SK/main.lang @@ -68,7 +68,7 @@ ErrorNoRequestInError=Žiadna požiadavka omylom ErrorServiceUnavailableTryLater=Služba momentálne nie je k dispozícii. Skúste to znova neskôr. ErrorDuplicateField=Duplicitné hodnota v jedinečnej poľa ErrorSomeErrorWereFoundRollbackIsDone=Našli sa nejaké chyby. Zmeny boli vrátené späť. -ErrorConfigParameterNotDefined=Parameter %s nie je definovaný v konfiguračnom súbore
conf.php. +ErrorConfigParameterNotDefined=Parameter %s is not defined in the Dolibarr config file conf.php. ErrorCantLoadUserFromDolibarrDatabase=Nepodarilo sa nájsť užívateľa %s v databáze Dolibarr. ErrorNoVATRateDefinedForSellerCountry=Chyba, žiadne sadzby DPH stanovenej pre krajinu "%s". ErrorNoSocialContributionForSellerCountry=Chyba, pre krajinu „%s“ nie je definovaný žiadny typ sociálnych/fiškálnych daní. @@ -103,7 +103,7 @@ RecordDeleted=Zaznamenajte zmazaný RecordGenerated=Vygenerovaný záznam LevelOfFeature=Úroveň vlastností NotDefined=Nie je definované -DolibarrInHttpAuthenticationSoPasswordUseless=Režim overenia Dolibarr je nastavený na %s v konfiguračnom súbore < class='notranslate'>
conf.php.
To znamená, že databáza je externá Dolibarr, takže zmena tohto poľa nemusí mať žiadny účinok. +DolibarrInHttpAuthenticationSoPasswordUseless=Dolibarr authentication mode is set to %s in configuration file conf.php.
This means that the password database is external to Dolibarr, so changing this field may have no effect. Administrator=Systémový administrátor AdministratorDesc=Správca systému (môže spravovať užívateľa, oprávnenia, ale aj nastavenie systému a konfiguráciu modulov) Undefined=Undefined @@ -420,6 +420,8 @@ TotalTTCShort=Celkom (s DPH) TotalHT=Celkom (bez dane) TotalHTforthispage=Celkom (bez dane) za túto stránku Totalforthispage=Celkom za túto stránku +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=Celkom (s DPH) TotalTTCToYourCredit=Celkom (s DPH) na Váš účet TotalVAT=Daň celkom @@ -647,6 +649,7 @@ ReportName=Názov správy ReportPeriod=Správa za obdobie ReportDescription=Popis Report=Správa +Reports=Zostavy Keyword=Kľúčové slovo Origin=Pôvod Legend=Legenda @@ -1049,7 +1052,7 @@ Select2NotFound=Nenašli sa žiadne výsledky Select2Enter=Zadajte Select2MoreCharacter=alebo viac charakteru Select2MoreCharacters=alebo viac znakov -Select2MoreCharactersMore=Syntax vyhľadávania:
notranslate |b0860fz=034 notranslate'> ALEBO (a|b)
* Ľubovoľný znak (a*b)
b030aec0 span>^$ Koniec na (ab$)
+Select2MoreCharactersMore=Search syntax:
| OR (a|b)
* Any character (a*b)
^ Start with (^ab)
$ End with (ab$)
Select2LoadingMoreResults=Načítavajú sa ďalšie výsledky... Select2SearchInProgress=Prebieha vyhľadávanie... SearchIntoThirdparties=Tretie strany diff --git a/htdocs/langs/sk_SK/modulebuilder.lang b/htdocs/langs/sk_SK/modulebuilder.lang index 7d6f2c4deb4..cf27af63b44 100644 --- a/htdocs/langs/sk_SK/modulebuilder.lang +++ b/htdocs/langs/sk_SK/modulebuilder.lang @@ -91,10 +91,10 @@ ListOfMenusEntries=Zoznam položiek ponuky ListOfDictionariesEntries=Zoznam záznamov v slovníkoch ListOfPermissionsDefined=Zoznam definovaných povolení SeeExamples=Pozrite si príklady tu -EnabledDesc=Podmienka, aby bolo toto pole aktívne.

Príklady:
1 span class='notranslate'>
isModEnabled('anothermodule')
getDolGlobalString('MYMODULE_OPTION')==2 +EnabledDesc=Condition to have this field active.

Examples:
1
isModEnabled('anothermodule')
getDolGlobalString('MYMODULE_OPTION')==2 VisibleDesc=Je pole viditeľné? (Príklady: 0=nikdy viditeľné, 1=viditeľné vo formulároch na vytvorenie/aktualizáciu/zobrazenie, 2=viditeľné iba na zozname, 3=viditeľné iba vo formulári na vytvorenie/aktualizáciu/zobrazenie (nie na zoznamoch), 4=viditeľné na zoznamoch a aktualizovať/zobraziť iba formulár (nie vytvoriť), 5=Viditeľné iba vo formulári zoznamu a zobraziť (nie vytvoriť, neaktualizovať).

Použitie zápornej hodnoty znamená, že pole sa v zozname predvolene nezobrazuje, ale možno ho vybrať na zobrazenie). ItCanBeAnExpression=Môže to byť výraz. Príklad:
preg_match('/public/', $_SERVER['PHP_SELF'])?0:1
$user ->hasRight('holiday', 'define_holiday')?1:5 -DisplayOnPdfDesc=Zobrazte toto pole v kompatibilných dokumentoch PDF, pozíciu môžete spravovať pomocou poľa „Pozícia“.
Pre dokument:
0 = nezobrazené
1 = zobrazenie
2 = zobraziť, iba ak nie je prázdne

b0e7064b span>Pre riadky dokumentu:

0 = nezobrazené
= zobrazené v stĺpci
3 = zobrazenie v stĺpci popisu riadka za popisom
4 = zobrazenie v stĺpci popisu za popisom iba ak nie je prázdny +DisplayOnPdfDesc=Display this field on compatible PDF documents, you can manage position with "Position" field.
For document :
0 = not displayed
1 = display
2 = display only if not empty

For document lines :
0 = not displayed
1 = displayed in a column
3 = display in line description column after the description
4 = display in description column after the description only if not empty DisplayOnPdf=Na PDF IsAMeasureDesc=Môže sa hodnota poľa kumulovať, aby sa do zoznamu dostal súčet? (Príklady: 1 alebo 0) SearchAllDesc=Používa sa pole na vyhľadávanie pomocou nástroja rýchleho vyhľadávania? (Príklady: 1 alebo 0) @@ -111,7 +111,7 @@ TriggerDefDesc=V spúšťacom súbore definujte kód, ktorý chcete spustiť, ke SeeIDsInUse=Pozrite si ID používané vo vašej inštalácii SeeReservedIDsRangeHere=Pozrite si rozsah rezervovaných ID ToolkitForDevelopers=Sada nástrojov pre vývojárov Dolibarr -TryToUseTheModuleBuilder=Ak ovládate SQL a PHP, môžete použiť sprievodcu vytváraním natívnych modulov.
Povoliť modul %s a použite sprievodcu kliknutím na
v ponuke vpravo hore.
Upozornenie: Toto je pokročilá funkcia pre vývojárov, vykonajte span class='notranslate'>
experimentujte na svojej produkčnej stránke! +TryToUseTheModuleBuilder=If you have knowledge of SQL and PHP, you may use the native module builder wizard.
Enable the module %s and use the wizard by clicking the on the top right menu.
Warning: This is an advanced developer feature, do not experiment on your production site! SeeTopRightMenu=Pozrite si v ponuke vpravo hore AddLanguageFile=Pridať jazykový súbor YouCanUseTranslationKey=Tu môžete použiť kľúč, ktorý je prekladovým kľúčom nájdeným do jazykového súboru (pozri záložku „Jazyky“) @@ -148,7 +148,7 @@ CSSListClass=CSS pre zoznam NotEditable=Nedá sa upravovať ForeignKey=Cudzí kľúč ForeignKeyDesc=Ak hodnota tohto poľa musí byť zaručená, že existuje do inej tabuľky. Tu zadajte syntax zodpovedajúcej hodnote: tablename.parentfieldtocheck -TypeOfFieldsHelp=Príklad:
varchar(99)
e-mail
classtelefón< ='notranslate'>
ip
url
heslo'notranslate
integer
integer:ClassName:relativepath/to/classfile.class.php[:1[:filter]]b0392f /span>
'1' znamená, že za kombináciu pridáme tlačidlo + na vytvorenie záznamu
'filter' je Podmienka syntaxe univerzálneho filtra, príklad: '((stav:=:1) AND (fk_user:=:__USER_ID__) AND (entita:IN:(__SHARED_ENTITIES__))“ +TypeOfFieldsHelp=Example:
varchar(99)
email
phone
ip
url
password
double(24,8)
real
text
html
date
datetime
timestamp
integer
integer:ClassName:relativepath/to/classfile.class.php[:1[:filter]]

'1' means we add a + button after the combo to create the record
'filter' is an Universal Filter syntax condition, example: '((status:=:1) AND (fk_user:=:__USER_ID__) AND (entity:IN:(__SHARED_ENTITIES__))' TypeOfFieldsHelpIntro=Toto je typ poľa/atribútu. AsciiToHtmlConverter=Konvertor z ascii do HTML AsciiToPdfConverter=Konvertor z ascii do formátu PDF @@ -180,7 +180,7 @@ FailedToAddCodeIntoDescriptor=Nepodarilo sa pridať kód do deskriptora. Skontro DictionariesCreated=Slovník %s bol úspešne vytvorený DictionaryDeleted=Slovník %s bol úspešne odstránený PropertyModuleUpdated=Vlastníctvo %s bolo úspešne aktualizované -InfoForApiFile=* Keď vygenerujete súbor prvýkrát, všetky metódy sa vytvoria pre každý objekt.
* Keď kliknete na remove, odstránite iba všetky metódy pre túto triedu ='notranslate'>
vybratý objekt. +InfoForApiFile=* When you generate file for the first time then all methods will be created for each object.
* When you click in remove you just remove all methods for the selected object. SetupFile=Stránka pre nastavenie modulu EmailingSelectors=Emails selectors EmailingSelectorDesc=Tu môžete generovať a upravovať súbory triedy, aby ste poskytli nové selektory cieľov e-mailu pre modul hromadného odosielania e-mailov diff --git a/htdocs/langs/sk_SK/mrp.lang b/htdocs/langs/sk_SK/mrp.lang index 1c65e793b68..8dbdb0285a9 100644 --- a/htdocs/langs/sk_SK/mrp.lang +++ b/htdocs/langs/sk_SK/mrp.lang @@ -47,7 +47,7 @@ DateEndPlannedMo=Plánovaný dátum ukončenia KeepEmptyForAsap=Prázdne znamená „Akonáhle to bude možné“ EstimatedDuration=Odhadované trvanie EstimatedDurationDesc=Odhadované trvanie výroby (alebo demontáže) tohto produktu pomocou tohto kusovníka -ConfirmValidateBom=Naozaj chcete overiť kusovník pomocou odkazu %s > (budete ho môcť použiť na vytváranie nových výrobných objednávok) +ConfirmValidateBom=Are you sure you want to validate the BOM with the reference %s (you will be able to use it to build new Manufacturing Orders) ConfirmCloseBom=Ste si istý, že chcete zrušiť tento kusovník (už ho nebudete môcť použiť na vytváranie nových výrobných objednávok)? ConfirmReopenBom=Ste si istý, že chcete znovu otvoriť tento kusovník (budete ho môcť použiť na vytvorenie nových výrobných objednávok) StatusMOProduced=Vyrobené @@ -136,4 +136,3 @@ NoRemainQtyToDispatch=Nezostáva žiadne množstvo na rozdelenie THMOperatorEstimatedHelp=Odhadované náklady operátora na hodinu. Použije sa na odhad nákladov na kusovník pomocou tejto pracovnej stanice. THMMachineEstimatedHelp=Odhadovaná cena stroja za hodinu. Použije sa na odhad nákladov na kusovník pomocou tejto pracovnej stanice. - diff --git a/htdocs/langs/sk_SK/multicurrency.lang b/htdocs/langs/sk_SK/multicurrency.lang index bb0bf57098d..53971c53834 100644 --- a/htdocs/langs/sk_SK/multicurrency.lang +++ b/htdocs/langs/sk_SK/multicurrency.lang @@ -7,12 +7,12 @@ multicurrency_syncronize_error=Chyba synchronizácie: %s MULTICURRENCY_USE_RATE_ON_DOCUMENT_DATE=Na nájdenie kurzu meny použite dátum dokumentu, namiesto použitia posledného známeho kurzu multicurrency_useOriginTx=Keď je objekt vytvorený z iného objektu, ponechajte pôvodnú sadzbu zo zdrojového objektu (inak použite poslednú známu sadzbu) CurrencyLayerAccount=CurrencyLayer API -CurrencyLayerAccount_help_to_synchronize=Ak chcete používať túto funkciu, musíte si vytvoriť účet na webovej stránke %s.
Získajte /span>Kľúč API.
Ak používate bezplatný účet, nemôžete zmeniť zdrojová mena (predvolene USD).
Ak vaša hlavná mena nie je USD aplikácia to automaticky prepočíta.

Máte obmedzený počet 1000 synchronizácií za mesiac. +CurrencyLayerAccount_help_to_synchronize=You must create an account on website %s to use this functionality.
Get your API key.
If you use a free account, you can't change the source currency (USD by default).
If your main currency is not USD, the application will automatically recalculate it.

You are limited to 1000 synchronizations per month. multicurrency_appId=API kľúč multicurrency_appCurrencySource=Zdrojová mena multicurrency_alternateCurrencySource=Alternatívna zdrojová mena CurrenciesUsed=Použité meny -CurrenciesUsed_help_to_add=Pridajte rôzne meny a sadzby, ktoré musíte použiť vo svojich ponukách, b0aeee383 /span>objednávky
atď. +CurrenciesUsed_help_to_add=Add the different currencies and rates you need to use on your proposals, orders etc. rate=sadzba MulticurrencyReceived=Prijaté, pôvodná mena MulticurrencyRemainderToTake=Zostávajúca suma, pôvodná mena diff --git a/htdocs/langs/sk_SK/oauth.lang b/htdocs/langs/sk_SK/oauth.lang index b2c525a6646..c115da80d3c 100644 --- a/htdocs/langs/sk_SK/oauth.lang +++ b/htdocs/langs/sk_SK/oauth.lang @@ -29,7 +29,7 @@ OAUTH_GOOGLE_SECRET=OAuth Google Secret OAUTH_GITHUB_NAME=Služba OAuth GitHub OAUTH_GITHUB_ID=Id OAuth GitHub OAUTH_GITHUB_SECRET=Tajomstvo OAuth GitHub -OAUTH_URL_FOR_CREDENTIAL=Prejdite na túto stránku rozpätie>. +NewPartnershipRequestDesc=This form allows you to request to be part of one of our partnership program. If you need help to fill this form, please contact by email %s. ThisUrlMustContainsAtLeastOneLinkToWebsite=Táto stránka musí obsahovať aspoň jeden odkaz na jednu z nasledujúcich domén: %s IPOfApplicant=IP žiadateľa - diff --git a/htdocs/langs/sk_SK/products.lang b/htdocs/langs/sk_SK/products.lang index 6af1488986b..b0ed4ccb2d6 100644 --- a/htdocs/langs/sk_SK/products.lang +++ b/htdocs/langs/sk_SK/products.lang @@ -208,11 +208,6 @@ unitSET=Set unitS=Druhý unitH=Hodina unitD=Deň -unitG=Gram -unitM=Meter -unitLM=Lineárny meter -unitM2=Meter štvorcový -unitM3=Meter kubický unitL=Litr unitT=ton unitKG=kg @@ -221,6 +216,7 @@ unitMG=mg unitLB=libra unitOZ=unca unitM=Meter +unitLM=Lineárny meter unitDM=dm unitCM=cm unitMM=mm @@ -291,7 +287,7 @@ PriceExpressionSelected=Výraz zvolenej ceny PriceExpressionEditorHelp1="cena = 2 + 2" alebo "2 + 2" pre nastavenie ceny. Použite ; pre oddelenie výrazov PriceExpressionEditorHelp2=Môžete použiť extra polia použitím premennej ako:\n#extrafield_myextrafieldkey# a globálnej premennej #global_mycode# PriceExpressionEditorHelp3=V cenách produktov/služieb aj cien dodávateľov sú k dispozícii tieto premenné:
#tva_tx# #localtax1_tx# #localtax2_tx# hmotnosť# #length# #surface# #price_min# -PriceExpressionEditorHelp4=Len v cene produktu/služby: #supplier_min_price#b0342bzccfda19> len predajné ceny: #supplier_quantity# a #supplier_tva_tx# +PriceExpressionEditorHelp4=In product/service price only: #supplier_min_price#
In vendor prices only: #supplier_quantity# and #supplier_tva_tx# PriceExpressionEditorHelp5=Dostupné globálne hodnoty PriceMode=Cenový mód PriceNumeric=Počet @@ -437,4 +433,6 @@ ModifyValueExtrafields = Upravte hodnotu extrapola OrProductsWithCategories=Alebo produkty so štítkami/kategóriami WarningTransferBatchStockMouvToGlobal = Ak chcete tento produkt deserializovať, všetky jeho sériové zásoby budú transformované na globálne zásoby WarningConvertFromBatchToSerial=Ak momentálne máte pre produkt množstvo vyššie alebo rovné 2, prepnutie na túto voľbu znamená, že stále budete mať produkt s rôznymi predmetmi tej istej šarže (zatiaľ čo chcete jedinečné sériové číslo). Duplikát zostane, kým sa nevykoná inventúra alebo ručný pohyb zásob na opravu. +AllowStockMovementVariantParent=Also records stock movements on parent products of variant products +AllowStockMovementVariantParentHelp=By default, a parent of a variant is a virtual product, so no stock is managed for it. By enabling this option, a stock will be managed for parent products and each time a stock quantity is modified for a variant product, the same quantity will be modified for the parent product. You should not need this option, except if you are using variant to manage the same product than parent (but with different descriptions, prices...) ConfirmSetToDraftInventory=Naozaj sa chcete vrátiť do stavu konceptu?
Množstvá aktuálne nastavené v inventári budú resetované. diff --git a/htdocs/langs/sk_SK/receptions.lang b/htdocs/langs/sk_SK/receptions.lang index 220885375f0..098905c4b7f 100644 --- a/htdocs/langs/sk_SK/receptions.lang +++ b/htdocs/langs/sk_SK/receptions.lang @@ -1,54 +1,56 @@ # Dolibarr language file - Source file is en_US - receptions -ReceptionDescription=Vendor reception management (Create reception documents) -ReceptionsSetup=Vendor Reception setup -RefReception=Ref. reception +ReceptionDescription=Správa príjmu dodávateľa (vytvoriť dokumenty príjmu) +ReceptionsSetup=Nastavenie príjmu predajcu +RefReception=Ref. recepcia Reception=Recepcia -Receptions=Receptions -AllReceptions=All Receptions -Reception=Recepcia -Receptions=Receptions -ShowReception=Show Receptions -ReceptionsArea=Receptions area -ListOfReceptions=List of receptions -ReceptionMethod=Reception method -LastReceptions=Latest %s receptions -StatisticsOfReceptions=Statistics for receptions -NbOfReceptions=Number of receptions -NumberOfReceptionsByMonth=Number of receptions by month -ReceptionCard=Reception card -NewReception=New reception -CreateReception=Create reception -QtyInOtherReceptions=Qty in other receptions -OtherReceptionsForSameOrder=Other receptions for this order -ReceptionsAndReceivingForSameOrder=Receptions and receipts for this order -ReceptionsToValidate=Receptions to validate +Receptions=Recepcie +AllReceptions=Všetky recepcie +ShowReception=Zobraziť recepcie +ReceptionsArea=Priestory recepcií +ListOfReceptions=Zoznam recepcií +ReceptionMethod=Spôsob prijímania +LastReceptions=Najnovšie %s recepcie +StatisticsOfReceptions=Štatistiky pre recepcie +NbOfReceptions=Počet recepcií +NumberOfReceptionsByMonth=Počet recepcií podľa mesiaca +ReceptionCard=Recepčná karta +NewReception=Nová recepcia +CreateReception=Vytvorte príjem +QtyInOtherReceptions=Množstvo v iných recepciách +OtherReceptionsForSameOrder=Ďalšie recepcie pre túto objednávku +ReceptionsAndReceivingForSameOrder=Príjemky a účtenky k tejto objednávke +ReceptionsToValidate=Recepcie na overenie StatusReceptionCanceled=Zrušený StatusReceptionDraft=Návrh -StatusReceptionValidated=Validated (products to receive or already received) -StatusReceptionValidatedToReceive=Validated (products to receive) -StatusReceptionValidatedReceived=Validated (products received) +StatusReceptionValidated=Overené (produkty na prijatie alebo už prijaté) +StatusReceptionValidatedToReceive=Overené (produkty na prijatie) +StatusReceptionValidatedReceived=Overené (prijaté produkty) StatusReceptionProcessed=Spracované StatusReceptionDraftShort=Návrh StatusReceptionValidatedShort=Overené StatusReceptionProcessedShort=Spracované -ReceptionSheet=Reception sheet -ConfirmDeleteReception=Are you sure you want to delete this reception? -ConfirmValidateReception=Are you sure you want to validate this reception with reference %s? -ConfirmCancelReception=Are you sure you want to cancel this reception? -StatsOnReceptionsOnlyValidated=Statistics conducted on receptions only validated. Date used is date of validation of reception (planed delivery date is not always known). -SendReceptionByEMail=Send reception by email -SendReceptionRef=Submission of reception %s -ActionsOnReception=Events on reception -ReceptionCreationIsDoneFromOrder=For the moment, creation of a new reception is done from the Purchase Order. -ReceptionLine=Reception line -ProductQtyInReceptionAlreadySent=Product quantity from open sales order already sent -ProductQtyInSuppliersReceptionAlreadyRecevied=Product quantity from open supplier order already received -ValidateOrderFirstBeforeReception=You must first validate the order before being able to make receptions. -ReceptionsNumberingModules=Numbering module for receptions -ReceptionsReceiptModel=Document templates for receptions -NoMorePredefinedProductToDispatch=No more predefined products to dispatch -ReceptionExist=A reception exists -ByingPrice=Bying price -ReceptionBackToDraftInDolibarr=Reception %s back to draft -ReceptionClassifyClosedInDolibarr=Reception %s classified Closed -ReceptionUnClassifyCloseddInDolibarr=Reception %s re-open +ReceptionSheet=Recepčný list +ValidateReception=Overte príjem +ConfirmDeleteReception=Naozaj chcete odstrániť tento príjem? +ConfirmValidateReception=Are you sure you want to validate this reception with the reference %s? +ConfirmCancelReception=Naozaj chcete zrušiť tento príjem? +StatsOnReceptionsOnlyValidated=Štatistika vykonaná iba na overených recepciách. Použitý dátum je dátum potvrdenia prijatia (plánovaný dátum doručenia nie je vždy známy). +SendReceptionByEMail=Pošlite príjem e-mailom +SendReceptionRef=Odoslanie recepcie %s +ActionsOnReception=Udalosti na recepcii +ReceptionCreationIsDoneFromOrder=Vytvorenie nového príjmu sa momentálne vykonáva z objednávky. +ReceptionLine=Recepčná linka +ProductQtyInReceptionAlreadySent=Množstvo produktu z otvorenej predajnej objednávky už bolo odoslané +ProductQtyInSuppliersReceptionAlreadyRecevied=Množstvo produktu z otvorenej objednávky dodávateľa už bolo prijaté +ValidateOrderFirstBeforeReception=Pred prijatím musíte najprv potvrdiť objednávku. +ReceptionsNumberingModules=Modul číslovania pre recepcie +ReceptionsReceiptModel=Šablóny dokumentov pre recepcie +NoMorePredefinedProductToDispatch=Už žiadne preddefinované produkty na odoslanie +ReceptionExist=Recepcia existuje +ReceptionBackToDraftInDolibarr=Recepcia %s späť na koncept +ReceptionClassifyClosedInDolibarr=Recepcia %s klasifikovaná Zatvorené +ReceptionUnClassifyCloseddInDolibarr=Recepcia %s znovu otvorená +RestoreWithCurrentQtySaved=Doplňte množstvá najnovšími uloženými hodnotami +ReceptionsRecorded=Zaznamenané recepcie +ReceptionUpdated=Recepcia bola úspešne aktualizovaná +ReceptionDistribution=Distribúcia recepcie diff --git a/htdocs/langs/sk_SK/sendings.lang b/htdocs/langs/sk_SK/sendings.lang index 48280e8deb8..6d38bd685c8 100644 --- a/htdocs/langs/sk_SK/sendings.lang +++ b/htdocs/langs/sk_SK/sendings.lang @@ -18,16 +18,16 @@ SendingCard=Zasielková karta NewSending=Nová zásielka CreateShipment=Vytvoriť zásielku QtyShipped=Odoslané množstvo -QtyShippedShort=Qty ship. -QtyPreparedOrShipped=Qty prepared or shipped +QtyShippedShort=Množstvo lode. +QtyPreparedOrShipped=Množstvo pripravené alebo odoslané QtyToShip=Množstvo na odoslanie -QtyToReceive=Qty to receive +QtyToReceive=Množstvo na prijatie QtyReceived=Prijaté množstvo -QtyInOtherShipments=Qty in other shipments +QtyInOtherShipments=Množstvo v iných zásielkach KeepToShip=Zostáva odoslať -KeepToShipShort=Remain +KeepToShipShort=Zostať OtherSendingsForSameOrder=Ďalšie zásielky pre túto objednávku -SendingsAndReceivingForSameOrder=Shipments and receipts for this order +SendingsAndReceivingForSameOrder=Zásielky a potvrdenky pre túto objednávku SendingsToValidate=Zásielky na overenie StatusSendingCanceled=Zrušený StatusSendingCanceledShort=Zrušený @@ -43,44 +43,44 @@ ConfirmValidateSending=Are you sure you want to validate this shipment with the ConfirmCancelSending=Určite chcete zrušiť túto zásielku ? DocumentModelMerou=Mero A5 modelu WarningNoQtyLeftToSend=Varovanie: žiadny tovar majú byť dodané. -StatsOnShipmentsOnlyValidated=Statistics are only for validated shipments. Date used is the date of validation of shipment (planned delivery date is not always known) +StatsOnShipmentsOnlyValidated=Štatistiky sú len pre overené zásielky. Použitý dátum je dátum overenia zásielky (plánovaný dátum doručenia nie je vždy známy) DateDeliveryPlanned=Plánovaný dátum doručenia -RefDeliveryReceipt=Ref delivery receipt -StatusReceipt=Status delivery receipt +RefDeliveryReceipt=Ref. potvrdenie o doručení +StatusReceipt=Stav potvrdenia o doručení DateReceived=Dátum doručenia obdržal -ClassifyReception=Classify Received -SendShippingByEMail=Send shipment by email +ClassifyReception=Klasifikovať prijaté +SendShippingByEMail=Zásielku poslať emailom SendShippingRef=Podanie zásielky %s ActionsOnShipping=Udalosti na zásielky LinkToTrackYourPackage=Odkaz pre sledovanie balíkov -ShipmentCreationIsDoneFromOrder=For the moment, creation of a new shipment is done from the Sales Order record. +ShipmentCreationIsDoneFromOrder=V súčasnosti sa vytvorenie novej zásielky vykonáva zo záznamu zákazky odberateľa. ShipmentLine=Zásielka linka -ProductQtyInCustomersOrdersRunning=Product quantity from open sales orders -ProductQtyInSuppliersOrdersRunning=Product quantity from open purchase orders -ProductQtyInShipmentAlreadySent=Product quantity from open sales order already sent -ProductQtyInSuppliersShipmentAlreadyRecevied=Product quantity from open purchase orders already received -NoProductToShipFoundIntoStock=No product to ship found in warehouse %s. Correct stock or go back to choose another warehouse. +ProductQtyInCustomersOrdersRunning=Množstvo produktu z otvorených zákaziek odberateľa +ProductQtyInSuppliersOrdersRunning=Množstvo produktu z otvorených objednávok +ProductQtyInShipmentAlreadySent=Množstvo produktu z otvorenej predajnej objednávky už bolo odoslané +ProductQtyInSuppliersShipmentAlreadyRecevied=Množstvo produktu z už prijatých otvorených objednávok +NoProductToShipFoundIntoStock=V sklade sa nenašiel žiadny produkt na odoslanie %s. Opravte zásoby alebo sa vráťte a vyberte si iný sklad. WeightVolShort=Váha/Objem ValidateOrderFirstBeforeShipment=Najprv musíte overiť objednávku pred vytvorením zásielky. -NoLineGoOnTabToAddSome=No line, go on tab "%s" to add +NoLineGoOnTabToAddSome=Žiadny riadok, prejdite na kartu „%s“ a pridajte # Sending methods # ModelDocument DocumentModelTyphon=Viac Celý dokument model pre potvrdenie o doručení (logo. ..) -DocumentModelStorm=More complete document model for delivery receipts and extrafields compatibility (logo...) +DocumentModelStorm=Kompletnejší model dokumentu pre potvrdenie o doručení a kompatibilitu extrapolí (logo...) Error_EXPEDITION_ADDON_NUMBER_NotDefined=Konštantná EXPEDITION_ADDON_NUMBER nie je definované SumOfProductVolumes=Súčet objemov produktov SumOfProductWeights=Súčet hmotností produktov # warehouse details DetailWarehouseNumber= Detaily skladu -DetailWarehouseFormat= W:%s (Qty: %d) -SHIPPING_DISPLAY_STOCK_ENTRY_DATE=Display last date of entry in stock during shipment creation for serial number or batch -CreationOptions=Available options during shipment creation +DetailWarehouseFormat= W:%s (množstvo: %d) +SHIPPING_DISPLAY_STOCK_ENTRY_DATE=Zobrazte posledný dátum vstupu na sklade počas vytvárania zásielky pre sériové číslo alebo šaržu +CreationOptions=Dostupné možnosti pri vytváraní zásielky -ShipmentDistribution=Shipment distribution +ShipmentDistribution=Distribúcia zásielok -ErrorTooManyCombinationBatchcode=No dispatch for line %s as too many combinations of warehouse, product, batch code was found (%s). -ErrorNoCombinationBatchcode=Could not save the line %s as the combination of warehouse-product-lot/serial (%s, %s, %s) was not found in stock. +ErrorTooManyCombinationBatchcode=Žiadne odoslanie pre riadok %s, pretože sa našlo príliš veľa kombinácií kódu skladu, produktu, šarže (%s). +ErrorNoCombinationBatchcode=Nepodarilo sa uložiť riadok %s ako kombináciu sklad-produkt-šarža/sériový (%s, %s, %s) nebol nájdený na sklade. -ErrorTooMuchShipped=Quantity shipped should not be greater than quantity ordered for line %s +ErrorTooMuchShipped=Dodané množstvo by nemalo byť väčšie ako objednané množstvo pre riadok %s diff --git a/htdocs/langs/sk_SK/stocks.lang b/htdocs/langs/sk_SK/stocks.lang index 75e475a0c4b..43320fbda49 100644 --- a/htdocs/langs/sk_SK/stocks.lang +++ b/htdocs/langs/sk_SK/stocks.lang @@ -253,7 +253,7 @@ DisableStockChangeOfSubProduct=Počas tohto pohybu deaktivujte výmenu zásob pr ImportFromCSV=Importujte zoznam pohybu vo formáte CSV ChooseFileToImport=Nahrajte súbor a potom kliknite na ikonu %s a vyberte súbor ako zdrojový importný súbor... SelectAStockMovementFileToImport=vyberte súbor pohybu zásob na import -InfoTemplateImport=Odovzdaný súbor musí mať tento formát (* sú povinné polia):
Source Warehouse* | Cieľový sklad* | Produkt* | Množstvo* | Číslo šarže/sériové číslo
Oddeľovač znakov CSV musí byť "b0ecb2ec87f><49fz0 span class='notranslate'>" +InfoTemplateImport=Uploaded file needs to have this format (* are mandatory fields):
Source Warehouse* | Target Warehouse* | Product* | Quantity* | Lot/serial number
CSV character separator must be "%s" LabelOfInventoryMovemement=Inventár %s ReOpen=Znovu otvorte ConfirmFinish=Potvrdzujete uzávierku inventarizácie? Tým sa vygenerujú všetky skladové pohyby na aktualizáciu vašich zásob na skutočné množstvo, ktoré ste zadali do inventára. @@ -282,7 +282,7 @@ ModuleStockTransferName=Pokročilý prevod zásob ModuleStockTransferDesc=Pokročilá správa prevodu zásob s generovaním prevodného listu StockTransferNew=Nový prevod akcií StockTransferList=Zoznam prevodov akcií -ConfirmValidateStockTransfer=Naozaj chcete overiť tento prevod akcií pomocou odkazu %s rozpätie> ? +ConfirmValidateStockTransfer=Are you sure you want to validate this stocks transfer with the reference %s ? ConfirmDestock=Zníženie zásob s prevodom %s ConfirmDestockCancel=Zrušiť zníženie zásob prevodom %s DestockAllProduct=Zníženie zásob diff --git a/htdocs/langs/sk_SK/stripe.lang b/htdocs/langs/sk_SK/stripe.lang index 1547580e739..dbdb73050b4 100644 --- a/htdocs/langs/sk_SK/stripe.lang +++ b/htdocs/langs/sk_SK/stripe.lang @@ -22,7 +22,7 @@ ToOfferALinkForOnlinePaymentOnContractLine=Adresa URL, ktorá ponúka %s stránk ToOfferALinkForOnlinePaymentOnFreeAmount=Adresa URL, ktorá ponúka %s stránku online platieb v ľubovoľnej výške bez existujúceho objektu ToOfferALinkForOnlinePaymentOnMemberSubscription=Adresa URL, ktorá ponúka %s online platobnú stránku pre členské predplatné ToOfferALinkForOnlinePaymentOnDonation=Adresa URL, ktorá ponúka %s stránku online platieb na platbu daru -YouCanAddTagOnUrl=Môžete tiež pridať parameter adresy URL &tag=valueb0ae64758 class='notranslate'> na ktorúkoľvek z týchto adries URL (povinné iba pri platbe, ktorá nie je prepojená s objektom), aby ste pridali svoju vlastnú značku komentára k platbe.
Pre URL platieb bez existujúceho objektu, môžete pridať aj parameter &noidempotency=1, takže rovnaký odkaz s rovnakou značkou možno použiť niekoľkokrát (niektoré spôsoby platby môžu obmedziť platbu na 1 za každý iný odkaz bez tohto parametra) +YouCanAddTagOnUrl=You can also add url parameter &tag=value to any of those URL (mandatory only for payment not linked to an object) to add your own payment comment tag.
For the URL of payments with no existing object, you may also add the parameter &noidempotency=1 so the same link with same tag can be used several times (some payment mode may limit the payment to 1 for each different link without this parameter) SetupStripeToHavePaymentCreatedAutomatically=Nastavte svoj Stripe pomocou adresy URL %s, kedy sa platba vytvorí automaticky potvrdené spoločnosťou Stripe. AccountParameter=Parametre účtu UsageParameter=Používanie parametrov diff --git a/htdocs/langs/sk_SK/trips.lang b/htdocs/langs/sk_SK/trips.lang index fc226cd59b0..2ef1b724fff 100644 --- a/htdocs/langs/sk_SK/trips.lang +++ b/htdocs/langs/sk_SK/trips.lang @@ -1,150 +1,152 @@ # Dolibarr language file - Source file is en_US - trips -ShowExpenseReport=Show expense report -Trips=Expense reports -TripsAndExpenses=Expenses reports -TripsAndExpensesStatistics=Expense reports statistics -TripCard=Expense report card -AddTrip=Create expense report -ListOfTrips=List of expense reports -ListOfFees=Sadzobník poplatkov -TypeFees=Poplatky -ShowTrip=Show expense report -NewTrip=New expense report -LastExpenseReports=Latest %s expense reports -AllExpenseReports=All expense reports -CompanyVisited=Company/organization visited -FeesKilometersOrAmout=Množstvo alebo kilometrov -DeleteTrip=Delete expense report -ConfirmDeleteTrip=Are you sure you want to delete this expense report? -ListTripsAndExpenses=List of expense reports -ListToApprove=Waiting for approval -ExpensesArea=Expense reports area -ClassifyRefunded=Classify 'Refunded' -ExpenseReportWaitingForApproval=A new expense report has been submitted for approval -ExpenseReportWaitingForApprovalMessage=A new expense report has been submitted and is waiting for approval.
- User: %s
- Period: %s
Click here to validate: %s -ExpenseReportWaitingForReApproval=An expense report has been submitted for re-approval -ExpenseReportWaitingForReApprovalMessage=An expense report has been submitted and is waiting for re-approval.
The %s, you refused to approve the expense report for this reason: %s.
A new version has been proposed and waiting for your approval.
- User: %s
- Period: %s
Click here to validate: %s -ExpenseReportApproved=An expense report was approved +AUTHOR=Zaznamenal +AUTHORPAIEMENT=Zaplatené +AddTrip=Vytvorte správu o výdavkoch +AllExpenseReport=Všetky typy výkazu výdavkov +AllExpenseReports=Všetky správy o výdavkoch +AnyOtherInThisListCanValidate=Osoba, ktorá má byť informovaná na potvrdenie žiadosti. +AttachTheNewLineToTheDocument=Pripojte riadok k nahranému dokumentu +AucuneLigne=Zatiaľ nie je deklarovaná žiadna správa o výdavkoch +BrouillonnerTrip=Presunúť správu o výdavkoch späť do stavu „Koncept“ +byEX_DAY=podľa dňa (obmedzenie na %s) +byEX_EXP=po riadku (obmedzenie na %s) +byEX_MON=podľa mesiaca (obmedzenie na %s) +byEX_YEA=podľa roku (obmedzenie na %s) +CANCEL_USER=Odstránené používateľom +CarCategory=Kategória vozidla +ClassifyRefunded=Klasifikovať ako „vrátené“ +CompanyVisited=Navštívená spoločnosť/organizácia +ConfirmBrouillonnerTrip=Naozaj chcete presunúť tento výkaz výdavkov do stavu „Koncept“? +ConfirmCancelTrip=Naozaj chcete zrušiť tento výkaz výdavkov? +ConfirmCloneExpenseReport=Naozaj chcete naklonovať túto správu o výdavkoch? +ConfirmDeleteTrip=Naozaj chcete odstrániť tento výkaz výdavkov? +ConfirmPaidTrip=Naozaj chcete zmeniť stav tohto prehľadu výdavkov na „Zaplatené“? +ConfirmRefuseTrip=Naozaj chcete zamietnuť túto správu o výdavkoch? +ConfirmSaveTrip=Naozaj chcete overiť tento výkaz výdavkov? +ConfirmValideTrip=Naozaj chcete schváliť túto správu o výdavkoch? +DATE_CANCEL=Dátum zrušenia +DATE_PAIEMENT=Dátum platby +DATE_REFUS=Odmietnuť dátum +DATE_SAVE=Dátum overenia +DefaultCategoryCar=Predvolený spôsob dopravy +DefaultRangeNumber=Predvolené číslo rozsahu +DeleteTrip=Odstrániť správu o výdavkoch +ErrorDoubleDeclaration=Vyhlásili ste inú správu o výdavkoch v podobnom rozsahu dátumov. +Error_EXPENSEREPORT_ADDON_NotDefined=Chyba, pravidlo pre číslovanie výkazu výdavkov nebolo definované v nastavení modulu 'Výkaz výdavkov' +ExpenseRangeOffset=Suma kompenzácie: %s +expenseReportCatDisabled=Kategória vypnutá – pozrite si slovník c_exp_tax_cat +expenseReportCoef=Koeficient +expenseReportCoefUndefined=(hodnota nie je definovaná) +expenseReportOffset=Ofset +expenseReportPrintExample=offset + (d x koef) = %s +expenseReportRangeDisabled=Rozsah vypnutý – pozrite si slovník rozsahu c_exp_tax_range +expenseReportRangeFromTo=z %d do %d +expenseReportRangeMoreThan=viac ako %d +expenseReportTotalForFive=Príklad s d = 5 +ExpenseReportApplyTo=Aplikovať na +ExpenseReportApproved=Bola schválená správa o výdavkoch ExpenseReportApprovedMessage=The expense report %s was approved.
- User: %s
- Approved by: %s
Click here to show the expense report: %s -ExpenseReportRefused=An expense report was refused -ExpenseReportRefusedMessage=The expense report %s was refused.
- User: %s
- Refused by: %s
- Motive for refusal: %s
Click here to show the expense report: %s -ExpenseReportCanceled=An expense report was canceled -ExpenseReportCanceledMessage=The expense report %s was canceled.
- User: %s
- Canceled by: %s
- Motive for cancellation: %s
Click here to show the expense report: %s -ExpenseReportPaid=An expense report was paid -ExpenseReportPaidMessage=The expense report %s was paid.
- User: %s
- Paid by: %s
Click here to show the expense report: %s -TripId=Id expense report -AnyOtherInThisListCanValidate=Person to be informed for validating the request. -TripSociete=Information company -TripNDF=Informations expense report -PDFStandardExpenseReports=Standard template to generate a PDF document for expense report -ExpenseReportLine=Expense report line -TF_OTHER=Ostatné -TF_TRIP=Transportation +ExpenseReportCanceled=Výkaz výdavkov bol zrušený +ExpenseReportCanceledMessage=Prehľad výdavkov %s bol zrušený.
– Používateľ: %s
– Zrušil: %s
– Dôvod zrušenia: %s
Kliknutím sem zobrazíte prehľad výdavkov: %s +ExpenseReportConstraintViolationError=Prekročená maximálna suma (pravidlo %s): %s je vyššia ako %s ( Prekročenie zakázané) +ExpenseReportConstraintViolationWarning=Prekročená maximálna suma (pravidlo %s): %s je vyššia ako %s ( Prekročenie povoleného) +ExpenseReportDateEnd=Dátum ukončenia +ExpenseReportDateStart=Dátum začiatku +ExpenseReportDomain=Doména na prihlásenie +ExpenseReportIkDesc=Výpočet nákladov na kilometre môžete upraviť podľa kategórie a rozsahu, ktorým boli predtým definované. d je vzdialenosť v kilometroch +ExpenseReportLimitAmount=Maximálne množstvo +ExpenseReportLimitOn=Obmedzte +ExpenseReportLine=Riadok výkazu výdavkov +ExpenseReportPaid=Bola zaplatená správa o výdavkoch +ExpenseReportPaidMessage=Prehľad výdavkov %s bol zaplatený.
– Používateľ: %s
– Zaplatí: %s
Kliknutím sem zobrazíte prehľad výdavkov: %s +ExpenseReportPayment=Platba prehľadu výdavkov +ExpenseReportRef=Ref. správa o výdajoch +ExpenseReportRefused=Správa o výdavkoch bola zamietnutá +ExpenseReportRefusedMessage=Prehľad výdavkov %s bol odmietnutý.
– Používateľ: %s
– Odmietol: %s
– Dôvod odmietnutia: %s
Kliknutím sem zobrazíte prehľad výdavkov: %s +ExpenseReportRestrictive=Prekročenie zakázané +ExpenseReportRuleErrorOnSave=Chyba: %s +ExpenseReportRuleSave=Pravidlo prehľadu výdavkov bolo uložené +ExpenseReportRulesDesc=Môžete definovať pravidlá maximálnej sumy pre výkazy výdavkov. Tieto pravidlá sa použijú, keď sa do výkazu výdavkov pridá nový výdavok +ExpenseReportWaitingForApproval=Na schválenie bol predložený nový výkaz výdavkov +ExpenseReportWaitingForApprovalMessage=A new expense report has been submitted and is waiting for approval.
- User: %s
- Period: %s
Click here to validate: %s +ExpenseReportWaitingForReApproval=Výkaz výdavkov bol predložený na opätovné schválenie +ExpenseReportWaitingForReApprovalMessage=An expense report has been submitted and is waiting for re-approval.
The %s, you refused to approve the expense report for this reason: %s.
A new version has been proposed and waiting for your approval.
- User: %s
- Period: %s
Click here to validate: %s +ExpenseReportsIk=Konfigurácia poplatkov za najazdené kilometre +ExpenseReportsRules=Pravidlá výkazu výdavkov +ExpenseReportsToApprove=Správy o výdavkoch na schválenie +ExpenseReportsToPay=Správy o výdavkoch na zaplatenie +ExpensesArea=Oblasť prehľadov výdavkov +FeesKilometersOrAmout=Množstvo alebo kilometrov +LastExpenseReports=Najnovšie prehľady výdavkov %s +ListOfFees=Sadzobník poplatkov +ListOfTrips=Zoznam výkazov o výdavkoch +ListToApprove=Čakanie na schválenie +ListTripsAndExpenses=Zoznam výkazov o výdavkoch +MOTIF_CANCEL=Dôvod +MOTIF_REFUS=Dôvod +ModePaiement=Platobný režim +NewTrip=Nová správa o výdavkoch +nolimitbyEX_DAY=podľa dňa (bez obmedzenia) +nolimitbyEX_EXP=po riadku (bez obmedzenia) +nolimitbyEX_MON=podľa mesiaca (bez obmedzenia) +nolimitbyEX_YEA=podľa roku (bez obmedzenia) +NoTripsToExportCSV=Za toto obdobie nie je možné exportovať žiadne hlásenie o výdavkoch. +NOT_AUTHOR=Nie ste autorom tejto správy o výdavkoch. Operácia zrušená. +OnExpense=Výdajový riadok +PDFStandardExpenseReports=Štandardná šablóna na generovanie dokumentu PDF pre správu o výdavkoch +PaidTrip=Zaplatiť správu o výdavkoch +REFUSEUR=Odmietnuté +RangeIk=Rozsah najazdených kilometrov +RangeNum=Rozsah %d +SaveTrip=Overte správu o výdavkoch +ShowExpenseReport=Zobraziť správu o výdavkoch +ShowTrip=Zobraziť správu o výdavkoch +TripCard=Výkaz o výdavkoch +TripId=Id výdavková správa +TripNDF=Správa o výdavkoch na informácie +TripSociete=Informačná spoločnosť +Trips=Prehľady výdavkov +TripsAndExpenses=Prehľady výdavkov +TripsAndExpensesStatistics=Štatistiky výkazov výdavkov +TypeFees=Poplatky +UploadANewFileNow=Teraz nahrajte nový dokument +VALIDATOR=Používateľ zodpovedný za schválenie +VALIDOR=Schválil +ValidateAndSubmit=Overte a odošlite na schválenie +ValidatedWaitingApproval=Overené (čaká sa na schválenie) +ValideTrip=Schváľte správu o výdavkoch + +## Dictionary +EX_BRE=Raňajky +EX_CAM=Údržba a opravy CV +EX_CAM_VP=Údržba a opravy PV +EX_CAR=Požičanie auta +EX_CUR=Zákazníci prijímajúci +EX_DOC=Dokumentácia +EX_EMM=Stravovanie zamestnancov +EX_FUE=Životopis paliva +EX_FUE_VP=Palivo PV +EX_GUM=Stravovanie hostí +EX_HOT=Hotel +EX_IND=Predplatenie náhradnej dopravy +EX_KME=Náklady na najazdené kilometre +EX_OTR=Iný príjem +EX_PAR=Parkovacie CV +EX_PAR_VP=Parkovanie PV +EX_POS=Poštovné +EX_SUM=Zásobovanie údržby +EX_SUO=Kancelárske potreby +EX_TAX=Rôzne dane +EX_TOL=Životopis mýta +EX_TOL_VP=Mýto PV +TF_BUS=Autobus +TF_CAR=Auto +TF_ESSENCE=Palivo +TF_HOTEL=Hotel TF_LUNCH=Obed TF_METRO=Metro -TF_TRAIN=Train -TF_BUS=Bus -TF_CAR=Car -TF_PEAGE=Toll -TF_ESSENCE=Fuel -TF_HOTEL=Hotel +TF_OTHER=Ostatné +TF_PEAGE=Mýto TF_TAXI=Taxi -EX_KME=Mileage costs -EX_FUE=Fuel CV -EX_HOT=Hotel -EX_PAR=Parking CV -EX_TOL=Toll CV -EX_TAX=Various Taxes -EX_IND=Indemnity transportation subscription -EX_SUM=Maintenance supply -EX_SUO=Office supplies -EX_CAR=Car rental -EX_DOC=Documentation -EX_CUR=Customers receiving -EX_OTR=Other receiving -EX_POS=Postage -EX_CAM=CV maintenance and repair -EX_EMM=Employees meal -EX_GUM=Guests meal -EX_BRE=Breakfast -EX_FUE_VP=Fuel PV -EX_TOL_VP=Toll PV -EX_PAR_VP=Parking PV -EX_CAM_VP=PV maintenance and repair -DefaultCategoryCar=Default transportation mode -DefaultRangeNumber=Default range number -UploadANewFileNow=Upload a new document now -Error_EXPENSEREPORT_ADDON_NotDefined=Error, the rule for expense report numbering ref was not defined into setup of module 'Expense Report' -ErrorDoubleDeclaration=You have declared another expense report into a similar date range. -AucuneLigne=There is no expense report declared yet -ModePaiement=Payment mode -VALIDATOR=User responsible for approval -VALIDOR=Approved by -AUTHOR=Recorded by -AUTHORPAIEMENT=Paid by -REFUSEUR=Denied by -CANCEL_USER=Deleted by -MOTIF_REFUS=Dôvod -MOTIF_CANCEL=Dôvod -DATE_REFUS=Deny date -DATE_SAVE=Dátum overenia -DATE_CANCEL=Cancelation date -DATE_PAIEMENT=Dátum platby -ExpenseReportRef=Ref. expense report -ValidateAndSubmit=Validate and submit for approval -ValidatedWaitingApproval=Validated (waiting for approval) -NOT_AUTHOR=You are not the author of this expense report. Operation cancelled. -ConfirmRefuseTrip=Are you sure you want to deny this expense report? -ValideTrip=Approve expense report -ConfirmValideTrip=Are you sure you want to approve this expense report? -PaidTrip=Pay an expense report -ConfirmPaidTrip=Are you sure you want to change status of this expense report to "Paid"? -ConfirmCancelTrip=Are you sure you want to cancel this expense report? -BrouillonnerTrip=Move back expense report to status "Draft" -ConfirmBrouillonnerTrip=Are you sure you want to move this expense report to status "Draft"? -SaveTrip=Validate expense report -ConfirmSaveTrip=Are you sure you want to validate this expense report? -NoTripsToExportCSV=No expense report to export for this period. -ExpenseReportPayment=Expense report payment -ExpenseReportsToApprove=Expense reports to approve -ExpenseReportsToPay=Expense reports to pay -ConfirmCloneExpenseReport=Are you sure you want to clone this expense report ? -ExpenseReportsIk=Configuration of mileage charges -ExpenseReportsRules=Expense report rules -ExpenseReportIkDesc=You can modify the calculation of kilometers expense by category and range who they are previously defined. d is the distance in kilometers -ExpenseReportRulesDesc=You can define max amount rules for expense reports. These rules will be applied when a new expense is added to an expense report -expenseReportOffset=Ofset -expenseReportCoef=Coefficient -expenseReportTotalForFive=Example with d = 5 -expenseReportRangeFromTo=from %d to %d -expenseReportRangeMoreThan=more than %d -expenseReportCoefUndefined=(value not defined) -expenseReportCatDisabled=Category disabled - see the c_exp_tax_cat dictionary -expenseReportRangeDisabled=Range disabled - see the c_exp_tax_range dictionay -expenseReportPrintExample=offset + (d x coef) = %s -ExpenseReportApplyTo=Apply to -ExpenseReportDomain=Domain to apply -ExpenseReportLimitOn=Limit on -ExpenseReportDateStart=Dátum začiatku -ExpenseReportDateEnd=Dátum ukončenia -ExpenseReportLimitAmount=Max amount -ExpenseReportRestrictive=Exceeding forbidden -AllExpenseReport=All type of expense report -OnExpense=Expense line -ExpenseReportRuleSave=Expense report rule saved -ExpenseReportRuleErrorOnSave=Error: %s -RangeNum=Range %d -ExpenseReportConstraintViolationError=Max amount exceeded (rule %s): %s is higher than %s (Exceeding forbidden) -byEX_DAY=by day (limitation to %s) -byEX_MON=by month (limitation to %s) -byEX_YEA=by year (limitation to %s) -byEX_EXP=by line (limitation to %s) -ExpenseReportConstraintViolationWarning=Max amount exceeded (rule %s): %s is higher than %s (Exceeding authorized) -nolimitbyEX_DAY=by day (no limitation) -nolimitbyEX_MON=by month (no limitation) -nolimitbyEX_YEA=by year (no limitation) -nolimitbyEX_EXP=by line (no limitation) -CarCategory=Vehicle category -ExpenseRangeOffset=Offset amount: %s -RangeIk=Mileage range -AttachTheNewLineToTheDocument=Attach the line to an uploaded document +TF_TRAIN=Vlak +TF_TRIP=Doprava diff --git a/htdocs/langs/sk_SK/website.lang b/htdocs/langs/sk_SK/website.lang index 0503fbfbbde..1cfcc576411 100644 --- a/htdocs/langs/sk_SK/website.lang +++ b/htdocs/langs/sk_SK/website.lang @@ -32,7 +32,7 @@ AddWebsite=Pridať webovú stránku Webpage=Webová stránka/kontajner AddPage=Pridať stránku/kontajner PageContainer=Strana -PreviewOfSiteNotYetAvailable=Ukážka vašej webovej stránky %s ešte nie je k dispozícii. Najprv musíte 'Importovať úplnú šablónu webovej stránky' alebo len 'b0e78643947 span>Pridať stránku/kontajner
'. +PreviewOfSiteNotYetAvailable=The preview of your website %s is not yet available. You must first 'Import a full website template' or just 'Add a page/container'. RequestedPageHasNoContentYet=Požadovaná stránka s ID %s zatiaľ nemá žiadny obsah alebo bol odstránený súbor vyrovnávacej pamäte .tpl.php. Ak chcete tento problém vyriešiť, upravte obsah stránky. SiteDeleted=Web '%s' bol odstránený PageContent=Stránka/Contenair @@ -53,7 +53,7 @@ CheckVirtualHostPerms=Skontrolujte tiež, či má používateľ virtuálneho hos ReadPerm=Čítať WritePerm=Napíšte TestDeployOnWeb=Testovať/nasadiť na webe -PreviewSiteServedByWebServer=Ukážka %s na novej karte.

%s bude obsluhovaný externým webovým serverom (ako Apache, Nginx, ). Tento server musíte nainštalovať a nastaviť predtým, aby ste mohli smerovať na adresár:
%s%s span>
Adresa URL poskytovaná externým serverom:
%s +PreviewSiteServedByWebServer=Preview %s in a new tab.

The %s will be served by an external web server (like Apache, Nginx, IIS). You must install and setup this server before to point to directory:
%s
URL served by external server:
%s PreviewSiteServedByDolibarr=Ukážka %s na novej karte.

%s bude obsluhovať server Dolibarr, takže nepotrebuje žiadny ďalší webový server (ako Apache, Nginx, IIS) na inštaláciu.
Nevhodné je, že adresy URL stránok nie sú užívateľsky prívetivé a začínajú cestou vášho Dolibarru.
Adresa URL poskytovaná spoločnosťou Dolibarr:


Ak chcete použiť svoj vlastný externý webový server obsluhujte túto webovú stránku, vytvorte si na svojom webovom serveri virtuálneho hostiteľa, ktorý ukazuje na adresár
%s
potom zadajte názov tohto virtuálneho servera vo vlastnostiach tohto webu a kliknite na odkaz „Testovať/nasadiť na webe“. VirtualHostUrlNotDefined=Adresa URL virtuálneho hostiteľa obsluhovaného externým webovým serverom nie je definovaná NoPageYet=Zatiaľ žiadne stránky @@ -63,8 +63,8 @@ YouCanEditHtmlSourceckeditor=Zdrojový kód HTML môžete upraviť pomocou tlač YouCanEditHtmlSource=
You can include PHP code into this source using tags <?php ?>. The following global variables are available: $conf, $db, $mysoc, $user, $website, $websitepage, $weblangs, $pagelangs.

You can also include content of another Page/Container with the following syntax:
<?php includeContainer('alias_of_container_to_include'); ?>

You can make a redirect to another Page/Container with the following syntax (Note: do not output any content before a redirect):
<?php redirectToContainer('alias_of_container_to_redirect_to'); ?>

To add a link to another page, use the syntax:
<a href="alias_of_page_to_link_to.php">mylink<a>

To include a link to download a file stored into the documents directory, use the document.php wrapper:
Example, for a file into documents/ecm (need to be logged), syntax is:
<a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext">
For a file into documents/medias (open directory for public access), syntax is:
<a href="/document.php?modulepart=medias&file=[relative_dir/]filename.ext">
For a file shared with a share link (open access using the sharing hash key of file), syntax is:
<a href="/document.php?hashp=publicsharekeyoffile">
YouCanEditHtmlSource1=
To include an image stored into the documents directory, use the viewimage.php wrapper.
Example, for an image into documents/medias (open directory for public access), syntax is:
<img src="/viewimage.php?modulepart=medias&file=[relative_dir/]filename.ext">
YouCanEditHtmlSource2=Pre obrázok zdieľaný s odkazom na zdieľanie (otvorený prístup pomocou hash kľúča zdieľania súboru) je syntax:
<img src="/viewimage.php?hashp=12345679012..."><?php print getImagePublicURLOfObject($object, 1, "_small") ?>" class='notranslate'>>
-YouCanEditHtmlSourceMore=
Ďalšie príklady HTML alebo dynamického kódu sú k dispozícii na
wiki dokumentácii >.
+YouCanEditHtmlSource3=To get the URL of the image of a PHP object, use
<img src="<?php print getImagePublicURLOfObject($object, 1, "_small") ?>">
+YouCanEditHtmlSourceMore=
More examples of HTML or dynamic code available on the wiki documentation.
ClonePage=Klonovanie stránky/kontajnera CloneSite=Klonovacia stránka SiteAdded=Webová stránka bola pridaná @@ -118,7 +118,7 @@ DeleteAlsoMedias=Odstrániť aj všetky mediálne súbory špecifické pre túto MyWebsitePages=Moje webové stránky SearchReplaceInto=Hľadať | Nahradiť do ReplaceString=Nový reťazec -CSSContentTooltipHelp=Tu zadajte obsah CSS. Aby ste sa vyhli akémukoľvek konfliktu s CSS aplikácie, nezabudnite pred všetky deklarácie pridať triedu .bodywebsite. Napríklad:

#mycssselector, input.myclass:hover { ... }
musí byť
.bodywebsite #mycssselector, .bodywebsite input.myclass:hover { ... b0342fccfda19b>
Poznámka: Ak máte veľký súbor bez tejto predpony, môžete použiť „lessc“ na jeho konverziu a všade pridať predponu .bodywebsite. +CSSContentTooltipHelp=Enter here CSS content. To avoid any conflict with the CSS of the application, be sure to prepend all declaration with the .bodywebsite class. For example:

#mycssselector, input.myclass:hover { ... }
must be
.bodywebsite #mycssselector, .bodywebsite input.myclass:hover { ... }

Note: If you have a large file without this prefix, you can use 'lessc' to convert it to append the .bodywebsite prefix everywhere. LinkAndScriptsHereAreNotLoadedInEditor=Upozornenie: Tento obsah sa zobrazí iba vtedy, keď sa na stránku pristupuje zo servera. Nepoužíva sa v režime úprav, takže ak potrebujete načítať súbory JavaScript aj v režime úprav, stačí na stránku pridať značku 'script src=...'. Dynamiccontent=Ukážka stránky s dynamickým obsahom EditInLineOnOff=Režim „Inline edit“ je %s diff --git a/htdocs/langs/sk_SK/withdrawals.lang b/htdocs/langs/sk_SK/withdrawals.lang index a0028a40c55..4b5ff4cb19c 100644 --- a/htdocs/langs/sk_SK/withdrawals.lang +++ b/htdocs/langs/sk_SK/withdrawals.lang @@ -1,174 +1,173 @@ # Dolibarr language file - Source file is en_US - withdrawals -CustomersStandingOrdersArea=Payments by Direct debit orders -SuppliersStandingOrdersArea=Payments by Credit transfer +CustomersStandingOrdersArea=Platby príkazmi na inkaso +SuppliersStandingOrdersArea=Platby prevodom na účet StandingOrdersPayment=Inkaso objednávky StandingOrderPayment=Inkaso objednávka NewStandingOrder=Nová inkaso objednávka -NewPaymentByBankTransfer=New payment by credit transfer +NewPaymentByBankTransfer=Nová platba prevodom StandingOrderToProcess=Ak chcete spracovať -PaymentByBankTransferReceipts=Credit transfer orders -PaymentByBankTransferLines=Credit transfer order lines +PaymentByBankTransferReceipts=Kreditné prevodné príkazy +PaymentByBankTransferLines=Riadky príkazov na prevod kreditu WithdrawalsReceipts=Inkaso objednávky WithdrawalReceipt=Inkaso objednávka -BankTransferReceipts=Credit transfer orders -BankTransferReceipt=Credit transfer order -LatestBankTransferReceipts=Latest %s credit transfer orders +BankTransferReceipts=Kreditné prevodné príkazy +BankTransferReceipt=Príkaz na prevod kreditu +LatestBankTransferReceipts=Najnovšie %s príkazy na prevod kreditu LastWithdrawalReceipts=Najnovšie %s dokumenty bezhotovostných platieb -WithdrawalsLine=Direct debit order line -CreditTransfer=Credit transfer -CreditTransferLine=Credit transfer line +WithdrawalsLine=Riadok príkazu na inkaso +CreditTransfer=Prevod kreditu +CreditTransferLine=Linka na prevod kreditu WithdrawalsLines=Riadky inkaso objednávok -CreditTransferLines=Credit transfer lines -RequestStandingOrderToTreat=Requests for direct debit payment order to process -RequestStandingOrderTreated=Requests for direct debit payment order processed -RequestPaymentsByBankTransferToTreat=Requests for credit transfer to process -RequestPaymentsByBankTransferTreated=Requests for credit transfer processed -NotPossibleForThisStatusOfWithdrawReceiptORLine=Not yet possible. Withdraw status must be set to 'credited' before declaring reject on specific lines. -NbOfInvoiceToWithdraw=No. of qualified customer invoices with waiting direct debit order -NbOfInvoiceToWithdrawWithInfo=No. of customer invoice with direct debit payment orders having defined bank account information -NbOfInvoiceToPayByBankTransfer=No. of qualified supplier invoices waiting for a payment by credit transfer -SupplierInvoiceWaitingWithdraw=Vendor invoice waiting for payment by credit transfer -InvoiceWaitingWithdraw=Invoice waiting for direct debit -InvoiceWaitingPaymentByBankTransfer=Invoice waiting for credit transfer +CreditTransferLines=Linky na prevod kreditu +RequestStandingOrderToTreat=Žiadosti o príkaz na inkaso na spracovanie +RequestStandingOrderTreated=Žiadosti o príkaz na inkaso spracované +RequestPaymentsByBankTransferToTreat=Žiadosti o prevod kreditu na spracovanie +RequestPaymentsByBankTransferTreated=Žiadosti o prevod spracované +NotPossibleForThisStatusOfWithdrawReceiptORLine=Zatiaľ to nie je možné. Stav výberu musí byť nastavený na „pripísané“ pred deklarovaním odmietnutia na konkrétnych riadkoch. +NbOfInvoiceToWithdraw=Počet kvalifikovaných odberateľských faktúr s čakajúcim príkazom na inkaso +NbOfInvoiceToWithdrawWithInfo=Číslo zákazníckej faktúry s príkazmi na inkaso s definovanými informáciami o bankovom účte +NbOfInvoiceToPayByBankTransfer=Počet kvalifikovaných dodávateľských faktúr čakajúcich na platbu bezhotovostným prevodom +SupplierInvoiceWaitingWithdraw=Faktúra dodávateľa čaká na platbu prevodom +InvoiceWaitingWithdraw=Faktúra čakajúca na inkaso +InvoiceWaitingPaymentByBankTransfer=Faktúra čakajúca na prevod AmountToWithdraw=Suma, ktorá má zrušiť -AmountToTransfer=Amount to transfer -NoInvoiceToWithdraw=No invoice open for '%s' is waiting. Go on tab '%s' on invoice card to make a request. -NoSupplierInvoiceToWithdraw=No supplier invoice with open '%s' is waiting. Go on tab '%s' on invoice card to make a request. -ResponsibleUser=User Responsible -WithdrawalsSetup=Direct debit payment setup -CreditTransferSetup=Credit transfer setup -WithdrawStatistics=Direct debit payment statistics -CreditTransferStatistics=Credit transfer statistics +AmountToTransfer=Suma na prevod +NoInvoiceToWithdraw=Žiadna otvorená faktúra pre '%s' nečaká. Ak chcete zadať požiadavku, prejdite na kartu '%s' na karte faktúry. +NoSupplierInvoiceToWithdraw=Žiadna dodávateľská faktúra s otvoreným '%s' nečaká. Ak chcete zadať požiadavku, prejdite na kartu '%s' na karte faktúry. +ResponsibleUser=Zodpovedný používateľ +WithdrawalsSetup=Nastavenie platby inkasom +CreditTransferSetup=Nastavenie prevodu kreditu +WithdrawStatistics=Štatistika platieb inkasom +CreditTransferStatistics=Štatistika prevodu kreditu Rejects=Odmieta -LastWithdrawalReceipt=Latest %s direct debit receipts -MakeWithdrawRequest=Make a direct debit payment request -MakeWithdrawRequestStripe=Make a direct debit payment request via Stripe -MakeBankTransferOrder=Make a credit transfer request -WithdrawRequestsDone=%s direct debit payment requests recorded -BankTransferRequestsDone=%s credit transfer requests recorded -ThirdPartyBankCode=Third-party bank code -NoInvoiceCouldBeWithdrawed=No invoice processed successfully. Check that invoices are on companies with a valid IBAN and that IBAN has a UMR (Unique Mandate Reference) with mode %s. -NoInvoiceCouldBeWithdrawedSupplier=No invoice processed successfully. Check that invoices are on companies with a valid IBAN. -NoSalariesCouldBeWithdrawed=No salary processed successfully. Check that salary are on users with a valid IBAN. -WithdrawalCantBeCreditedTwice=This withdrawal receipt is already marked as credited; this can't be done twice, as this would potentially create duplicate payments and bank entries. +LastWithdrawalReceipt=Najnovšie potvrdenia o inkase %s +MakeWithdrawRequest=Požiadajte o platbu inkasom +MakeWithdrawRequestStripe=Požiadajte o platbu inkasom cez Stripe +MakeBankTransferOrder=Požiadajte o prevod kreditu +WithdrawRequestsDone=%s zaznamenané žiadosti o platbu inkasom +BankTransferRequestsDone=%s zaznamenané žiadosti o prevod +ThirdPartyBankCode=Kód banky tretej strany +NoInvoiceCouldBeWithdrawed=Žiadna faktúra nebola úspešne spracovaná. Skontrolujte, či sú faktúry na spoločnosti s platným IBAN a či IBAN obsahuje UMR (Unique Mandate Reference) s režimom %s. +NoInvoiceCouldBeWithdrawedSupplier=Žiadna faktúra nebola úspešne spracovaná. Skontrolujte, či sú faktúry na spoločnosti s platným IBAN. +NoSalariesCouldBeWithdrawed=Žiadna úspešne spracovaná mzda. Skontrolujte, či sú platy používateľov s platným IBAN. +WithdrawalCantBeCreditedTwice=Toto potvrdenie o výbere je už označené ako pripísané; to sa nedá urobiť dvakrát, pretože by to mohlo viesť k duplicitným platbám a bankovým záznamom. ClassCredited=Klasifikovať pripísaná -ClassDebited=Classify debited -ClassCreditedConfirm=Are you sure you want to classify this withdrawal receipt as credited on your bank account? -TransData=Transmission date -TransMetod=Transmission method +ClassDebited=Klasifikovať debetné +ClassCreditedConfirm=Naozaj chcete tento doklad o výbere klasifikovať ako pripísaný na váš bankový účet? +TransData=Dátum prenosu +TransMetod=Spôsob prenosu Send=Odoslať Lines=Riadky -StandingOrderReject=Record a rejection -WithdrawsRefused=Direct debit refused -WithdrawalRefused=Withdrawal refused -CreditTransfersRefused=Credit transfers refused +StandingOrderReject=Zaznamenajte odmietnutie +WithdrawsRefused=Inkaso odmietnuté +WithdrawalRefused=Stiahnutie odmietnuté +CreditTransfersRefused=Úverové prevody boli odmietnuté WithdrawalRefusedConfirm=Ste si istí, že chcete zadať stiahnutiu odmietnutie pre spoločnosť RefusedData=Dátum odmietnutia RefusedReason=Dôvod odmietnutia RefusedInvoicing=Fakturácia odmietnutie -NoInvoiceRefused=Do not charge the customer for the refusal -InvoiceRefused=Charge the customer for the refusal -DirectDebitRefusedInvoicingDesc=Set a flag to say this refusal must be charged to the customer -StatusDebitCredit=Status debit/credit +NoInvoiceRefused=Neúčtovajte zákazníkovi za odmietnutie +InvoiceRefused=Naúčtovať zákazníkovi odmietnutie +DirectDebitRefusedInvoicingDesc=Nastavte príznak, že toto odmietnutie musí byť účtované zákazníkovi +StatusDebitCredit=Stav debet/kredit StatusWaiting=Čakanie StatusTrans=Odoslané -StatusDebited=Debited +StatusDebited=Debetované StatusCredited=Pripísania StatusPaid=Platený StatusRefused=Odmietol StatusMotif0=Nešpecifikovaný -StatusMotif1=Insufficient funds -StatusMotif2=Request contested -StatusMotif3=No direct debit payment order -StatusMotif4=Sales Order -StatusMotif5=RIB unusable +StatusMotif1=Nedostatok finančných prostriedkov +StatusMotif2=Požiadavka bola napadnutá +StatusMotif3=Žiadny príkaz na inkaso +StatusMotif4=Predajné objednávky +StatusMotif5=RIB nepoužiteľné StatusMotif6=Účet bez rovnováhy StatusMotif7=Súdne rozhodnutia StatusMotif8=Iný dôvod -CreateForSepaFRST=Create direct debit file (SEPA FRST) -CreateForSepaRCUR=Create direct debit file (SEPA RCUR) -CreateAll=Create direct debit file -CreateFileForPaymentByBankTransfer=Create file for credit transfer -CreateSepaFileForPaymentByBankTransfer=Create credit transfer file (SEPA) +CreateForSepaFRST=Vytvorte súbor inkasa (SEPA FRST) +CreateForSepaRCUR=Vytvoriť súbor inkasa (SEPA RCUR) +CreateAll=Vytvorte súbor inkasa +CreateFileForPaymentByBankTransfer=Vytvorte súbor na prevod kreditu +CreateSepaFileForPaymentByBankTransfer=Vytvoriť súbor prevodu kreditu (SEPA) CreateGuichet=Iba kancelária CreateBanque=Iba banky OrderWaiting=Čakanie na liečbu -NotifyTransmision=Record file transmission of order -NotifyCredit=Record credit of order +NotifyTransmision=Zaznamenajte prenos súboru objednávky +NotifyCredit=Rekordný kredit objednávky NumeroNationalEmetter=Národná Vysielač číslo WithBankUsingRIB=U bankových účtov pomocou RIB WithBankUsingBANBIC=U bankových účtov pomocou IBAN / BIC / SWIFT -BankToReceiveWithdraw=Receiving Bank Account -BankToPayCreditTransfer=Bank Account used as source of payments +BankToReceiveWithdraw=Prijímanie bankového účtu +BankToPayCreditTransfer=Bankový účet používaný ako zdroj platieb CreditDate=Kredit na -WithdrawalFileNotCapable=Unable to generate withdrawal receipt file for your country %s (Your country is not supported) -ShowWithdraw=Show Direct Debit Order -IfInvoiceNeedOnWithdrawPaymentWontBeClosed=However, if invoice has at least one direct debit payment order not yet processed, it won't be set as paid to allow prior withdrawal management. -DoStandingOrdersBeforePayments=This tab allows you to request a direct debit payment order. Once done, you can go into menu "Bank->Payment by direct debit" to generate and manage a Direct debit order file. -DoStandingOrdersBeforePayments2=You can also send a request directly to a SEPA payment processor like Stripe, ... -DoStandingOrdersBeforePayments3=When request is closed, payment on invoices will be automatically recorded, and invoices closed if remainder to pay is null. -DoCreditTransferBeforePayments=This tab allows you to request a credit transfer order. Once done, go into menu "Bank->Payment by credit transfer" to generate and manage a Credit transfer order file. -DoCreditTransferBeforePayments3=When credit transfer order is closed, payment on invoices will be automatically recorded, and invoices closed if remainder to pay is null. -WithdrawalFile=Debit order file -CreditTransferFile=Credit transfer file +WithdrawalFileNotCapable=Nie je možné vygenerovať súbor potvrdenia o výbere pre vašu krajinu %s (Vaša krajina nie je podporovaná) +ShowWithdraw=Zobraziť príkaz na inkaso +IfInvoiceNeedOnWithdrawPaymentWontBeClosed=Ak však faktúra obsahuje aspoň jeden platobný príkaz na inkaso, ktorý ešte nebol spracovaný, nebude nastavený ako zaplatený, aby bolo možné vopred spravovať výber. +DoStandingOrdersBeforePayments=Táto záložka umožňuje požiadať o príkaz na inkaso. Po dokončení môžete prejsť do ponuky „Banka->Platba inkasom“ a vygenerovať a spravovať súbor príkazu na inkaso. +DoStandingOrdersBeforePayments2=Môžete tiež poslať žiadosť priamo spracovateľovi platieb SEPA, ako je Stripe, ... +DoStandingOrdersBeforePayments3=Po uzavretí požiadavky sa platba na faktúry automaticky zaznamená a faktúry sa uzavrú, ak je zvyšok platby nulový. +DoCreditTransferBeforePayments=Táto záložka vám umožňuje požiadať o prevodný príkaz. Po dokončení prejdite do ponuky „Banka->Platba prevodom na účet“ a vygenerujte a spravujte súbor príkazu na prevod kreditu. +DoCreditTransferBeforePayments3=Po uzavretí prevodného príkazu sa platba na faktúry automaticky zaznamená a faktúry sa uzavrú, ak je zvyšok platby nulový. +WithdrawalFile=Súbor debetného príkazu +CreditTransferFile=Súbor prevodu kreditu SetToStatusSent=Nastavte na stav "odoslaný súbor" -ThisWillAlsoAddPaymentOnInvoice=This will also record payments on invoices and will classify them as "Paid" if remain to pay is null -StatisticsByLineStatus=Statistics by status of lines +ThisWillAlsoAddPaymentOnInvoice=Týmto sa zaznamenajú aj platby na faktúrach a budú sa klasifikovať ako „Zaplatené“, ak je zostávajúce platby nulové +StatisticsByLineStatus=Štatistiky podľa stavu liniek RUM=UMR -DateRUM=Mandate signature date -RUMLong=Unique Mandate Reference -RUMWillBeGenerated=If empty, a UMR (Unique Mandate Reference) will be generated once the bank account information is saved. -WithdrawMode=Direct debit mode (FRST or RCUR) -WithdrawRequestAmount=Amount of Direct debit request: -BankTransferAmount=Amount of Credit Transfer request: -WithdrawRequestErrorNilAmount=Unable to create direct debit request for empty amount. -SepaMandate=SEPA Direct Debit Mandate -SepaMandateShort=SEPA Mandate -PleaseReturnMandate=Please return this mandate form by email to %s or by mail to -SEPALegalText=By signing this mandate form, you authorize (A) %s and its payment service provider to send instructions to your bank to debit your account and (B) your bank to debit your account in accordance with the instructions from %s. As part of your rights, you are entitled to a refund from your bank under the terms and conditions of your agreement with your bank. Your rights regarding the above mandate are explained in a statement that you can obtain from your bank. You agree to receive notifications about future charges up to 2 days before they occur. -CreditorIdentifier=Creditor Identifier -CreditorName=Creditor Name -SEPAFillForm=(B) Please complete all the fields marked * +DateRUM=Dátum podpisu mandátu +RUMLong=Jedinečná referencia mandátu +RUMWillBeGenerated=Ak je prázdne, po uložení informácií o bankovom účte sa vygeneruje UMR (Unique Mandate Reference). +WithdrawMode=Režim inkasa (FRST alebo RCUR) +WithdrawRequestAmount=Výška žiadosti o inkaso: +BankTransferAmount=Suma žiadosti o prevod: +WithdrawRequestErrorNilAmount=Nie je možné vytvoriť žiadosť o inkaso pre prázdnu sumu. +SepaMandate=Mandát na SEPA inkaso +SepaMandateShort=SEPA mandát +PleaseReturnMandate=Tento formulár splnomocnenia vráťte e-mailom na adresu %s alebo poštou na adresu +SEPALegalText=Podpísaním tohto formulára splnomocnenia oprávňujete (A) %s a jej poskytovateľa platobných služieb posielať vašej banke pokyny na odpočítanie z vášho účtu a (B) vašej banke na odpočítanie vášho účtu v v súlade s pokynmi z %s. V rámci svojich práv máte nárok na vrátenie peňazí od vašej banky podľa podmienok vašej zmluvy s bankou. Vaše práva týkajúce sa vyššie uvedeného poverenia sú vysvetlené vo vyhlásení, ktoré môžete získať od svojej banky. Súhlasíte s tým, že budete dostávať upozornenia o budúcich poplatkoch až 2 dni pred ich uskutočnením. +CreditorIdentifier=Identifikátor veriteľa +CreditorName=Meno veriteľa +SEPAFillForm=(B) Vyplňte všetky polia označené * SEPAFormYourName=Vaše meno -SEPAFormYourBAN=Your Bank Account Name (IBAN) -SEPAFormYourBIC=Your Bank Identifier Code (BIC) -SEPAFrstOrRecur=Type of payment -ModeRECUR=Recurring payment -ModeRCUR=Recurring payment -ModeFRST=One-off payment -PleaseCheckOne=Please check one only -CreditTransferOrderCreated=Credit transfer order %s created -DirectDebitOrderCreated=Direct debit order %s created -AmountRequested=Amount requested +SEPAFormYourBAN=Názov vášho bankového účtu (IBAN) +SEPAFormYourBIC=Váš bankový identifikačný kód (BIC) +SEPAFrstOrRecur=Typ platby +ModeRECUR=Opakujúca sa platba +ModeRCUR=Opakujúca sa platba +ModeFRST=Jednorazová platba +PleaseCheckOne=Začiarknite iba jeden +CreditTransferOrderCreated=Príkaz na prevod kreditu %s bol vytvorený +DirectDebitOrderCreated=Príkaz na inkaso %s vytvorený +AmountRequested=Požadovaná suma SEPARCUR=SEPA CUR SEPAFRST=SEPA FRST -ExecutionDate=Execution date -CreateForSepa=Create direct debit file -ICS=Creditor Identifier - ICS -IDS=Debitor Identifier -END_TO_END="EndToEndId" SEPA XML tag - Unique id assigned per transaction -USTRD="Unstructured" SEPA XML tag -ADDDAYS=Add days to Execution Date -NoDefaultIBANFound=No default IBAN found for this third party +ExecutionDate=Dátum vykonania +CreateForSepa=Vytvorte súbor inkasa +ICS=Identifikátor veriteľa – ICS +IDS=Identifikátor dlžníka +END_TO_END="EndToEndId" SEPA XML tag - Jedinečné ID priradené k transakcii +USTRD="Neštruktúrovaný" SEPA XML tag +ADDDAYS=Pridajte dni k dátumu vykonania +NoDefaultIBANFound=Pre túto tretiu stranu sa nenašiel žiadny predvolený IBAN ### Notifications -InfoCreditSubject=Payment of direct debit payment order %s by the bank -InfoCreditMessage=The direct debit payment order %s has been paid by the bank
Data of payment: %s -InfoTransSubject=Transmission of direct debit payment order %s to bank -InfoTransMessage=The direct debit payment order %s has been sent to bank by %s %s.

+InfoCreditSubject=Platba príkazu na platbu inkasom %s bankou +InfoCreditMessage=Platobný príkaz na inkaso %s bol uhradený bankou
Údaje o platbe: b0ecb2ec87f49fz +InfoTransSubject=Prenos príkazu na inkaso %s do banky +InfoTransMessage=Platobný príkaz na inkaso %s odoslal banke %s %s .

InfoTransData=Amount: %s
Method: %s
Date: %s -InfoRejectSubject=Direct debit payment order refused -InfoRejectMessage=Hello,

the direct debit payment order of invoice %s related to the company %s, with an amount of %s has been refused by the bank.

--
%s +InfoRejectSubject=Príkaz na inkaso bol odmietnutý +InfoRejectMessage=Dobrý deň,

príkaz na inkaso faktúry %s súvisiaci s spoločnosť %s s čiastkou %s banka odmietla.

--
%s ModeWarning=Voľba pre reálny režim nebol nastavený, môžeme zastaviť po tomto simuláciu -ErrorCompanyHasDuplicateDefaultBAN=Company with id %s has more than one default bank account. No way to know which one to use. -ErrorICSmissing=Missing ICS in Bank account %s -TotalAmountOfdirectDebitOrderDiffersFromSumOfLines=Total amount of direct debit order differs from sum of lines -WarningSomeDirectDebitOrdersAlreadyExists=Warning: There is already some pending Direct Debit orders (%s) requested for an amount of %s -WarningSomeCreditTransferAlreadyExists=Warning: There is already some pending Credit Transfer (%s) requested for an amount of %s -UsedFor=Used for %s -Societe_ribSigned=SEPA mandate Signed -NbOfInvoiceToPayByBankTransferForSalaries=No. of qualified salaries waiting for a payment by credit transfer -SalaryWaitingWithdraw=Salaries waiting for payment by credit transfer +ErrorCompanyHasDuplicateDefaultBAN=Spoločnosť s ID %s má viac ako jeden predvolený bankový účet. Žiadny spôsob, ako zistiť, ktorý z nich použiť. +ErrorICSmissing=Chýba ICS v bankovom účte %s +TotalAmountOfdirectDebitOrderDiffersFromSumOfLines=Celková suma príkazu na inkaso sa líši od súčtu riadkov +WarningSomeDirectDebitOrdersAlreadyExists=Upozornenie: Už existuje niekoľko nespracovaných príkazov na inkaso (%s) vyžiadaných vo výške %s +WarningSomeCreditTransferAlreadyExists=Upozornenie: Už existuje nejaký čakajúci prevod kreditu (%s) na sumu %s +UsedFor=Používa sa pre %s +Societe_ribSigned=Mandát SEPA podpísaný +NbOfInvoiceToPayByBankTransferForSalaries=Počet kvalifikovaných platov čakajúcich na platbu prevodom +SalaryWaitingWithdraw=Mzdy čakajúce na platbu prevodom RefSalary=Mzda -NoSalaryInvoiceToWithdraw=No salary waiting for a '%s'. Go on tab '%s' on salary card to make a request. -SalaryInvoiceWaitingWithdraw=Salaries waiting for payment by credit transfer - +NoSalaryInvoiceToWithdraw=Žiadne čakanie na plat na '%s'. Prejdite na kartu '%s' na platovej karte a požiadajte. +SalaryInvoiceWaitingWithdraw=Mzdy čakajúce na platbu prevodom diff --git a/htdocs/langs/sl_SI/accountancy.lang b/htdocs/langs/sl_SI/accountancy.lang index 0200a97bf51..8411b5714cc 100644 --- a/htdocs/langs/sl_SI/accountancy.lang +++ b/htdocs/langs/sl_SI/accountancy.lang @@ -335,7 +335,6 @@ CategoryDeleted=Kategorija za računovodski račun je bila odstranjena AccountingJournals=Računovodski dnevniki AccountingJournal=Računovodski dnevnik NewAccountingJournal=Nov računovodski dnevnik -ShowAccountingJournal=Prikaži knjigovodski dnevnik NatureOfJournal=Narava časopisa AccountingJournalType1=Razne operacije AccountingJournalType2=Prodaja @@ -361,7 +360,7 @@ ACCOUNTING_LETTERING_NBLETTERS=Število črk pri generiranju črkovne kode (priv ACCOUNTING_LETTERING_NBLETTERS_DESC=Nekateri računovodski programi sprejemajo samo dvočrkovno kodo. Ta parameter vam omogoča nastavitev tega vidika. Privzeto število črk je tri. OptionsAdvanced=Napredne možnosti ACCOUNTING_FORCE_ENABLE_VAT_REVERSE_CHARGE=Aktivirajte upravljanje obrnjene davčne obveznosti pri dobaviteljih -ACCOUNTING_FORCE_ENABLE_VAT_REVERSE_CHARGE_DESC=Ko je ta možnost omogočena, lahko določite, da mora biti dobaviteljev ali dani račun dobavitelja drugače prenesen v računovodstvo: Dodatna obremenitev in kreditna linija bosta generirani v računovodstvu na 2 podanih kontih iz kontnega načrta, definiranega v "< stran za nastavitev span class='notranslate'>%s
". +ACCOUNTING_FORCE_ENABLE_VAT_REVERSE_CHARGE_DESC=When this option is enabled, you can define that a supplier or a given vendor invoice must be transferred into accountancy differently: A additional debit and a credit line will generated into the accounting on 2 given accounts from the chart of account defined into the "%s" setup page. ## Export NotExportLettering=Pri ustvarjanju datoteke ne izvažajte črk diff --git a/htdocs/langs/sl_SI/admin.lang b/htdocs/langs/sl_SI/admin.lang index fe7543c282d..7a040d945e2 100644 --- a/htdocs/langs/sl_SI/admin.lang +++ b/htdocs/langs/sl_SI/admin.lang @@ -1197,6 +1197,7 @@ Skin=Tema preobleke DefaultSkin=Privzeta tema preobleke MaxSizeList=Največja dolžina seznama DefaultMaxSizeList=Privzeta največja dolžina za sezname +DisplayGrandTotalInList=Display grand total (for all pages) in lists footer DefaultMaxSizeShortList=Privzeta največja dolžina za kratke sezname (tj. na kartici stranke) MessageOfDay=Sporočilo dneva MessageLogin=Sporočilo na prijavni strani @@ -1860,7 +1861,7 @@ PastDelayVCalExport=Ne izvažaj dogodekov, starejših od SecurityKey = Varnostni ključ ##### ClickToDial ##### ClickToDialSetup=Nastavitve modula za klicanje s klikom -ClickToDialUrlDesc=URL, ki se prikliče, ko kliknete sliko telefona. V URL-ju lahko uporabite oznake
__PHONETO__, ki bodo zamenjana s telefonsko številko osebe, ki jo je treba poklicati
__PHONEFROM__ bo nadomeščena s telefonsko številko osebe, ki kliče (vaša)
__LOGIN__
, ki bo nadomeščen s prijavo za klicanje (določeno na uporabniški kartici)
__PASS__ , ki bo nadomeščeno z geslom za klicanje (določeno na uporabniški kartici). +ClickToDialUrlDesc=URL called when a click on phone picto is done. In URL, you can use tags
__PHONETO__ that will be replaced with the phone number of person to call
__PHONEFROM__ that will be replaced with phone number of calling person (yours)
__LOGIN__ that will be replaced with clicktodial login (defined on user card)
__PASS__ that will be replaced with clicktodial password (defined on user card). ClickToDialDesc=Ta modul spremeni telefonske številke pri uporabi namiznega računalnika v povezave, ki jih je mogoče klikniti. Klik bo poklical številko. To lahko uporabite za začetek telefonskega klica, ko na namizju uporabljate programski telefon ali na primer pri uporabi sistema CTI, ki temelji na protokolu SIP. Opomba: Ko uporabljate pametni telefon, lahko telefonske številke vedno kliknete. ClickToDialUseTelLink=Na telefonskih številkah uporabite samo povezavo "tel:". ClickToDialUseTelLinkDesc=Uporabite to metodo, če imajo vaši uporabniki programski telefon ali programski vmesnik, nameščen v istem računalniku kot brskalnik, ki se pokliče, ko v brskalniku kliknete povezavo, ki se začne z "tel:". Če potrebujete povezavo, ki se začne s "sip:", ali celotno strežniško rešitev (ni potrebe po namestitvi lokalne programske opreme), morate to nastaviti na "Ne" in izpolniti naslednje polje. @@ -2433,3 +2434,12 @@ UrlPublicInterfaceHelpAdmin=It is possible to define an alias to the web server ExportUseForce=Use the parameter -f ExportUseForceHelp=Force to continue the export even when an error is found (Backup may not be reliable) CustomPrompt=Custom prompts +AiDescription=AI (Artificial Intelligence) features +AiDescriptionLong=Provides AI (Artificial Intelligence) features in different part of the application. Need external AI API. +AI_KEY_API_CHATGPT= Key for ChatGPT IA api +AiSetup=AI module setup +AiCustomPrompt=AI customs prompt +AI_CONFIGURATIONS_PROMPT=Custom prompt +ImageGeneration=Image generation +AIPromptForFeatures=AI custom prompts for features +EnterAnIP=Enter an IP address diff --git a/htdocs/langs/sl_SI/main.lang b/htdocs/langs/sl_SI/main.lang index 99ff11f31ef..092c995719c 100644 --- a/htdocs/langs/sl_SI/main.lang +++ b/htdocs/langs/sl_SI/main.lang @@ -420,6 +420,8 @@ TotalTTCShort=Skupaj (z DDV) TotalHT=Skupaj (brez davka) TotalHTforthispage=Skupaj (brez davka) za to stran Totalforthispage=Skupaj za to stran +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=Skupaj (z DDV) TotalTTCToYourCredit=Skupaj (z DDV) na vaš dobropis TotalVAT=Skupaj DDV @@ -647,6 +649,7 @@ ReportName=Ime poročila ReportPeriod=Obdobje poročila ReportDescription=Opis Report=Poročilo +Reports=Poročila Keyword=Ključna beseda Origin=Izvor Legend=Legenda diff --git a/htdocs/langs/sl_SI/modulebuilder.lang b/htdocs/langs/sl_SI/modulebuilder.lang index 969669f4e2a..cd250982958 100644 --- a/htdocs/langs/sl_SI/modulebuilder.lang +++ b/htdocs/langs/sl_SI/modulebuilder.lang @@ -180,7 +180,7 @@ FailedToAddCodeIntoDescriptor=Kode ni bilo mogoče dodati v deskriptor. Preverit DictionariesCreated=Slovar %s je bil uspešno ustvarjen DictionaryDeleted=Slovar %s je bil uspešno odstranjen PropertyModuleUpdated=Lastnost %s je bila uspešno posodobljena -InfoForApiFile=* Ko prvič ustvarite datoteko, bodo vse metode ustvarjene za vsak predmet.
* Ko kliknete remove, samo odstranite vse metode za razred izbrani predmet. +InfoForApiFile=* When you generate file for the first time then all methods will be created for each object.
* When you click in remove you just remove all methods for the selected object. SetupFile=Stran za nastavitev modula EmailingSelectors=Emails selectors EmailingSelectorDesc=You can generate and edit here the class files to provide new email target selectors for the mass emailing module diff --git a/htdocs/langs/sl_SI/stocks.lang b/htdocs/langs/sl_SI/stocks.lang index 18af68c91c8..9186319c605 100644 --- a/htdocs/langs/sl_SI/stocks.lang +++ b/htdocs/langs/sl_SI/stocks.lang @@ -282,7 +282,7 @@ ModuleStockTransferName=Napredni prenos zalog ModuleStockTransferDesc=Napredno upravljanje prenosa zalog z generiranjem prenosnega lista StockTransferNew=Nov prenos zalog StockTransferList=Seznam prenosov delnic -ConfirmValidateStockTransfer=Ali ste prepričani, da želite potrditi ta prenos delnic s sklicem %s? +ConfirmValidateStockTransfer=Are you sure you want to validate this stocks transfer with the reference %s ? ConfirmDestock=Zmanjšanje zalog s prenosom %s ConfirmDestockCancel=Preklic zmanjšanja zalog z nakazilom %s DestockAllProduct=Zmanjšanje zalog diff --git a/htdocs/langs/sq_AL/accountancy.lang b/htdocs/langs/sq_AL/accountancy.lang index 48441a6f259..0500eaab088 100644 --- a/htdocs/langs/sq_AL/accountancy.lang +++ b/htdocs/langs/sq_AL/accountancy.lang @@ -335,7 +335,6 @@ CategoryDeleted=Kategoria për llogarinë e kontabilitetit është hequr AccountingJournals=revista të kontabilitetit AccountingJournal=ditar i kontabilitetit NewAccountingJournal=Ditar i ri i kontabilitetit -ShowAccountingJournal=Trego ditarin e kontabilitetit NatureOfJournal=Natyra e ditarit AccountingJournalType1=Operacione të ndryshme AccountingJournalType2=Shitjet @@ -346,14 +345,14 @@ AccountingJournalType8=Inventari AccountingJournalType9=Fitimet e mbajtura GenerationOfAccountingEntries=Gjenerimi i regjistrimeve të kontabilitetit ErrorAccountingJournalIsAlreadyUse=Ky ditar tashmë po përdoret -AccountingAccountForSalesTaxAreDefinedInto=Shënim: Llogaria e kontabilitetit për tatimin mbi shitjet përcaktohet në menynë %sb09a4b739f17>b09a4b739f17> - %s +AccountingAccountForSalesTaxAreDefinedInto=Note: Accounting account for Sales tax are defined into menu %s - %s NumberOfAccountancyEntries=Numri i hyrjeve NumberOfAccountancyMovements=Numri i lëvizjeve ACCOUNTING_DISABLE_BINDING_ON_SALES=Çaktivizo lidhjen dhe transferimin në kontabilitet në shitje (faturat e klientit nuk do të merren parasysh në kontabilitet) ACCOUNTING_DISABLE_BINDING_ON_PURCHASES=Çaktivizo lidhjen dhe transferimin në kontabilitet për blerjet (faturat e shitësit nuk do të merren parasysh në kontabilitet) ACCOUNTING_DISABLE_BINDING_ON_EXPENSEREPORTS=Çaktivizo lidhjen dhe transferimin në kontabilitet në raportet e shpenzimeve (raportet e shpenzimeve nuk do të merren parasysh në kontabilitet) ACCOUNTING_ENABLE_LETTERING=Aktivizo funksionin e shkronjave në kontabilitet -ACCOUNTING_ENABLE_LETTERING_DESC=Kur ky opsion është i aktivizuar, ju mund të përcaktoni, në çdo hyrje kontabël, një kod që të mund të gruponi lëvizje të ndryshme kontabël së bashku. Në të kaluarën, kur revista të ndryshme menaxhoheshin në mënyrë të pavarur, kjo veçori ishte e nevojshme për të grupuar linjat e lëvizjes së revistave të ndryshme së bashku. Megjithatë, me kontabilitetin Dolibarr, një kod i tillë gjurmimi, i quajtur "%sb09a17f78zf span>" është ruajtur tashmë automatikisht, kështu që një shkronja automatike është bërë tashmë, pa rrezik gabimi, kështu që kjo veçori është bërë e padobishme për një përdorim të zakonshëm. Funksioni manual i shkronjave ofrohet për përdoruesit fundorë që vërtet nuk i besojnë motorit të kompjuterit që bën transferimin e të dhënave në kontabilitet. +ACCOUNTING_ENABLE_LETTERING_DESC=When this options is enabled, you can define, on each accounting entry, a code so you can group different accounting movements together. In the past, when different journals was managed independently, this feature was necessary to group movement lines of different journals together. However, with Dolibarr accountancy, such a tracking code, called "%s" is already saved automatically, so an automatic lettering is already done, with no risk of error so this feature has become useless for a common usage. Manual lettering feature is provided for end users that really don't trust the computer engine making the transfer of data in accountancy. EnablingThisFeatureIsNotNecessary=Aktivizimi i kësaj veçorie nuk është më i nevojshëm për një menaxhim rigoroz të kontabilitetit. ACCOUNTING_ENABLE_AUTOLETTERING=Aktivizoni shkronjat automatike kur transferoni në kontabilitet ACCOUNTING_ENABLE_AUTOLETTERING_DESC=Kodi për germat gjenerohet dhe rritet automatikisht dhe nuk zgjidhet nga përdoruesi përfundimtar @@ -468,8 +467,8 @@ AccountancyClosureConfirmAccountingReversal=Jeni i sigurt që dëshironi të reg ## Error SomeMandatoryStepsOfSetupWereNotDone=Disa hapa të detyrueshëm të konfigurimit nuk u kryen, ju lutemi plotësoni ato -ErrorNoAccountingCategoryForThisCountry=Nuk ka asnjë grup llogarish të disponueshme për shtetin %s (Shih %s - b0ecb2ec87f49>fz %s) -ErrorInvoiceContainsLinesNotYetBounded=Ju përpiqeni të shkruani disa rreshta të faturës %sb0a65d071f6f69, disa linja të tjera nuk janë ende të kufizuara me llogarinë kontabël. Gazetarimi i të gjitha linjave të faturave për këtë faturë refuzohet. +ErrorNoAccountingCategoryForThisCountry=No accounting account group available for country %s (See %s - %s - %s) +ErrorInvoiceContainsLinesNotYetBounded=You try to journalize some lines of the invoice %s, but some other lines are not yet bounded to accounting account. Journalization of all invoice lines for this invoice are refused. ErrorInvoiceContainsLinesNotYetBoundedShort=Disa rreshta në faturë nuk janë të lidhura me llogarinë kontabël. ExportNotSupported=Formati i konfiguruar i eksportit nuk mbështetet në këtë faqe BookeppingLineAlreayExists=Linjat ekzistuese tashmë në kontabilitet diff --git a/htdocs/langs/sq_AL/admin.lang b/htdocs/langs/sq_AL/admin.lang index 94184ed5ad2..809baf2f138 100644 --- a/htdocs/langs/sq_AL/admin.lang +++ b/htdocs/langs/sq_AL/admin.lang @@ -61,9 +61,9 @@ SetupArea=Konfigurimi UploadNewTemplate=Ngarko shabllon(t) e ri FormToTestFileUploadForm=Formulari për të testuar ngarkimin e skedarit (sipas konfigurimit) ModuleMustBeEnabled=Moduli/aplikacioni %s duhet të jetë en -ModuleIsEnabled=Moduli/aplikacioni %s ka qenë i hapur -IfModuleEnabled=Shënim: po është efektive vetëm nëse moduli %s është i mundshëm -RemoveLock=Hiq/riemërto skedarin %s%s has been enabled +IfModuleEnabled=Note: yes is effective only if module %s is enabled +RemoveLock=Remove/rename file %s if it exists, to allow usage of the Update/Install tool. RestoreLock=Rivendos skedarin %s, vetëm me leje të lexueshme përdorimi i mëtejshëm i mjetit Përditëso/Instalo. SecuritySetup=Konfigurimi i sigurisë PHPSetup=Konfigurimi i PHP @@ -71,7 +71,7 @@ OSSetup=Konfigurimi i OS SecurityFilesDesc=Përcaktoni këtu opsionet që lidhen me sigurinë në lidhje me ngarkimin e skedarëve. ErrorModuleRequirePHPVersion=Gabim, ky modul kërkon versionin PHP %s ose më të lartë ErrorModuleRequireDolibarrVersion=Gabim, ky modul kërkon versionin Dolibarr %s ose më të lartë -ErrorDecimalLargerThanAreForbidden=Gabim, një saktësi më e lartë se %s nuk mbështetet. +ErrorDecimalLargerThanAreForbidden=Error, a precision higher than %s is not supported. DictionarySetup=Vendosja e fjalorit Dictionary=fjalorë ErrorReservedTypeSystemSystemAuto=Vlera 'system' dhe 'systemauto' për llojin është e rezervuar. Ju mund të përdorni 'përdoruesin' si vlerë për të shtuar rekordin tuaj @@ -106,7 +106,7 @@ NextValueForInvoices=Vlera tjetër (faturat) NextValueForCreditNotes=Vlera tjetër (shënimet e kreditit) NextValueForDeposit=Vlera tjetër (parapagim) NextValueForReplacements=Vlera tjetër (zëvendësimet) -MustBeLowerThanPHPLimit=Shënim: konfigurimi juaj PHP aktualisht kufizon madhësinë maksimale të skedarit për ngarkim në %sb09a4fz0 span> %s, pavarësisht nga vlera e këtij parametri +MustBeLowerThanPHPLimit=Note: your PHP configuration currently limits the maximum filesize for upload to %s %s, irrespective of the value of this parameter NoMaxSizeByPHPLimit=Shënim: Asnjë kufi nuk është vendosur në konfigurimin tuaj të PHP MaxSizeForUploadedFiles=Madhësia maksimale për skedarët e ngarkuar (0 për të mos lejuar çdo ngarkim) UseCaptchaCode=Përdorni kodin grafik (CAPTCHA) në faqen e hyrjes dhe disa faqe publike @@ -150,7 +150,7 @@ AllWidgetsWereEnabled=Të gjitha miniaplikacionet e disponueshme janë aktivizua WidgetAvailable=Widget i disponueshëm PositionByDefault=Rendi i parazgjedhur MenusDesc=Menaxherët e menysë vendosin përmbajtjen e dy shiritave të menysë (horizontale dhe vertikale). -MenusEditorDesc=Redaktori i menusë ju lejon të përcaktoni hyrjet e personalizuara të menusë. Përdoreni atë me kujdes për të shmangur paqëndrueshmërinë dhe hyrjet e menysë të paarritshme përgjithmonë.
Disa module shtojnë hyrje të menysë (në menynë
Të gjitha kryesisht). Nëse i hiqni gabimisht disa nga këto hyrje, mund t'i rivendosni ato duke çaktivizuar dhe riaktivizuar modulin. +MenusEditorDesc=The menu editor allows you to define custom menu entries. Use it carefully to avoid instability and permanently unreachable menu entries.
Some modules add menu entries (in menu All mostly). If you remove some of these entries by mistake, you can restore them disabling and reenabling the module. MenuForUsers=Menu për përdoruesit LangFile=skedar .lang Language_en_US_es_MX_etc=Gjuha (en_US, es_MX, ...) @@ -159,11 +159,11 @@ SystemInfo=Informacioni i sistemit SystemToolsArea=Zona e mjeteve të sistemit SystemToolsAreaDesc=Kjo zonë ofron funksione administrative. Përdorni menunë për të zgjedhur funksionin e kërkuar. Purge=Pastrimi -PurgeAreaDesc=Kjo faqe ju lejon të fshini të gjithë skedarët e krijuar ose të ruajtur nga Dolibarr (skedarët e përkohshëm ose të gjithë skedarët në %s
). Përdorimi i kësaj veçorie zakonisht nuk është i nevojshëm. Ofrohet si një zgjidhje për përdoruesit, Dolibarr i të cilëve është pritur nga një ofrues që nuk ofron leje për të fshirë skedarët e krijuar nga serveri i uebit. +PurgeAreaDesc=This page allows you to delete all files generated or stored by Dolibarr (temporary files or all files in %s directory). Using this feature is not normally necessary. It is provided as a workaround for users whose Dolibarr is hosted by a provider that does not offer permissions to delete files generated by the web server. PurgeDeleteLogFile=Fshi skedarët e regjistrit, duke përfshirë %s të përcaktuar për modulin Synlog rreziku i humbjes së të dhënave) PurgeDeleteTemporaryFiles=Fshini të gjithë skedarët e regjistrit dhe të përkohshëm (pa rrezik të humbjes së të dhënave). Parametri mund të jetë 'tempfilesold', 'logfiles' ose të dyja 'tempfilesold+logfiles'. Shënim: Fshirja e skedarëve të përkohshëm bëhet vetëm nëse drejtoria temp është krijuar më shumë se 24 orë më parë. PurgeDeleteTemporaryFilesShort=Fshini regjistrin dhe skedarët e përkohshëm (pa rrezik të humbjes së të dhënave) -PurgeDeleteAllFilesInDocumentsDir=Fshi të gjithë skedarët në direktori: %s. 'notranslate'>
Kjo do të fshijë të gjitha dokumentet e krijuara në lidhje me elementët (palë të treta, fatura etj...), skedarët e ngarkuar në modulin ECM, depozitat e rezervave të bazës së të dhënave dhe skedarët e përkohshëm. +PurgeDeleteAllFilesInDocumentsDir=Delete all files in directory: %s.
This will delete all generated documents related to elements (third parties, invoices etc...), files uploaded into the ECM module, database backup dumps and temporary files. PurgeRunNow=Pastroni tani PurgeNothingToDelete=Nuk ka drejtori ose skedarë për të fshirë. PurgeNDirectoriesDeleted=skedarët ose drejtoritë janë fshirë %s. @@ -212,17 +212,17 @@ FeatureAvailableOnlyOnStable=Funksioni i disponueshëm vetëm në versionet zyrt BoxesDesc=Miniaplikacionet janë komponentë që tregojnë disa informacione që mund t'i shtoni për të personalizuar disa faqe. Mund të zgjidhni midis shfaqjes ose jo të miniaplikacionit duke zgjedhur faqen e synuar dhe duke klikuar 'Aktivizo', ose duke klikuar në koshin e plehrave për ta çaktivizuar atë. OnlyActiveElementsAreShown=Shfaqen vetëm elementet nga modulet e aktivizuara. ModulesDesc=Modulet/aplikacionet përcaktojnë se cilat veçori janë të disponueshme në softuer. Disa module kërkojnë që lejet t'u jepen përdoruesve pas aktivizimit të modulit. Klikoni butonin e ndezjes/fikjes %s për çdo modul ose çaktivizoni një modul/aplikacion. -ModulesDesc2=Klikoni butonin e rrotës %s për të konfiguruar modulin. +ModulesDesc2=Click the wheel button %s to configure the module/application. ModulesMarketPlaceDesc=Mund të gjeni më shumë module për t'u shkarkuar në faqet e jashtme të internetit në internet... -ModulesDeployDesc=Nëse lejet në sistemin tuaj të skedarëve e lejojnë këtë, mund ta përdorni këtë mjet për të vendosur një modul të jashtëm. Moduli më pas do të jetë i dukshëm në skedën %s%s
. ModulesMarketPlaces=Gjeni aplikacionin/modulet e jashtme ModulesDevelopYourModule=Zhvilloni aplikacionin/modulet tuaja ModulesDevelopDesc=Ju gjithashtu mund të zhvilloni modulin tuaj ose të gjeni një partner për të zhvilluar një për ju. DOLISTOREdescriptionLong=Në vend që të aktivizoni faqen e internetit www.dolistore.com për të gjetur një modul të jashtëm, mund të përdorni këtë mjet të integruar që do të kryejë kërkimin në tregun e jashtëm për ju (mund të jetë i ngadalshëm, ka nevojë për qasje në internet)... FreeModule=Falas CompatibleUpTo=E përputhshme me versionin %s -NotCompatible=Ky modul nuk duket i pajtueshëm me Dolibarr tuaj %s (Min %s - Maksimumi b049f2ec87 span>). -CompatibleAfterUpdate=Ky modul kërkon një përditësim të Dolibarr tuaj %s (Min %s - Maksimumi b0ecb2ecz87f9 >). +NotCompatible=This module does not seem compatible with your Dolibarr %s (Min %s - Max %s). +CompatibleAfterUpdate=This module requires an update to your Dolibarr %s (Min %s - Max %s). SeeInMarkerPlace=Shihni në treg SeeSetupOfModule=Shiko konfigurimin e modulit %s SeeSetupPage=Shiko faqen e konfigurimit në %s @@ -250,8 +250,8 @@ Security=Siguria Passwords=Fjalëkalimet DoNotStoreClearPassword=Enkriptoni fjalëkalimet e ruajtura në bazën e të dhënave (JO si tekst i thjeshtë). Rekomandohet fuqimisht të aktivizoni këtë opsion. MainDbPasswordFileConfEncrypted=Enkriptoni fjalëkalimin e bazës së të dhënave të ruajtur në conf.php. Rekomandohet fuqimisht të aktivizoni këtë opsion. -InstrucToEncodePass=Për të pasur fjalëkalim të koduar në skedarin conf.php, zëvendëso rreshtin cc<0192fz /span>$dolibarr_main_db_pass="...";b014 >nga
$dolibarr_main_db_pass="crypted:b0ecb9f2ec span class='notranslate'> -InstrucToClearPass=Për të deshifruar (pastruar) fjalëkalimin në skedarin conf.php, zëvendësoni rreshtin
$dolibarr_main_db_pass="crypted:...";b09a4b739f17f8f8s0 >
nga
$dolibarr_main_db_pass'8fda19bz0 > "; +InstrucToEncodePass=To have password encoded into the conf.php file, replace the line
$dolibarr_main_db_pass="...";
by
$dolibarr_main_db_pass="crypted:%s"; +InstrucToClearPass=To have password decoded (clear) into the conf.php file, replace the line
$dolibarr_main_db_pass="crypted:...";
by
$dolibarr_main_db_pass="%s"; ProtectAndEncryptPdfFiles=Mbroni skedarët PDF të krijuar. Kjo NUK rekomandohet pasi prish gjenerimin e PDF-ve në masë. ProtectAndEncryptPdfFilesDesc=Mbrojtja e një dokumenti PDF e mban atë të disponueshëm për t'u lexuar dhe printuar me çdo shfletues PDF. Megjithatë, redaktimi dhe kopjimi nuk është më i mundur. Vini re se përdorimi i kësaj veçorie bën që ndërtimi i PDF-ve të bashkuara globale të mos funksionojë. Feature=Veçori @@ -268,8 +268,8 @@ OtherResources=Burime të tjera ExternalResources=Burimet e Jashtme SocialNetworks=Rrjete sociale SocialNetworkId=ID e rrjetit social -ForDocumentationSeeWiki=Për dokumentacionin e përdoruesit ose zhvilluesit (Dokument, FAQ...),
hidhini një sy Dolibarr Wiki:
%sc650 -ForAnswersSeeForum=Për çdo pyetje/ndihmë tjetër, mund të përdorni forumin e Dolibarr:
b00fab32z0e<9 /span>%s
+ForDocumentationSeeWiki=For user or developer documentation (Doc, FAQs...),
take a look at the Dolibarr Wiki:
%s +ForAnswersSeeForum=For any other questions/help, you can use the Dolibarr forum:
%s HelpCenterDesc1=Këtu janë disa burime për të marrë ndihmë dhe mbështetje me Dolibarr. HelpCenterDesc2=Disa nga këto burime disponohen vetëm në anglisht. CurrentMenuHandler=Trajtuesi aktual i menysë @@ -290,8 +290,8 @@ EMailsSetup=Konfigurimi i emaileve EMailsDesc=Kjo faqe ju lejon të vendosni parametra ose opsione për dërgimin e emailit. EmailSenderProfiles=Profilet e dërguesit të emaileve EMailsSenderProfileDesc=Ju mund ta mbani këtë seksion bosh. Nëse futni disa email këtu, ato do të shtohen në listën e dërguesve të mundshëm në kutinë e kombinuar kur shkruani një email të ri. -MAIN_MAIL_SMTP_PORT=Porta SMTP/SMTPS (vlera e parazgjedhur në php.ini: %sb09f17b73 >) -MAIN_MAIL_SMTP_SERVER=Pritësi SMTP/SMTPS (vlera e parazgjedhur në php.ini: %sb09f177 >) +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: %s) +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: %s) MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=Porta SMTP/SMTPS MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=Pritësi SMTP/SMTPS MAIN_MAIL_EMAIL_FROM=Email dërgues për emaile automatike @@ -302,7 +302,7 @@ MAIN_DISABLE_ALL_MAILS=Çaktivizo të gjithë dërgimin e emaileve (për qëllim MAIN_MAIL_FORCE_SENDTO=Dërgoni të gjitha emailet tek (në vend të marrësve të vërtetë, për qëllime testimi) MAIN_MAIL_ENABLED_USER_DEST_SELECT=Sugjeroni emailet e punonjësve (nëse është përcaktuar) në listën e marrësve të paracaktuar kur shkruani një email të ri MAIN_MAIL_NO_WITH_TO_SELECTED=Mos zgjidhni një marrës të paracaktuar edhe nëse ka vetëm 1 zgjedhje të mundshme -MAIN_MAIL_SENDMODE=Sending method +MAIN_MAIL_SENDMODE=Mënyra e dërgimit MAIN_MAIL_SMTPS_ID=ID SMTP (nëse serveri dërgues kërkon vërtetim) MAIN_MAIL_SMTPS_PW=Fjalëkalimi SMTP (nëse serveri dërgues kërkon vërtetim) MAIN_MAIL_EMAIL_TLS=Përdorni enkriptimin TLS (SSL). @@ -345,12 +345,12 @@ ThisIsAlternativeProcessToFollow=Ky është një konfigurim alternativ për t'u StepNb=Hapi %s FindPackageFromWebSite=Gjeni një paketë që ofron veçoritë që ju nevojiten (për shembull në faqen zyrtare të internetit %s). DownloadPackageFromWebSite=Shkarko paketën (për shembull nga faqja zyrtare e internetit %s). -UnpackPackageInDolibarrRoot=Shpaketoni/zbrisni skedarët e paketuar në drejtorinë tuaj të serverit Dolibarr: %sb09a17sf830f > +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into your Dolibarr server directory: %s UnpackPackageInModulesRoot=Për të vendosur/instaluar një modul të jashtëm, duhet të shpaketoni/zbrisni skedarin e arkivit në drejtorinë e serverit të dedikuar për modulet e jashtme:
%s SetupIsReadyForUse=Vendosja e modulit ka përfunduar. Sidoqoftë, duhet ta aktivizoni dhe konfiguroni modulin në aplikacionin tuaj duke shkuar te modulet e konfigurimit të faqes: %s. NotExistsDirect=Drejtoria alternative rrënjë nuk është përcaktuar në një direktori ekzistuese.
InfDirAlt=Që nga versioni 3, është e mundur të përcaktohet një direktori alternative rrënjë. Kjo ju lejon të ruani, në një drejtori të dedikuar, shtojca dhe shabllone të personalizuara.
Thjesht krijoni një direktori në rrënjë të Dolibarr (p.sh.: me porosi).
-InfDirExample=
Më pas deklaroje në skedarin conf.phpb0a65d09zpan0sf class = 'noTranslate'>
$ dolibarr_main_url_root_alt = '/custom'
'notranslate'>
Nëse këto rreshta komentohen me "#", për t'i aktivizuar ato, thjesht hiqni komentin duke hequr karakterin "#". +InfDirExample=
Then declare it in the file conf.php
$dolibarr_main_url_root_alt='/custom'
$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'
If these lines are commented with "#", to enable them, just uncomment by removing the "#" character. YouCanSubmitFile=Ju mund të ngarkoni skedarin .zip të paketës së modulit nga këtu: CurrentVersion=Versioni aktual i Dolibarr CallUpdatePage=Shfletoni në faqen që përditëson strukturën dhe të dhënat e bazës së të dhënave: %s. @@ -361,28 +361,28 @@ LastActivationIP=IP e fundit e aktivizimit LastActivationVersion=Versioni i fundit i aktivizimit UpdateServerOffline=Përditëso serverin jashtë linje WithCounter=Menaxhoni një numërues -GenericMaskCodes=Ju mund të vendosni çdo maskë numërimi. Në këtë maskë, etiketat e mëposhtme mund të përdoren:
{000000}b09a4b73 /span> korrespondon me një numër që do të rritet në çdo %s. Futni aq zero sa gjatësia e dëshiruar e numëruesit. Numëruesi do të plotësohet me zero nga e majta në mënyrë që të ketë aq zero sa maska.
{000000+000}b09a4b739f17f8z e mëparshme, por e njëjta gjë një zhvendosje që korrespondon me numrin në të djathtë të shenjës + zbatohet duke filluar nga %s e parë.
{000000@x} por e njëjta gjë si e mëparshme numëruesi rivendoset në zero kur arrihet muaji x (x midis 1 dhe 12, ose 0 për të përdorur muajt e parë të vitit fiskal të përcaktuar në konfigurimin tuaj, ose 99 për të rivendosur në zero çdo muaj). Nëse përdoret ky opsion dhe x është 2 ose më i lartë, atëherë kërkohet gjithashtu sekuenca {yy}{mm} ose {yyyy}{mm}.
{dd} 10 ditë (<1 deri në 3). span class='notranslate'>
{mm} 1 muaj (01 deri në 1 muaj). class='notranslate'>
{yy}, {yyyy} ose {y}b09a4b739f17> viti mbi 2, 4 ose 1 numra.
-GenericMaskCodes2={cccc} kodi i klientit në karakterin e
{cccc000}b091 code
b091 në n karaktere ndiqet nga një numërues i dedikuar klientit. Ky numërues i dedikuar klientit rivendoset në të njëjtën kohë me numëruesin global.
b06a5f45149e Kodi i llojit të palës së tretë në n karaktere (shih menynë Faqja kryesore - Konfigurimi - Fjalori - Llojet e palëve të treta). Nëse shtoni këtë etiketë, numëruesi do të jetë i ndryshëm për çdo lloj pale të tretë.
+GenericMaskCodes=You may enter any numbering mask. In this mask, the following tags can be used:
{000000} corresponds to a number which will be incremented on each %s. Enter as many zeros as the desired length of the counter. The counter will be completed by zeros from the left in order to have as many zeros as the mask.
{000000+000} same as the previous one but an offset corresponding to the number to the right of the + sign is applied starting on the first %s.
{000000@x} same as the previous one but the counter is reset to zero when month x is reached (x between 1 and 12, or 0 to use the early months of fiscal year defined in your configuration, or 99 to reset to zero every month). If this option is used and x is 2 or higher, then the sequence {yy}{mm} or {yyyy}{mm} is also required.
{dd} day (01 to 31).
{mm} month (01 to 12).
{yy}, {yyyy} or {y} year over 2, 4 or 1 numbers.
+GenericMaskCodes2={cccc} the client code on n characters
{cccc000} the client code on n characters is followed by a counter dedicated to the customer. This counter dedicated to customer is reset at same time as the global counter.
{tttt} The code of third party type on n characters (see menu Home - Setup - Dictionary - Types of third parties). If you add this tag, the counter will be different for each type of third party.
GenericMaskCodes3=Të gjithë karakteret e tjera në maskë do të mbeten të paprekura.
Hapësirat nuk lejohen.
GenericMaskCodes3EAN=Të gjithë karakteret e tjera në maskë do të mbeten të paprekura (përveç * ose ? në pozicionin e 13-të në EAN13).
Hapësirat nuk lejohen.
Në EAN13, karakteri i fundit pas }-së së fundit në pozicionin e 13-të duhet të jetë * ose ? . Ai do të zëvendësohet nga çelësi i llogaritur.
GenericMaskCodes4a=Shembull në datën 99 %s të palës së tretë TheCompany, me datë 2023-01-31:

GenericMaskCodes4b=Shembull për palën e tretë i krijuar më 31/01/2023:b0349fccf -GenericMaskCodes4c=Shembull për produktin e krijuar më 31/01/2023:b0342fccfdasb0342fccfdas -GenericMaskCodes5=ABC{yy}{mm}-{000000} do të japë b65ABC2301-000099

b0aee83fz0658>b0aee83fz0658@0+0 }-ZZZ/{dd}/XXX
do të japë 0199-ZZZ/31/XXX

IN{yy}{mm}-{0000}-{t class='notranslate'>
do t'i japë IN2301-0099-Ab09a4b739f17 të llojit të kompanisë 'Responsable Inscripto' me kod për llojin që është 'A_RI' +GenericMaskCodes4c=Example on product created on 2023-01-31:
+GenericMaskCodes5=ABC{yy}{mm}-{000000} will give ABC2301-000099
{0000+100@1}-ZZZ/{dd}/XXX will give 0199-ZZZ/31/XXX
IN{yy}{mm}-{0000}-{t} will give IN2301-0099-A if the type of company is 'Responsable Inscripto' with code for type that is 'A_RI' GenericNumRefModelDesc=Kthen një numër të personalizueshëm sipas një maske të përcaktuar. -ServerAvailableOnIPOrPort=Serveri është i disponueshëm në adresën %s %s -ServerNotAvailableOnIPOrPort=Serveri nuk është i disponueshëm në adresën %s %s +ServerAvailableOnIPOrPort=Server is available at address %s on port %s +ServerNotAvailableOnIPOrPort=Server is not available at address %s on port %s DoTestServerAvailability=Testoni lidhjen e serverit DoTestSend=Testimi i dërgimit DoTestSendHTML=Testoni dërgimin e HTML ErrorCantUseRazIfNoYearInMask=Gabim, nuk mund të përdoret opsioni @ për të rivendosur numëruesin çdo vit nëse sekuenca {yy} ose {yyyy} nuk është në maskë. -ErrorCantUseRazInStartedYearIfNoYearMonthInMask=Gabim, nuk mund të përdoret opsioni @ nëse sekuenca {yy}{mm} ose b03d0fe4bc90b>9 {mm} nuk është në maskë. +ErrorCantUseRazInStartedYearIfNoYearMonthInMask=Error, can't use option @ if sequence {yy}{mm} or {yyyy}{mm} is not in mask. UMask=Parametri UMask për skedarët e rinj në sistemin e skedarëve Unix/Linux/BSD/Mac. UMaskExplanation=Ky parametër ju lejon të përcaktoni lejet e vendosura si parazgjedhje për skedarët e krijuar nga Dolibarr në server (për shembull gjatë ngarkimit).
Duhet të jetë vlera oktal (për shembull, 0666 do të thotë lexo dhe shkruani për të gjithë.). Vlera e rekomanduar është 0600 ose 0660
Ky parametër është i padobishëm në një server Windows. SeeWikiForAllTeam=Hidhini një sy faqes Wiki për një listë të kontribuesve dhe organizimin e tyre UseACacheDelay= Vonesa për ruajtjen e përgjigjes së eksportit në memorie të fshehtë në sekonda (0 ose bosh pa memorie të fshehtë) DisableLinkToHelpCenter=Fshih lidhjen "Ke nevojë për ndihmë ose mbështetje" në faqen e identifikimit -DisableLinkToHelp=Fshih lidhjen për ndihmën në internet "%s
" +DisableLinkToHelp=Hide the link to the online help "%s" AddCRIfTooLong=Nuk ka mbështjellje automatike të tekstit, teksti që është shumë i gjatë nuk do të shfaqet në dokumente. Ju lutemi shtoni kthimet e transportit në zonën e tekstit nëse është e nevojshme. ConfirmPurge=Jeni i sigurt që dëshironi ta ekzekutoni këtë spastrim?
Kjo do të fshijë përgjithmonë të gjithë skedarët tuaj të të dhënave pa asnjë mënyrë për t'i rivendosur ato (skedarët ECM, skedarët e bashkangjitur...). MinLength=Gjatësia minimale @@ -390,9 +390,9 @@ LanguageFilesCachedIntoShmopSharedMemory=Skedarët .lang ngarkohen në memorien LanguageFile=Skedari i gjuhës ExamplesWithCurrentSetup=Shembuj me konfigurimin aktual ListOfDirectories=Lista e drejtorive të shablloneve të OpenDocument -ListOfDirectoriesForModelGenODT=Lista e drejtorive që përmbajnë skedarë shabllonesh me formatin OpenDocument.

Vendosni këtu rrugën e plotë të drejtorive.
Shto një kthim transporti midis drejtorisë eah.
Për të shtuar një drejtori të modulit GED, shtoni këtu b0aee833z0583f >DOL_DATA_ROOT/ecm/yourdirectoryname
.
b031panFisles.odt ose . +ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.

Put here full path of directories.
Add a carriage return between eah directory.
To add a directory of the GED module, add here DOL_DATA_ROOT/ecm/yourdirectoryname.

Files in those directories must end with .odt or .ods. NumberOfModelFilesFound=Numri i skedarëve të shabllonit ODT/ODS të gjetur në këto drejtori -ExampleOfDirectoriesForModelGen=Shembuj të sintaksës:
c:\\myapp\\mydocumentdir\\mysubdir
/home/myapp/mydocumentdir/mydocumentdir/my 'notranslate'>
DOL_DATA_ROOT/ecm/ecmdir +ExampleOfDirectoriesForModelGen=Examples of syntax:
c:\\myapp\\mydocumentdir\\mysubdir
/home/myapp/mydocumentdir/mysubdir
DOL_DATA_ROOT/ecm/ecmdir FollowingSubstitutionKeysCanBeUsed=
Për të ditur se si të krijoni shabllonet tuaja të dokumenteve odt, përpara se t'i ruani në ato drejtori, lexoni dokumentacionin wiki: FullListOnOnlineDocumentation=https://wiki.dolibarr.org/index.php/Create_an_ODT_document_template FirstnameNamePosition=Pozicioni i Emrit/Mbiemrit @@ -433,7 +433,7 @@ MassConvert=Nis konvertimin në masë PriceFormatInCurrentLanguage=Formati i çmimit në gjuhën aktuale String=Vargu String1Line=Varg (1 rresht) -Text=Text +Text=Teksti TextLong=Tekst i gjatë TextLongNLines=Tekst i gjatë (n rreshta) HtmlText=Teksti HTML @@ -461,11 +461,11 @@ ComputedFormulaDesc=Këtu mund të futni një formulë duke përdorur vetitë e Computedpersistent=Ruaj fushën e llogaritur ComputedpersistentDesc=Fushat shtesë të llogaritura do të ruhen në bazën e të dhënave, megjithatë, vlera do të rillogaritet vetëm kur objekti i kësaj fushe ndryshohet. Nëse fusha e llogaritur varet nga objekte të tjera ose të dhëna globale, kjo vlerë mund të jetë e gabuar!! ExtrafieldParamHelpPassword=Lënia e kësaj fushe bosh do të thotë se kjo vlerë do të ruhet PA enkriptim (fusha thjesht është fshehur me yje në ekran).

Enter vlera 'dolcrypt' për të koduar vlerën me një algoritëm të kthyeshëm enkriptimi. Të dhënat e pastra ende mund të njihen dhe modifikohen, por janë të koduara në bazën e të dhënave.

Fut 'auto' (ose 'md5', 'sha256', 'password_hash', ...) për të përdorur algoritmin e parazgjedhur të enkriptimit të fjalëkalimit (ose md5, sha256, password_hash...) për të ruajtur fjalëkalimin e hashuar jo të kthyeshëm në bazën e të dhënave (nuk ka asnjë mënyrë për të marrë vlerën origjinale) -ExtrafieldParamHelpselect=Lista e vlerave duhet të jetë rreshta me çelësin e formatit, vlerën (ku çelësi nuk mund të jetë '0')

për shembull :
1,value1
2,value2

...

Për të pasur listën në varësi të një tjetri lista plotësuese e atributeve:
1,value1|options_parent_list_code7span çelësi_prindëror
2,value2|opsionet_kodi_lista_parent7par_833>b0pansbacey3>b0pansbacey6 class='notranslate'>

Për të pasur listën në varësi të një liste tjetër:
1, vlera1|parent_list_code:parent_keyb0342fccfda1, b0342zvalueb0342fccfda1| class='notranslate'>parent_list_code:parent_key -ExtrafieldParamHelpcheckbox=Lista e vlerave duhet të jetë rreshta me çelësin e formatit, vlerën (ku çelësi nuk mund të jetë '0')

për shembull :
1,value1
2,value2
,value<3> span class='notranslate'>
... -ExtrafieldParamHelpradio=Lista e vlerave duhet të jetë rreshta me çelësin e formatit, vlerën (ku çelësi nuk mund të jetë '0')

për shembull :
1,value1
2,value2
,value<3> span class='notranslate'>
... -ExtrafieldParamHelpsellist=Lista e vlerave vjen nga një tabelë
Sintaksa: table_name:label_field:id_field::filtersql
Shembull: cbelle_typident: ::filtersql

- id_field është domosdoshmërisht një çelës int primarb03420cc - filtersql është një kusht SQL. Mund të jetë një test i thjeshtë (p.sh. aktiv=1) për të shfaqur vetëm vlerën aktive
Mund të përdorni gjithashtu $ID$ në filtër që është id-ja aktuale e objektit aktual
Për të përdorur një SELECT në filtër, përdorni fjalën kyçe $SEL$ për të anashkaluar mbrojtjen kundër injektimit.
nëse dëshironi të filtroni në fusha shtesë përdorni sintaksë extra.fieldcode=... (ku kodi i fushës është kodi i extrafield)

Për të pasur listë në varësi të një liste atributesh plotësuese:
c_typent:libelle:id:options_parent_list_codenotranslate' class='>
|column_parent:filter

Për të pasur listën në varësi të një liste tjetër: 'notranslate'>
c_typent:libelle:id:parent_list_codeb0ae64758sacum33>b0ae64758sbacum33| -ExtrafieldParamHelpchkbxlst=Lista e vlerave vjen nga një tabelë
Sintaksa: table_name:label_field:id_field::filtersql
Shembull: cbelle_typident: ::filtersql

filtri mund të jetë një test i thjeshtë (p.sh. active=1) për të shfaqur vetëm vlerën aktive
Mund të përdorni gjithashtu $ID$ në filtër, ku është id-ja aktuale e objektit aktual
Për të bërë një SELECT në filtër përdorni $SEL$
nëse dëshiron të filtrosh në fusha shtesë, përdor sintaksën extra.fieldcode=... (ku kodi i fushës është kodi i extrafield)

Për të pasur listën në varësi të një liste tjetër atributesh plotësuese:
c_typent:libelle:id:options_parent_list_code|parent_column:filter b0342fccfdaspannotranslate'>b0342fccfdaspannotranslate'0342fccfdaspannotranslate'0 9bz0 Për të pasur listën në varësi të një liste tjetër:
c_typent:libelle:id:parent_list_code
|column_parent:filter +ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key +ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... +ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... +ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filtersql
Example: c_typent:libelle:id::filtersql

- id_field is necessarily a primary int key
- filtersql is a SQL condition. It can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter which is the current id of current object
To use a SELECT into the filter use the keyword $SEL$ to bypass anti-injection protection.
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter +ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filtersql
Example: c_typent:libelle:id::filtersql

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parametrat duhet të jenë ObjectName:Classpath
Sintaksa: ObjectName:Classpath ExtrafieldParamHelpSeparator=Mbajeni bosh për një ndarës të thjeshtë
Vendoseni këtë në 1 për një ndarës në kolaps (i hapur si parazgjedhje për sesionin e ri, më pas statusi mbahet për çdo sesion përdoruesi)
Cakto këtë në 2 për një ndarës në kolaps (i palosur si parazgjedhje për sesionin e ri, më pas statusi mbahet për çdo sesion përdoruesi) LibraryToBuildPDF=Biblioteka e përdorur për gjenerimin e PDF-ve @@ -473,7 +473,7 @@ LocalTaxDesc=Disa vende mund të aplikojnë dy ose tre taksa për çdo linjë fa SMS=SMS LinkToTestClickToDial=Fut një numër telefoni për të thirrur për të shfaqur një lidhje për të testuar url-në ClickToDial për përdoruesin %s RefreshPhoneLink=Rifresko lidhjen -LinkToTest=Lidhja e klikueshme e krijuar për përdoruesin %sb0a65d071f6fc9zli%s (click phone number to test) KeepEmptyToUseDefault=Mbajeni bosh për të përdorur vlerën e paracaktuar KeepThisEmptyInMostCases=Në shumicën e rasteve, ju mund ta mbani këtë fushë bosh. DefaultLink=Lidhja e parazgjedhur @@ -483,7 +483,7 @@ ExternalModule=Moduli i jashtëm InstalledInto=Instaluar në drejtorinë %s BarcodeInitForThirdparties=Fillimi masiv i barkodit për palët e treta BarcodeInitForProductsOrServices=Fillimi ose rivendosja e barkodit masiv për produktet ose shërbimet -CurrentlyNWithoutBarCode=Aktualisht, ju keni %s %s %s
record on %s %s without barcode defined. InitEmptyBarCode=Vlera fillestare për barkodet boshe %s EraseAllCurrentBarCode=Fshini të gjitha vlerat aktuale të barkodit ConfirmEraseAllCurrentBarCode=Jeni i sigurt që dëshironi të fshini të gjitha vlerat aktuale të barkodit? @@ -518,8 +518,8 @@ DependsOn=Ky modul ka nevojë për modulin(et) RequiredBy=Ky modul kërkohet nga moduli(et) TheKeyIsTheNameOfHtmlField=Ky është emri i fushës HTML. Kërkohen njohuri teknike për të lexuar përmbajtjen e faqes HTML për të marrë emrin kyç të një fushe. PageUrlForDefaultValues=Duhet të futni shtegun përkatës të URL-së së faqes. Nëse përfshini parametra në URL, do të jetë efektive nëse të gjithë parametrat në URL-në e shfletuar kanë vlerën e përcaktuar këtu. -PageUrlForDefaultValuesCreate=
Shembull:
Për formularin për të krijuar një palë të tretë të re, është b0e7843947c<0 /span>%s
.
Për URL të instaluar në module të jashtme drejtoria e personalizuar, mos përfshini "custom/", prandaj përdorni shteg si mymodule/mypage.php dhe jo të personalizuar /mymodule/mypage.php.
Nëse dëshironi vlerën e paracaktuar vetëm nëse url-ja ka ndonjë parametër, mund të përdorni %s -PageUrlForDefaultValuesList=
Shembull:
Për faqen që liston palët e treta, është b0e7843947c0 >%s.
Për URL-në e instaluar të moduleve të jashtme , mos përfshini "custom/" kështu që përdorni një shteg si mymodule/mypagelist.php dhe jo të personalizuar/mymodule /mypagelist.php.
Nëse dëshironi vlerën e paracaktuar vetëm nëse url-ja ka ndonjë parametër, mund të përdorni %s +PageUrlForDefaultValuesCreate=
Example:
For the form to create a new third party, it is %s.
For URL of external modules installed into custom directory, do not include the "custom/", so use path like mymodule/mypage.php and not custom/mymodule/mypage.php.
If you want default value only if url has some parameter, you can use %s +PageUrlForDefaultValuesList=
Example:
For the page that lists third parties, it is %s.
For URL of external modules installed into custom directory, do not include the "custom/" so use a path like mymodule/mypagelist.php and not custom/mymodule/mypagelist.php.
If you want default value only if url has some parameter, you can use %s AlsoDefaultValuesAreEffectiveForActionCreate=Vini re gjithashtu se mbishkrimi i vlerave të paracaktuara për krijimin e formularit funksionon vetëm për faqet që janë projektuar saktë (pra me parametrin veprim=krijoni ose paraqisni...) EnableDefaultValues=Aktivizo personalizimin e vlerave të paracaktuara EnableOverwriteTranslation=Lejo personalizimin e përkthimeve @@ -684,7 +684,7 @@ Module5000Desc=Ju lejon të menaxhoni kompani të shumta Module6000Name=Rrjedha e punës ndërmodule Module6000Desc=Menaxhimi i rrjedhës së punës midis moduleve të ndryshme (krijimi automatik i objektit dhe/ose ndryshimi automatik i statusit) Module10000Name=Faqet e internetit -Module10000Desc=CMS to create websites with a WYSIWYG editor. This is a webmaster or developer oriented Content Management System (it is better to know HTML and CSS language). Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the internet with your own domain name. +Module10000Desc=CMS për të krijuar faqe interneti me një redaktues WYSIWYG. Ky është një sistem i menaxhimit të përmbajtjes i orientuar nga webmaster ose zhvillues (është më mirë të dini gjuhën HTML dhe CSS). Thjesht konfiguroni serverin tuaj të internetit (Apache, Nginx, ...) për të treguar direktorinë e dedikuar Dolibarr për ta vendosur atë në internet në internet me emrin tuaj të domenit. Module20000Name=Menaxhimi i Kërkesave të Lënë Module20000Desc=Përcaktoni dhe gjurmoni kërkesat për pushim të punonjësve Module39000Name=Shumë produkte @@ -1154,7 +1154,7 @@ CalcLocaltax2=Blerjet CalcLocaltax2Desc=Raportet e taksave lokale janë totali i blerjeve të taksave lokale CalcLocaltax3=Shitjet CalcLocaltax3Desc=Raportet e taksave lokale janë totali i shitjeve të taksave lokale -NoLocalTaxXForThisCountry=Sipas konfigurimit të taksave (Shih %s - %s - b0ecb2ec87f49>fz)0 , vendi juaj nuk ka nevojë të përdorë këtë lloj takse +NoLocalTaxXForThisCountry=According to the setup of taxes (See %s - %s - %s), your country does not need to use such type of tax LabelUsedByDefault=Etiketa përdoret si parazgjedhje nëse nuk mund të gjendet përkthim për kodin LabelOnDocuments=Etiketa në dokumente LabelOrTranslationKey=Etiketa ose çelësi i përkthimit @@ -1197,6 +1197,7 @@ Skin=Tema e lëkurës DefaultSkin=Tema e parazgjedhur e lëkurës MaxSizeList=Gjatësia maksimale për listën DefaultMaxSizeList=Gjatësia maksimale e parazgjedhur për listat +DisplayGrandTotalInList=Shfaq totalin e përgjithshëm (për të gjitha faqet) në fundin e listave DefaultMaxSizeShortList=Gjatësia maksimale e parazgjedhur për listat e shkurtra (d.m.th. në kartën e klientit) MessageOfDay=Mesazhi i ditës MessageLogin=Mesazhi i faqes së hyrjes @@ -1249,7 +1250,7 @@ SetupDescription2=Dy seksionet e mëposhtme janë të detyrueshme (dy hyrjet e p SetupDescription3=%s -> %sc60804

Parametrat bazë të përdorur për të personalizuar sjelljen e paracaktuar të aplikacionit tuaj (p.sh. për veçoritë që lidhen me shtetin). SetupDescription4=
%s -> %sc60804

Ky softuer është një grup i shumë moduleve/aplikacioneve. Modulet që lidhen me nevojat tuaja duhet të aktivizohen dhe konfigurohen. Regjistrimet e menysë do të shfaqen me aktivizimin e këtyre moduleve. SetupDescription5=Regjistrimet e tjera të menusë Setup menaxhojnë parametrat opsionalë. -SetupDescriptionLink=
%s - %s +SetupDescriptionLink=%s - %s SetupDescription3b=Parametrat bazë të përdorur për të personalizuar sjelljen e paracaktuar të aplikacionit tuaj (p.sh. për veçoritë që lidhen me shtetin). SetupDescription4b=Ky softuer është një grup i shumë moduleve/aplikacioneve. Modulet që lidhen me nevojat tuaja duhet të aktivizohen. Regjistrimet e menysë do të shfaqen me aktivizimin e këtyre moduleve. AuditedSecurityEvents=Ngjarjet e sigurisë që auditohen @@ -1268,7 +1269,7 @@ BrowserOS=Shfletuesi OS ListOfSecurityEvents=Lista e ngjarjeve të sigurisë Dolibarr SecurityEventsPurged=Ngjarjet e sigurisë u spastruan TrackableSecurityEvents=Ngjarjet e sigurisë të gjurmueshme -LogEventDesc=Aktivizo regjistrimin për ngjarje specifike të sigurisë. Administratorët regjistrin nëpërmjet menysë %s - %s notranslate'>
. Kujdes, kjo veçori mund të gjenerojë një sasi të madhe të dhënash në bazën e të dhënave. +LogEventDesc=Enable logging for specific security events. Administrators the log via menu %s - %s. Warning, this feature can generate a large amount of data in the database. AreaForAdminOnly=Parametrat e konfigurimit mund të vendosen vetëm nga përdoruesit e administratorit. SystemInfoDesc=Informacioni i sistemit është informacion i ndryshëm teknik që merrni në modalitetin vetëm për lexim dhe i dukshëm vetëm për administratorët. SystemAreaForAdminOnly=Kjo zonë është e disponueshme vetëm për përdoruesit e administratorëve. Lejet e përdoruesve të Dolibarr nuk mund ta ndryshojnë këtë kufizim. @@ -1280,14 +1281,14 @@ DisplayDesc=Parametrat që ndikojnë në pamjen dhe paraqitjen e aplikacionit mu AvailableModules=Aplikacioni/modulet e disponueshme ToActivateModule=Për të aktivizuar modulet, shkoni te zona e konfigurimit (Home->Setup->Modules). SessionTimeOut=Kohëzgjatja e seancës -SessionExplanation=Ky numër garanton që sesioni nuk do të skadojë kurrë përpara kësaj vonese, nëse pastruesi i sesionit bëhet nga Pastruesi i brendshëm i sesioneve PHP (dhe asgjë tjetër). Pastruesi i brendshëm i sesioneve PHP nuk garanton që sesioni do të përfundojë pas kësaj vonese. Ai do të skadojë, pas kësaj vonese dhe kur të ekzekutohet pastruesja e sesioneve, kështu që çdo %s/%s, por vetëm gjatë aksesit të bërë nga sesionet e tjera (nëse vlera është 0, do të thotë se pastrimi i sesionit bëhet vetëm nga një proces i jashtëm) .
Shënim: në disa serverë me një mekanizëm të jashtëm pastrimi të sesioneve (cron nën debian, ubuntu ...), sesionet mund të shkatërrohen pas një periudhe të përcaktuar nga një konfigurim i jashtëm, pa marrë parasysh se cila është vlera e futur këtu. -SessionsPurgedByExternalSystem=Sesionet në këtë server duket se pastrohen nga një mekanizëm i jashtëm (cron nën debian, ubuntu ...), ndoshta çdo %s sekonda (= vlera e parametrit session.gc_maxlifetime8f391>b091 , kështu që ndryshimi i vlerës këtu nuk ka asnjë efekt. Duhet t'i kërkoni administratorit të serverit të ndryshojë vonesën e sesionit. +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every %s/%s access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).
Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is. +SessionsPurgedByExternalSystem=Sessions on this server seems to be cleaned by an external mechanism (cron under debian, ubuntu ...), probably every %s seconds (= value of parameter session.gc_maxlifetime), so changing the value here has no effect. You must ask the server administrator to change session delay. TriggersAvailable=Shkaktarët e disponueshëm -TriggersDesc=Aktivizuesit janë skedarë që do të modifikojnë sjelljen e rrjedhës së punës Dolibarr sapo të kopjohen në drejtorinë htdocs/core/triggers
. Ata realizojnë veprime të reja, të aktivizuara në ngjarjet e Dolibarr (krijimi i kompanisë së re, vlefshmëria e faturës, ...). +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory htdocs/core/triggers. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...). TriggerDisabledByName=Aktivizuesit në këtë skedar janë çaktivizuar nga prapashtesa -NORUN në emrin e tyre. -TriggerDisabledAsModuleDisabled=Aktivizuesit në këtë skedar janë çaktivizuar pasi moduli %sb09a4b739f17f8z është i çaktivizuar. +TriggerDisabledAsModuleDisabled=Triggers in this file are disabled as module %s is disabled. TriggerAlwaysActive=Aktivizuesit në këtë skedar janë gjithmonë aktivë, pavarësisht nga modulet e aktivizuara Dolibarr. -TriggerActiveAsModuleActive=Aktivizuesit në këtë skedar janë aktiv si modul %ss. +TriggerActiveAsModuleActive=Triggers in this file are active as module %s is enabled. GeneratedPasswordDesc=Zgjidhni metodën që do të përdoret për fjalëkalimet e krijuara automatikisht. DictionaryDesc=Fut të gjitha të dhënat e referencës. Ju mund të shtoni vlerat tuaja në parazgjedhje. ConstDesc=Kjo faqe ju lejon të modifikoni (të anashkaloni) parametrat që nuk janë të disponueshëm në faqet e tjera. Këto janë kryesisht parametra të rezervuar vetëm për zhvilluesit/zgjidhja e avancuar e problemeve. @@ -1306,8 +1307,8 @@ NoEventOrNoAuditSetup=Asnjë ngjarje sigurie nuk është regjistruar. Kjo ësht NoEventFoundWithCriteria=Asnjë ngjarje sigurie nuk është gjetur për këtë kriter kërkimi. SeeLocalSendMailSetup=Shikoni konfigurimin tuaj lokal të postës elektronike BackupDesc=Një kopje rezervë i plotë e një instalimi Dolibarr kërkon dy hapa. -BackupDesc2=Rezervoni përmbajtjen e drejtorisë "documents" (%sb09a4b739f17f) që përmban të gjithë skedarët e ngarkuar dhe të krijuar. Kjo do të përfshijë gjithashtu të gjithë skedarët e grumbullimit të krijuar në Hapin 1. Ky operacion mund të zgjasë disa minuta. -BackupDesc3=Rezervoni strukturën dhe përmbajtjen e bazës së të dhënave tuaja (%sb09a4b739f17f8z) në%s) containing all uploaded and generated files. This will also include all the dump files generated in Step 1. This operation may last several minutes. +BackupDesc3=Backup the structure and contents of your database (%s) into a dump file. For this, you can use the following assistant. BackupDescX=Drejtoria e arkivuar duhet të ruhet në një vend të sigurt. BackupDescY=Skedari i krijuar i deponimit duhet të ruhet në një vend të sigurt. BackupPHPWarning=Rezervimi nuk mund të garantohet me këtë metodë. E mëparshme e rekomanduar. @@ -1371,7 +1372,7 @@ SendmailOptionMayHurtBuggedMTA=Funksioni për të dërguar email duke përdorur TranslationSetup=Vendosja e përkthimit TranslationKeySearch=Kërkoni një çelës ose varg përkthimi TranslationOverwriteKey=Mbishkruani një varg përkthimi -TranslationDesc=Si të vendosni gjuhën e ekranit:
* Parazgjedhja/sistem mbarë: menyja Home -> Konfigurimi -> Ekrani
* Për përdorues: Klikoni në emrin e përdoruesit në krye të ekranit dhe modifikoni b0e7843947cKonfigurimi i ekranit të përdoruesit skeda në kartën e përdoruesit. +TranslationDesc=How to set the display language:
* Default/Systemwide: menu Home -> Setup -> Display
* Per user: Click on the username at the top of the screen and modify the User Display Setup tab on the user card. TranslationOverwriteDesc=Ju gjithashtu mund të anashkaloni vargjet që plotësojnë tabelën e mëposhtme. Zgjidhni gjuhën tuaj nga "%s", futni vargun e çelësit të përkthimit në "%s" dhe përkthimin tuaj të ri në "%s" TranslationOverwriteDesc2=Mund të përdorni skedën tjetër për t'ju ndihmuar të dini se cilin çelës përkthimi të përdorni TranslationString=Varg përkthimi @@ -1379,9 +1380,9 @@ CurrentTranslationString=Vargu aktual i përkthimit WarningAtLeastKeyOrTranslationRequired=Kërkohet një kriter kërkimi të paktën për çelësin ose vargun e përkthimit NewTranslationStringToShow=Varg i ri përkthimi për t'u shfaqur OriginalValueWas=Përkthimi origjinal është mbishkruar. Vlera origjinale ishte:

%s -TransKeyWithoutOriginalValue=Detyruat një përkthim të ri për çelësin e përkthimit '%sb0a65d071f6fc9>'s që nuk ekziston në asnjë skedar gjuhësor +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '%s' that does not exist in any language files TitleNumberOfActivatedModules=Modulet e aktivizuara -TotalNumberOfActivatedModules=Modulet e aktivizuara: %s >%s +TotalNumberOfActivatedModules=Activated modules: %s / %s YouMustEnableOneModule=Duhet të aktivizoni të paktën 1 modul YouMustEnableTranslationOverwriteBefore=Së pari duhet të aktivizoni mbishkrimin e përkthimit që të lejohet të zëvendësojë një përkthim ClassNotFoundIntoPathWarning=Klasa %s nuk u gjet në shtegun PHP @@ -1397,7 +1398,7 @@ SearchOptim=Optimizimi i kërkimit YouHaveXObjectUseComboOptim=Ju keni %s %s në bazën e të dhënave. Mund të shkoni në konfigurimin e modulit për të mundësuar ngarkimin e listës së kombinuar në ngjarjen e shtypur. YouHaveXObjectUseSearchOptim=Ju keni %s %s në bazën e të dhënave. Mund të shtoni konstanten %s në 1 në Home-Setup-Other. YouHaveXObjectUseSearchOptimDesc=Kjo kufizon kërkimin në fillim të vargjeve, gjë që bën të mundur që baza e të dhënave të përdorë indekse dhe ju duhet të merrni një përgjigje të menjëhershme. -YouHaveXObjectAndSearchOptimOn=Ju keni %s %s në bazën e të dhënave dhe konstante %s është caktuar në span class='notranslate'>%s në Home-Setup-Other. +YouHaveXObjectAndSearchOptimOn=You have %s %s in the database and constant %s is set to %s in Home-Setup-Other. BrowserIsOK=Po përdorni shfletuesin e internetit %s. Ky shfletues është në rregull për sigurinë dhe performancën. BrowserIsKO=Po përdorni shfletuesin e internetit %s. Ky shfletues njihet si një zgjedhje e keqe për sigurinë, performancën dhe besueshmërinë. Ne rekomandojmë përdorimin e Firefox, Chrome, Opera ose Safari. PHPModuleLoaded=Komponenti PHP %s është ngarkuar @@ -1424,8 +1425,8 @@ DisableForgetPasswordLinkOnLogonPage=Mos e shfaq lidhjen "Fjalëkalimi i harruar UsersSetup=Konfigurimi i modulit të përdoruesve UserMailRequired=Kërkohet email për të krijuar një përdorues të ri UserHideInactive=Fshih përdoruesit joaktivë nga të gjitha listat e kombinuara të përdoruesve (Nuk rekomandohet: kjo mund të thotë që nuk do të mund të filtrosh ose të kërkosh përdorues të vjetër në disa faqe) -UserHideExternal=Hide external users (not linked to a third party) from all combo lists of users (Not recommended: this may means you won't be able to filter or search on external users on some pages) -UserHideNonEmployee=Hide non employee users from all combo lists of users (Not recommended: this may means you won't be able to filter or search on non employee users on some pages) +UserHideExternal=Fshih përdoruesit e jashtëm (jo të lidhur me një palë të tretë) nga të gjitha listat e kombinuara të përdoruesve (Nuk rekomandohet: kjo mund të thotë që nuk do të mund të filtrosh ose të kërkosh te përdoruesit e jashtëm në disa faqe) +UserHideNonEmployee=Fshih përdoruesit jo punonjës nga të gjitha listat e kombinuara të përdoruesve (Nuk rekomandohet: kjo mund të thotë që nuk do të mund të filtrosh ose të kërkosh te përdoruesit jo punonjës në disa faqe) UsersDocModules=Modelet e dokumenteve për dokumentet e krijuara nga të dhënat e përdoruesit GroupsDocModules=Modelet e dokumenteve për dokumentet e krijuara nga një rekord grupi ##### HRM setup ##### @@ -1663,7 +1664,7 @@ LDAPDescUsers=Kjo faqe ju lejon të përcaktoni emrin e atributeve LDAP në pem LDAPDescGroups=Kjo faqe ju lejon të përcaktoni emrin e atributeve LDAP në pemën LDAP për çdo të dhënë të gjetur në grupet Dolibarr. LDAPDescMembers=Kjo faqe ju lejon të përcaktoni emrin e atributeve LDAP në pemën LDAP për çdo të dhënë të gjetur në modulin e anëtarëve Dolibarr. LDAPDescMembersTypes=Kjo faqe ju lejon të përcaktoni emrin e atributeve LDAP në pemën LDAP për çdo të dhënë të gjetur në llojet e anëtarëve Dolibarr. -LDAPDescValues=Vlerat e shembujve janë të dizajnuara për OpenLDAP me skemat e ngarkuara në vijim: b650 core.schema, cosine.schema, inetorgperson.schema
). Nëse përdorni ato vlera dhe OpenLDAP, modifikoni skedarin tuaj të konfigurimit LDAP slapd.conf që të ketë të gjitha skemat e ngarkuara. +LDAPDescValues=Example values are designed for OpenLDAP with following loaded schemas: core.schema, cosine.schema, inetorgperson.schema). If you use thoose values and OpenLDAP, modify your LDAP config file slapd.conf to have all thoose schemas loaded. ForANonAnonymousAccess=Për një akses të vërtetuar (për shembull për një akses shkrimi) PerfDolibarr=Raporti i konfigurimit/optimizimit të performancës YouMayFindPerfAdviceHere=Kjo faqe ofron disa kontrolle ose këshilla në lidhje me performancën. @@ -1815,7 +1816,7 @@ DetailTarget=Synimi për lidhjet (_blank krye hap një dritare të re) DetailLevel=Niveli (-1: menyja e sipërme, 0: menyja me kokë, >0 menyja dhe nënmenyja) ModifMenu=Ndryshimi i menysë DeleteMenu=Fshi hyrjen e menysë -ConfirmDeleteMenu=Jeni të sigurt që dëshironi të fshini hyrjen e menysë %s%s
? FailedToInitializeMenu=Inicializimi i menysë dështoi ##### Tax ##### TaxSetup=Krijimi i modulit të taksave, taksave sociale ose fiskale dhe dividentëve @@ -1860,7 +1861,7 @@ PastDelayVCalExport=Mos e eksportoni ngjarje më të vjetër se SecurityKey = Çelësi i sigurisë ##### ClickToDial ##### ClickToDialSetup=Kliko Për të thirrur konfigurimin e modulit -ClickToDialUrlDesc=URL thirret kur kryhet një klikim në foton e telefonit. Në URL, mund të përdorni etiketat
__PHONETO__b09a4b78z0f1 zëvendësohet me numrin e telefonit të personit që do të telefonojë
__PHONEFROM__b09f17f789 that do të zëvendësohet me numrin e telefonit të personit që telefonon (i juaji)
__LOGIN__ që do të zëvendësohet me login clicktodial (të përcaktuar në kartën e përdoruesit)
__PASS__%s -OptionXIsCorrectlyEnabledInModuleY=Opsioni "%s" është aktivizuar në module 'notranslate'>
%s +OptionXShouldBeEnabledInModuleY=Option "%s" should be enabled into module %s +OptionXIsCorrectlyEnabledInModuleY=Option "%s" is enabled into module %s AllowOnLineSign=Lejo nënshkrimin On Line AtBottomOfPage=Në fund të faqes FailedAuth=vërtetimet e dështuara @@ -2428,8 +2429,17 @@ ParametersForTestEnvironment=Parametrat për mjedisin e testimit TryToKeepOnly=Mundohuni të mbani vetëm %s RecommendedForProduction=Rekomandohet për prodhim RecommendedForDebug=Rekomandohet për korrigjimin e gabimeve -UrlPublicInterfaceLabelAdmin=Alternative URL for public interface -UrlPublicInterfaceHelpAdmin=It is possible to define an alias to the web server and thus make available the public interface with another URL (the virtual host server must act as a proxy on the standard URL) -ExportUseForce=Use the parameter -f -ExportUseForceHelp=Force to continue the export even when an error is found (Backup may not be reliable) -CustomPrompt=Custom prompts +UrlPublicInterfaceLabelAdmin=URL alternative për ndërfaqen publike +UrlPublicInterfaceHelpAdmin=Është e mundur të përcaktohet një pseudonim për serverin e uebit dhe kështu të vihet në dispozicion ndërfaqja publike me një URL tjetër (serveri virtual i hostit duhet të veprojë si një përfaqësues në URL-në standarde) +ExportUseForce=Përdorni parametrin -f +ExportUseForceHelp=Detyroni të vazhdoni eksportin edhe kur zbulohet një gabim (Rezervimi mund të mos jetë i besueshëm) +CustomPrompt=Kërkesat e personalizuara +AiDescription=Karakteristikat e AI (Inteligjencës Artificiale). +AiDescriptionLong=Ofron veçori të AI (Inteligjencës Artificiale) në pjesë të ndryshme të aplikacionit. Nevojë për API të jashtme të AI. +AI_KEY_API_CHATGPT= Çelësi për api ChatGPT IA +AiSetup=Konfigurimi i modulit AI +AiCustomPrompt=Kërkesa doganore e AI +AI_CONFIGURATIONS_PROMPT=Prompt i personalizuar +ImageGeneration=Gjenerimi i imazhit +AIPromptForFeatures=Kërkesat me porosi të AI për veçori +EnterAnIP=Futni një adresë IP diff --git a/htdocs/langs/sq_AL/agenda.lang b/htdocs/langs/sq_AL/agenda.lang index c51f0d39e95..a17c4e16f30 100644 --- a/htdocs/langs/sq_AL/agenda.lang +++ b/htdocs/langs/sq_AL/agenda.lang @@ -137,7 +137,7 @@ DateActionEnd=Data e përfundimit AgendaUrlOptions1=Ju gjithashtu mund të shtoni parametrat e mëposhtëm për të filtruar daljen: AgendaUrlOptions3=logina=%s për të kufizuar një veprim të përdoruesit %s. AgendaUrlOptionsNotAdmin=logina=!%s për të kufizuar veprimet përdoruesi %s. -AgendaUrlOptions4=logint=%s për t'u caktuar veprimeve të kufizuara të përdoruesit span class='notranslate'>
%s (pronari dhe të tjerët). +AgendaUrlOptions4=logint=%s to restrict output to actions assigned to user %s (owner and others). AgendaUrlOptionsProject=project=__PROJECT_ID__ për të kufizuar daljen në veprimet e lidhura me projektin b. __PROJECT_ID__. AgendaUrlOptionsNotAutoEvent=notactiontype=systemauto për të përjashtuar ngjarjet automatike. AgendaUrlOptionsIncludeHolidays=includeholidays=1 për të përfshirë ngjarjet e festave. @@ -161,7 +161,7 @@ AddEvent=Krijo ngjarje MyAvailability=Disponueshmëria ime ActionType=Lloji i ngjarjes DateActionBegin=Data e fillimit të ngjarjes -ConfirmCloneEvent=Jeni i sigurt që dëshironi të klononi ngjarjen %sb09a4b739f17f8z>%s? RepeatEvent=Përsëriteni ngjarjen OnceOnly=Vetëm njëherë EveryDay=Çdo ditë @@ -201,4 +201,4 @@ AppointmentDuration = Kohëzgjatja e takimit: %s BookingSuccessfullyBooked=Rezervimi juaj është ruajtur BookingReservationHourAfter=Ne konfirmojmë rezervimin e takimit tonë në datën %s BookcalBookingTitle=Takimi online -Transparency = Transparency +Transparency = Transparenca diff --git a/htdocs/langs/sq_AL/assets.lang b/htdocs/langs/sq_AL/assets.lang index cdd230db3a5..34d85c3e9c9 100644 --- a/htdocs/langs/sq_AL/assets.lang +++ b/htdocs/langs/sq_AL/assets.lang @@ -87,8 +87,8 @@ AssetTypeInProgress=Në vazhdim AssetTypeFinancial=Financiare AssetNotDepreciated=I pa amortizuar AssetDisposal=Asgjesimi -AssetConfirmDisposalAsk=Jeni i sigurt që dëshironi të asgjësoni aktivin %sb09a4b739f17f>z? -AssetConfirmReOpenAsk=Jeni i sigurt që dëshironi të rihapni aktivin %sb09a4b739f17f>z? +AssetConfirmDisposalAsk=Are you sure you want to dispose of the asset %s? +AssetConfirmReOpenAsk=Are you sure you want to reopen the asset %s? # # Asset status @@ -122,7 +122,6 @@ AssetDepreciationOptionDepreciationTypeLinear=Linear AssetDepreciationOptionDepreciationTypeDegressive=Degresive AssetDepreciationOptionDepreciationTypeExceptional=Të jashtëzakonshme AssetDepreciationOptionDegressiveRate=Shkalla degresive -AssetDepreciationOptionAcceleratedDepreciation=Amortizimi i përshpejtuar (taksa) AssetDepreciationOptionDuration=Kohëzgjatja AssetDepreciationOptionDurationType=Kohëzgjatja e llojit AssetDepreciationOptionDurationTypeAnnual=Vjetore diff --git a/htdocs/langs/sq_AL/banks.lang b/htdocs/langs/sq_AL/banks.lang index c6ce54a904c..e6d2a79f3d6 100644 --- a/htdocs/langs/sq_AL/banks.lang +++ b/htdocs/langs/sq_AL/banks.lang @@ -115,7 +115,7 @@ MenuBankInternalTransfer=Transferimi i brendshëm TransferDesc=Përdorni transferimin e brendshëm për të transferuar nga një llogari në tjetrën, aplikacioni do të shkruajë dy regjistrime: një debi në llogarinë burimore dhe një kredi në llogarinë e synuar. E njëjta shumë, etiketë dhe datë do të përdoren për këtë transaksion. TransferFrom=Nga TransferTo=te -TransferFromToDone=Një transferim nga %s'no në %s nga %s nga b30span838 'notranslate'>%s %s është regjistruar. +TransferFromToDone=A transfer from %s to %s of %s %s has been recorded. CheckTransmitter=Dërguesi ValidateCheckReceipt=Të vërtetohet kjo faturë çeku? ConfirmValidateCheckReceipt=Jeni i sigurt që dëshironi ta dorëzoni këtë faturë çeku për vërtetim? Asnjë ndryshim nuk do të jetë i mundur pasi të vërtetohet. diff --git a/htdocs/langs/sq_AL/bills.lang b/htdocs/langs/sq_AL/bills.lang index 6d2b95602c0..bc2a1723665 100644 --- a/htdocs/langs/sq_AL/bills.lang +++ b/htdocs/langs/sq_AL/bills.lang @@ -93,6 +93,9 @@ CodePaymentMode=Mënyra e pagesës (kodi) LabelPaymentMode=Mënyra e pagesës (etiketa) PaymentModeShort=Metoda e pagesës PaymentTerm=Kushtet e pagesës +IdPaymentTerm=Afati i pagesës (id) +CodePaymentTerm=Afati i pagesës (kodi) +LabelPaymentTerm=Afati i pagesës (etiketa) PaymentConditions=Kushtet e pagesës PaymentConditionsShort=Kushtet e pagesës PaymentAmount=Shuma e pagesës @@ -185,12 +188,12 @@ SuppliersDraftInvoices=Draft faturat e shitësit Unpaid=E papaguar ErrorNoPaymentDefined=Gabim Nuk është përcaktuar pagesa ConfirmDeleteBill=Je i sigurt që dëshiron ta fshish këtë faturë? -ConfirmValidateBill=Jeni i sigurt që dëshironi ta vërtetoni këtë faturë me referencën %sb09a4b739f17 >? -ConfirmUnvalidateBill=Jeni i sigurt që dëshironi të ndryshoni faturën %s në statusin e drafteve ? -ConfirmClassifyPaidBill=Jeni të sigurt që dëshironi të ndryshoni faturën %s statusin e paguar%sb09a4b739f17f8z>%s? +ConfirmUnvalidateBill=Are you sure you want to change invoice %s to draft status? +ConfirmClassifyPaidBill=Are you sure you want to change invoice %s to status paid? +ConfirmCancelBill=Are you sure you want to cancel invoice %s? ConfirmCancelBillQuestion=Pse dëshironi ta klasifikoni këtë faturë "të braktisur"? -ConfirmClassifyPaidPartially=Jeni të sigurt që dëshironi të ndryshoni faturën %s statusin e paguar%s to status paid? ConfirmClassifyPaidPartiallyQuestion=Kjo faturë nuk është paguar plotësisht. Cila është arsyeja e mbylljes së kësaj faturë? ConfirmClassifyPaidPartiallyReasonAvoir=E mbetur pa pagesë (%s %s) > është një zbritje e dhënë sepse pagesa është bërë përpara afatit. E rregulloj TVSH-në me kredit. ConfirmClassifyPaidPartiallyReasonDiscount=E mbetur pa pagesë (%s %s) > është një zbritje e dhënë sepse pagesa është bërë përpara afatit. @@ -207,14 +210,14 @@ ConfirmClassifyPaidPartiallyReasonDiscountVatDesc=Në disa vende, kjo zgjedhje m ConfirmClassifyPaidPartiallyReasonAvoirDesc=Përdoreni këtë zgjedhje nëse të gjitha të tjerat nuk ju përshtaten ConfirmClassifyPaidPartiallyReasonBadCustomerDesc=Një klient i keq është një klient që refuzon të paguajë borxhin e tij. ConfirmClassifyPaidPartiallyReasonProductReturnedDesc=Kjo zgjedhje përdoret kur pagesa nuk është e plotë sepse disa produkte janë kthyer -ConfirmClassifyPaidPartiallyReasonBankChargeDesc=Shuma e papaguar është tarifat bankare ndërmjetëse, e zbritur direkt nga shuma e saktë e paguar nga Klienti. +ConfirmClassifyPaidPartiallyReasonBankChargeDesc=The unpaid amount is intermediary bank fees, deducted directly from the correct amount paid by the Customer. ConfirmClassifyPaidPartiallyReasonWithholdingTaxDesc=Shuma e papaguar nuk do të paguhet kurrë pasi është një taksë e mbajtur në burim ConfirmClassifyPaidPartiallyReasonOtherDesc=Përdoreni këtë zgjedhje nëse të gjitha të tjerat nuk janë të përshtatshme, për shembull në situatën e mëposhtme:
- pagesa nuk është e përfunduar sepse disa produkte janë dërguar prapa
- shuma e pretenduar shumë e rëndësishme sepse u harrua një zbritje
Në të gjitha rastet, shuma e mbideklaruar duhet të korrigjohet në sistemin e kontabilitetit duke krijuar një shënim krediti. ConfirmClassifyPaidPartiallyReasonBadSupplierDesc=Një furnizues i keq është një furnizues që ne refuzojmë ta paguajmë. ConfirmClassifyAbandonReasonOther=Të tjera ConfirmClassifyAbandonReasonOtherDesc=Kjo zgjedhje do të përdoret në të gjitha rastet e tjera. Për shembull sepse planifikoni të krijoni një faturë zëvendësuese. -ConfirmCustomerPayment=A e konfirmoni këtë hyrje pagese për %s 'notranslate'>%s? -ConfirmSupplierPayment=A e konfirmoni këtë hyrje pagese për %s 'notranslate'>%s? +ConfirmCustomerPayment=Do you confirm this payment input for %s %s? +ConfirmSupplierPayment=Do you confirm this payment input for %s %s? ConfirmValidatePayment=Je i sigurt që dëshiron ta vërtetosh këtë pagesë? Asnjë ndryshim nuk mund të bëhet pasi pagesa të vërtetohet. ValidateBill=Vërtetoni faturën UnvalidateBill=Të pavlefshme faturë @@ -268,6 +271,8 @@ NoDraftBills=Nuk ka draft fatura NoOtherDraftBills=Nuk ka draft fatura të tjera NoDraftInvoices=Nuk ka draft fatura RefBill=Faturë ref +RefSupplierBill=Fatura e furnizuesit ref +SupplierOrderCreateBill=Krijo faturë ToBill=Për të faturuar RemainderToBill=Pjesa e mbetur për faturim SendBillByMail=Dërgo faturë me email @@ -352,6 +357,7 @@ HelpAbandonOther=Kjo shumë është braktisur pasi ishte një gabim (klient i ga IdSocialContribution=ID e pagesës së tatimit social/fiskal PaymentId=ID-ja e pagesës PaymentRef=Pagesa ref. +SourceInvoiceId=ID-ja e faturës burimore InvoiceId=ID-ja e faturës InvoiceRef=Faturë ref. InvoiceDateCreation=Data e krijimit të faturës @@ -366,12 +372,12 @@ PaymentNumber=Numri i pagesës RemoveDiscount=Hiq zbritjen WatermarkOnDraftBill=Filigram në draft faturat (asgjë nëse është bosh) InvoiceNotChecked=Nuk u zgjodh asnjë faturë -ConfirmCloneInvoice=Jeni i sigurt që dëshironi ta klononi këtë faturë %sb09a4b739f17f>z? +ConfirmCloneInvoice=Are you sure you want to clone this invoice %s? DisabledBecauseReplacedInvoice=Veprimi u çaktivizua sepse fatura është zëvendësuar DescTaxAndDividendsArea=Kjo zonë paraqet një përmbledhje të të gjitha pagesave të bëra për shpenzime të veçanta. Këtu përfshihen vetëm të dhënat me pagesa gjatë vitit fiks. NbOfPayments=Numri i pagesave SplitDiscount=Ndani zbritjen në dysh -ConfirmSplitDiscount=Jeni i sigurt që dëshironi ta ndani këtë zbritje të %sb09a4b739f17f8z <0 span class='notranslate'>%s në dy zbritje më të vogla? +ConfirmSplitDiscount=Are you sure you want to split this discount of %s %s into two smaller discounts? TypeAmountOfEachNewDiscount=Shuma e hyrjes për secilën nga dy pjesët: TotalOfTwoDiscountMustEqualsOriginal=Totali i dy zbritjeve të reja duhet të jetë i barabartë me shumën fillestare të zbritjes. ConfirmRemoveDiscount=Je i sigurt që dëshiron ta heqësh këtë zbritje? @@ -397,7 +403,7 @@ FrequencyPer_d=Çdo %s ditë FrequencyPer_m=Çdo %s muaj FrequencyPer_y=Çdo %s vjet FrequencyUnit=Njësia e frekuencës -toolTipFrequency=Shembuj:
Seti 7, Ditab09a4b739f17panvoice: jepi një
s çdo 7 ditë
Set 3, muajb09a4b739f17f8z: jepni një faturë çdo 3 muaj +toolTipFrequency=Examples:
Set 7, Day: give a new invoice every 7 days
Set 3, Month: give a new invoice every 3 month NextDateToExecution=Data për gjenerimin e faturës së ardhshme NextDateToExecutionShort=Data e gjeneratës së ardhshme. DateLastGeneration=Data e gjeneratës së fundit @@ -563,7 +569,7 @@ PDFCrabeDescription=Shablloni i faturës PDF Crabe. Një shabllon i plotë fatur PDFSpongeDescription=Shablloni i faturës PDF Sfungjeri. Një model i plotë faturë PDFCrevetteDescription=Shablloni PDF i faturës Crevette. Një model i plotë faturë për faturat e situatës TerreNumRefModelDesc1=Numri i kthimit në formatin %syymm-nnnn për faturat standarde dhe %syymm-nnnn për shënimet e kreditit ku yy është viti mm, është muaj dhe nnnn është një numër auto-rritës sekuencial pa ndërprerje dhe pa kthim në 0 -MarsNumRefModelDesc1=Numri i kthimit në formatin %syymm-nnnn për faturat standarde, %syymm-nnnn për faturat zëvendësuese class=', %syymm-nnnn për faturat e parapagimit dhe %syymm-nnnn për shënimet e kreditit ku yy është vit, mm është muaj dhe nnnn është një sekuencë numri në rritje pa pushim dhe pa kthim në 0 +MarsNumRefModelDesc1=Return number in the format %syymm-nnnn for standard invoices, %syymm-nnnn for replacement invoices, %syymm-nnnn for down payment invoices and %syymm-nnnn for credit notes where yy is year, mm is month and nnnn is a sequential auto-incrementing number with no break and no return to 0 TerreNumRefModelError=Një faturë që fillon me $syymm ekziston tashmë dhe nuk është në përputhje me këtë model sekuence. Hiqeni ose riemërtoni për të aktivizuar këtë modul. CactusNumRefModelDesc1=Numri i kthimit në formatin %syymm-nnnn për faturat standarde, %syymm-nnnn për shënimet e kreditit dhe %syymm-nnnn për faturat e parapagimit ku yy është viti, mm është muaji dhe nnnn është një numër i njëpasnjëshëm në rritje automatike pa ndërprerje dhe pa kthim në 0 EarlyClosingReason=Arsyeja e mbylljes së hershme @@ -607,7 +613,7 @@ TotalSituationInvoice=Situata totale invoiceLineProgressError=Përparimi i linjës së faturës nuk mund të jetë më i madh ose i barabartë me rreshtin tjetër të faturës updatePriceNextInvoiceErrorUpdateline=Gabim: përditëso çmimin në linjën e faturës: %s ToCreateARecurringInvoice=Për të krijuar një faturë të përsëritur për këtë kontratë, fillimisht krijoni këtë draft faturë, më pas shndërrojeni atë në një model faturë dhe përcaktoni frekuencën për gjenerimin e faturave të ardhshme. -ToCreateARecurringInvoiceGene=Për të gjeneruar fatura të ardhshme rregullisht dhe manualisht, thjesht shkoni te menyja %s - b0ecb9fz87f span> - %s. +ToCreateARecurringInvoiceGene=To generate future invoices regularly and manually, just go on menu %s - %s - %s. ToCreateARecurringInvoiceGeneAuto=Nëse keni nevojë që fatura të tilla të gjenerohen automatikisht, kërkoni nga administratori juaj të aktivizojë dhe konfigurojë modulin %s. Vini re se të dyja metodat (manuale dhe automatike) mund të përdoren së bashku pa rrezik dyfishimi. DeleteRepeatableInvoice=Fshi faturën e shabllonit ConfirmDeleteRepeatableInvoice=Jeni i sigurt që dëshironi të fshini faturën e shabllonit? diff --git a/htdocs/langs/sq_AL/cashdesk.lang b/htdocs/langs/sq_AL/cashdesk.lang index df4910cc1b4..95e476ec8f7 100644 --- a/htdocs/langs/sq_AL/cashdesk.lang +++ b/htdocs/langs/sq_AL/cashdesk.lang @@ -58,7 +58,7 @@ Numberspad=Tabela e numrave BillsCoinsPad=Mbushje e monedhave dhe kartëmonedhave DolistorePosCategory=Modulet TakePOS dhe zgjidhje të tjera POS për Dolibarr TakeposNeedsCategories=TakePOS ka nevojë për të paktën një kategori produkti për të punuar -TakeposNeedsAtLeastOnSubCategoryIntoParentCategory=TakePOS ka nevojë për të paktën 1 kategori produkti nën kategorinë %sb09a4b739f17f>z puna +TakeposNeedsAtLeastOnSubCategoryIntoParentCategory=TakePOS needs at least 1 product category under the category %s to work OrderNotes=Mund të shtojë disa shënime për secilin artikull të porositur CashDeskBankAccountFor=Llogaria e parazgjedhur për t'u përdorur për pagesat në NoPaimementModesDefined=Asnjë modalitet pagese nuk është përcaktuar në konfigurimin e TakePOS @@ -97,7 +97,7 @@ ReceiptPrinterMethodDescription=Metoda e fuqishme me shumë parametra. Plot i pe ByTerminal=Me terminal TakeposNumpadUsePaymentIcon=Përdorni ikonën në vend të tekstit në butonat e pagesës të numpad CashDeskRefNumberingModules=Moduli i numërimit për shitjet me POS -CashDeskGenericMaskCodes6 =
{TN} përdoret për të shtuar numrin e terminalit +CashDeskGenericMaskCodes6 =
{TN} tag is used to add the terminal number TakeposGroupSameProduct=Bashkoni linjat e të njëjtave produkte StartAParallelSale=Filloni një shitje të re paralele SaleStartedAt=Shitja filloi në %s @@ -105,10 +105,10 @@ ControlCashOpening=Hapni dritaren "Control cash box" kur hapni POS-in CloseCashFence=Mbyll kontrollin e arkës CashReport=Raporti i parave të gatshme MainPrinterToUse=Printeri kryesor për t'u përdorur -MainPrinterToUseMore=empty means the browser printer system +MainPrinterToUseMore=bosh nënkupton sistemin e printerit të shfletuesit OrderPrinterToUse=Porosit printerin për përdorim MainTemplateToUse=Modeli kryesor për t'u përdorur -MainTemplateToUseMore=when not using browser printing system +MainTemplateToUseMore=kur nuk përdorni sistemin e printimit të shfletuesit OrderTemplateToUse=Porosit shabllonin për t'u përdorur BarRestaurant=Bar Restorant AutoOrder=Porosit nga vetë klienti @@ -136,7 +136,7 @@ PrintWithoutDetailsLabelDefault=Etiketa e linjës si parazgjedhje në printim pa PrintWithoutDetails=Printoni pa detaje YearNotDefined=Viti nuk është i përcaktuar TakeposBarcodeRuleToInsertProduct=Rregulli i barkodit për të futur produktin -TakeposBarcodeRuleToInsertProductDesc=Rregulli për nxjerrjen e referencës së produktit + një sasi nga një barkod i skanuar.
Nëse është bosh (vlera e parazgjedhur), aplikacioni do të përdorë barkodin e plotë të skanuar për të gjetur produktin.

Nëse përcaktohet, sintaksa duhet të jetë:

refb09f014b : referenca e produktit
qub09a4b739f17pan to quantity:
qdb09a4b739f17f to caktohet kur futet artikulli (dhjetra)
tjetërb09a4b78z0f1s të tjerë +TakeposBarcodeRuleToInsertProductDesc=Rule to extract the product reference + a quantity from a scanned barcode.
If empty (default value), application will use the full barcode scanned to find the product.

If defined, syntax must be:
ref:NB+qu:NB+qd:NB+other:NB
where NB is the number of characters to use to extract data from the scanned barcode with:
ref : product reference
qu : quantity to set when inserting item (units)
qd : quantity to set when inserting item (decimals)
other : others characters AlreadyPrinted=Tashmë e shtypur HideCategories=Fshih të gjithë seksionin e përzgjedhjes së kategorive HideStockOnLine=Fshih aksionet në linjë @@ -154,5 +154,5 @@ LineDiscount=Zbritje në linjë LineDiscountShort=Disku i linjës. InvoiceDiscount=Zbritje në faturë InvoiceDiscountShort=Disku i faturës. -TestPrinterDesc=The server will send a simple test page to a ESC/POS printer -TestPrinterDesc2=The server will send an enhanced test page with image and barcode to a ESC/POS printer +TestPrinterDesc=Serveri do të dërgojë një faqe të thjeshtë testimi në një printer ESC/POS +TestPrinterDesc2=Serveri do të dërgojë një faqe testimi të përmirësuar me imazh dhe barkod në një printer ESC/POS diff --git a/htdocs/langs/sq_AL/companies.lang b/htdocs/langs/sq_AL/companies.lang index b98349e0d84..19c6e163866 100644 --- a/htdocs/langs/sq_AL/companies.lang +++ b/htdocs/langs/sq_AL/companies.lang @@ -331,17 +331,17 @@ CustomerRelativeDiscount=Zbritje relative e klientit SupplierRelativeDiscount=Zbritje relative nga shitësi CustomerRelativeDiscountShort=Zbritje relative CustomerAbsoluteDiscountShort=Zbritje absolute -CompanyHasRelativeDiscount=Ky klient ka një zbritje të paracaktuar prej %s%%
'notranslate'> +CompanyHasRelativeDiscount=This customer has a default discount of %s%% CompanyHasNoRelativeDiscount=Ky klient nuk ka zbritje relative si parazgjedhje -HasRelativeDiscountFromSupplier=Ju keni një zbritje të paracaktuar prej %s%%
me këtë shitës +HasRelativeDiscountFromSupplier=You have a default discount of %s%% with this vendor HasNoRelativeDiscountFromSupplier=Nuk ka zbritje relative të paracaktuar me këtë shitës -CompanyHasAbsoluteDiscount=Ky klient ka zbritje të disponueshme (shënime krediti ose pagesa paraprake) për %sb09a17f739f span> %s -CompanyHasDownPaymentOrCommercialDiscount=Ky klient ka zbritje të disponueshme (komerciale, pagesa paraprake) për %sb09a4b78z01s > %s -CompanyHasCreditNote=Ky klient ka ende shënime krediti për %s 'notranslate'>%s +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for %s %s +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for %s %s +CompanyHasCreditNote=This customer still has credit notes for %s %s HasNoAbsoluteDiscountFromSupplier=Nuk ofrohet zbritje/kredi nga ky shitës -HasAbsoluteDiscountFromSupplier=Ju keni zbritje në dispozicion (shënime krediti ose pagesa paraprake) për %sb09a17b739f > %s nga ky shitës -HasDownPaymentOrCommercialDiscountFromSupplier=Keni zbritje të disponueshme (komerciale, parapagime) për %sb09a4b78z0f17> %s nga ky shitës -HasCreditNoteFromSupplier=Ju keni shënime krediti për %s%s nga ky shitës +HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for %s %s from this vendor +HasDownPaymentOrCommercialDiscountFromSupplier=You have discounts available (commercial, down payments) for %s %s from this vendor +HasCreditNoteFromSupplier=You have credit notes for %s %s from this vendor CompanyHasNoAbsoluteDiscount=Ky klient nuk disponon kredi me zbritje CustomerAbsoluteDiscountAllUsers=Zbritje absolute të klientëve (të dhëna nga të gjithë përdoruesit) CustomerAbsoluteDiscountMy=Zbritje absolute të klientëve (të dhënë nga ju) @@ -407,7 +407,7 @@ VATIntraCheck=Kontrollo VATIntraCheckDesc=ID-ja e TVSH-së duhet të përfshijë prefiksin e shtetit. Lidhja %s përdor kontrolluesin evropian VAT) (VIES) e cila kërkon qasje në internet nga serveri Dolibarr. VATIntraCheckURL=https://ec.europa.eu/taxation_customs/vies/#/vat-validation VATIntraCheckableOnEUSite=Kontrolloni ID-në e TVSH-së brenda Komunitetit në faqen e internetit të Komisionit Evropian -VATIntraManualCheck=Ju gjithashtu mund të kontrolloni manualisht në faqen e internetit të Komisionit Evropian %s +VATIntraManualCheck=You can also check manually on the European Commission website %s ErrorVATCheckMS_UNAVAILABLE=Kontrolli nuk është i mundur. Shërbimi i kontrollit nuk ofrohet nga shteti anëtar (%s). NorProspectNorCustomer=As perspektivë, as klient JuridicalStatus=Lloji i subjektit të biznesit @@ -465,7 +465,7 @@ AddAddress=Shto adresën SupplierCategory=Kategoria e shitësve JuridicalStatus200=I pavarur DeleteFile=Fshi skedarin -ConfirmDeleteFile=Jeni të sigurt që dëshironi ta fshini këtë skedar %s%s? AllocateCommercial=I caktuar për përfaqësuesin e shitjeve Organization=Organizimi FiscalYearInformation=Viti fiskal diff --git a/htdocs/langs/sq_AL/compta.lang b/htdocs/langs/sq_AL/compta.lang index 7af8c2cedb2..0531f874443 100644 --- a/htdocs/langs/sq_AL/compta.lang +++ b/htdocs/langs/sq_AL/compta.lang @@ -158,26 +158,27 @@ ConfirmDeleteVAT=Jeni i sigurt që dëshironi të fshini këtë deklaratë të T ConfirmDeleteSalary=Je i sigurt që dëshiron ta fshish këtë pagë? ConfirmDeleteVariousPayment=Jeni i sigurt që dëshironi ta fshini këtë pagesë të ndryshme? ExportDataset_tax_1=Taksat dhe pagesat sociale dhe fiskale -CalcModeVATDebt=Modaliteti %sTVSH në kontabilitetin e angazhimit%s class='notranslate
. -CalcModeVATEngagement=Modaliteti %sTVSH-ja mbi të ardhurat-shpenzimetb0ecb2ec87f49>. +CalcModeVATDebt=Mode %sVAT on commitment accounting%s. +CalcModeVATEngagement=Mode %sVAT on incomes-expenses%s. CalcModeDebt=Analiza e dokumenteve të njohura të regjistruara CalcModeEngagement=Analiza e pagesave të njohura të regjistruara +CalcModePayment=Analiza e pagesave të njohura të regjistruara CalcModeBookkeeping=Analiza e të dhënave të regjistruara në tabelën e librit të kontabilitetit. CalcModeNoBookKeeping=Edhe nëse ato ende nuk janë llogaritur në Ledger -CalcModeLT1= Modaliteti %sRE në faturat e klientëve - faturat e furnitorëveb0ecb2ec87f49f ='notranslate'> -CalcModeLT1Debt=Modaliteti %sRE në faturat e klientitb0ecb2ec87f49fzpan class='notranslate'spannotranslate '> -CalcModeLT1Rec= Modaliteti %sRE në faturat e furnitorëve%s -CalcModeLT2= Modaliteti %sIRPF në faturat e klientëve - faturat e furnitorëveb0><4panf9spanz80f ='notranslate'> +CalcModeLT1= Mode %sRE on customer invoices - suppliers invoices%s +CalcModeLT1Debt=Mode %sRE on customer invoices%s +CalcModeLT1Rec= Mode %sRE on suppliers invoices%s +CalcModeLT2= Mode %sIRPF on customer invoices - suppliers invoices%s CalcModeLT2Debt=Modaliteti %sIRPF në faturat e klientitb0ecb2ec87f49f49fz0 CalcModeLT2Rec= Modaliteti %sIRPF në faturat e furnitorëveb0ecb2ec87f49fzlate
AnnualSummaryDueDebtMode=Bilanci i të ardhurave dhe shpenzimeve, përmbledhje vjetore AnnualSummaryInputOutputMode=Bilanci i të ardhurave dhe shpenzimeve, përmbledhje vjetore AnnualByCompanies=Bilanci i të ardhurave dhe shpenzimeve, sipas grupeve të paracaktuara të llogarive -AnnualByCompaniesDueDebtMode=Bilanci i të ardhurave dhe shpenzimeve, detaje sipas grupeve të paracaktuara, modaliteti %sKërkesat-Borxhet tha Kontabiliteti i zotimitb09a4b739f17f. -AnnualByCompaniesInputOutputMode=Bilanci i të ardhurave dhe shpenzimeve, detaje sipas grupeve të paracaktuara, modaliteti %sTë ardhura-Shpenzime tha kontabiliteti i paraveb09a4b739f17f8>z. -SeeReportInInputOutputMode=Shiko %sanalizën e pagesave%s për një llogaritje të bazuar në pagesat e regjistruara, edhe nëse ato nuk janë bërë ende në Llogaria -SeeReportInDueDebtMode=Shiko %sanalizën e dokumenteve të regjistruara%s class='notranslate'span '> për një llogaritje të bazuar në dokumentet e regjistruara të njohura, edhe nëse nuk janë llogaritur ende në L -SeeReportInBookkeepingMode=Shiko %sanalizën e tabelës së kontabilitetit%s notranslate'> për një raport të bazuar në Tabela e librit të kontabilitetitb09a4b739f17f8z +AnnualByCompaniesDueDebtMode=Balance of income and expenses, detail by predefined groups, mode %sClaims-Debts%s said Commitment accounting. +AnnualByCompaniesInputOutputMode=Balance of income and expenses, detail by predefined groups, mode %sIncomes-Expenses%s said cash accounting. +SeeReportInInputOutputMode=See %sanalysis of payments%s for a calculation based on recorded payments made even if they are not yet accounted in Ledger +SeeReportInDueDebtMode=See %sanalysis of recorded documents%s for a calculation based on known recorded documents even if they are not yet accounted in Ledger +SeeReportInBookkeepingMode=See %sanalysis of bookkeeping ledger table%s for a report based on Bookkeeping Ledger table RulesAmountWithTaxIncluded=- Shumat e paraqitura janë me të gjitha taksat e përfshira RulesAmountWithTaxExcluded=- Shumat e faturave të paraqitura janë të përjashtuara nga të gjitha taksat RulesResultDue=- Ai përfshin të gjitha faturat, shpenzimet, TVSH-në, donacionet, pagat, pavarësisht nëse paguhen apo jo.
- Bazohet në datën e faturimit të faturave dhe në datën e duhur për shpenzimet apo pagesat e taksave. Për pagat përdoret data e përfundimit të periudhës. @@ -211,8 +212,8 @@ LT1ReportByQuarters=Raporto taksën 2 sipas normës LT2ReportByQuarters=Raporto taksën 3 sipas normës LT1ReportByQuartersES=Raporti sipas normës së RE LT2ReportByQuartersES=Raporti sipas normës së IRPF -SeeVATReportInInputOutputMode=Shiko raportin %smbledhjen e TVSH-së%s për një llogaritje me një opsion në faturim +SeeVATReportInInputOutputMode=See report %sVAT collection%s for a standard calculation +SeeVATReportInDueDebtMode=See report %sVAT on debit%s for a calculation with an option on the invoicing RulesVATInServices=- Për shërbimet, raporti përfshin TVSH-në e pagesave të pranuara ose të paguara faktikisht në bazë të datës së pagesës. RulesVATInProducts=- Për pasuritë materiale raporti përfshin TVSH-në në bazë të datës së pagesës. RulesVATDueServices=- Për shërbimet, raporti përfshin TVSH-në e faturave të paguara ose jo, bazuar në datën e faturës. diff --git a/htdocs/langs/sq_AL/contracts.lang b/htdocs/langs/sq_AL/contracts.lang index df397811ccf..ce1b16e463c 100644 --- a/htdocs/langs/sq_AL/contracts.lang +++ b/htdocs/langs/sq_AL/contracts.lang @@ -35,13 +35,13 @@ DeleteAContract=Fshi një kontratë ActivateAllOnContract=Aktivizoni të gjitha shërbimet CloseAContract=Mbyllni një kontratë ConfirmDeleteAContract=Je i sigurt që dëshiron ta fshish këtë kontratë dhe të gjitha shërbimet e saj? -ConfirmValidateContract=Jeni i sigurt që dëshironi ta vërtetoni këtë kontratë me emrin %sb09a4b739f17f8z ? +ConfirmValidateContract=Are you sure you want to validate this contract under name %s? ConfirmActivateAllOnContract=Kjo do të hapë të gjitha shërbimet (ende jo aktive). Jeni i sigurt që dëshironi të hapni të gjitha shërbimet? ConfirmCloseContract=Kjo do të mbyllë të gjitha shërbimet (të skaduara ose jo). Jeni i sigurt që dëshironi ta mbyllni këtë kontratë? -ConfirmCloseService=Jeni i sigurt që dëshironi ta mbyllni këtë shërbim me datë %s%s? ValidateAContract=Vërtetoni një kontratë ActivateService=Aktivizoni shërbimin -ConfirmActivateService=Jeni i sigurt që dëshironi ta aktivizoni këtë shërbim me datë %sb09a4b739f17f>z ? +ConfirmActivateService=Are you sure you want to activate this service with date %s? RefContract=Referenca e kontratës DateContract=Data e kontratës DateServiceActivate=Data e aktivizimit të shërbimit @@ -90,7 +90,7 @@ NoteListOfYourExpiredServices=Kjo listë përmban vetëm shërbimet e kontratave StandardContractsTemplate=Modeli i kontratave standarde ContactNameAndSignature=Për %s, emri dhe nënshkrimi: OnlyLinesWithTypeServiceAreUsed=Vetëm linjat me llojin "Shërbim" do të klonohen. -ConfirmCloneContract=Jeni i sigurt që doni të klononi kontratën %sb09a4b739f17f8z>%s? LowerDateEndPlannedShort=Data më e ulët e planifikuar e përfundimit të shërbimeve aktive SendContractRef=Informacioni i kontratës __REF__ OtherContracts=Kontrata të tjera diff --git a/htdocs/langs/sq_AL/cron.lang b/htdocs/langs/sq_AL/cron.lang index 10d1510c0d1..75d03038dc7 100644 --- a/htdocs/langs/sq_AL/cron.lang +++ b/htdocs/langs/sq_AL/cron.lang @@ -1,6 +1,5 @@ # Dolibarr language file - Source file is en_US - cron -# About page -# Right +# Permissions Permission23101 = Lexoni punën e planifikuar Permission23102 = Krijo/përditëso punë të planifikuar Permission23103 = Fshi punën e planifikuar @@ -63,8 +62,8 @@ CronStatusInactiveBtn=Çaktivizo CronTaskInactive=Kjo punë është e çaktivizuar (jo e planifikuar) CronId=Id CronClassFile=Emri i skedarit me klasën -CronModuleHelp=Emri i drejtorisë së modulit Dolibarr (punoni edhe me modulin e jashtëm Dolibarr).
Për shembull, për të thirrur metodën e marrjes së Dolibarr Produkt objekt /htdocs/produkt/class/product.class.php, vlera për modulin është
produkt -CronClassFileHelp=Rruga relative dhe emri i skedarit për t'u ngarkuar (rruga është në lidhje me direktorinë rrënjë të serverit të uebit).
Për shembull, për të thirrur metodën e marrjes së Dolibarr Produkt objekt htdocs/product/class/product.class.php
, vlera për emrin e skedarit të klasës është
produkt/class .class.php +CronModuleHelp=Name of Dolibarr module directory (also work with external Dolibarr module).
For example to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for module is
product +CronClassFileHelp=The relative path and file name to load (path is relative to web server root directory).
For example to call the fetch method of Dolibarr Product object htdocs/product/class/product.class.php, the value for class file name is
product/class/product.class.php CronObjectHelp=Emri i objektit për t'u ngarkuar.
Për shembull për të thirrur metodën e marrjes së Dolibarr Produkt objekt /htdocs/product/class/product.class.php, vlera për emrin e skedarit të klasës është
Produkt CronMethodHelp=Metoda e objektit për të nisur.
Për shembull, për të thirrur metodën e marrjes së Dolibarr Produkt objekt /htdocs/product/class/product.class.php, vlera për metodën është
marr CronArgsHelp=Argumentet e metodës.
Për shembull, për të thirrur metodën e marrjes së Dolibarr Produkt objekt /htdocs/product/class/product.class.php, vlera për parametrat mund të jetë
0, ProductRef diff --git a/htdocs/langs/sq_AL/datapolicy.lang b/htdocs/langs/sq_AL/datapolicy.lang index 9da60e13f9b..ed02836708a 100644 --- a/htdocs/langs/sq_AL/datapolicy.lang +++ b/htdocs/langs/sq_AL/datapolicy.lang @@ -23,7 +23,7 @@ Module4100Desc = Moduli për menaxhimin e privatësisë së të dhënave (përpu # datapolicySetup = Konfigurimi i politikës së privatësisë së të dhënave të modulit Deletion = Fshirja e të dhënave -datapolicySetupPage = Depending on the laws of your countries (Example Article 5 of the GDPR), personal data must be kept for a period not exceeding the duration the data is needed for the purpose for which it was collected, except for archival purposes.
The deletion will be done automatically after a certain duration without events (the duration which you will have indicated below). +datapolicySetupPage = Në varësi të ligjeve të vendeve tuaja (Shembull Neni 5 i GDPR), të dhënat personale duhet të mbahen për një periudhë duke mos e tejkaluar kohëzgjatjen, të dhënat nevojiten për qëllimin për të cilin janë mbledhur, përveç për qëllime arkivore.
Fshirja do të bëhet automatikisht pas një kohëzgjatjeje të caktuar pa ngjarje (kohëzgjatja të cilat do t'i keni treguar më poshtë). NB_MONTHS = %s muaj ONE_YEAR = 1 vit NB_YEARS = %s vjet @@ -40,16 +40,16 @@ DATAPOLICY_CONTACT_FOURNISSEUR = Furnizuesi DATAPOLICY_ADHERENT = Anëtar DATAPOLICY_Tooltip_SETUP = Lloji i kontaktit - Tregoni zgjedhjet tuaja për secilin lloj. DATAPOLICYMail = Konfigurimi i emaileve -DATAPOLICYSUBJECTMAIL = Subject of the email +DATAPOLICYSUBJECTMAIL = Subjekti i emailit DATAPOLICYCONTENTMAIL = Përmbajtja e emailit DATAPOLICYSUBSITUTION = Ju mund të përdorni variablat e mëposhtëm në emailin tuaj (LINKACCEPT lejon krijimin e një lidhjeje që regjistron marrëveshjen e personit, LINKREFUSED bën të mundur regjistrimin e refuzimit të personit): DATAPOLICYACCEPT = Mesazh pas marrëveshjeje -DATAPOLICYREFUSE = Message after disagreement +DATAPOLICYREFUSE = Mesazh pas mosmarrëveshjes SendAgreementText = Ju mund t'u dërgoni një email GDPR të gjithë kontakteve tuaja përkatëse (të cilët nuk kanë marrë ende një email dhe për të cilët nuk keni regjistruar asgjë në lidhje me marrëveshjen e tyre GDPR). Për ta bërë këtë, përdorni butonin e mëposhtëm. SendAgreement = Dërgo email AllAgreementSend = Të gjitha emailet janë dërguar TXTLINKDATAPOLICYACCEPT = Teksti për lidhjen "marrëveshje" -TXTLINKDATAPOLICYREFUSE = Text for the link "disagreement" +TXTLINKDATAPOLICYREFUSE = Teksti për lidhjen "mosmarrëveshje" # @@ -57,8 +57,8 @@ TXTLINKDATAPOLICYREFUSE = Text for the link "disagreement" # DATAPOLICY_BLOCKCHECKBOX = GDPR: Përpunimi i të dhënave personale DATAPOLICY_consentement = Pëlqimi i marrë për përpunimin e të dhënave personale -DATAPOLICY_opposition_traitement = Opposes to the processing of his personal data -DATAPOLICY_opposition_prospection = Opposes to the processing of his personal data for the purposes of prospecting +DATAPOLICY_opposition_traitement = Kundërshton përpunimin e të dhënave të tij personale +DATAPOLICY_opposition_prospection = Kundërshton përpunimin e të dhënave të tij personale për qëllime kërkimi # # Popup @@ -78,11 +78,11 @@ DATAPOLICY_PORTABILITE_CONFIRMATION = Ju dëshironi të eksportoni të dhënat p # ANONYMISER_AT = Anonimoi %s -DATAPOLICY_date = Date of agreement/disagreement GDPR -DATAPOLICY_send = Date agreement email sent +DATAPOLICY_date = Data e marrëveshjes/mosmarrëveshjes GDPR +DATAPOLICY_send = Data e dërgimit të email-it të marrëveshjes DATAPOLICY_SEND = Dërgo email GDPR MailSent = Email është dërguar # ERROR -=Due to a technical problem, we were unable to register your choice. We apologize for that. Contact us to notify us your choice. -NUMBER_MONTH_BEFORE_DELETION = Number of months before deletion +=Për shkak të një problemi teknik, ne nuk mundëm të regjistronim zgjedhjen tuaj. Kërkojmë falje për këtë. Na kontaktoni për të na njoftuar zgjedhjen tuaj. +NUMBER_MONTH_BEFORE_DELETION = Numri i muajve para fshirjes diff --git a/htdocs/langs/sq_AL/deliveries.lang b/htdocs/langs/sq_AL/deliveries.lang index 3586c227be2..15eb4ca5c02 100644 --- a/htdocs/langs/sq_AL/deliveries.lang +++ b/htdocs/langs/sq_AL/deliveries.lang @@ -10,7 +10,7 @@ SetDeliveryDate=Cakto datën e dërgesës ValidateDeliveryReceipt=Vërtetoni faturën e dorëzimit ValidateDeliveryReceiptConfirm=Jeni i sigurt që dëshironi të vërtetoni këtë faturë dërgese? DeleteDeliveryReceipt=Fshi faturën e dorëzimit -DeleteDeliveryReceiptConfirm=Jeni i sigurt që dëshironi të fshini faturën e dorëzimit %sb09a4b739f17f>z? +DeleteDeliveryReceiptConfirm=Are you sure you want to delete delivery receipt %s? DeliveryMethod=Metodat e dërgesës TrackingNumber=Numri i gjurmimit DeliveryNotValidated=Dorëzimi nuk është vërtetuar diff --git a/htdocs/langs/sq_AL/donations.lang b/htdocs/langs/sq_AL/donations.lang index a58e748bbe2..537631c7d15 100644 --- a/htdocs/langs/sq_AL/donations.lang +++ b/htdocs/langs/sq_AL/donations.lang @@ -31,6 +31,7 @@ DONATION_ART200=Trego artikullin 200 nga CGI nëse jeni të shqetësuar DONATION_ART238=Trego artikullin 238 nga CGI nëse jeni të shqetësuar DONATION_ART978=Trego artikullin 978 nga CGI nëse jeni të shqetësuar DonationPayment=Pagesa e donacionit +DonationPayments=Pagesat e donacioneve DonationValidated=Donacioni %s u vërtetua DonationUseThirdparties=Përdorni adresën e një pale të tretë ekzistuese si adresë të donatorit DonationsStatistics=Statistikat e donacioneve diff --git a/htdocs/langs/sq_AL/ecm.lang b/htdocs/langs/sq_AL/ecm.lang index 4152cb777f1..223f3d64fa7 100644 --- a/htdocs/langs/sq_AL/ecm.lang +++ b/htdocs/langs/sq_AL/ecm.lang @@ -30,7 +30,7 @@ ECMDocsBy=Dokumentet e lidhura me %s ECMNoDirectoryYet=Asnjë drejtori nuk u krijua ShowECMSection=Shfaq drejtorinë DeleteSection=Hiq drejtorinë -ConfirmDeleteSection=A mund të konfirmoni që dëshironi të fshini direktorinë %s%s? ECMDirectoryForFiles=Drejtoria relative për skedarët CannotRemoveDirectoryContainsFilesOrDirs=Heqja nuk është e mundur sepse përmban disa skedarë ose nëndrejtori CannotRemoveDirectoryContainsFiles=Heqja nuk është e mundur sepse përmban disa skedarë diff --git a/htdocs/langs/sq_AL/errors.lang b/htdocs/langs/sq_AL/errors.lang index d9bd3b4d75a..189743ca740 100644 --- a/htdocs/langs/sq_AL/errors.lang +++ b/htdocs/langs/sq_AL/errors.lang @@ -8,22 +8,22 @@ ErrorBadEMail=Adresa e emailit %s është e pasaktë ErrorBadMXDomain=Emaili %s duket i pasaktë (domeni nuk ka rekord të vlefshëm MX) ErrorBadUrl=Urlja %s është e pasaktë ErrorBadValueForParamNotAString=Vlera e keqe për parametrin tuaj. Ai shtohet përgjithësisht kur mungon përkthimi. -ErrorRefAlreadyExists=Reference %s used for creation already exists. +ErrorRefAlreadyExists=Referenca %s e përdorur për krijimin tashmë ekziston. ErrorTitleAlreadyExists=Titulli %s ekziston tashmë. ErrorLoginAlreadyExists=Hyrja %s ekziston tashmë. ErrorGroupAlreadyExists=Grupi %s ekziston tashmë. ErrorEmailAlreadyExists=Email %s ekziston tashmë. ErrorRecordNotFound=Regjistrimi nuk u gjet. ErrorRecordNotFoundShort=Nuk u gjet -ErrorFailToCopyFile=Dështoi në kopjimin e skedarit '%s' në '' ='notranslate'>%s'. -ErrorFailToCopyDir=Dështoi në kopjimin e drejtorisë '%s' në '' ='notranslate'>%s'. -ErrorFailToRenameFile=Riemërtimi i skedarit '%s në '' dështoi në '' ='notranslate'>%s'. +ErrorFailToCopyFile=Failed to copy file '%s' into '%s'. +ErrorFailToCopyDir=Failed to copy directory '%s' into '%s'. +ErrorFailToRenameFile=Failed to rename file '%s' into '%s'. ErrorFailToDeleteFile=Dështoi në heqjen e skedarit '%s'. ErrorFailToCreateFile=Dështoi në krijimin e skedarit '%s'. -ErrorFailToRenameDir=Riemërtimi i drejtorisë '%s në '' dështoi në '' ='notranslate'>%s'. +ErrorFailToRenameDir=Failed to rename directory '%s' into '%s'. ErrorFailToCreateDir=Dështoi në krijimin e drejtorisë '%s'. ErrorFailToDeleteDir=Fshirja e drejtorisë '%s' dështoi. -ErrorFailToMakeReplacementInto=Zëvendësimi i skedarit '%s
%s
'. ErrorFailToGenerateFile=Dështoi në gjenerimin e skedarit '%s'. ErrorThisContactIsAlreadyDefinedAsThisType=Ky kontakt është përcaktuar tashmë si kontakt për këtë lloj. ErrorCashAccountAcceptsOnlyCashMoney=Kjo llogari bankare është një llogari cash, kështu që pranon vetëm pagesa të llojit cash. @@ -51,7 +51,7 @@ ErrorBadDateFormat=Vlera '%s' ka format të gabuar të datës ErrorWrongDate=Data nuk është e saktë! ErrorFailedToWriteInDir=Dështoi të shkruante në drejtorinë %s ErrorFailedToBuildArchive=Dështoi në ndërtimin e skedarit të arkivit %s -ErrorFoundBadEmailInFile=U gjet sintaksë e gabuar e emailit për linjat %s në skedar (rreshti shembull %s me email=b0f0292 /span>) +ErrorFoundBadEmailInFile=Found incorrect email syntax for %s lines in file (example line %s with email=%s) ErrorUserCannotBeDelete=Përdoruesi nuk mund të fshihet. Ndoshta është e lidhur me entitetet Dolibarr. ErrorFieldsRequired=Disa fusha të kërkuara janë lënë bosh. ErrorSubjectIsRequired=Kërkohet tema e emailit @@ -94,11 +94,11 @@ ErrorRecordIsUsedCantDelete=Nuk mund të fshihet regjistrimi. Është përdorur ErrorModuleRequireJavascript=JavaScript nuk duhet të çaktivizohet që kjo veçori të funksionojë. Për të aktivizuar/çaktivizuar JavaScript, shkoni te menyja Home->Setup->Display. ErrorPasswordsMustMatch=Të dy fjalëkalimet e shtypura duhet të përputhen me njëri-tjetrin ErrorContactEMail=Ndodhi një gabim teknik. Ju lutemi, kontaktoni administratorin në emailin vijues %s kodi %s në ekranin e mesazhit tuaj, ose shtoni një kopje të mesazhit kjo faqe. -ErrorWrongValueForField=Fusha %s: 'no %s' nuk përputhet me rregullin regex -ErrorHtmlInjectionForField=Fusha %s: Vlera '%s' përmban të dhëna me qëllim të keq që nuk lejohen -ErrorFieldValueNotIn=Fusha %s: 'no
%s' nuk është një vlerë e gjetur në fushën %s' nuk është një %s ref ekzistues -ErrorMultipleRecordFoundFromRef=U gjetën disa shënime gjatë kërkimit nga ref %s. Nuk ka asnjë mënyrë për të ditur se cilën ID të përdorni. +ErrorWrongValueForField=Field %s: '%s' does not match regex rule %s +ErrorHtmlInjectionForField=Field %s: The value '%s' contains a malicious data not allowed +ErrorFieldValueNotIn=Field %s: '%s' is not a value found in field %s of %s +ErrorFieldRefNotIn=Field %s: '%s' is not a %s existing ref +ErrorMultipleRecordFoundFromRef=Several record found when searching from ref %s. No way to know which ID to use. ErrorsOnXLines=%s u gjetën gabime ErrorFileIsInfectedWithAVirus=Programi antivirus nuk ishte në gjendje të vërtetonte skedarin (skedari mund të jetë i infektuar nga një virus) ErrorFileIsAnInfectedPDFWithJSInside=Skedari është një PDF i infektuar nga disa Javascript brenda @@ -155,7 +155,7 @@ ErrorDateMustBeBeforeToday=Data duhet të jetë më e ulët se sot ErrorDateMustBeInFuture=Data duhet të jetë më e madhe se sot ErrorStartDateGreaterEnd=Data e fillimit është më e madhe se data e përfundimit ErrorPaymentModeDefinedToWithoutSetup=Një mënyrë pagese u caktua për të shtypur %s por konfigurimi i modulit Fatura nuk u krye për të përcaktuar informacionin për t'u shfaqur për këtë mënyrë pagese. -ErrorPHPNeedModule=Gabim, PHP juaj duhet të ketë modul %s të instaluar për të përdorur këtë%s installed to use this feature. ErrorOpenIDSetupNotComplete=Ju konfiguroni skedarin e konfigurimit Dolibarr për të lejuar vërtetimin e OpenID, por URL-ja e shërbimit OpenID nuk është përcaktuar në konstante %s ErrorWarehouseMustDiffers=Burimi dhe magazinat e synuara duhet të ndryshojnë ErrorBadFormat=Format i keq! @@ -219,7 +219,7 @@ ErrorPhpMailDelivery=Kontrolloni që të mos përdorni një numër shumë të la ErrorUserNotAssignedToTask=Përdoruesi duhet të caktohet në detyrë që të jetë në gjendje të fusë kohën e konsumuar. ErrorTaskAlreadyAssigned=Detyra i është caktuar tashmë përdoruesit ErrorModuleFileSeemsToHaveAWrongFormat=Paketa e modulit duket se ka një format të gabuar. -ErrorModuleFileSeemsToHaveAWrongFormat2=Të paktën një direktori e detyrueshme duhet të ekzistojë në zip të modulit: %sb0a65d071f0sf > ose %s +ErrorModuleFileSeemsToHaveAWrongFormat2=At least one mandatory directory must exists into zip of module: %s or %s ErrorFilenameDosNotMatchDolibarrPackageRules=Emri i paketës së modulit (%s nuk përputhet) sintaksa e pritshme e emrit: %s ErrorDuplicateTrigger=Gabim, emri i kopjimit të kopjimit %s. I ngarkuar tashmë nga %s. ErrorNoWarehouseDefined=Gabim, nuk janë përcaktuar magazina. @@ -258,14 +258,14 @@ ErrorLanguageOfTranslatedPageIsSameThanThisPage=Gabim, gjuha e faqes së përkth ErrorBatchNoFoundForProductInWarehouse=Nuk u gjet asnjë lot/serial për produktin "%s" në magazinë "%s". ErrorBatchNoFoundEnoughQuantityForProductInWarehouse=Nuk ka sasi të mjaftueshme për këtë lot/serial për produktin "%s" në magazinë "%s". ErrorOnlyOneFieldForGroupByIsPossible=Vetëm 1 fushë për "Grupi sipas" është e mundur (të tjerat janë hedhur poshtë) -ErrorTooManyDifferentValueForSelectedGroupBy=U gjetën shumë vlera të ndryshme (më shumë se %s) fusha '%s', kështu që ne mund ta përdorim si një 'Group by' për grafikë. Fusha 'Group By' është hequr. Ndoshta dëshironi ta përdorni atë si një bosht X? +ErrorTooManyDifferentValueForSelectedGroupBy=Found too many different value (more than %s) for the field '%s', so we can't use it as a 'Group by' for graphics. The field 'Group By' has been removed. May be you wanted to use it as an X-Axis ? ErrorReplaceStringEmpty=Gabim, vargu për të zëvendësuar është bosh ErrorProductNeedBatchNumber=Gabim, produkti '%s' ka nevojë për një numër ErrorProductDoesNotNeedBatchNumber=Gabim, produkti '%s' nuk pranon shumë/ numër serik -ErrorFailedToReadObject=Gabim, dështoi në leximin e objektit të llojit %s -ErrorParameterMustBeEnabledToAllwoThisFeature=Gabim, parametri %s duhet të jetë en class='notranslate'> 'notranslate'>conf/conf.php<> për të lejuar përdorimin e ndërfaqes së linjës së komandës nga programuesi i brendshëm i punës +ErrorFailedToReadObject=Error, failed to read object of type %s +ErrorParameterMustBeEnabledToAllwoThisFeature=Error, parameter %s must be enabled into conf/conf.php<> to allow use of Command Line Interface by the internal job scheduler ErrorLoginDateValidity=Gabim, ky identifikim është jashtë intervalit të datave të vlefshmërisë -ErrorValueLength=Gjatësia e fushës '%s duhet të jetë më e lartë se '' span class='notranslate'>%s' +ErrorValueLength=Length of field '%s' must be higher than '%s' ErrorReservedKeyword=Fjala '%s' është një fjalë kyçe e rezervuar ErrorFilenameReserved=Emri i skedarit %s nuk mund të përdoret komanda e rezervuar dhe e mbrojtur. ErrorNotAvailableWithThisDistribution=Nuk disponohet me këtë shpërndarje @@ -311,7 +311,7 @@ ErrorValueCantBeNull=Vlera për %s nuk mund të jetë null ErrorDateOfMovementLowerThanDateOfFileTransmission=Data e transaksionit bankar nuk mund të jetë më e ulët se data e transmetimit të dosjes ErrorTooMuchFileInForm=Shumë skedarë në formë, numri maksimal është %s skedar(s) ErrorSessionInvalidatedAfterPasswordChange=Sesioni u zhvlerësua pas një ndryshimi të fjalëkalimit, emailit, statusit ose datave të vlefshmërisë. Ju lutemi identifikohuni përsëri. -ErrorExistingPermission = Leja %s për objektin %s ekziston tashmë +ErrorExistingPermission = Permission %s for object %s already exists ErrorFieldExist=Vlera për %s ekziston tashmë ErrorEqualModule=Moduli i pavlefshëm në %s ErrorFieldValue=Vlera për %s është e pasaktë @@ -325,7 +325,7 @@ ErrorSVGFilesNotAllowedAsLinksWithout=Skedarët SVG nuk lejohen si lidhje të ja ErrorTypeMenu=Është e pamundur të shtosh një menu tjetër për të njëjtin modul në shiritin e navigimit, por ende nuk është trajtuar ErrorObjectNotFound = Objekti %s nuk është gjetur, ju lutemi kontrolloni url ErrorCountryCodeMustBe2Char=Kodi i shtetit duhet të jetë një varg me 2 karaktere -ErrorABatchShouldNotContainsSpaces=A lot or serial number should not contains spaces +ErrorABatchShouldNotContainsSpaces=Një lot ose numri serial nuk duhet të përmbajë hapësira ErrorTableExist=Tabela %s ekziston tashmë ErrorDictionaryNotFound=Fjalori %s nuk u gjet @@ -349,13 +349,13 @@ WarningCloseAlways=Paralajmërim, mbyllja bëhet edhe nëse shuma ndryshon midis WarningUsingThisBoxSlowDown=Paralajmërim, përdorimi i kësaj kutie ngadalësoni seriozisht të gjitha faqet që shfaqin kutinë. WarningClickToDialUserSetupNotComplete=Konfigurimi i informacionit ClickToDial për përdoruesin tuaj nuk është i plotë (shih skedën ClickToDial në kartën tuaj të përdoruesit). WarningFeatureDisabledWithDisplayOptimizedForBlindNoJs=Funksioni çaktivizohet kur konfigurimi i ekranit është optimizuar për shfletuesit e tekstit për personat e verbër. -WarningPaymentDateLowerThanInvoiceDate=Data e pagesës (%s) është më e hershme se data e faturës (%s) për faturë b0ecb2fz874 span>. +WarningPaymentDateLowerThanInvoiceDate=Payment date (%s) is earlier than invoice date (%s) for invoice %s. WarningTooManyDataPleaseUseMoreFilters=Shumë të dhëna (më shumë se rreshta %s). Ju lutemi përdorni më shumë filtra ose vendosni konstanten %s në një kufi më të lartë. WarningSomeLinesWithNullHourlyRate=Disa herë u regjistruan nga disa përdorues ndërsa tarifa e tyre për orë nuk ishte e përcaktuar. Është përdorur një vlerë prej 0 %s në orë, por kjo mund të rezultojë në vlerësim të gabuar të kohës së shpenzuar. WarningYourLoginWasModifiedPleaseLogin=Hyrja juaj u modifikua. Për qëllime sigurie, do t'ju duhet të identifikoheni me hyrjen tuaj të re përpara veprimit tjetër. WarningYourPasswordWasModifiedPleaseLogin=Fjalëkalimi juaj u modifikua. Për qëllime sigurie do të duhet të identifikoheni tani me fjalëkalimin tuaj të ri. WarningAnEntryAlreadyExistForTransKey=Ekziston tashmë një hyrje për çelësin e përkthimit për këtë gjuhë -WarningNumberOfRecipientIsRestrictedInMassAction=Paralajmërim, numri i marrësve të ndryshëm është i kufizuar në %sb09a4b739f17f8z kur përdoret veprimet masive në lista +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to %s when using the mass actions on lists WarningDateOfLineMustBeInExpenseReportRange=Paralajmërim, data e rreshtit nuk është në intervalin e raportit të shpenzimeve WarningProjectDraft=Projekti është ende në modalitetin draft. Mos harroni ta vërtetoni nëse planifikoni të përdorni detyra. WarningProjectClosed=Projekti është mbyllur. Së pari duhet ta rihapni. @@ -366,14 +366,14 @@ WarningCreateSubAccounts=Kujdes, nuk mund të krijosh drejtpërdrejt një nën-l WarningAvailableOnlyForHTTPSServers=E disponueshme vetëm nëse përdorni lidhje të sigurt HTTPS. WarningModuleXDisabledSoYouMayMissEventHere=Moduli %s nuk është aktivizuar. Kështu që mund të humbisni shumë ngjarje këtu. WarningPaypalPaymentNotCompatibleWithStrict=Vlera 'Rreptë' bën që veçoritë e pagesës në internet të mos funksionojnë siç duhet. Përdorni 'Lax' në vend të kësaj. -WarningThemeForcedTo=Paralajmërim, tema është e detyruar të %sHED> MAQEDONISHT konstante +WarningThemeForcedTo=Warning, theme has been forced to %s by hidden constant MAIN_FORCETHEME WarningPagesWillBeDeleted=Kujdes, kjo do të fshijë gjithashtu të gjitha faqet/kontejnerët ekzistues të faqes së internetit. Ju duhet të eksportoni faqen tuaj të internetit më parë, në mënyrë që të keni një kopje rezervë për ta ri-importuar më vonë. WarningAutoValNotPossibleWhenStockIsDecreasedOnInvoiceVal=Vleresimi automatik çaktivizohet kur opsioni për uljen e stokut është vendosur në "Vleresimi i faturës". WarningModuleNeedRefresh = Moduli %s është çaktivizuar. Mos harroni ta aktivizoni WarningPermissionAlreadyExist=Lejet ekzistuese për këtë objekt -WarningGoOnAccountancySetupToAddAccounts=Nëse kjo listë është bosh, shkoni te menyja %s - %s - %s për të ngarkuar ose krijuar llogari për grafikun tuaj të llogarisë. +WarningGoOnAccountancySetupToAddAccounts=If this list is empty, go into menu %s - %s - %s to load or create accounts for your chart of account. WarningCorrectedInvoiceNotFound=Fatura e korrigjuar nuk u gjet -WarningCommentNotFound=Ju lutemi kontrolloni vendosjen e komenteve të fillimit dhe të fundit për seksionin %s skedari %s përpara se të dorëzoni veprimin tuaj +WarningCommentNotFound=Please check placement of start and end comments for %s section in file %s before submitting your action WarningAlreadyReverse=Lëvizja e aksioneve është kthyer tashmë SwissQrOnlyVIR = Fatura SwissQR mund të shtohet vetëm në faturat e vendosura për t'u paguar me pagesa të transfertave të kreditit. @@ -405,9 +405,9 @@ BadSetupOfFieldFileNotFound = Gabim në konfigurimin e gabuar të fushës: Skeda BadSetupOfFieldFetchNotCallable = Gabim në konfigurimin e gabuar të fushës: Marrja nuk mund të thirret në klasë ErrorTooManyAttempts= Shumë përpjekje, ju lutemi provoni përsëri më vonë -TotalAmountEmpty=Total Amount Empty -FailedToFoundTheConversionRateForInvoice=Failed to found the conversion rate for invoice -ThisIdNotDefined=Id not defined -OperNotDefined=Payment method not defined -ErrorThisContactXIsAlreadyDefinedAsThisType=%s is already defined as contact for this type. -ErrorThisGroupIsAlreadyDefinedAsThisType=The contacts with this group are already defined as contact for this type. +TotalAmountEmpty=Shuma totale bosh +FailedToFoundTheConversionRateForInvoice=Gjetja e normës së konvertimit për faturë dështoi +ThisIdNotDefined=I pa përcaktuar +OperNotDefined=Mënyra e pagesës nuk është përcaktuar +ErrorThisContactXIsAlreadyDefinedAsThisType=%s është përcaktuar tashmë si kontakt për këtë lloj. +ErrorThisGroupIsAlreadyDefinedAsThisType=Kontaktet me këtë grup janë përcaktuar tashmë si kontakt për këtë lloj. diff --git a/htdocs/langs/sq_AL/eventorganization.lang b/htdocs/langs/sq_AL/eventorganization.lang index 8728c0eaeed..8895a8add7a 100644 --- a/htdocs/langs/sq_AL/eventorganization.lang +++ b/htdocs/langs/sq_AL/eventorganization.lang @@ -36,7 +36,7 @@ EventOrganizationSetup=Konfigurimi i organizimit të ngjarjeve EventOrganization=Organizimi i eventit EventOrganizationSetupPage = Faqja e konfigurimit të organizimit të ngjarjeve EVENTORGANIZATION_TASK_LABEL = Etiketa e detyrave për t'u krijuar automatikisht kur projekti të vërtetohet -EVENTORGANIZATION_TASK_LABELTooltip = Kur vërtetoni një ngjarje për të organizuar, disa detyra mund të krijohen automatikisht në projekt

Për shembull:
Dërgo thirrje për konferenca
Dërgo thirrje për kabinatb0342fccfda19bzit sugjerime të klasave të konferencave

Vërteto aplikacionin për Booths
Hap abonimet në ngjarje për të pranishmitb0342fccfda19>b0342fccfda1 i ngjarjes folësve
Dërgo një kujtim të ngjarjes te mbajtësit e Booth
Dërgo një kujtim të ngjarjes për të pranishmit +EVENTORGANIZATION_TASK_LABELTooltip = When you validate an event to organize, some tasks can be automatically created in the project

For example:
Send Call for Conferences
Send Call for Booths
Validate suggestions of Conferences
Validate application for Booths
Open subscriptions to the event for attendees
Send a remind of the event to speakers
Send a remind of the event to Booth hosters
Send a remind of the event to attendees EVENTORGANIZATION_TASK_LABELTooltip2=Mbajeni bosh nëse nuk keni nevojë të krijoni detyra automatikisht. EVENTORGANIZATION_CATEG_THIRDPARTY_CONF = Kategoria për t'u shtuar palëve të treta krijohet automatikisht kur dikush sugjeron një konferencë EVENTORGANIZATION_CATEG_THIRDPARTY_BOOTH = Kategoria për t'u shtuar palëve të treta krijohet automatikisht kur ata sugjerojnë një kabinë @@ -88,6 +88,7 @@ PriceOfRegistration=Çmimi i regjistrimit PriceOfRegistrationHelp=Çmimi që duhet paguar për t'u regjistruar ose për të marrë pjesë në ngjarje PriceOfBooth=Çmimi i abonimit për të qëndruar në një kabinë PriceOfBoothHelp=Çmimi i abonimit për të qëndruar në një kabinë +EventOrganizationICSLinkProject=Lidhni ICS për ngjarjen EventOrganizationICSLink=Lidhni ICS për konferenca ConferenceOrBoothInformation=Informacione për Konferencën ose Bothin Attendees=Të pranishmit @@ -127,8 +128,8 @@ PublicAttendeeSubscriptionPage = Lidhje publike vetëm për regjistrim në kët MissingOrBadSecureKey = Çelësi i sigurisë është i pavlefshëm ose mungon EvntOrgWelcomeMessage = Ky formular ju lejon të regjistroheni si një pjesëmarrës i ri në ngjarje EvntOrgDuration = Kjo konferencë fillon në %s dhe përfundon në %s. -ConferenceAttendeeFee = Tarifa e pjesëmarrësve në konferencë për ngjarjen : '%s' ndodh nga %s në b0ecb2fz874 >. -BoothLocationFee = Vendndodhja e kabinës për ngjarjen : '%s' që ndodh nga %s në b0ecb2ec87f49>f +ConferenceAttendeeFee = Conference attendee fee for the event : '%s' occurring from %s to %s. +BoothLocationFee = Booth location for the event : '%s' occurring from %s to %s EventType = Lloji i ngjarjes LabelOfBooth=Etiketa e kabinës LabelOfconference=Etiketa e konferencës @@ -161,7 +162,7 @@ Attendee = Pjesëmarrësit PaymentConferenceAttendee = Pagesa e pjesëmarrësve në konferencë PaymentBoothLocation = Pagesa e vendndodhjes së kabinës DeleteConferenceOrBoothAttendee=Hiq pjesëmarrësin -RegistrationAndPaymentWereAlreadyRecorder=Një regjistrim dhe një pagesë janë regjistruar tashmë për emailin %sb09a4b739f17f8z +RegistrationAndPaymentWereAlreadyRecorder=A registration and a payment were already recorded for the email %s EmailAttendee=Email i pjesëmarrësit EmailCompany=Email i kompanisë EmailCompanyForInvoice=Email-i i kompanisë (për faturë, nëse është i ndryshëm nga email-i i pjesëmarrësit) diff --git a/htdocs/langs/sq_AL/exports.lang b/htdocs/langs/sq_AL/exports.lang index 43d59b47984..71996f7040b 100644 --- a/htdocs/langs/sq_AL/exports.lang +++ b/htdocs/langs/sq_AL/exports.lang @@ -72,7 +72,7 @@ FieldsTarget=Fushat e synuara FieldTarget=Fusha e synuar FieldSource=Fusha e burimit NbOfSourceLines=Numri i rreshtave në skedarin burimor -NowClickToTestTheImport=Kontrolloni që formati i skedarit (ndarësit e fushave dhe vargjeve) të skedarit tuaj përputhet me opsionet e treguara dhe se e keni hequr rreshtin e titullit, ose këto do të shënohen si gabime në simulimin e mëposhtëm.
Kliko në butonin "%s" për të
kontrolloni strukturën/përmbajtjen e skedarit dhe simuloni procesin e importimit.
Asnjë të dhënë nuk do të ndryshohet në bazën tuaj të të dhënave. +NowClickToTestTheImport=Check that the file format (field and string delimiters) of your file matches the options shown and that you have omitted the header line, or these will be flagged as errors in the following simulation.
Click on the "%s" button to run a check of the file structure/contents and simulate the import process.
No data will be changed in your database. RunSimulateImportFile=Ekzekutoni simulimin e importit FieldNeedSource=Kjo fushë kërkon të dhëna nga skedari burimor SomeMandatoryFieldHaveNoSource=Disa fusha të detyrueshme nuk kanë burim nga skedari i të dhënave @@ -83,15 +83,15 @@ SelectFormat=Zgjidhni këtë format skedari të importit RunImportFile=Të dhënat e importit NowClickToRunTheImport=Kontrolloni rezultatet e simulimit të importit. Korrigjoni çdo gabim dhe riprovoni.
Kur simulimi nuk raporton asnjë gabim, mund të vazhdoni të importoni të dhënat në bazën e të dhënave. DataLoadedWithId=Të dhënat e importuara do të kenë një fushë shtesë në secilën tabelë të bazës së të dhënave me këtë ID të importit: %s, për të lejuar që ai të jetë i kërkueshëm në rastin e hetimit të një problemi që lidhet me këtë import. -ErrorMissingMandatoryValue=Të dhënat e detyrueshme janë bosh në skedarin burimor në kolonën %sb09a4b739f17f8z. +ErrorMissingMandatoryValue=Mandatory data is empty in the source file in column %s. TooMuchErrors=Ka ende %s linja të tjera burimore por ka nxjerrë linja të tjera ka qenë e kufizuar. TooMuchWarnings=Ende ka %s që ka linja të tjera burimore me luftë ishte i kufizuar. EmptyLine=Linja e zbrazët (do të hidhet poshtë) -CorrectErrorBeforeRunningImport=Ju duhet të korrigjoni të gjitha gabimet b0aee83365837fz>b0aee83365837fz notranslate'> duke ekzekutuar importin përfundimtar. +CorrectErrorBeforeRunningImport=You must correct all errors before running the definitive import. FileWasImported=Skedari u importua me numër %s. YouCanUseImportIdToFindRecord=Ju mund t'i gjeni të gjitha regjistrimet e importuara në bazën tuaj të të dhënave duke filtruar në fushën import_key='%s'. -NbOfLinesOK=Numri i rreshtave pa gabime dhe pa paralajmërime: %sb09a4b78z000f1>f. -NbOfLinesImported=Numri i rreshtave të importuar me sukses: %s%s. +NbOfLinesImported=Number of lines successfully imported: %s. DataComeFromNoWhere=Vlera për të futur vjen nga askund në skedarin burimor. DataComeFromFileFieldNb=Vlera për të futur vjen nga kolona %s në skedarin burimor. DataComeFromIdFoundFromRef=Vlera që vjen nga skedari burimor do të përdoret për të gjetur ID-në e objektit prind për t'u përdorur (kështu që objekti %s që ka ref. nga skedari burim duhet të ekzistojë në bazën e të dhënave). @@ -102,19 +102,19 @@ DataCodeIDSourceIsInsertedInto=ID-ja e linjës mëmë, e gjetur nga kodi, do të SourceRequired=Vlera e të dhënave është e detyrueshme SourceExample=Shembull i vlerës së mundshme të të dhënave ExampleAnyRefFoundIntoElement=Çdo referencë e gjetur për elementin %s -ExampleAnyCodeOrIdFoundIntoDictionary=Çdo kod (ose id) i gjetur në fjalor %sb09a4b739f17f8zVlera e ndarë me presje formati i skedarit (.csv).b0149fccf>b0149fccf është një format skedari teksti ku fushat janë të ndara nga një ndarës [ %s ]. Nëse gjendet ndarësi brenda përmbajtjes së fushës, fusha rrumbullakohet me karakter të rrumbullakët [ %s ]. Karakteri i arratisjes për t'i shpëtuar karakterit të rrumbullakët është [ %s ]. -Excel95FormatDesc=Excel formati i skedarit (.xls)b0342fccfda19>b0 Formati Excel 95 (BIFF5). -Excel2007FormatDesc=Excel formati i skedarit (.xlsx)b0342fccfda19>z Formati Excel 2007 (SpreadsheetML). -TsvFormatDesc=Vlera e veçuar me skedë formati i skedarit (.tsv)b0342fccfda. një format skedari teksti ku fushat janë të ndara nga një tabelator [tab]. +ExampleAnyCodeOrIdFoundIntoDictionary=Any code (or id) found into dictionary %s +CSVFormatDesc=Comma Separated Value file format (.csv).
This is a text file format where fields are separated by a separator [ %s ]. If separator is found inside a field content, field is rounded by round character [ %s ]. Escape character to escape round character is [ %s ]. +Excel95FormatDesc=Excel file format (.xls)
This is the native Excel 95 format (BIFF5). +Excel2007FormatDesc=Excel file format (.xlsx)
This is the native Excel 2007 format (SpreadsheetML). +TsvFormatDesc=Tab Separated Value file format (.tsv)
This is a text file format where fields are separated by a tabulator [tab]. ExportFieldAutomaticallyAdded=Fusha %s u shtua automatikisht. Kjo do t'ju shmangë që të keni linja të ngjashme që do të trajtohen si rekord dublikatë (me këtë fushë të shtuar, të gjitha linjat do të kenë ID-në e tyre dhe do të ndryshojnë). CsvOptions=Opsionet e formatit CSV Separator=Ndarës i fushës Enclosure=Kufizues i vargut SpecialCode=Kodi special ExportStringFilter=%% lejon zëvendësimin e një ose më shumë karaktereve në tekst -ExportDateFilter=YYYY, YYYYMM, YYYYMMDD: filtron sipas një viti/muaj/ditë
YYYY+YYYY, YYYYMM+YYYYMM, YYYYMMDD+YYYYMMDD+VVVYYMNë diapazonin e viteve/VVVMMMDD: span class='notranslate'>
> YYYY, > YYYYMM, > YYYYMMDD: filtra në të gjitha vitet/muajt/ditët në vijim
NNNNN+NNNNN filtro mbi një sërë vlerash
b27ede2ez<0892ez /span>> NNNNN filtron sipas vlerave më të larta +ExportDateFilter=YYYY, YYYYMM, YYYYMMDD: filters by one year/month/day
YYYY+YYYY, YYYYMM+YYYYMM, YYYYMMDD+YYYYMMDD: filters over a range of years/months/days
> YYYY, > YYYYMM, > YYYYMMDD: filters on all following years/months/days
< YYYY, < YYYYMM, < YYYYMMDD: filters on all previous years/months/days +ExportNumericFilter=NNNNN filters by one value
NNNNN+NNNNN filters over a range of values
< NNNNN filters by lower values
> NNNNN filters by higher values ImportFromLine=Importoni duke filluar nga numri i linjës EndAtLineNb=Përfundoni në numrin e linjës ImportFromToLine=Gama e kufirit (Nga - Deri). P.sh. për të hequr rreshtat e titullit. diff --git a/htdocs/langs/sq_AL/help.lang b/htdocs/langs/sq_AL/help.lang index c26af0e9340..869c47568b8 100644 --- a/htdocs/langs/sq_AL/help.lang +++ b/htdocs/langs/sq_AL/help.lang @@ -20,4 +20,4 @@ BackToHelpCenter=Përndryshe, kthehu në faqen kryesore të qendrë LinkToGoldMember=Ju mund të telefononi një nga trajnerët e parazgjedhur nga Dolibarr për gjuhën tuaj (%s) duke klikuar Widget-in e tyre (statusi dhe çmimi maksimal përditësohen automatikisht): PossibleLanguages=Gjuhët e mbështetura SubscribeToFoundation=Ndihmoni projektin Dolibarr, regjistrohuni në fondacion -SeeOfficalSupport=Për mbështetjen zyrtare të Dolibarr në gjuhën tuaj:
%s +SeeOfficalSupport=For official Dolibarr support in your language:
%s diff --git a/htdocs/langs/sq_AL/holiday.lang b/htdocs/langs/sq_AL/holiday.lang index f643c1c5919..a97a7a7cd41 100644 --- a/htdocs/langs/sq_AL/holiday.lang +++ b/htdocs/langs/sq_AL/holiday.lang @@ -27,9 +27,9 @@ UserForApprovalLastname=Mbiemri i përdoruesit të miratimit UserForApprovalLogin=Hyrja e përdoruesit të miratimit DescCP=Përshkrimi SendRequestCP=Krijo kërkesë për pushim -DelayToRequestCP=Kërkesat për largim duhet të bëhen të paktën %s ditë(a)b09a4b739f17f para tyre. +DelayToRequestCP=Leave requests must be made at least %s day(s) before them. MenuConfCP=Bilanci i lejes -SoldeCPUser=Lëreni bilancin (në ditë) : %s +SoldeCPUser=Leave balance (in days) : %s ErrorEndDateCP=Duhet të zgjidhni një datë përfundimi më të madhe se data e fillimit. ErrorSQLCreateCP=Ndodhi një gabim SQL gjatë krijimit: ErrorIDFicheCP=Ka ndodhur një gabim, kërkesa për pushim nuk ekziston. @@ -109,7 +109,6 @@ TypeWasDisabledOrRemoved=Lloji i lejes (id %s) u çaktivizua ose u hoq LastHolidays=Kërkesat më të fundit për largim %s AllHolidays=Të gjitha kërkesat për pushim HalfDay=Gjysmë ditë -NotTheAssignedApprover=Ju nuk jeni miratuesi i caktuar LEAVE_PAID=Pushime me pagesë LEAVE_SICK=Pushim mjekësor LEAVE_OTHER=Pushime të tjera diff --git a/htdocs/langs/sq_AL/hrm.lang b/htdocs/langs/sq_AL/hrm.lang index 5d416e37822..c8855ce9fc3 100644 --- a/htdocs/langs/sq_AL/hrm.lang +++ b/htdocs/langs/sq_AL/hrm.lang @@ -45,7 +45,7 @@ Eval=Vlerësimi Evals=vlerësimet NewEval=Vlerësim i ri ValidateEvaluation=Vërtetoni vlerësimin -ConfirmValidateEvaluation=Jeni i sigurt që dëshironi ta vërtetoni këtë vlerësim me referencën %sb09a4b739f17f8z >? +ConfirmValidateEvaluation=Are you sure you want to validate this evaluation with the reference %s? EvaluationCard=Karta e vlerësimit RequiredRank=Grada e kërkuar për profilin e punës RequiredRankShort=Grada e kërkuar diff --git a/htdocs/langs/sq_AL/install.lang b/htdocs/langs/sq_AL/install.lang index b26a1000936..6b8e80d1567 100644 --- a/htdocs/langs/sq_AL/install.lang +++ b/htdocs/langs/sq_AL/install.lang @@ -13,8 +13,8 @@ PHPSupportPOSTGETOk=Ky PHP mbështet variablat POST dhe GET. PHPSupportPOSTGETKo=Është e mundur që konfigurimi juaj i PHP nuk i mbështet variablat POST dhe/ose GET. Kontrolloni parametrin variables_order në php.ini. PHPSupportSessions=Ky PHP mbështet seancat. PHPSupport=Ky PHP mbështet funksionet %s. -PHPMemoryOK=Memoria juaj maksimale e sesionit PHP është caktuar në %sb09a4b739f17f8z>%sb09a4b739f17panf8z0php.ini për të vendosur b0aee83365837fm<0aee8336583737f ='notranslate'> parametër për të paktën %s bajt. +PHPMemoryOK=Your PHP max session memory is set to %s. This should be enough. +PHPMemoryTooLow=Your PHP max session memory is set to %s bytes. This is too low. Change your php.ini to set memory_limit parameter to at least %s bytes. Recheck=Klikoni këtu për një test më të detajuar ErrorPHPDoesNotSupportSessions=Instalimi juaj i PHP nuk i mbështet seancat. Kjo veçori kërkohet për të lejuar funksionimin e Dolibarr. Kontrolloni konfigurimin tuaj të PHP dhe lejet e drejtorisë së sesioneve. ErrorPHPDoesNotSupport=Instalimi juaj PHP nuk mbështet funksionet %s. @@ -77,7 +77,7 @@ SetupEnd=Fundi i konfigurimit SystemIsInstalled=Ky instalim ka përfunduar. SystemIsUpgraded=Dolibarr është përmirësuar me sukses. YouNeedToPersonalizeSetup=Ju duhet të konfiguroni Dolibarr për t'iu përshtatur nevojave tuaja (pamja, veçoritë, ...). Për ta bërë këtë, ju lutemi ndiqni lidhjen e mëposhtme: -AdminLoginCreatedSuccessfuly=Identifikimi i administratorit të Dolibarr '%sb09a4b739f17f80'z0 u krijua me sukses. +AdminLoginCreatedSuccessfuly=Dolibarr administrator login '%s' created successfully. GoToDolibarr=Shkoni në Dolibarr GoToSetupArea=Shkoni te Dolibarr (zona e konfigurimit) MigrationNotFinished=Versioni i bazës së të dhënave nuk është plotësisht i përditësuar: ekzekutoni përsëri procesin e përmirësimit. @@ -86,7 +86,7 @@ WithNoSlashAtTheEnd=Pa të pjerrët "/" në fund DirectoryRecommendation=E RËNDËSISHME: Duhet të përdorni një direktori që është jashtë faqeve të internetit (kështu që mos përdorni një nëndrejtori të parametrit të mëparshëm ). LoginAlreadyExists=Tashmë ekziston DolibarrAdminLogin=Identifikimi i administratorit të Dolibarr -AdminLoginAlreadyExists=Llogaria e administratorit të Dolibarr '%s tashmë ekziston. Kthehuni nëse dëshironi të krijoni një tjetër. +AdminLoginAlreadyExists=Dolibarr administrator account '%s' already exists. Go back if you want to create another one. FailedToCreateAdminLogin=Krijimi i llogarisë së administratorit të Dolibarr dështoi. WarningRemoveInstallDir=Paralajmërim, për arsye sigurie, pasi të përfundojë procesi i instalimit, duhet të shtoni një skedar të quajtur install.lock në Drejtoria e dokumenteve Dolibarr për të parandaluar përsëri përdorimin aksidental/me qëllim të keq të veglave të instalimit. FunctionNotAvailableInThisPHP=Nuk disponohet në këtë PHP @@ -108,15 +108,15 @@ DatabaseVersion=Versioni i bazës së të dhënave ServerVersion=Versioni i serverit të bazës së të dhënave YouMustCreateItAndAllowServerToWrite=Ju duhet të krijoni këtë direktori dhe të lejoni që serveri në internet të shkruajë në të. DBSortingCollation=Rendi i renditjes së karaktereve -YouAskDatabaseCreationSoDolibarrNeedToConnect=Ju zgjodhët krijimin e bazës së të dhënave %s, por ka nevojë për këtë, porr për t'u lidhur me serverin %s me super përdorues class= 'notranslate'>%s. -YouAskLoginCreationSoDolibarrNeedToConnect=Ju zgjodhët krijimin e përdoruesit të bazës së të dhënave %s, porr duhet të lidhet me serverin %s %s lejet. +YouAskDatabaseCreationSoDolibarrNeedToConnect=You selected create database %s, but for this, Dolibarr needs to connect to server %s with super user %s permissions. +YouAskLoginCreationSoDolibarrNeedToConnect=You selected create database user %s, but for this, Dolibarr needs to connect to server %s with super user %s permissions. BecauseConnectionFailedParametersMayBeWrong=Lidhja e bazës së të dhënave dështoi: parametrat e hostit ose të superpërdoruesit duhet të jenë të gabuara. OrphelinsPaymentsDetectedByMethod=Pagesa për jetimët u zbulua me metodën %s RemoveItManuallyAndPressF5ToContinue=Hiqeni manualisht dhe shtypni F5 për të vazhduar. FieldRenamed=Fusha u riemërua IfLoginDoesNotExistsCheckCreateUser=Nëse përdoruesi nuk ekziston ende, duhet të kontrolloni opsionin "Krijo përdorues" -ErrorConnection=Serveri "%s", emri i klasës së bazës së të dhënave " 'notranslate'>%s", login "%s", ose fjalëkalimi i bazës së të dhënave mund të jetë i gabuar ose versioni i klientit PHP mund të jetë shumë i vjetër në krahasim me versionin e bazës së të dhënave . -InstallChoiceRecommanded=Zgjedhja e rekomanduar për të instaluar versionin %s nga versioni juaj aktual class='notranslate'>%s +ErrorConnection=Server "%s", database name "%s", login "%s", or database password may be wrong or the PHP client version may be too old compared to the database version. +InstallChoiceRecommanded=Recommended choice to install version %s from your current version %s InstallChoiceSuggested=Zgjedhja e instalimit e sugjeruar nga instaluesi. MigrateIsDoneStepByStep=Versioni i synuar (%s) ka një boshllëk prej disa versionesh. Magjistari i instalimit do të kthehet për të sugjeruar një migrim të mëtejshëm pasi ky të përfundojë. CheckThatDatabasenameIsCorrect=Kontrollo që emri i bazës së të dhënave "%s" është i saktë. @@ -168,7 +168,7 @@ MigrationContractsEmptyDatesUpdateSuccess=Korrigjimi i datës së kontratës bos MigrationContractsEmptyDatesNothingToUpdate=Asnjë datë e zbrazët e kontratës për t'u korrigjuar MigrationContractsEmptyCreationDatesNothingToUpdate=Asnjë datë e krijimit të kontratës për t'u korrigjuar MigrationContractsInvalidDatesUpdate=Korrigjimi i kontratës me datë të keqe -MigrationContractsInvalidDateFix=Kontrata e saktë %s (Data e kontratës=%s, data e fillimit të shërbimit min=b0ecb2ec80) +MigrationContractsInvalidDateFix=Correct contract %s (Contract date=%s, Starting service date min=%s) MigrationContractsInvalidDatesNumber=%s kontratat u modifikuan MigrationContractsInvalidDatesNothingToUpdate=Asnjë datë me vlerë të keqe për t'u korrigjuar MigrationContractsIncoherentCreationDateUpdate=Korrigjimi i datës së krijimit të kontratës me vlerë të keqe diff --git a/htdocs/langs/sq_AL/interventions.lang b/htdocs/langs/sq_AL/interventions.lang index 8b8346f96d9..af58fa22b31 100644 --- a/htdocs/langs/sq_AL/interventions.lang +++ b/htdocs/langs/sq_AL/interventions.lang @@ -17,7 +17,7 @@ ModifyIntervention=Ndryshoni ndërhyrjen CloseIntervention=Ndërhyrja e ngushtë DeleteInterventionLine=Fshi linjën e ndërhyrjes ConfirmDeleteIntervention=Je i sigurt që dëshiron ta fshish këtë ndërhyrje? -ConfirmValidateIntervention=Jeni të sigurt që dëshironi ta vërtetoni këtë ndërhyrje me emrin %sb09a4b739f17f8z ? +ConfirmValidateIntervention=Are you sure you want to validate this intervention under name %s? ConfirmModifyIntervention=Jeni i sigurt që dëshironi ta modifikoni këtë ndërhyrje? ConfirmCloseIntervention=Je i sigurt që dëshiron ta mbyllësh këtë ndërhyrje? ConfirmDeleteInterventionLine=Je i sigurt që dëshiron ta fshish këtë linjë ndërhyrjeje? @@ -67,7 +67,7 @@ InterLineDuration=Ndërhyrja e kohëzgjatjes së linjës InterLineDesc=Ndërhyrja e përshkrimit të linjës RepeatableIntervention=Modeli i ndërhyrjes ToCreateAPredefinedIntervention=Për të krijuar një ndërhyrje të paracaktuar ose të përsëritur, krijoni një ndërhyrje të përbashkët dhe shndërroni atë në shabllon ndërhyrjeje -ConfirmReopenIntervention=Jeni i sigurt që dëshironi të hapni përsëri ndërhyrjen %s%s? GenerateInter=Gjeneroni ndërhyrje FichinterNoContractLinked=Ndërhyrja %s është krijuar pa një kontratë të lidhur. ErrorFicheinterCompanyDoesNotExist=Kompania nuk ekziston. Ndërhyrja nuk është krijuar. diff --git a/htdocs/langs/sq_AL/languages.lang b/htdocs/langs/sq_AL/languages.lang index 3758e70d828..5dbbfd4086a 100644 --- a/htdocs/langs/sq_AL/languages.lang +++ b/htdocs/langs/sq_AL/languages.lang @@ -27,7 +27,7 @@ Language_de_CH=gjermanisht (Zvicër) Language_de_LU=gjermanisht (Luksemburg) Language_el_GR=greke Language_el_CY=greqisht (Qipro) -Language_en_AE=English (United Arab Emirates) +Language_en_AE=Anglisht (Emiratet e Bashkuara Arabe) Language_en_AU=anglisht (Australi) Language_en_CA=Anglisht (Kanada) Language_en_GB=Anglisht (Mbretëria e Bashkuar) diff --git a/htdocs/langs/sq_AL/ldap.lang b/htdocs/langs/sq_AL/ldap.lang index acab6e1486f..fc9c61488f5 100644 --- a/htdocs/langs/sq_AL/ldap.lang +++ b/htdocs/langs/sq_AL/ldap.lang @@ -1,5 +1,5 @@ # Dolibarr language file - Source file is en_US - ldap -YouMustChangePassNextLogon=Fjalëkalimi për përdoruesin %s%s duhet të ndryshohet. +YouMustChangePassNextLogon=Password for user %s on the domain %s must be changed. UserMustChangePassNextLogon=Përdoruesi duhet të ndryshojë fjalëkalimin në domenin %s LDAPInformationsForThisContact=Informacion në bazën e të dhënave LDAP për këtë kontakt LDAPInformationsForThisUser=Informacion në bazën e të dhënave LDAP për këtë përdorues diff --git a/htdocs/langs/sq_AL/mails.lang b/htdocs/langs/sq_AL/mails.lang index d27096dded2..463ffdd60f0 100644 --- a/htdocs/langs/sq_AL/mails.lang +++ b/htdocs/langs/sq_AL/mails.lang @@ -2,14 +2,14 @@ Mailing=Dërgimi me email EMailing=Dërgimi me email EMailings=Emailet -SMSings=SMSings +SMSings=SMS AllEMailings=Të gjitha emailet MailCard=Karta e postës elektronike MailRecipients=Marrësit MailRecipient=Marrësi MailTitle=Përshkrimi MailFrom=Nga -PhoneFrom=From +PhoneFrom=Nga MailErrorsTo=Gabimet në MailReply=Ti përgjigjeni MailTo=për të @@ -26,7 +26,7 @@ BodyNotIn=Jo në trup ShowEMailing=Shfaq dërgimin me email ListOfEMailings=Lista e postimeve elektronike NewMailing=E-mail i ri -NewSMSing=New smsing +NewSMSing=SMS i ri EditMailing=Redakto dërgimin me email ResetMailing=Ridërgo email DeleteMailing=Fshi email-in @@ -50,10 +50,10 @@ MailingStatusReadAndUnsubscribe=Lexoni dhe çregjistrohuni ErrorMailRecipientIsEmpty=Marrësi i emailit është bosh WarningNoEMailsAdded=Nuk ka email të ri për t'u shtuar në listën e marrësve. ConfirmValidMailing=Jeni i sigurt që dëshironi ta vërtetoni këtë dërgim me email? -ConfirmResetMailing=Paralajmërim, duke rifilluar dërgimin me email %sb09a4b739f17f8z, do t'ju lejojë, ri-dërgimin e këtij emaili në një postim me shumicë. Jeni i sigurt që dëshironi ta bëni këtë? +ConfirmResetMailing=Warning, by re-initializing emailing %s, you will allow the re-sending this email in a bulk mailing. Are you sure you want to do this? ConfirmDeleteMailing=Jeni i sigurt që dëshironi ta fshini këtë email? NbOfUniqueEMails=Numri i emaileve unike -NbOfUniquePhones=No. of unique phones +NbOfUniquePhones=Numri i telefonave unikë NbOfEMails=Nr. i Email-eve TotalNbOfDistinctRecipients=Numri i marrësve të veçantë NoTargetYet=Nuk është përcaktuar ende asnjë marrës (Kalo në skedën "Marrësit") @@ -147,7 +147,7 @@ UseFormatFileEmailToTarget=Skedari i importuar duhet të ketë format em UseFormatInputEmailToTarget=Fut një varg me format email;name;firstname;tjetër MailAdvTargetRecipients=Marrësit (përzgjedhja e avancuar) AdvTgtTitle=Plotësoni fushat e hyrjes për të zgjedhur paraprakisht palët e treta ose kontaktet/adresat për të synuar -AdvTgtSearchTextHelp=Përdor %% si shkronja të ngurta. Për shembull, për të gjetur të gjithë artikujt si jean, joe, jim, mund të futni j%%, mund të përdorni gjithashtu ; si ndarës për vlerën dhe përdorimin! për përveç kësaj vlere. Për shembull jean;joe;jim%%;!jimo;!jimab07e5dacz0 span> do të synojë të gjitha xhinset, joe, fillo me jim por jo jimo dhe jo gjithçka që fillon me jima +AdvTgtSearchTextHelp=Use %% as wildcards. For example to find all item like jean, joe, jim, you can input j%%, you can also use ; as separator for value, and use ! for except this value. For example jean;joe;jim%%;!jimo;!jima%% will target all jean, joe, start with jim but not jimo and not everything that starts with jima AdvTgtSearchIntHelp=Përdorni intervalin për të zgjedhur vlerën int ose float AdvTgtMinVal=Vlera minimale AdvTgtMaxVal=Vlera maksimale @@ -187,8 +187,8 @@ NoMoreRecipientToSendTo=Nuk ka më marrës për të dërguar email EmailOptedOut=Pronari i email-it ka kërkuar që të mos e kontaktojë më me këtë email EvenUnsubscribe=Përfshi email-et e tërheqjes EvenUnsubscribeDesc=Përfshini emailet e tërheqjes kur zgjidhni emailet si objektiva. E dobishme për emailet e shërbimit të detyrueshëm për shembull. -XEmailsDoneYActionsDone=%s email të parakualifikuar, %s emaile të përpunuara me sukses (për b0ecb2ec87f49f>z /veprimet e kryera) -helpWithAi=Generate message from AI -YouCanMakeSomeInstructionForEmail=You can make some instructions for your Email (Example: generate image in email template...) -ModelTemplate=Email template -YouCanChooseAModelForYouMailContent= You can choose one of template models or generate one with AI +XEmailsDoneYActionsDone=%s emails pre-qualified, %s emails successfully processed (for %s record/actions done) +helpWithAi=Gjeneroni mesazh nga AI +YouCanMakeSomeInstructionForEmail=Ju mund të bëni disa udhëzime për emailin tuaj (Shembull: gjeneroni imazh në shabllonin e emailit...) +ModelTemplate=Modeli i postës elektronike +YouCanChooseAModelForYouMailContent= Ju mund të zgjidhni një nga modelet shabllone ose të krijoni një me AI diff --git a/htdocs/langs/sq_AL/main.lang b/htdocs/langs/sq_AL/main.lang index a3ab998b935..3be12a7716f 100644 --- a/htdocs/langs/sq_AL/main.lang +++ b/htdocs/langs/sq_AL/main.lang @@ -9,7 +9,7 @@ DIRECTION=ltr # cid0kr is for Korean # DejaVuSans is for some Eastern languages, some Asian languages and some Arabic languages # freemono is for ru_RU or uk_UA, uz_UZ -# freeserif is for Tamil +# freeserif is for Tamil or Ethiopian FONTFORPDF=helvetica FONTSIZEFORPDF=10 SeparatorDecimal=, @@ -68,7 +68,7 @@ ErrorNoRequestInError=Asnjë kërkesë e gabuar ErrorServiceUnavailableTryLater=Shërbimi nuk ofrohet për momentin. Provo sërish më vonë. ErrorDuplicateField=Vlera e kopjuar në një fushë unike ErrorSomeErrorWereFoundRollbackIsDone=U gjetën disa gabime. Ndryshimet janë rikthyer. -ErrorConfigParameterNotDefined=Parametri %s nuk është i përcaktuar në skedarin e shiritit conf.php. +ErrorConfigParameterNotDefined=Parameter %s is not defined in the Dolibarr config file conf.php. ErrorCantLoadUserFromDolibarrDatabase=Gjetja e përdoruesit %s dështoi në bazën e të dhënave Doo. ErrorNoVATRateDefinedForSellerCountry=Gabim, nuk janë përcaktuar tarifat e TVSH-së për shtetin '%s'. ErrorNoSocialContributionForSellerCountry=Gabim, nuk është përcaktuar lloji i taksave sociale/fiskale për shtetin '%s'. @@ -103,7 +103,7 @@ RecordDeleted=Regjistrimi u fshi RecordGenerated=Regjistrimi i krijuar LevelOfFeature=Niveli i veçorive NotDefined=E pa përcaktuar -DolibarrInHttpAuthenticationSoPasswordUseless=Modaliteti i vërtetimit të Dolibarr është caktuar në %sb09a4b739f17f8z class='notranslate'>conf.php.
Kjo do të thotë që fjalëkalimi është i jashtëm për Dolibarr, kështu që ndryshimi i kësaj fushe mund të mos ketë efekt. +DolibarrInHttpAuthenticationSoPasswordUseless=Dolibarr authentication mode is set to %s in configuration file conf.php.
This means that the password database is external to Dolibarr, so changing this field may have no effect. Administrator=Administratori i sistemit AdministratorDesc=Administratori i sistemit (mund të administrojë përdoruesin, lejet, por edhe konfigurimin e sistemit dhe konfigurimin e moduleve) Undefined=E papërcaktuar @@ -131,7 +131,7 @@ TechnicalID=ID teknike LineID=ID e linjës NotePublic=Shënim (publik) NotePrivate=Shënim (privat) -PrecisionUnitIsLimitedToXDecimals=Dolibarr u konfigurua për të kufizuar saktësinë e çmimeve të njësisë në %sb09a4b78z0f1span . +PrecisionUnitIsLimitedToXDecimals=Dolibarr was setup to limit precision of unit prices to %s decimals. DoTest=Test ToFilter=Filtro NoFilter=Pa filtër @@ -172,7 +172,7 @@ Close=Mbyll CloseAs=Cakto statusin në CloseBox=Hiq miniaplikacionin nga paneli yt Confirm=Konfirmo -ConfirmSendCardByMail=Dëshiron vërtet të dërgosh përmbajtjen e kësaj karte me postë te %sb09a4b739f17f /span>? +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to %s? Delete=Fshi Remove=Hiq Resiliate=Përfundoni @@ -189,7 +189,7 @@ SaveAndStay=Kurseni dhe qëndroni SaveAndNew=Ruaj dhe e re TestConnection=Testoni lidhjen ToClone=Klon -ConfirmCloneAsk=Jeni i sigurt që dëshironi të klononi objektin %sb09a4b739f17f8z>%s? ConfirmClone=Zgjidhni të dhënat që dëshironi të klononi: NoCloneOptionsSpecified=Nuk janë përcaktuar të dhëna për klonim. Of=e @@ -267,7 +267,7 @@ Numero=Numri Limit=Kufiri Limits=Limitet Logout=Shkyç -NoLogoutProcessWithAuthMode=Nuk ka veçori të zbatueshme shkëputjeje me modalitetin e vërtetimit %sb09a4b739f17f +NoLogoutProcessWithAuthMode=No applicative disconnect feature with authentication mode %s Connection=Identifikohu Setup=Konfiguro Alert=Alarmi @@ -420,6 +420,8 @@ TotalTTCShort=Totali (përfshirë taksat) TotalHT=Totali (pa taksa) TotalHTforthispage=Totali (pa taksa) për këtë faqe Totalforthispage=Totali për këtë faqe +GrandTotal=Total i madh +TotalforAllPages=Totali për të gjitha faqet TotalTTC=Totali (përfshirë taksat) TotalTTCToYourCredit=Totali (përfshirë tatimin) në kreditin tuaj TotalVAT=Taksa totale @@ -502,7 +504,7 @@ Completed=E përfunduar Running=Në vazhdim RequestAlreadyDone=Kërkesa është regjistruar tashmë Filter=Filtro -FilterOnInto=Kriteret e kërkimit '%s' në fusha ' notranslate'>%s +FilterOnInto=Search criteria '%s' into fields %s RemoveFilter=Hiq filtrin ChartGenerated=Grafiku u krijua ChartNotGenerated=Grafiku nuk u krijua @@ -647,6 +649,7 @@ ReportName=Emri i raportit ReportPeriod=Periudha e raportimit ReportDescription=Përshkrimi Report=Raportoni +Reports=Reports Keyword=Fjalë kyçe Origin=Origjina Legend=Legjenda @@ -757,7 +760,7 @@ MenuMembers=Anëtarët MenuAgendaGoogle=Axhenda e Google MenuTaxesAndSpecialExpenses=Taksat | Shpenzime të veçanta ThisLimitIsDefinedInSetup=Kufiri i Dolibarr (Menu home-setup-security): %s Kb, kufiri PHP: %s Kb -ThisLimitIsDefinedInSetupAt=Kufiri i dolibarr (Menyja %s): %s Kb, kufiri PHP (Param b0ecb9fpanz80f >): %s Kb +ThisLimitIsDefinedInSetupAt=Dolibarr limit (Menu %s): %s Kb, PHP limit (Param %s): %s Kb NoFileFound=Asnjë dokument i ngarkuar CurrentUserLanguage=Gjuha aktuale CurrentTheme=Tema aktuale @@ -787,7 +790,7 @@ Merge=Shkrihet DocumentModelStandardPDF=Modeli standard PDF PrintContentArea=Shfaq faqen për të printuar zonën kryesore të përmbajtjes MenuManager=Menaxheri i menysë -WarningYouAreInMaintenanceMode=Paralajmërim, ju jeni në modalitetin e mirëmbajtjes: vetëm hyni %sb09a4b739f17f8>z lejohet të përdorë aplikacionin në këtë mënyrë. +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode: only login %s is allowed to use the application in this mode. CoreErrorTitle=Gabim sistemi CoreErrorMessage=Na vjen keq, ka ndodhur një gabim. Kontaktoni administratorin e sistemit tuaj për të kontrolluar regjistrat ose çaktivizoni $dolibarr_main_prod=1 për të marrë më shumë informacion. CreditCard=Kartë Krediti @@ -865,7 +868,7 @@ Access=Qasja SelectAction=Zgjidhni veprimin SelectTargetUser=Zgjidhni përdoruesin/punonjësin e synuar HelpCopyToClipboard=Përdorni Ctrl+C për të kopjuar në kujtesën e fragmenteve -SaveUploadedFileWithMask=Ruani skedarin në server me emrin "%s (otherwise>" %s") +SaveUploadedFileWithMask=Save file on server with name "%s" (otherwise "%s") OriginFileName=Emri origjinal i skedarit SetDemandReason=Cakto burimin SetBankAccount=Përcaktoni llogarinë bankare @@ -963,6 +966,7 @@ AutomaticallyCalculated=Llogaritur automatikisht TitleSetToDraft=Kthehu te drafti ConfirmSetToDraft=Jeni i sigurt që dëshironi të ktheheni në statusin Draft? ImportId=ID-ja e importit +Event=Ngjarja Events=Ngjarjet EMailTemplates=Modelet e postës elektronike FileNotShared=Skedari nuk është ndarë me publikun e jashtëm @@ -1048,7 +1052,7 @@ Select2NotFound=Nuk u gjet asnjë rezultat Select2Enter=Hyni Select2MoreCharacter=ose më shumë karakter Select2MoreCharacters=ose më shumë personazhe -Select2MoreCharactersMore=Sintaksa e kërkimit:b0342fccfda19bzlate class='translate |b04da'6f><5/08660 notranslate'> OSE (a|b)
(a|b)
> Çdo karakter (a*b)
^ Fillo me (^ab)
7063 $ Përfundojnë me (ab$)
+Select2MoreCharactersMore=Search syntax:
| OR (a|b)
* Any character (a*b)
^ Start with (^ab)
$ End with (ab$)
Select2LoadingMoreResults=Po ngarkon më shumë rezultate... Select2SearchInProgress=Kërkimi në vazhdim... SearchIntoThirdparties=Palëve të treta @@ -1180,7 +1184,6 @@ ConfirmAffectUserQuestion=Jeni i sigurt që dëshironi të caktoni përdoruesit ConfirmSetSupervisorQuestion=Jeni i sigurt që dëshironi të vendosni mbikëqyrësin në rekordet e zgjedhura %s? ConfirmUpdatePriceQuestion=Jeni i sigurt që dëshironi të përditësoni çmimin e %s rekordit(eve) të zgjedhura? CategTypeNotFound=Nuk u gjet asnjë lloj etikete për llojin e regjistrimeve -Rate=Vlerësoni SupervisorNotFound=Mbikëqyrësi nuk u gjet CopiedToClipboard=Kopjuar në kujtesën e fragmenteve InformationOnLinkToContract=Kjo shumë është vetëm totali i të gjitha linjave të kontratës. Asnjë nocion i kohës nuk merret parasysh. @@ -1213,6 +1216,7 @@ CanceledHidden=U anulua u fsheh CanceledShown=U shfaqur anuluar Terminate=Përfundoni Terminated=Përfundoi +Position=Pozicioni AddLineOnPosition=Shtoni rreshtin në pozicion (në fund nëse është bosh) ConfirmAllocateCommercial=Cakto konfirmimin e përfaqësuesit të shitjeve ConfirmAllocateCommercialQuestion=Jeni i sigurt që dëshironi të caktoni %s rekordet e zgjedhura? @@ -1230,6 +1234,7 @@ ExternalUser=Përdorues i jashtëm NoSpecificContactAddress=Asnjë kontakt apo adresë specifike NoSpecificContactAddressBis=Kjo skedë është e dedikuar për të detyruar kontakte ose adresa specifike për objektin aktual. Përdoreni atë vetëm nëse dëshironi të përcaktoni një ose disa kontakte ose adresa specifike për objektin kur informacioni për palën e tretë nuk është i mjaftueshëm ose jo i saktë. HideOnVCard=Fshih %s +ShowOnVCard=Shfaq %s AddToContacts=Shto adresën në kontaktet e mia LastAccess=Qasja e fundit UploadAnImageToSeeAPhotoHere=Ngarko një imazh nga skeda %s për të parë një foto këtu @@ -1259,4 +1264,7 @@ AmountSalary=Shuma e pagës InvoiceSubtype=Nëntipi i faturës ConfirmMassReverse=Konfirmim i kundërt me shumicë ConfirmMassReverseQuestion=Jeni i sigurt që dëshironi të ktheni mbrapsht rekordet e zgjedhura %s? - +ElementType=Lloji i elementit +ElementId=Id i elementit +Encrypted=E koduar +Settings=Cilësimet diff --git a/htdocs/langs/sq_AL/members.lang b/htdocs/langs/sq_AL/members.lang index 10006c607c1..f78468ca7cb 100644 --- a/htdocs/langs/sq_AL/members.lang +++ b/htdocs/langs/sq_AL/members.lang @@ -13,7 +13,7 @@ MembersTickets=Fleta e adresës së anëtarësimit FundationMembers=Anëtarët e fondacionit ListOfValidatedPublicMembers=Lista e anëtarëve publikë të vërtetuar ErrorThisMemberIsNotPublic=Ky anëtar nuk është publik -ErrorMemberIsAlreadyLinkedToThisThirdParty=Një anëtar tjetër (emri: %s, , classlog ='notranslate'>%s) është tashmë i lidhur me një palë të tretë class='notranslate '>
%s. Hiqe fillimisht këtë lidhje sepse një palë e tretë nuk mund të lidhet vetëm me një anëtar (dhe anasjelltas). +ErrorMemberIsAlreadyLinkedToThisThirdParty=Another member (name: %s, login: %s) is already linked to a third party %s. Remove this link first because a third party can't be linked to only a member (and vice versa). ErrorUserPermissionAllowsToLinksToItselfOnly=Për arsye sigurie, duhet t'ju jepen lejet për të modifikuar të gjithë përdoruesit që të mund të lidhni një anëtar me një përdorues që nuk është i juaji. SetLinkToUser=Lidhje me një përdorues të Dolibarr SetLinkToThirdParty=Lidhja me një palë të tretë të Dolibarr @@ -202,7 +202,7 @@ LastMemberDate=Data e fundit e anëtarësimit LatestSubscriptionDate=Data e fundit e kontributit MemberNature=Natyra e anëtarit MembersNature=Natyra e anëtarëve -Public=%s mund të publikojë anëtarësimin tim në regjistrin publik +Public=%s can publish my membership in the public register MembershipPublic=Anëtarësimi publik NewMemberbyWeb=U shtua një anëtar i ri. Në pritje të miratimit NewMemberForm=Formulari i ri i anëtarësimit @@ -239,10 +239,10 @@ MemberLastname=Mbiemri i anëtarit MemberCodeDesc=Kodi i Anëtarit, unik për të gjithë anëtarët MemberSubscriptionStartFirstDayOf=Data e fillimit të anëtarësimit korrespondon me ditën e parë të a MemberSubscriptionStartAfter=Periudha minimale para hyrjes në fuqi të datës së fillimit të një abonimi, përveç rinovimeve (shembull +3m = +3 muaj, -5d = -5 ditë, +1Y = +1 vit) -SubscriptionLinkedToConciliatedTransaction=Membership is linked to a conciliated transaction so this modification is not allowed. -ConfirmMassSubsriptionCreation=Confirm subscription creation -ConfirmMassSubsriptionCreationQuestion=Are you sure you want to create the %s selected subscription(s)? -XSubsriptionCreated=%s subscription(s) created -XSubsriptionErrors=%s subscription(s) where in error -CreateSubscription=Create subscription -WarningNoComplementaryActionDone=No Complementary action on recording will be executed with this massaction +SubscriptionLinkedToConciliatedTransaction=Anëtarësimi është i lidhur me një transaksion të pajtimit, kështu që ky modifikim nuk lejohet. +ConfirmMassSubsriptionCreation=Konfirmo krijimin e abonimit +ConfirmMassSubsriptionCreationQuestion=Jeni i sigurt që dëshironi të krijoni abonimin(et) e zgjedhura %s? +XSubsriptionCreated=%s abonim(a) u krijua +XSubsriptionErrors=%s abonim(a) ku është gabim +CreateSubscription=Krijo abonim +WarningNoComplementaryActionDone=Asnjë veprim plotësues në regjistrim nuk do të ekzekutohet me këtë masakër diff --git a/htdocs/langs/sq_AL/modulebuilder.lang b/htdocs/langs/sq_AL/modulebuilder.lang index 8faf0580333..c9852a9e9e0 100644 --- a/htdocs/langs/sq_AL/modulebuilder.lang +++ b/htdocs/langs/sq_AL/modulebuilder.lang @@ -5,7 +5,7 @@ EnterNameOfModuleDesc=Futni emrin e modulit/aplikacionit për të krijuar pa hap EnterNameOfObjectDesc=Futni emrin e objektit për të krijuar pa hapësira. Përdorni shkronja të mëdha për të ndarë fjalët (Për shembull: Objekti im, Student, Mësues...). Do të krijohen skedari i klasës CRUD, faqet për të renditur/shtuar/redaktuar/fshirë objektin dhe skedarët SQL. EnterNameOfDictionaryDesc=Futni emrin e fjalorit për të krijuar pa hapësira. Përdorni shkronja të mëdha për të ndarë fjalët (Për shembull: MyDico...). Do të gjenerohet skedari i klasës, por edhe skedari SQL. ModuleBuilderDesc2=Rruga ku gjenerohen/redaktohen modulet (drejtoria e parë për modulet e jashtme e përcaktuar në %s): %s -ModuleBuilderDesc3=Module të gjeneruara/të redaktueshme u gjetën: %sb0a65d071f6fc9>z0 +ModuleBuilderDesc3=Generated/editable modules found: %s ModuleBuilderDesc4=Një modul zbulohet si "modul për ndërtuesin e modulit" kur skedari %sb0f065 ekziston në rrënjën e drejtorisë së modulit NewModule=Moduli i ri NewObjectInModulebuilder=Objekti i ri @@ -27,7 +27,7 @@ ModuleBuilderDeschooks=Kjo skedë është e dedikuar për grepa. ModuleBuilderDescwidgets=Kjo skedë është e dedikuar për të menaxhuar/ndërtuar miniaplikacione. ModuleBuilderDescbuildpackage=Këtu mund të gjeneroni një skedar paketë "gati për t'u shpërndarë" (një skedar .zip i normalizuar) të modulit tuaj dhe një skedar dokumentacioni "gati për t'u shpërndarë". Thjesht klikoni në butonin për të ndërtuar skedarin e paketës ose dokumentacionit. EnterNameOfModuleToDeleteDesc=Ju mund të fshini modulin tuaj. PARALAJMËRIM: Të gjithë skedarët e kodimit të modulit (të krijuara ose të krijuara me dorë) DHE të dhënat dhe dokumentacioni i strukturuar do të fshihen! -EnterNameOfObjectToDeleteDesc=You can delete an object. WARNING: All coding files (generated or created manually) related to the object will be deleted! +EnterNameOfObjectToDeleteDesc=Ju mund të fshini një objekt. PARALAJMËRIM: Të gjithë skedarët e kodimit (të krijuara ose të krijuara manualisht) që lidhen me objektin do të fshihen! DangerZone=Zone e rrezikshme BuildPackage=Ndërtoni paketën BuildPackageDesc=Ju mund të gjeneroni një paketë zip të aplikacionit tuaj në mënyrë që të jeni gati ta shpërndani atë në çdo Dolibarr. Mund ta shpërndani ose ta shisni gjithashtu në treg si DoliStore.com. @@ -58,7 +58,7 @@ LanguageFile=Skedari për gjuhën ObjectProperties=Vetitë e objektit Property=Prona PropertyDesc=Një veti është një atribut që karakterizon një objekt. Ky atribut ka një kod, një etiketë dhe një lloj me disa opsione. -ConfirmDeleteProperty=Jeni i sigurt që dëshironi të fshini pronën %s%s? This will change code in PHP class but also remove column from table definition of object. NotNull=Jo NULL NotNullDesc=1=Cakto bazën e të dhënave në NOT NULL, 0=Lejo vlerat null, -1=Lejo vlerat null duke e detyruar vlerën në NULL nëse është bosh ('' ose 0) SearchAll=Përdoret për 'kërko të gjitha' @@ -91,10 +91,10 @@ ListOfMenusEntries=Lista e hyrjeve në menu ListOfDictionariesEntries=Lista e hyrjeve të fjalorëve ListOfPermissionsDefined=Lista e lejeve të përcaktuara SeeExamples=Shikoni shembuj këtu -EnabledDesc=Kusht për ta pasur këtë fushë aktive.

Shembuj:b0342fccfda19>bz0
isModEnabled('anothermodule')
getDolGlobalString('MYMODULE_OPTION')==2 +EnabledDesc=Condition to have this field active.

Examples:
1
isModEnabled('anothermodule')
getDolGlobalString('MYMODULE_OPTION')==2 VisibleDesc=A është fusha e dukshme? (Shembuj: 0=Asnjëherë i dukshëm, 1=I dukshëm në listë dhe krijo/përditëso/shiko formularët, 2=Duket vetëm në listë, 3=Duket vetëm në formën e krijimit/përditësimit/shikimit (jo në lista), 4=I dukshëm në lista dhe përditëso/shiko vetëm formularin (jo krijo), 5=Duket në listë dhe shiko vetëm formularin (jo krijo, jo përditësoi).

Përdorimi i një vlere negative do të thotë që fusha nuk shfaqet si parazgjedhje në listë, por mund të zgjidhet për t'u parë). ItCanBeAnExpression=Mund të jetë një shprehje. Shembull:
preg_match('/public/', $_SERVER['PHP_SELF'])?0:1
$er ->hasRight('pushime', 'define_pushime')?1:5 -DisplayOnPdfDesc=Shfaqni këtë fushë në dokumente të përputhshme PDF, ju mund të menaxhoni pozicionin me fushën "Pozicioni".
Për dokumentin :
0 = nuk shfaqet
1 = nuk shfaqPër linjat e dokumentit:

0 = nuk shfaqet b0342fccfdaspan19>0 = shfaqet në një kolonë
3 = shfaq në kolonën e përshkrimit të rreshtit pas përshkrimit
4 = shfaq në kolonën e përshkrimit pas përshkrimit vetëm nëse jo bosh +DisplayOnPdfDesc=Display this field on compatible PDF documents, you can manage position with "Position" field.
For document :
0 = not displayed
1 = display
2 = display only if not empty

For document lines :
0 = not displayed
1 = displayed in a column
3 = display in line description column after the description
4 = display in description column after the description only if not empty DisplayOnPdf=Në PDF IsAMeasureDesc=A mund të grumbullohet vlera e fushës për të futur një total në listë? (Shembuj: 1 ose 0) SearchAllDesc=A përdoret fusha për të bërë një kërkim nga mjeti i kërkimit të shpejtë? (Shembuj: 1 ose 0) @@ -111,7 +111,7 @@ TriggerDefDesc=Përcaktoni në skedarin e aktivizimit kodin që dëshironi të e SeeIDsInUse=Shikoni ID-të në përdorim në instalimin tuaj SeeReservedIDsRangeHere=Shikoni gamën e ID-ve të rezervuara ToolkitForDevelopers=Paketa e veglave për zhvilluesit e Dolibarr -TryToUseTheModuleBuilder=Nëse keni njohuri për SQL dhe PHP, mund të përdorni magjistarin e ndërtuesit të moduleve.
Aktivizo modulin %s dhe përdor magjistarin duke klikuar në menynë lart djathtas.
Kujdes: Ky është një veçori e avancuar e zhvilluesit, bëni b0aee83365837>t<0z span class='notranslate'>
eksperiment në faqen tuaj të prodhimit! +TryToUseTheModuleBuilder=If you have knowledge of SQL and PHP, you may use the native module builder wizard.
Enable the module %s and use the wizard by clicking the on the top right menu.
Warning: This is an advanced developer feature, do not experiment on your production site! SeeTopRightMenu=Shiko në menynë lart djathtas AddLanguageFile=Shto skedarin e gjuhës YouCanUseTranslationKey=Këtu mund të përdorni një çelës që është çelësi i përkthimit që gjendet në skedarin e gjuhës (shih skedën "Gjuhët") @@ -148,7 +148,7 @@ CSSListClass=CSS për listën NotEditable=E pa modifikueshme ForeignKey=Çelësi i huaj ForeignKeyDesc=Nëse vlera e kësaj fushe duhet të garantohet se ekziston në një tabelë tjetër. Fut këtu një sintaksë që përputhet me vlerën: emri i tabelës.parentfieldtocheck -TypeOfFieldsHelp=Shembull:
varchar(99)
email
-telefon
ip
url
fjalëkalimi span>double(24,8)
reale
tekstb0342fccfda19>b0342fccfda19>z
data
datetime
class='notranslate'span
integer
integer:ClassName:relativepath/to/classfile.class.php[:1[:filter]]
'1' do të thotë se ne shtojmë një buton + pas kombinimit për të krijuar rekordin
'filtri' është një Kushti i sintaksës së filtrit universal, shembull: '((statusi:=:1) AND (fk_user:=:__USER_ID__) AND (entiteti:IN:(__SHARED_ENTITIES__))' +TypeOfFieldsHelp=Example:
varchar(99)
email
phone
ip
url
password
double(24,8)
real
text
html
date
datetime
timestamp
integer
integer:ClassName:relativepath/to/classfile.class.php[:1[:filter]]

'1' means we add a + button after the combo to create the record
'filter' is an Universal Filter syntax condition, example: '((status:=:1) AND (fk_user:=:__USER_ID__) AND (entity:IN:(__SHARED_ENTITIES__))' TypeOfFieldsHelpIntro=Ky është lloji i fushës/atributit. AsciiToHtmlConverter=Konvertuesi Ascii në HTML AsciiToPdfConverter=Konvertuesi Ascii në PDF @@ -180,9 +180,9 @@ FailedToAddCodeIntoDescriptor=Shtimi i kodit në përshkrues dështoi. Kontrollo DictionariesCreated=Fjalori %s u krijua me sukses DictionaryDeleted=Fjalori %s u hoq me sukses PropertyModuleUpdated=Vetia %s është përditësuar me sukses -InfoForApiFile=* Kur gjeneroni skedar për herë të parë, atëherë të gjitha metodat do të krijohen për çdo objekt.
* Kur klikoni në hiq ju thjesht hiqni të gjitha metodat e klasës ='notranslate'>
objekt i zgjedhur. +InfoForApiFile=* When you generate file for the first time then all methods will be created for each object.
* When you click in remove you just remove all methods for the selected object. SetupFile=Faqe për konfigurimin e modulit -EmailingSelectors=Emails selectors +EmailingSelectors=Zgjedhësit e emaileve EmailingSelectorDesc=Ju mund të gjeneroni dhe modifikoni këtu skedarët e klasës për të siguruar përzgjedhës të rinj të synimeve të postës elektronike për modulin e dërgimit masiv të postës elektronike EmailingSelectorFile=Skedari i përzgjedhësit të emaileve NoEmailingSelector=Nuk ka skedar përzgjedhës të postës elektronike diff --git a/htdocs/langs/sq_AL/mrp.lang b/htdocs/langs/sq_AL/mrp.lang index c33971042bd..4c6fe9607c4 100644 --- a/htdocs/langs/sq_AL/mrp.lang +++ b/htdocs/langs/sq_AL/mrp.lang @@ -47,7 +47,7 @@ DateEndPlannedMo=Data e fundit e planifikuar KeepEmptyForAsap=Bosh do të thotë "Sa më shpejt të jetë e mundur" EstimatedDuration=Kohëzgjatja e parashikuar EstimatedDurationDesc=Kohëzgjatja e parashikuar për të prodhuar (ose çmontuar) këtë produkt duke përdorur këtë BOM -ConfirmValidateBom=Jeni i sigurt që dëshironi të vërtetoni BOM me referencën %sb0a65d071f6f6 > (ju do të jeni në gjendje ta përdorni për të ndërtuar porosi të reja prodhuese) +ConfirmValidateBom=Are you sure you want to validate the BOM with the reference %s (you will be able to use it to build new Manufacturing Orders) ConfirmCloseBom=Jeni i sigurt që dëshironi ta anuloni këtë BOM (nuk do të mund ta përdorni më për të ndërtuar porosi të reja prodhimi)? ConfirmReopenBom=Jeni i sigurt që dëshironi ta rihapni këtë BOM (do të jeni në gjendje ta përdorni për të krijuar porosi të reja prodhuese) StatusMOProduced=Prodhuar @@ -65,6 +65,8 @@ ToProduce=Të prodhosh ToObtain=Për të marrë QtyAlreadyConsumed=Sasia e konsumuar tashmë QtyAlreadyProduced=Sasia e prodhuar tashmë +QtyAlreadyConsumedShort=Sasia e konsumuar +QtyAlreadyProducedShort=Sasia e prodhuar QtyRequiredIfNoLoss=Sasia e nevojshme për të prodhuar sasinë e përcaktuar në BOM nëse nuk ka humbje (nëse efikasiteti i prodhimit është 100%%) ConsumeOrProduce=Konsumoni ose prodhoni ConsumeAndProduceAll=Konsumoni dhe prodhoni të gjitha @@ -98,9 +100,9 @@ WorkstationSetup = Vendosja e stacioneve të punës WorkstationSetupPage = Faqja e konfigurimit të stacioneve të punës WorkstationList=Lista e stacioneve të punës WorkstationCreate=Shto stacion të ri pune -ConfirmEnableWorkstation=Jeni të sigurt që dëshironi të aktivizoni stacionin e punës %s? +ConfirmEnableWorkstation=Are you sure you want to enable workstation %s ? EnableAWorkstation=Aktivizo një stacion pune -ConfirmDisableWorkstation=Jeni i sigurt që dëshironi të çaktivizoni stacionin e punës %s? +ConfirmDisableWorkstation=Are you sure you want to disable workstation %s ? DisableAWorkstation=Çaktivizo një stacion pune DeleteWorkstation=Fshi NbOperatorsRequired=Numri i operatorëve të kërkuar @@ -134,4 +136,3 @@ NoRemainQtyToDispatch=Nuk ka mbetur asnjë sasi për t'u ndarë THMOperatorEstimatedHelp=Kostoja e vlerësuar e operatorit për orë. Do të përdoret për të vlerësuar koston e një BOM duke përdorur këtë stacion pune. THMMachineEstimatedHelp=Kostoja e vlerësuar e makinës për orë. Do të përdoret për të vlerësuar koston e një BOM duke përdorur këtë stacion pune. - diff --git a/htdocs/langs/sq_AL/multicurrency.lang b/htdocs/langs/sq_AL/multicurrency.lang index e5e3d5736d5..4e1b92cc03f 100644 --- a/htdocs/langs/sq_AL/multicurrency.lang +++ b/htdocs/langs/sq_AL/multicurrency.lang @@ -7,12 +7,12 @@ multicurrency_syncronize_error=Gabim sinkronizimi: %s MULTICURRENCY_USE_RATE_ON_DOCUMENT_DATE=Përdorni datën e dokumentit për të gjetur kursin e monedhës, në vend që të përdorni kursin më të fundit të njohur multicurrency_useOriginTx=Kur një objekt krijohet nga një tjetër, mbani normën origjinale nga objekti burimor (përndryshe përdorni normën më të fundit të njohur) CurrencyLayerAccount=CurrencyLayer API -CurrencyLayerAccount_help_to_synchronize=Ju duhet të krijoni një llogari në faqen e internetit %s për të përdorur këtë funksion.
Merrni b0aee83fz058<3 /span>Çelësi API
.
Nëse përdorni një llogari falas, nuk mund ta ndryshoni monedha burimore (USD si parazgjedhje).
Nëse monedha juaj kryesore nuk është USD, aplikacioni do ta rillogarisë atë automatikisht.

Ju jeni i kufizuar në 1000 sinkronizime në muaj. +CurrencyLayerAccount_help_to_synchronize=You must create an account on website %s to use this functionality.
Get your API key.
If you use a free account, you can't change the source currency (USD by default).
If your main currency is not USD, the application will automatically recalculate it.

You are limited to 1000 synchronizations per month. multicurrency_appId=Tasti API multicurrency_appCurrencySource=Monedha burimore multicurrency_alternateCurrencySource=Monedha e burimit alternativ CurrenciesUsed=Monedhat e përdorura -CurrenciesUsed_help_to_add=Shtoni monedhat dhe tarifat e ndryshme që duhet të përdorni në propozimet, urdhra etj. +CurrenciesUsed_help_to_add=Add the different currencies and rates you need to use on your proposals, orders etc. rate=norma MulticurrencyReceived=Marrë, monedhë origjinale MulticurrencyRemainderToTake=Shuma e mbetur, monedha origjinale @@ -25,7 +25,7 @@ CreateRate=Krijo një normë FormCreateRate=Krijimi i vlerës FormUpdateRate=Modifikimi i normës successRateCreate=Norma për monedhën %s është shtuar në bazën e të dhënave -ConfirmDeleteLineRate=Jeni i sigurt që dëshironi të hiqni normën %s për monedhën %s në %s data? +ConfirmDeleteLineRate=Are you sure you want to remove the %s rate for currency %s on %s date? DeleteLineRate=Shkalla e qartë successRateDelete=Vlerësimi u fshi errorRateDelete=Gabim gjatë fshirjes së tarifës diff --git a/htdocs/langs/sq_AL/oauth.lang b/htdocs/langs/sq_AL/oauth.lang index eecd7ee7029..1a409ff8efd 100644 --- a/htdocs/langs/sq_AL/oauth.lang +++ b/htdocs/langs/sq_AL/oauth.lang @@ -12,8 +12,8 @@ TokenDeleted=Shenja u fshi GetAccess=Klikoni këtu për të marrë një shenjë RequestAccess=Klikoni këtu për të kërkuar/rinovuar aksesin dhe për të marrë një shenjë të re DeleteAccess=Klikoni këtu për të fshirë shenjën -RedirectURL=Redirect URL -UseTheFollowingUrlAsRedirectURI=Use the following URL as the Redirect URL when creating your credentials with your OAuth provider +RedirectURL=URL-ja e ridrejtuar +UseTheFollowingUrlAsRedirectURI=Përdorni URL-në e mëposhtme si URL-në e ridrejtimit kur krijoni kredencialet tuaja me ofruesin tuaj OAuth ListOfSupportedOauthProviders=Shtoni ofruesit tuaj të tokenit OAuth2. Më pas, shkoni në faqen tuaj të administratorit të ofruesit të OAuth për të krijuar/merr një ID dhe Sekret të OAuth dhe ruajini këtu. Pasi të keni mbaruar, ndizni skedën tjetër për të gjeneruar shenjën tuaj. OAuthSetupForLogin=Faqe për të menaxhuar (gjeneruar/fshirë) shenjat OAuth SeePreviousTab=Shih skedën e mëparshme @@ -29,7 +29,7 @@ OAUTH_GOOGLE_SECRET=OAuth Google Secret OAUTH_GITHUB_NAME=Shërbimi OAuth GitHub OAUTH_GITHUB_ID=OAuth GitHub ID OAUTH_GITHUB_SECRET=OAuth GitHub Sekret -OAUTH_URL_FOR_CREDENTIAL=Shko te kjo faqe për të krijuar ose marrë ID-në tuaj OAuth dhe sekretin +OAUTH_URL_FOR_CREDENTIAL=Go to this page to create or get your OAuth ID and Secret OAUTH_STRIPE_TEST_NAME=Testi i vijave OAuth OAUTH_STRIPE_LIVE_NAME=OAuth Stripe Live OAUTH_ID=ID-ja e klientit OAuth diff --git a/htdocs/langs/sq_AL/orders.lang b/htdocs/langs/sq_AL/orders.lang index 09d63152e3a..2d1ebc8b5bf 100644 --- a/htdocs/langs/sq_AL/orders.lang +++ b/htdocs/langs/sq_AL/orders.lang @@ -103,10 +103,10 @@ disablelinefree=Nuk ka linja falas CloseOrder=Mbyll porosinë ConfirmCloseOrder=Jeni i sigurt që dëshironi ta caktoni këtë porosi për të dorëzuar? Pasi një porosi të dorëzohet, ajo mund të vendoset në faturim. ConfirmDeleteOrder=Jeni i sigurt që dëshironi ta fshini këtë porosi? -ConfirmValidateOrder=Jeni të sigurt që dëshironi ta vërtetoni këtë porosi me emrin %sb09a4b739f17f8z ? -ConfirmUnvalidateOrder=Jeni i sigurt që dëshironi të rivendosni rendin %s në statusin e draftit ? +ConfirmValidateOrder=Are you sure you want to validate this order under name %s? +ConfirmUnvalidateOrder=Are you sure you want to restore order %s to draft status? ConfirmCancelOrder=Jeni i sigurt që dëshironi ta anuloni këtë porosi? -ConfirmMakeOrder=Jeni i sigurt që dëshironi të konfirmoni se e keni bërë këtë porosi në %sb09a4b739f17f80 >? +ConfirmMakeOrder=Are you sure you want to confirm you made this order on %s? GenerateBill=Gjeneroni faturë ClassifyShipped=Klasifikoni dorëzuar PassedInShippedStatus=klasifikuar dorëzuar @@ -125,12 +125,12 @@ OrderMode=Mënyra e porositjes AuthorRequest=Kërkoni autor UserWithApproveOrderGrant=Përdoruesve u jepet leja e "miratimit të porosive". PaymentOrderRef=Pagesa e porosisë %s -ConfirmCloneOrder=Jeni të sigurt që dëshironi ta klononi këtë porosi %sb09a4b739f17f8z>%s? DispatchSupplierOrder=Po merr porosinë e blerjes %s FirstApprovalAlreadyDone=Miratimi i parë tashmë është bërë SecondApprovalAlreadyDone=Aprovimi i dytë tashmë është bërë SupplierOrderReceivedInDolibarr=Porosia e blerjes %s u mor %s -SupplierOrderSubmitedInDolibarr=Purchase Order %s submitted (%s) +SupplierOrderSubmitedInDolibarr=Porosia e blerjes %s u dorëzua (%s) SupplierOrderClassifiedBilled=Urdhri i blerjes %s u faturua OtherOrders=Porositë e tjera SupplierOrderValidatedAndApproved=Porosia e furnizuesit është vërtetuar dhe miratuar: %s diff --git a/htdocs/langs/sq_AL/other.lang b/htdocs/langs/sq_AL/other.lang index 22f3d3b0e57..ff044f4376c 100644 --- a/htdocs/langs/sq_AL/other.lang +++ b/htdocs/langs/sq_AL/other.lang @@ -94,7 +94,7 @@ AttachANewFile=Bashkangjit një skedar/dokument të ri LinkedObject=Objekti i lidhur NbOfActiveNotifications=Numri i njoftimeve (nr. i email-eve të marrësve) PredefinedMailTest=__(Përshëndetje)__\nKjo është një postë provë e dërguar në __EMAIL__.\nLinjat ndahen nga një karrocë kthimi.\n\n__SIGNATURE_USER__ -PredefinedMailTestHtml=__(Përshëndetje)__
Ky është një testb09a4b739f17f dërguar në __EMAIL__ (fjala test duhet të jetë me shkronja të zeza).
Rreshtat janë të ndara nga një karrocë kthimi.

__USER_SIGNATURE__ +PredefinedMailTestHtml=__(Hello)__
This is a test mail sent to __EMAIL__ (the word test must be in bold).
The lines are separated by a carriage return.

__USER_SIGNATURE__ PredefinedMailContentContract=__(Përshëndetje)__\n\n\n__(Sinqerisht)__\n\n__USER_SIGNATURE__ PredefinedMailContentSendInvoice=__(Përshëndetje)__\n\nJu lutemi gjeni të bashkangjitur faturën __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sinqerisht)__\n\n__USER_SIGNATURE__ PredefinedMailContentSendInvoiceReminder=__(Përshëndetje)__\n\nJu rikujtojmë se fatura __REF__ duket se nuk është paguar. Një kopje e faturës është bashkangjitur si kujtesë.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sinqerisht)__\n\n__USER_SIGNATURE__ @@ -187,9 +187,9 @@ BugTracker=Gjurmuesi i gabimeve SendNewPasswordDesc=Ky formular ju lejon të kërkoni një fjalëkalim të ri. Ai do të dërgohet në adresën tuaj të emailit.
Ndryshimi do të hyjë në fuqi sapo të klikoni në lidhjen e konfirmimit në email.
Kontrolloni kutinë tuaj. EnterNewPasswordHere=Shkruani fjalëkalimin tuaj të ri këtu BackToLoginPage=Kthehu në faqen e identifikimit -AuthenticationDoesNotAllowSendNewPassword=Modaliteti i vërtetimit është %s. >
Në këtë modalitet, Dolibarr nuk mund ta dijë dhe as të ndryshojë fjalëkalimin tuaj.
Kontakto administratorin e sistemit nëse dëshiron të ndryshosh fjalëkalimin. +AuthenticationDoesNotAllowSendNewPassword=Authentication mode is %s.
In this mode, Dolibarr can't know nor change your password.
Contact your system administrator if you want to change your password. EnableGDLibraryDesc=Instaloni ose aktivizoni bibliotekën GD në instalimin tuaj të PHP për të përdorur këtë opsion. -ProfIdShortDesc=ID-ja e profilit %s është një informacion i palës së tretë.
Për shembull, për shtetin %s, është kodi %s%s. DolibarrDemo=Demo Dolibarr ERP/CRM StatsByAmount=Statistikat për sasinë e produkteve/shërbimeve StatsByAmountProducts=Statistikat për sasinë e produkteve @@ -336,3 +336,5 @@ FTPFailedToUploadFile=Ngarkimi i skedarit dështoi %s. AddFolder=Krijo nje dosje FileWasCreateFolder=Dosja %s është krijuar FTPFailedToCreateFolder=Dështoi në krijimin e dosjes %s. +SelectADay=Zgjidhni një ditë në kalendar +SelectANewDate=Zgjidhni një datë të re diff --git a/htdocs/langs/sq_AL/partnership.lang b/htdocs/langs/sq_AL/partnership.lang index 878e3e2092d..53f55b50f45 100644 --- a/htdocs/langs/sq_AL/partnership.lang +++ b/htdocs/langs/sq_AL/partnership.lang @@ -55,7 +55,7 @@ PartnershipDedicatedToThisMember=Partneritet kushtuar këtij anëtari DatePartnershipStart=Data e fillimit DatePartnershipEnd=Data e përfundimit ReasonDecline=Refuzoni arsyen -ReasonDeclineOrCancel=Reason for refusal or cancellation +ReasonDeclineOrCancel=Arsyeja e refuzimit ose anulimit PartnershipAlreadyExist=Partneriteti tashmë ekziston ManagePartnership=Menaxhoni partneritetin BacklinkNotFoundOnPartnerWebsite=Lidhja e pasme nuk u gjet në faqen e internetit të partnerit @@ -91,8 +91,7 @@ CountLastUrlCheckError=Numri i gabimeve për kontrollin e fundit të URL-së LastCheckBacklink=Data e kontrollit të fundit të URL-së NewPartnershipRequest=Kërkesë e re për partneritet -NewPartnershipRequestDesc=Ky formular ju lejon të kërkoni të jeni pjesë e një prej programeve tona të partneritetit. Nëse keni nevojë për ndihmë për të plotësuar këtë formular, ju lutemi kontaktoni me email %sb09a4b739f17f8z span>. +NewPartnershipRequestDesc=This form allows you to request to be part of one of our partnership program. If you need help to fill this form, please contact by email %s. ThisUrlMustContainsAtLeastOneLinkToWebsite=Kjo faqe duhet të përmbajë të paktën një lidhje me një nga domenet e mëposhtme: %s IPOfApplicant=IP e aplikantit - diff --git a/htdocs/langs/sq_AL/paybox.lang b/htdocs/langs/sq_AL/paybox.lang index 831bbabc592..31a8e3bb0dc 100644 --- a/htdocs/langs/sq_AL/paybox.lang +++ b/htdocs/langs/sq_AL/paybox.lang @@ -13,7 +13,7 @@ PaymentCode=Kodi i pagesës PayBoxDoPayment=Paguani me Paybox YouWillBeRedirectedOnPayBox=Do të ridrejtoheni në faqen e sigurt të Paybox për të futur informacionin e kartës së kreditit Continue=Tjetri -SetupPayBoxToHavePaymentCreatedAutomatically=Konfiguro Paybox-in tuaj me url %s automatikisht, kur pagesa të krijohen në%s to have payment created automatically when validated by Paybox. YourPaymentHasBeenRecorded=Kjo faqe konfirmon që pagesa juaj është regjistruar. Faleminderit. YourPaymentHasNotBeenRecorded=Pagesa juaj NUK është regjistruar dhe transaksioni është anuluar. Faleminderit. AccountParameter=Parametrat e llogarisё diff --git a/htdocs/langs/sq_AL/paypal.lang b/htdocs/langs/sq_AL/paypal.lang index 3485208e1ff..828fbc4b27c 100644 --- a/htdocs/langs/sq_AL/paypal.lang +++ b/htdocs/langs/sq_AL/paypal.lang @@ -34,4 +34,4 @@ ARollbackWasPerformedOnPostActions=U krye një rikthim në të gjitha veprimet e ValidationOfPaymentFailed=Verifikimi i pagesës dështoi CardOwner=Mbajtësi i kartës PayPalBalance=Kredi Paypal -OnlineSubscriptionPaymentLine=Abonimi në linjë i regjistruar në %s
Paguar nëpërmjet b0ecb2ec87f49fzpan class='span>
Adresa IP e origjinës: %s
Identifikimi i transaksionit: +OnlineSubscriptionPaymentLine=Online subscription recorded on %s
Paid via %s
Originating IP address: %s
Transaction ID: %s diff --git a/htdocs/langs/sq_AL/productbatch.lang b/htdocs/langs/sq_AL/productbatch.lang index 27b83c81428..92aa5b50dc6 100644 --- a/htdocs/langs/sq_AL/productbatch.lang +++ b/htdocs/langs/sq_AL/productbatch.lang @@ -6,6 +6,9 @@ ProductStatusNotOnBatch=Jo (seriali/seriali nuk është përdorur) ProductStatusOnBatchShort=Shumë ProductStatusOnSerialShort=Serial ProductStatusNotOnBatchShort=Nr +BatchSellOrEatByMandatoryList=Bëje të detyrueshme %s ose %s +BatchSellOrEatByMandatoryNone=Asnje +BatchSellOrEatByMandatoryAll=%s dhe %s Batch=Lot/Serial atleast1batchfield=Data e ngrënies ose data e shitjes ose numri i lotit/serialit batch_number=Loti/Numri serial diff --git a/htdocs/langs/sq_AL/products.lang b/htdocs/langs/sq_AL/products.lang index 8767d803a18..3acdec8e71c 100644 --- a/htdocs/langs/sq_AL/products.lang +++ b/htdocs/langs/sq_AL/products.lang @@ -18,7 +18,7 @@ Reference=Reference NewProduct=Produkt i ri NewService=Shërbimi i ri ProductVatMassChange=Përditësimi global i TVSH-së -ProductVatMassChangeDesc=Ky mjet përditëson normën e TVSH-së të përcaktuar në ALLb0aaa878fdca4span
produkte dhe shërbime! +ProductVatMassChangeDesc=This tool updates the VAT rate defined on ALL products and services! MassBarcodeInit=Fillimi i barkodit masiv MassBarcodeInitDesc=Kjo faqe mund të përdoret për të inicializuar një barkod në objekte që nuk kanë barkod të përcaktuar. Kontrolloni përpara se të përfundojë konfigurimi i barkodit të modulit. ProductAccountancyBuyCode=Kodi i kontabilitetit (blerje) @@ -161,7 +161,7 @@ ListProductByPopularity=Lista e produkteve sipas popullaritetit ListServiceByPopularity=Lista e shërbimeve sipas popullaritetit Finished=Produkt i prodhuar RowMaterial=Lëndë e parë -ConfirmCloneProduct=Jeni të sigurt që dëshironi të klononi produktin ose shërbimin %sb09a4b739f17f8z? +ConfirmCloneProduct=Are you sure you want to clone product or service %s? CloneContentProduct=Klononi të gjitha informacionet kryesore të produktit/shërbimit ClonePricesProduct=Çmimet e klonit CloneCategoriesProduct=Klononi etiketat/kategoritë e lidhura @@ -208,11 +208,6 @@ unitSET=Set unitS=Së dyti unitH=Ora unitD=Dita -unitG=gram -unitM=Metër -unitLM=Metër linear -unitM2=Metër katror -unitM3=Metër kub unitL=Litër unitT=ton unitKG=kg @@ -221,6 +216,7 @@ unitMG=mg unitLB=paund unitOZ=ons unitM=Metër +unitLM=Metër linear unitDM=dm unitCM=cm unitMM=mm @@ -289,9 +285,9 @@ MinimumRecommendedPrice=Çmimi minimal i rekomanduar është: %s PriceExpressionEditor=Redaktori i shprehjes së çmimeve PriceExpressionSelected=Shprehja e zgjedhur e çmimit PriceExpressionEditorHelp1="çmimi = 2 + 2" ose "2 + 2" për vendosjen e çmimit. Përdorimi ; për të ndarë shprehjet -PriceExpressionEditorHelp2=Ju mund të hyni në ExtraFields me variabla si #extrafield_myextrafieldkey# dhe variabla globale me 30ee83ae<30e7=30' /span>#global_mycode# +PriceExpressionEditorHelp2=You can access ExtraFields with variables like #extrafield_myextrafieldkey# and global variables with #global_mycode# PriceExpressionEditorHelp3=Si në çmimet e produktit/shërbimit ashtu edhe në çmimet e shitësit ka këto variabla të disponueshme:
#tva_tx# #localtax1_tx2#_ta pesha# #length# #sipërfaqja# #price_min# -PriceExpressionEditorHelp4=Vetëm në çmimin e produktit/shërbimit: #supplier_min_price#bccb0342f vetëm çmimet e shitësit: #supplier_quantity# dhe #supplier_tva_tx# +PriceExpressionEditorHelp4=In product/service price only: #supplier_min_price#
In vendor prices only: #supplier_quantity# and #supplier_tva_tx# PriceExpressionEditorHelp5=Vlerat globale të disponueshme: PriceMode=Modaliteti i çmimit PriceNumeric=Numri @@ -361,7 +357,7 @@ ProductAttributeName=Atributi i variantit %s ProductAttribute=Atribut variant ProductAttributeDeleteDialog=Jeni i sigurt që dëshironi ta fshini këtë atribut? Të gjitha vlerat do të fshihen ProductAttributeValueDeleteDialog=Jeni i sigurt që dëshironi të fshini vlerën "%s" me referencën "%s" të këtij atributi? -ProductCombinationDeleteDialog=Jeni i sigurt që dëshironi të fshini variantin e produktit "%sb0a65d071f6f6fc >"? +ProductCombinationDeleteDialog=Are you sure want to delete the variant of the product "%s"? ProductCombinationAlreadyUsed=Pati një gabim gjatë fshirjes së variantit. Ju lutemi kontrolloni që të mos përdoret në asnjë objekt ProductCombinations=Variantet PropagateVariant=Përhapni variante @@ -437,3 +433,6 @@ ModifyValueExtrafields = Ndrysho vlerën e një ekstrafushe OrProductsWithCategories=Ose produkte me etiketa/kategori WarningTransferBatchStockMouvToGlobal = Nëse dëshironi të deserializoni këtë produkt, i gjithë stoku i tij i serializuar do të shndërrohet në stok global WarningConvertFromBatchToSerial=Nëse aktualisht keni një sasi më të madhe ose të barabartë me 2 për produktin, kalimi në këtë zgjedhje do të thotë që do të keni akoma një produkt me objekte të ndryshme të së njëjtës grumbull (ndërsa dëshironi një numër serial unik). Dublikati do të mbetet derisa të bëhet një inventar ose një lëvizje manuale e stokut për ta rregulluar këtë. +AllowStockMovementVariantParent=Gjithashtu regjistron lëvizjet e stokut në produktet mëmë të produkteve variant +AllowStockMovementVariantParentHelp=Si parazgjedhje, një prind i një varianti është një produkt virtual, kështu që asnjë stok nuk menaxhohet për të. Duke aktivizuar këtë opsion, një stok do të menaxhohet për produktet mëmë dhe sa herë që modifikohet një sasi stok për një produkt variant, e njëjta sasi do të modifikohet për produktin mëmë. Ju nuk duhet të keni nevojë për këtë opsion, përveç nëse përdorni variant për të menaxhuar të njëjtin produkt sesa prindi (por me përshkrime, çmime të ndryshme...) +ConfirmSetToDraftInventory=Jeni i sigurt që dëshironi të ktheheni te statusi Draft?
Sasitë e vendosura aktualisht në inventar do të rivendosen. diff --git a/htdocs/langs/sq_AL/projects.lang b/htdocs/langs/sq_AL/projects.lang index ea91867d27d..e7078404943 100644 --- a/htdocs/langs/sq_AL/projects.lang +++ b/htdocs/langs/sq_AL/projects.lang @@ -47,7 +47,7 @@ NbOfProjects=Numri i projekteve NbOfTasks=Numri i detyrave TimeEntry=Ndjekja e kohës TimeSpent=Koha e shfrytzuar -TimeSpentSmall=Time spent +TimeSpentSmall=Koha e shfrytzuar TimeSpentByYou=Koha e shpenzuar nga ju TimeSpentByUser=Koha e shpenzuar nga përdoruesi TaskId=ID-ja e detyrës @@ -147,7 +147,7 @@ LinkedToAnotherCompany=Lidhur me palë të treta TaskIsNotAssignedToUser=Detyra nuk i është caktuar përdoruesit. Përdor butonin '%s' për të caktuar detyrën tani. ErrorTimeSpentIsEmpty=Koha e kaluar është bosh TimeRecordingRestrictedToNMonthsBack=Regjistrimi i kohës është i kufizuar në %s muaj më parë -ThisWillAlsoRemoveTasks=Ky veprim do të fshijë gjithashtu të gjitha detyrat e projektit (%sb09a4b739f17f8z për momentin) dhe të gjitha inputet e kohës së shpenzuar. +ThisWillAlsoRemoveTasks=This action will also delete all tasks of project (%s tasks at the moment) and all inputs of time spent. IfNeedToUseOtherObjectKeepEmpty=Nëse disa objekte (faturë, porosi, ...), që i përkasin një pale tjetër të tretë, duhet të lidhen me projektin për t'u krijuar, mbajeni këtë bosh që projekti të jetë shumë palë të treta. CloneTasks=Detyrat e klonimit CloneContacts=Klononi kontaktet @@ -249,7 +249,7 @@ LatestProjects=Projektet më të fundit %s LatestModifiedProjects=Projektet më të fundit të modifikuara %s OtherFilteredTasks=Detyra të tjera të filtruara NoAssignedTasks=Nuk u gjetën detyra të caktuara (cakto projekt/detyra përdoruesit aktual nga kutia e përzgjedhjes së sipërme për të futur kohën në të) -ThirdPartyRequiredToGenerateInvoice=Një palë e tretë duhet të përcaktohet në projekt që të jetë në gjendje ta faturojë atë. +ThirdPartyRequiredToGenerateIntervention=Një palë e tretë duhet të përcaktohet në projekt që të jetë në gjendje të krijojë ndërhyrje. ThirdPartyRequiredToGenerateInvoice=Një palë e tretë duhet të përcaktohet në projekt që të jetë në gjendje ta faturojë atë. ChooseANotYetAssignedTask=Zgjidhni një detyrë që nuk ju është caktuar ende # Comments trans @@ -292,7 +292,7 @@ PROJECT_CLASSIFY_CLOSED_WHEN_ALL_TASKS_DONE=Klasifiko projektin si të mbyllur k PROJECT_CLASSIFY_CLOSED_WHEN_ALL_TASKS_DONE_help=Shënim: projektet ekzistuese me të gjitha detyrat tashmë të vendosura në një progres prej 100%% nuk do të preken: do t'ju duhet t'i mbyllni ato manualisht. Ky opsion prek vetëm projektet e hapura. SelectLinesOfTimeSpentToInvoice=Zgjidh linjat e kohës së shpenzuar që janë të pafaturuara, më pas vepro në masë "Gjenero faturë" për t'i faturuar ProjectTasksWithoutTimeSpent=Detyrat e projektit pa kohë të shpenzuar -FormForNewLeadDesc=Faleminderit që plotësoni formularin e mëposhtëm për të na kontaktuar. Mund të na dërgoni gjithashtu një email direkt te %s. +FormForNewLeadDesc=Thanks to fill the following form to contact us. You can also send us an email directly to %s. ProjectsHavingThisContact=Projektet që kanë këtë kontakt StartDateCannotBeAfterEndDate=Data e përfundimit nuk mund të jetë para datës së fillimit ErrorPROJECTLEADERRoleMissingRestoreIt=Roli "PROJECTLEADER" mungon ose është çaktivizuar, ju lutemi rivendosni në fjalorin e llojeve të kontaktit diff --git a/htdocs/langs/sq_AL/propal.lang b/htdocs/langs/sq_AL/propal.lang index 516ab9f421f..65b4fd21eb5 100644 --- a/htdocs/langs/sq_AL/propal.lang +++ b/htdocs/langs/sq_AL/propal.lang @@ -15,8 +15,8 @@ ValidateProp=Vërtetoni propozimin tregtar CancelPropal=Anulo AddProp=Krijo propozim ConfirmDeleteProp=Je i sigurt që dëshiron ta fshish këtë propozim komercial? -ConfirmValidateProp=Jeni i sigurt që dëshironi ta vërtetoni këtë propozim komercial me emrin %sb09a4b739f17f8z >? -ConfirmCancelPropal=Jeni i sigurt që dëshironi të anuloni propozimin komercial %s%s? +ConfirmCancelPropal=Are you sure you want to cancel commercial proposal %s? LastPropals=Propozimet më të fundit %s LastModifiedProposals=Propozimet më të fundit të modifikuara %s AllPropals=Të gjitha propozimet @@ -61,8 +61,8 @@ DefaultProposalDurationValidity=Kohëzgjatja e parazgjedhur e vlefshmërisë së DefaultPuttingPricesUpToDate=Si parazgjedhje përditësoni çmimet me çmimet aktuale të njohura në klonimin e një propozimi DefaultPuttingDescUpToDate=Si parazgjedhje përditësoni përshkrimet me përshkrimet aktuale të njohura për klonimin e një propozimi UseCustomerContactAsPropalRecipientIfExist=Përdorni kontaktin/adresën me llojin "Propozimi pasues i kontaktit" nëse përcaktohet në vend të adresës së palës së tretë si adresë e marrësit të propozimit -ConfirmClonePropal=Jeni i sigurt që dëshironi të klononi propozimin komercial %sb09a4b739f17f8z? -ConfirmReOpenProp=Jeni i sigurt që dëshironi të hapni përsëri propozimin komercial %s ? +ConfirmClonePropal=Are you sure you want to clone the commercial proposal %s? +ConfirmReOpenProp=Are you sure you want to open back the commercial proposal %s? ProposalsAndProposalsLines=Propozim dhe linja tregtare ProposalLine=Linja e propozimit ProposalLines=Linjat e propozimit diff --git a/htdocs/langs/sq_AL/receiptprinter.lang b/htdocs/langs/sq_AL/receiptprinter.lang index b80f9a475bc..c4d1eeff115 100644 --- a/htdocs/langs/sq_AL/receiptprinter.lang +++ b/htdocs/langs/sq_AL/receiptprinter.lang @@ -10,6 +10,7 @@ ReceiptPrinterTemplateDesc=Vendosja e shablloneve ReceiptPrinterTypeDesc=Shembull i vlerave të mundshme për fushën "Parametrat" sipas llojit të drejtuesit ReceiptPrinterProfileDesc=Përshkrimi i Profilit të Printerit të Faturave ListPrinters=Lista e printerave +FromServerPointOfView=Nga pikëpamja e ueb serverit. Kjo metodë duhet të jetë e arritshme nga hosti i serverit në internet. SetupReceiptTemplate=Konfigurimi i shabllonit CONNECTOR_DUMMY=Printer bedel CONNECTOR_NETWORK_PRINT=Printer rrjeti diff --git a/htdocs/langs/sq_AL/receptions.lang b/htdocs/langs/sq_AL/receptions.lang index 3cdc4251c4d..f03be44fe78 100644 --- a/htdocs/langs/sq_AL/receptions.lang +++ b/htdocs/langs/sq_AL/receptions.lang @@ -5,8 +5,6 @@ RefReception=Ref. pritje Reception=Pritja Receptions=Pritje AllReceptions=Të gjitha pritjet -Reception=Pritja -Receptions=Pritje ShowReception=Shfaq pritjet ReceptionsArea=Zona e pritjes ListOfReceptions=Lista e pritjeve @@ -34,7 +32,7 @@ StatusReceptionProcessedShort=Të përpunuara ReceptionSheet=Fletë pritjeje ValidateReception=Vërtetoni pritjen ConfirmDeleteReception=Je i sigurt që dëshiron ta fshish këtë pritje? -ConfirmValidateReception=Jeni i sigurt që dëshironi ta vërtetoni këtë pritje me referencën %sb09a4b739f178 >? +ConfirmValidateReception=Are you sure you want to validate this reception with the reference %s? ConfirmCancelReception=Je i sigurt që dëshiron ta anulosh këtë pritje? StatsOnReceptionsOnlyValidated=Statistikat e kryera vetëm në pritje të vërtetuara. Data e përdorur është data e vërtetimit të marrjes (data e planifikuar e dorëzimit nuk dihet gjithmonë). SendReceptionByEMail=Dërgo pritjen me email diff --git a/htdocs/langs/sq_AL/resource.lang b/htdocs/langs/sq_AL/resource.lang index 1f577ebbc5e..d1c36b9bac1 100644 --- a/htdocs/langs/sq_AL/resource.lang +++ b/htdocs/langs/sq_AL/resource.lang @@ -37,3 +37,5 @@ ImportDataset_resource_1=Burimet ErrorResourcesAlreadyInUse=Disa burime janë në përdorim ErrorResourceUseInEvent=%s përdoret në ngjarjen %s + +MaxUsers=Përdoruesit maksimalë (vendet, vendet, etj.) diff --git a/htdocs/langs/sq_AL/sendings.lang b/htdocs/langs/sq_AL/sendings.lang index ef9df9bd140..781b221fe8a 100644 --- a/htdocs/langs/sq_AL/sendings.lang +++ b/htdocs/langs/sq_AL/sendings.lang @@ -39,7 +39,7 @@ StatusSendingValidatedShort=E vërtetuar StatusSendingProcessedShort=Të përpunuara SendingSheet=Fleta e dërgesës ConfirmDeleteSending=Jeni i sigurt që dëshironi ta fshini këtë dërgesë? -ConfirmValidateSending=Jeni i sigurt që dëshironi ta vërtetoni këtë dërgesë me referencën %sb09a4b739f17 >? +ConfirmValidateSending=Are you sure you want to validate this shipment with the reference %s? ConfirmCancelSending=Jeni i sigurt që dëshironi ta anuloni këtë dërgesë? DocumentModelMerou=Modeli Merou A5 WarningNoQtyLeftToSend=Paralajmërim, nuk ka produkte që presin për t'u dërguar. @@ -59,7 +59,7 @@ ProductQtyInCustomersOrdersRunning=Sasia e produktit nga porositë e shitjeve t ProductQtyInSuppliersOrdersRunning=Sasia e produktit nga porositë e hapura të blerjes ProductQtyInShipmentAlreadySent=Sasia e produktit nga porosia e hapur e shitjes është dërguar tashmë ProductQtyInSuppliersShipmentAlreadyRecevied=Sasia e produktit nga porositë e hapura të blerjes të marra tashmë -NoProductToShipFoundIntoStock=Nuk u gjet asnjë produkt për dërgim në magazinë %s%s. Correct stock or go back to choose another warehouse. WeightVolShort=Peshë/Vëll ValidateOrderFirstBeforeShipment=Së pari duhet të vërtetoni porosinë përpara se të jeni në gjendje të bëni dërgesa. NoLineGoOnTabToAddSome=Nuk ka rresht, shkoni në skedën "%s" për të shtuar diff --git a/htdocs/langs/sq_AL/stocks.lang b/htdocs/langs/sq_AL/stocks.lang index fa423d530eb..fffdc47af8a 100644 --- a/htdocs/langs/sq_AL/stocks.lang +++ b/htdocs/langs/sq_AL/stocks.lang @@ -114,7 +114,7 @@ EstimatedStockValueSell=Vlera per shitje EstimatedStockValueShort=Vlera e aksioneve hyrëse EstimatedStockValue=Vlera e aksioneve hyrëse DeleteAWarehouse=Fshi një magazinë -ConfirmDeleteWarehouse=Jeni të sigurt që dëshironi të fshini magazinën %sb09a4b739f17f8z? +ConfirmDeleteWarehouse=Are you sure you want to delete the warehouse %s? PersonalStock=Aksione personale %s ThisWarehouseIsPersonalStock=Kjo magazinë përfaqëson stokun personal të %s %s SelectWarehouseForStockDecrease=Zgjidhni depon për t'u përdorur për uljen e stokut @@ -171,7 +171,7 @@ MovementTransferStock=Transferimi i aksioneve të produktit %s në një depo tje BatchStockMouvementAddInGlobal=Stoku i grupit kalon në magazinë globale (produkti nuk përdor më grup) InventoryCodeShort=Inv./Mov. kodi NoPendingReceptionOnSupplierOrder=Nuk ka pritje në pritje për shkak të porosisë së hapur të blerjes -ThisSerialAlreadyExistWithDifferentDate=Ky lot/numër serial (%s tashmë ekziston, por me>) data e ndryshme eatby ose sellby (u gjet %sb0a65d071f6fc90 por ju shkruani %s). +ThisSerialAlreadyExistWithDifferentDate=This lot/serial number (%s) already exists but with different eatby or sellby date (found %s but you enter %s). OpenAnyMovement=Hapur (të gjitha lëvizjet) OpenInternal=E hapur (vetëm lëvizje e brendshme) UseDispatchStatus=Përdorni një status dërgimi (mirato/refuzoj) për linjat e produkteve në marrjen e porosisë së blerjes @@ -253,7 +253,7 @@ DisableStockChangeOfSubProduct=Çaktivizoni ndryshimin e stokut për të gjithë ImportFromCSV=Importoni listën e lëvizjes CSV ChooseFileToImport=Ngarkoni skedarin më pas klikoni në ikonën %s për të zgjedhur skedarin si skedar importues burimi... SelectAStockMovementFileToImport=zgjidhni një skedar të lëvizjes së aksioneve për të importuar -InfoTemplateImport=Skedari i ngarkuar duhet të ketë këtë format (* janë fusha të detyrueshme):
Depoja e burimit* | Magazina e synuar* | Produkt* | Sasia* | Loti/numri serial
Ndarësi i karaktereve CSV duhet të jetë "b0ecb2ec80f49 span class='notranslate'>" +InfoTemplateImport=Uploaded file needs to have this format (* are mandatory fields):
Source Warehouse* | Target Warehouse* | Product* | Quantity* | Lot/serial number
CSV character separator must be "%s" LabelOfInventoryMovemement=Inventari %s ReOpen=Rihap ConfirmFinish=A e konfirmoni mbylljen e inventarit? Kjo do të gjenerojë të gjitha lëvizjet e aksioneve për të përditësuar stokun tuaj në sasinë reale që keni futur në inventar. @@ -282,7 +282,7 @@ ModuleStockTransferName=Transferim i avancuar i aksioneve ModuleStockTransferDesc=Menaxhimi i avancuar i transferimit të aksioneve, me gjenerimin e fletës së transfertave StockTransferNew=Transferimi i aksioneve të reja StockTransferList=Lista e transfertave të aksioneve -ConfirmValidateStockTransfer=Jeni i sigurt që dëshironi të vërtetoni këtë transferim të aksioneve me referencën %sb09a4b739f17f shtrirje> ? +ConfirmValidateStockTransfer=Are you sure you want to validate this stocks transfer with the reference %s ? ConfirmDestock=Ulja e aksioneve me transferim %s ConfirmDestockCancel=Anulo uljen e aksioneve me transferimin %s DestockAllProduct=Ulja e stoqeve diff --git a/htdocs/langs/sq_AL/stripe.lang b/htdocs/langs/sq_AL/stripe.lang index 81df3f2c756..98f3145c2be 100644 --- a/htdocs/langs/sq_AL/stripe.lang +++ b/htdocs/langs/sq_AL/stripe.lang @@ -22,8 +22,8 @@ ToOfferALinkForOnlinePaymentOnContractLine=URL për të ofruar një faqe pagese ToOfferALinkForOnlinePaymentOnFreeAmount=URL për të ofruar një %s faqe pagese në internet të çdo shume pa objekt ekzistues ToOfferALinkForOnlinePaymentOnMemberSubscription=URL për të ofruar një faqe pagese në internet %s për një abonim të anëtarëve ToOfferALinkForOnlinePaymentOnDonation=URL për të ofruar një faqe pagese në internet %s për pagesën e një donacioni -YouCanAddTagOnUrl=Ju gjithashtu mund të shtoni parametrin e url-së &tag=vlerab0ae33spanzb0ae33475 class='notranslate'> në ndonjë nga ato URL (të detyrueshme vetëm për pagesën që nuk është e lidhur me një objekt) për të shtuar etiketën tuaj të komentit të pagesës.
Për URL-ja e pagesave pa objekt ekzistues, mund të shtoni edhe parametrin &noidempotency=1 kështu që e njëjta lidhje me të njëjtën etiketë mund të përdoret disa herë (disa mënyra pagese mund ta kufizojnë pagesën në 1 për çdo lidhje të ndryshme pa këtë parametër) -SetupStripeToHavePaymentCreatedAutomatically=Konfiguro Stripe-in tënd me url %s kur të krijohen automatikisht pagesat
&tag=value to any of those URL (mandatory only for payment not linked to an object) to add your own payment comment tag.
For the URL of payments with no existing object, you may also add the parameter &noidempotency=1 so the same link with same tag can be used several times (some payment mode may limit the payment to 1 for each different link without this parameter) +SetupStripeToHavePaymentCreatedAutomatically=Setup your Stripe with url %s to have payment created automatically when validated by Stripe. AccountParameter=Parametrat e llogarisё UsageParameter=Parametrat e përdorimit InformationToFindParameters=Ndihmoni për të gjetur informacionin e llogarisë tuaj %s diff --git a/htdocs/langs/sq_AL/supplier_proposal.lang b/htdocs/langs/sq_AL/supplier_proposal.lang index d495d0d005b..c63f28267b7 100644 --- a/htdocs/langs/sq_AL/supplier_proposal.lang +++ b/htdocs/langs/sq_AL/supplier_proposal.lang @@ -20,7 +20,7 @@ AddSupplierProposal=Krijo një kërkesë për çmim SupplierProposalRefFourn=Shitësi ref SupplierProposalDate=Data e dorëzimit SupplierProposalRefFournNotice=Përpara mbylljes së "Pranuar", mendoni të kuptoni referencat e furnitorëve. -ConfirmValidateAsk=Jeni i sigurt që dëshironi ta vërtetoni këtë kërkesë për çmim nën emrin %sb09a4b739f17f8z >? +ConfirmValidateAsk=Are you sure you want to validate this price request under name %s? DeleteAsk=Fshi kërkesën ValidateAsk=Vërteto kërkesën SupplierProposalStatusDraft=Drafti (duhet të vërtetohet) @@ -35,12 +35,12 @@ SupplierProposalStatusSignedShort=Pranuar SupplierProposalStatusNotSignedShort=Refuzuar CopyAskFrom=Krijoni një kërkesë çmimi duke kopjuar një kërkesë ekzistuese CreateEmptyAsk=Krijo kërkesë bosh -ConfirmCloneAsk=Jeni i sigurt që dëshironi të klononi kërkesën për çmim %sb09a4b739f17f8z? -ConfirmReOpenAsk=Jeni i sigurt që dëshironi të hapni përsëri kërkesën për çmim %s%s? +ConfirmReOpenAsk=Are you sure you want to open back the price request %s? SendAskByMail=Dërgo kërkesën për çmim me postë SendAskRef=Dërgimi i kërkesës për çmim %s SupplierProposalCard=Karta e kërkesës -ConfirmDeleteAsk=Jeni i sigurt që dëshironi ta fshini këtë kërkesë çmimi %sb09a4b739f17f8z>%s? ActionsOnSupplierProposal=Ngjarjet sipas kërkesës së çmimit DocModelAuroreDescription=Një shabllon i plotë për një kërkesë për kuotim të shitësit (zbatimi i vjetër i shabllonit Sfungjeri) DocModelZenithDescription=Një model i plotë për një kërkesë për kuotim të shitësit diff --git a/htdocs/langs/sq_AL/suppliers.lang b/htdocs/langs/sq_AL/suppliers.lang index 8fa4fb21a68..8bb26586dac 100644 --- a/htdocs/langs/sq_AL/suppliers.lang +++ b/htdocs/langs/sq_AL/suppliers.lang @@ -26,10 +26,10 @@ ExportDataset_fournisseur_1=Faturat e shitësit dhe detajet e faturës ExportDataset_fournisseur_2=Faturat dhe pagesat e shitësit ExportDataset_fournisseur_3=Porositë e blerjeve dhe detajet e porosisë ApproveThisOrder=Mirato këtë urdhër -ConfirmApproveThisOrder=Jeni i sigurt që dëshironi të miratoni porosinë %s%s? DenyingThisOrder=Refuzoni këtë urdhër -ConfirmDenyingThisOrder=Jeni të sigurt që dëshironi ta refuzoni këtë porosi %s%s%s? +ConfirmCancelThisOrder=Are you sure you want to cancel this order %s? AddSupplierOrder=Krijo Urdhër Blerje AddSupplierInvoice=Krijo faturë shitësi ListOfSupplierProductForSupplier=Lista e produkteve dhe çmimet për shitësin %s diff --git a/htdocs/langs/sq_AL/ticket.lang b/htdocs/langs/sq_AL/ticket.lang index bf924a684c2..e6977007215 100644 --- a/htdocs/langs/sq_AL/ticket.lang +++ b/htdocs/langs/sq_AL/ticket.lang @@ -69,7 +69,7 @@ Read=Lexoni Assigned=Caktuar NeedMoreInformation=Në pritje të komenteve të gazetarëve NeedMoreInformationShort=Në pritje të komenteve -TicketAnswered=Answered +TicketAnswered=U përgjigj Waiting=Ne pritje SolvedClosed=E zgjidhur Deleted=U fshi @@ -233,7 +233,7 @@ TicketMessageMailIntroText=Përshëndetje,
Një përgjigje e re është shtua TicketMessageMailIntroHelpAdmin=Ky tekst do të futet përpara përgjigjes kur i përgjigjeni një bilete nga Dolibarr TicketMessageMailFooter=Fundi i mesazhit TicketMessageMailFooterHelp=Ky tekst shtohet vetëm në fund të mesazhit të dërguar me email dhe nuk do të ruhet. -TicketMessageMailFooterText=Mesazh i dërguar nga %s nëpërmjet +TicketMessageMailFooterText=Message sent by %s via Dolibarr TicketMessageMailFooterHelpAdmin=Ky tekst do të futet pas mesazhit të përgjigjes. TicketMessageHelp=Vetëm ky tekst do të ruhet në listën e mesazheve në kartën e biletës. TicketMessageSubstitutionReplacedByGenericValues=Variablat e zëvendësimeve zëvendësohen me vlera gjenerike. @@ -320,7 +320,7 @@ ViewTicket=Shiko biletën ViewMyTicketList=Shikoni listën time të biletave ErrorEmailMustExistToCreateTicket=Gabim: adresa e emailit nuk u gjet në bazën tonë të të dhënave TicketNewEmailSubjectAdmin=Bileta e re u krijua - Ref %s (ID-ja e biletës publike %s) -TicketNewEmailBodyAdmin=

Bileta sapo është krijuar me ID #%s, shiko informacionin:b0679c9z3a6a64 > +TicketNewEmailBodyAdmin=

Ticket has just been created with ID #%s, see information:

SeeThisTicketIntomanagementInterface=Shihni biletën në ndërfaqen e menaxhimit TicketPublicInterfaceForbidden=Ndërfaqja publike për biletat nuk u aktivizua ErrorEmailOrTrackingInvalid=Vlera e keqe për ndjekjen e ID-së ose emailit diff --git a/htdocs/langs/sq_AL/trips.lang b/htdocs/langs/sq_AL/trips.lang index dfe74dc5b1d..150a748d52f 100644 --- a/htdocs/langs/sq_AL/trips.lang +++ b/htdocs/langs/sq_AL/trips.lang @@ -45,11 +45,11 @@ expenseReportRangeMoreThan=më shumë se %d expenseReportTotalForFive=Shembull me d = 5 ExpenseReportApplyTo=Aplikoni në ExpenseReportApproved=U miratua një raport shpenzimesh -ExpenseReportApprovedMessage=Raporti i shpenzimeve %s u miratua.
- Përdoruesi: %s
- Miratuar nga: %s
Kliko këtu për të shfaqur raportin e shpenzimeve span class='notranslate'>%s
+ExpenseReportApprovedMessage=The expense report %s was approved.
- User: %s
- Approved by: %s
Click here to show the expense report: %s ExpenseReportCanceled=Një raport shpenzimesh u anulua -ExpenseReportCanceledMessage=Raporti i shpenzimeve %s u anulua.
- Përdoruesi: %s

- Anuluar nga: %s
- Motivi për anulim class=: 'notranslate'>%s

Kliko këtu për të shfaqur raportin e shpenzimeve: %s -ExpenseReportConstraintViolationError=Shuma maksimale e tejkaluar (rregulli %s): %s është më i lartë se %s
Tejkalimi i ndaluar) -ExpenseReportConstraintViolationWarning=Shuma maksimale e tejkaluar (rregulli %s): %s është më i lartë se %s Tejkalimi i autorizimit) +ExpenseReportCanceledMessage=The expense report %s was canceled.
- User: %s
- Canceled by: %s
- Motive for cancellation: %s
Click here to show the expense report: %s +ExpenseReportConstraintViolationError=Max amount exceeded (rule %s): %s is higher than %s (Exceeding forbidden) +ExpenseReportConstraintViolationWarning=Max amount exceeded (rule %s): %s is higher than %s (Exceeding authorized) ExpenseReportDateEnd=Data e fundit ExpenseReportDateStart=Data e fillimit ExpenseReportDomain=Domain për të aplikuar @@ -58,19 +58,19 @@ ExpenseReportLimitAmount=Shuma maksimale ExpenseReportLimitOn=Kufizojeni ExpenseReportLine=Linja e raportit të shpenzimeve ExpenseReportPaid=U pagua një raport shpenzimesh -ExpenseReportPaidMessage=Raporti i shpenzimeve %s u pagua.
- Përdoruesi: %s
- Paguar nga: %s
Kliko këtu për të shfaqur raportin e shpenzimeve: span class='notranslate'>%s
+ExpenseReportPaidMessage=The expense report %s was paid.
- User: %s
- Paid by: %s
Click here to show the expense report: %s ExpenseReportPayment=Pagesa e raportit të shpenzimeve ExpenseReportRef=Ref. raporti i shpenzimeve ExpenseReportRefused=Një raport shpenzimesh u refuzua -ExpenseReportRefusedMessage=Raporti i shpenzimeve %s u refuzua.
- Përdoruesi: %s class='notranslate'>
- Refuzuar nga: %s
- Motivi për refuzim: %s
Kliko këtu për të shfaqur raportin e shpenzimeve: %s +ExpenseReportRefusedMessage=The expense report %s was refused.
- User: %s
- Refused by: %s
- Motive for refusal: %s
Click here to show the expense report: %s ExpenseReportRestrictive=Tejkalimi i ndaluar ExpenseReportRuleErrorOnSave=Gabim: %s ExpenseReportRuleSave=Rregulli i raportit të shpenzimeve u ruajt ExpenseReportRulesDesc=Ju mund të përcaktoni rregullat e shumës maksimale për raportet e shpenzimeve. Këto rregulla do të zbatohen kur një shpenzim i ri shtohet në një raport shpenzimesh ExpenseReportWaitingForApproval=Një raport i ri i shpenzimeve është dorëzuar për miratim -ExpenseReportWaitingForApprovalMessage=Një raport i ri shpenzimesh është dorëzuar dhe është në pritje për miratim.
- Përdoruesi: %s
- Periudha: %s
Kliko këtu për të vërtetuar:
? -ConfirmDeleteUser=Jeni të sigurt që dëshironi të fshini përdoruesin %s? -ConfirmDeleteGroup=Jeni të sigurt që dëshironi të fshini grupin %s? -ConfirmEnableUser=Jeni i sigurt që dëshironi të aktivizoni përdoruesin %s? -ConfirmReinitPassword=Jeni i sigurt që dëshironi të krijoni një fjalëkalim të ri për përdoruesin %sb09a4b739f17f80 >? -ConfirmSendNewPassword=Jeni i sigurt që dëshironi të gjeneroni dhe dërgoni fjalëkalim të ri për përdoruesin %sb09a4b739f17f8z shtrirje>? +ConfirmDisableUser=Are you sure you want to disable user %s? +ConfirmDeleteUser=Are you sure you want to delete user %s? +ConfirmDeleteGroup=Are you sure you want to delete group %s? +ConfirmEnableUser=Are you sure you want to enable user %s? +ConfirmReinitPassword=Are you sure you want to generate a new password for user %s? +ConfirmSendNewPassword=Are you sure you want to generate and send new password for user %s? NewUser=Përdorues i ri CreateUser=Krijo përdorues LoginNotDefined=Hyrja nuk është e përcaktuar. @@ -35,7 +35,7 @@ ListOfUsers=Lista e përdoruesve SuperAdministrator=Administrator i shumë kompanive SuperAdministratorDesc=Administratori i sistemit për shumë kompani (mund të ndryshojë konfigurimin dhe përdoruesit) DefaultRights=Lejet e parazgjedhura -DefaultRightsDesc=Përcaktoni këtu lejet default që i jepen automatikisht një b0b5ba1a823> përdorues i ri
(për të modifikuar lejet për përdoruesit ekzistues, shkoni te karta e përdoruesit). +DefaultRightsDesc=Define here the default permissions that are automatically granted to a new user (to modify permissions for existing users, go to the user card). DolibarrUsers=Përdoruesit e Dolibarr LastName=Mbiemri FirstName=Emri diff --git a/htdocs/langs/sq_AL/website.lang b/htdocs/langs/sq_AL/website.lang index 9ee079fb302..d90ead6aa50 100644 --- a/htdocs/langs/sq_AL/website.lang +++ b/htdocs/langs/sq_AL/website.lang @@ -20,7 +20,7 @@ WEBSITE_KEYWORDSDesc=Përdorni presje për të ndarë vlerat EnterHereReadmeInformation=Shkruani këtu një përshkrim të faqes në internet. Nëse e shpërndani faqen tuaj të internetit si shabllon, skedari do të përfshihet në paketën e tundimit. EnterHereLicenseInformation=Shkruani këtu LICENCEN e kodit të faqes së internetit. Nëse e shpërndani faqen tuaj të internetit si shabllon, skedari do të përfshihet në paketën e tundimit. HtmlHeaderPage=Titulli HTML (vetëm për këtë faqe) -PageNameAliasHelp=Emri ose pseudonimi i faqes.
Ky pseudonim përdoret gjithashtu për të falsifikuar një URL SEO kur uebsajti drejtohet nga një host virtual i një serveri ueb (si Apacke, Nginx, .. .). Përdorni butonin "%s" për të ndryshuar këtë. +PageNameAliasHelp=Name or alias of the page.
This alias is also used to forge a SEO URL when website is ran from a Virtual host of a Web server (like Apacke, Nginx, ...). Use the button "%s" to edit this alias. EditTheWebSiteForACommonHeader=Shënim: Nëse dëshironi të përcaktoni një titull të personalizuar për të gjitha faqet, modifikoni titullin në nivelin e sajtit në vend të faqes/kontejnerit. MediaFiles=Biblioteka mediatike EditCss=Redakto vetitë e faqes në internet @@ -32,7 +32,7 @@ AddWebsite=Shto faqen e internetit Webpage=Uebfaqe/kontejner AddPage=Shto faqe/enë PageContainer=Faqe -PreviewOfSiteNotYetAvailable=Pamja paraprake e faqes suaj të internetit %s nuk është ende e disponueshme. Së pari duhet të 'Importoni një shabllon të plotë uebsajti' ose thjesht 'b0e78439z span>Shto një faqe/enë
'. +PreviewOfSiteNotYetAvailable=The preview of your website %s is not yet available. You must first 'Import a full website template' or just 'Add a page/container'. RequestedPageHasNoContentYet=Faqja e kërkuar me id %s nuk ka ende përmbajtje, ose skedari i memories .tpl.php është hequr. Ndryshoni përmbajtjen e faqes për ta zgjidhur këtë. SiteDeleted=Faqja e internetit '%s' u fshi PageContent=Faqe/Kontenair @@ -45,16 +45,16 @@ RealURL=URL e vërtetë ViewWebsiteInProduction=Shikoni faqen e internetit duke përdorur URL-të e shtëpisë Virtualhost=Emri i hostit virtual ose i domenit VirtualhostDesc=Emri i hostit ose domenit virtual (Për shembull: www.mywebsite.com, mybigcompany.net, ...) -SetHereVirtualHost=Përdor me Apache/NGinx/...
serveri juaj i internetit (Apache, Nginx, ...) një host virtual i dedikuar me PHP të aktivizuar dhe një direktori Root në
%s +SetHereVirtualHost=Use with Apache/NGinx/...
Create on your web server (Apache, Nginx, ...) a dedicated Virtual Host with PHP enabled and a Root directory on
%s ExampleToUseInApacheVirtualHostConfig=Shembull për t'u përdorur në konfigurimin e hostit virtual të Apache: YouCanAlsoTestWithPHPS=Përdoreni me serverin e integruar PHP
mund të zhvilloni mjediset tuaja, preferoni të testoni faqen me serverin e integruar të PHP-së (kërkohet PHP 5.5) duke ekzekutuar
php -S 0.0. :8080 -t %s -YouCanAlsoDeployToAnotherWHP=Drejto faqen tënde të internetit me një ofrues tjetër të hostimit të Dolibarrb0342fccfda19>f you nuk keni një server në internet si Apache ose NGinx të disponueshëm në internet, ju mund të eksportoni dhe importoni faqen tuaj të internetit në një shembull tjetër Dolibarr të ofruar nga një ofrues tjetër hosting Dolibarr që siguron integrim të plotë me modulin e Uebsajtit. Ju mund të gjeni një listë të disa ofruesve të pritjes Dolibarr në https://saas.dolibarr.org -CheckVirtualHostPerms=Kontrolloni gjithashtu që përdoruesi i hostit virtual (për shembull www-data) të ketë %sb0a65d09z0f6f lejet e skedarëve në
%s
+YouCanAlsoDeployToAnotherWHP=Run your web site with another Dolibarr Hosting provider
If you don't have a web server like Apache or NGinx available on internet, you can export and import your web site onto another Dolibarr instance provided by another Dolibarr hosting provider that provide full integration with the Website module. You can find a list of some Dolibarr hosting providers on https://saas.dolibarr.org +CheckVirtualHostPerms=Check also that the virtual host user (for example www-data) has %s permissions on files into
%s ReadPerm=Lexoni WritePerm=Shkruaj TestDeployOnWeb=Testoni/shpërndani në ueb -PreviewSiteServedByWebServer=Shiko paraprakisht %s në një skedë të re.

%s do të shërbehet nga një server i jashtëm ueb (si Apache, Apache, ). Duhet ta instaloni dhe konfiguroni këtë server më parë për të treguar drejtorinë:
%s span>
URL e shërbyer nga serveri i jashtëm:
%s -PreviewSiteServedByDolibarr=Shiko paraprakisht %s në një skedë të re.

%s do të shërbehet nga serveri Dolibarr shtesë, kështu që nuk ka nevojë për ndonjë server ueb shtesë (si Apache, Nginx, IIS) për t'u instaluar.
E papërshtatshme është që URL-të e faqeve nuk janë miqësore me përdoruesit dhe fillojnë me shtegun e Dolibarr-it tuaj.
URL-ja e shërbyer nga Dolibarr:


Për të përdorur serverin tuaj të jashtëm të uebit shërbejeni këtë faqe interneti, krijoni një host virtual në serverin tuaj të internetit që tregon direktorinë
%s
më pas shkruani emrin e këtij serveri virtual në vetitë e kësaj faqe interneti dhe klikoni në lidhja "Testoni/Shpërndani në ueb". +PreviewSiteServedByWebServer=Preview %s in a new tab.

The %s will be served by an external web server (like Apache, Nginx, IIS). You must install and setup this server before to point to directory:
%s
URL served by external server:
%s +PreviewSiteServedByDolibarr=Preview %s in a new tab.

The %s will be served by Dolibarr server so it does not need any extra web server (like Apache, Nginx, IIS) to be installed.
The inconvenient is that the URLs of pages are not user friendly and start with the path of your Dolibarr.
URL served by Dolibarr:
%s

To use your own external web server to serve this web site, create a virtual host on your web server that points on directory
%s
then enter the name of this virtual server in the properties of this website and click on the link "Test/Deploy on the web". VirtualHostUrlNotDefined=URL-ja e hostit virtual të shërbyer nga serveri i jashtëm i uebit nuk është i përcaktuar NoPageYet=Ende nuk ka faqe YouCanCreatePageOrImportTemplate=Mund të krijoni një faqe të re ose të importoni një shabllon të plotë të faqes në internet @@ -63,8 +63,8 @@ YouCanEditHtmlSourceckeditor=Ju mund të modifikoni kodin burimor HTML duke për YouCanEditHtmlSource=
You can include PHP code into this source using tags <?php ?>. The following global variables are available: $conf, $db, $mysoc, $user, $website, $websitepage, $weblangs, $pagelangs.

You can also include content of another Page/Container with the following syntax:
<?php includeContainer('alias_of_container_to_include'); ?>

You can make a redirect to another Page/Container with the following syntax (Note: do not output any content before a redirect):
<?php redirectToContainer('alias_of_container_to_redirect_to'); ?>

To add a link to another page, use the syntax:
<a href="alias_of_page_to_link_to.php">mylink<a>

To include a link to download a file stored into the documents directory, use the document.php wrapper:
Example, for a file into documents/ecm (need to be logged), syntax is:
<a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext">
For a file into documents/medias (open directory for public access), syntax is:
<a href="/document.php?modulepart=medias&file=[relative_dir/]filename.ext">
For a file shared with a share link (open access using the sharing hash key of file), syntax is:
<a href="/document.php?hashp=publicsharekeyoffile">
YouCanEditHtmlSource1=
To include an image stored into the documents directory, use the viewimage.php wrapper.
Example, for an image into documents/medias (open directory for public access), syntax is:
<img src="/viewimage.php?modulepart=medias&file=[relative_dir/]filename.ext">
YouCanEditHtmlSource2=Për një imazh të ndarë me një lidhje të përbashkët (hapja e qasjes duke përdorur çelësin hash të ndarjes së skedarit), sintaksa është:
<img src="/viewimage.php?hashp=12345679012...">
-YouCanEditHtmlSource3=Për të marrë URL-në e imazhit të një objekti PHP, përdorni
b03900df7d31ec span>img src="<?php print getImagePublicURLOfObject($object, 1, "_small") ?b0012c7dcbe08"z<0spanspan7> class='notranslate'>>
-YouCanEditHtmlSourceMore=
Më shumë shembuj të kodit HTML ose dinamik të disponueshëm në dokumentacioni wikib0e47sd80cz5 >.
+YouCanEditHtmlSource3=To get the URL of the image of a PHP object, use
<img src="<?php print getImagePublicURLOfObject($object, 1, "_small") ?>">
+YouCanEditHtmlSourceMore=
More examples of HTML or dynamic code available on
the wiki documentation.
ClonePage=Klonimi i faqes/kontejnerit CloneSite=Faqja e klonimit SiteAdded=Faqja e internetit u shtua @@ -110,7 +110,7 @@ ThisPageIsTranslationOf=Kjo faqe/enë është një përkthim i ThisPageHasTranslationPages=Kjo faqe/enë ka përkthim NoWebSiteCreateOneFirst=Nuk është krijuar ende asnjë faqe interneti. Krijo një të parë. GoTo=Shkoni në -DynamicPHPCodeContainsAForbiddenInstruction=Ju shtoni kodin dinamik PHP që përmban instruksionin PHP '%sb0a65dfc>071f ' që është e ndaluar si parazgjedhje si përmbajtje dinamike (shih opsionet e fshehura WEBSITE_PHP_ALLOW_xxx për të rritur listën e komandave të lejuara). +DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=Ju nuk keni leje për të shtuar ose modifikuar përmbajtje dinamike PHP në faqet e internetit. Kërkoni leje ose thjesht mbani kodin në etiketat php të pandryshuara. ReplaceWebsiteContent=Kërkoni ose zëvendësoni përmbajtjen e faqes në internet DeleteAlsoJs=Të fshihen gjithashtu të gjithë skedarët JavaScript specifike për këtë faqe interneti? @@ -118,7 +118,7 @@ DeleteAlsoMedias=Të fshihen gjithashtu të gjithë skedarët e medias specifike MyWebsitePages=Faqet e mia të internetit SearchReplaceInto=Kërko | Zëvendësoni në ReplaceString=Varg i ri -CSSContentTooltipHelp=Fut këtu përmbajtjen e CSS. Për të shmangur ndonjë konflikt me CSS të aplikacionit, sigurohuni që të paraprini të gjitha deklaratat me klasën .bodywebsite. Për shembull:

#mycssselector, input.myclass:hover { ...
duhet të jetë
.bodywebsite #mycssselector, .bodywebsite input.myclass:hover { ...

Shënim: Nëse keni një skedar të madh pa këtë parashtesë, mund të përdorni 'lessc' për ta kthyer atë për të shtuar prefiksin .bodywebsite kudo. +CSSContentTooltipHelp=Enter here CSS content. To avoid any conflict with the CSS of the application, be sure to prepend all declaration with the .bodywebsite class. For example:

#mycssselector, input.myclass:hover { ... }
must be
.bodywebsite #mycssselector, .bodywebsite input.myclass:hover { ... }

Note: If you have a large file without this prefix, you can use 'lessc' to convert it to append the .bodywebsite prefix everywhere. LinkAndScriptsHereAreNotLoadedInEditor=Paralajmërim: Kjo përmbajtje del vetëm kur aksesohet në sajt nga një server. Nuk përdoret në modalitetin e modifikimit, kështu që nëse keni nevojë të ngarkoni skedarë JavaScript edhe në modalitetin e redaktimit, thjesht shtoni etiketën tuaj 'script src=...' në faqe. Dynamiccontent=Shembull i një faqeje me përmbajtje dinamike EditInLineOnOff=Modaliteti 'Redakto në linjë' është %s @@ -160,78 +160,78 @@ PagesViewedTotal=Faqet e shikuara (gjithsej) Everyone=Të gjithë AssignedContacts=Kontaktet e caktuara WebsiteTypeLabel=Lloji i faqes në internet -WebsiteTypeDolibarrWebsite=Web site (Module WebSites CMS) -WebsiteTypeDolibarrPortal=Native and ready to use web portal (Module Web Portal) -WebPortalURL=Web portal URL -NewWebsiteAccount=New accounts for websites -ModuleWebPortalName=Web portal -ModuleWebPortalDesc=A ready to use native web portal for customers, suppliers, partners or members -WebPortalDescription=Public web portal module for membership and partnership -WebPortalSetup=WebPortal setup -WebPortalCSS=Web portal CSS -WebPortalSetupPage=WebPortal setup page -WEBPORTAL_TITLE=Brand name on header of public page -UserAccountForWebPortalAreInThirdPartyTabHelp=Users accounts for WebPortal can be set on each third party card in Website accounts tab -WebPortalAccessHidden=Hidden -WebPortalAccessVisible=Visible -WebPortalAccessEdit=Editable -WEBPORTAL_MEMBER_CARD_ACCESS=Enable access to the membership record -WebPortalMemberCardAccessHelp=Enable access to the membership record (Hidden / Visible or Editable) -WEBPORTAL_PARTNERSHIP_CARD_ACCESS=Enable access to the partnership record -WebPortalPartnerShipCardAccessHelp=Enable access to the partnership record (Hidden / Visible or Editable) -WEBPORTAL_PROPAL_LIST_ACCESS=Enable access to the proposals -WEBPORTAL_ORDER_LIST_ACCESS=Enable access to the orders -WEBPORTAL_INVOICE_LIST_ACCESS=Enable access to the invoices -WEBPORTAL_USER_LOGGED=Select an anonymous user -WebPortalUserLoggedHelp=This user is used to update cards -WebPortalHomeTitle=Welcome -WebPortalHomeDesc=Welcome to the public interface -WebPortalPropalListMenu=Proposals -WebPortalPropalListTitle=List of proposals -WebPortalPropalListDesc=List of proposals -WebPortalPropalListNothing=Proposals not found -WebPortalOrderListMenu=Orders -WebPortalOrderListTitle=List of orders -WebPortalOrderListDesc=List of orders -WebPortalOrderListNothing=Orders not found +WebsiteTypeDolibarrWebsite=Uebfaqja (CMS e modulit të faqeve të internetit) +WebsiteTypeDolibarrPortal=Portali uebi vendas dhe i gatshëm për t'u përdorur (Module Web Portal) +WebPortalURL=URL e portalit në internet +NewWebsiteAccount=Llogari të reja për faqet e internetit +ModuleWebPortalName=ueb portal +ModuleWebPortalDesc=Një ueb-portal i gatshëm për t'u përdorur për klientët, furnitorët, partnerët ose anëtarët +WebPortalDescription=Moduli i portalit publik për anëtarësim dhe partneritet +WebPortalSetup=Konfigurimi i uebportalit +WebPortalCSS=Ueb-portali CSS +WebPortalSetupPage=Faqja e konfigurimit të uebportalit +WEBPORTAL_TITLE=Emri i markës në kokën e faqes publike +UserAccountForWebPortalAreInThirdPartyTabHelp=Llogaritë e përdoruesve për WebPortal mund të vendosen në secilën kartë të palës së tretë në skedën e llogarive të faqes në internet +WebPortalAccessHidden=I fshehur +WebPortalAccessVisible=E dukshme +WebPortalAccessEdit=E redaktueshme +WEBPORTAL_MEMBER_CARD_ACCESS=Aktivizo qasjen në regjistrimin e anëtarësimit +WebPortalMemberCardAccessHelp=Aktivizo qasjen në regjistrimin e anëtarësimit (I fshehur / i dukshëm ose i modifikueshëm) +WEBPORTAL_PARTNERSHIP_CARD_ACCESS=Aktivizo qasjen në të dhënat e partneritetit +WebPortalPartnerShipCardAccessHelp=Aktivizo qasjen në regjistrimin e partneritetit (I fshehur / i dukshëm ose i modifikueshëm) +WEBPORTAL_PROPAL_LIST_ACCESS=Aktivizo qasjen në propozime +WEBPORTAL_ORDER_LIST_ACCESS=Aktivizo qasjen në porositë +WEBPORTAL_INVOICE_LIST_ACCESS=Aktivizo qasjen në fatura +WEBPORTAL_USER_LOGGED=Zgjidhni një përdorues anonim +WebPortalUserLoggedHelp=Ky përdorues përdoret për të përditësuar kartat +WebPortalHomeTitle=Mirë se vini +WebPortalHomeDesc=Mirë se vini në ndërfaqen publike +WebPortalPropalListMenu=Propozimet +WebPortalPropalListTitle=Lista e propozimeve +WebPortalPropalListDesc=Lista e propozimeve +WebPortalPropalListNothing=Propozimet nuk u gjetën +WebPortalOrderListMenu=Porositë +WebPortalOrderListTitle=Lista e porosive +WebPortalOrderListDesc=Lista e porosive +WebPortalOrderListNothing=Porositë nuk u gjetën WebPortalInvoiceListMenu=Faturat -WebPortalInvoiceListTitle=List of invoices -WebPortalInvoiceListDesc=List of invoices -WebPortalInvoiceListNothing=Invoices not found -WebPortalMemberCardMenu=Member -WebPortalMemberCardTitle=Member card -WebPortalMemberCardDesc=Member card -WebPortalPartnershipCardMenu=Partnership -WebPortalPartnershipCardTitle=Partnership card -WebPortalPartnershipCardDesc=Partnership card -loginWebportalUserName=User name / email +WebPortalInvoiceListTitle=Lista e faturave +WebPortalInvoiceListDesc=Lista e faturave +WebPortalInvoiceListNothing=Faturat nuk u gjetën +WebPortalMemberCardMenu=Anëtar +WebPortalMemberCardTitle=Karta e anëtarit +WebPortalMemberCardDesc=Karta e anëtarit +WebPortalPartnershipCardMenu=Partneritet +WebPortalPartnershipCardTitle=Karta e partneritetit +WebPortalPartnershipCardDesc=Karta e partneritetit +loginWebportalUserName=Emri i përdoruesit / emaili loginWebportalPassword=Fjalëkalimi -LoginNow=Login now -RemoveSearchFilters=Remove search filters -WEBPORTAL_PRIMARY_COLOR=Primary color -WEBPORTAL_SECONDARY_COLOR=Secondary color -WEBPORTAL_LOGIN_LOGO_URL=Login logo image URL -WEBPORTAL_MENU_LOGO_URL=Menu logo image URL -WEBPORTAL_MENU_LOGO_URLTooltip=Leave empty to use login logo -WEBPORTAL_LOGIN_BACKGROUND=Background login image URL -WEBPORTAL_BANNER_BACKGROUND=Background for banner -WEBPORTAL_BANNER_BACKGROUND_IS_DARK=Use dark theme for banner -AriaPrevPage=Previous page -AriaNextPage=Next page -AriaPageX=Page %s -WebPortalError404=Page not found -WebPortalErrorPageNotExist=Page not exist -WebPortalErrorFetchThirdPartyAccountFromLogin=Error when loading third-party account (login : %s) -WebPortalErrorAuthentication=Authentication error -WebPortalErrorFetchLoggedThirdPartyAccount=Error when loading third-party account (login : %s) -WebPortalErrorFetchLoggedUser=Error when loading user (Id : %s) -WebPortalErrorFetchLoggedThirdParty=Error when loading third-party (Id : %s) -WebPortalErrorFetchLoggedMember=Error when loading member (Id : %s) -WebPortalErrorFetchLoggedPartnership=Error when loading partnership (Third-party Id : %s, Member Id : %s) -ExportIntoGIT=Export into sources -WebPortalMember=Membership -WebPortalOrder=Sale Order -WebPortalPartnership=Partnership -WebPortalPropal=Proposal -WebPortalGroupMenuAdmin=Administration +LoginNow=Identifikohu tani +RemoveSearchFilters=Hiq filtrat e kërkimit +WEBPORTAL_PRIMARY_COLOR=Ngjyra primare +WEBPORTAL_SECONDARY_COLOR=Ngjyra dytësore +WEBPORTAL_LOGIN_LOGO_URL=URL e imazhit të logos së hyrjes +WEBPORTAL_MENU_LOGO_URL=URL-ja e imazhit të logos së menysë +WEBPORTAL_MENU_LOGO_URLTooltip=Lëreni bosh për të përdorur logon e hyrjes +WEBPORTAL_LOGIN_BACKGROUND=URL e imazhit të hyrjes në sfond +WEBPORTAL_BANNER_BACKGROUND=Sfondi për baner +WEBPORTAL_BANNER_BACKGROUND_IS_DARK=Përdorni temën e errët për baner +AriaPrevPage=Faqja e meparshme +AriaNextPage=Faqja tjetër +AriaPageX=Faqja %s +WebPortalError404=Faqja nuk u gjet +WebPortalErrorPageNotExist=Faqja nuk ekziston +WebPortalErrorFetchThirdPartyAccountFromLogin=Gabim gjatë ngarkimit të llogarisë së palës së tretë (identifikimi : %s) +WebPortalErrorAuthentication=Gabim vërtetimi +WebPortalErrorFetchLoggedThirdPartyAccount=Gabim gjatë ngarkimit të llogarisë së palës së tretë (identifikimi : %s) +WebPortalErrorFetchLoggedUser=Gabim gjatë ngarkimit të përdoruesit (Id : %s) +WebPortalErrorFetchLoggedThirdParty=Gabim gjatë ngarkimit të palës së tretë (Id : %s) +WebPortalErrorFetchLoggedMember=Gabim gjatë ngarkimit të anëtarit (Id : %s) +WebPortalErrorFetchLoggedPartnership=Gabim gjatë ngarkimit të partneritetit (ID-ja e palës së tretë : %s, ID-ja e anëtarit: %s) +ExportIntoGIT=Eksporto në burime +WebPortalMember=Anëtarësimi +WebPortalOrder=Urdhër Shitje +WebPortalPartnership=Partneritet +WebPortalPropal=Propozim +WebPortalGroupMenuAdmin=Administrata WebPortalGroupMenuTechnical=Sistemi diff --git a/htdocs/langs/sq_AL/withdrawals.lang b/htdocs/langs/sq_AL/withdrawals.lang index bb826ef061d..891a57e7cf5 100644 --- a/htdocs/langs/sq_AL/withdrawals.lang +++ b/htdocs/langs/sq_AL/withdrawals.lang @@ -47,7 +47,7 @@ MakeBankTransferOrder=Bëni një kërkesë për transferim kredie WithdrawRequestsDone=%s u regjistruan kërkesa për pagesë të debitit direkt BankTransferRequestsDone=%s kërkesat për transferim krediti u regjistruan ThirdPartyBankCode=Kodi i bankës së palës së tretë -NoInvoiceCouldBeWithdrawed=Asnjë faturë nuk u përpunua me sukses. Kontrollo që faturat janë në kompani me një IBAN të vlefshëm dhe që IBAN të ketë një UMR (Unique Mandate Reference) me modalitetin %s
. +NoInvoiceCouldBeWithdrawed=No invoice processed successfully. Check that invoices are on companies with a valid IBAN and that IBAN has a UMR (Unique Mandate Reference) with mode %s. NoInvoiceCouldBeWithdrawedSupplier=Asnjë faturë nuk u përpunua me sukses. Kontrollo që faturat janë në kompani me një IBAN të vlefshëm. NoSalariesCouldBeWithdrawed=Asnjë pagë nuk u përpunua me sukses. Kontrollo që pagat janë për përdoruesit me një IBAN të vlefshëm. WithdrawalCantBeCreditedTwice=Kjo faturë tërheqjeje është shënuar tashmë si e kredituar; kjo nuk mund të bëhet dy herë, pasi kjo mund të krijojë pagesa të dyfishta dhe hyrje bankare. @@ -152,12 +152,12 @@ ADDDAYS=Shtoni ditë në datën e ekzekutimit NoDefaultIBANFound=Nuk u gjet asnjë IBAN i paracaktuar për këtë palë të tretë ### Notifications InfoCreditSubject=Urdhërpagesa e debitit direkt %s nga banka -InfoCreditMessage=Urdhërpagesa e debitit direkt %s është paguar nga banka
Të dhënat e pagesës: b0ecb2ec87f49 +InfoCreditMessage=Urdhërpagesa e debitit direkt %s është paguar nga banka
Të dhënat e pagesës: b0ecb2ec87f49 InfoTransSubject=Transmetimi i urdhrit të pagesës së debitit direkt %s në bankë -InfoTransMessage=Urdhri i pagesës së debitit direkt %s është dërguar në bankë nga %s %s


-InfoTransData=Shuma: %s
Metoda: %s
Data: %s +InfoTransMessage=The direct debit payment order %s has been sent to bank by %s %s.

+InfoTransData=Amount: %s
Method: %s
Date: %s InfoRejectSubject=Urdhërpagesa e debitimit direkt u refuzua -InfoRejectMessage=Përshëndetje,

urdhri i pagesës së debitit direkt të faturës %s i lidhur me
%s, me një shumë prej %s është refuzuar nga banka.b0342fccfda19bz /span>
--
%s +InfoRejectMessage=Hello,

the direct debit payment order of invoice %s related to the company %s, with an amount of %s has been refused by the bank.

--
%s ModeWarning=Opsioni për modalitetin real nuk u vendos, ne ndalemi pas këtij simulimi ErrorCompanyHasDuplicateDefaultBAN=Kompania me id %s ka më shumë se një llogari bankare të paracaktuar. Nuk ka asnjë mënyrë për të ditur se cilën të përdorni. ErrorICSmissing=Mungon ICS në llogarinë bankare %s @@ -171,4 +171,3 @@ SalaryWaitingWithdraw=Pagat në pritje të pagesës me transfertë krediti RefSalary=Rrogë NoSalaryInvoiceToWithdraw=Nuk ka rrogë në pritje të një '%s'. Shko te skeda '%s' në kartën e pagës për të bërë një kërkesë. SalaryInvoiceWaitingWithdraw=Pagat në pritje të pagesës me transfertë krediti - diff --git a/htdocs/langs/sr_RS/main.lang b/htdocs/langs/sr_RS/main.lang index 6a53d7ceb2c..1cacf67f637 100644 --- a/htdocs/langs/sr_RS/main.lang +++ b/htdocs/langs/sr_RS/main.lang @@ -420,6 +420,8 @@ TotalTTCShort=Ukupno (bruto) TotalHT=Total (excl. tax) TotalHTforthispage=Total (excl. tax) for this page Totalforthispage=Total for this page +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=Ukupno (bruto) TotalTTCToYourCredit=Ukupno (bruto) za Vaš račun TotalVAT=Ukupan porez @@ -647,6 +649,7 @@ ReportName=Ime izveštaja ReportPeriod=Period izveštaja ReportDescription=Opis Report=Izveštaj +Reports=Izveštaji Keyword=Keyword Origin=Origin Legend=Legenda diff --git a/htdocs/langs/sv_SE/accountancy.lang b/htdocs/langs/sv_SE/accountancy.lang index b66f8f8249b..0aa303320fe 100644 --- a/htdocs/langs/sv_SE/accountancy.lang +++ b/htdocs/langs/sv_SE/accountancy.lang @@ -335,7 +335,6 @@ CategoryDeleted=Kategori för bokföringskonto har tagits bort AccountingJournals=Bokföringsloggbok AccountingJournal=Bokföringsloggbok NewAccountingJournal=Ny bokföringsloggbok -ShowAccountingJournal=Visa loggböcker NatureOfJournal=Journalens natur AccountingJournalType1=Övrig verksamhet AccountingJournalType2=Försäljning @@ -353,7 +352,7 @@ ACCOUNTING_DISABLE_BINDING_ON_SALES=Inaktivera bindning och överföring av bokf ACCOUNTING_DISABLE_BINDING_ON_PURCHASES=Inaktivera bindning och överföring av bokföring vid köp (leverantörsfakturor kommer inte att beaktas vid redovisning) ACCOUNTING_DISABLE_BINDING_ON_EXPENSEREPORTS=Inaktivera bindning och överföring i bokföring på kostnadsrapporter (kostnadsrapporter kommer inte att beaktas vid redovisning) ACCOUNTING_ENABLE_LETTERING=Aktivera bokstäverfunktionen i bokföringen -ACCOUNTING_ENABLE_LETTERING_DESC=När detta alternativ är aktiverat kan du definiera en kod för varje bokföringspost så att du kan gruppera olika bokföringsrörelser. Tidigare, när olika tidskrifter hanterades oberoende, var denna funktion nödvändig för att gruppera rörelserader för olika tidskrifter tillsammans. Men med Dolibarr-bokföring, en sådan spårningskod, som heter "%s span>" sparas redan automatiskt, så en automatisk bokstäver är redan gjord, utan risk för fel så denna funktion har blivit värdelös för en vanlig användning. Manuell bokstäverfunktion tillhandahålls för slutanvändare som verkligen inte litar på datormotorn som gör överföringen av data i bokföring. +ACCOUNTING_ENABLE_LETTERING_DESC=When this options is enabled, you can define, on each accounting entry, a code so you can group different accounting movements together. In the past, when different journals was managed independently, this feature was necessary to group movement lines of different journals together. However, with Dolibarr accountancy, such a tracking code, called "%s" is already saved automatically, so an automatic lettering is already done, with no risk of error so this feature has become useless for a common usage. Manual lettering feature is provided for end users that really don't trust the computer engine making the transfer of data in accountancy. EnablingThisFeatureIsNotNecessary=Att aktivera den här funktionen är inte längre nödvändigt för en rigorös redovisningshantering. ACCOUNTING_ENABLE_AUTOLETTERING=Aktivera den automatiska bokstäverna vid överföring till bokföring ACCOUNTING_ENABLE_AUTOLETTERING_DESC=Koden för bokstäverna genereras automatiskt och inkrementeras och väljs inte av slutanvändaren diff --git a/htdocs/langs/sv_SE/admin.lang b/htdocs/langs/sv_SE/admin.lang index 3467e8c1226..a400150849a 100644 --- a/htdocs/langs/sv_SE/admin.lang +++ b/htdocs/langs/sv_SE/admin.lang @@ -368,7 +368,7 @@ GenericMaskCodes3EAN=Alla andra tecken i masken förblir intakta (utom * eller ? GenericMaskCodes4a=Exempel den 99:e %s av tredje parten TheCompany, med datum 2023-01-31:
GenericMaskCodes4b=Exempel på tredje part skapat 2023-01-31:
> GenericMaskCodes4c=Exempel på produkt skapad 2023-01-31:
-GenericMaskCodes5=ABC{yy}{mm}-{000000} ger b0aee8733658 span>ABC2301-000099

b0aee8336583710fz0@{01+ }-ZZZ/{dd}/XXX
ger 0199-ZZZ/31/XXX
IN{yy}{mm}-{0000}-{t} ger IN2301-0099-A om företagets typ är 'Responsable Inscripto' med kod för typen som är 'A_RI' +GenericMaskCodes5=ABC{yy}{mm}-{000000} will give ABC2301-000099
{0000+100@1}-ZZZ/{dd}/XXX will give 0199-ZZZ/31/XXX
IN{yy}{mm}-{0000}-{t} will give IN2301-0099-A if the type of company is 'Responsable Inscripto' with code for type that is 'A_RI' GenericNumRefModelDesc=Ger en anpassningsbar nummerserie enligt en fastställd mask. ServerAvailableOnIPOrPort=Server finns på adressen %s på port %s ServerNotAvailableOnIPOrPort=Servern är inte tillgänglig på adresseb %s på port %s @@ -464,7 +464,7 @@ ExtrafieldParamHelpPassword=Om du lämnar detta fält tomt betyder det att detta ExtrafieldParamHelpselect=Lista över värden måste vara rader med formatet nyckel,värde (där nyckel inte kan vara '0')

till exempel:
1,värde1
2,värde2
code3,värde3
...

För att få listan beroende av andra komplementära attribut:
1,värde1|options_ parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

För att få listan beroende av en annan lista:
1,värde1|parent_list_code:parent_key
2,värde2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=Lista över värden måste vara rader med formatet nyckel,värde (där nyckel inte kan vara '0')

till exempel:
1,värde1
2,värde2
3,värde3
... ExtrafieldParamHelpradio=Lista över värden måste vara rader med formatet nyckel,värde (där nyckel inte kan vara '0')

till exempel:
1,värde1
2,värde2
3,värde3
... -ExtrafieldParamHelpsellist=Lista med värden kommer från en tabell
Syntax: table_name:label_field:id_field::filtersql
Exempel: c_idtypent:libelle: ::filtersql

- id_field är nödvändigtvis en primär int-nyckelb0342fccfdaspan19bz> - filtersql är ett SQL-villkor. Det kan vara ett enkelt test (t.ex. active=1) för att endast visa aktivt värde
Du kan också använda $ID$ i filter som är det aktuella ID:t för det aktuella objektet
För att använda en SELECT i filtret använd nyckelordet $SEL$ för att kringgå antiinjektionsskydd.
om du vill filtrera på extrafält använd syntax extra.fieldcode=... (där fältkoden är koden för extrafield)

För att ha lista beroende på en annan kompletterande attributlista:
c_typent:libelle:id:options_parent_list_code |parent_column:filter

För att få listan beroende av en annan lista:
c_typent:libelle:id:parent_list_code:filter_column>| +ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filtersql
Example: c_typent:libelle:id::filtersql

- id_field is necessarily a primary int key
- filtersql is a SQL condition. It can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter which is the current id of current object
To use a SELECT into the filter use the keyword $SEL$ to bypass anti-injection protection.
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=Listan med värden kommer från en tabell
Syntax: table_name:label_field:id_field::filtersql
Exempel: c_typent:libelle:id::filtersql

filter kan vara ett enkelt test (t.ex. active=1) för att visa endast aktiva värden
Du kan också använda $ID$ i filter som är aktuellt ID för aktuellt objekt
För att göra en SELECT i filter använder du $SEL$
om du vill filtrera på extrafält använder du syntax extra.fieldcode= ... (där fältkoden är koden för extrafältet)

För att listan skall vara beroende av komplementära attribut:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

För att få listan beroende av en annan lista:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parametrar måste vara ObjectName:Classpath
Syntax: ObjectName:Classpath ExtrafieldParamHelpSeparator=Håll tomt för en enkel separator
Ange detta till 1 för en kollapsande separator (öppnas som standard för en ny session, sedan behålls status för varje användarsession)
Ange detta till 2 för en kollapsande separator (kollapsad som standard för ny session, sedan status hålls för varje användarsession) @@ -1197,6 +1197,7 @@ Skin=Tema för utseende DefaultSkin=Standardtema MaxSizeList=Maxlängd för lista DefaultMaxSizeList=Standard maxlängd för listor +DisplayGrandTotalInList=Display grand total (for all pages) in lists footer DefaultMaxSizeShortList=Standard maxlängd för korta listor (exempelvis i kundkort) MessageOfDay=Dagens meddelande MessageLogin=Meddelande på inloggningssida @@ -1221,7 +1222,7 @@ LogoSquarred=Logotyp (kvadratisk) LogoSquarredDesc=Måste vara fyrkantig (bredd = höjd). Den här logotypen kommer att användas som favicon eller annat som rör den övre menyraden (om den inte är inaktiverad). DoNotSuggestPaymentMode=Föreslå inte NoActiveBankAccountDefined=Inga aktivt bankkonto angivet -OwnerOfBankAccount=Innehavare till bankkontot %s +OwnerOfBankAccount=Innehavare till bankkontot %s BankModuleNotActive=Modlen bankkonton inte aktiverad ShowBugTrackLink=Visa länken %s ShowBugTrackLinkDesc=Lämna tomt för att inte visa denna länk, använd värdet 'github' för länk till Dolibarr projektet eller ange en url direkt 'https://...' @@ -1860,7 +1861,7 @@ PastDelayVCalExport=Inte exporterar fall äldre än SecurityKey = Säkerhetsnyckel ##### ClickToDial ##### ClickToDialSetup=Klicka för att Dial modul inställning -ClickToDialUrlDesc=URL anropas när ett klick på telefonbilden görs. I URL kan du använda taggar
__PHONETO__ som blir ersatt med telefonnumret till den person som ska ringas
__PHONEFROM__ kommer att ersättas med telefonnummer till den som ringer (ditt)
__LOGIN__b09a4b739f som kommer att ersättas med clicktodial inloggning (definierad på användarkortet)
__PASS__ som kommer att ersättas med ett klickkodslösenord (definierat på användarkortet). +ClickToDialUrlDesc=URL called when a click on phone picto is done. In URL, you can use tags
__PHONETO__ that will be replaced with the phone number of person to call
__PHONEFROM__ that will be replaced with phone number of calling person (yours)
__LOGIN__ that will be replaced with clicktodial login (defined on user card)
__PASS__ that will be replaced with clicktodial password (defined on user card). ClickToDialDesc=Denna modul ändrar telefonnummer när du använder en stationär dator till klickbara länkar. Ett klick ringer upp numret. Detta kan användas för att starta telefonsamtalet när du använder en mjuk telefon på skrivbordet eller när du t.ex. använder ett CTI-system baserat på SIP-protokoll. Obs! När du använder en smartphone är telefonnummer alltid klickbara. ClickToDialUseTelLink=Använd bara en länk "tel:" på telefonnummer ClickToDialUseTelLinkDesc=Använd den här metoden om dina användare har en datortelefon eller ett programvarugränssnitt, installerat på samma dator som webbläsaren och anropas när du klickar på en länk som börjar med "tel:" i din webbläsare. Om du behöver en länk som börjar med "sip:" eller en komplett serverlösning (inget behov av lokal mjukvaruinstallation), måste du ställa in denna på "Nej" och fylla i nästa fält. @@ -2433,3 +2434,12 @@ UrlPublicInterfaceHelpAdmin=It is possible to define an alias to the web server ExportUseForce=Use the parameter -f ExportUseForceHelp=Force to continue the export even when an error is found (Backup may not be reliable) CustomPrompt=Custom prompts +AiDescription=AI (Artificial Intelligence) features +AiDescriptionLong=Provides AI (Artificial Intelligence) features in different part of the application. Need external AI API. +AI_KEY_API_CHATGPT= Key for ChatGPT IA api +AiSetup=AI module setup +AiCustomPrompt=AI customs prompt +AI_CONFIGURATIONS_PROMPT=Custom prompt +ImageGeneration=Image generation +AIPromptForFeatures=AI custom prompts for features +EnterAnIP=Enter an IP address diff --git a/htdocs/langs/sv_SE/main.lang b/htdocs/langs/sv_SE/main.lang index 719f7c3c33a..7b07ae6a220 100644 --- a/htdocs/langs/sv_SE/main.lang +++ b/htdocs/langs/sv_SE/main.lang @@ -420,6 +420,8 @@ TotalTTCShort=Totalt (inkl. moms) TotalHT=Totalt (exkl. moms) TotalHTforthispage=Totalt (exkl. moms) för denna sida Totalforthispage=Totalt för denna sida +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=Totalt (inkl. moms) TotalTTCToYourCredit=Totalt (inkl. moms) för kreditering TotalVAT=Summa moms @@ -647,6 +649,7 @@ ReportName=Rapportnamn ReportPeriod=Rapportperiod ReportDescription=Beskrivning Report=Rapport +Reports=Rapporter Keyword=Nyckelord Origin=Ursprung Legend=Legend diff --git a/htdocs/langs/sv_SE/modulebuilder.lang b/htdocs/langs/sv_SE/modulebuilder.lang index e70f41fe711..7f74bbbd371 100644 --- a/htdocs/langs/sv_SE/modulebuilder.lang +++ b/htdocs/langs/sv_SE/modulebuilder.lang @@ -148,7 +148,7 @@ CSSListClass=CSS för lista NotEditable=Ej redigerbar ForeignKey=Främmande nyckel ForeignKeyDesc=Om värdet på detta fält måste garanteras existera i en annan tabell. Ange här ett värde som matchar syntaxen: tablename.parentfieldtocheck -TypeOfFieldsHelp=Exempel:
varchar(99)
e-post
telefon
ip
url
lösenordbzccdouble(24,8)
real
text
html
date
datetime
tidsstämpel
integer
integer:ClassName:relativepath/to/classfile.class.php[:1[:filter]]b0342fccfda19b /span>
'1' betyder att vi lägger till en +-knapp efter kombinationen för att skapa posten
'filter' är ett Syntaxvillkor för universellt filter, exempel: '((status:=:1) AND (fk_user:=:__USER_ID__) AND (entity:IN:(__SHARED_ENTITIES__))' +TypeOfFieldsHelp=Example:
varchar(99)
email
phone
ip
url
password
double(24,8)
real
text
html
date
datetime
timestamp
integer
integer:ClassName:relativepath/to/classfile.class.php[:1[:filter]]

'1' means we add a + button after the combo to create the record
'filter' is an Universal Filter syntax condition, example: '((status:=:1) AND (fk_user:=:__USER_ID__) AND (entity:IN:(__SHARED_ENTITIES__))' TypeOfFieldsHelpIntro=Detta är typen av fält/attribut. AsciiToHtmlConverter=Ascii till HTML-omvandlare AsciiToPdfConverter=Ascii till PDF-omvandlare @@ -180,7 +180,7 @@ FailedToAddCodeIntoDescriptor=Det gick inte att lägga till kod i beskrivningen. DictionariesCreated=Ordbok %s skapad framgångsrikt DictionaryDeleted=Ordbok %s har tagits bort framgångsrikt PropertyModuleUpdated=Egendomen %s har uppdaterats framgångsrikt -InfoForApiFile=* När du genererar fil för första gången kommer alla metoder att skapas för varje objekt.
* När du klickar i remove tar du bara bort alla klassmetoder för ='notranslate'>valt objekt. +InfoForApiFile=* When you generate file for the first time then all methods will be created for each object.
* When you click in remove you just remove all methods for the selected object. SetupFile=Sida för modulinställning EmailingSelectors=Emails selectors EmailingSelectorDesc=You can generate and edit here the class files to provide new email target selectors for the mass emailing module diff --git a/htdocs/langs/sw_SW/accountancy.lang b/htdocs/langs/sw_SW/accountancy.lang index d473d79055c..b49907a4034 100644 --- a/htdocs/langs/sw_SW/accountancy.lang +++ b/htdocs/langs/sw_SW/accountancy.lang @@ -16,8 +16,8 @@ ThisService=Huduma hii ThisProduct=Bidhaa hii DefaultForService=Chaguomsingi kwa huduma DefaultForProduct=Chaguomsingi kwa bidhaa -ProductForThisThirdparty=Bidhaa kwa wahusika wengine -ServiceForThisThirdparty=Huduma kwa wahusika wengine +ProductForThisThirdparty=Product for this third party +ServiceForThisThirdparty=Service for this third party CantSuggest=Haiwezi kupendekeza AccountancySetupDoneFromAccountancyMenu=Usanidi mwingi wa uhasibu hufanywa kutoka kwa menyu %s ConfigAccountingExpert=Usanidi wa uhasibu wa moduli (ingizo mara mbili) @@ -38,7 +38,7 @@ DeleteCptCategory=Ondoa akaunti ya uhasibu kutoka kwa kikundi ConfirmDeleteCptCategory=Je, una uhakika unataka kuondoa akaunti hii ya uhasibu kutoka kwa kikundi cha akaunti ya uhasibu? JournalizationInLedgerStatus=Hali ya uandishi wa habari AlreadyInGeneralLedger=Tayari kuhamishiwa majarida ya uhasibu na leja -NotYetInGeneralLedger=Bado haijahamishwa kwa majarida na leja ya uhasibu +NotYetInGeneralLedger=Not yet transferred to accounting journals and ledger GroupIsEmptyCheckSetup=Kikundi ni tupu, angalia usanidi wa kikundi cha uhasibu kilichobinafsishwa DetailByAccount=Onyesha maelezo kwa akaunti DetailBy=Maelezo na @@ -53,15 +53,13 @@ ExportAccountingSourceDocHelp=Ukiwa na zana hii, unaweza kutafuta na kuhamisha m ExportAccountingSourceDocHelp2=Ili kuhamisha majarida yako, tumia ingizo la menyu %s - %s. ExportAccountingProjectHelp=Bainisha mradi ikiwa unahitaji ripoti ya uhasibu kwa mradi mahususi pekee. Ripoti za gharama na malipo ya mkopo hazijajumuishwa katika ripoti za mradi. ExportAccountancy=Uhasibu wa kuuza nje -WarningDataDisappearsWhenDataIsExported=Onyo, orodha hii ina maingizo ya uhasibu pekee ambayo hayajahamishwa (Tarehe ya uhamishaji ni tupu). Ikiwa ungependa kujumuisha maingizo ya uhasibu ambayo tayari yamehamishwa ili kuyasafirisha tena, bofya kitufe kilicho hapo juu. +WarningDataDisappearsWhenDataIsExported=Warning, this list contains only the accounting entries that have not been already exported (Export date is empty). If you want to include the accounting entries already exported, click on the button above. VueByAccountAccounting=Tazama kwa akaunti ya uhasibu VueBySubAccountAccounting=Tazama kwa akaunti ndogo ya uhasibu MainAccountForCustomersNotDefined=Main account (from the Chart of Account) for customers not defined in setup MainAccountForSuppliersNotDefined=Main account (from the Chart of Account) for vendors not defined in setup MainAccountForUsersNotDefined=Main account (from the Chart of Account) for users not defined in setup -MainAccountForRevenueStampSaleNotDefined=Account (from the Chart of Account) for the revenue stamp (sales) not defined in setup -MainAccountForRevenueStampPurchaseNotDefined=Account (from the Chart of Account) for the revenue stamp (purchases) not defined in setup MainAccountForVatPaymentNotDefined=Account (from the Chart of Account) for VAT payment not defined in setup MainAccountForSubscriptionPaymentNotDefined=Account (from the Chart of Account) for membership payment not defined in setup MainAccountForRetainedWarrantyNotDefined=Account (from the Chart of Account) for the retained warranty not defined in setup @@ -70,13 +68,14 @@ UserAccountNotDefined=Akaunti ya uhasibu kwa mtumiaji haijafafanuliwa katika usa AccountancyArea=Eneo la uhasibu AccountancyAreaDescIntro=Matumizi ya moduli ya uhasibu hufanywa kwa hatua kadhaa: AccountancyAreaDescActionOnce=Vitendo vifuatavyo kwa kawaida hutekelezwa mara moja tu, au mara moja kwa mwaka... -AccountancyAreaDescActionOnceBis=Hatua zinazofuata zinapaswa kufanywa ili kuokoa muda katika siku zijazo kwa kukupendekezea kiotomatiki akaunti sahihi ya uhasibu chaguomsingi wakati wa kuhamisha data katika uhasibu. +AccountancyAreaDescActionOnceBis=Next steps should be done to save you time in future by suggesting you automatically the correct default accounting account when transferring data in accounting AccountancyAreaDescActionFreq=Hatua zifuatazo kwa kawaida hutekelezwa kila mwezi, wiki au siku kwa makampuni makubwa sana... AccountancyAreaDescJournalSetup=STEP %s: Angalia maudhui ya orodha yako ya jarida kutoka kwenye menyu %s AccountancyAreaDescChartModel=STEP %s: Hakikisha kuwa kuna muundo wa chati ya akaunti au uunde kutoka kwa menyu %s AccountancyAreaDescChart=STEP %s: Chagua na|au ukamilishe chati yako ya akaunti kutoka kwenye menyu %s +AccountancyAreaDescFiscalPeriod=STEP %s: Define a fiscal year by default on which to integrate your accounting entries. For this, use the menu entry %s. AccountancyAreaDescVat=STEP %s: Bainisha akaunti za uhasibu kwa kila Viwango vya VAT. Kwa hili, tumia ingizo la menyu %s. AccountancyAreaDescDefault=STEP %s: Bainisha akaunti chaguo-msingi za uhasibu. Kwa hili, tumia ingizo la menyu %s. AccountancyAreaDescExpenseReport=STEP %s: Bainisha akaunti chaguo-msingi za uhasibu kwa kila aina ya ripoti ya Gharama. Kwa hili, tumia ingizo la menyu %s. @@ -84,19 +83,20 @@ AccountancyAreaDescSal=STEP %s: Bainisha akaunti chaguo-msingi za uhasibu kwa ma AccountancyAreaDescContrib=STEP %s: Bainisha akaunti chaguo-msingi za uhasibu za Kodi (gharama maalum). Kwa hili, tumia ingizo la menyu %s. AccountancyAreaDescDonation=STEP %s: Bainisha akaunti chaguo-msingi za uhasibu kwa mchango. Kwa hili, tumia ingizo la menyu %s. AccountancyAreaDescSubscription=STEP %s: Bainisha akaunti chaguo-msingi za uhasibu kwa usajili wa wanachama. Kwa hili, tumia ingizo la menyu %s. -AccountancyAreaDescMisc=STEP %s: Bainisha akaunti chaguo-msingi ya lazima na akaunti chaguo-msingi za uhasibu kwa shughuli mbalimbali. Kwa hili, tumia ingizo la menyu %s. +AccountancyAreaDescMisc=STEP %s: Define mandatory default accounts and default accounting accounts for miscellaneous transactions. For this, use the menu entry %s. AccountancyAreaDescLoan=STEP %s: Bainisha akaunti chaguo-msingi za uhasibu za mikopo. Kwa hili, tumia ingizo la menyu %s. AccountancyAreaDescBank=STEP %s: Bainisha akaunti za uhasibu na msimbo wa jarida kwa kila benki na akaunti za fedha. Kwa hili, tumia ingizo la menyu %s. AccountancyAreaDescProd=STEP %s: Bainisha akaunti za uhasibu kwenye Bidhaa/Huduma zako. Kwa hili, tumia ingizo la menyu %s. AccountancyAreaDescBind=STEP %s: Angalia ufungaji kati ya %s iliyopo mistari na akaunti ya uhasibu imefanywa, kwa hivyo programu itaweza kuandika shughuli kwenye Ledger kwa mbofyo mmoja. Kamilisha vifungo vilivyokosekana. Kwa hili, tumia ingizo la menyu %s. AccountancyAreaDescWriteRecords=STEP %s: Andika miamala kwenye Leja. Ili kufanya hivyo, nenda kwenye menyu %s , na ubofye kitufe cha %s . -AccountancyAreaDescAnalyze=STEP %s: Ongeza au hariri miamala iliyopo na uzalishe ripoti na mauzo ya nje. - -AccountancyAreaDescClosePeriod=STEP %s: Funga kipindi ili tusiweze kufanya marekebisho katika siku zijazo. +AccountancyAreaDescAnalyze=STEP %s: Read reportings or generate export files for other bookkeepers. +AccountancyAreaDescClosePeriod=STEP %s: Close period so we can't transfer anymore data in the same period in a future. +TheFiscalPeriodIsNotDefined=A mandatory step in setup has not been completed (Fiscal period is not defined) TheJournalCodeIsNotDefinedOnSomeBankAccount=Hatua ya lazima ya usanidi haijakamilika (jarida la kanuni za uhasibu halijafafanuliwa kwa akaunti zote za benki) Selectchartofaccounts=Chagua chati inayotumika ya akaunti +CurrentChartOfAccount=Current active chart of account ChangeAndLoad=Badilisha na upakie Addanaccount=Add an accounting account AccountAccounting=Accounting account @@ -171,8 +171,8 @@ ACCOUNTING_MANAGE_ZERO=Ruhusu kudhibiti idadi tofauti ya sufuri mwishoni mwa aka BANK_DISABLE_DIRECT_INPUT=Zima rekodi ya moja kwa moja ya shughuli katika akaunti ya benki ACCOUNTING_ENABLE_EXPORT_DRAFT_JOURNAL=Washa uhamishaji wa rasimu kwenye jarida ACCOUNTANCY_COMBO_FOR_AUX=Washa orodha ya mchanganyiko kwa akaunti tanzu (inaweza kuwa polepole ikiwa una washirika wengi, vunja uwezo wa kutafuta kwa sehemu ya thamani) -ACCOUNTING_DATE_START_BINDING=Bainisha tarehe ya kuanza kushurutisha na kuhamisha katika uhasibu. Chini ya tarehe hii, shughuli hazitahamishwa kwa uhasibu. -ACCOUNTING_DEFAULT_PERIOD_ON_TRANSFER=Kwenye uhamishaji wa hesabu, ni kipindi gani kilichochaguliwa kwa chaguo-msingi +ACCOUNTING_DATE_START_BINDING=Disable binding & transfer in accountancy when date is below this date (the transactions before this date will be excluded by default) +ACCOUNTING_DEFAULT_PERIOD_ON_TRANSFER=On the page to transfer data into accountancy, what is the period selected by default ACCOUNTING_SELL_JOURNAL=Jarida la mauzo - mauzo na mapato ACCOUNTING_PURCHASE_JOURNAL=Jarida la ununuzi - ununuzi na urejeshaji @@ -186,6 +186,8 @@ ACCOUNTING_SOCIAL_JOURNAL=Social journal ACCOUNTING_RESULT_PROFIT=Akaunti ya uhasibu ya matokeo (Faida) ACCOUNTING_RESULT_LOSS=Akaunti ya uhasibu ya matokeo (Hasara) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Jarida la kufungwa +ACCOUNTING_CLOSURE_ACCOUNTING_GROUPS_USED_FOR_BALANCE_SHEET_ACCOUNT=Accounting groups used for the balance sheet account (separate by comma) +ACCOUNTING_CLOSURE_ACCOUNTING_GROUPS_USED_FOR_INCOME_STATEMENT=Accounting groups used for the income statement (separate by comma) ACCOUNTING_ACCOUNT_TRANSFER_CASH=Akaunti (kutoka Chati ya Akaunti) itakayotumika kama akaunti ya uhamisho wa mpito wa benki TransitionalAccount=Akaunti ya mpito ya uhamisho wa benki @@ -290,7 +292,7 @@ DescVentilDoneCustomer=Angalia hapa orodha ya laini za ankara za wateja na akaun DescVentilTodoCustomer=Unganisha ankara ambazo tayari hazijafungwa na akaunti ya bidhaa kutoka chati ya akaunti ChangeAccount=Badilisha akaunti ya bidhaa/huduma (kutoka chati ya akaunti) kwa laini zilizochaguliwa na akaunti ifuatayo: Vide=- -DescVentilSupplier=Rejelea hapa orodha ya ankara za wauzaji zinazofungwa au ambazo bado hazijafungwa kwa akaunti ya bidhaa kutoka chati ya akaunti (rekodi pekee ambayo haijahamishwa katika uhasibu ndiyo inayoonekana) +DescVentilSupplier=Consult here the list of vendor invoice lines bound or not yet bound to a product account from chart of account (only record not already transferred in accountancy are visible) DescVentilDoneSupplier=Angalia hapa orodha ya mistari ya ankara za wauzaji na akaunti zao za uhasibu DescVentilTodoExpenseReport=Unganisha mistari ya ripoti ya gharama ambayo tayari haijafungwa na akaunti ya uhasibu wa ada DescVentilExpenseReport=Angalia hapa orodha ya mistari ya ripoti ya gharama inayofungamana (au la) kwa akaunti ya uhasibu wa ada @@ -298,8 +300,8 @@ DescVentilExpenseReportMore=Ukisanidi akaunti ya uhasibu kwa aina ya njia za rip DescVentilDoneExpenseReport=Angalia hapa orodha ya mistari ya ripoti za gharama na akaunti ya uhasibu wa ada Closure=Kufungwa kwa mwaka -DescClosure=Angalia hapa idadi ya miondoko kwa mwezi ambayo bado haijathibitishwa na kufungwa -OverviewOfMovementsNotValidated=Muhtasari wa harakati ambazo hazijathibitishwa na kufungwa +AccountancyClosureStep1Desc=Consult here the number of movements by month not yet validated & locked +OverviewOfMovementsNotValidated=Overview of movements not validated and locked AllMovementsWereRecordedAsValidated=Vitendo vyote vilirekodiwa kama vilivyothibitishwa na kufungwa NotAllMovementsCouldBeRecordedAsValidated=Sio miondoko yote ingeweza kurekodiwa kama iliyothibitishwa na kufungwa ValidateMovements=Thibitisha na funga harakati @@ -333,7 +335,6 @@ CategoryDeleted=Kitengo cha akaunti ya uhasibu kimeondolewa AccountingJournals=Majarida ya uhasibu AccountingJournal=Jarida la uhasibu NewAccountingJournal=Jarida jipya la uhasibu -ShowAccountingJournal=Onyesha jarida la uhasibu NatureOfJournal=Asili ya Jarida AccountingJournalType1=Shughuli mbalimbali AccountingJournalType2=Mauzo @@ -341,10 +342,10 @@ AccountingJournalType3=Ununuzi AccountingJournalType4=Benki AccountingJournalType5=Ripoti za gharama AccountingJournalType8=Malipo -AccountingJournalType9=Ina-mpya +AccountingJournalType9=Retained earnings GenerationOfAccountingEntries=Uzalishaji wa maingizo ya uhasibu ErrorAccountingJournalIsAlreadyUse=Jarida hili tayari linatumika -AccountingAccountForSalesTaxAreDefinedInto=Kumbuka: Akaunti ya uhasibu ya kodi ya Mauzo imefafanuliwa katika menyu %s - %s +AccountingAccountForSalesTaxAreDefinedInto=Kumbuka: Akaunti ya uhasibu ya kodi ya Mauzo imefafanuliwa katika menyu %s - %s NumberOfAccountancyEntries=Idadi ya maingizo NumberOfAccountancyMovements=Idadi ya harakati ACCOUNTING_DISABLE_BINDING_ON_SALES=Zima ufungaji na uhamisho katika uhasibu kwenye mauzo (ankara za mteja hazitazingatiwa katika uhasibu) @@ -352,17 +353,19 @@ ACCOUNTING_DISABLE_BINDING_ON_PURCHASES=Zima ufungaji na uhamisho katika uhasibu ACCOUNTING_DISABLE_BINDING_ON_EXPENSEREPORTS=Zima ufungaji na uhamishaji katika uhasibu kwenye ripoti za gharama (ripoti za gharama hazitazingatiwa katika uhasibu) ACCOUNTING_ENABLE_LETTERING=Washa kipengele cha uandishi katika uhasibu ACCOUNTING_ENABLE_LETTERING_DESC=Chaguo hizi zikiwashwa, unaweza kufafanua, kwenye kila ingizo la uhasibu, msimbo ili uweze kupanga harakati tofauti za uhasibu pamoja. Hapo awali, wakati majarida tofauti yalisimamiwa kwa kujitegemea, kipengele hiki kilikuwa muhimu ili kuunganisha mistari ya harakati ya majarida tofauti. Hata hivyo, kwa uhasibu wa Dolibarr, msimbo kama huo wa ufuatiliaji, unaoitwa " %s "Tayari imehifadhiwa kiatomati, kwa hivyo uandishi wa kiotomatiki tayari umefanywa, bila hatari ya makosa kwa hivyo kipengele hiki kimekuwa bure kwa matumizi ya kawaida. Kipengele cha uandishi wa mwongozo hutolewa kwa watumiaji wa mwisho ambao hawaamini injini ya kompyuta inayofanya uhamishaji wa data katika uhasibu. -EnablingThisFeatureIsNotNecessary=Kuwasha kipengele hiki si lazima tena kwa usimamizi mkali wa uhasibu. +EnablingThisFeatureIsNotNecessary=Enabling this feature is no more necessary for a rigorous accounting management. ACCOUNTING_ENABLE_AUTOLETTERING=Washa uandishi wa kiotomatiki wakati wa kuhamisha kwa uhasibu -ACCOUNTING_ENABLE_AUTOLETTERING_DESC=Msimbo wa uandishi huzalishwa kiotomatiki na kuongezwa na sio kuchaguliwa na mtumiaji wa mwisho +ACCOUNTING_ENABLE_AUTOLETTERING_DESC=The code for the lettering is automatically generated and incremented and not chosen by the end user +ACCOUNTING_LETTERING_NBLETTERS=Number of letters when generating lettering code (default 3) +ACCOUNTING_LETTERING_NBLETTERS_DESC=Some accounting software only accepts a two-letter code. This parameter allows you to set this aspect. The default number of letters is three. OptionsAdvanced=Chaguzi za hali ya juu ACCOUNTING_FORCE_ENABLE_VAT_REVERSE_CHARGE=Wezesha udhibiti wa malipo ya VAT kwa ununuzi wa wasambazaji -ACCOUNTING_FORCE_ENABLE_VAT_REVERSE_CHARGE_DESC=Chaguo hili likiwashwa, unaweza kufafanua kuwa msambazaji au ankara ya mchuuzi aliyepewa lazima ihamishwe kwenye uhasibu kwa njia tofauti: Debiti ya ziada na laini ya mkopo itatolewa katika uhasibu kwenye akaunti 2 zilizotolewa kutoka kwa chati ya akaunti iliyofafanuliwa katika "%s\n" ukurasa wa kuanzisha. +ACCOUNTING_FORCE_ENABLE_VAT_REVERSE_CHARGE_DESC=When this option is enabled, you can define that a supplier or a given vendor invoice must be transferred into accountancy differently: A additional debit and a credit line will generated into the accounting on 2 given accounts from the chart of account defined into the "%s" setup page. ## Export NotExportLettering=Usihamishe maandishi wakati wa kuunda faili -NotifiedExportDate=Alamisha mistari ambayo bado haijatumwa kama Imetumwa (ili kurekebisha laini iliyoalamishwa kama imehamishwa, utahitaji kufuta muamala wote na kuuhamishia tena kwenye hesabu) -NotifiedValidationDate=Thibitisha na Ufunge maingizo yaliyohamishwa bado hayajafungwa (athari sawa na "%s" kipengele, urekebishaji na ufutaji wa laini hautawezekana KWA HAKIKA) +NotifiedExportDate=Alamisha mistari ambayo bado haijatumwa kama Imetumwa (ili kurekebisha laini iliyoalamishwa kama imehamishwa, utahitaji kufuta muamala wote na kuuhamishia tena kwenye hesabu) +NotifiedValidationDate=Thibitisha na Ufunge maingizo yaliyohamishwa bado hayajafungwa (athari sawa na "%s" kipengele, urekebishaji na ufutaji wa laini hautawezekana KWA HAKIKA) NotifiedExportFull=Hamisha hati? DateValidationAndLock=Uthibitishaji wa tarehe na kufuli ConfirmExportFile=Uthibitishaji wa utengenezaji wa faili ya uhasibu ya kuuza nje? @@ -420,7 +423,7 @@ SaleLocal=Uuzaji wa ndani SaleExport=Uuzaji wa kuuza nje SaleEEC=Inauzwa katika EEC SaleEECWithVAT=Uuzaji katika EEC na VAT sio batili, kwa hivyo tunadhani hii SIO mauzo ya ndani ya jumuiya na akaunti iliyopendekezwa ni akaunti ya kawaida ya bidhaa. -SaleEECWithoutVATNumber=Inauzwa katika EEC bila VAT lakini Kitambulisho cha VAT cha wahusika wengine hakijabainishwa. Tunarudi kwenye akaunti kwa mauzo ya kawaida. Unaweza kurekebisha Kitambulisho cha VAT cha wahusika wengine, au kubadilisha akaunti ya bidhaa iliyopendekezwa ili kufungwa ikihitajika. +SaleEECWithoutVATNumber=Sale in EEC with no VAT but the VAT ID of third party is not defined. We fall back on the account for standard sales. You can fix the VAT ID of the third party, or change the product account suggested for binding if needed. ForbiddenTransactionAlreadyExported=Hairuhusiwi: Muamala umeidhinishwa na/au kuhamishwa. ForbiddenTransactionAlreadyValidated=Hairuhusiwi: Muamala umeidhinishwa. ## Dictionary @@ -441,16 +444,30 @@ AccountancyNoUnletteringModified=Hakuna upatanisho uliorekebishwa AccountancyOneUnletteringModifiedSuccessfully=Moja ya kutopatanisha imerekebishwa AccountancyUnletteringModifiedSuccessfully=%s kubatilisha imebadilishwa kwa ufanisi +## Closure +AccountancyClosureStep1=Step 1 : Validate and lock the movements +AccountancyClosureStep2=Step 2 : Close the fiscal period +AccountancyClosureStep3=Step 3 : Extract entries (Optional) +AccountancyClosureClose=Close fiscal period +AccountancyClosureAccountingReversal=Extract and record "Retained earnings" entries +AccountancyClosureStep3NewFiscalPeriod=Next fiscal period +AccountancyClosureGenerateClosureBookkeepingRecords=Generate "Retained earnings" entries on the next fiscal period +AccountancyClosureSeparateAuxiliaryAccounts=When generating the "Retained earnings" entries, detail the sub-ledger accounts +AccountancyClosureCloseSuccessfully=Fiscal period has been closed successfully +AccountancyClosureInsertAccountingReversalSuccessfully=Bookkeeping entries for "Retained earnings" has been inserted successfully + ## Confirm box ConfirmMassUnletteringAuto=Uthibitishaji wa kutenganisha kiotomatiki kwa wingi ConfirmMassUnletteringManual=Uthibitishaji wa kutopatanishwa kwa mwongozo wa wingi ConfirmMassUnletteringQuestion=Je, una uhakika unataka kubatilisha %s rekodi zilizochaguliwa? ConfirmMassDeleteBookkeepingWriting=Uthibitishaji wa Kufuta Wingi ConfirmMassDeleteBookkeepingWritingQuestion=Hii itafuta muamala kutoka kwa uhasibu (maingizo yote ya laini yanayohusiana na muamala sawa yatafutwa). Je, una uhakika unataka kufuta %s maingizo yaliyochaguliwa? +AccountancyClosureConfirmClose=Are you sure you want to close the current fiscal period ? You understand that closing the fiscal period is an irreversible action and will permanently block any modification or deletion of entries over this period. +AccountancyClosureConfirmAccountingReversal=Are you sure you want to record entries for the "Retained earnings" ? ## Error SomeMandatoryStepsOfSetupWereNotDone=Baadhi ya hatua za lazima za usanidi hazijafanywa, tafadhali zikamilishe -ErrorNoAccountingCategoryForThisCountry=Hakuna kikundi cha akaunti ya uhasibu kinachopatikana kwa nchi %s (Angalia Nyumbani - Mipangilio - Kamusi) +ErrorNoAccountingCategoryForThisCountry=No accounting account group available for country %s (See %s - %s - %s) ErrorInvoiceContainsLinesNotYetBounded=Unajaribu kuorodhesha baadhi ya mistari ya ankara %s , lakini njia zingine bado hazijafungwa kwenye akaunti ya uhasibu. Uandishi wa habari wa ankara zote za ankara hii umekataliwa. ErrorInvoiceContainsLinesNotYetBoundedShort=Baadhi ya mistari kwenye ankara haifungwi kwenye akaunti ya uhasibu. ExportNotSupported=Umbizo la kuhamisha lililowekwa halitumiki katika ukurasa huu @@ -465,6 +482,9 @@ AccountancyErrorMismatchBalanceAmount=Salio (%s) si sawa na 0 AccountancyErrorLetteringBookkeeping=Hitilafu zimetokea kuhusu shughuli za malipo: %s ErrorAccountNumberAlreadyExists=Nambari ya hesabu %s tayari ipo ErrorArchiveAddFile=Haiwezi kuweka "%s"faili kwenye kumbukumbu +ErrorNoFiscalPeriodActiveFound=No active fiscal period found +ErrorBookkeepingDocDateNotOnActiveFiscalPeriod=The bookkeeping doc date is not inside the active fiscal period +ErrorBookkeepingDocDateIsOnAClosedFiscalPeriod=The bookkeeping doc date is inside a closed fiscal period ## Import ImportAccountingEntries=Maingizo ya hesabu diff --git a/htdocs/langs/sw_SW/admin.lang b/htdocs/langs/sw_SW/admin.lang index ea176590472..8a1787ca358 100644 --- a/htdocs/langs/sw_SW/admin.lang +++ b/htdocs/langs/sw_SW/admin.lang @@ -250,8 +250,8 @@ Security=Usalama Passwords=Nywila DoNotStoreClearPassword=Simba nenosiri lililohifadhiwa kwenye hifadhidata (SIO kama maandishi wazi). Inashauriwa sana kuamsha chaguo hili. MainDbPasswordFileConfEncrypted=Encrypt database password kuhifadhiwa katika conf.php. Inashauriwa sana kuamsha chaguo hili. -InstrucToEncodePass=Ili nenosiri lisimbwe kwenye conf.php faili, badilisha mstari
$ dolibarr_main_db_pass="...";
na
$dolibarr_main_db_pass="crypted:%s"; -InstrucToClearPass=Ili nenosiri lisimbuliwe (wazi) katika conf.php faili, badilisha mstari
$dolibarr_main_db_pass="iliyofichwa:...";
na
$dolibarr_main_db_pass="%s"; +InstrucToEncodePass=Ili nenosiri lisimbwe kwenye conf.php faili, badilisha mstari
$ dolibarr_main_db_pass="...";
na
$dolibarr_main_db_pass="crypted:%s"; +InstrucToClearPass=Ili nenosiri lisimbuliwe (wazi) katika conf.php faili, badilisha mstari
$dolibarr_main_db_pass="iliyofichwa:...";
na
$dolibarr_main_db_pass="%s"; ProtectAndEncryptPdfFiles=Linda faili za PDF zinazozalishwa. Hii haipendekezwi kwani inavunja uundaji wa PDF kwa wingi. ProtectAndEncryptPdfFilesDesc=Ulinzi wa hati ya PDF huifanya iweze kusoma na kuchapisha kwa kutumia kivinjari chochote cha PDF. Walakini, kuhariri na kunakili hakuwezekani tena. Kumbuka kuwa kutumia kipengele hiki hufanya ujenzi wa PDF zilizounganishwa kimataifa kutofanya kazi. Feature=Kipengele @@ -268,8 +268,8 @@ OtherResources=Rasilimali nyingine ExternalResources=Rasilimali za Nje SocialNetworks=Mitandao ya kijamii SocialNetworkId=Kitambulisho cha Mtandao wa Kijamii -ForDocumentationSeeWiki=Kwa hati za mtumiaji au msanidi (Hati, Maswali Yanayoulizwa Mara kwa Mara...),
angalia Wiki ya Dolibarr:
%s -ForAnswersSeeForum=Kwa maswali/msaada wowote mwingine, unaweza kutumia jukwaa la Dolibarr:
%s +ForDocumentationSeeWiki=Kwa hati za mtumiaji au msanidi (Hati, Maswali Yanayoulizwa Mara kwa Mara...),
angalia Wiki ya Dolibarr:
%s +ForAnswersSeeForum=Kwa maswali/msaada wowote mwingine, unaweza kutumia jukwaa la Dolibarr:
%s HelpCenterDesc1=Hizi hapa ni baadhi ya nyenzo za kupata usaidizi na usaidizi na Dolibarr. HelpCenterDesc2=Baadhi ya nyenzo hizi zinapatikana tu katika kiingereza . CurrentMenuHandler=Kidhibiti cha menyu cha sasa @@ -345,11 +345,11 @@ ThisIsAlternativeProcessToFollow=Huu ni usanidi mbadala wa kuchakata kwa mikono: StepNb=Hatua %s FindPackageFromWebSite=Tafuta kifurushi kinachotoa vipengele unavyohitaji (kwa mfano kwenye tovuti rasmi %s) DownloadPackageFromWebSite=Pakua kifurushi (kwa mfano kutoka kwa tovuti rasmi %s) -UnpackPackageInDolibarrRoot=Fungua/fungua faili zilizofungashwa kwenye saraka yako ya seva ya Dolibarr: %s -UnpackPackageInModulesRoot=Ili kupeleka/kusakinisha sehemu ya nje, lazima ufungue/ufungue faili ya kumbukumbu kwenye saraka ya seva iliyowekwa kwa moduli za nje:
%s +UnpackPackageInDolibarrRoot=Fungua/fungua faili zilizofungashwa kwenye saraka yako ya seva ya Dolibarr: %s +UnpackPackageInModulesRoot=Ili kupeleka/kusakinisha sehemu ya nje, lazima ufungue/ufungue faili ya kumbukumbu kwenye saraka ya seva iliyowekwa kwa moduli za nje:
%s SetupIsReadyForUse=Uwekaji wa moduli umekamilika. Hata hivyo lazima uwashe na usanidi moduli katika programu yako kwa kwenda kwenye moduli za kusanidi ukurasa: %s . -NotExistsDirect=Saraka ya mizizi mbadala haijafafanuliwa kwa saraka iliyopo.
-InfDirAlt=Tangu toleo la 3, inawezekana kufafanua saraka ya mizizi mbadala. Hii hukuruhusu kuhifadhi, kwenye saraka maalum, programu-jalizi na violezo maalum.
Unda tu saraka kwenye mzizi wa Dolibarr (kwa mfano: desturi).
+NotExistsDirect=Saraka ya mizizi mbadala haijafafanuliwa kwa saraka iliyopo.
+InfDirAlt=Tangu toleo la 3, inawezekana kufafanua saraka ya mizizi mbadala. Hii hukuruhusu kuhifadhi, kwenye saraka maalum, programu-jalizi na violezo maalum.
Unda tu saraka kwenye mzizi wa Dolibarr (kwa mfano: desturi).
InfDirExample=
Kisha itangaze katika faili conf.php
$dolibarr_main_url_root_alt='/custom'
$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'
Ikiwa mistari hii imetolewa maoni kwa "#", ili kuiwezesha, toa maoni tu kwa kuondoa herufi "#". YouCanSubmitFile=Unaweza kupakia faili ya .zip ya kifurushi cha moduli kutoka hapa: CurrentVersion=Toleo la sasa la Dolibarr @@ -361,17 +361,17 @@ LastActivationIP=IP ya uanzishaji wa hivi karibuni LastActivationVersion=Toleo la hivi punde la kuwezesha UpdateServerOffline=Sasisha seva nje ya mtandao WithCounter=Dhibiti kaunta -GenericMaskCodes=Unaweza kuingiza kinyago chochote cha nambari. Katika barakoa hii, lebo zifuatazo zinaweza kutumika:
{000000} inalingana na nambari ambayo itaongezwa kwa kila %s. Weka sufuri nyingi kadiri ya urefu unaohitajika wa kaunta. Kaunta itakamilika kwa sufuri kutoka upande wa kushoto ili kuwa na sufuri nyingi kama kinyago.
{000000+000} sawa na ile ya awali lakini msimbo unaolingana na nambari iliyo upande wa kulia wa + ishara inatumika kuanzia %s ya kwanza\n.
{000000@x} sawa na ile ya awali lakini kaunta imewekwa upya hadi sifuri mwezi x unapofikiwa (x kati ya 1 na 12, au 0 ili kutumia miezi ya mapema ya mwaka wa fedha iliyobainishwa katika usanidi wako, au 99 kuweka upya hadi sufuri kila mwezi). Ikiwa chaguo hili litatumika na x ni 2 au zaidi, basi mfuatano wa {yy}{mm} au {yyyy}{mm} unahitajika pia.
{dd} siku (01 hadi 31).
{mm} mwezi (01 hadi 12).
{yy} , {yyyy} au {y} mwaka zaidi ya 2, 4 au 1 nambari.
-GenericMaskCodes2= {cccc} msimbo wa mteja kwenye herufi n
{cccc000} msimbo wa mteja kwenye herufi n hufuatwa na kaunta iliyowekwa kwa mteja. Kaunta hii iliyowekwa kwa mteja imewekwa upya kwa wakati mmoja na kaunta ya kimataifa.
{tttt} Msimbo wa aina ya mtu wa tatu kwenye herufi n (tazama menyu Nyumbani - Mipangilio - Kamusi - Aina za wahusika wengine). Ukiongeza lebo hii, kihesabu kitakuwa tofauti kwa kila aina ya wahusika wengine.
-GenericMaskCodes3=Wahusika wengine wote kwenye barakoa watabaki bila kubadilika.
Nafasi haziruhusiwi.
-GenericMaskCodes3EAN=Vibambo vingine vyote kwenye barakoa vitasalia bila kubadilika (isipokuwa * au ? katika nafasi ya 13 katika EAN13).
Nafasi haziruhusiwi.
Katika EAN13, herufi ya mwisho baada ya ya mwisho } katika nafasi ya 13 inapaswa kuwa * au ? . Itabadilishwa na ufunguo uliohesabiwa.
+GenericMaskCodes=You may enter any numbering mask. In this mask, the following tags can be used:
{000000} corresponds to a number which will be incremented on each %s. Enter as many zeros as the desired length of the counter. The counter will be completed by zeros from the left in order to have as many zeros as the mask.
{000000+000} same as the previous one but an offset corresponding to the number to the right of the + sign is applied starting on the first %s.
{000000@x} same as the previous one but the counter is reset to zero when month x is reached (x between 1 and 12, or 0 to use the early months of fiscal year defined in your configuration, or 99 to reset to zero every month). If this option is used and x is 2 or higher, then the sequence {yy}{mm} or {yyyy}{mm} is also required.
{dd} day (01 to 31).
{mm} month (01 to 12).
{yy}, {yyyy} or {y} year over 2, 4 or 1 numbers.
+GenericMaskCodes2= {cccc} msimbo wa mteja kwenye herufi n
{cccc000} msimbo wa mteja kwenye herufi n hufuatwa na kaunta iliyowekwa kwa mteja. Kaunta hii iliyowekwa kwa mteja imewekwa upya kwa wakati mmoja na kaunta ya kimataifa.
{tttt} Msimbo wa aina ya mtu wa tatu kwenye herufi n (tazama menyu Nyumbani - Mipangilio - Kamusi - Aina za wahusika wengine). Ukiongeza lebo hii, kihesabu kitakuwa tofauti kwa kila aina ya wahusika wengine.
+GenericMaskCodes3=Wahusika wengine wote kwenye barakoa watabaki bila kubadilika.
Nafasi haziruhusiwi.
+GenericMaskCodes3EAN=Vibambo vingine vyote kwenye barakoa vitasalia bila kubadilika (isipokuwa * au ? katika nafasi ya 13 katika EAN13).
Nafasi haziruhusiwi.
Katika EAN13, herufi ya mwisho baada ya ya mwisho } katika nafasi ya 13 inapaswa kuwa * au ? . Itabadilishwa na ufunguo uliohesabiwa.
GenericMaskCodes4a=Example on the 99th %s of the third party TheCompany, with date 2023-01-31:
GenericMaskCodes4b=Example on third party created on 2023-01-31:
GenericMaskCodes4c=Example on product created on 2023-01-31:
GenericMaskCodes5=ABC{yy}{mm}-{000000} will give ABC2301-000099
{0000+100@1}-ZZZ/{dd}/XXX will give 0199-ZZZ/31/XXX
IN{yy}{mm}-{0000}-{t} will give IN2301-0099-A if the type of company is 'Responsable Inscripto' with code for type that is 'A_RI' GenericNumRefModelDesc=Hurejesha nambari inayoweza kugeuzwa kukufaa kulingana na kinyago kilichobainishwa. -ServerAvailableOnIPOrPort=Seva inapatikana katika anwani %s kwenye bandari %s -ServerNotAvailableOnIPOrPort=Seva haipatikani kwa anwani %s kwenye bandari %s +ServerAvailableOnIPOrPort=Seva inapatikana katika anwani %s kwenye bandari %s +ServerNotAvailableOnIPOrPort=Seva haipatikani kwa anwani %s kwenye bandari %s DoTestServerAvailability=Jaribu muunganisho wa seva DoTestSend=Mtihani wa kutuma DoTestSendHTML=Jaribu kutuma HTML @@ -471,7 +471,7 @@ ExtrafieldParamHelpSeparator=Weka tupu kwa kitenganishi rahisi
Weka hii iwe LibraryToBuildPDF=Maktaba inayotumika kutengeneza PDF LocalTaxDesc=Baadhi ya nchi zinaweza kutoza kodi mbili au tatu kwenye kila laini ya ankara. Ikiwa ndivyo ilivyo, chagua aina ya ushuru wa pili na wa tatu na kiwango chake. Aina zinazowezekana ni:
1: Kodi ya ndani itatozwa kwa bidhaa na huduma bila VAT (kokotoo la ushuru wa ndani huhesabiwa kwa kiasi bila kodi)
2: Kodi ya ndani itatozwa kwa bidhaa na huduma ikijumuisha vat (kokotoo la kodi ya ndani huhesabiwa kwa kiasi + kodi kuu)
3: Kodi ya ndani itatozwa kwa bidhaa bila VAT (kokotoo la ushuru wa ndani huhesabiwa kwa kiasi bila kodi)
4: Kodi ya ndani itatozwa kwa bidhaa ikijumuisha vat (kokotoo la ushuru wa ndani huhesabiwa kwa kiasi + VAT kuu)
5: Kodi ya ndani itatozwa kwa huduma bila VAT (kokotoo la ushuru wa ndani huhesabiwa kwa kiasi bila kodi)
6: Kodi ya ndani itatozwa kwa huduma ikijumuisha vat (kokotoo la ushuru wa ndani huhesabiwa kwa kiasi + kodi) SMS=SMS -LinkToTestClickToDial=Weka nambari ya simu ya kupiga ili kuonyesha kiungo cha kujaribu url ya BofyaToDial kwa mtumiaji %s +LinkToTestClickToDial=Weka nambari ya simu ya kupiga ili kuonyesha kiungo cha kujaribu url ya BofyaToDial kwa mtumiaji %s RefreshPhoneLink=Onyesha upya kiungo LinkToTest=Kiungo kinachoweza kubofya kimetolewa kwa mtumiaji %s (bonyeza nambari ya simu ili kujaribu) KeepEmptyToUseDefault=Weka tupu ili kutumia thamani chaguomsingi @@ -518,8 +518,8 @@ DependsOn=Moduli hii inahitaji moduli RequiredBy=Moduli hii inahitajika na moduli TheKeyIsTheNameOfHtmlField=Hili ndilo jina la uga wa HTML. Ujuzi wa kiufundi unahitajika ili kusoma maudhui ya ukurasa wa HTML ili kupata jina muhimu la sehemu. PageUrlForDefaultValues=Lazima uweke njia ya jamaa ya URL ya ukurasa. Ukijumuisha vigezo katika URL, itafaa ikiwa vigezo vyote katika URL iliyovinjari vina thamani iliyofafanuliwa hapa. -PageUrlForDefaultValuesCreate=
Mfano:
Ili fomu iunde mtu mwingine mpya, ni %s .
Kwa URL ya sehemu za nje zilizosakinishwa kwenye saraka maalum, usijumuishe "desturi/", kwa hivyo tumia njia kama mymodule/mypage.php na si desturi/mymodule/mypage.php.
Ikiwa unataka thamani chaguo-msingi ikiwa url ina kigezo fulani, unaweza kutumia %s -PageUrlForDefaultValuesList=
Mfano:
Kwa ukurasa unaoorodhesha wahusika wengine, ni %s .
Kwa URL ya sehemu za nje zilizosakinishwa kwenye saraka maalum, usijumuishe "desturi/" kwa hivyo tumia njia kama mymodule/mypagelist.php na si desturi/mymodule/mypagelist.php.
Ikiwa unataka thamani chaguo-msingi ikiwa url ina kigezo fulani, unaweza kutumia %s +PageUrlForDefaultValuesCreate=
Mfano:
Ili fomu iunde mtu mwingine mpya, ni %s .
Kwa URL ya sehemu za nje zilizosakinishwa kwenye saraka maalum, usijumuishe "desturi/", kwa hivyo tumia njia kama mymodule/mypage.php na si desturi/mymodule/mypage.php.
Ikiwa unataka thamani chaguo-msingi ikiwa url ina kigezo fulani, unaweza kutumia %s +PageUrlForDefaultValuesList=
Mfano:
Kwa ukurasa unaoorodhesha wahusika wengine, ni %s .
Kwa URL ya sehemu za nje zilizosakinishwa kwenye saraka maalum, usijumuishe "desturi/" kwa hivyo tumia njia kama mymodule/mypagelist.php na si desturi/mymodule/mypagelist.php.
Ikiwa unataka thamani chaguo-msingi ikiwa url ina kigezo fulani, unaweza kutumia %s AlsoDefaultValuesAreEffectiveForActionCreate=Also note that overwriting default values for form creation works only for pages that were correctly designed (so with parameter action=create or presend...) EnableDefaultValues=Washa ubinafsishaji wa thamani chaguo-msingi EnableOverwriteTranslation=Ruhusu ubinafsishaji wa tafsiri @@ -1135,12 +1135,12 @@ LocalTax2IsUsedDesc=Tumia aina ya tatu ya ushuru (isipokuwa ya kwanza) LocalTax2IsNotUsedDesc=Usitumie aina nyingine ya ushuru (isipokuwa ya kwanza) LocalTax2Management=Aina ya tatu ya ushuru LocalTax1ManagementES=Usimamizi wa RE -LocalTax1IsUsedDescES=Kiwango cha RE kwa chaguomsingi wakati wa kuunda matarajio, ankara, maagizo n.k. hufuata kanuni inayotumika ya kawaida:
Ikiwa mnunuzi hajatawaliwa na RE, RE kwa chaguo-msingi=0. Mwisho wa kanuni.
Ikiwa mnunuzi anakabiliwa na RE basi RE bila msingi. Mwisho wa kanuni.
+LocalTax1IsUsedDescES=Kiwango cha RE kwa chaguomsingi wakati wa kuunda matarajio, ankara, maagizo n.k. hufuata kanuni inayotumika ya kawaida:
Ikiwa mnunuzi hajatawaliwa na RE, RE kwa chaguo-msingi=0. Mwisho wa kanuni.
Ikiwa mnunuzi anakabiliwa na RE basi RE bila msingi. Mwisho wa kanuni.
LocalTax1IsNotUsedDescES=Kwa chaguo-msingi RE iliyopendekezwa ni 0. Mwisho wa sheria. LocalTax1IsUsedExampleES=Huko Uhispania ni wataalamu walio chini ya sehemu fulani maalum za IAE ya Uhispania. LocalTax1IsNotUsedExampleES=Nchini Uhispania ni taaluma na jamii na ziko chini ya sehemu fulani za IAE ya Uhispania. LocalTax2ManagementES=Usimamizi wa IRPF -LocalTax2IsUsedDescES=Kiwango cha IRPF kwa chaguomsingi wakati wa kuunda matarajio, ankara, maagizo n.k. fuata kanuni inayotumika ya kawaida:
Ikiwa muuzaji hajakabiliwa na IRPF, basi IRPF kwa chaguo-msingi=0. Mwisho wa kanuni.
Ikiwa muuzaji anakabiliwa na IRPF basi IRPF kwa chaguo-msingi. Mwisho wa kanuni.
+LocalTax2IsUsedDescES=Kiwango cha IRPF kwa chaguomsingi wakati wa kuunda matarajio, ankara, maagizo n.k. fuata kanuni inayotumika ya kawaida:
Ikiwa muuzaji hajakabiliwa na IRPF, basi IRPF kwa chaguo-msingi=0. Mwisho wa kanuni.
Ikiwa muuzaji anakabiliwa na IRPF basi IRPF kwa chaguo-msingi. Mwisho wa kanuni.
LocalTax2IsNotUsedDescES=Kwa chaguo-msingi IRPF inayopendekezwa ni 0. Mwisho wa sheria. LocalTax2IsUsedExampleES=Huko Uhispania, wafanyikazi wa kujitegemea na wataalamu wa kujitegemea ambao hutoa huduma na kampuni ambazo zimechagua mfumo wa ushuru wa moduli. LocalTax2IsNotUsedExampleES=Huko Uhispania ni biashara ambazo haziko chini ya mfumo wa ushuru wa moduli. @@ -1197,6 +1197,7 @@ Skin=Mandhari ya ngozi DefaultSkin=Mandhari chaguomsingi ya ngozi MaxSizeList=Urefu wa juu wa orodha DefaultMaxSizeList=Upeo chaguomsingi wa urefu wa orodha +DisplayGrandTotalInList=Display grand total (for all pages) in lists footer DefaultMaxSizeShortList=Upeo chaguomsingi wa urefu wa orodha fupi (yaani katika kadi ya mteja) MessageOfDay=Ujumbe wa siku MessageLogin=Ujumbe wa ukurasa wa kuingia @@ -1249,7 +1250,7 @@ SetupDescription2=Sehemu mbili zifuatazo ni za lazima (viingizo viwili vya kwanz SetupDescription3= %s -> %s

Vigezo vya msingi vinavyotumika kubinafsisha tabia chaguomsingi ya programu yako (k.m kwa vipengele vinavyohusiana na nchi). SetupDescription4= %s -> %s

Programu hii ni safu ya moduli/programu nyingi. Moduli zinazohusiana na mahitaji yako lazima ziwashwe na kusanidiwa. Maingizo ya menyu yataonekana na kuwezesha moduli hizi. SetupDescription5=Maingizo mengine ya menyu ya Kuweka hudhibiti vigezo vya hiari. -SetupDescriptionLink= %s - %s +SetupDescriptionLink= %s - %s SetupDescription3b=Vigezo vya msingi vinavyotumika kubinafsisha tabia chaguo-msingi ya programu yako (k.m kwa vipengele vinavyohusiana na nchi). SetupDescription4b=Programu hii ni safu ya moduli/programu nyingi. Moduli zinazohusiana na mahitaji yako lazima ziwezeshwe. Maingizo ya menyu yataonekana na kuwezesha moduli hizi. AuditedSecurityEvents=Matukio ya usalama ambayo yanakaguliwa @@ -1381,21 +1382,21 @@ NewTranslationStringToShow=Mfuatano mpya wa tafsiri wa kuonyesha OriginalValueWas=Tafsiri asili imebatilishwa. Thamani halisi ilikuwa:

%s TransKeyWithoutOriginalValue=Umelazimisha tafsiri mpya ya ufunguo wa kutafsiri ' %s ' ambayo haipo katika faili za lugha yoyote TitleNumberOfActivatedModules=Moduli zilizoamilishwa -TotalNumberOfActivatedModules=Sehemu zilizoamilishwa: %s / %s +TotalNumberOfActivatedModules=Sehemu zilizoamilishwa: %s / %s YouMustEnableOneModule=Lazima angalau uwashe moduli 1 YouMustEnableTranslationOverwriteBefore=Lazima kwanza uwezeshe uandishi wa tafsiri ili uruhusiwe kuchukua nafasi ya tafsiri ClassNotFoundIntoPathWarning=Darasa %s haipatikani kwenye njia ya PHP YesInSummer=Ndiyo katika majira ya joto -OnlyFollowingModulesAreOpenedToExternalUsers=Kumbuka, sehemu zifuatazo pekee ndizo zinapatikana kwa watumiaji wa nje (bila kujali ruhusa za watumiaji kama hao) na ikiwa tu ruhusa zimetolewa:
+OnlyFollowingModulesAreOpenedToExternalUsers=Kumbuka, sehemu zifuatazo pekee ndizo zinapatikana kwa watumiaji wa nje (bila kujali ruhusa za watumiaji kama hao) na ikiwa tu ruhusa zimetolewa:
SuhosinSessionEncrypt=Hifadhi ya kipindi imesimbwa kwa njia fiche na Suhosin ConditionIsCurrently=Hali kwa sasa ni %s YouUseBestDriver=Unatumia dereva %s ambayo ni dereva bora zaidi kwa sasa. YouDoNotUseBestDriver=Unatumia dereva %s lakini dereva %s inapendekezwa. -NbOfObjectIsLowerThanNoPb=Una %s pekee\n %s katika hifadhidata. Hii haihitaji uboreshaji wowote. +NbOfObjectIsLowerThanNoPb=You have only %s %s in the database. This does not require any particular optimization. ComboListOptim=Uboreshaji wa upakiaji wa orodha ya mchanganyiko SearchOptim=Uboreshaji wa utafutaji YouHaveXObjectUseComboOptim=Una %s %s katika hifadhidata. Unaweza kwenda katika usanidi wa moduli ili kuwezesha upakiaji wa orodha ya mseto kwenye tukio lililobonyezwa kwa ufunguo. -YouHaveXObjectUseSearchOptim=Una %s %s katika hifadhidata. Unaweza kuongeza %s isiyobadilika.\n kwa 1 katika Nyumbani-Setup-Nyingine. +YouHaveXObjectUseSearchOptim=You have %s %s in the database. You can add the constant %s to 1 in Home-Setup-Other. YouHaveXObjectUseSearchOptimDesc=Hii inaweka kikomo utaftaji hadi mwanzo wa mifuatano ambayo inafanya uwezekano wa hifadhidata kutumia faharisi na unapaswa kupata jibu la haraka. YouHaveXObjectAndSearchOptimOn=Una %s %s katika hifadhidata na mara kwa mara %s imewekwa kuwa %s katika Usanidi-Nyumbani-Nyingine. BrowserIsOK=Unatumia %s kivinjari. Kivinjari hiki ni sawa kwa usalama na utendakazi. @@ -1921,7 +1922,7 @@ GeoIPMaxmindSetup=Usanidi wa moduli ya GeoIP Maxmind PathToGeoIPMaxmindCountryDataFile=Njia ya faili iliyo na Maxmind ip kwa tafsiri ya nchi NoteOnPathLocation=Kumbuka kuwa faili yako ya data ya ip hadi nchi lazima iwe ndani ya saraka ambayo PHP yako inaweza kusoma (Angalia usanidi wako wa PHP open_basedir na ruhusa za mfumo wa faili). YouCanDownloadFreeDatFileTo=Unaweza kupakua toleo la onyesho lisilolipishwa ya faili ya Maxmind GeoIP nchi katika %s. -YouCanDownloadAdvancedDatFileTo=Unaweza pia kupakua zaidi\n toleo kamili, pamoja na masasisho, ya faili ya Maxmind GeoIP nchi katika %s. +YouCanDownloadAdvancedDatFileTo=You can also download a more complete version, with updates, of the Maxmind GeoIP country file at %s. TestGeoIPResult=Jaribio la IP ya ubadilishaji -> nchi ##### Projects ##### ProjectsNumberingModules=Moduli ya kuhesabu miradi @@ -1971,7 +1972,7 @@ SomethingMakeInstallFromWebNotPossible=Ufungaji wa moduli ya nje hauwezekani kut SomethingMakeInstallFromWebNotPossible2=Kwa sababu hii, mchakato wa kuboresha uliofafanuliwa hapa ni mchakato wa mwongozo tu mtumiaji aliyebahatika anaweza kufanya. InstallModuleFromWebHasBeenDisabledContactUs=Kusakinisha au kutengeneza moduli za nje au tovuti zinazobadilika, kutoka kwa programu, imefungwa kwa sasa kwa madhumuni ya usalama. Tafadhali wasiliana nasi ikiwa unahitaji kuwezesha kipengele hiki. InstallModuleFromWebHasBeenDisabledByFile=Usakinishaji wa sehemu ya nje kutoka kwa programu umezimwa na msimamizi wako. Lazima umwombe aondoe faili %s kuruhusu kipengele hiki. -ConfFileMustContainCustom=Kusakinisha au kujenga sehemu ya nje kutoka kwa programu kunahitaji kuhifadhi faili za sehemu kwenye saraka %s . Ili saraka hii ichakatwa na Dolibarr, lazima usanidi conf/conf.php ili kuongeza mistari 2 ya maagizo:
$dolibarr_main_url_root_alt='/custom';
$dolibarr_main_document_root_alt='%s/desturi'; +ConfFileMustContainCustom=Kusakinisha au kujenga sehemu ya nje kutoka kwa programu kunahitaji kuhifadhi faili za sehemu kwenye saraka %s . Ili saraka hii ichakatwa na Dolibarr, lazima usanidi conf/conf.php ili kuongeza mistari 2 ya maagizo:
$dolibarr_main_url_root_alt='/custom';
$dolibarr_main_document_root_alt='%s/desturi'; HighlightLinesOnMouseHover=Angazia mistari ya jedwali wakati uhamishaji wa kipanya unapita HighlightLinesColor=Angazia rangi ya mstari wakati kipanya kinapita (tumia 'ffffff' bila kuangazia) HighlightLinesChecked=Angazia rangi ya mstari inapoangaliwa (tumia 'ffffff' bila kuangazia) @@ -2113,7 +2114,7 @@ HelpOnTooltipDesc=Weka maandishi au ufunguo wa kutafsiri hapa ili maandishi yaon YouCanDeleteFileOnServerWith=Unaweza kufuta faili hii kwenye seva kwa Mstari wa Amri:
%s ChartLoaded=Chati ya akaunti imepakiwa SocialNetworkSetup=Usanidi wa moduli ya Mitandao ya Kijamii -EnableFeatureFor=Washa vipengele vya %s +EnableFeatureFor=Washa vipengele vya %s VATIsUsedIsOff=Kumbuka: Chaguo la kutumia Kodi ya Mauzo au VAT limewekwa kuwa Imezimwa katika menyu %s - %s, kwa hivyo ushuru wa mauzo au Vat iliyotumiwa itakuwa 0 kwa mauzo kila wakati. SwapSenderAndRecipientOnPDF=Badilisha nafasi ya anwani ya mtumaji na mpokeaji kwenye hati za PDF FeatureSupportedOnTextFieldsOnly=Onyo, kipengele kinachotumika kwenye sehemu za maandishi na orodha za mchanganyiko pekee. Pia kigezo cha URL action=create au action=edit lazima kiwekwe AU jina la ukurasa lazima limalizike na 'new.php' ili kuanzisha kipengele hiki. @@ -2289,8 +2290,8 @@ DatabasePasswordObfuscated=Nenosiri la hifadhidata limefichwa katika faili ya co DatabasePasswordNotObfuscated=Nenosiri la hifadhidata HAIJABIKISHWA kwenye faili ya conf APIsAreNotEnabled=Moduli za API hazijawezeshwa YouShouldSetThisToOff=Unapaswa kuweka hii kuwa 0 au kuzima -InstallAndUpgradeLockedBy=Usakinishaji na uboreshaji hufungwa na faili %s -InstallLockedBy=Sakinisha/Sakinisha upya imefungwa na faili %s +InstallAndUpgradeLockedBy=Usakinishaji na uboreshaji hufungwa na faili %s +InstallLockedBy=Sakinisha/Sakinisha upya imefungwa na faili %s InstallOfAddonIsNotBlocked=Ufungaji wa addons haujafungwa. Unda faili installmodules.lock kwenye saraka %s kuzuia usakinishaji wa viongezeo/moduli za nje. OldImplementation=Utekelezaji wa zamani PDF_SHOW_LINK_TO_ONLINE_PAYMENT=Ikiwa baadhi ya moduli za malipo mtandaoni zimewashwa (Paypal, Stripe, ...), ongeza kiungo kwenye PDF ili kufanya malipo ya mtandaoni. @@ -2372,7 +2373,7 @@ MaxNumberOfPostOnPublicPagesByIP=Idadi ya juu zaidi ya machapisho kwenye kurasa CIDLookupURL=The module brings an URL that can be used by an external tool to get the name of a third party or contact from its phone number. URL to use is: ScriptIsEmpty=Hati ni tupu ShowHideTheNRequests=Onyesha/ficha %s Maombi ya SQL -DefinedAPathForAntivirusCommandIntoSetup=Bainisha njia ya programu ya kuzuia virusi katika %s +DefinedAPathForAntivirusCommandIntoSetup=Bainisha njia ya programu ya kuzuia virusi katika %s TriggerCodes=Matukio yanayoweza kuzuka TriggerCodeInfo=Ingiza hapa misimbo ya vichochezi ambayo lazima itoe chapisho la ombi la wavuti (URL ya nje pekee ndiyo inaruhusiwa). Unaweza kuingiza misimbo kadhaa ya vichochezi ikitenganishwa na koma. EditableWhenDraftOnly=Ikiwa haijachaguliwa, thamani inaweza kurekebishwa tu wakati kitu kina hali ya rasimu @@ -2405,8 +2406,8 @@ NotAvailableByDefaultEnabledOnModuleActivation=Haijaundwa na chaguo-msingi. Imeu CSSPage=Mtindo wa CSS Defaultfortype=Chaguomsingi DefaultForTypeDesc=Kiolezo kinachotumiwa na chaguo-msingi wakati wa kuunda barua pepe mpya ya aina ya kiolezo -OptionXShouldBeEnabledInModuleY=Chaguo " %s " inapaswa kuwashwa katika sehemu %s -OptionXIsCorrectlyEnabledInModuleY=Chaguo " %s " imewashwa kuwa moduli %s +OptionXShouldBeEnabledInModuleY=Chaguo " %s " inapaswa kuwashwa katika sehemu %s +OptionXIsCorrectlyEnabledInModuleY=Chaguo " %s " imewashwa kuwa moduli %s AllowOnLineSign=Allow On Line signature AtBottomOfPage=Chini ya ukurasa FailedAuth=failed authentications @@ -2433,3 +2434,12 @@ UrlPublicInterfaceHelpAdmin=It is possible to define an alias to the web server ExportUseForce=Use the parameter -f ExportUseForceHelp=Force to continue the export even when an error is found (Backup may not be reliable) CustomPrompt=Custom prompts +AiDescription=AI (Artificial Intelligence) features +AiDescriptionLong=Provides AI (Artificial Intelligence) features in different part of the application. Need external AI API. +AI_KEY_API_CHATGPT= Key for ChatGPT IA api +AiSetup=AI module setup +AiCustomPrompt=AI customs prompt +AI_CONFIGURATIONS_PROMPT=Custom prompt +ImageGeneration=Image generation +AIPromptForFeatures=AI custom prompts for features +EnterAnIP=Enter an IP address diff --git a/htdocs/langs/sw_SW/assets.lang b/htdocs/langs/sw_SW/assets.lang index ed22a3bc4d2..40a4c78196c 100644 --- a/htdocs/langs/sw_SW/assets.lang +++ b/htdocs/langs/sw_SW/assets.lang @@ -122,7 +122,6 @@ AssetDepreciationOptionDepreciationTypeLinear=Linear AssetDepreciationOptionDepreciationTypeDegressive=Degressive AssetDepreciationOptionDepreciationTypeExceptional=Kipekee AssetDepreciationOptionDegressiveRate=Kiwango cha kushuka -AssetDepreciationOptionAcceleratedDepreciation=Kushuka kwa thamani kwa kasi (kodi) AssetDepreciationOptionDuration=Muda AssetDepreciationOptionDurationType=Muda wa aina AssetDepreciationOptionDurationTypeAnnual=Mwaka @@ -168,7 +167,7 @@ AssetDepreciationReversal=Kugeuza # # Errors # -AssetErrorAssetOrAssetModelIDNotProvide=Kitambulisho cha kipengee au sauti ya mfano haijatolewa +AssetErrorAssetOrAssetModelIDNotProvide=Id of the asset or the model found has not been provided AssetErrorFetchAccountancyCodesForMode=Hitilafu wakati wa kurejesha akaunti za uhasibu za '%s' hali ya kushuka kwa thamani AssetErrorDeleteAccountancyCodesForMode=Hitilafu wakati wa kufuta akaunti za uhasibu kutoka kwa '%s' hali ya kushuka kwa thamani AssetErrorInsertAccountancyCodesForMode=Hitilafu wakati wa kuingiza akaunti za uhasibu za hali ya uchakavu '%s' diff --git a/htdocs/langs/sw_SW/bills.lang b/htdocs/langs/sw_SW/bills.lang index b1a0dac0230..67c1680ae39 100644 --- a/htdocs/langs/sw_SW/bills.lang +++ b/htdocs/langs/sw_SW/bills.lang @@ -93,6 +93,9 @@ CodePaymentMode=Njia ya malipo (msimbo) LabelPaymentMode=Njia ya malipo (lebo) PaymentModeShort=Njia ya malipo PaymentTerm=Muda wa Malipo +IdPaymentTerm=Payment term (id) +CodePaymentTerm=Payment term (code) +LabelPaymentTerm=Payment term (label) PaymentConditions=Masharti ya Malipo PaymentConditionsShort=Masharti ya Malipo PaymentAmount=Kiasi cha malipo @@ -268,6 +271,8 @@ NoDraftBills=Hakuna rasimu ya ankara NoOtherDraftBills=Hakuna rasimu nyingine ya ankara NoDraftInvoices=Hakuna rasimu ya ankara RefBill=Ref ya ankara +RefSupplierBill=Supplier invoice ref +SupplierOrderCreateBill=Create invoice ToBill=Kwa bili RemainderToBill=Salio kwa bili SendBillByMail=Tuma ankara kwa barua pepe @@ -352,6 +357,7 @@ HelpAbandonOther=Kiasi hiki kimetelekezwa kwa kuwa kilikuwa na hitilafu (mteja m IdSocialContribution=Kitambulisho cha malipo ya kodi ya kijamii/fedha PaymentId=Kitambulisho cha malipo PaymentRef=Ref. +SourceInvoiceId=Source invoice id InvoiceId=Kitambulisho cha ankara InvoiceRef=Ref ya ankara. InvoiceDateCreation=Tarehe ya kuunda ankara diff --git a/htdocs/langs/sw_SW/bookmarks.lang b/htdocs/langs/sw_SW/bookmarks.lang index 272543c3b33..dba8ec1e031 100644 --- a/htdocs/langs/sw_SW/bookmarks.lang +++ b/htdocs/langs/sw_SW/bookmarks.lang @@ -1,7 +1,7 @@ # Dolibarr language file - Source file is en_US - marque pages / bookmarks AddThisPageToBookmarks = Ongeza ukurasa wa sasa kwenye vialamisho -BehaviourOnClick = Tabia wakati URL ya alamisho imechaguliwa +BehaviourOnClick = Behavior when a bookmark URL is selected Bookmark = Alamisho Bookmarks = Alamisho BookmarkTargetNewWindowShort = Kichupo kipya diff --git a/htdocs/langs/sw_SW/boxes.lang b/htdocs/langs/sw_SW/boxes.lang index 3026ba76df3..bb0d83cb607 100644 --- a/htdocs/langs/sw_SW/boxes.lang +++ b/htdocs/langs/sw_SW/boxes.lang @@ -49,7 +49,7 @@ BoxOldestActions=Matukio ya zamani zaidi ya kufanya BoxLastExpiredServices=Hivi karibuni %s anwani za zamani zaidi zilizo na huduma zinazotumika ambazo muda wake umeisha BoxTitleLastActionsToDo=Hivi karibuni %s vitendo vya kufanya BoxTitleOldestActionsToDo=Kongwe zaidi %s matukio ya kufanya, haijakamilika -BoxTitleFutureActions=%s inayofuata\n matukio yajayo +BoxTitleFutureActions=The next %s upcoming events BoxTitleLastContracts=Hivi karibuni %s mikataba ambayo ilifanyiwa marekebisho BoxTitleLastModifiedDonations=Hivi karibuni %s michango ambayo ilibadilishwa BoxTitleLastModifiedExpenses=Hivi karibuni %s ripoti za gharama ambazo zilibadilishwa @@ -100,7 +100,7 @@ BoxTitleLatestModifiedCandidatures=Hivi karibuni %s maombi ya kazi yaliyorekebis ForCustomersInvoices=ankara za wateja ForCustomersOrders=Wateja maagizo ForProposals=Mapendekezo -LastXMonthRolling=%s ya hivi punde zaidi\n mwezi rolling +LastXMonthRolling=The latest %s month rolling ChooseBoxToAdd=Ongeza wijeti kwenye dashibodi yako BoxAdded=Wijeti iliongezwa kwenye dashibodi yako BoxTitleUserBirthdaysOfMonth=Siku za kuzaliwa za mwezi huu (watumiaji) @@ -115,7 +115,7 @@ BoxLastCustomerShipments=Usafirishaji wa mwisho wa mteja BoxTitleLastCustomerShipments=Hivi karibuni %s usafirishaji wa wateja BoxTitleLastLeaveRequests=Hivi karibuni %s maombi ya likizo yaliyorekebishwa NoRecordedShipments=Hakuna usafirishaji wa mteja uliorekodiwa -BoxCustomersOutstandingBillReached=Wateja walio na kikomo ambacho hakijalipwa wamefikiwa +BoxCustomersOutstandingBillReached=Customers with outstanding limit reached # Pages UsersHome=Watumiaji wa nyumbani na vikundi MembersHome=Uanachama wa Nyumbani diff --git a/htdocs/langs/sw_SW/commercial.lang b/htdocs/langs/sw_SW/commercial.lang index 064d0965b32..7f0c5cc0642 100644 --- a/htdocs/langs/sw_SW/commercial.lang +++ b/htdocs/langs/sw_SW/commercial.lang @@ -77,13 +77,17 @@ ToOfferALinkForOnlineSignature=Kiungo cha sahihi ya mtandaoni WelcomeOnOnlineSignaturePageProposal=Karibu kwenye ukurasa ili ukubali mapendekezo ya kibiashara kutoka %s WelcomeOnOnlineSignaturePageContract=Karibu %s Ukurasa wa Kusaini wa Mkataba wa PDF WelcomeOnOnlineSignaturePageFichinter=Karibu %s Ukurasa wa Kusainiwa kwa PDF +WelcomeOnOnlineSignaturePageSociete_rib=Welcome to %s SEPA mandate PDF Signing Page ThisScreenAllowsYouToSignDocFromProposal=Skrini hii hukuruhusu kukubali na kutia sahihi, au kukataa, pendekezo la bei/manukuu ThisScreenAllowsYouToSignDocFromContract=Skrini hii hukuruhusu kusaini mkataba kwenye umbizo la PDF mtandaoni. ThisScreenAllowsYouToSignDocFromFichinter=Skrini hii hukuruhusu kutia sahihi kuingilia kati kwenye umbizo la PDF mtandaoni. +ThisScreenAllowsYouToSignDocFromSociete_rib=This screen allow you to sign SEPA Mandate on PDF format online. ThisIsInformationOnDocumentToSignProposal=Hii ni habari juu ya hati ya kukubali au kukataa ThisIsInformationOnDocumentToSignContract=Hii ni habari juu ya mkataba wa kusaini ThisIsInformationOnDocumentToSignFichinter=Hii ni habari juu ya kuingilia kati kusaini +ThisIsInformationOnDocumentToSignSociete_rib=This is information on SEPA Mandate to sign SignatureProposalRef=Saini ya pendekezo la nukuu/biashara %s SignatureContractRef=Saini ya mkataba %s SignatureFichinterRef=Saini ya kuingilia kati %s +SignatureSociete_ribRef=Signature of SEPA Mandate %s FeatureOnlineSignDisabled=Kipengele cha kutia sahihi mtandaoni kimezimwa au hati kuzalishwa kabla ya kipengele kuwezeshwa diff --git a/htdocs/langs/sw_SW/companies.lang b/htdocs/langs/sw_SW/companies.lang index 9dc3514f9de..a0f99d85a34 100644 --- a/htdocs/langs/sw_SW/companies.lang +++ b/htdocs/langs/sw_SW/companies.lang @@ -1,4 +1,6 @@ # Dolibarr language file - Source file is en_US - companies +newSocieteAdded=Your contact details have been recorded. We will get back to you soon... +ContactUsDesc=This form allows you to send us a message for a first contact. ErrorCompanyNameAlreadyExists=Jina la kampuni %s tayari ipo. Chagua nyingine. ErrorSetACountryFirst=Weka nchi kwanza SelectThirdParty=Chagua mtu wa tatu @@ -46,7 +48,7 @@ ParentCompany=Kampuni mama Subsidiaries=Kampuni tanzu ReportByMonth=Ripoti kwa mwezi ReportByCustomers=Ripoti kwa kila mteja -ReportByThirdparties=Ripoti kwa kila mtu wa tatu +ReportByThirdparties=Report per third party ReportByQuarter=Ripoti kwa kila kiwango CivilityCode=Kanuni ya kiraia RegisteredOffice=Ofisi iliyosajiliwa @@ -117,12 +119,20 @@ ProfId3Short=kitambulisho cha Prof 3 ProfId4Short=kitambulisho cha Prof 4 ProfId5Short=kitambulisho cha Prof 5 ProfId6Short=kitambulisho cha Prof 6 +ProfId7Short=Prof. id 7 +ProfId8Short=Prof. id 8 +ProfId9Short=Prof. id 9 +ProfId10Short=Prof. id 10 ProfId1=Kitambulisho cha Mtaalamu 1 ProfId2=Kitambulisho cha Mtaalamu 2 ProfId3=Kitambulisho cha Mtaalamu 3 ProfId4=Kitambulisho cha Mtaalamu 4 ProfId5=Kitambulisho cha Mtaalamu 5 ProfId6=Kitambulisho cha Mtaalamu 6 +ProfId7=Professional ID 7 +ProfId8=Professional ID 8 +ProfId9=Professional ID 9 +ProfId10=Professional ID 10 ProfId1AR=Prof Id 1 (CUIT/CUIL) ProfId2AR=Prof Id 2 (Revenu brutes) ProfId3AR=- @@ -201,12 +211,20 @@ ProfId3FR=Prof Id 3 (NAF, APE wa zamani) ProfId4FR=Prof Id 4 (RCS/RM) ProfId5FR=Prof Id 5 (nambari EORI) ProfId6FR=- +ProfId7FR=- +ProfId8FR=- +ProfId9FR=- +ProfId10FR=- ProfId1ShortFR=SIREN ProfId2ShortFR=SIRET ProfId3ShortFR=NAF ProfId4ShortFR=RCS ProfId5ShortFR=EORI ProfId6ShortFR=- +ProfId7ShortFR=- +ProfId8ShortFR=- +ProfId9ShortFR=- +ProfId10ShortFR=- ProfId1GB=Nambari ya Usajili ProfId2GB=- ProfId3GB=SIC @@ -245,7 +263,7 @@ ProfId5MA=Kitambulisho cha Prof. 5 (I.C.E.) ProfId6MA=- ProfId1MX=Prof Id 1 (R.F.C). ProfId2MX=Prof Id 2 (R..P. IMSS) -ProfId3MX=Prof Id 3 (Mkataba wa Kitaalamu) +ProfId3MX=Prof Id 3 (Professional Charter) ProfId4MX=- ProfId5MX=- ProfId6MX=- @@ -313,7 +331,7 @@ CustomerRelativeDiscount=Punguzo la jamaa kwa wateja SupplierRelativeDiscount=Punguzo la jamaa la muuzaji CustomerRelativeDiscountShort=Punguzo la jamaa CustomerAbsoluteDiscountShort=Punguzo kabisa -CompanyHasRelativeDiscount=Mteja huyu ana punguzo chaguomsingi la %s%% +CompanyHasRelativeDiscount=Mteja huyu ana punguzo chaguomsingi la %s%% CompanyHasNoRelativeDiscount=Mteja huyu hana punguzo la jamaa kwa chaguomsingi HasRelativeDiscountFromSupplier=Una punguzo chaguomsingi la %s%% na muuzaji huyu HasNoRelativeDiscountFromSupplier=Hakuna punguzo chaguo-msingi la jamaa na mchuuzi huyu @@ -387,9 +405,9 @@ EditCompany=Badilisha kampuni ThisUserIsNot=Mtumiaji huyu si mtarajiwa, mteja au mchuuzi VATIntraCheck=Angalia VATIntraCheckDesc=Kitambulisho cha VAT lazima kijumuishe kiambishi awali cha nchi. Kiungo %s hutumia huduma ya Ulaya ya kukagua VAT (VIES) ambayo inahitaji ufikiaji wa mtandao kutoka kwa seva ya Dolibarr. -VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do +VATIntraCheckURL=https://ec.europa.eu/taxation_customs/vies/#/vat-validation VATIntraCheckableOnEUSite=Angalia Kitambulisho cha VAT ya ndani ya Jumuiya kwenye tovuti ya Tume ya Ulaya -VATIntraManualCheck=Unaweza pia kuangalia mwenyewe kwenye tovuti ya Tume ya Ulaya %s +VATIntraManualCheck=Unaweza pia kuangalia mwenyewe kwenye tovuti ya Tume ya Ulaya %s ErrorVATCheckMS_UNAVAILABLE=Angalia haiwezekani. Huduma ya hundi haitolewi na nchi mwanachama (%s) NorProspectNorCustomer=Si matarajio, wala mteja JuridicalStatus=Aina ya chombo cha biashara @@ -475,7 +493,7 @@ CurrentOutstandingBill=Mswada wa sasa ambao haujalipwa OutstandingBill=Max. kwa bili ambayo haijalipwa OutstandingBillReached=Max. kwa muswada ambao haujafikiwa OrderMinAmount=Kiasi cha chini cha agizo -MonkeyNumRefModelDesc=Rejesha nambari katika umbizo %syymm-nnnn kwa msimbo wa mteja na %syymm-nnnn kwa msimbo wa muuzaji ambapo yy ni mwaka, mm ni mwezi na nnnn ni nambari ya kuongeza kiotomatiki kwa mpangilio bila mapumziko na hakuna kurudi kwa 0. +MonkeyNumRefModelDesc=Return a number in the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequential auto-incrementing number with no break and no return to 0. LeopardNumRefModelDesc=Kanuni ni bure. Msimbo huu unaweza kurekebishwa wakati wowote. ManagingDirectors=Jina la meneja (Mkurugenzi Mtendaji, mkurugenzi, rais...) MergeOriginThirdparty=Rudufu mtu wa tatu (mtu wa tatu unayetaka kufuta) @@ -500,7 +518,7 @@ InEEC=Ulaya (EEC) RestOfEurope=Sehemu Zingine za Ulaya (EEC) OutOfEurope=Nje ya Ulaya (EEC) CurrentOutstandingBillLate=Bili ya sasa ambayo haijalipwa imechelewa -BecarefullChangeThirdpartyBeforeAddProductToInvoice=Kuwa mwangalifu, kulingana na mipangilio ya bei ya bidhaa yako, unapaswa kubadilisha wahusika wengine kabla ya kuongeza bidhaa kwenye POS. +BecarefullChangeThirdpartyBeforeAddProductToInvoice=Be careful, depending on your product price settings, you should change the third party before adding product to POS. EmailAlreadyExistsPleaseRewriteYourCompanyName=barua pepe tayari ipo tafadhali andika upya jina la kampuni yako TwoRecordsOfCompanyName=zaidi ya rekodi moja ipo kwa kampuni hii, tafadhali wasiliana nasi ili kukamilisha ombi lako la ushirikiano CompanySection=Sehemu ya kampuni @@ -508,3 +526,5 @@ ShowSocialNetworks=Onyesha mitandao ya kijamii HideSocialNetworks=Ficha mitandao ya kijamii ExternalSystemID=Kitambulisho cha mfumo wa nje IDOfPaymentInAnExternalSystem=Kitambulisho cha hali ya malipo katika mfumo wa nje (kama Stripe, Paypal, ...) +AADEWebserviceCredentials=AADE Webservice Credentials +ThirdPartyMustBeACustomerToCreateBANOnStripe=The third-party must be a customer to allow the creation of its bank info on Stripe side diff --git a/htdocs/langs/sw_SW/compta.lang b/htdocs/langs/sw_SW/compta.lang index bd7b0bc7228..91d80a52c95 100644 --- a/htdocs/langs/sw_SW/compta.lang +++ b/htdocs/langs/sw_SW/compta.lang @@ -162,14 +162,15 @@ CalcModeVATDebt=Hali %sVAT kwenye uhasibu wa ahadi%s . CalcModeVATEngagement=Hali %sVAT kwa gharama za mapato%s . CalcModeDebt=Uchambuzi wa hati zinazojulikana zilizorekodiwa CalcModeEngagement=Uchambuzi wa malipo yaliyorekodiwa yanayojulikana +CalcModePayment=Analysis of known recorded payments CalcModeBookkeeping=Uchambuzi wa data iliyoandikwa katika jedwali la Leja ya Utunzaji. CalcModeNoBookKeeping=Hata kama bado hawajahesabiwa kwenye Leja -CalcModeLT1= Hali %sRE kwenye ankara za wateja - ankara za wasambazaji%s -CalcModeLT1Debt=Hali %sRE kwenye ankara za mteja%s -CalcModeLT1Rec= Hali %sRE kuhusu ankara za wasambazaji%s -CalcModeLT2= Hali %sIRPF kwenye ankara za wateja - ankara za wasambazaji%s -CalcModeLT2Debt=Hali %sIRPF kwenye ankara za mteja%s -CalcModeLT2Rec= Hali %sIRPF kwenye ankara za wasambazaji%s +CalcModeLT1= Hali %sRE kwenye ankara za wateja - ankara za wasambazaji%s +CalcModeLT1Debt=Hali %sRE kwenye ankara za mteja%s +CalcModeLT1Rec= Hali %sRE kuhusu ankara za wasambazaji%s +CalcModeLT2= Hali %sIRPF kwenye ankara za wateja - ankara za wasambazaji%s +CalcModeLT2Debt=Hali %sIRPF kwenye ankara za mteja%s +CalcModeLT2Rec= Hali %sIRPF kwenye ankara za wasambazaji%s AnnualSummaryDueDebtMode=Usawa wa mapato na gharama, muhtasari wa kila mwaka AnnualSummaryInputOutputMode=Usawa wa mapato na matumizi, muhtasari wa kila mwaka AnnualByCompanies=Salio la mapato na matumizi, na vikundi vilivyoainishwa vya akaunti @@ -177,18 +178,18 @@ AnnualByCompaniesDueDebtMode=Salio la mapato na matumizi, maelezo kulingana na v AnnualByCompaniesInputOutputMode=Salio la mapato na matumizi, maelezo kulingana na vikundi vilivyobainishwa awali, hali ya %sMapato-Gharama%s alisema uhasibu wa fedha . SeeReportInInputOutputMode=Angalia %suchambuzi wa malipo%s kwa hesabu kulingana na malipo yaliyorekodiwa imetengenezwa hata kama bado haijahesabiwa kwenye Leja SeeReportInDueDebtMode=Angalia %suchambuzi wa hati zilizorekodiwa%s kwa hesabu kulingana na inayojulikana hati zilizorekodiwa hata kama bado hawajahesabiwa katika Leja -SeeReportInBookkeepingMode=Angalia %suchambuzi wa jedwali la leja ya uwekaji vitabu%s kwa ripoti kulingana na Jedwali la Leja ya Uwekaji hesabu +SeeReportInBookkeepingMode=See %sanalysis of bookkeeping ledger table%s for a report based on Bookkeeping Ledger table RulesAmountWithTaxIncluded=- Kiasi kilichoonyeshwa kinajumuisha ushuru wote RulesAmountWithTaxExcluded=- Kiasi cha ankara kilichoonyeshwa hakijumuishwi kodi zote RulesResultDue=- Inajumuisha ankara zote, gharama, VAT, michango, mishahara, iwe inalipwa au la.
- Inategemea tarehe ya bili ya ankara na tarehe ya kukamilisha ya gharama au malipo ya kodi. Kwa mishahara, tarehe ya mwisho wa kipindi hutumiwa. RulesResultInOut=- Inajumuisha malipo halisi yaliyotolewa kwenye ankara, gharama, VAT na mishahara.
- Inategemea tarehe za malipo ya ankara, gharama, VAT, michango na mishahara. -RulesCADue=- Inajumuisha ankara za mteja kama wanalipwa au la.
- Inategemea tarehe ya bili ya ankara hizi.
-RulesCAIn=- Inajumuisha malipo yote ya ufanisi ya ankara zilizopokelewa kutoka kwa wateja.
- Inatokana na tarehe ya malipo ya ankara hizi
+RulesCADue=- Inajumuisha ankara za mteja kama wanalipwa au la.
- Inategemea tarehe ya bili ya ankara hizi.
+RulesCAIn=- Inajumuisha malipo yote ya ufanisi ya ankara zilizopokelewa kutoka kwa wateja.
- Inatokana na tarehe ya malipo ya ankara hizi
RulesCATotalSaleJournal=Inajumuisha njia zote za mkopo kutoka kwa jarida la Uuzaji. RulesSalesTurnoverOfIncomeAccounts=Inajumuisha (mkopo - debit) ya laini za akaunti za bidhaa katika MAPATO ya kikundi RulesAmountOnInOutBookkeepingRecord=Inajumuisha rekodi katika Leja yako na akaunti za uhasibu ambazo zina kikundi "GHARAMA" au "KIPATO" RulesResultBookkeepingPredefined=Inajumuisha rekodi katika Leja yako na akaunti za uhasibu ambazo zina kikundi "GHARAMA" au "KIPATO" -RulesResultBookkeepingPersonalized=Inaonyesha rekodi kwenye Leja yako na akaunti za uhasibu imepangwa kulingana na vikundi vilivyobinafsishwa +RulesResultBookkeepingPersonalized=Inaonyesha rekodi kwenye Leja yako na akaunti za uhasibu imepangwa kulingana na vikundi vilivyobinafsishwa SeePageForSetup=Angalia menyu %s kwa kuanzisha DepositsAreNotIncluded=- Ankara za malipo ya chini hazijajumuishwa DepositsAreIncluded=- Ankara za malipo ya chini zimejumuishwa @@ -253,6 +254,8 @@ CalculationMode=Hali ya kuhesabu AccountancyJournal=Jarida la kanuni za hesabu ACCOUNTING_VAT_SOLD_ACCOUNT=Akaunti (kutoka Chati ya Akaunti) itatumika kama akaunti chaguo-msingi ya VAT kwenye mauzo (inatumika ikiwa haijafafanuliwa kwenye usanidi wa kamusi ya VAT) ACCOUNTING_VAT_BUY_ACCOUNT=Akaunti (kutoka Chati ya Akaunti) itakayotumika kama akaunti chaguo-msingi ya VAT kwenye ununuzi (inatumika ikiwa haijafafanuliwa kwenye usanidi wa kamusi ya VAT) +ACCOUNTING_REVENUESTAMP_SOLD_ACCOUNT=Account (from the Chart Of Account) to be used for the revenue stamp on sales +ACCOUNTING_REVENUESTAMP_BUY_ACCOUNT=Account (from the Chart Of Account) to be used for the revenue stamp on purchases ACCOUNTING_VAT_PAY_ACCOUNT=Akaunti (kutoka Chati ya Akaunti) itatumika kama akaunti chaguo-msingi ya kulipa VAT ACCOUNTING_VAT_BUY_REVERSE_CHARGES_CREDIT=Akaunti (kutoka Chati ya Akaunti) itakayotumika kama akaunti chaguo-msingi ya VAT kwa ununuzi unaotozwa kinyume (Mikopo) ACCOUNTING_VAT_BUY_REVERSE_CHARGES_DEBIT=Akaunti (kutoka Chati ya Akaunti) itatumika kama akaunti chaguo-msingi ya VAT kwa ununuzi wa malipo ya nyuma (Debit) @@ -290,8 +293,8 @@ PurchasebyVatrate=Ununuzi kwa kiwango cha kodi ya mauzo LabelToShow=Lebo fupi PurchaseTurnover=Kununua mauzo PurchaseTurnoverCollected=Mauzo ya ununuzi yamekusanywa -RulesPurchaseTurnoverDue=- Inajumuisha ankara za mtoa huduma kama zimelipwa au la.
- Inatokana na tarehe ya ankara ya ankara hizi.
-RulesPurchaseTurnoverIn=- Inajumuisha malipo yote yenye ufanisi ya ankara zinazofanywa kwa wauzaji.
- Inatokana na tarehe ya malipo ya ankara hizi
+RulesPurchaseTurnoverDue=- Inajumuisha ankara za mtoa huduma kama zimelipwa au la.
- Inatokana na tarehe ya ankara ya ankara hizi.
+RulesPurchaseTurnoverIn=- Inajumuisha malipo yote yenye ufanisi ya ankara zinazofanywa kwa wauzaji.
- Inatokana na tarehe ya malipo ya ankara hizi
RulesPurchaseTurnoverTotalPurchaseJournal=Inajumuisha njia zote za malipo kutoka kwa jarida la ununuzi. RulesPurchaseTurnoverOfExpenseAccounts=Inajumuisha (debit - credit) ya laini za akaunti za bidhaa katika kikundi GHARAMA ReportPurchaseTurnover=Ankara ya mauzo ya ununuzi diff --git a/htdocs/langs/sw_SW/contracts.lang b/htdocs/langs/sw_SW/contracts.lang index 0f3f79c3877..9f50bc1642d 100644 --- a/htdocs/langs/sw_SW/contracts.lang +++ b/htdocs/langs/sw_SW/contracts.lang @@ -78,7 +78,7 @@ CloseAllContracts=Funga njia zote za mkataba DeleteContractLine=Futa mstari wa mkataba ConfirmDeleteContractLine=Je, una uhakika unataka kufuta mstari huu wa mkataba? MoveToAnotherContract=Hamisha huduma kwenye mkataba mwingine. -ConfirmMoveToAnotherContract=Nilichagua mkataba mpya lengwa na kuthibitisha kuwa ninataka kuhamisha huduma hii kwenye mkataba huu. +ConfirmMoveToAnotherContract=I chose a new target contract and confirm I want to move this service into this contract. ConfirmMoveToAnotherContractQuestion=Chagua katika mkataba upi uliopo (wa wahusika wengine sawa), ungependa kuhamishia huduma hii? PaymentRenewContractId=Sasisha mkataba %s (huduma %s) ExpiredSince=Tarehe ya kumalizika muda wake diff --git a/htdocs/langs/sw_SW/cron.lang b/htdocs/langs/sw_SW/cron.lang index a95d44a92bd..c67610a5144 100644 --- a/htdocs/langs/sw_SW/cron.lang +++ b/htdocs/langs/sw_SW/cron.lang @@ -1,6 +1,5 @@ # Dolibarr language file - Source file is en_US - cron -# About page -# Right +# Permissions Permission23101 = Soma kazi iliyopangwa Permission23102 = Unda/sasisha Kazi iliyoratibiwa Permission23103 = Futa Kazi Iliyoratibiwa @@ -14,7 +13,7 @@ FileToLaunchCronJobs=Mstari wa amri ili kuangalia na kuzindua kazi zilizohitimu CronExplainHowToRunUnix=Kwenye mazingira ya Unix unapaswa kutumia kiingilio kifuatacho cha crontab kuendesha safu ya amri kila dakika 5 CronExplainHowToRunWin=Kwenye Microsoft(tm) mazingira ya Windows unaweza kutumia zana za Task Iliyoratibiwa kuendesha safu ya amri kila baada ya dakika 5 CronMethodDoesNotExists=Darasa %s haina mbinu yoyote %s -CronMethodNotAllowed=Mbinu %s ya darasa %s iko katika orodha nyeusi ya njia zilizokatazwa +CronMethodNotAllowed=Method %s of class %s is in blocklist of forbidden methods CronJobDefDesc=Profaili za kazi za Cron zimefafanuliwa kwenye faili ya maelezo ya moduli. Sehemu inapowashwa, hupakiwa na inapatikana ili uweze kusimamia kazi kutoka kwenye menyu ya zana za msimamizi %s. CronJobProfiles=Orodha ya profaili za kazi za cron zilizoainishwa awali # Menu @@ -63,11 +62,11 @@ CronStatusInactiveBtn=Zima CronTaskInactive=Kazi hii imezimwa (haijaratibiwa) CronId=Kitambulisho CronClassFile=Jina la faili na darasa -CronModuleHelp=Jina la saraka ya moduli ya Dolibarr (pia fanya kazi na moduli ya nje ya Dolibarr).
Kwa mfano kupiga simu njia ya kuleta ya Dolibarr Product object /htdocs/ product /class/product.class.php, thamani ya sehemu ni
product -CronClassFileHelp=Njia ya jamaa na jina la faili kupakia (njia inahusiana na saraka ya mizizi ya seva ya wavuti).
Kwa mfano kuita mbinu ya kuleta bidhaa ya Dolibarr htdocs/product/class/ product.class.php , thamani ya jina la faili la darasa ni
product/class/product.class.php -CronObjectHelp=Jina la kitu cha kupakia.
Kwa mfano kupiga simu njia ya kuleta ya bidhaa ya Dolibarr /htdocs/product/class/product.class.php, thamani ya jina la faili la darasa ni
Bidhaa -CronMethodHelp=Mbinu ya kipengee cha kuzindua.
Kwa mfano kupiga simu njia ya kuleta bidhaa ya Dolibarr Product /htdocs/product/class/product.class.php, thamani ya mbinu ni
leta -CronArgsHelp=Hoja za mbinu.
Kwa mfano kupiga simu njia ya kuleta bidhaa ya Dolibarr Product /htdocs/product/class/product.class.php, thamani ya vigezo inaweza kuwa
0, Ref ya Bidhaa +CronModuleHelp=Jina la saraka ya moduli ya Dolibarr (pia fanya kazi na moduli ya nje ya Dolibarr).
Kwa mfano kupiga simu njia ya kuleta ya Dolibarr Product object /htdocs/ product /class/product.class.php, thamani ya sehemu ni
product +CronClassFileHelp=Njia ya jamaa na jina la faili kupakia (njia inahusiana na saraka ya mizizi ya seva ya wavuti).
Kwa mfano kuita mbinu ya kuleta bidhaa ya Dolibarr htdocs/product/class/ product.class.php , thamani ya jina la faili la darasa ni
product/class/product.class.php +CronObjectHelp=Jina la kitu cha kupakia.
Kwa mfano kupiga simu njia ya kuleta ya bidhaa ya Dolibarr /htdocs/product/class/product.class.php, thamani ya jina la faili la darasa ni
Bidhaa +CronMethodHelp=Mbinu ya kipengee cha kuzindua.
Kwa mfano kupiga simu njia ya kuleta bidhaa ya Dolibarr Product /htdocs/product/class/product.class.php, thamani ya mbinu ni
leta +CronArgsHelp=The method arguments.
For example to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for parameters can be
0, ProductRef CronCommandHelp=Mstari wa amri ya mfumo wa kutekeleza. CronCreateJob=Unda Kazi Mpya Iliyoratibiwa CronFrom=Kutoka @@ -91,6 +90,7 @@ WarningCronDelayed=Tahadhari, kwa madhumuni ya utendakazi, tarehe yoyote inayofu DATAPOLICYJob=Kisafishaji data na kitambulisho JobXMustBeEnabled=Kazi %s lazima kuwezeshwa EmailIfError=Barua pepe kwa onyo juu ya hitilafu +JobNotFound=Job %s not found in list of jobs (try to disable/enabled module) ErrorInBatch=Hitilafu wakati wa kutekeleza kazi %s # Cron Boxes diff --git a/htdocs/langs/sw_SW/dict.lang b/htdocs/langs/sw_SW/dict.lang index c0f19d46d2d..f0504354183 100644 --- a/htdocs/langs/sw_SW/dict.lang +++ b/htdocs/langs/sw_SW/dict.lang @@ -158,7 +158,7 @@ CountryMX=Mexico CountryFM=Mikronesia CountryMD=Moldova CountryMN=Mongolia -CountryMS=Monserrat +CountryMS=Montserrat CountryMZ=Msumbiji CountryMM=Myanmar (Burma) CountryNA=Namibia @@ -233,7 +233,7 @@ CountryUY=Uruguay CountryUZ=Uzbekistan CountryVU=Vanuatu CountryVE=Venezuela -CountryVN=Viet Nam +CountryVN=Vietnam CountryVG=Visiwa vya Virgin, Uingereza CountryVI=Visiwa vya Virgin, U.S. CountryWF=Wallis na Futuna diff --git a/htdocs/langs/sw_SW/donations.lang b/htdocs/langs/sw_SW/donations.lang index b1baaba9661..cad8229860b 100644 --- a/htdocs/langs/sw_SW/donations.lang +++ b/htdocs/langs/sw_SW/donations.lang @@ -31,5 +31,7 @@ DONATION_ART200=Onyesha kifungu cha 200 kutoka kwa CGI ikiwa una wasiwasi DONATION_ART238=Onyesha kifungu cha 238 kutoka kwa CGI ikiwa una wasiwasi DONATION_ART978=Onyesha kifungu cha 978 kutoka kwa CGI ikiwa una wasiwasi DonationPayment=Malipo ya mchango +DonationPayments=Donation payments DonationValidated=Mchango %s imethibitishwa -DonationUseThirdparties=Tumia wahusika wengine waliopo kama waratibu wa wafadhili +DonationUseThirdparties=Use the address of an existing thirdparty as the address of the donor +DonationsStatistics=Donation's statistics diff --git a/htdocs/langs/sw_SW/ecm.lang b/htdocs/langs/sw_SW/ecm.lang index d53331c1fac..a0fe268ae22 100644 --- a/htdocs/langs/sw_SW/ecm.lang +++ b/htdocs/langs/sw_SW/ecm.lang @@ -3,9 +3,9 @@ ECMNbOfDocs=Idadi ya hati katika saraka ECMSection=Orodha ECMSectionManual=Saraka ya mwongozo ECMSectionAuto=Saraka otomatiki -ECMSectionsManual=Mti wa mwongozo -ECMSectionsAuto=Mti otomatiki -ECMSectionsMedias=Mti wa Medias +ECMSectionsManual=Private manual tree +ECMSectionsAuto=Private automatic tree +ECMSectionsMedias=Public tree ECMSections=Saraka ECMRoot=Mzizi wa ECM ECMNewSection=Saraka mpya @@ -17,9 +17,9 @@ ECMNbOfFilesInSubDir=Idadi ya faili katika saraka ndogo ECMCreationUser=Muumba ECMArea=Eneo la DMS/ECM ECMAreaDesc=Eneo la DMS/ECM (Mfumo wa Kudhibiti Hati/Udhibiti wa Maudhui ya Kielektroniki) hukuruhusu kuhifadhi, kushiriki na kutafuta haraka kila aina ya hati katika Dolibarr. -ECMAreaDesc2a=* Saraka za mwongozo zinaweza kutumika kuhifadhi hati ambazo hazijaunganishwa na kipengele fulani. +ECMAreaDesc2a=* Manual directories can be used to save documents with a free organization of the tree structure. ECMAreaDesc2b=* Saraka otomatiki hujazwa kiotomatiki wakati wa kuongeza hati kutoka kwa ukurasa wa kipengee. -ECMAreaDesc3=* Saraka za Medias ni faili katika saraka ndogo /medias ya saraka ya hati, inayoweza kusomeka na kila mtu bila hitaji la kuandikishwa na hakuna haja ya kuwa na faili iliyoshirikiwa waziwazi. Inatumika kuhifadhi faili za picha kwa moduli ya barua pepe au tovuti kwa mfano. +ECMAreaDesc3=* Public directories are files into the subdirectory /medias of the documents directory, readable by everybody with no need to be logged and no need to have the file shared explicitly. It is used to store image files for the emailing or website module for example. ECMSectionWasRemoved=Saraka %s imefutwa. ECMSectionWasCreated=Saraka %s imeundwa. ECMSearchByKeywords=Tafuta kwa maneno muhimu @@ -45,7 +45,7 @@ ExtraFieldsEcmFiles=Faili za Extrafields Ecm ExtraFieldsEcmDirectories=Saraka za Ecm za Extrafields ECMSetup=Mpangilio wa ECM GenerateImgWebp=Rudufu picha zote ukitumia toleo lingine lenye umbizo la .webp -ConfirmGenerateImgWebp=Ukithibitisha, utatengeneza picha katika umbizo la .webp kwa picha zote kwa sasa kwenye folda hii (folda ndogo hazijajumuishwa)... +ConfirmGenerateImgWebp=If you confirm, you will generate an image in .webp format for all images currently into this folder (subfolders are not included, webp images will not be generated if size is greater than original)... ConfirmImgWebpCreation=Thibitisha marudio ya picha zote GenerateChosenImgWebp=Rudufu picha iliyochaguliwa na toleo lingine lenye umbizo la .webp ConfirmGenerateChosenImgWebp=If you confirm, you will generate an image in .webp format for the image %s diff --git a/htdocs/langs/sw_SW/errors.lang b/htdocs/langs/sw_SW/errors.lang index 3e9b09cb111..1b807fc9ead 100644 --- a/htdocs/langs/sw_SW/errors.lang +++ b/htdocs/langs/sw_SW/errors.lang @@ -94,9 +94,9 @@ ErrorRecordIsUsedCantDelete=Haiwezi kufuta rekodi. Tayari imetumika au imejumuis ErrorModuleRequireJavascript=JavaScript must not be disabled to have this feature working. To enable/disable JavaScript, go to menu Home->Setup->Display. ErrorPasswordsMustMatch=Nenosiri zote mbili zilizochapwa lazima zilingane ErrorContactEMail=A technical error occurred. Please, contact administrator to following email %s and provide the error code %s in your message, or add a screen copy of this page. -ErrorWrongValueForField=Sehemu %s : ' %s ' hailingani na sheria ya regex %s +ErrorWrongValueForField=Sehemu %s : ' %s ' hailingani na sheria ya regex %s ErrorHtmlInjectionForField=Sehemu %s : Thamani ' %s ' ina data hasidi hairuhusiwi -ErrorFieldValueNotIn=Sehemu %s : ' %s ' sio thamani inayopatikana katika sehemu %s ya %s +ErrorFieldValueNotIn=Sehemu %s : ' %s ' sio thamani inayopatikana katika sehemu %s ya %s ErrorFieldRefNotIn=Sehemu %s : ' %s ' sio %s ref iliyopo ErrorMultipleRecordFoundFromRef=Rekodi kadhaa zilipatikana wakati wa kutafuta kutoka kwa ref %s . Hakuna njia ya kujua ni kitambulisho gani cha kutumia. ErrorsOnXLines=%s makosa kupatikana @@ -167,7 +167,7 @@ ErrorPriceExpression1=Haiwezi kukabidhi '%s mara kwa mara' ErrorPriceExpression2=Haiwezi kufafanua upya chaguo za kukokotoa zilizojumuishwa '%s' ErrorPriceExpression3=Tofauti isiyobainishwa '%s' katika ufafanuzi wa kazi ErrorPriceExpression4=Herufi haramu '%s' -ErrorPriceExpression5='%s isiyotarajiwa\n' +ErrorPriceExpression5=Unexpected '%s' ErrorPriceExpression6=Idadi isiyo sahihi ya hoja (%s ikitolewa, %s inatarajiwa) ErrorPriceExpression8=Opereta asiyetarajiwa '%s' ErrorPriceExpression9=An unexpected error occurred @@ -219,8 +219,8 @@ ErrorPhpMailDelivery=Hakikisha kuwa hutumii idadi kubwa ya wapokeaji na kwamba m ErrorUserNotAssignedToTask=Mtumiaji lazima apewe jukumu ili aweze kuingiza muda uliotumiwa. ErrorTaskAlreadyAssigned=Jukumu ambalo tayari limekabidhiwa kwa mtumiaji ErrorModuleFileSeemsToHaveAWrongFormat=Kifurushi cha moduli kinaonekana kuwa na umbizo lisilo sahihi. -ErrorModuleFileSeemsToHaveAWrongFormat2=Angalau saraka moja ya lazima lazima iwepo katika zip ya moduli: %s au %s -ErrorFilenameDosNotMatchDolibarrPackageRules=Jina la kifurushi cha sehemu ( %s ) hailingani na sintaksia ya jina inayotarajiwa: %s +ErrorModuleFileSeemsToHaveAWrongFormat2=Angalau saraka moja ya lazima lazima iwepo katika zip ya moduli: %s au %s +ErrorFilenameDosNotMatchDolibarrPackageRules=Jina la kifurushi cha sehemu ( %s ) hailingani na sintaksia ya jina inayotarajiwa: %s ErrorDuplicateTrigger=Hitilafu, nakala ya jina la kianzisha %s. Tayari imepakiwa kutoka %s. ErrorNoWarehouseDefined=Hitilafu, hakuna ghala zilizofafanuliwa. ErrorBadLinkSourceSetButBadValueForRef=Kiungo unachotumia si sahihi. 'Chanzo' cha malipo kimefafanuliwa, lakini thamani ya 'rejelea' si halali. @@ -262,7 +262,7 @@ ErrorTooManyDifferentValueForSelectedGroupBy=Imepata thamani nyingi tofauti (zai ErrorReplaceStringEmpty=Hitilafu, mfuatano wa kuchukua nafasi ni tupu ErrorProductNeedBatchNumber=Hitilafu, bidhaa ' %s ' unahitaji nambari nyingi / serial ErrorProductDoesNotNeedBatchNumber=Hitilafu, bidhaa ' %s ' haikubali nambari nyingi / serial -ErrorFailedToReadObject=Hitilafu, imeshindwa kusoma kitu cha aina %s +ErrorFailedToReadObject=Hitilafu, imeshindwa kusoma kitu cha aina %s ErrorParameterMustBeEnabledToAllwoThisFeature=Error, parameter %s must be enabled into conf/conf.php<> to allow use of Command Line Interface by the internal job scheduler ErrorLoginDateValidity=Hitilafu, kuingia huku kuko nje ya kipindi cha tarehe ya uhalali ErrorValueLength=Urefu wa sehemu ' %s ' lazima iwe juu zaidi ya ' %s ' @@ -313,12 +313,12 @@ ErrorTooMuchFileInForm=Faili zikiwa nyingi mno, idadi ya juu zaidi ni %s mafaili ErrorSessionInvalidatedAfterPasswordChange=Kipindi kilibatilishwa kufuatia mabadiliko ya nenosiri, barua pepe, hali au tarehe za uhalali. Tafadhali ingia upya. ErrorExistingPermission = Ruhusa %s kwa kitu %s tayari ipo ErrorFieldExist=Thamani ya %s tayari zipo -ErrorEqualModule=Moduli ni batili katika %s +ErrorEqualModule=Moduli ni batili katika %s ErrorFieldValue=Thamani ya %s si sahihi ErrorCoherenceMenu= %s inahitajika wakati %s ni 'kushoto' ErrorUploadFileDragDrop=Kulikuwa na hitilafu wakati faili inapakia ErrorUploadFileDragDropPermissionDenied=Kulikuwa na hitilafu wakati wa kupakia faili : Ruhusa imekataliwa -ErrorFixThisHere= Rekebisha hii hapa +ErrorFixThisHere= Rekebisha hii hapa ErrorTheUrlOfYourDolInstanceDoesNotMatchURLIntoOAuthSetup=Hitilafu: URL ya mfano wako wa sasa (%s) hailingani na URL iliyofafanuliwa kwenye usanidi wako wa kuingia wa OAuth2 (%s) Kuingia kwa OAuth2 katika usanidi huo hairuhusiwi. ErrorMenuExistValue=Tayari kuna Menyu iliyo na Kichwa hiki au URL ErrorSVGFilesNotAllowedAsLinksWithout=Faili za SVG haziruhusiwi kama viungo vya nje bila chaguo %s diff --git a/htdocs/langs/sw_SW/eventorganization.lang b/htdocs/langs/sw_SW/eventorganization.lang index 19616c56700..70dedff6757 100644 --- a/htdocs/langs/sw_SW/eventorganization.lang +++ b/htdocs/langs/sw_SW/eventorganization.lang @@ -88,6 +88,7 @@ PriceOfRegistration=Bei ya usajili PriceOfRegistrationHelp=Bei ya kulipa ili kujiandikisha au kushiriki katika tukio PriceOfBooth=Bei ya usajili ili kusimama kibanda PriceOfBoothHelp=Bei ya usajili ili kusimama kibanda +EventOrganizationICSLinkProject=Link ICS for the event EventOrganizationICSLink=Unganisha ICS kwa mikutano ConferenceOrBoothInformation=Conference Or Booth information Attendees=Waliohudhuria @@ -161,7 +162,7 @@ Attendee = Mhudhuriaji PaymentConferenceAttendee = Malipo ya waliohudhuria mkutano PaymentBoothLocation = Malipo ya eneo la kibanda DeleteConferenceOrBoothAttendee=Ondoa mshiriki -RegistrationAndPaymentWereAlreadyRecorder=Usajili na malipo tayari yamerekodiwa kwa barua pepe %s +RegistrationAndPaymentWereAlreadyRecorder=Usajili na malipo tayari yamerekodiwa kwa barua pepe %s EmailAttendee=Barua pepe ya mshiriki EmailCompany=Barua pepe ya kampuni EmailCompanyForInvoice=Barua pepe ya kampuni (kwa ankara, ikiwa tofauti na barua pepe ya mhudhuriaji) diff --git a/htdocs/langs/sw_SW/holiday.lang b/htdocs/langs/sw_SW/holiday.lang index 1b74aad3afb..5383b036f7d 100644 --- a/htdocs/langs/sw_SW/holiday.lang +++ b/htdocs/langs/sw_SW/holiday.lang @@ -29,7 +29,7 @@ DescCP=Maelezo SendRequestCP=Unda ombi la kuondoka DelayToRequestCP=Maombi ya kuondoka lazima yafanywe angalau %s siku mbele yao. MenuConfCP=Mizani ya likizo -SoldeCPUser=Acha salio (kwa siku) : %s +SoldeCPUser=Acha salio (kwa siku) : %s ErrorEndDateCP=Lazima uchague tarehe ya mwisho ambayo ni kubwa kuliko tarehe ya kuanza. ErrorSQLCreateCP=Hitilafu ya SQL ilitokea wakati wa uundaji: ErrorIDFicheCP=Hitilafu imetokea, ombi la kuondoka halipo. @@ -109,7 +109,6 @@ TypeWasDisabledOrRemoved=Ondoka aina (id %s) ilizimwa au kuondolewa LastHolidays=Hivi karibuni %s kuacha maombi AllHolidays=Maombi yote ya likizo HalfDay=Nusu siku -NotTheAssignedApprover=Wewe si midhinishaji aliyekabidhiwa LEAVE_PAID=Likizo ya kulipwa LEAVE_SICK=Likizo ya ugonjwa LEAVE_OTHER=Nyingine kuondoka diff --git a/htdocs/langs/sw_SW/install.lang b/htdocs/langs/sw_SW/install.lang index da48d3439be..749390a5729 100644 --- a/htdocs/langs/sw_SW/install.lang +++ b/htdocs/langs/sw_SW/install.lang @@ -14,7 +14,7 @@ PHPSupportPOSTGETKo=Inawezekana usanidi wako wa PHP hauauni vigeu vya POST na/au PHPSupportSessions=PHP hii inasaidia vipindi. PHPSupport=PHP hii inaweza kutumia %s kazi. PHPMemoryOK=Kumbukumbu yako ya kipindi cha juu zaidi cha PHP imewekwa kuwa %s . Hii inapaswa kutosha. -PHPMemoryTooLow=Kumbukumbu yako ya kipindi cha juu zaidi cha PHP imewekwa kuwa %s baiti. Hii ni ya chini sana. Badilisha yako\n php.ini kuweka memory_limit kigezo cha angalau %s baiti. +PHPMemoryTooLow=Your PHP max session memory is set to %s bytes. This is too low. Change your php.ini to set memory_limit parameter to at least %s bytes. Recheck=Bofya hapa kwa mtihani wa kina zaidi ErrorPHPDoesNotSupportSessions=Usakinishaji wako wa PHP hauauni vipindi. Kipengele hiki kinahitajika ili kuruhusu Dolibarr kufanya kazi. Angalia usanidi wako wa PHP na ruhusa za saraka ya vikao. ErrorPHPDoesNotSupport=Usakinishaji wako wa PHP hautumii %s kazi. @@ -116,7 +116,7 @@ RemoveItManuallyAndPressF5ToContinue=Iondoe wewe mwenyewe na ubonyeze F5 ili kue FieldRenamed=Sehemu imebadilishwa jina IfLoginDoesNotExistsCheckCreateUser=Ikiwa mtumiaji bado hayupo, lazima uangalie chaguo "Unda mtumiaji" ErrorConnection=Seva " %s ", jina la hifadhidata " %s ", ingia " %s ", au nenosiri la hifadhidata linaweza kuwa si sahihi au toleo la mteja wa PHP linaweza kuwa la zamani sana ikilinganishwa na toleo la hifadhidata. -InstallChoiceRecommanded=Chaguo linalopendekezwa la kusakinisha toleo %s kutoka kwa toleo lako la sasa %s +InstallChoiceRecommanded=Chaguo linalopendekezwa la kusakinisha toleo %s kutoka kwa toleo lako la sasa %s InstallChoiceSuggested= Chaguo la kusakinisha lililopendekezwa na kisakinishi . MigrateIsDoneStepByStep=Toleo linalolengwa (%s) ina pengo la matoleo kadhaa. Kichawi cha kusakinisha kitarudi ili kupendekeza uhamishaji zaidi pindi hii itakapokamilika. CheckThatDatabasenameIsCorrect=Hakikisha kuwa jina la hifadhidata " %s " ni sahihi. @@ -129,7 +129,7 @@ MigrationCustomerOrderShipping=Hamisha usafirishaji kwa uhifadhi wa maagizo ya m MigrationShippingDelivery=Boresha uhifadhi wa usafirishaji MigrationShippingDelivery2=Kuboresha hifadhi ya usafirishaji 2 MigrationFinished=Uhamiaji umekamilika -LastStepDesc= Hatua ya mwisho : Bainisha hapa jina la kuingia na nenosiri unalotaka kutumia kuunganisha kwa Dolibarr. Usipoteze hii kwani ni akaunti kuu ya kusimamia akaunti zingine zote za watumiaji/ziada. +LastStepDesc=Last step: Define here the login and password you wish to use to connect to Dolibarr. Do not lose this as it is the main account to administer all other/additional user accounts. ActivateModule=Washa sehemu %s ShowEditTechnicalParameters=Bofya hapa ili kuonyesha/kuhariri vigezo vya hali ya juu (hali ya kitaalam) WarningUpgrade=Onyo:\nJe, uliendesha hifadhi ya hifadhidata kwanza?\nHii inapendekezwa sana. Kupoteza data (kutokana na kwa mfano hitilafu katika toleo la mysql 5.5.40/41/42/43) kunaweza kutokea wakati wa mchakato huu, kwa hivyo ni muhimu kuchukua utupaji kamili wa hifadhidata yako kabla ya kuanza uhamishaji wowote.\n\nBofya Sawa ili kuanza mchakato wa uhamiaji... @@ -206,12 +206,12 @@ MigrationImportOrExportProfiles=Uhamishaji wa wasifu wa uingizaji au usafirishaj ShowNotAvailableOptions=Onyesha chaguo ambazo hazipatikani HideNotAvailableOptions=Ficha chaguo ambazo hazipatikani ErrorFoundDuringMigration=Hitilafu ziliripotiwa wakati wa mchakato wa uhamiaji kwa hivyo hatua inayofuata haipatikani. Ili kupuuza makosa, unaweza bofya hapa , lakini programu au vipengele vingine huenda visifanye kazi ipasavyo hadi makosa yatatuliwe. -YouTryInstallDisabledByDirLock=Programu ilijaribu kujiboresha, lakini kurasa za kusakinisha/kuboresha zimezimwa kwa usalama (saraka imepewa jina la .lock suffix).
-YouTryInstallDisabledByFileLock=Programu ilijaribu kujiboresha, lakini kurasa za kusakinisha/kuboresha zimezimwa kwa usalama (kwa kuwepo kwa faili ya kufuli install.lock kwenye saraka ya hati za dolibarr).
-YouTryUpgradeDisabledByMissingFileUnLock=Programu ilijaribu kujiboresha, lakini mchakato wa kuboresha hauruhusiwi kwa sasa.
+YouTryInstallDisabledByDirLock=Programu ilijaribu kujiboresha, lakini kurasa za kusakinisha/kuboresha zimezimwa kwa usalama (saraka imepewa jina la .lock suffix).
+YouTryInstallDisabledByFileLock=Programu ilijaribu kujiboresha, lakini kurasa za kusakinisha/kuboresha zimezimwa kwa usalama (kwa kuwepo kwa faili ya kufuli install.lock kwenye saraka ya hati za dolibarr).
+YouTryUpgradeDisabledByMissingFileUnLock=Programu ilijaribu kujiboresha, lakini mchakato wa kuboresha hauruhusiwi kwa sasa.
ClickHereToGoToApp=Bofya hapa ili kwenda kwa maombi yako ClickOnLinkOrRemoveManualy=Ikiwa uboreshaji unaendelea, tafadhali subiri. Ikiwa sivyo, bofya kiungo kifuatacho. Ikiwa unaona ukurasa huu kila wakati, lazima uondoe/ubadilishe jina la faili install.lock katika saraka ya hati. -ClickOnLinkOrCreateUnlockFileManualy=Ikiwa uboreshaji unaendelea, tafadhali subiri... Ikiwa sivyo, lazima uunde faili ya upgrade.unlock kwenye saraka ya hati za Dolibarr. +ClickOnLinkOrCreateUnlockFileManualy=If an upgrade is in progress, please wait... If not, you must remove the file install.lock or create a file upgrade.unlock into the Dolibarr documents directory. Loaded=Imepakiwa FunctionTest=Mtihani wa kazi NodoUpgradeAfterDB=Hakuna hatua iliyoombwa na moduli za nje baada ya uboreshaji wa hifadhidata diff --git a/htdocs/langs/sw_SW/interventions.lang b/htdocs/langs/sw_SW/interventions.lang index 8b35762b823..966d95e3014 100644 --- a/htdocs/langs/sw_SW/interventions.lang +++ b/htdocs/langs/sw_SW/interventions.lang @@ -14,10 +14,12 @@ InterventionContact=Mawasiliano ya kuingilia kati DeleteIntervention=Futa uingiliaji kati ValidateIntervention=Thibitisha uingiliaji kati ModifyIntervention=Rekebisha uingiliaji kati +CloseIntervention=Close intervention DeleteInterventionLine=Futa mstari wa kuingilia kati ConfirmDeleteIntervention=Je, una uhakika unataka kufuta uingiliaji kati huu? ConfirmValidateIntervention=Je, una uhakika unataka kuhalalisha uingiliaji kati huu chini ya jina %s ? ConfirmModifyIntervention=Je, una uhakika unataka kurekebisha uingiliaji kati huu? +ConfirmCloseIntervention=Are you sure you want to close this intervention? ConfirmDeleteInterventionLine=Je, una uhakika unataka kufuta njia hii ya kuingilia kati? ConfirmCloneIntervention=Je, una uhakika unataka kuiga uingiliaji kati huu? NameAndSignatureOfInternalContact=Jina na saini ya kuingilia kati: @@ -36,6 +38,7 @@ InterventionModifiedInDolibarr=Kuingilia kati %s imebadilishwa InterventionClassifiedBilledInDolibarr=Kuingilia kati %s weka kama inavyotozwa InterventionClassifiedUnbilledInDolibarr=Kuingilia kati %s weka kama isiyolipishwa InterventionSentByEMail=Kuingilia kati %s kutumwa kwa barua pepe +InterventionClosedInDolibarr= Intervention %s closed InterventionDeletedInDolibarr=Kuingilia kati %s imefutwa InterventionsArea=Eneo la kuingilia kati DraftFichinter=Rasimu ya kuingilia kati diff --git a/htdocs/langs/sw_SW/languages.lang b/htdocs/langs/sw_SW/languages.lang index 2ae20286308..67c4ec0e3b6 100644 --- a/htdocs/langs/sw_SW/languages.lang +++ b/htdocs/langs/sw_SW/languages.lang @@ -6,7 +6,7 @@ Language_ar_DZ=Kiarabu (Algeria) Language_ar_EG=Kiarabu (Misri) Language_ar_JO=Kiarabu (Jordania) Language_ar_MA=Kiarabu (Moroko) -Language_ar_SA=Kiarabu +Language_ar_SA=Arabic (Saudi Arabia) Language_ar_TN=Kiarabu (Tunisia) Language_ar_IQ=Kiarabu (Iraq) Language_as_IN=Kiassamese @@ -27,7 +27,7 @@ Language_de_CH=Kijerumani (Uswizi) Language_de_LU=Kijerumani (Luxembourg) Language_el_GR=Kigiriki Language_el_CY=Kigiriki (Kupro) -Language_en_AE=Kiingereza (Falme za Kiarabu) +Language_en_AE=English (United Arab Emirates) Language_en_AU=Kiingereza (Australia) Language_en_CA=Kiingereza (Kanada) Language_en_GB=English (United Kingdom) @@ -56,7 +56,6 @@ Language_es_PE=Spanish (Peru) Language_es_PR=Kihispania (Puerto Rico) Language_es_US=Kihispania (Marekani) Language_es_UY=Kihispania (Uruguay) -Language_es_GT=Kihispania (Guatemala) Language_es_VE=Kihispania (Venezuela) Language_et_EE=Estonian Language_eu_ES=Basque diff --git a/htdocs/langs/sw_SW/loan.lang b/htdocs/langs/sw_SW/loan.lang index 932cc14648b..443307c0551 100644 --- a/htdocs/langs/sw_SW/loan.lang +++ b/htdocs/langs/sw_SW/loan.lang @@ -23,7 +23,7 @@ AddLoan=Tengeneza mkopo FinancialCommitment=Ahadi ya kifedha InterestAmount=Hamu CapitalRemain=Mtaji unabaki -TermPaidAllreadyPaid = Neno hili tayari limelipwa +TermPaidAllreadyPaid = This term is already paid CantUseScheduleWithLoanStartedToPaid = Haiwezi kutengeneza rekodi ya matukio ya mkopo na malipo yameanza CantModifyInterestIfScheduleIsUsed = Huwezi kurekebisha maslahi ikiwa unatumia ratiba # Admin diff --git a/htdocs/langs/sw_SW/main.lang b/htdocs/langs/sw_SW/main.lang index ec2380b2d7f..6afb20a253c 100644 --- a/htdocs/langs/sw_SW/main.lang +++ b/htdocs/langs/sw_SW/main.lang @@ -9,7 +9,7 @@ DIRECTION=ltr # cid0kr is for Korean # DejaVuSans is for some Eastern languages, some Asian languages and some Arabic languages # freemono is for ru_RU or uk_UA, uz_UZ -# freeserif is for Tamil +# freeserif is for Tamil or Ethiopian FONTFORPDF=helvetica FONTSIZEFORPDF=10 SeparatorDecimal=. @@ -267,7 +267,7 @@ Numero=Nambari Limit=Kikomo Limits=Mipaka Logout=Ondoka -NoLogoutProcessWithAuthMode=Hakuna kipengele kinachotumika cha kukata muunganisho chenye modi ya uthibitishaji %s +NoLogoutProcessWithAuthMode=Hakuna kipengele kinachotumika cha kukata muunganisho chenye modi ya uthibitishaji %s Connection=Ingia Setup=Sanidi Alert=Tahadhari @@ -420,6 +420,8 @@ TotalTTCShort=Jumla (pamoja na kodi) TotalHT=Jumla (isipokuwa kodi) TotalHTforthispage=Jumla (isipokuwa kodi) ya ukurasa huu Totalforthispage=Jumla ya ukurasa huu +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=Jumla (pamoja na kodi) TotalTTCToYourCredit=Jumla (pamoja na kodi) kwa mkopo wako TotalVAT=Jumla ya kodi @@ -647,6 +649,7 @@ ReportName=Jina la ripoti ReportPeriod=Kipindi cha ripoti ReportDescription=Maelezo Report=Ripoti +Reports=Reports Keyword=Neno muhimu Origin=Asili Legend=Hadithi @@ -963,6 +966,7 @@ AutomaticallyCalculated=Imekokotolewa kiotomatiki TitleSetToDraft=Rudi kwenye rasimu ConfirmSetToDraft=Je, una uhakika unataka kurudi kwenye hali ya Rasimu? ImportId=Kitambulisho cha kuagiza +Event=Event Events=Matukio EMailTemplates=Violezo vya barua pepe FileNotShared=Faili haijashirikiwa kwa umma wa nje @@ -1048,7 +1052,7 @@ Select2NotFound=Hakuna matokeo yaliyopatikana Select2Enter=Ingiza Select2MoreCharacter=au tabia zaidi Select2MoreCharacters=au wahusika zaidi -Select2MoreCharactersMore= Sintaksia ya utafutaji:
| AU (a|b)
* Herufi yoyote (a*b)
^ Anza na (^ab)
$ Malizia kwa (ab$)
+Select2MoreCharactersMore= Sintaksia ya utafutaji:
| AU (a|b)
* Herufi yoyote (a*b)
^ Anza na (^ab)
$ Malizia kwa (ab$)
Select2LoadingMoreResults=Inapakia matokeo zaidi... Select2SearchInProgress=Utafutaji unaendelea... SearchIntoThirdparties=Vyama vya tatu @@ -1180,7 +1184,6 @@ ConfirmAffectUserQuestion=Je, una uhakika unataka kuwakabidhi watumiaji %s rekod ConfirmSetSupervisorQuestion=Je, una uhakika unataka kuweka msimamizi kwenye %s rekodi zilizochaguliwa? ConfirmUpdatePriceQuestion=Je, una uhakika unataka kusasisha bei ya %s rekodi zilizochaguliwa? CategTypeNotFound=Hakuna aina ya lebo iliyopatikana kwa aina ya rekodi -Rate=Kiwango SupervisorNotFound=Msimamizi hajapatikana CopiedToClipboard=Imenakiliwa kwenye ubao wa kunakili InformationOnLinkToContract=Kiasi hiki ni jumla tu ya mistari yote ya mkataba. Hakuna dhana ya wakati inazingatiwa. @@ -1213,6 +1216,7 @@ CanceledHidden=Imeghairiwa iliyofichwa CanceledShown=Imeghairiwa imeonyeshwa Terminate=Sitisha Terminated=Kuachishwa +Position=Position AddLineOnPosition=Ongeza mstari kwenye nafasi (mwisho ikiwa tupu) ConfirmAllocateCommercial=Weka uthibitisho wa mwakilishi wa mauzo ConfirmAllocateCommercialQuestion=Je, una uhakika unataka kukabidhi %s rekodi zilizochaguliwa? @@ -1230,6 +1234,7 @@ ExternalUser=Mtumiaji wa nje NoSpecificContactAddress=Hakuna anwani maalum au anwani NoSpecificContactAddressBis=This tab is dedicated to force specific contacts or addresses for the current object. Use it only if you want to define one or several specific contacts or addresses for the object when the information on the third party is not enough or not accurate. HideOnVCard=Ficha %s +ShowOnVCard=Show %s AddToContacts=Ongeza anwani kwa anwani zangu LastAccess=Ufikiaji wa mwisho UploadAnImageToSeeAPhotoHere=Pakia picha kutoka kwa kichupo %s kuona picha hapa @@ -1259,4 +1264,7 @@ AmountSalary=Salary amount InvoiceSubtype=Invoice subtype ConfirmMassReverse=Bulk Reverse confirmation ConfirmMassReverseQuestion=Are you sure you want to reverse the %s selected record(s)? - +ElementType=Element type +ElementId=Element Id +Encrypted=Encrypted +Settings=Settings diff --git a/htdocs/langs/sw_SW/margins.lang b/htdocs/langs/sw_SW/margins.lang index 6e80f431aaf..768aeca0a5a 100644 --- a/htdocs/langs/sw_SW/margins.lang +++ b/htdocs/langs/sw_SW/margins.lang @@ -38,7 +38,7 @@ CostPrice=Bei ya gharama UnitCharges=Gharama za kitengo Charges=Malipo AgentContactType=Aina ya mawasiliano ya wakala wa kibiashara -AgentContactTypeDetails=Bainisha ni aina gani ya anwani (iliyounganishwa kwenye ankara) itatumika kwa ripoti ya ukingo kwa kila mwasiliani/anwani. Kumbuka kuwa takwimu za kusoma kwenye mwasiliani si za kuaminika kwani katika hali nyingi mwasiliani huenda asifafanuliwe kwa uwazi kwenye ankara. +AgentContactTypeDetails=Define what contact type (linked on invoices) will be used for margin report per contact/address. Note that reading statistics on a contact is not reliable since in most cases the contact may not be defined explicitly on the invoices. rateMustBeNumeric=Kiwango lazima kiwe thamani ya nambari markRateShouldBeLesserThan100=Kiwango cha alama kinapaswa kuwa chini ya 100 ShowMarginInfos=Onyesha maelezo ya ukingo diff --git a/htdocs/langs/sw_SW/mrp.lang b/htdocs/langs/sw_SW/mrp.lang index ec2ea2253bd..9cc32254ea4 100644 --- a/htdocs/langs/sw_SW/mrp.lang +++ b/htdocs/langs/sw_SW/mrp.lang @@ -31,9 +31,14 @@ Consumption=Matumizi ValueOfMeansLoss=Thamani ya 0.95 inamaanisha wastani wa 5%% hasara wakati wa utengenezaji au disassembly ValueOfMeansLossForProductProduced=Thamani ya 0.95 inamaanisha wastani wa 5%% ya hasara ya bidhaa zinazozalishwa DeleteBillOfMaterials=Futa Muswada wa Nyenzo +CancelMo=Cancel Manufacturing Order +MoCancelConsumedAndProducedLines=Cancel also all the consumed and produced lines (delete lines and rollback stocks) +ConfirmCancelMo=Are you sure you want to cancel this Manufacturing Order? DeleteMo=Futa Agizo la Utengenezaji ConfirmDeleteBillOfMaterials=Je, una uhakika unataka kufuta Muswada huu wa Nyenzo? ConfirmDeleteMo=Je, una uhakika unataka kufuta Agizo hili la Utengenezaji? +DeleteMoChild = Delete the child MOs linked to this MO %s +MoChildsDeleted = All child MOs have been deleted MenuMRP=Maagizo ya Utengenezaji NewMO=Agizo Mpya la Utengenezaji QtyToProduce=Kiasi cha kuzalisha @@ -60,6 +65,8 @@ ToProduce=Kuzalisha ToObtain=Kupata QtyAlreadyConsumed=Kiasi tayari kimetumika QtyAlreadyProduced=Qty tayari imetolewa +QtyAlreadyConsumedShort=Qty consumed +QtyAlreadyProducedShort=Qty produced QtyRequiredIfNoLoss=Kiasi kinahitajika ili kutoa kiasi kilichobainishwa kwenye BOM ikiwa hakuna hasara (ikiwa ufanisi wa utengenezaji ni 100%%) ConsumeOrProduce=Tumia au Zalisha ConsumeAndProduceAll=Tumia na Utengeneze Vyote @@ -123,3 +130,9 @@ Manufacturing=Utengenezaji Disassemble=Tenganisha ProducedBy=Imetolewa na QtyTot=Jumla ya Qty + +QtyCantBeSplit= Quantity cannot be split +NoRemainQtyToDispatch=No quantity remaining to divide + +THMOperatorEstimatedHelp=Estimated cost of operator per hour. Will be used to estimate cost of a BOM using this workstation. +THMMachineEstimatedHelp=Estimated cost of machine per hour. Will be used to estimate cost of a BOM using this workstation. diff --git a/htdocs/langs/sw_SW/opensurvey.lang b/htdocs/langs/sw_SW/opensurvey.lang index 58f1923ea4a..539d0ae5579 100644 --- a/htdocs/langs/sw_SW/opensurvey.lang +++ b/htdocs/langs/sw_SW/opensurvey.lang @@ -11,7 +11,7 @@ PollTitle=Jina la kura ToReceiveEMailForEachVote=Pokea barua pepe kwa kila kura TypeDate=Tarehe ya aina TypeClassic=Aina ya kawaida -OpenSurveyStep2=Chagua tarehe zako kati ya siku zisizolipishwa (kijivu). Siku zilizochaguliwa ni kijani. Unaweza kuacha kuchagua siku iliyochaguliwa hapo awali kwa kubofya tena +OpenSurveyStep2=Select your dates among the free days (gray). The selected days are green. You can unselect a day previously selected by clicking again on it RemoveAllDays=Ondoa siku zote CopyHoursOfFirstDay=Nakili masaa ya siku ya kwanza RemoveAllHours=Ondoa masaa yote @@ -61,3 +61,4 @@ SurveyExpiredInfo=Kura imefungwa au ucheleweshaji wa upigaji kura umekwisha. EmailSomeoneVoted=%s imejaza mstari.\nUnaweza kupata kura yako kwenye kiungo:\n%s ShowSurvey=Onyesha uchunguzi UserMustBeSameThanUserUsedToVote=Lazima uwe umepiga kura na utumie jina la mtumiaji lile lile ambalo yule alitumia kupiga kura, kuchapisha maoni +ListOfOpenSurveys=List of open surveys diff --git a/htdocs/langs/sw_SW/other.lang b/htdocs/langs/sw_SW/other.lang index 0be066a31bc..bcb53e6997c 100644 --- a/htdocs/langs/sw_SW/other.lang +++ b/htdocs/langs/sw_SW/other.lang @@ -31,7 +31,7 @@ PreviousYearOfInvoice=Mwaka uliopita wa tarehe ya ankara NextYearOfInvoice=Mwaka unaofuata wa tarehe ya ankara DateNextInvoiceBeforeGen=Tarehe ya ankara inayofuata (kabla ya uzalishaji) DateNextInvoiceAfterGen=Tarehe ya ankara inayofuata (baada ya kizazi) -GraphInBarsAreLimitedToNMeasures=Michoro ni %s hatua katika hali ya 'Baa'. Njia ya 'Mistari' ilichaguliwa kiotomatiki badala yake. +GraphInBarsAreLimitedToNMeasures=Graphics are limited to %s measures in 'Bars' mode. The mode 'Lines' was automatically selected instead. OnlyOneFieldForXAxisIsPossible=Sehemu 1 pekee ndiyo inayowezekana kwa sasa kama Mhimili wa X. Sehemu ya kwanza iliyochaguliwa pekee ndiyo imechaguliwa. AtLeastOneMeasureIsRequired=Angalau sehemu 1 ya kipimo inahitajika AtLeastOneXAxisIsRequired=Angalau sehemu 1 ya X-Axis inahitajika @@ -45,6 +45,7 @@ Notify_ORDER_CLOSE=Agizo la mauzo limewasilishwa Notify_ORDER_SUPPLIER_SENTBYMAIL=Agizo la ununuzi lililotumwa kwa barua pepe Notify_ORDER_SUPPLIER_VALIDATE=Agizo la ununuzi limerekodiwa Notify_ORDER_SUPPLIER_APPROVE=Agizo la ununuzi limeidhinishwa +Notify_ORDER_SUPPLIER_SUBMIT=Purchase order submitted Notify_ORDER_SUPPLIER_REFUSE=Agizo la ununuzi limekataliwa Notify_PROPAL_VALIDATE=Pendekezo la mteja limethibitishwa Notify_PROPAL_CLOSE_SIGNED=Pendekezo la mteja limefungwa limetiwa saini @@ -63,9 +64,10 @@ Notify_BILL_SENTBYMAIL=Ankara ya mteja iliyotumwa kwa barua Notify_BILL_SUPPLIER_VALIDATE=Ankara ya muuzaji imethibitishwa Notify_BILL_SUPPLIER_PAYED=Ankara ya muuzaji imelipwa Notify_BILL_SUPPLIER_SENTBYMAIL=Ankara ya muuzaji iliyotumwa kwa barua -Notify_BILL_SUPPLIER_CANCELED=Ankara ya muuzaji imeghairiwa +Notify_BILL_SUPPLIER_CANCELED=Vendor invoice canceled Notify_CONTRACT_VALIDATE=Mkataba umeidhinishwa Notify_FICHINTER_VALIDATE=Uingiliaji kati umethibitishwa +Notify_FICHINTER_CLOSE=Intervention closed Notify_FICHINTER_ADD_CONTACT=Imeongeza anwani kwenye Afua Notify_FICHINTER_SENTBYMAIL=Uingiliaji kati uliotumwa kwa barua Notify_SHIPPING_VALIDATE=Usafirishaji umeidhinishwa @@ -172,7 +174,7 @@ VolumeUnitmm3=mm³ (µl) VolumeUnitfoot3=ft³ VolumeUnitinch3=katika³ VolumeUnitounce=wanzi -VolumeUnitlitre=lita +VolumeUnitlitre=liter VolumeUnitgallon=galoni SizeUnitm=m SizeUnitdm=dm @@ -190,7 +192,11 @@ EnableGDLibraryDesc=Sakinisha au wezesha maktaba ya GD kwenye usakinishaji wako ProfIdShortDesc= Prof Id %s ni habari kulingana na nchi ya mtu wa tatu.
Kwa mfano, kwa nchi %s , ni msimbo %s . DolibarrDemo=Onyesho la ERP/CRM la Dolibarr StatsByAmount=Takwimu za kiasi cha bidhaa/huduma +StatsByAmountProducts=Statistics on amount of products +StatsByAmountServices=Statistics on amount of services StatsByNumberOfUnits=Takwimu za jumla ya qty ya bidhaa/huduma +StatsByNumberOfUnitsProducts=Statistics for sum of qty of products +StatsByNumberOfUnitsServices=Statistics for sum of qty of services StatsByNumberOfEntities=Takwimu za idadi ya huluki zinazorejelea (hakuna. ya ankara, au maagizo...) NumberOf=Idadi ya %s NumberOfUnits=Idadi ya vitengo kwenye %s @@ -198,6 +204,7 @@ AmountIn=Kiasi katika %s NumberOfUnitsMos=Idadi ya vitengo vya kuzalisha katika maagizo ya utengenezaji EMailTextInterventionAddedContact=Uingiliaji kati mpya %s umepewa wewe. EMailTextInterventionValidated=Uingiliaji kati %s imethibitishwa. +EMailTextInterventionClosed=The intervention %s has been closed. EMailTextInvoiceValidated=Ankara %s imethibitishwa. EMailTextInvoicePayed=Ankara %s imelipwa. EMailTextProposalValidated=Pendekezo %s imethibitishwa. @@ -207,11 +214,10 @@ EMailTextProposalClosedRefused=Pendekezo %s imefungwa imekataliwa. EMailTextProposalClosedRefusedWeb=Pendekezo %s imefungwa takataka kwenye ukurasa wa lango. EMailTextOrderValidated=Agiza %s imethibitishwa. EMailTextOrderClose=Agiza %s imetolewa. -EMailTextOrderApproved=Agiza %s imeidhinishwa. -EMailTextOrderValidatedBy=Agiza %s imerekodiwa na %s. -EMailTextOrderApprovedBy=Agiza %s imeidhinishwa na %s. -EMailTextOrderRefused=Agiza %s imekataliwa. -EMailTextOrderRefusedBy=Agiza %s imekataliwa na %s. +EMailTextSupplierOrderApprovedBy=Purchase order %s has been approved by %s. +EMailTextSupplierOrderValidatedBy=Purchase order %s has been recorded by %s. +EMailTextSupplierOrderSubmittedBy=Purchase order %s has been submitted by %s. +EMailTextSupplierOrderRefusedBy=Purchase order %s has been refused by %s. EMailTextExpeditionValidated=Usafirishaji %s imethibitishwa. EMailTextExpenseReportValidated=Ripoti ya gharama %s imethibitishwa. EMailTextExpenseReportApproved=Ripoti ya gharama %s imeidhinishwa. @@ -247,7 +253,7 @@ ClickHereToGoTo=Bofya hapa ili kwenda %s YouMustClickToChange=Ni lazima kwanza ubofye kiungo kifuatacho ili kuthibitisha mabadiliko haya ya nenosiri ConfirmPasswordChange=Thibitisha mabadiliko ya nenosiri ForgetIfNothing=Ikiwa hukuomba mabadiliko haya, sahau barua pepe hii. Kitambulisho chako kinawekwa salama. -IfAmountHigherThan=Ikiwa kiasi cha juu kuliko %s +IfAmountHigherThan=Ikiwa kiasi cha juu kuliko %s SourcesRepository=Hifadhi ya vyanzo Chart=Chati PassEncoding=Usimbaji wa nenosiri @@ -289,10 +295,12 @@ LinesToImport=Mistari ya kuagiza MemoryUsage=Matumizi ya kumbukumbu RequestDuration=Muda wa ombi -ProductsPerPopularity=Bidhaa/Huduma kulingana na umaarufu -PopuProp=Bidhaa/Huduma kwa umaarufu katika Mapendekezo -PopuCom=Bidhaa/Huduma kwa umaarufu katika Maagizo -ProductStatistics=Takwimu za Bidhaa/Huduma +ProductsServicesPerPopularity=Products|Services by popularity +ProductsPerPopularity=Products by popularity +ServicesPerPopularity=Services by popularity +PopuProp=Products|Services by popularity in Proposals +PopuCom=Products|Services by popularity in Orders +ProductStatistics=Products|Services Statistics NbOfQtyInOrders=Qty katika maagizo SelectTheTypeOfObjectToAnalyze=Chagua kitu ili kuona takwimu zake... @@ -328,3 +336,5 @@ FTPFailedToUploadFile=Imeshindwa kupakia faili %s . AddFolder=Unda folda FileWasCreateFolder=Folda %s imeundwa FTPFailedToCreateFolder=Imeshindwa kuunda folda %s . +SelectADay=Select a day in calendar +SelectANewDate=Select a new date diff --git a/htdocs/langs/sw_SW/paybox.lang b/htdocs/langs/sw_SW/paybox.lang index d5e6272e88f..8d4a9c41b59 100644 --- a/htdocs/langs/sw_SW/paybox.lang +++ b/htdocs/langs/sw_SW/paybox.lang @@ -18,7 +18,7 @@ YourPaymentHasBeenRecorded=Ukurasa huu unathibitisha kuwa malipo yako yamerekodi YourPaymentHasNotBeenRecorded=Malipo yako HAYAJAREKODIWA na muamala umeghairiwa. Asante. AccountParameter=Vigezo vya akaunti UsageParameter=Vigezo vya matumizi -InformationToFindParameters=Usaidizi wa kupata %s yako\n maelezo ya akaunti +InformationToFindParameters=Help to find your %s account information PAYBOX_CGI_URL_V2=Url ya moduli ya Paybox CGI kwa malipo CSSUrlForPaymentForm=Url ya mtindo wa CSS ya fomu ya malipo NewPayboxPaymentReceived=Malipo mapya ya Paybox yamepokelewa diff --git a/htdocs/langs/sw_SW/productbatch.lang b/htdocs/langs/sw_SW/productbatch.lang index 626f4a2cd41..1d215ef43e7 100644 --- a/htdocs/langs/sw_SW/productbatch.lang +++ b/htdocs/langs/sw_SW/productbatch.lang @@ -6,6 +6,9 @@ ProductStatusNotOnBatch=Hapana (sehemu/seria haijatumika) ProductStatusOnBatchShort=Mengi ProductStatusOnSerialShort=Msururu ProductStatusNotOnBatchShort=Hapana +BatchSellOrEatByMandatoryList=Make %s or %s mandatory +BatchSellOrEatByMandatoryNone=None +BatchSellOrEatByMandatoryAll=%s and %s Batch=Mengi/Seri atleast1batchfield=Tarehe ya Kula au Tarehe ya Kuuza au Nambari ya Mengi/Siri batch_number=Mengi/Nambari ya serial @@ -45,3 +48,5 @@ OutOfOrder=Nje ya utaratibu InWorkingOrder=Katika utaratibu wa kufanya kazi ToReplace=Badilisha CantMoveNonExistantSerial=Hitilafu. Unauliza hoja kwenye rekodi kwa mfululizo ambao haupo tena. Labda unaweza kuchukua mfululizo sawa kwenye ghala moja mara kadhaa katika usafirishaji sawa au ilitumiwa na usafirishaji mwingine. Ondoa usafirishaji huu na uandae nyingine. +TableLotIncompleteRunRepairWithParamStandardEqualConfirmed=Lot table incomplete run repair with parameter '...repair.php?standard=confirmed' +IlligalQtyForSerialNumbers= Stock correction required because unique serial number. diff --git a/htdocs/langs/sw_SW/products.lang b/htdocs/langs/sw_SW/products.lang index 86953586118..75f0affa1d9 100644 --- a/htdocs/langs/sw_SW/products.lang +++ b/htdocs/langs/sw_SW/products.lang @@ -208,11 +208,6 @@ unitSET=Weka unitS=Pili unitH=Saa unitD=Siku -unitG=Gramu -unitM=Mita -unitLM=Mita ya mstari -unitM2=Mita ya mraba -unitM3=Mita za ujazo unitL=Lita unitT=tani unitKG=kilo @@ -221,6 +216,7 @@ unitMG=mg unitLB=pound unitOZ=wanzi unitM=Mita +unitLM=Mita ya mstari unitDM=dm unitCM=sentimita unitMM=mm @@ -289,9 +285,9 @@ MinimumRecommendedPrice=Bei ya chini inayopendekezwa ni: %s PriceExpressionEditor=Mhariri wa kujieleza kwa bei PriceExpressionSelected=Kielelezo cha bei kilichochaguliwa PriceExpressionEditorHelp1="bei = 2 + 2" au "2 + 2" kwa kuweka bei. Tumia; kutenganisha misemo -PriceExpressionEditorHelp2=Unaweza kufikia ExtraFields na vigeuzo kama vile #extrafield_myextrafieldkey# na vigeu vya kimataifa vilivyo na #global_mycode# -PriceExpressionEditorHelp3=Katika bei za bidhaa/huduma na wauzaji kuna vigeu hivi vinavyopatikana:
#tva_tx# #localtax1_tx# #localtax2_tx# #uzito# #urefu# #uso# #bei_min# -PriceExpressionEditorHelp4=Katika bei ya bidhaa/huduma pekee: #supplier_min_price#
Kwa bei za wauzaji pekee: #supplier_quantity# na #supplier_tva_tx# +PriceExpressionEditorHelp2=Unaweza kufikia ExtraFields na vigeuzo kama vile #extrafield_myextrafieldkey# na vigeu vya kimataifa vilivyo na #global_mycode# +PriceExpressionEditorHelp3=Katika bei za bidhaa/huduma na wauzaji kuna vigeu hivi vinavyopatikana:
#tva_tx# #localtax1_tx# #localtax2_tx# #uzito# #urefu# #uso# #bei_min# +PriceExpressionEditorHelp4=Katika bei ya bidhaa/huduma pekee: #supplier_min_price#
Kwa bei za wauzaji pekee: #supplier_quantity# na #supplier_tva_tx# PriceExpressionEditorHelp5=Thamani zinazopatikana za kimataifa: PriceMode=Hali ya bei PriceNumeric=Nambari @@ -437,3 +433,6 @@ ModifyValueExtrafields = Rekebisha thamani ya uwanja wa ziada OrProductsWithCategories=Au bidhaa zilizo na lebo/kategoria WarningTransferBatchStockMouvToGlobal = If you want to deserialize this product, all its serialized stock will be transformed into global stock WarningConvertFromBatchToSerial=If you currently have a quantity higher or equal to 2 for the product, switching to this choice means you will still have a product with different objects of the same batch (while you want a unique serial number). The duplicate will remain until an inventory or a manual stock movement to fix this is done. +AllowStockMovementVariantParent=Also records stock movements on parent products of variant products +AllowStockMovementVariantParentHelp=By default, a parent of a variant is a virtual product, so no stock is managed for it. By enabling this option, a stock will be managed for parent products and each time a stock quantity is modified for a variant product, the same quantity will be modified for the parent product. You should not need this option, except if you are using variant to manage the same product than parent (but with different descriptions, prices...) +ConfirmSetToDraftInventory=Are you sure you want to go back to Draft status?
The quantities currently set in the inventory will be reset. diff --git a/htdocs/langs/sw_SW/projects.lang b/htdocs/langs/sw_SW/projects.lang index 753dd7d3e13..ac50bdf0e7f 100644 --- a/htdocs/langs/sw_SW/projects.lang +++ b/htdocs/langs/sw_SW/projects.lang @@ -244,12 +244,12 @@ OppStatusPENDING=Inasubiri OppStatusWON=Ameshinda OppStatusLOST=Potea Budget=Bajeti -AllowToLinkFromOtherCompany=Ruhusu kuunganisha kipengele na mradi wa kampuni nyingine

Thamani zinazotumika:
- Weka bila kitu: Inaweza kuunganisha vipengele na miradi yoyote katika kampuni moja (chaguo-msingi)
- "yote": Inaweza kuunganisha vipengele na miradi yoyote, hata miradi ya makampuni mengine
- Orodha ya vitambulisho vya watu wengine ikitenganishwa kwa koma: inaweza kuunganisha vipengele na miradi yoyote ya wahusika wengine (Mfano: 123,4795,53)
+AllowToLinkFromOtherCompany=Ruhusu kuunganisha kipengele na mradi wa kampuni nyingine

Thamani zinazotumika:
- Weka bila kitu: Inaweza kuunganisha vipengele na miradi yoyote katika kampuni moja (chaguo-msingi)
- "yote": Inaweza kuunganisha vipengele na miradi yoyote, hata miradi ya makampuni mengine
- Orodha ya vitambulisho vya watu wengine ikitenganishwa kwa koma: inaweza kuunganisha vipengele na miradi yoyote ya wahusika wengine (Mfano: 123,4795,53)
LatestProjects=Hivi karibuni %s miradi LatestModifiedProjects=Hivi karibuni %s miradi iliyorekebishwa OtherFilteredTasks=Kazi zingine zilizochujwa NoAssignedTasks=Hakuna kazi zilizokabidhiwa zilizopatikana (peana mradi/kazi kwa mtumiaji wa sasa kutoka kwenye kisanduku teule cha juu ili kuweka muda juu yake) -ThirdPartyRequiredToGenerateInvoice=Mtu wa tatu lazima afafanuliwe kwenye mradi ili aweze kuuweka ankara. +ThirdPartyRequiredToGenerateIntervention=A third party must be defined on project to be able to create intervention. ThirdPartyRequiredToGenerateInvoice=Mtu wa tatu lazima afafanuliwe kwenye mradi ili aweze kuuweka ankara. ChooseANotYetAssignedTask=Chagua kazi ambayo bado haujakabidhiwa # Comments trans diff --git a/htdocs/langs/sw_SW/receiptprinter.lang b/htdocs/langs/sw_SW/receiptprinter.lang index 56d39f4ae9c..f25df08e929 100644 --- a/htdocs/langs/sw_SW/receiptprinter.lang +++ b/htdocs/langs/sw_SW/receiptprinter.lang @@ -10,6 +10,7 @@ ReceiptPrinterTemplateDesc=Usanidi wa Violezo ReceiptPrinterTypeDesc=Mfano wa maadili iwezekanavyo kwa shamba "Parameters" kulingana na aina ya dereva ReceiptPrinterProfileDesc=Maelezo ya Wasifu wa Kichapishi cha Risiti ListPrinters=Orodha ya Wachapishaji +FromServerPointOfView=From the web server point of view. This method must be reachable from the web server hosting. SetupReceiptTemplate=Kuweka Kiolezo CONNECTOR_DUMMY=Kichapishaji cha Dummy CONNECTOR_NETWORK_PRINT=Printa ya Mtandao @@ -63,7 +64,7 @@ YearInvoice=Mwaka wa ankara DOL_VALUE_MONTH_LETTERS=Mwezi wa ankara katika barua DOL_VALUE_MONTH=Mwezi wa ankara DOL_VALUE_DAY=Siku ya ankara -DOL_VALUE_DAY_LETTERS=Siku ya Inovice katika barua +DOL_VALUE_DAY_LETTERS=Invoice day in letters DOL_LINE_FEED_REVERSE=Mlisho wa mstari kinyume InvoiceID=Kitambulisho cha ankara InvoiceRef=Ref ya ankara diff --git a/htdocs/langs/sw_SW/receptions.lang b/htdocs/langs/sw_SW/receptions.lang index 97bc7cb4d19..d22b8947f25 100644 --- a/htdocs/langs/sw_SW/receptions.lang +++ b/htdocs/langs/sw_SW/receptions.lang @@ -5,8 +5,6 @@ RefReception=Kumb. mapokezi Reception=Mapokezi Receptions=Mapokezi AllReceptions=Mapokezi Yote -Reception=Mapokezi -Receptions=Mapokezi ShowReception=Onyesha Mapokezi ReceptionsArea=Eneo la mapokezi ListOfReceptions=Orodha ya mapokezi diff --git a/htdocs/langs/sw_SW/resource.lang b/htdocs/langs/sw_SW/resource.lang index bd68d031edc..dc0622ebac2 100644 --- a/htdocs/langs/sw_SW/resource.lang +++ b/htdocs/langs/sw_SW/resource.lang @@ -37,3 +37,5 @@ ImportDataset_resource_1=Rasilimali ErrorResourcesAlreadyInUse=Baadhi ya rasilimali zinatumika ErrorResourceUseInEvent=%s imetumika katika %s tukio + +MaxUsers=Maximum users (places, seats, etc.) diff --git a/htdocs/langs/sw_SW/salaries.lang b/htdocs/langs/sw_SW/salaries.lang index 3fb56121037..3f03edf4c2c 100644 --- a/htdocs/langs/sw_SW/salaries.lang +++ b/htdocs/langs/sw_SW/salaries.lang @@ -25,3 +25,9 @@ SalariesAndPayments=Mishahara na malipo ConfirmDeleteSalaryPayment=Je, ungependa kufuta malipo haya ya mishahara? FillFieldFirst=Jaza uwanja wa wafanyikazi kwanza UpdateAmountWithLastSalary=Weka kiasi cha mshahara wa mwisho +MakeTransferRequest=Make transfer request +VirementOrder=Credit transfer request +BankTransferAmount=Amount of credit transfer +WithdrawalReceipt=Credit transfer order +OrderWaiting=Pending order +FillEndOfMonth=Fill with end of month diff --git a/htdocs/langs/sw_SW/stripe.lang b/htdocs/langs/sw_SW/stripe.lang index 366153e4cf9..b11f58d104d 100644 --- a/htdocs/langs/sw_SW/stripe.lang +++ b/htdocs/langs/sw_SW/stripe.lang @@ -26,7 +26,7 @@ YouCanAddTagOnUrl=Unaweza pia kuongeza kigezo cha url &tag= thamani SetupStripeToHavePaymentCreatedAutomatically=Sanidi Stripe yako kwa url %s kufanya malipo kuundwa kiotomatiki yanapothibitishwa na Stripe. AccountParameter=Vigezo vya akaunti UsageParameter=Vigezo vya matumizi -InformationToFindParameters=Usaidizi wa kupata %s yako\n maelezo ya akaunti +InformationToFindParameters=Help to find your %s account information STRIPE_CGI_URL_V2=Url ya moduli ya Stripe CGI kwa malipo CSSUrlForPaymentForm=Url ya mtindo wa CSS ya fomu ya malipo NewStripePaymentReceived=Malipo mapya ya Stripe yamepokelewa @@ -70,10 +70,11 @@ StripePayoutList=Orodha ya malipo ya Stripe ToOfferALinkForTestWebhook=Unganisha ili kusanidi Stripe WebHook ili kupiga IPN (hali ya majaribio) ToOfferALinkForLiveWebhook=Unganisha ili kusanidi Stripe WebHook ili kupiga IPN (modi ya moja kwa moja) PaymentWillBeRecordedForNextPeriod=Malipo yatarekodiwa kwa kipindi kijacho. -ClickHereToTryAgain= Bofya hapa ili kujaribu tena... -CreationOfPaymentModeMustBeDoneFromStripeInterface=Kwa sababu ya sheria Imara za Uthibitishaji wa Mteja, uundaji wa kadi lazima ufanywe kutoka kwa ofisi ya Stripe backoffice. Unaweza kubofya hapa ili kuwasha rekodi ya mteja ya Stripe: %s +ClickHereToTryAgain= Bofya hapa ili kujaribu tena... +CreationOfPaymentModeMustBeDoneFromStripeInterface=Due to Strong Customer Authentication rules, creation of a card must be done from Stripe back office. You can click here to switch on Stripe customer record: %s STRIPE_CARD_PRESENT=Ipo kwa Kadi ya Vituo vya Mistari TERMINAL_LOCATION=Mahali (anwani) ya Vituo vya Stripe RequestDirectDebitWithStripe=Omba Debit ya Moja kwa moja na Stripe +RequesCreditTransferWithStripe=Request Credit Transfer with Stripe STRIPE_SEPA_DIRECT_DEBIT=Washa malipo ya Debit ya Moja kwa Moja kupitia Stripe - +StripeConnect_Mode=Stripe Connect mode diff --git a/htdocs/langs/sw_SW/supplier_proposal.lang b/htdocs/langs/sw_SW/supplier_proposal.lang index 4febf09ed84..a5cb417965f 100644 --- a/htdocs/langs/sw_SW/supplier_proposal.lang +++ b/htdocs/langs/sw_SW/supplier_proposal.lang @@ -42,8 +42,8 @@ SendAskRef=Inatuma ombi la bei %s SupplierProposalCard=Omba kadi ConfirmDeleteAsk=Je, una uhakika unataka kufuta ombi hili la bei %s ? ActionsOnSupplierProposal=Matukio kwa ombi la bei -DocModelAuroreDescription=A complete template for a vendor quotation request template (old implementation of Sponge template) -DocModelZenithDescription=A complete template for a vendor quotation request template +DocModelAuroreDescription=A complete template for a vendor quotation request (old implementation of Sponge template) +DocModelZenithDescription=A complete template for a vendor quotation request CommercialAsk=Ombi la bei DefaultModelSupplierProposalCreate=Uundaji wa muundo chaguomsingi DefaultModelSupplierProposalToBill=Kiolezo chaguomsingi wakati wa kufunga ombi la bei (limekubaliwa) diff --git a/htdocs/langs/sw_SW/ticket.lang b/htdocs/langs/sw_SW/ticket.lang index 927c9ce7093..7ee9950a6cd 100644 --- a/htdocs/langs/sw_SW/ticket.lang +++ b/htdocs/langs/sw_SW/ticket.lang @@ -229,7 +229,7 @@ ErrorMailRecipientIsEmptyForSendTicketMessage=Mpokeaji hana kitu. Hakuna kutuma TicketGoIntoContactTab=Tafadhali nenda kwenye kichupo cha "Anwani" ili kuzichagua TicketMessageMailIntro=Kijajuu cha ujumbe TicketMessageMailIntroHelp=Maandishi haya yanaongezwa tu mwanzoni mwa barua pepe na hayatahifadhiwa. -TicketMessageMailIntroText=Hujambo,
Jibu jipya limeongezwa kwa tikiti unayofuata. Huu ndio ujumbe:
+TicketMessageMailIntroText=Hujambo,
Jibu jipya limeongezwa kwa tikiti unayofuata. Huu ndio ujumbe:
TicketMessageMailIntroHelpAdmin=Maandishi haya yataingizwa kabla ya jibu wakati wa kujibu tikiti kutoka Dolibarr TicketMessageMailFooter=kijachini cha ujumbe TicketMessageMailFooterHelp=Maandishi haya yanaongezwa tu mwishoni mwa ujumbe uliotumwa kwa barua pepe na hayatahifadhiwa. @@ -320,7 +320,7 @@ ViewTicket=Tazama tikiti ViewMyTicketList=Tazama orodha yangu ya tikiti ErrorEmailMustExistToCreateTicket=Hitilafu: anwani ya barua pepe haipatikani katika hifadhidata yetu TicketNewEmailSubjectAdmin=Tikiti mpya imeundwa - Rejea %s (kitambulisho cha tikiti ya umma %s) -TicketNewEmailBodyAdmin=

Tiketi imeundwa hivi punde ikiwa na kitambulisho #%s, angalia maelezo:

+TicketNewEmailBodyAdmin=

Tiketi imeundwa hivi punde ikiwa na kitambulisho #%s, angalia maelezo:

SeeThisTicketIntomanagementInterface=Tazama tikiti katika kiolesura cha usimamizi TicketPublicInterfaceForbidden=Kiolesura cha umma cha tikiti hakijawezeshwa ErrorEmailOrTrackingInvalid=Thamani mbaya ya kitambulisho cha kufuatilia au barua pepe @@ -361,7 +361,7 @@ BoxTicketSeverity=Idadi ya tikiti zilizofunguliwa kwa ukali BoxNoTicketSeverity=Hakuna tikiti zilizofunguliwa BoxTicketLastXDays=Idadi ya tikiti mpya kwa siku za mwisho %s siku BoxTicketLastXDayswidget = Idadi ya tikiti mpya kwa siku X zilizopita -BoxNoTicketLastXDays=Hakuna tikiti mpya %s ya mwisho\n siku +BoxNoTicketLastXDays=No new tickets the last %s days BoxNumberOfTicketByDay=Idadi ya tikiti mpya kwa siku BoxNewTicketVSClose=Idadi ya tikiti dhidi ya tikiti zilizofungwa (leo) TicketCreatedToday=Tikiti imeundwa leo diff --git a/htdocs/langs/sw_SW/trips.lang b/htdocs/langs/sw_SW/trips.lang index b46786436d2..426213fb6c7 100644 --- a/htdocs/langs/sw_SW/trips.lang +++ b/htdocs/langs/sw_SW/trips.lang @@ -24,7 +24,7 @@ ConfirmPaidTrip=Je, una uhakika unataka kubadilisha hali ya ripoti hii ya gharam ConfirmRefuseTrip=Je, una uhakika unataka kukataa ripoti hii ya gharama? ConfirmSaveTrip=Je, una uhakika unataka kuthibitisha ripoti hii ya gharama? ConfirmValideTrip=Je, una uhakika unataka kuidhinisha ripoti hii ya gharama? -DATE_CANCEL=Tarehe ya kughairiwa +DATE_CANCEL=Cancellation date DATE_PAIEMENT=Siku ya malipo DATE_REFUS=Kataa tarehe DATE_SAVE=Tarehe ya uthibitishaji @@ -39,7 +39,7 @@ expenseReportCoef=Mgawo expenseReportCoefUndefined=(thamani haijafafanuliwa) expenseReportOffset=Kukabiliana expenseReportPrintExample=kukabiliana + (d x coef) = %s -expenseReportRangeDisabled=Masafa yamezimwa - tazama kamusi ya c_exp_tax_range +expenseReportRangeDisabled=Range disabled - see the c_exp_tax_range dictionary expenseReportRangeFromTo=kutoka %d hadi %d expenseReportRangeMoreThan=zaidi ya %d expenseReportTotalForFive=Mfano na d = 5 @@ -91,7 +91,7 @@ nolimitbyEX_EXP=kwa mstari (hakuna kizuizi) nolimitbyEX_MON=kwa mwezi (hakuna kizuizi) nolimitbyEX_YEA=kwa mwaka (hakuna kizuizi) NoTripsToExportCSV=Hakuna ripoti ya gharama ya kusafirisha nje kwa kipindi hiki. -NOT_AUTHOR=Wewe si mwandishi wa ripoti hii ya gharama. Operesheni imeghairiwa. +NOT_AUTHOR=You are not the author of this expense report. Operation canceled. OnExpense=Mstari wa gharama PDFStandardExpenseReports=Kiolezo cha kawaida cha kutengeneza hati ya PDF kwa ripoti ya gharama PaidTrip=Lipa ripoti ya gharama @@ -103,7 +103,7 @@ ShowExpenseReport=Onyesha ripoti ya gharama ShowTrip=Onyesha ripoti ya gharama TripCard=Kadi ya ripoti ya gharama TripId=Ripoti ya gharama ya kitambulisho -TripNDF=Ripoti ya gharama ya habari +TripNDF=Information expense report TripSociete=Kampuni ya habari Trips=Ripoti za gharama TripsAndExpenses=Ripoti za gharama diff --git a/htdocs/langs/sw_SW/users.lang b/htdocs/langs/sw_SW/users.lang index 6855caab862..ce7b52b9da7 100644 --- a/htdocs/langs/sw_SW/users.lang +++ b/htdocs/langs/sw_SW/users.lang @@ -32,9 +32,8 @@ CreateUser=Unda mtumiaji LoginNotDefined=Kuingia hakufafanuliwa. NameNotDefined=Jina halijafafanuliwa. ListOfUsers=Orodha ya watumiaji -SuperAdministrator=Msimamizi Mkuu -SuperAdministratorDesc=Msimamizi wa kimataifa -AdministratorDesc=Msimamizi +SuperAdministrator=Multicompany Administrator +SuperAdministratorDesc=Multicompany system administrator (can change setup and users) DefaultRights=Ruhusa Chaguomsingi DefaultRightsDesc=Bainisha hapa chaguo-msingi ruhusa ambazo zinatolewa kiotomatiki kwa mpya mtumiaji (kurekebisha ruhusa kwa watumiaji waliopo, nenda kwenye kadi ya mtumiaji). DolibarrUsers=Watumiaji wa Dolibarr @@ -45,7 +44,7 @@ NewGroup=Kikundi kipya CreateGroup=Unda kikundi RemoveFromGroup=Ondoa kwenye kikundi PasswordChangedAndSentTo=Nenosiri lilibadilishwa na kutumwa kwa %s . -PasswordChangeRequest=Ombi la kubadilisha nenosiri la %s +PasswordChangeRequest=Ombi la kubadilisha nenosiri la %s PasswordChangeRequestSent=Ombi la kubadilisha nenosiri la %s imetumwa kwa %s . IfLoginExistPasswordRequestSent=Ikiwa kuingia huku ni akaunti halali (iliyo na barua pepe halali), barua pepe ya kuweka upya nenosiri imetumwa. IfEmailExistPasswordRequestSent=Ikiwa barua pepe hii ni akaunti halali, barua pepe ya kuweka upya nenosiri imetumwa (kumbuka kuangalia folda yako ya TAKA ikiwa hupokei chochote) @@ -110,8 +109,9 @@ ExpectedWorkedHours=Saa zinazotarajiwa kufanya kazi kwa wiki ColorUser=Rangi ya mtumiaji DisabledInMonoUserMode=Imezimwa katika hali ya matengenezo UserAccountancyCode=Nambari ya hesabu ya mtumiaji -UserLogoff=Kuondoka kwa mtumiaji -UserLogged=Mtumiaji ameingia +UserLogoff=User logout: %s +UserLogged=User logged: %s +UserLoginFailed=User login failed: %s DateOfEmployment=Tarehe ya ajira DateEmployment=Ajira DateEmploymentStart=Tarehe ya Kuanza Ajira @@ -120,10 +120,10 @@ RangeOfLoginValidity=Muda wa tarehe ya uhalali wa ufikiaji CantDisableYourself=Huwezi kuzima rekodi yako ya mtumiaji ForceUserExpenseValidator=Lazimisha kithibitishaji cha ripoti ya gharama ForceUserHolidayValidator=Lazimisha mthibitishaji wa ombi la likizo -ValidatorIsSupervisorByDefault=Kwa chaguo-msingi, mthibitishaji ndiye msimamizi wa mtumiaji. Weka tupu ili kuweka tabia hii. +ValidatorIsSupervisorByDefault=By default, the validator is the supervisor of the user. Keep empty to keep this behavior. UserPersonalEmail=Barua pepe ya kibinafsi UserPersonalMobile=Simu ya kibinafsi ya rununu -WarningNotLangOfInterface=Onyo, hii ndiyo lugha kuu ambayo mtumiaji huzungumza, si lugha ya kiolesura alichochagua kuona. Ili kubadilisha lugha ya kiolesura inayoonekana na mtumiaji huyu, nenda kwenye kichupo %s +WarningNotLangOfInterface=Warning, this is the main language the user speak, not the language of the interface he chose to see. To change the interface language visible by this user, go on tab %s DateLastLogin=Tarehe ya mwisho ya kuingia DatePreviousLogin=Tarehe ya kuingia hapo awali IPLastLogin=IP ya mwisho ya kuingia @@ -132,3 +132,5 @@ ShowAllPerms=Onyesha safu mlalo zote za ruhusa HideAllPerms=Ficha safu mlalo zote za ruhusa UserPublicPageDesc=Unaweza kuwezesha kadi pepe kwa mtumiaji huyu. Url iliyo na wasifu wa mtumiaji na msimbo pau zitapatikana ili kuruhusu mtu yeyote aliye na simu mahiri kuichanganua na kuongeza mtu unayewasiliana naye kwenye kitabu chake cha anwani. EnablePublicVirtualCard=Washa kadi pepe ya biashara ya mtumiaji +UserEnabledDisabled=User status changed: %s +AlternativeEmailForOAuth2=Alternative Email for OAuth2 login diff --git a/htdocs/langs/sw_SW/website.lang b/htdocs/langs/sw_SW/website.lang index 74a58465b8e..c83e03e8428 100644 --- a/htdocs/langs/sw_SW/website.lang +++ b/htdocs/langs/sw_SW/website.lang @@ -45,24 +45,24 @@ RealURL=URL halisi ViewWebsiteInProduction=Tazama tovuti kwa kutumia URL za nyumbani Virtualhost=Mpangishi pepe au jina la kikoa VirtualhostDesc=Jina la seva pangishi Pekee au kikoa (Kwa mfano: www.mywebsite.com, mybigcompany.net, ...) -SetHereVirtualHost= Tumia na Apache/NGinx/...
Unda kwenye seva yako ya wavuti (Apache, Nginx, ...) Seva pepe iliyojitolea iliyojitolea iliyo na PHP iliyowezeshwa na saraka ya Mizizi kwenye
%s +SetHereVirtualHost= Tumia na Apache/NGinx/...
Unda kwenye seva yako ya wavuti (Apache, Nginx, ...) Seva pepe iliyojitolea iliyojitolea iliyo na PHP iliyowezeshwa na saraka ya Mizizi kwenye
%s ExampleToUseInApacheVirtualHostConfig=Mfano wa kutumia katika usanidi wa mwenyeji wa Apache: -YouCanAlsoTestWithPHPS= Tumia na seva iliyopachikwa PHP
Kwenye mazingira ya usanidi, unaweza kupendelea kujaribu tovuti kwa seva ya wavuti iliyopachikwa PHP (PHP 5.5 inahitajika) kwa kuendesha
php -S 0.0.0.0:8080 -t %s -YouCanAlsoDeployToAnotherWHP= Endesha tovuti yako na mtoa huduma mwingine wa Kukaribisha Dolibarr
Ikiwa huna seva ya wavuti kama Apache au NGinx inayopatikana kwenye mtandao, unaweza kuhamisha na kuagiza tovuti yako kwenye mfano mwingine wa Dolibarr uliotolewa na mtoa huduma mwingine wa kupangisha Dolibarr ambaye hutoa ushirikiano kamili na moduli ya Tovuti. Unaweza kupata orodha ya baadhi ya watoa huduma waandaji wa Dolibarr kwenye https://saas.dolibarr.org -CheckVirtualHostPerms=Angalia pia kwamba mtumiaji mpangishi pepe (kwa mfano www-data) ana %s ruhusa kwenye faili katika
%s +YouCanAlsoTestWithPHPS= Tumia na seva iliyopachikwa PHP
Kwenye mazingira ya usanidi, unaweza kupendelea kujaribu tovuti kwa seva ya wavuti iliyopachikwa PHP (PHP 5.5 inahitajika) kwa kuendesha
php -S 0.0.0.0:8080 -t %s +YouCanAlsoDeployToAnotherWHP= Endesha tovuti yako na mtoa huduma mwingine wa Kukaribisha Dolibarr
Ikiwa huna seva ya wavuti kama Apache au NGinx inayopatikana kwenye mtandao, unaweza kuhamisha na kuagiza tovuti yako kwenye mfano mwingine wa Dolibarr uliotolewa na mtoa huduma mwingine wa kupangisha Dolibarr ambaye hutoa ushirikiano kamili na moduli ya Tovuti. Unaweza kupata orodha ya baadhi ya watoa huduma waandaji wa Dolibarr kwenye https://saas.dolibarr.org +CheckVirtualHostPerms=Angalia pia kwamba mtumiaji mpangishi pepe (kwa mfano www-data) ana %s ruhusa kwenye faili katika
%s ReadPerm=Soma WritePerm=Andika TestDeployOnWeb=Jaribu/tuma kwenye wavuti -PreviewSiteServedByWebServer= Hakiki %s katika kichupo kipya.

%s itahudumiwa na seva ya wavuti ya nje (kama Apache, Nginx, IIS). Lazima usakinishe na usanidi seva hii kabla ili kuelekeza kwenye saraka:
%s
URL inatolewa na seva ya nje:
%s +PreviewSiteServedByWebServer= Hakiki %s katika kichupo kipya.

%s itahudumiwa na seva ya wavuti ya nje (kama Apache, Nginx, IIS). Lazima usakinishe na usanidi seva hii kabla ili kuelekeza kwenye saraka:
%s
URL inatolewa na seva ya nje:
%s PreviewSiteServedByDolibarr= Hakiki %s katika kichupo kipya.

%s itahudumiwa na seva ya Dolibarr kwa hivyo haihitaji seva yoyote ya ziada ya wavuti (kama Apache, Nginx, IIS) kusakinishwa.
Usumbufu ni kwamba URL za kurasa sio rafiki kwa watumiaji na huanza na njia ya Dolibarr yako.
URL inayotolewa na Dolibarr:
%s

Ili kutumia seva yako ya nje ya wavuti kuhudumia tovuti hii, tengeneza seva pangishi pepe kwenye seva yako ya wavuti inayoelekeza kwenye saraka
%s
kisha ingiza jina la seva hii pepe katika sifa za tovuti hii na ubofye kiungo "Jaribio/Weka kwenye wavuti". VirtualHostUrlNotDefined=URL ya seva pangishi pepe inayotolewa na seva ya wavuti ya nje haijafafanuliwa NoPageYet=Bado hakuna kurasa YouCanCreatePageOrImportTemplate=Unaweza kuunda ukurasa mpya au kuleta kiolezo kamili cha tovuti SyntaxHelp=Msaada juu ya vidokezo maalum vya sintaksia YouCanEditHtmlSourceckeditor=Unaweza kuhariri msimbo wa chanzo wa HTML kwa kutumia kitufe cha "Chanzo" kwenye kihariri. -YouCanEditHtmlSource=
You can include PHP code into this source using tags <?php ?>. The following global variables are available: $conf, $db, $mysoc, $user, $website, $websitepage, $weblangs, $pagelangs.

You can also include content of another Page/Container with the following syntax:
<?php includeContainer('alias_of_container_to_include'); ?>

You can make a redirect to another Page/Container with the following syntax (Note: do not output any content before a redirect):
<?php redirectToContainer('alias_of_container_to_redirect_to'); ?>

To add a link to another page, use the syntax:
<a href="alias_of_page_to_link_to.php">mylink<a>

To include a link to download a file stored into the documents directory, use the document.php wrapper:
Example, for a file into documents/ecm (need to be logged), syntax is:
<a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext">
For a file into documents/medias (open directory for public access), syntax is:
<a href="/document.php?modulepart=medias&file=[relative_dir/]filename.ext">
For a file shared with a share link (open access using the sharing hash key of file), syntax is:
<a href="/document.php?hashp=publicsharekeyoffile">
-YouCanEditHtmlSource1=
To include an image stored into the documents directory, use the viewimage.php wrapper.
Example, for an image into documents/medias (open directory for public access), syntax is:
<img src="/viewimage.php?modulepart=medias&file=[relative_dir/]filename.ext">
-YouCanEditHtmlSource2=Kwa picha iliyoshirikiwa na kiungo cha kushiriki (ufikiaji wazi kwa kutumia ufunguo wa hashi wa kushiriki), syntax ni:
<img src="/viewimage.php?hashp=12345679012...">
+YouCanEditHtmlSource=
You can include PHP code into this source using tags <?php ?>. The following global variables are available: $conf, $db, $mysoc, $user, $website, $websitepage, $weblangs, $pagelangs.

You can also include content of another Page/Container with the following syntax:
<?php includeContainer('alias_of_container_to_include'); ?>

You can make a redirect to another Page/Container with the following syntax (Note: do not output any content before a redirect):
<?php redirectToContainer('alias_of_container_to_redirect_to'); ?>

To add a link to another page, use the syntax:
<a href="alias_of_page_to_link_to.php">mylink<a>

To include a link to download a file stored into the documents directory, use the document.php wrapper:
Example, for a file into documents/ecm (need to be logged), syntax is:
<a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext">
For a file into documents/medias (open directory for public access), syntax is:
<a href="/document.php?modulepart=medias&file=[relative_dir/]filename.ext">
For a file shared with a share link (open access using the sharing hash key of file), syntax is:
<a href="/document.php?hashp=publicsharekeyoffile">
+YouCanEditHtmlSource1=
To include an image stored into the documents directory, use the viewimage.php wrapper.
Example, for an image into documents/medias (open directory for public access), syntax is:
<img src="/viewimage.php?modulepart=medias&file=[relative_dir/]filename.ext">
+YouCanEditHtmlSource2=Kwa picha iliyoshirikiwa na kiungo cha kushiriki (ufikiaji wazi kwa kutumia ufunguo wa hashi wa kushiriki), syntax ni:
<img src="/viewimage.php?hashp=12345679012...">
YouCanEditHtmlSource3=To get the URL of the image of a PHP object, use
<img src="<?php print getImagePublicURLOfObject($object, 1, "_small") ?>">
YouCanEditHtmlSourceMore=
More examples of HTML or dynamic code available on the wiki documentation.
ClonePage=Sambaza ukurasa/chombo @@ -121,7 +121,6 @@ ReplaceString=Kamba mpya CSSContentTooltipHelp=Ingiza hapa maudhui ya CSS. Ili kuepuka mgongano wowote na CSS ya programu, hakikisha kuwa umetayarisha tamko lote na darasa la tovuti ya .bodywebsite. Kwa mfano:

#mycssselector, input.myclass:hover { ... }
lazima iwe
.bodywebsite #mycssselector, .bodywebsite input.myclass:hover { ... }

Kumbuka: Ikiwa una faili kubwa isiyo na kiambishi awali hiki, unaweza kutumia 'lessc' kuibadilisha ili kuambatisha kiambishi awali cha .bodywebsite kila mahali. LinkAndScriptsHereAreNotLoadedInEditor=Warning: This content is output only when site is accessed from a server. It is not used in Edit mode so if you need to load JavaScript files also in edit mode, just add your tag 'script src=...' into the page. Dynamiccontent=Sampuli ya ukurasa wenye maudhui yanayobadilika -ImportSite=Ingiza kiolezo cha tovuti EditInLineOnOff=Hali ya 'Hariri inline' ni %s ShowSubContainersOnOff=Hali ya kutekeleza 'maudhui yanayobadilika' ni %s GlobalCSSorJS=Faili ya Global CSS/JS/Header ya tovuti @@ -158,9 +157,81 @@ Booking=Kuhifadhi Reservation=Uhifadhi PagesViewedPreviousMonth=Kurasa zilizotazamwa (mwezi uliopita) PagesViewedTotal=Kurasa zilizotazamwa (jumla) -Visibility=Visibility Everyone=Everyone AssignedContacts=Assigned contacts WebsiteTypeLabel=Type of Web site -WebsiteTypeDolibarrWebsite=Web site (CMS Dolibarr) -WebsiteTypeDolibarrPortal=Native Dolibarr portal +WebsiteTypeDolibarrWebsite=Web site (Module WebSites CMS) +WebsiteTypeDolibarrPortal=Native and ready to use web portal (Module Web Portal) +WebPortalURL=Web portal URL +NewWebsiteAccount=New accounts for websites +ModuleWebPortalName=Web portal +ModuleWebPortalDesc=A ready to use native web portal for customers, suppliers, partners or members +WebPortalDescription=Public web portal module for membership and partnership +WebPortalSetup=WebPortal setup +WebPortalCSS=Web portal CSS +WebPortalSetupPage=WebPortal setup page +WEBPORTAL_TITLE=Brand name on header of public page +UserAccountForWebPortalAreInThirdPartyTabHelp=Users accounts for WebPortal can be set on each third party card in Website accounts tab +WebPortalAccessHidden=Hidden +WebPortalAccessVisible=Visible +WebPortalAccessEdit=Editable +WEBPORTAL_MEMBER_CARD_ACCESS=Enable access to the membership record +WebPortalMemberCardAccessHelp=Enable access to the membership record (Hidden / Visible or Editable) +WEBPORTAL_PARTNERSHIP_CARD_ACCESS=Enable access to the partnership record +WebPortalPartnerShipCardAccessHelp=Enable access to the partnership record (Hidden / Visible or Editable) +WEBPORTAL_PROPAL_LIST_ACCESS=Enable access to the proposals +WEBPORTAL_ORDER_LIST_ACCESS=Enable access to the orders +WEBPORTAL_INVOICE_LIST_ACCESS=Enable access to the invoices +WEBPORTAL_USER_LOGGED=Select an anonymous user +WebPortalUserLoggedHelp=This user is used to update cards +WebPortalHomeTitle=Welcome +WebPortalHomeDesc=Welcome to the public interface +WebPortalPropalListMenu=Proposals +WebPortalPropalListTitle=List of proposals +WebPortalPropalListDesc=List of proposals +WebPortalPropalListNothing=Proposals not found +WebPortalOrderListMenu=Orders +WebPortalOrderListTitle=List of orders +WebPortalOrderListDesc=List of orders +WebPortalOrderListNothing=Orders not found +WebPortalInvoiceListMenu=Invoices +WebPortalInvoiceListTitle=List of invoices +WebPortalInvoiceListDesc=List of invoices +WebPortalInvoiceListNothing=Invoices not found +WebPortalMemberCardMenu=Member +WebPortalMemberCardTitle=Member card +WebPortalMemberCardDesc=Member card +WebPortalPartnershipCardMenu=Partnership +WebPortalPartnershipCardTitle=Partnership card +WebPortalPartnershipCardDesc=Partnership card +loginWebportalUserName=User name / email +loginWebportalPassword=Password +LoginNow=Login now +RemoveSearchFilters=Remove search filters +WEBPORTAL_PRIMARY_COLOR=Primary color +WEBPORTAL_SECONDARY_COLOR=Secondary color +WEBPORTAL_LOGIN_LOGO_URL=Login logo image URL +WEBPORTAL_MENU_LOGO_URL=Menu logo image URL +WEBPORTAL_MENU_LOGO_URLTooltip=Leave empty to use login logo +WEBPORTAL_LOGIN_BACKGROUND=Background login image URL +WEBPORTAL_BANNER_BACKGROUND=Background for banner +WEBPORTAL_BANNER_BACKGROUND_IS_DARK=Use dark theme for banner +AriaPrevPage=Previous page +AriaNextPage=Next page +AriaPageX=Page %s +WebPortalError404=Page not found +WebPortalErrorPageNotExist=Page not exist +WebPortalErrorFetchThirdPartyAccountFromLogin=Error when loading third-party account (login : %s) +WebPortalErrorAuthentication=Authentication error +WebPortalErrorFetchLoggedThirdPartyAccount=Error when loading third-party account (login : %s) +WebPortalErrorFetchLoggedUser=Error when loading user (Id : %s) +WebPortalErrorFetchLoggedThirdParty=Error when loading third-party (Id : %s) +WebPortalErrorFetchLoggedMember=Error when loading member (Id : %s) +WebPortalErrorFetchLoggedPartnership=Error when loading partnership (Third-party Id : %s, Member Id : %s) +ExportIntoGIT=Export into sources +WebPortalMember=Membership +WebPortalOrder=Sale Order +WebPortalPartnership=Partnership +WebPortalPropal=Proposal +WebPortalGroupMenuAdmin=Administration +WebPortalGroupMenuTechnical=System diff --git a/htdocs/langs/th_TH/admin.lang b/htdocs/langs/th_TH/admin.lang index 974fd586f60..388bfda8bc2 100644 --- a/htdocs/langs/th_TH/admin.lang +++ b/htdocs/langs/th_TH/admin.lang @@ -192,7 +192,7 @@ CommandsToDisableForeignKeysForImportWarning=บังคับถ้าคุ ExportCompatibility=ความเข้ากันได้ของไฟล์การส่งออกที่สร้าง ExportUseMySQLQuickParameter=ใช้ --ควิกพารามิเตอร์ ExportUseMySQLQuickParameterHelp=พารามิเตอร์ '--quick' ช่วยจำกัดการใช้ RAM สำหรับตารางขนาดใหญ่ -MySqlExportParameters=พารามิเตอร์การส่งออก MySQL +MySqlExportParameters=พารามิเตอร์การส่งออก MySQL PostgreSqlExportParameters= พารามิเตอร์การส่งออก PostgreSQL UseTransactionnalMode=ใช้โหมดการทำธุรกรรม FullPathToMysqldumpCommand=เส้นทางแบบเต็มไป mysqldump คำสั่ง @@ -320,7 +320,7 @@ UserEmail=อีเมลผู้ใช้ CompanyEmail=อีเมลบริษัท FeatureNotAvailableOnLinux=คุณลักษณะที่ไม่สามารถใช้ได้บน Unix เหมือนระบบ ทดสอบโปรแกรม sendmail ในประเทศของคุณ FixOnTransifex=แก้ไขการแปลบนแพลตฟอร์มการแปลออนไลน์ของโครงการ -SubmitTranslation=หากการแปลภาษานี้ไม่สมบูรณ์หรือพบข้อผิดพลาด คุณสามารถแก้ไขได้โดยแก้ไขไฟล์ในไดเรกทอรี langs/%s
และส่งการเปลี่ยนแปลงของคุณไปที่ www.transifex.com/dolibarr-association/dolibarr/ +SubmitTranslation=If the translation for this language is not complete or you find errors, you can correct this by editing files in directory langs/%s and submit your change to www.transifex.com/dolibarr-association/dolibarr/ SubmitTranslationENUS=หากการแปลภาษานี้ไม่สมบูรณ์หรือพบข้อผิดพลาด คุณสามารถแก้ไขได้โดยแก้ไขไฟล์ลงในไดเรกทอรี langs/%s และส่งไฟล์ที่แก้ไขบน dolibarr.org/forum หรือหากคุณเป็นนักพัฒนา ก็ส่งด้วยการประชาสัมพันธ์บน github.com/Dolibarr/dolibarr ModuleSetup=การติดตั้งโมดูล ModulesSetup=การตั้งค่าโมดูล/แอปพลิเคชัน @@ -346,7 +346,7 @@ StepNb=ขั้นตอนที่ %s FindPackageFromWebSite=ค้นหาแพ็คเกจที่มีฟีเจอร์ที่คุณต้องการ (เช่น บนเว็บไซต์อย่างเป็นทางการ %s) DownloadPackageFromWebSite=ดาวน์โหลดแพ็คเกจ (เช่น จากเว็บไซต์อย่างเป็นทางการ %s) UnpackPackageInDolibarrRoot=แตก/แตกไฟล์แพ็กเกจลงในไดเร็กทอรีเซิร์ฟเวอร์ Dolibarr ของคุณ: %s -UnpackPackageInModulesRoot=หากต้องการปรับใช้/ติดตั้งโมดูลภายนอก คุณต้องคลายแพ็ก/แตกไฟล์เก็บถาวรลงในไดเร็กทอรีเซิร์ฟเวอร์สำหรับโมดูลภายนอกโดยเฉพาะ:
%s +UnpackPackageInModulesRoot=To deploy/install an external module, you must unpack/unzip the archive file into the server directory dedicated to external modules:
%s SetupIsReadyForUse=การปรับใช้โมดูลเสร็จสิ้นแล้ว อย่างไรก็ตาม คุณต้องเปิดใช้งานและตั้งค่าโมดูลในแอปพลิเคชันของคุณโดยไปที่โมดูลการตั้งค่าเพจ: %s. NotExistsDirect=ไดเร็กทอรีรากทางเลือกไม่ได้ถูกกำหนดให้กับไดเร็กทอรีที่มีอยู่
InfDirAlt=ตั้งแต่เวอร์ชัน 3 เป็นต้นไป คุณสามารถกำหนดไดเร็กทอรีรากสำรองได้ ซึ่งช่วยให้คุณสามารถจัดเก็บไว้ในไดเร็กทอรีเฉพาะ ปลั๊กอิน และเทมเพลตที่กำหนดเองได้
เพียงสร้างไดเร็กทอรีที่รากของ Dolibarr (เช่น: กำหนดเอง)
@@ -364,7 +364,7 @@ WithCounter=จัดการเคาน์เตอร์ GenericMaskCodes=คุณสามารถป้อนมาสก์หมายเลขใดก็ได้ ในมาสก์นี้ คุณสามารถใช้แท็กต่อไปนี้ได้:
{000000} สอดคล้องกับตัวเลขที่จะเพิ่มขึ้นในแต่ละ %s ป้อนเลขศูนย์ให้มากที่สุดตามความยาวของตัวนับที่ต้องการ ตัวนับจะเสร็จสมบูรณ์ด้วยศูนย์จากทางซ้ายเพื่อให้มีศูนย์มากเท่ากับหน้ากาก
{000000+000} เหมือนกับอันก่อนหน้า แต่ ค่าชดเชยที่สอดคล้องกับตัวเลขทางด้านขวาของเครื่องหมาย + จะถูกนำไปใช้โดยเริ่มต้นที่ %s ตัวแรก
{000000@x} เหมือนกับอันก่อนหน้า แต่ ตัวนับจะถูกรีเซ็ตเป็นศูนย์เมื่อถึงเดือน x (x ระหว่าง 1 ถึง 12 หรือ 0 เพื่อใช้เดือนแรกของปีบัญชีที่กำหนดไว้ในการกำหนดค่าของคุณ หรือ 99 เพื่อรีเซ็ตเป็นศูนย์ทุกเดือน) หากใช้ตัวเลือกนี้และ x เป็น 2 หรือสูงกว่า ก็จำเป็นต้องมีลำดับ {yy}{mm} หรือ {yyyy}{mm} ด้วย
{dd} วัน (01 ถึง 31)
{mm} เดือน (01 ถึง 12)
{yy}, {yyyy} หรือ {y} ปีที่มากกว่า 2, 4 หรือ 1 หมายเลข
GenericMaskCodes2={cccc} รหัสไคลเอ็นต์ที่มีอักขระ n ตัว
{cccc000} รหัสไคลเอ็นต์ บนอักขระ n ตามด้วยตัวนับสำหรับลูกค้าโดยเฉพาะ ตัวนับนี้สำหรับลูกค้าโดยเฉพาะจะถูกรีเซ็ตในเวลาเดียวกันกับตัวนับส่วนกลาง
{tttt} รหัสประเภทบุคคลที่สามที่มีอักขระ n ตัว (ดูเมนู หน้าแรก - การตั้งค่า - พจนานุกรม - ประเภทของบุคคลที่สาม) หากคุณเพิ่มแท็กนี้ ตัวนับจะแตกต่างกันสำหรับบุคคลที่สามแต่ละประเภท
GenericMaskCodes3=ทุกตัวอักษรอื่น ๆ ในหน้ากากจะยังคงเหมือนเดิม
ไม่อนุญาตให้ใช้ช่องว่าง
-GenericMaskCodes3EAN=อักขระอื่นๆ ทั้งหมดในมาสก์จะยังคงเดิม (ยกเว้น * หรือ ? ในตำแหน่งที่ 13 ใน EAN13)
ไม่อนุญาตให้เว้นวรรค
ใน EAN13 อักขระตัวสุดท้ายหลัง } ตัวสุดท้ายในตำแหน่งที่ 13 ควรเป็น * หรือ ? . มันจะถูกแทนที่ด้วยคีย์ที่คำนวณ
+GenericMaskCodes3EAN=All other characters in the mask will remain intact (except * or ? in 13th position in EAN13).
Spaces are not allowed.
In EAN13, the last character after the last } in 13th position should be * or ? . It will be replaced by the calculated key.
GenericMaskCodes4a=ตัวอย่างในวันที่ 99 %s ของบุคคลที่สาม TheCompany ซึ่งมีวันที่ 2023-01-31:
GenericMaskCodes4b=ตัวอย่างของบุคคลที่สามที่สร้างขึ้นเมื่อ 2023-01-31:
GenericMaskCodes4c=ตัวอย่างเกี่ยวกับผลิตภัณฑ์ที่สร้างขึ้นเมื่อ 2023-01-31:
@@ -509,7 +509,7 @@ WarningPHPMailA=- การใช้เซิร์ฟเวอร์ของ WarningPHPMailB=- ผู้ให้บริการอีเมลบางราย (เช่น Yahoo) ไม่อนุญาตให้คุณส่งอีเมลจากเซิร์ฟเวอร์อื่นที่ไม่ใช่เซิร์ฟเวอร์ของตนเอง การตั้งค่าปัจจุบันของคุณใช้เซิร์ฟเวอร์ของแอปพลิเคชันในการส่งอีเมล ไม่ใช่เซิร์ฟเวอร์ของผู้ให้บริการอีเมลของคุณ ดังนั้นผู้รับบางราย (ที่เข้ากันได้กับโปรโตคอล DMARC ที่มีข้อจำกัด) จะถามผู้ให้บริการอีเมลของคุณว่าสามารถรับอีเมลของคุณและผู้ให้บริการอีเมลบางรายได้หรือไม่ (เช่น Yahoo) อาจตอบว่า "ไม่" เนื่องจากเซิร์ฟเวอร์ไม่ใช่ของพวกเขา ดังนั้นอีเมลที่คุณส่งบางส่วนอาจไม่ได้รับการยอมรับสำหรับการจัดส่ง (โปรดระวังโควต้าการส่งของผู้ให้บริการอีเมลของคุณด้วย) WarningPHPMailC=- การใช้เซิร์ฟเวอร์ SMTP ของผู้ให้บริการอีเมลของคุณเองในการส่งอีเมลก็น่าสนใจเช่นกัน ดังนั้นอีเมลทั้งหมดที่ส่งจากแอปพลิเคชันจะถูกบันทึกลงในไดเร็กทอรี "ส่ง" ของกล่องจดหมายของคุณด้วย WarningPHPMailD=ดังนั้นจึงแนะนำให้เปลี่ยนวิธีการส่งอีเมลเป็นค่า "SMTP" -WarningPHPMailDbis=หากคุณต้องการคงวิธีการส่งอีเมลตามค่าเริ่มต้นของ "PHP" ไว้จริงๆ เพียงเพิกเฉยต่อคำเตือนนี้ หรือลบออกโดย %sคลิกที่นี่%s< /ช่วง>. +WarningPHPMailDbis=If you really want to keep the default "PHP" method to send emails, just ignore this warning, or remove it by %sclicking here%s. WarningPHPMail2=หากผู้ให้บริการอีเมล SMTP ของคุณจำเป็นต้องจำกัดโปรแกรมรับส่งอีเมลไว้เฉพาะที่อยู่ IP บางส่วน (ซึ่งพบได้ยากมาก) นี่คือที่อยู่ IP ของตัวแทนผู้ใช้อีเมล (MUA) สำหรับแอปพลิเคชัน ERP CRM ของคุณ: %s WarningPHPMailSPF=หากชื่อโดเมนในที่อยู่อีเมลของผู้ส่งของคุณได้รับการปกป้องโดยบันทึก SPF (สอบถามผู้รับจดทะเบียนชื่อโดเมนของคุณ) คุณต้องเพิ่ม IP ต่อไปนี้ในบันทึก SPF ของ DNS ของโดเมนของคุณ: %s ActualMailSPFRecordFound=พบบันทึก SPF จริง (สำหรับอีเมล %s) : %s @@ -519,7 +519,7 @@ RequiredBy=โมดูลนี้จำเป็นสำหรับโมด TheKeyIsTheNameOfHtmlField=นี่คือชื่อของฟิลด์ HTML จำเป็นต้องมีความรู้ทางเทคนิคในการอ่านเนื้อหาของหน้า HTML เพื่อรับชื่อคีย์ของฟิลด์ PageUrlForDefaultValues=คุณต้องป้อนเส้นทางสัมพันธ์ของ URL ของหน้า หากคุณรวมพารามิเตอร์ใน URL จะมีประสิทธิภาพหากพารามิเตอร์ทั้งหมดใน URL ที่เรียกดูมีค่าที่กำหนดไว้ที่นี่ PageUrlForDefaultValuesCreate=
ตัวอย่าง:
สำหรับแบบฟอร์มในการสร้างบุคคลที่สามใหม่ คือ %s.
สำหรับ URL ของโมดูลภายนอกที่ติดตั้งใน ไดเรกทอรีที่กำหนดเอง ไม่รวม "กำหนดเอง/" ดังนั้นให้ใช้เส้นทางเช่น mymodule/mypage.php และไม่ใช่แบบกำหนดเอง /mymodule/mypage.php.
หากคุณต้องการค่าเริ่มต้นเฉพาะในกรณีที่ url มีพารามิเตอร์บางตัว คุณสามารถใช้ %s -PageUrlForDefaultValuesList=
ตัวอย่าง:
สำหรับหน้าที่แสดงรายการบุคคลที่สาม จะเป็น
%s.
สำหรับ URL ของโมดูลภายนอกที่ติดตั้งในไดเรกทอรีที่กำหนดเอง ไม่รวม "custom/" ดังนั้นให้ใช้เส้นทางเช่น mymodule/mypagelist.php และไม่ใช่ custom/mymodule /mypagelist.php.
หากคุณต้องการค่าเริ่มต้นเฉพาะในกรณีที่ url มีพารามิเตอร์บางตัว คุณสามารถใช้ %s +PageUrlForDefaultValuesList=
Example:
For the page that lists third parties, it is %s.
For URL of external modules installed into custom directory, do not include the "custom/" so use a path like mymodule/mypagelist.php and not custom/mymodule/mypagelist.php.
If you want default value only if url has some parameter, you can use %s AlsoDefaultValuesAreEffectiveForActionCreate=โปรดทราบว่าการเขียนทับค่าเริ่มต้นสำหรับการสร้างแบบฟอร์มจะใช้ได้กับหน้าที่ได้รับการออกแบบอย่างถูกต้องเท่านั้น (ดังนั้นด้วยพารามิเตอร์ action=create หรือ presend...) EnableDefaultValues=เปิดใช้งานการปรับแต่งค่าเริ่มต้น EnableOverwriteTranslation=อนุญาตให้ปรับแต่งการแปล @@ -1197,6 +1197,7 @@ Skin=ธีม DefaultSkin=ธีมเริ่มต้น MaxSizeList=ความยาวสูงสุดสำหรับรายชื่อ DefaultMaxSizeList=ความยาวสูงสุดเริ่มต้นสำหรับรายการ +DisplayGrandTotalInList=Display grand total (for all pages) in lists footer DefaultMaxSizeShortList=ความยาวสูงสุดเริ่มต้นสำหรับรายการสั้นๆ (เช่น ในบัตรลูกค้า) MessageOfDay=ข้อความของวัน MessageLogin=ข้อความหน้าเข้าสู่ระบบ @@ -1249,7 +1250,7 @@ SetupDescription2=จำเป็นต้องมีสองส่วนต SetupDescription3=%s -> %s

พารามิเตอร์พื้นฐานที่ใช้ในการปรับแต่งการทำงานเริ่มต้นของแอปพลิเคชันของคุณ (เช่น สำหรับคุณลักษณะที่เกี่ยวข้องกับประเทศ) SetupDescription4=%s -> %s

ซอฟต์แวร์นี้เป็นชุดของโมดูล/แอปพลิเคชันจำนวนมาก โมดูลที่เกี่ยวข้องกับความต้องการของคุณต้องเปิดใช้งานและกำหนดค่า รายการเมนูจะปรากฏขึ้นพร้อมกับการเปิดใช้งานโมดูลเหล่านี้ SetupDescription5=รายการเมนูตั้งค่าอื่นๆ จัดการพารามิเตอร์เสริม -SetupDescriptionLink=%s - %s< /ช่วง> +SetupDescriptionLink=%s - %s SetupDescription3b=พารามิเตอร์พื้นฐานที่ใช้ในการปรับแต่งพฤติกรรมเริ่มต้นของแอปพลิเคชันของคุณ (เช่น สำหรับคุณลักษณะที่เกี่ยวข้องกับประเทศ) SetupDescription4b=ซอฟต์แวร์นี้เป็นชุดของโมดูล/แอปพลิเคชันจำนวนมาก ต้องเปิดใช้งานโมดูลที่เกี่ยวข้องกับความต้องการของคุณ รายการเมนูจะปรากฏขึ้นพร้อมกับการเปิดใช้งานโมดูลเหล่านี้ AuditedSecurityEvents=เหตุการณ์ด้านความปลอดภัยที่ได้รับการตรวจสอบ @@ -1281,7 +1282,7 @@ AvailableModules=แอพ/โมดูลที่ใช้งานได้ ToActivateModule=เพื่อเปิดใช้งานโมดูลไปในพื้นที่การติดตั้ง (หน้าแรก> Setup-> โมดูล) SessionTimeOut=หมดเวลาสำหรับเซสชั่น SessionExplanation=ตัวเลขนี้รับประกันว่าเซสชันจะไม่มีวันหมดอายุก่อนที่จะเกิดความล่าช้านี้ หากตัวล้างเซสชัน PHP ภายในดำเนินการด้วยตัวล้างเซสชัน PHP ภายใน (และไม่มีอะไรอื่นอีก) ตัวล้างเซสชัน PHP ภายในไม่รับประกันว่าเซสชันจะหมดอายุหลังจากความล่าช้านี้ มันจะหมดอายุหลังจากการหน่วงเวลานี้ และเมื่อมีการรันตัวล้างเซสชัน ดังนั้นทุก %s/%s การเข้าถึง แต่เฉพาะระหว่างการเข้าถึงที่ทำโดยเซสชันอื่น (หากค่าเป็น 0 หมายความว่าการล้างเซสชันทำได้โดยกระบวนการภายนอกเท่านั้น) .
หมายเหตุ: ในบางเซิร์ฟเวอร์ที่มีกลไกการล้างเซสชันภายนอก (cron ภายใต้ debian, ubuntu ...) เซสชันสามารถถูกทำลายได้หลังจากระยะเวลาที่กำหนดโดยการตั้งค่าภายนอก ไม่ว่าค่าที่ป้อนที่นี่จะเป็นเท่าใด -SessionsPurgedByExternalSystem=เซสชันบนเซิร์ฟเวอร์นี้ดูเหมือนว่าจะได้รับการทำความสะอาดโดยกลไกภายนอก (cron ภายใต้ debian, ubuntu ...) อาจเป็นทุก %s
วินาที (= ค่าของพารามิเตอร์ session.gc_maxlifetime) ดังนั้นการเปลี่ยนค่าตรงนี้จึงไม่มีผลใดๆ คุณต้องขอให้ผู้ดูแลระบบเซิร์ฟเวอร์เปลี่ยนการหน่วงเวลาของเซสชัน +SessionsPurgedByExternalSystem=Sessions on this server seems to be cleaned by an external mechanism (cron under debian, ubuntu ...), probably every %s seconds (= value of parameter session.gc_maxlifetime), so changing the value here has no effect. You must ask the server administrator to change session delay. TriggersAvailable=มีจำหน่ายทริกเกอร์ TriggersDesc=ทริกเกอร์คือไฟล์ที่จะปรับเปลี่ยนลักษณะการทำงานของเวิร์กโฟลว์ Dolibarr เมื่อคัดลอกลงในไดเรกทอรี htdocs/core/triggers พวกเขาตระหนักถึงการดำเนินการใหม่ๆ ที่เปิดใช้งานในเหตุการณ์ Dolibarr (การสร้างบริษัทใหม่ การตรวจสอบใบแจ้งหนี้ ...) TriggerDisabledByName=ทริกเกอร์ในแฟ้มนี้มีการปิดใช้งานโดยต่อท้าย -NORUN ในชื่อของพวกเขา @@ -1971,7 +1972,7 @@ SomethingMakeInstallFromWebNotPossible=การติดตั้งโมด SomethingMakeInstallFromWebNotPossible2=ด้วยเหตุนี้ กระบวนการอัปเกรดที่อธิบายไว้ที่นี่จึงเป็นกระบวนการที่ต้องดำเนินการด้วยตนเองซึ่งผู้ใช้ที่มีสิทธิ์เท่านั้นที่สามารถทำได้ InstallModuleFromWebHasBeenDisabledContactUs=ขณะนี้การติดตั้งหรือการพัฒนาโมดูลภายนอกหรือเว็บไซต์ไดนามิกจากแอปพลิเคชันถูกล็อคเพื่อความปลอดภัย โปรดติดต่อเราหากคุณต้องการเปิดใช้งานคุณสมบัตินี้ InstallModuleFromWebHasBeenDisabledByFile=ติดตั้งโมดูลภายนอกจากโปรแกรมที่ได้รับการปิดใช้งานโดยผู้ดูแลระบบ คุณต้องขอให้เขาลบไฟล์% s เพื่อให้คุณลักษณะนี้ -ConfFileMustContainCustom=การติดตั้งหรือสร้างโมดูลภายนอกจากแอปพลิเคชันจำเป็นต้องบันทึกไฟล์โมดูลลงในไดเร็กทอรี %s . หากต้องการให้ Dolibarr ประมวลผลไดเรกทอรีนี้ คุณต้องตั้งค่า conf/conf.php เพื่อเพิ่มบรรทัดคำสั่ง 2 บรรทัด:
$dolibarr_main_url_root_alt='/custom';
$dolibarr_main_document_root_alt='%s/custom'; +ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory %s. To have this directory processed by Dolibarr, you must setup your conf/conf.php to add the 2 directive lines:
$dolibarr_main_url_root_alt='/custom';
$dolibarr_main_document_root_alt='%s/custom'; HighlightLinesOnMouseHover=เน้นเส้นตารางเมื่อเลื่อนเมาส์ผ่านไป HighlightLinesColor=เน้นสีของเส้นเมื่อเมาส์ผ่าน (ใช้ 'ffffff' เพื่อไม่เน้น) HighlightLinesChecked=ไฮไลต์สีของเส้นเมื่อตรวจสอบ (ใช้ 'ffffff' เพื่อไม่ให้ไฮไลต์) @@ -2074,7 +2075,7 @@ TypeCdr=ใช้ "ไม่มี" หากวันที่ชำระเ BaseCurrency=สกุลเงินอ้างอิงของบริษัท (เข้าไปที่การตั้งค่าของบริษัทเพื่อเปลี่ยนแปลงสิ่งนี้) WarningNoteModuleInvoiceForFrenchLaw=โมดูลนี้ %s เป็นไปตามกฎหมายฝรั่งเศส (Loi Finance 2016) WarningNoteModulePOSForFrenchLaw=โมดูลนี้ %s เป็นไปตามกฎหมายฝรั่งเศส (Loi Finance 2016) เนื่องจากโมดูล Non Reversible Logs ถูกเปิดใช้งานโดยอัตโนมัติ -WarningInstallationMayBecomeNotCompliantWithLaw=คุณกำลังพยายามติดตั้งโมดูล %s ที่เป็นโมดูลภายนอก การเปิดใช้งานโมดูลภายนอกหมายความว่าคุณเชื่อถือผู้เผยแพร่โมดูลนั้น และคุณแน่ใจว่าโมดูลนี้ไม่ส่งผลเสียต่อพฤติกรรมของแอปพลิเคชันของคุณ และเป็นไปตามกฎหมายในประเทศของคุณ (%s) หากโมดูลแนะนำคุณสมบัติที่ผิดกฎหมาย คุณจะต้องรับผิดชอบต่อการใช้ซอฟต์แวร์ที่ผิดกฎหมาย +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software. MAIN_PDF_MARGIN_LEFT=ขอบซ้ายบน PDF MAIN_PDF_MARGIN_RIGHT=ขอบขวาบน PDF @@ -2262,7 +2263,7 @@ ModuleActivatedMayExposeInformation=ส่วนขยาย PHP นี้อา ModuleActivatedDoNotUseInProduction=เปิดใช้งานโมดูลที่ออกแบบมาเพื่อการพัฒนาแล้ว อย่าเปิดใช้งานในสภาพแวดล้อมการผลิต CombinationsSeparator=อักขระตัวคั่นสำหรับการรวมผลิตภัณฑ์ SeeLinkToOnlineDocumentation=ดูตัวอย่างลิงก์ไปยังเอกสารออนไลน์ที่เมนูด้านบน -SHOW_SUBPRODUCT_REF_IN_PDF=หากคุณลักษณะ "%s" ของโมดูล %s แสดงรายละเอียดผลิตภัณฑ์ย่อยของชุดอุปกรณ์ในรูปแบบ PDF +SHOW_SUBPRODUCT_REF_IN_PDF=If the feature "%s" of module %s is used, show details of subproducts of a kit on PDF. AskThisIDToYourBank=ติดต่อธนาคารของคุณเพื่อรับรหัสนี้ AdvancedModeOnly=การอนุญาตมีให้ในโหมดการอนุญาตขั้นสูงเท่านั้น ConfFileIsReadableOrWritableByAnyUsers=ไฟล์ conf สามารถอ่านหรือเขียนได้โดยผู้ใช้ ให้สิทธิ์แก่ผู้ใช้เว็บเซิร์ฟเวอร์และกลุ่มเท่านั้น @@ -2433,3 +2434,12 @@ UrlPublicInterfaceHelpAdmin=It is possible to define an alias to the web server ExportUseForce=Use the parameter -f ExportUseForceHelp=Force to continue the export even when an error is found (Backup may not be reliable) CustomPrompt=Custom prompts +AiDescription=AI (Artificial Intelligence) features +AiDescriptionLong=Provides AI (Artificial Intelligence) features in different part of the application. Need external AI API. +AI_KEY_API_CHATGPT= Key for ChatGPT IA api +AiSetup=AI module setup +AiCustomPrompt=AI customs prompt +AI_CONFIGURATIONS_PROMPT=Custom prompt +ImageGeneration=Image generation +AIPromptForFeatures=AI custom prompts for features +EnterAnIP=Enter an IP address diff --git a/htdocs/langs/th_TH/bills.lang b/htdocs/langs/th_TH/bills.lang index c5f73c56b03..1992a2766a1 100644 --- a/htdocs/langs/th_TH/bills.lang +++ b/htdocs/langs/th_TH/bills.lang @@ -93,6 +93,9 @@ CodePaymentMode=วิธีการชำระเงิน (รหัส) LabelPaymentMode=วิธีการชำระเงิน (ฉลาก) PaymentModeShort=วิธีการชำระเงิน PaymentTerm=เงื่อนไขการชำระเงิน +IdPaymentTerm=Payment term (id) +CodePaymentTerm=Payment term (code) +LabelPaymentTerm=Payment term (label) PaymentConditions=เงื่อนไขการชำระเงิน PaymentConditionsShort=เงื่อนไขการชำระเงิน PaymentAmount=จำนวนเงินที่ชำระ @@ -185,7 +188,7 @@ SuppliersDraftInvoices=ใบแจ้งหนี้ฉบับร่างข Unpaid=ยังไม่ได้ชำระ ErrorNoPaymentDefined=เกิดข้อผิดพลาด ไม่ได้กำหนดการชำระเงิน ConfirmDeleteBill=คุณแน่ใจหรือไม่ว่าต้องการลบใบแจ้งหนี้นี้ -ConfirmValidateBill=Are you sure you want to validate this invoice with the reference %s? +ConfirmValidateBill=คุณแน่ใจหรือไม่ว่าต้องการตรวจสอบใบแจ้งหนี้นี้โดยมีข้อมูลอ้างอิง %s? ConfirmUnvalidateBill=คุณแน่ใจหรือไม่ว่าต้องการเปลี่ยนใบแจ้งหนี้ %s เป็นสถานะฉบับร่าง ? ConfirmClassifyPaidBill=คุณแน่ใจหรือไม่ว่าต้องการเปลี่ยนใบแจ้งหนี้ %s เป็นสถานะชำระแล้ว ? ConfirmCancelBill=คุณแน่ใจหรือไม่ว่าต้องการยกเลิกใบแจ้งหนี้ %s @@ -214,10 +217,10 @@ ConfirmClassifyPaidPartiallyReasonBadSupplierDesc=ซัพพลายเอ ConfirmClassifyAbandonReasonOther=อื่น ๆ ConfirmClassifyAbandonReasonOtherDesc=ทางเลือกนี้จะถูกนำมาใช้ในกรณีอื่น ๆ ตัวอย่างเช่นเพราะคุณวางแผนที่จะสร้างใบแจ้งหนี้แทน ConfirmCustomerPayment=คุณยืนยันข้อมูลการชำระเงินนี้สำหรับ %s %s? -ConfirmSupplierPayment=คุณยืนยันข้อมูลการชำระเงินนี้สำหรับ %s %s? +ConfirmSupplierPayment=Do you confirm this payment input for %s %s? ConfirmValidatePayment=คุณแน่ใจหรือไม่ว่าต้องการตรวจสอบการชำระเงินนี้ ไม่สามารถเปลี่ยนแปลงได้เมื่อการชำระเงินได้รับการยืนยันแล้ว ValidateBill=ตรวจสอบใบแจ้งหนี้ -UnvalidateBill=Invalidate invoice +UnvalidateBill=ใบแจ้งหนี้ไม่ถูกต้อง NumberOfBills=จำนวนใบแจ้งหนี้ NumberOfBillsByMonth=จำนวนใบแจ้งหนี้ต่อเดือน AmountOfBills=จำนวนเงินของใบแจ้งหนี้ @@ -252,7 +255,7 @@ RemainderToPayBack=ยอดเงินคงเหลือเพื่อข RemainderToPayBackMulticurrency=จำนวนเงินคงเหลือที่จะคืนเงินเป็นสกุลเงินเดิม NegativeIfExcessReceived=ลบหากได้รับส่วนเกิน NegativeIfExcessRefunded=ค่าลบหากคืนเงินส่วนเกิน -NegativeIfExcessPaid=negative if excess paid +NegativeIfExcessPaid=ติดลบหากจ่ายเกิน Rest=ที่รอดำเนินการ AmountExpected=จำนวนเงินที่อ้างว่า ExcessReceived=ส่วนเกินที่ได้รับ @@ -268,6 +271,8 @@ NoDraftBills=ไม่มีใบแจ้งหนี้ร่าง NoOtherDraftBills=ไม่มีใบแจ้งหนี้ร่างอื่น ๆ NoDraftInvoices=ไม่มีใบแจ้งหนี้ร่าง RefBill=อ้างอิงใบแจ้งหนี้ +RefSupplierBill=Supplier invoice ref +SupplierOrderCreateBill=Create invoice ToBill=เพื่อเรียกเก็บเงิน RemainderToBill=เพื่อเรียกเก็บเงินส่วนที่เหลือ SendBillByMail=ส่งใบแจ้งหนี้ทางอีเมล @@ -352,6 +357,7 @@ HelpAbandonOther=จำนวนเงินนี้ถูกยกเลิก IdSocialContribution=สังคม / รหัสชำระภาษีการคลัง PaymentId=รหัสการชำระเงิน PaymentRef=การอ้างอิงการชำระเงิน +SourceInvoiceId=Source invoice id InvoiceId=รหัสใบแจ้งหนี้ InvoiceRef=อ้างอิงใบแจ้งหนี้ InvoiceDateCreation=วันที่สร้างใบแจ้งหนี้ @@ -562,10 +568,10 @@ YouMustCreateStandardInvoiceFirstDesc=คุณต้องสร้างใบ PDFCrabeDescription=เทมเพลต PDF ใบแจ้งหนี้ Crabe เทมเพลตใบแจ้งหนี้ที่สมบูรณ์ (การใช้เทมเพลต Sponge แบบเก่า) PDFSpongeDescription=เทมเพลตใบแจ้งหนี้ PDF ฟองน้ำ เทมเพลตใบแจ้งหนี้ที่สมบูรณ์ PDFCrevetteDescription=เทมเพลตใบแจ้งหนี้ PDF Crevette เทมเพลตใบแจ้งหนี้ที่สมบูรณ์สำหรับใบแจ้งหนี้ตามสถานการณ์ -TerreNumRefModelDesc1=Return number in the format %syymm-nnnn for standard invoices and %syymm-nnnn for credit notes where yy is year, mm is month and nnnn is a sequential auto-incrementing number with no break and no return to 0 -MarsNumRefModelDesc1=Return number in the format %syymm-nnnn for standard invoices, %syymm-nnnn for replacement invoices, %syymm-nnnn for down payment invoices and %syymm-nnnn for credit notes where yy is year, mm is month and nnnn is a sequential auto-incrementing number with no break and no return to 0 +TerreNumRefModelDesc1=หมายเลขส่งคืนในรูปแบบ %syymm-nnnn สำหรับใบแจ้งหนี้มาตรฐานและ %syymm-nnnn สำหรับใบลดหนี้โดยที่ yy คือปี mm คือเดือน และ nnnn เป็นตัวเลขที่เพิ่มขึ้นตามลำดับอัตโนมัติโดยไม่มีการหยุดพักและไม่มีการย้อนกลับเป็น 0 +MarsNumRefModelDesc1=หมายเลขส่งคืนในรูปแบบ %syymm-nnnn สำหรับใบแจ้งหนี้มาตรฐาน %syymm-nnnn สำหรับใบแจ้งหนี้ทดแทน %syymm-nnnn สำหรับใบแจ้งหนี้การชำระเงินดาวน์ และ %syymm-nnnn สำหรับใบลดหนี้ โดยที่ yy คือปี mm คือเดือน และ nnnn เป็นลำดับอัตโนมัติ จำนวนที่เพิ่มขึ้นโดยไม่มีการหยุดพักและไม่มีการกลับเป็น 0 TerreNumRefModelError=มีบิลที่ขึ้นต้นด้วย $syymm อยู่แล้ว และไม่รองรับกับโมเดลลำดับนี้ ลบออกหรือเปลี่ยนชื่อเพื่อเปิดใช้งานโมดูลนี้ -CactusNumRefModelDesc1=Return number in the format %syymm-nnnn for standard invoices, %syymm-nnnn for credit notes and %syymm-nnnn for down payment invoices where yy is year, mm is month and nnnn is a sequential auto-incrementing number with no break and no return to 0 +CactusNumRefModelDesc1=หมายเลขส่งคืนในรูปแบบ %syymm-nnnn สำหรับใบแจ้งหนี้มาตรฐาน %syymm-nnnn สำหรับใบลดหนี้และ %syymm-nnnn สำหรับใบแจ้งหนี้การชำระเงินดาวน์ โดยที่ yy คือปี mm คือเดือน และ nnnn เป็นตัวเลขที่เพิ่มขึ้นตามลำดับอัตโนมัติโดยไม่มีตัวแบ่งและไม่มีการส่งคืนเป็น 0 EarlyClosingReason=เหตุผลในการปิดก่อนกำหนด EarlyClosingComment=บันทึกการปิดต้น ##### Types de contacts ##### @@ -646,4 +652,4 @@ Salaries=เงินเดือน InvoiceSubtype=ประเภทย่อยของใบแจ้งหนี้ SalaryInvoice=เงินเดือน BillsAndSalaries=ตั๋วเงินและเงินเดือน -CreateCreditNoteWhenClientInvoiceExists=This option is enabled only when validated invoice(s) exist for a customer or when constant INVOICE_CREDIT_NOTE_STANDALONE is used(useful for some countries) +CreateCreditNoteWhenClientInvoiceExists=ตัวเลือกนี้จะเปิดใช้งานเฉพาะเมื่อมีใบแจ้งหนี้ที่ได้รับการตรวจสอบแล้วสำหรับลูกค้าหรือเมื่อมีการใช้ INVOICE_CREDIT_NOTE_STANDALONE คงที่เท่านั้น (มีประโยชน์สำหรับบางประเทศ) diff --git a/htdocs/langs/th_TH/cashdesk.lang b/htdocs/langs/th_TH/cashdesk.lang index 409e6aa9c9a..faa17049e99 100644 --- a/htdocs/langs/th_TH/cashdesk.lang +++ b/htdocs/langs/th_TH/cashdesk.lang @@ -97,7 +97,7 @@ ReceiptPrinterMethodDescription=วิธีการอันทรงพลั ByTerminal=โดยเทอร์มินัล TakeposNumpadUsePaymentIcon=ใช้ไอคอนแทนข้อความบนปุ่มชำระเงินของ numpad CashDeskRefNumberingModules=โมดูลการกำหนดหมายเลขสำหรับการขาย POS -CashDeskGenericMaskCodes6 =
{TN}
ใช้แท็กเพื่อเพิ่มหมายเลขเทอร์มินัล +CashDeskGenericMaskCodes6 =
{TN} tag is used to add the terminal number TakeposGroupSameProduct=Merge lines of the same products StartAParallelSale=เริ่มการขายแบบคู่ขนานใหม่ SaleStartedAt=เริ่มขายที่ %s diff --git a/htdocs/langs/th_TH/errors.lang b/htdocs/langs/th_TH/errors.lang index 313b19d01e0..863aa2c4920 100644 --- a/htdocs/langs/th_TH/errors.lang +++ b/htdocs/langs/th_TH/errors.lang @@ -96,7 +96,7 @@ ErrorPasswordsMustMatch=ทั้งสองพิมพ์รหัสผ่ ErrorContactEMail=เกิดข้อผิดพลาดทางเทคนิค โปรดติดต่อผู้ดูแลระบบเพื่อติดตามอีเมล %s และระบุข้อผิดพลาด รหัส %s ในข้อความของคุณ หรือเพิ่มสำเนาหน้าจอของ หน้านี้. ErrorWrongValueForField=ฟิลด์ %s: ' %s' ไม่ตรงกับกฎ regex %s ErrorHtmlInjectionForField=ฟิลด์ %s: ค่า '%s' มีข้อมูลที่เป็นอันตรายซึ่งไม่ได้รับอนุญาต -ErrorFieldValueNotIn=ฟิลด์ %s: ' %s' ไม่ใช่ค่าที่พบในฟิลด์ %s ของ %s +ErrorFieldValueNotIn=Field %s: '%s' is not a value found in field %s of %s ErrorFieldRefNotIn=ฟิลด์ %s: ' %s' ไม่ใช่ %s การอ้างอิงที่มีอยู่ ErrorMultipleRecordFoundFromRef=พบหลายบันทึกเมื่อค้นหาจากการอ้างอิง %s ไม่มีทางรู้ว่าจะใช้ ID ใด ErrorsOnXLines=พบข้อผิดพลาด %s diff --git a/htdocs/langs/th_TH/exports.lang b/htdocs/langs/th_TH/exports.lang index 9733c543153..52750e65642 100644 --- a/htdocs/langs/th_TH/exports.lang +++ b/htdocs/langs/th_TH/exports.lang @@ -94,7 +94,7 @@ NbOfLinesOK=จำนวนเส้นที่มีข้อผิดพ NbOfLinesImported=จำนวนของเส้นที่นำเข้ามาประสบความสำเร็จ:% s DataComeFromNoWhere=คุ้มค่าที่จะแทรกมาจากที่ไหนเลยในแฟ้มแหล่งที่มา DataComeFromFileFieldNb=ค่าที่จะแทรกมาจากคอลัมน์ %s ในไฟล์ต้นฉบับ -DataComeFromIdFoundFromRef=ค่าที่มาจากไฟล์ต้นฉบับจะถูกใช้เพื่อค้นหารหัสของออบเจ็กต์หลักที่จะใช้ (ดังนั้นออบเจ็กต์ %s
ที่มีการอ้างอิงจากไฟล์ต้นฉบับต้องมีอยู่ในฐานข้อมูล) +DataComeFromIdFoundFromRef=The value that comes from the source file will be used to find the id of the parent object to use (so the object %s that has the ref. from source file must exist in the database). DataComeFromIdFoundFromCodeId=ค่าของโค้ดที่มาจากไฟล์ต้นฉบับจะถูกใช้เพื่อค้นหา ID ของออบเจ็กต์พาเรนต์ที่จะใช้ (ดังนั้นโค้ดจากไฟล์ต้นฉบับจะต้องมีอยู่ในพจนานุกรม %s) โปรดทราบว่าหากคุณทราบรหัส คุณจะสามารถใช้รหัสดังกล่าวในไฟล์ต้นฉบับแทนโค้ดได้ การนำเข้าควรใช้งานได้ทั้งสองกรณี DataIsInsertedInto=ข้อมูลที่มาจากแฟ้มแหล่งที่มาจะถูกแทรกเข้าไปในสนามต่อไปนี้: DataIDSourceIsInsertedInto=รหัสของออบเจ็กต์หลักซึ่งพบโดยใช้ข้อมูลในไฟล์ต้นฉบับจะถูกแทรกลงในฟิลด์ต่อไปนี้: diff --git a/htdocs/langs/th_TH/install.lang b/htdocs/langs/th_TH/install.lang index 041c1efd3b1..aa806f19c02 100644 --- a/htdocs/langs/th_TH/install.lang +++ b/htdocs/langs/th_TH/install.lang @@ -8,7 +8,7 @@ ConfFileIsNotWritable=ไฟล์การกำหนดค่า %sไ ConfFileIsWritable=ไฟล์การกำหนดค่า %sสามารถเขียนได้ ConfFileMustBeAFileNotADir=ไฟล์การกำหนดค่า %sต้องเป็นไฟล์ ไม่ใช่ไดเร็กทอรี ConfFileReload=กำลังโหลดพารามิเตอร์อีกครั้งจากไฟล์การกำหนดค่า -NoReadableConfFileSoStartInstall=The configuration file conf/conf.php does not exists or is not readable. We will run the installation process to try to initialize it. +NoReadableConfFileSoStartInstall=ไฟล์การกำหนดค่า conf/conf.php ไม่มีอยู่หรือไม่สามารถอ่านได้ เราจะรันกระบวนการติดตั้งเพื่อพยายามเริ่มต้นใช้งาน PHPSupportPOSTGETOk=PHP นี้สนับสนุนตัวแปร POST และ GET PHPSupportPOSTGETKo=เป็นไปได้ว่าการตั้งค่า PHP ของคุณไม่รองรับตัวแปร POST และ/หรือ GET ตรวจสอบพารามิเตอร์ variables_order ใน php.ini PHPSupportSessions=PHP นี้รองรับเซสชัน @@ -24,11 +24,11 @@ ErrorWrongValueForParameter=คุณอาจจะพิมพ์ค่าท ErrorFailedToCreateDatabase=ไม่สามารถสร้างฐานข้อมูล '%s' ErrorFailedToConnectToDatabase=ไม่สามารถเชื่อมต่อกับฐานข้อมูล '%s' ErrorDatabaseVersionTooLow=เวอร์ชั่นฐานข้อมูล (%s) เก่าเกินไป ต้องใช้เวอร์ชั่น %s หรือสูงกว่า -ErrorPHPVersionTooLow=PHP version too old. Version %s or higher is required. -ErrorPHPVersionTooHigh=PHP version too high. Version %s or lower is required. +ErrorPHPVersionTooLow=PHP เวอร์ชันเก่าเกินไป ต้องมีเวอร์ชัน %s หรือสูงกว่า +ErrorPHPVersionTooHigh=เวอร์ชัน PHP สูงเกินไป ต้องมีเวอร์ชัน %s หรือต่ำกว่า ErrorConnectedButDatabaseNotFound=การเชื่อมต่อกับเซิร์ฟเวอร์สำเร็จ แต่ไม่พบฐานข้อมูล '%s' ErrorDatabaseAlreadyExists=ฐานข้อมูล '%s' อยู่แล้ว -ErrorNoMigrationFilesFoundForParameters=No migration file found for the selected versions +ErrorNoMigrationFilesFoundForParameters=ไม่พบไฟล์การย้ายข้อมูลสำหรับเวอร์ชันที่เลือก IfDatabaseNotExistsGoBackAndUncheckCreate=หากไม่มีฐานข้อมูล ให้ย้อนกลับและเลือกตัวเลือก "สร้างฐานข้อมูล" IfDatabaseExistsGoBackAndCheckCreate=ถ้าฐานข้อมูลที่มีอยู่แล้วให้กลับไปและยกเลิก "สร้างฐานข้อมูลตัวเลือก" WarningBrowserTooOld=เวอร์ชันของเบราว์เซอร์เก่าเกินไป ขอแนะนำให้อัปเกรดเบราว์เซอร์ของคุณเป็น Firefox, Chrome หรือ Opera เวอร์ชันล่าสุด @@ -48,19 +48,18 @@ ServerAddressDescription=ชื่อหรือที่อยู่ IP สำ ServerPortDescription=ฐานข้อมูลเซิร์ฟเวอร์พอร์ต ให้ค่าว่าง ถ้าไม่รู้ DatabaseServer=เซิร์ฟเวอร์ฐานข้อมูล DatabaseName=ชื่อฐานข้อมูล -DatabasePrefix=Database table prefix -DatabasePrefixDescription=Database table prefix. If empty, defaults to llx_. -AdminLogin=User account for the Dolibarr database owner. -PasswordAgain=Retype password confirmation +DatabasePrefix=คำนำหน้าตารางฐานข้อมูล +DatabasePrefixDescription=คำนำหน้าตารางฐานข้อมูล หากว่างเปล่า จะมีค่าเริ่มต้นเป็น llx_ +AdminLogin=บัญชีผู้ใช้สำหรับเจ้าของฐานข้อมูล Dolibarr AdminPassword=รหัสผ่านสำหรับเจ้าของฐานข้อมูล Dolibarr CreateDatabase=สร้างฐานข้อมูล -CreateUser=Create user account or grant user account permission on the Dolibarr database +CreateUser=สร้างบัญชีผู้ใช้หรือให้สิทธิ์บัญชีผู้ใช้ในฐานข้อมูล Dolibarr DatabaseSuperUserAccess=เซิร์ฟเวอร์ฐานข้อมูล - การเข้าถึง Superuser -CheckToCreateDatabase=Check the box if the database does not exist yet and so must be created.
In this case, you must also fill in the user name and password for the superuser account at the bottom of this page. +CheckToCreateDatabase=ทำเครื่องหมายที่ช่องหากยังไม่มีฐานข้อมูลและจำเป็นต้องสร้าง
ในกรณีนี้ คุณต้องกรอกชื่อผู้ใช้และรหัสผ่านสำหรับบัญชี superuser ที่ด้านล่าง ของหน้านี้ CheckToCreateUser=Check the box if:
the database user account does not yet exist and so must be created, or
if the user account exists but the database does not exist and permissions must be granted.
In this case, you must enter the user account and password and also the superuser account name and password at the bottom of this page. If this box is unchecked, database owner and password must already exist. -DatabaseRootLoginDescription=Superuser account name (to create new databases or new users), mandatory if the database or its owner does not already exist. -KeepEmptyIfNoPassword=Leave empty if superuser has no password (NOT recommended) -SaveConfigurationFile=Saving parameters to +DatabaseRootLoginDescription=ชื่อบัญชี Superuser (เพื่อสร้างฐานข้อมูลใหม่หรือผู้ใช้ใหม่) จำเป็นหากฐานข้อมูลหรือเจ้าของไม่มีอยู่แล้ว +KeepEmptyIfNoPassword=เว้นว่างไว้หาก superuser ไม่มีรหัสผ่าน (ไม่แนะนำ) +SaveConfigurationFile=กำลังบันทึกพารามิเตอร์ไปที่ ServerConnection=การเชื่อมต่อเซิร์ฟเวอร์ DatabaseCreation=การสร้างฐานข้อมูล CreateDatabaseObjects=ฐานข้อมูลการสร้างวัตถุ @@ -71,83 +70,83 @@ CreateOtherKeysForTable=สร้างปุ่มต่างประเท OtherKeysCreation=คีย์ต่างประเทศและการสร้างดัชนี FunctionsCreation=ฟังก์ชั่นการสร้าง AdminAccountCreation=ผู้ดูแลระบบเข้าสู่ระบบการสร้าง -PleaseTypePassword=Please type a password, empty passwords are not allowed! -PleaseTypeALogin=Please type a login! -PasswordsMismatch=Passwords differs, please try again! +PleaseTypePassword=กรุณาพิมพ์รหัสผ่าน ไม่อนุญาตให้ใช้รหัสผ่านที่ว่างเปล่า! +PleaseTypeALogin=กรุณาพิมพ์เข้าสู่ระบบ! +PasswordsMismatch=รหัสผ่านแตกต่างออกไป โปรดลองอีกครั้ง! SetupEnd=ในตอนท้ายของการตั้งค่า SystemIsInstalled=การติดตั้งนี้เสร็จสมบูรณ์ SystemIsUpgraded=Dolibarr ได้รับการอัพเกรดที่ประสบความสำเร็จ YouNeedToPersonalizeSetup=คุณต้องกำหนดค่า Dolibarr เพื่อให้เหมาะกับความต้องการของคุณ (ลักษณะคุณสมบัติ, ... ) การทำเช่นนี้โปรดทำตามลิงค์ด้านล่าง: -AdminLoginCreatedSuccessfuly=Dolibarr administrator login '%s' created successfully. +AdminLoginCreatedSuccessfuly=สร้างการเข้าสู่ระบบผู้ดูแลระบบ Dolibarr '%s' สำเร็จแล้ว GoToDolibarr=ไปที่ Dolibarr GoToSetupArea=ไปที่ Dolibarr (พื้นที่ติดตั้ง) -MigrationNotFinished=The database version is not completely up to date: run the upgrade process again. +MigrationNotFinished=เวอร์ชันฐานข้อมูลไม่ทันสมัยอย่างสมบูรณ์: รันกระบวนการอัปเกรดอีกครั้ง GoToUpgradePage=ไปที่หน้าอัพเกรดอีกครั้ง WithNoSlashAtTheEnd=โดยไม่ต้องเฉือน "/" ในตอนท้าย -DirectoryRecommendation=IMPORTANT: You must use a directory that is outside of the web pages (so do not use a subdirectory of previous parameter). +DirectoryRecommendation=สำคัญ: คุณต้องใช้ไดเรกทอรีที่อยู่นอกหน้าเว็บ (ดังนั้นอย่าใช้ไดเรกทอรีย่อยของพารามิเตอร์ก่อนหน้า ). LoginAlreadyExists=ที่มีอยู่แล้ว DolibarrAdminLogin=ผู้ดูแลระบบเข้าสู่ระบบ Dolibarr -AdminLoginAlreadyExists=Dolibarr administrator account '%s' already exists. Go back if you want to create another one. -FailedToCreateAdminLogin=Failed to create Dolibarr administrator account. -WarningRemoveInstallDir=Warning, for security reasons, once the install or upgrade is complete, you should add a file called install.lock into the Dolibarr document directory in order to prevent the accidental/malicious use of the install tools again. -FunctionNotAvailableInThisPHP=Not available in this PHP +AdminLoginAlreadyExists=บัญชีผู้ดูแลระบบ Dolibarr '%s' มีอยู่แล้ว ย้อนกลับหากคุณต้องการสร้างรายการอื่น +FailedToCreateAdminLogin=ไม่สามารถสร้างบัญชีผู้ดูแลระบบ Dolibarr +WarningRemoveInstallDir=คำเตือน ด้วยเหตุผลด้านความปลอดภัย เมื่อกระบวนการติดตั้งเสร็จสมบูรณ์ คุณต้องเพิ่มไฟล์ชื่อ install.lock ลงใน ไดเร็กทอรีเอกสาร Dolibarr เพื่อป้องกันการใช้เครื่องมือติดตั้งอีกครั้งโดยไม่ตั้งใจ/เป็นอันตราย +FunctionNotAvailableInThisPHP=ไม่มีใน PHP นี้ ChoosedMigrateScript=เลือกสคริปต์การย้ายถิ่น -DataMigration=Database migration (data) -DatabaseMigration=Database migration (structure + some data) +DataMigration=การย้ายฐานข้อมูล (ข้อมูล) +DatabaseMigration=การย้ายฐานข้อมูล (โครงสร้าง + ข้อมูลบางส่วน) ProcessMigrateScript=การประมวลผลสคริปต์ ChooseYourSetupMode=เลือกโหมดการตั้งค่าของคุณและคลิกที่ "เริ่มต้น" ... FreshInstall=ติดตั้งใหม่ -FreshInstallDesc=Use this mode if this is your first install. If not, this mode can repair a incomplete previous install. If you want to upgrade your version, choose "Upgrade" mode. +FreshInstallDesc=ใช้โหมดนี้หากเป็นการติดตั้งครั้งแรกของคุณ ถ้าไม่ โหมดนี้สามารถซ่อมแซมการติดตั้งก่อนหน้านี้ที่ไม่สมบูรณ์ได้ หากคุณต้องการอัปเกรดเวอร์ชันของคุณ ให้เลือกโหมด "อัปเกรด" Upgrade=อัพเกรด UpgradeDesc=ใช้โหมดนี้ถ้าคุณได้เปลี่ยนไฟล์ Dolibarr กับไฟล์จากเวอร์ชันที่ใหม่กว่า นี้จะอัพเกรดฐานข้อมูลและข้อมูลของคุณ Start=เริ่มต้น InstallNotAllowed=ติดตั้งไม่ได้รับอนุญาตตามสิทธิ์ conf.php YouMustCreateWithPermission=คุณต้องสร้างแฟ้ม% s และกำหนดสิทธิ์ในการเขียนเกี่ยวกับมันสำหรับเว็บเซิร์ฟเวอร์ในระหว่างขั้นตอนการติดตั้ง -CorrectProblemAndReloadPage=Please fix the problem and press F5 to reload the page. +CorrectProblemAndReloadPage=โปรดแก้ไขปัญหาแล้วกด F5 เพื่อโหลดหน้าซ้ำ AlreadyDone=อพยพแล้ว DatabaseVersion=รุ่นฐานข้อมูล ServerVersion=เซิร์ฟเวอร์ฐานข้อมูลรุ่น YouMustCreateItAndAllowServerToWrite=คุณต้องสร้างไดเรกทอรีนี้และอนุญาตให้เว็บเซิร์ฟเวอร์ที่จะเขียนลงไป DBSortingCollation=เรียงลำดับตัวอักษร YouAskDatabaseCreationSoDolibarrNeedToConnect=You selected create database %s, but for this, Dolibarr needs to connect to server %s with super user %s permissions. -YouAskLoginCreationSoDolibarrNeedToConnect=You selected create database user %s, but for this, Dolibarr needs to connect to server %s with super user %s permissions. -BecauseConnectionFailedParametersMayBeWrong=The database connection failed: the host or super user parameters must be wrong. +YouAskLoginCreationSoDolibarrNeedToConnect=คุณเลือกสร้างผู้ใช้ฐานข้อมูล %s แต่สำหรับสิ่งนี้ Dolibarr จำเป็นต้องเชื่อมต่อกับเซิร์ฟเวอร์ %s ด้วยผู้ใช้ระดับสูง %s สิทธิ์ +BecauseConnectionFailedParametersMayBeWrong=การเชื่อมต่อฐานข้อมูลล้มเหลว: โฮสต์หรือพารามิเตอร์ผู้ใช้ขั้นสูงต้องผิด OrphelinsPaymentsDetectedByMethod=การชำระเงินเด็กกำพร้าที่ตรวจพบโดยวิธี% s RemoveItManuallyAndPressF5ToContinue=ลบออกด้วยตนเองและกด F5 เพื่อดำเนินการต่อไป FieldRenamed=เปลี่ยนชื่อสนาม -IfLoginDoesNotExistsCheckCreateUser=If the user does not exist yet, you must check option "Create user" -ErrorConnection=Server "%s", database name "%s", login "%s", or database password may be wrong or the PHP client version may be too old compared to the database version. +IfLoginDoesNotExistsCheckCreateUser=หากยังไม่มีผู้ใช้ คุณต้องกาเครื่องหมายที่ตัวเลือก "สร้างผู้ใช้" +ErrorConnection=เซิร์ฟเวอร์ "%s" ชื่อฐานข้อมูล "%s", เข้าสู่ระบบ " span>%s" หรือรหัสผ่านฐานข้อมูลอาจผิดหรือเวอร์ชันไคลเอ็นต์ PHP อาจเก่าเกินไปเมื่อเทียบกับเวอร์ชันฐานข้อมูล . InstallChoiceRecommanded=ทางเลือกที่แนะนำในการติดตั้งเวอร์ชั่น% s จากรุ่นปัจจุบันของคุณ% s InstallChoiceSuggested=ติดตั้งทางเลือกที่แนะนำโดยการติดตั้ง -MigrateIsDoneStepByStep=The targeted version (%s) has a gap of several versions. The install wizard will come back to suggest a further migration once this one is complete. -CheckThatDatabasenameIsCorrect=Check that the database name "%s" is correct. +MigrateIsDoneStepByStep=เวอร์ชันเป้าหมาย (%s) มีช่องว่างหลายเวอร์ชัน วิซาร์ดการติดตั้งจะกลับมาเพื่อแนะนำการย้ายข้อมูลเพิ่มเติมเมื่อการดำเนินการนี้เสร็จสมบูรณ์ +CheckThatDatabasenameIsCorrect=ตรวจสอบว่าชื่อฐานข้อมูล "%s" ถูกต้อง IfAlreadyExistsCheckOption=ถ้าชื่อนี้ถูกต้องและฐานข้อมูลที่ยังไม่ปรากฏอยู่คุณต้องตรวจสอบตัวเลือก "สร้างฐานข้อมูล" OpenBaseDir=PHP openbasedir พารามิเตอร์ -YouAskToCreateDatabaseSoRootRequired=You checked the box "Create database". For this, you need to provide the login/password of superuser (bottom of form). -YouAskToCreateDatabaseUserSoRootRequired=You checked the box "Create database owner". For this, you need to provide the login/password of superuser (bottom of form). -NextStepMightLastALongTime=The current step may take several minutes. Please wait until the next screen is shown completely before continuing. -MigrationCustomerOrderShipping=Migrate shipping for sales orders storage +YouAskToCreateDatabaseSoRootRequired=คุณทำเครื่องหมายที่ช่อง "สร้างฐานข้อมูล" ในการดำเนินการนี้ คุณจะต้องระบุข้อมูลเข้าสู่ระบบ/รหัสผ่านของ superuser (ด้านล่างของแบบฟอร์ม) +YouAskToCreateDatabaseUserSoRootRequired=คุณทำเครื่องหมายในช่อง "สร้างเจ้าของฐานข้อมูล" ในการดำเนินการนี้ คุณจะต้องระบุข้อมูลเข้าสู่ระบบ/รหัสผ่านของ superuser (ด้านล่างของแบบฟอร์ม) +NextStepMightLastALongTime=ขั้นตอนปัจจุบันอาจใช้เวลาหลายนาที โปรดรอจนกระทั่งหน้าจอถัดไปแสดงโดยสมบูรณ์ก่อนดำเนินการต่อ +MigrationCustomerOrderShipping=ย้ายข้อมูลการจัดส่งสำหรับการจัดเก็บใบสั่งขาย MigrationShippingDelivery=เพิ่มระดับการจัดเก็บข้อมูลในการจัดส่ง MigrationShippingDelivery2=เพิ่มระดับการจัดเก็บข้อมูลในการจัดส่ง 2 MigrationFinished=การโยกย้ายเสร็จ -LastStepDesc=Last step: Define here the login and password you wish to use to connect to Dolibarr. Do not lose this as it is the master account to administer all other/additional user accounts. +LastStepDesc=ขั้นตอนสุดท้าย: กำหนดข้อมูลเข้าสู่ระบบและรหัสผ่านที่คุณต้องการใช้เชื่อมต่อกับ Dolibarr ที่นี่ อย่าสูญเสียสิ่งนี้ เนื่องจากเป็นบัญชีหลักในการดูแลบัญชีผู้ใช้อื่นๆ/เพิ่มเติมทั้งหมด ActivateModule=เปิดใช้งานโมดูล% s ShowEditTechnicalParameters=คลิกที่นี่เพื่อแสดง / แก้ไขพารามิเตอร์ขั้นสูง (โหมดผู้เชี่ยวชาญ) -WarningUpgrade=Warning:\nDid you run a database backup first?\nThis is highly recommended. Loss of data (due to for example bugs in mysql version 5.5.40/41/42/43) may be possible during this process, so it is essential to take a complete dump of your database before starting any migration.\n\nClick OK to start migration process... -ErrorDatabaseVersionForbiddenForMigration=Your database version is %s. It has a critical bug, making data loss possible if you make structural changes in your database, such as is required by the migration process. For his reason, migration will not be allowed until you upgrade your database to a layer (patched) version (list of known buggy versions: %s) -KeepDefaultValuesWamp=You used the Dolibarr setup wizard from DoliWamp, so values proposed here are already optimized. Change them only if you know what you are doing. -KeepDefaultValuesDeb=You used the Dolibarr setup wizard from a Linux package (Ubuntu, Debian, Fedora...), so the values proposed here are already optimized. Only the password of the database owner to create must be entered. Change other parameters only if you know what you are doing. -KeepDefaultValuesMamp=You used the Dolibarr setup wizard from DoliMamp, so the values proposed here are already optimized. Change them only if you know what you are doing. -KeepDefaultValuesProxmox=You used the Dolibarr setup wizard from a Proxmox virtual appliance, so the values proposed here are already optimized. Change them only if you know what you are doing. -UpgradeExternalModule=Run dedicated upgrade process of external module -SetAtLeastOneOptionAsUrlParameter=Set at least one option as a parameter in URL. For example: '...repair.php?standard=confirmed' -NothingToDelete=Nothing to clean/delete -NothingToDo=Nothing to do +WarningUpgrade=คำเตือน:\nคุณได้ทำการสำรองฐานข้อมูลก่อนหรือไม่?\nขอแนะนำอย่างยิ่ง ข้อมูลสูญหาย (เนื่องจากข้อบกพร่องต่างๆ ใน mysql เวอร์ชัน 5.5.40/41/42/43) อาจเกิดขึ้นได้ในระหว่างกระบวนการนี้ ดังนั้นจึงจำเป็นอย่างยิ่งที่จะต้องดัมพ์ฐานข้อมูลของคุณให้สมบูรณ์ก่อนที่จะเริ่มการย้ายข้อมูลใดๆ\n\nคลิกตกลงเพื่อเริ่มกระบวนการย้าย... +ErrorDatabaseVersionForbiddenForMigration=เวอร์ชันฐานข้อมูลของคุณคือ %s มีจุดบกพร่องร้ายแรง ซึ่งทำให้ข้อมูลสูญหายได้หากคุณทำการเปลี่ยนแปลงโครงสร้างในฐานข้อมูล เช่น จำเป็นต่อกระบวนการย้าย ด้วยเหตุผลของเขา การโยกย้ายจะไม่ได้รับอนุญาตจนกว่าคุณจะอัปเกรดฐานข้อมูลของคุณเป็นเวอร์ชันเลเยอร์ (แพตช์) (รายการเวอร์ชัน buggy ที่รู้จัก: %s) +KeepDefaultValuesWamp=คุณใช้วิซาร์ดการตั้งค่า Dolibarr จาก DoliWamp ดังนั้นค่าที่เสนอที่นี่จึงได้รับการปรับให้เหมาะสมแล้ว เปลี่ยนมันเฉพาะเมื่อคุณรู้ว่าคุณกำลังทำอะไรอยู่ +KeepDefaultValuesDeb=คุณใช้วิซาร์ดการตั้งค่า Dolibarr จากแพ็คเกจ Linux (Ubuntu, Debian, Fedora...) ดังนั้นค่าที่เสนอที่นี่จึงได้รับการปรับปรุงให้เหมาะสมแล้ว ต้องป้อนรหัสผ่านของเจ้าของฐานข้อมูลที่จะสร้างเท่านั้น เปลี่ยนพารามิเตอร์อื่นๆ เฉพาะเมื่อคุณรู้ว่าคุณกำลังทำอะไรอยู่ +KeepDefaultValuesMamp=คุณใช้วิซาร์ดการตั้งค่า Dolibarr จาก DoliMamp ดังนั้นค่าที่เสนอที่นี่จึงได้รับการปรับให้เหมาะสมแล้ว เปลี่ยนมันเฉพาะเมื่อคุณรู้ว่าคุณกำลังทำอะไรอยู่ +KeepDefaultValuesProxmox=คุณใช้วิซาร์ดการตั้งค่า Dolibarr จากอุปกรณ์เสมือน Proxmox ดังนั้นค่าที่เสนอที่นี่จึงได้รับการปรับให้เหมาะสมแล้ว เปลี่ยนมันเฉพาะเมื่อคุณรู้ว่าคุณกำลังทำอะไรอยู่ +UpgradeExternalModule=รันกระบวนการอัพเกรดเฉพาะของโมดูลภายนอก +SetAtLeastOneOptionAsUrlParameter=ตั้งค่าอย่างน้อยหนึ่งตัวเลือกเป็นพารามิเตอร์ใน URL ตัวอย่างเช่น: '...repair.php?standard=confirmed' +NothingToDelete=ไม่มีอะไรที่จะล้าง/ลบ +NothingToDo=ไม่มีอะไรทำ ######### # upgrade MigrationFixData=แก้ไขข้อมูล denormalized MigrationOrder=การโยกย้ายข้อมูลสำหรับการสั่งซื้อของลูกค้า -MigrationSupplierOrder=Data migration for vendor's orders +MigrationSupplierOrder=การย้ายข้อมูลสำหรับคำสั่งซื้อของผู้ขาย MigrationProposal=การโยกย้ายข้อมูลสำหรับข้อเสนอในเชิงพาณิชย์ MigrationInvoice=การโยกย้ายข้อมูลสำหรับใบแจ้งหนี้ของลูกค้า MigrationContract=การโยกย้ายข้อมูลในการทำสัญญา @@ -163,9 +162,9 @@ MigrationContractsUpdate=สัญญาแก้ไขข้อมูล MigrationContractsNumberToUpdate=สัญญา% s (s) เพื่อปรับปรุง MigrationContractsLineCreation=สร้างสายสัญญาสำหรับการอ้างอิงสัญญา% s MigrationContractsNothingToUpdate=ไม่มีสิ่งที่ต้องทำ -MigrationContractsFieldDontExist=Field fk_facture does not exist anymore. Nothing to do. +MigrationContractsFieldDontExist=ไม่มีฟิลด์ fk_facture อีกต่อไป ไม่มีอะไรทำ. MigrationContractsEmptyDatesUpdate=การแก้ไขสัญญาวันที่ว่างเปล่า -MigrationContractsEmptyDatesUpdateSuccess=Contract empty date correction done successfully +MigrationContractsEmptyDatesUpdateSuccess=แก้ไขวันที่ว่างของสัญญาสำเร็จแล้ว MigrationContractsEmptyDatesNothingToUpdate=ไม่มีวันที่ทำสัญญาที่ว่างเปล่าที่จะแก้ไข MigrationContractsEmptyCreationDatesNothingToUpdate=วันที่สร้างสัญญายังไม่ได้แก้ไข MigrationContractsInvalidDatesUpdate=วันที่คิดมูลค่าการแก้ไขสัญญาที่ไม่ดี @@ -173,13 +172,13 @@ MigrationContractsInvalidDateFix=สัญญาที่ถูกต้อง% MigrationContractsInvalidDatesNumber=สัญญา% s การแก้ไข MigrationContractsInvalidDatesNothingToUpdate=ไม่มีวันที่มีมูลค่าที่ดีที่จะแก้ไข MigrationContractsIncoherentCreationDateUpdate=การสร้างมูลค่าสัญญาที่ไม่ดีแก้ไขวันที่ -MigrationContractsIncoherentCreationDateUpdateSuccess=Bad value contract creation date correction done successfully +MigrationContractsIncoherentCreationDateUpdateSuccess=แก้ไขวันที่สร้างสัญญามูลค่าไม่ถูกต้องสำเร็จแล้ว MigrationContractsIncoherentCreationDateNothingToUpdate=ไม่มีค่าที่ไม่ดีสำหรับวันที่สร้างสัญญาที่จะแก้ไข MigrationReopeningContracts=สัญญาเปิดปิดโดยข้อผิดพลาด MigrationReopenThisContract=เปิดสัญญา% s MigrationReopenedContractsNumber=สัญญา% s การแก้ไข MigrationReopeningContractsNothingToUpdate=ไม่มีการทำสัญญาในการเปิดปิด -MigrationBankTransfertsUpdate=Update links between bank entry and a bank transfer +MigrationBankTransfertsUpdate=อัปเดตลิงก์ระหว่างรายการธนาคารและการโอนเงินผ่านธนาคาร MigrationBankTransfertsNothingToUpdate=การเชื่อมโยงทั้งหมดมีถึงวันที่ MigrationShipmentOrderMatching=อัปเดตได้รับตอบรับ MigrationDeliveryOrderMatching=การปรับปรุงการจัดส่งใบเสร็จรับเงิน @@ -187,29 +186,34 @@ MigrationDeliveryDetail=การปรับปรุงการจัดส MigrationStockDetail=อัพเดตค่าหุ้นของผลิตภัณฑ์ MigrationMenusDetail=ปรับปรุงตารางเมนูแบบไดนามิก MigrationDeliveryAddress=ที่อยู่จัดส่งการปรับปรุงในการจัดส่ง -MigrationProjectTaskActors=Data migration for table llx_projet_task_actors +MigrationProjectTaskActors=การย้ายข้อมูลสำหรับตาราง llx_projet_task_actors MigrationProjectUserResp=เขตการโยกย้ายข้อมูล fk_user_resp ของ llx_projet เพื่อ llx_element_contact MigrationProjectTaskTime=เวลาการปรับปรุงการใช้จ่ายในไม่กี่วินาที MigrationActioncommElement=ปรับปรุงข้อมูลเกี่ยวกับการกระทำ -MigrationPaymentMode=Data migration for payment type +MigrationPaymentMode=การย้ายข้อมูลสำหรับประเภทการชำระเงิน MigrationCategorieAssociation=การย้ายถิ่นของประเภท -MigrationEvents=Migration of events to add event owner into assignment table -MigrationEventsContact=Migration of events to add event contact into assignment table -MigrationRemiseEntity=Update entity field value of llx_societe_remise -MigrationRemiseExceptEntity=Update entity field value of llx_societe_remise_except -MigrationUserRightsEntity=Update entity field value of llx_user_rights -MigrationUserGroupRightsEntity=Update entity field value of llx_usergroup_rights -MigrationUserPhotoPath=Migration of photo paths for users -MigrationFieldsSocialNetworks=Migration of users fields social networks (%s) -MigrationReloadModule=Reload module %s -MigrationResetBlockedLog=Reset module BlockedLog for v7 algorithm -MigrationImportOrExportProfiles=Migration of import or export profiles (%s) -ShowNotAvailableOptions=Show unavailable options -HideNotAvailableOptions=Hide unavailable options -ErrorFoundDuringMigration=Error(s) were reported during the migration process so next step is not available. To ignore errors, you can click here, but the application or some features may not work correctly until the errors are resolved. -YouTryInstallDisabledByDirLock=The application tried to self-upgrade, but the install/upgrade pages have been disabled for security (directory renamed with .lock suffix).
-YouTryInstallDisabledByFileLock=The application tried to self-upgrade, but the install/upgrade pages have been disabled for security (by the existence of a lock file install.lock in the dolibarr documents directory).
-ClickHereToGoToApp=Click here to go to your application -ClickOnLinkOrRemoveManualy=If an upgrade is in progress, please wait. If not, click on the following link. If you always see this same page, you must remove/rename the file install.lock in the documents directory. -Loaded=Loaded -FunctionTest=Function test +MigrationEvents=การย้ายข้อมูลกิจกรรมเพื่อเพิ่มเจ้าของกิจกรรมลงในตารางการมอบหมาย +MigrationEventsContact=การย้ายข้อมูลเหตุการณ์เพื่อเพิ่มผู้ติดต่อเหตุการณ์ลงในตารางการมอบหมาย +MigrationRemiseEntity=อัปเดตค่าฟิลด์เอนทิตีของ llx_societe_remise +MigrationRemiseExceptEntity=อัปเดตค่าฟิลด์เอนทิตีของ llx_societe_remise_ยกเว้น +MigrationUserRightsEntity=อัปเดตค่าฟิลด์เอนทิตีของ llx_user_rights +MigrationUserGroupRightsEntity=อัปเดตค่าฟิลด์เอนทิตีของ llx_usergroup_rights +MigrationUserPhotoPath=การย้ายเส้นทางภาพถ่ายสำหรับผู้ใช้ +MigrationFieldsSocialNetworks=การย้ายข้อมูลผู้ใช้ในเครือข่ายโซเชียล (%s) +MigrationReloadModule=โหลดโมดูล %s +MigrationResetBlockedLog=รีเซ็ตโมดูล BlockedLog สำหรับอัลกอริทึม v7 +MigrationImportOrExportProfiles=การย้ายข้อมูลโปรไฟล์นำเข้าหรือส่งออก (%s) +ShowNotAvailableOptions=แสดงตัวเลือกที่ไม่พร้อมใช้งาน +HideNotAvailableOptions=ซ่อนตัวเลือกที่ไม่พร้อมใช้งาน +ErrorFoundDuringMigration=มีการรายงานข้อผิดพลาดในระหว่างกระบวนการย้ายข้อมูล ดังนั้นจึงไม่สามารถดำเนินการขั้นตอนต่อไปได้ หากต้องการเพิกเฉยต่อข้อผิดพลาด คุณสามารถ คลิกที่นี่ แต่แอปพลิเคชันหรือคุณลักษณะบางอย่างอาจทำงานไม่ถูกต้องจนกว่าข้อผิดพลาดจะได้รับการแก้ไข . +YouTryInstallDisabledByDirLock=แอปพลิเคชันพยายามอัปเกรดด้วยตนเอง แต่หน้าการติดตั้ง/อัปเกรดถูกปิดใช้งานเพื่อความปลอดภัย (ไดเร็กทอรีเปลี่ยนชื่อเป็น .lock ต่อท้าย)
+YouTryInstallDisabledByFileLock=แอปพลิเคชันพยายามอัปเกรดด้วยตนเอง แต่หน้าการติดตั้ง/อัปเกรดถูกปิดใช้งานเพื่อความปลอดภัย (เนื่องจากมีไฟล์ล็อค install.lock ในไดเรกทอรีเอกสาร dolibarr)
+YouTryUpgradeDisabledByMissingFileUnLock=แอปพลิเคชันพยายามอัปเกรดด้วยตนเอง แต่กระบวนการอัปเกรดไม่ได้รับอนุญาตในขณะนี้
+ClickHereToGoToApp=คลิกที่นี่เพื่อไปที่ใบสมัครของคุณ +ClickOnLinkOrRemoveManualy=หากกำลังดำเนินการอัปเกรด โปรดรอสักครู่ ถ้าไม่เช่นนั้น ให้คลิกที่ลิงค์ต่อไปนี้ หากคุณเห็นเพจเดียวกันนี้เสมอ คุณต้องลบ/เปลี่ยนชื่อไฟล์ install.lock ในไดเร็กทอรีเอกสาร +ClickOnLinkOrCreateUnlockFileManualy=หากอยู่ระหว่างการอัพเกรด โปรดรอสักครู่... ถ้าไม่เช่นนั้น คุณต้องลบไฟล์ install.lock หรือสร้างไฟล์ upgrade.unlock ลงในไดเร็กทอรีเอกสาร Dolibarr +Loaded=โหลดแล้ว +FunctionTest=การทดสอบฟังก์ชัน +NodoUpgradeAfterDB=ไม่มีการดำเนินการที่ร้องขอโดยโมดูลภายนอกหลังจากอัปเกรดฐานข้อมูล +NodoUpgradeAfterFiles=ไม่มีการดำเนินการใดที่ร้องขอโดยโมดูลภายนอกหลังจากอัปเกรดไฟล์หรือไดเร็กทอรี +MigrationContractLineRank=โยกย้าย Contract Line เพื่อใช้อันดับ (และเปิดใช้งานการจัดลำดับใหม่) diff --git a/htdocs/langs/th_TH/main.lang b/htdocs/langs/th_TH/main.lang index 9cfe8ab44c5..116ea8606c8 100644 --- a/htdocs/langs/th_TH/main.lang +++ b/htdocs/langs/th_TH/main.lang @@ -172,7 +172,7 @@ Close=ใกล้ CloseAs=ตั้งสถานะเป็น CloseBox=ลบวิดเจ็ตออกจากแดชบอร์ดของคุณ Confirm=ยืนยัน -ConfirmSendCardByMail=คุณต้องการส่งเนื้อหาของการ์ดนี้ทางไปรษณีย์ไปที่ %s< /ช่วง>? +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to %s? Delete=ลบ Remove=เอาออก Resiliate=ยุติ @@ -420,6 +420,8 @@ TotalTTCShort=รวม (รวมภาษี). TotalHT=รวม (ไม่รวมภาษี) TotalHTforthispage=ยอดรวม (ไม่รวมภาษี) สำหรับหน้านี้ Totalforthispage=รวมสำหรับหน้านี้ +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=รวม (รวมภาษี). TotalTTCToYourCredit=รวม (inc. ภาษี) เพื่อเครดิตของคุณ TotalVAT=รวมภาษี @@ -647,6 +649,7 @@ ReportName=ชื่อรายงาน ReportPeriod=ระยะเวลาที่รายงาน ReportDescription=ลักษณะ Report=รายงาน +Reports=รายงาน Keyword=คำสำคัญ Origin=ต้นทาง Legend=ตำนาน diff --git a/htdocs/langs/th_TH/partnership.lang b/htdocs/langs/th_TH/partnership.lang index c14572a540f..861651d1cb4 100644 --- a/htdocs/langs/th_TH/partnership.lang +++ b/htdocs/langs/th_TH/partnership.lang @@ -91,8 +91,7 @@ CountLastUrlCheckError=จำนวนข้อผิดพลาดสำหร LastCheckBacklink=วันที่ตรวจสอบ URL ล่าสุด NewPartnershipRequest=คำขอหุ้นส่วนใหม่ -NewPartnershipRequestDesc=แบบฟอร์มนี้ช่วยให้คุณสามารถขอเป็นส่วนหนึ่งของโปรแกรมพันธมิตรของเราได้ หากคุณต้องการความช่วยเหลือในการกรอกแบบฟอร์มนี้ โปรดติดต่อทางอีเมล %s
. +NewPartnershipRequestDesc=This form allows you to request to be part of one of our partnership program. If you need help to fill this form, please contact by email %s. ThisUrlMustContainsAtLeastOneLinkToWebsite=หน้านี้ต้องมีอย่างน้อยหนึ่งลิงก์ไปยังหนึ่งในโดเมนต่อไปนี้: %s IPOfApplicant=IP ของผู้สมัคร - diff --git a/htdocs/langs/th_TH/sendings.lang b/htdocs/langs/th_TH/sendings.lang index 42c9d1e0b57..a88a0dd977f 100644 --- a/htdocs/langs/th_TH/sendings.lang +++ b/htdocs/langs/th_TH/sendings.lang @@ -39,7 +39,7 @@ StatusSendingValidatedShort=ผ่านการตรวจสอบ StatusSendingProcessedShort=การประมวลผล SendingSheet=แผ่นจัดส่ง ConfirmDeleteSending=คุณแน่ใจหรือไม่ว่าต้องการลบการจัดส่งนี้ -ConfirmValidateSending=Are you sure you want to validate this shipment with the reference %s? +ConfirmValidateSending=คุณแน่ใจหรือไม่ว่าต้องการตรวจสอบการจัดส่งนี้ด้วยข้อมูลอ้างอิง %s? ConfirmCancelSending=คุณแน่ใจหรือไม่ว่าต้องการยกเลิกการจัดส่งนี้ DocumentModelMerou=Merou A5 รูปแบบ WarningNoQtyLeftToSend=คำเตือนผลิตภัณฑ์ไม่มีการรอคอยที่จะส่ง @@ -81,6 +81,6 @@ CreationOptions=ตัวเลือกที่มีให้ระหว่ ShipmentDistribution=การกระจายสินค้า ErrorTooManyCombinationBatchcode=ไม่มีการจัดส่งสำหรับบรรทัด %s เนื่องจากพบคลังสินค้า ผลิตภัณฑ์ รหัสชุดงานมากเกินไป (%s) -ErrorNoCombinationBatchcode=ไม่สามารถบันทึกบรรทัด %s เป็นการรวมของ warehouse-product-lot/serial (%s, %s, %s) ในสต็อก +ErrorNoCombinationBatchcode=Could not save the line %s as the combination of warehouse-product-lot/serial (%s, %s, %s) was not found in stock. ErrorTooMuchShipped=ปริมาณที่จัดส่งไม่ควรมากกว่าปริมาณที่สั่งซื้อสำหรับบรรทัด %s diff --git a/htdocs/langs/th_TH/stocks.lang b/htdocs/langs/th_TH/stocks.lang index 533ac211f1a..ee64342bd7c 100644 --- a/htdocs/langs/th_TH/stocks.lang +++ b/htdocs/langs/th_TH/stocks.lang @@ -282,7 +282,7 @@ ModuleStockTransferName=การโอนหุ้นขั้นสูง ModuleStockTransferDesc=การจัดการขั้นสูงของการโอนสต็อคพร้อมการสร้างใบโอน StockTransferNew=โอนสต๊อกใหม่ StockTransferList=รายการโอนสต๊อก -ConfirmValidateStockTransfer=คุณแน่ใจหรือไม่ว่าต้องการตรวจสอบการโอนหุ้นนี้ด้วยข้อมูลอ้างอิง %s
? +ConfirmValidateStockTransfer=Are you sure you want to validate this stocks transfer with the reference %s ? ConfirmDestock=การลดลงของสต็อกพร้อมการโอน %s ConfirmDestockCancel=ยกเลิกการลดสต๊อกด้วยการโอน %s DestockAllProduct=การลดลงของหุ้น diff --git a/htdocs/langs/th_TH/users.lang b/htdocs/langs/th_TH/users.lang index 13ee6b87d4f..120a32105d0 100644 --- a/htdocs/langs/th_TH/users.lang +++ b/htdocs/langs/th_TH/users.lang @@ -6,14 +6,14 @@ Permission=การอนุญาต Permissions=สิทธิ์ EditPassword=แก้ไขรหัสผ่าน SendNewPassword=สร้างรหัสผ่านใหม่และส่งรหัสผ่าน -SendNewPasswordLink=Send link to reset password +SendNewPasswordLink=ส่งลิงค์เพื่อรีเซ็ตรหัสผ่าน ReinitPassword=สร้างรหัสผ่านใหม่ PasswordChangedTo=เปลี่ยนรหัสผ่านเป็น: %s SubjectNewPassword=รหัสผ่านใหม่ของคุณ %s GroupRights=สิทธิ์ของกลุ่ม UserRights=สิทธิ์ของผู้ใช้ -Credentials=Credentials -UserGUISetup=User Display Setup +Credentials=ข้อมูลรับรอง +UserGUISetup=การตั้งค่าการแสดงผลของผู้ใช้ DisableUser=ปิดการใช้งาน DisableAUser=ปิดการใช้งานของผู้ใช้ DeleteUser=ลบ @@ -21,22 +21,21 @@ DeleteAUser=ลบผู้ใช้ EnableAUser=เปิดการใช้งานของผู้ใช้ DeleteGroup=ลบ DeleteAGroup=ลบกลุ่ม -ConfirmDisableUser=Are you sure you want to disable user %s? -ConfirmDeleteUser=Are you sure you want to delete user %s? -ConfirmDeleteGroup=Are you sure you want to delete group %s? -ConfirmEnableUser=Are you sure you want to enable user %s? -ConfirmReinitPassword=Are you sure you want to generate a new password for user %s? +ConfirmDisableUser=คุณแน่ใจหรือไม่ว่าต้องการปิดการใช้งานผู้ใช้ %s +ConfirmDeleteUser=คุณแน่ใจหรือไม่ว่าต้องการลบผู้ใช้ %s +ConfirmDeleteGroup=คุณแน่ใจหรือไม่ว่าต้องการลบกลุ่ม %s +ConfirmEnableUser=คุณแน่ใจหรือไม่ว่าต้องการเปิดใช้งานผู้ใช้ %s +ConfirmReinitPassword=คุณแน่ใจหรือไม่ว่าต้องการสร้างรหัสผ่านใหม่สำหรับผู้ใช้ %s? ConfirmSendNewPassword=Are you sure you want to generate and send new password for user %s? NewUser=ผู้ใช้ใหม่ CreateUser=สร้างผู้ใช้ LoginNotDefined=เข้าสู่ระบบไม่ได้กำหนดไว้ NameNotDefined=ชื่อไม่ได้กำหนดไว้ ListOfUsers=รายการของผู้ใช้ -SuperAdministrator=ผู้ดูแลระบบซูเปอร์ -SuperAdministratorDesc=ผู้ดูแลระบบทั่วโลก -AdministratorDesc=ผู้บริหาร -DefaultRights=Default Permissions -DefaultRightsDesc=Define here the default permissions that are automatically granted to a new user (to modify permissions for existing users, go to the user card). +SuperAdministrator=ผู้ดูแลระบบหลายบริษัท +SuperAdministratorDesc=ผู้ดูแลระบบหลายบริษัท (สามารถเปลี่ยนการตั้งค่าและผู้ใช้ได้) +DefaultRights=สิทธิ์เริ่มต้น +DefaultRightsDesc=กำหนดสิทธิ์ default ที่ได้รับโดยอัตโนมัติให้กับ ที่นี่ ใหม่ ผู้ใช้ (หากต้องการแก้ไขสิทธิ์สำหรับผู้ใช้ที่มีอยู่ ให้ไปที่การ์ดผู้ใช้) DolibarrUsers=ผู้ใช้ Dolibarr LastName=นามสกุล FirstName=ชื่อแรก @@ -45,14 +44,14 @@ NewGroup=กลุ่มใหม่ CreateGroup=สร้างกลุ่ม RemoveFromGroup=ลบออกจากกลุ่ม PasswordChangedAndSentTo=เปลี่ยนรหัสผ่านแล้วส่งมาที่ %s. -PasswordChangeRequest=Request to change password for %s +PasswordChangeRequest=ขอเปลี่ยนรหัสผ่านสำหรับ %s PasswordChangeRequestSent=ขอเปลี่ยนรหัสผ่านสำหรับ %s ส่งไปยัง %s. -IfLoginExistPasswordRequestSent=If this login is a valid account (with a valid email), an email to reset password has been sent. -IfEmailExistPasswordRequestSent=If this email is a valid account, an email to reset password has been sent (remember to check your SPAM folder if you do not receive anything) -ConfirmPasswordReset=Confirm password reset +IfLoginExistPasswordRequestSent=หากการเข้าสู่ระบบนี้เป็นบัญชีที่ถูกต้อง (ด้วยอีเมลที่ถูกต้อง) ระบบจะส่งอีเมลเพื่อรีเซ็ตรหัสผ่าน +IfEmailExistPasswordRequestSent=หากอีเมลนี้เป็นบัญชีที่ถูกต้อง ระบบได้ส่งอีเมลเพื่อรีเซ็ตรหัสผ่านแล้ว (อย่าลืมตรวจสอบโฟลเดอร์สแปมของคุณหากคุณไม่ได้รับสิ่งใด) +ConfirmPasswordReset=ยืนยันการรีเซ็ตรหัสผ่าน MenuUsersAndGroups=ผู้ใช้และกลุ่ม -LastGroupsCreated=Latest %s groups created -LastUsersCreated=Latest %s users created +LastGroupsCreated=สร้างกลุ่ม %s ล่าสุดแล้ว +LastUsersCreated=สร้างผู้ใช้ %s ล่าสุด ShowGroup=แสดงกลุ่ม ShowUser=แสดงผู้ใช้ NonAffectedUsers=ผู้ใช้ที่ได้รับมอบหมายไม่ @@ -62,27 +61,27 @@ ListOfUsersInGroup=รายการของผู้ใช้ในกลุ ListOfGroupsForUser=รายชื่อของกลุ่มสำหรับผู้ใช้นี้ LinkToCompanyContact=เชื่อมโยงไปยังบุคคลที่สาม / ติดต่อ LinkedToDolibarrMember=เชื่อมโยงไปยังสมาชิก -LinkedToDolibarrUser=Link to user -LinkedToDolibarrThirdParty=Link to third party +LinkedToDolibarrUser=เชื่อมโยงไปยังผู้ใช้ +LinkedToDolibarrThirdParty=เชื่อมโยงไปยังบุคคลที่สาม CreateDolibarrLogin=สร้างผู้ใช้ CreateDolibarrThirdParty=สร้างของบุคคลที่สาม -LoginAccountDisableInDolibarr=Account disabled in Dolibarr -PASSWORDInDolibarr=Password modified in Dolibarr +LoginAccountDisableInDolibarr=บัญชีถูกปิดใช้งานใน Dolibarr +PASSWORDInDolibarr=รหัสผ่านถูกแก้ไขใน Dolibarr UsePersonalValue=ใช้ค่าส่วนบุคคล -ExportDataset_user_1=Users and their properties +ExportDataset_user_1=ผู้ใช้และคุณสมบัติของพวกเขา DomainUser=ผู้ใช้โดเมน %s Reactivate=เปิดใช้งานอีกครั้ง -CreateInternalUserDesc=This form allows you to create an internal user in your company/organization. To create an external user (customer, vendor etc. ..), use the button 'Create Dolibarr User' from that third-party's contact card. -InternalExternalDesc=An internal user is a user that is part of your company/organization, or is a partner user outside of your organization that may need to see more data than data related to his company (the permission system will define what he can or can't see or do).
An external user is a customer, vendor or other that must view ONLY data related to himself (Creating an external user for a third-party can be done from the contact record of the third-party).

In both cases, you must grant permissions on the features that the user need. +CreateInternalUserDesc=แบบฟอร์มนี้ช่วยให้คุณสร้างผู้ใช้ภายในบริษัท/องค์กรของคุณได้ หากต้องการสร้างผู้ใช้ภายนอก (ลูกค้า ผู้ขาย ฯลฯ ..) ให้ใช้ปุ่ม 'สร้างผู้ใช้ Dolibarr' จากบัตรข้อมูลที่ติดต่อของบุคคลที่สามนั้น +InternalExternalDesc=ผู้ใช้ ภายใน คือผู้ใช้ที่เป็นส่วนหนึ่งของบริษัท/องค์กรของคุณ หรือเป็นผู้ใช้พันธมิตรภายนอกองค์กรของคุณ ที่อาจจำเป็นต้องดูข้อมูลมากกว่าข้อมูลที่เกี่ยวข้องกับบริษัทของเขา (ระบบการอนุญาตจะกำหนดสิ่งที่เขาสามารถหรือไม่เห็นหรือทำ)
และ ภายนอก ผู้ใช้คือลูกค้า ผู้ขาย หรืออื่นๆ ที่ต้องดูเฉพาะข้อมูลที่เกี่ยวข้องกับตัวเขาเอง (การสร้างผู้ใช้ภายนอกสำหรับบุคคลที่สามสามารถทำได้ ดำเนินการจากบันทึกการติดต่อของบุคคลที่สาม)

ในทั้งสองกรณี คุณต้องให้สิทธิ์ในฟีเจอร์ที่ ความต้องการของผู้ใช้ PermissionInheritedFromAGroup=ได้รับอนุญาตเพราะรับมาจากหนึ่งในกลุ่มของผู้ใช้ Inherited=ที่สืบทอด -UserWillBe=Created user will be +UserWillBe=ผู้ใช้ที่สร้างขึ้นจะเป็น UserWillBeInternalUser=ผู้ใช้ที่สร้างจะเป็นผู้ใช้งานภายใน (เพราะไม่เชื่อมโยงกับบุคคลที่สามโดยเฉพาะ) UserWillBeExternalUser=ผู้ใช้ที่สร้างจะเป็นผู้ใช้ภายนอก (เพราะเชื่อมโยงกับบุคคลที่สามโดยเฉพาะ) IdPhoneCaller=id โทรโทรศัพท์ NewUserCreated=ผู้ใช้ %s สร้างแล้ว NewUserPassword=เปลี่ยนรหัสผ่านสำหรับ %s -NewPasswordValidated=Your new password have been validated and must be used now to login. +NewPasswordValidated=รหัสผ่านใหม่ของคุณได้รับการตรวจสอบแล้ว และต้องใช้ตอนนี้เพื่อเข้าสู่ระบบ EventUserModified=ผู้ใช้ %s แก้ไขแล้ว UserDisabled=ผู้ใช้ %s ปิดการใช้งาน UserEnabled=ผู้ใช้ %s เปิดใช้งาน @@ -90,45 +89,48 @@ UserDeleted=ผู้ใช้ %s ลบออกแล้ว NewGroupCreated=กลุ่ม %s สร้างแล้ว GroupModified=กลุ่ม %s แก้ไขแล้ว GroupDeleted=กลุ่ม %s ลบออกแล้ว -ConfirmCreateContact=Are you sure you want to create a Dolibarr account for this contact? -ConfirmCreateLogin=Are you sure you want to create a Dolibarr account for this member? -ConfirmCreateThirdParty=Are you sure you want to create a third party for this member? +ConfirmCreateContact=คุณแน่ใจหรือไม่ว่าต้องการสร้างบัญชี Dolibarr สำหรับผู้ติดต่อรายนี้ +ConfirmCreateLogin=คุณแน่ใจหรือไม่ว่าต้องการสร้างบัญชี Dolibarr สำหรับสมาชิกรายนี้? +ConfirmCreateThirdParty=คุณแน่ใจหรือไม่ว่าต้องการสร้างบุคคลที่สามสำหรับสมาชิกรายนี้ LoginToCreate=เข้าสู่ระบบที่จะสร้าง NameToCreate=ชื่อของบุคคลที่สามในการสร้าง YourRole=บทบาทของคุณ YourQuotaOfUsersIsReached=โควต้าของคุณของผู้ใช้ที่ใช้งานถึง! -NbOfUsers=Number of users -NbOfPermissions=Number of permissions -DontDowngradeSuperAdmin=Only another admin can downgrade an admin +NbOfUsers=จำนวนผู้ใช้ +NbOfPermissions=จำนวนสิทธิ์ +DontDowngradeSuperAdmin=มีเพียงผู้ดูแลระบบรายอื่นเท่านั้นที่สามารถดาวน์เกรดผู้ดูแลระบบได้ HierarchicalResponsible=ผู้ดูแล HierarchicView=มุมมองลำดับชั้น UseTypeFieldToChange=ใช้ประเภทเพื่อเปลี่ยน OpenIDURL=URL OpenID LoginUsingOpenID=ใช้ OpenID เข้าสู่ระบบ -WeeklyHours=Hours worked (per week) -ExpectedWorkedHours=Expected hours worked per week +WeeklyHours=ชั่วโมงทำงาน (ต่อสัปดาห์) +ExpectedWorkedHours=ชั่วโมงทำงานที่คาดหวังต่อสัปดาห์ ColorUser=สีของผู้ใช้ -DisabledInMonoUserMode=Disabled in maintenance mode -UserAccountancyCode=User accounting code -UserLogoff=User logout -UserLogged=User logged -DateOfEmployment=Employment date -DateEmployment=Employment -DateEmploymentStart=Employment Start Date -DateEmploymentEnd=Employment End Date -RangeOfLoginValidity=Access validity date range -CantDisableYourself=You can't disable your own user record -ForceUserExpenseValidator=Force expense report validator -ForceUserHolidayValidator=Force leave request validator -ValidatorIsSupervisorByDefault=By default, the validator is the supervisor of the user. Keep empty to keep this behaviour. -UserPersonalEmail=Personal email -UserPersonalMobile=Personal mobile phone -WarningNotLangOfInterface=Warning, this is the main language the user speak, not the language of the interface he choosed to see. To change the interface language visible by this user, go on tab %s -DateLastLogin=Date last login -DatePreviousLogin=Date previous login -IPLastLogin=IP last login -IPPreviousLogin=IP previous login -ShowAllPerms=Show all permission rows -HideAllPerms=Hide all permission rows -UserPublicPageDesc=You can enable a virtual card for this user. An url with the user profile and a barcode will be available to allow anybody with a smartphone to scan it and add your contact to its address book. -EnablePublicVirtualCard=Enable the user's virtual business card +DisabledInMonoUserMode=ปิดใช้งานในโหมดบำรุงรักษา +UserAccountancyCode=รหัสบัญชีผู้ใช้ +UserLogoff=ผู้ใช้ออกจากระบบ: %s +UserLogged=ผู้ใช้ที่เข้าสู่ระบบ: %s +UserLoginFailed=การเข้าสู่ระบบของผู้ใช้ล้มเหลว: %s +DateOfEmployment=วันที่เข้าทำงาน +DateEmployment=การจ้างงาน +DateEmploymentStart=วันที่เริ่มการจ้างงาน +DateEmploymentEnd=วันที่สิ้นสุดการจ้างงาน +RangeOfLoginValidity=เข้าถึงช่วงวันที่มีผลบังคับใช้ +CantDisableYourself=คุณไม่สามารถปิดการใช้งานบันทึกผู้ใช้ของคุณเองได้ +ForceUserExpenseValidator=เครื่องมือตรวจสอบรายงานค่าใช้จ่ายบังคับ +ForceUserHolidayValidator=เครื่องมือตรวจสอบคำขอบังคับให้ลา +ValidatorIsSupervisorByDefault=ตามค่าเริ่มต้น เครื่องมือตรวจสอบคือผู้ดูแลของผู้ใช้ เว้นว่างไว้เพื่อรักษาลักษณะการทำงานนี้ +UserPersonalEmail=อีเมลส่วนตัว +UserPersonalMobile=โทรศัพท์มือถือส่วนตัว +WarningNotLangOfInterface=คำเตือน นี่คือภาษาหลักที่ผู้ใช้พูด ไม่ใช่ภาษาของอินเทอร์เฟซที่เขาเลือกดู หากต้องการเปลี่ยนภาษาอินเทอร์เฟซที่ผู้ใช้รายนี้มองเห็นได้ ให้ไปที่แท็บ %s +DateLastLogin=วันที่เข้าสู่ระบบครั้งล่าสุด +DatePreviousLogin=วันที่เข้าสู่ระบบครั้งก่อน +IPLastLogin=IP เข้าสู่ระบบครั้งล่าสุด +IPPreviousLogin=IP การเข้าสู่ระบบก่อนหน้า +ShowAllPerms=แสดงแถวการอนุญาตทั้งหมด +HideAllPerms=ซ่อนแถวการอนุญาตทั้งหมด +UserPublicPageDesc=คุณสามารถเปิดใช้งานการ์ดเสมือนสำหรับผู้ใช้รายนี้ได้ URL พร้อมโปรไฟล์ผู้ใช้และบาร์โค้ดจะพร้อมใช้งานเพื่อให้ทุกคนที่มีสมาร์ทโฟนสามารถสแกนและเพิ่มผู้ติดต่อของคุณลงในสมุดที่อยู่ได้ +EnablePublicVirtualCard=เปิดใช้งานนามบัตรเสมือนของผู้ใช้ +UserEnabledDisabled=สถานะผู้ใช้มีการเปลี่ยนแปลง: %s +AlternativeEmailForOAuth2=อีเมลสำรองสำหรับการเข้าสู่ระบบ OAuth2 diff --git a/htdocs/langs/tr_TR/main.lang b/htdocs/langs/tr_TR/main.lang index f41a1639a34..62bd535a2ce 100644 --- a/htdocs/langs/tr_TR/main.lang +++ b/htdocs/langs/tr_TR/main.lang @@ -420,6 +420,8 @@ TotalTTCShort=Toplam (KDV dahil) TotalHT=Toplam (KDV hariç) TotalHTforthispage=Bu sayfa için Toplam (KDV hariç) Totalforthispage=Bu sayfa toplamı +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=Toplam (KDV dahil) TotalTTCToYourCredit=Alacağınız için toplam (KDV dahil) TotalVAT=Toplam KDV @@ -647,6 +649,7 @@ ReportName=Rapor Adı ReportPeriod=Rapor dönemi ReportDescription=Açıklama Report=Rapor +Reports=Raporlar Keyword=Anahtar kelime Origin=Köken Legend=Gösterge diff --git a/htdocs/langs/uk_UA/admin.lang b/htdocs/langs/uk_UA/admin.lang index 6d7fd01b081..8d79ffba7ec 100644 --- a/htdocs/langs/uk_UA/admin.lang +++ b/htdocs/langs/uk_UA/admin.lang @@ -223,7 +223,7 @@ FreeModule=Безкоштовно CompatibleUpTo=Сумісний з версією %s NotCompatible=Цей модуль не сумісний з вашою версією Dolibarr %s (Мін %s - Макс %s). CompatibleAfterUpdate=Цей модуль вимагає оновлення версії Dolibarr до %s (Мін %s - Макс %s). -SeeInMarkerPlace=Дивіться у магазині +SeeInMarkerPlace=Дивіться у магазині SeeSetupOfModule=Див. налаштування модуля %s SeeSetupPage=Перегляньте сторінку налаштування за адресою %s SeeReportPage=Перегляньте сторінку звіту за адресою %s @@ -455,7 +455,7 @@ ExtrafieldPassword=Пароль ExtrafieldRadio=Перемикач (одиничний вибір) ExtrafieldCheckBox=Прапорці ExtrafieldCheckBoxFromList=Прапорці з таблиці -ExtrafieldLink=Посилання на об'єкт +ExtrafieldLink=Посилання на об'єкт ComputedFormula=Обчислюване поле ComputedFormulaDesc=Ви можете ввести тут формулу, використовуючи інші властивості об’єкта або будь-який код PHP, щоб отримати динамічне обчислене значення. Ви можете використовувати будь-які PHP-сумісні формули, включаючи "?" оператор умови та наступний глобальний об’єкт: $db, $conf, $langs, $mysoc, $user, $objectoffield.
УВАГА: якщо вам потрібні властивості об’єкта не завантажено, просто виберіть собі об’єкт у свою формулу, як у другому прикладі.
Використання обчислюваного поля означає, що ви не можете самостійно ввести будь-яке значення з інтерфейсу. Крім того, якщо є синтаксична помилка, формула може нічого не повернути.

Приклад формули:
$objectoffield->id < 10 ? round($objectoffield->id / 2, 2): ($objectoffield->id + 2 * $user->id) * ( int) substr($mysoc->zip, 1, 2)

Приклад перезавантаження об'єкта
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetchNoCompute($objectoffield->id) > 0 ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj- >capital / 5: '-1')

Інший приклад формули для примусового завантаження об’єкта та його батьківського об’єкта:
(($reloadedobj = нове завдання($db)) && ($reloadedobj->fetchNoCompute($objectoffield->id) > 0) && ($secondloadedobj = новий проект( $db)) && ($secondloadedobj->fetchNoCompute($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: "Батьківський проект не знайдено" Computedpersistent=Зберегти обчислюване поле @@ -1197,6 +1197,7 @@ Skin=Тема шкіри DefaultSkin=Тема шкіри за замовчуванням MaxSizeList=Максимальна довжина для списку DefaultMaxSizeList=Максимальна довжина за умовчанням для списків +DisplayGrandTotalInList=Display grand total (for all pages) in lists footer DefaultMaxSizeShortList=Максимальна довжина за умовчанням для коротких списків (тобто в картці клієнта) MessageOfDay=Повідомлення дня MessageLogin=Повідомлення сторінки входу @@ -1860,7 +1861,7 @@ PastDelayVCalExport=Не експортуйте подію старше ніж SecurityKey = Ключ захисту ##### ClickToDial ##### ClickToDialSetup=Натисніть «Налаштування модуля для набору». -ClickToDialUrlDesc=URL-адреса викликається після натискання піктограми телефону. В URL-адресі ви можете використовувати теги
__PHONETO__, які будуть замінено номером телефону особи, якій потрібно зателефонувати
__PHONEFROM__, який буде замінено на номер телефону особи, яка телефонує (ваш)
__LOGIN__
, який буде замінено логіном Clicktodial (визначеним у картці користувача)
__PASS__ , який буде замінено паролем Clicktodial (визначеним у картці користувача). +ClickToDialUrlDesc=URL called when a click on phone picto is done. In URL, you can use tags
__PHONETO__ that will be replaced with the phone number of person to call
__PHONEFROM__ that will be replaced with phone number of calling person (yours)
__LOGIN__ that will be replaced with clicktodial login (defined on user card)
__PASS__ that will be replaced with clicktodial password (defined on user card). ClickToDialDesc=Цей модуль змінює номери телефонів під час використання настільного комп’ютера на посилання, які можна натискати. Клацніть на номер. Це можна використовувати, щоб почати телефонний дзвінок під час використання програмного телефону на робочому столі або, наприклад, при використанні системи CTI на основі протоколу SIP. Примітка. Під час використання смартфона номери телефонів завжди можна натиснути. ClickToDialUseTelLink=Використовуйте лише посилання "tel:" на номерах телефонів ClickToDialUseTelLinkDesc=Використовуйте цей метод, якщо ваші користувачі мають програмний телефон або програмний інтерфейс, встановлений на тому ж комп’ютері, що й браузер, і викликають, коли ви натискаєте посилання, яке починається з «tel:» у вашому браузері. Якщо вам потрібне посилання, яке починається з «sip:» або повне серверне рішення (не потребує встановлення локального програмного забезпечення), ви повинні встановити значення «Ні» та заповнити наступне поле. @@ -2433,3 +2434,12 @@ UrlPublicInterfaceHelpAdmin=It is possible to define an alias to the web server ExportUseForce=Use the parameter -f ExportUseForceHelp=Force to continue the export even when an error is found (Backup may not be reliable) CustomPrompt=Custom prompts +AiDescription=AI (Artificial Intelligence) features +AiDescriptionLong=Provides AI (Artificial Intelligence) features in different part of the application. Need external AI API. +AI_KEY_API_CHATGPT= Key for ChatGPT IA api +AiSetup=AI module setup +AiCustomPrompt=AI customs prompt +AI_CONFIGURATIONS_PROMPT=Custom prompt +ImageGeneration=Image generation +AIPromptForFeatures=AI custom prompts for features +EnterAnIP=Enter an IP address diff --git a/htdocs/langs/uk_UA/errors.lang b/htdocs/langs/uk_UA/errors.lang index 1d9fc16767f..3116c3321db 100644 --- a/htdocs/langs/uk_UA/errors.lang +++ b/htdocs/langs/uk_UA/errors.lang @@ -95,7 +95,7 @@ ErrorModuleRequireJavascript=Щоб ця функція працювала, не ErrorPasswordsMustMatch=Обидва введені паролі повинні відповідати один одному ErrorContactEMail=Сталася технічна помилка. Будь ласка, зв’яжіться з адміністратором на електронну адресу %s і вкажіть помилку код %s у своєму повідомленні або додайте копію екрана ця сторінка. ErrorWrongValueForField=Поле %s : ' %s A09NICFRIMS0FZ0 A0CB20FRIFTIONM0303030303030303030303030303030308520308508508352030858350835083508358358358358358358358358358583583583583583583583583583583583583583583583. -ErrorHtmlInjectionForField=Поле %s: значення '%s' contains a malicious data not allowed ErrorFieldValueNotIn=Field %s : ' %s ' is not a value found in field %s of %s ErrorFieldRefNotIn=Field %s : ' %s ' is not a %s existing ref ErrorMultipleRecordFoundFromRef=Кілька записів знайдено під час пошуку з посилання %s. Немає способу дізнатися, який ідентифікатор використовувати. diff --git a/htdocs/langs/uk_UA/exports.lang b/htdocs/langs/uk_UA/exports.lang index 43e73abfdca..971342ea5a9 100644 --- a/htdocs/langs/uk_UA/exports.lang +++ b/htdocs/langs/uk_UA/exports.lang @@ -95,7 +95,7 @@ NbOfLinesImported=Кількість успішно імпортованих р DataComeFromNoWhere=Значення для вставки приходить з нізвідки у вихідному файлі. DataComeFromFileFieldNb=Значення для вставки походить зі стовпця %s у вихідному файлі. DataComeFromIdFoundFromRef=Значення, отримане з вихідного файлу, використовуватиметься для пошуку ідентифікатора батьківського об’єкта для використання (тому об’єкт %s, який містить посилання з вихідного файлу, має існувати в базі даних). -DataComeFromIdFoundFromCodeId=Значення коду, отриманого з вихідного файлу, використовуватиметься для пошуку ідентифікатора батьківського об’єкта для використання (тому код із вихідного файлу має існувати в словнику %s). Зверніть увагу: якщо ви знаєте ідентифікатор, ви також можете використовувати його у вихідному файлі замість коду. Імпорт має працювати в обох випадках. +DataComeFromIdFoundFromCodeId=The value of code that comes from source file will be used to find the id of the parent object to use (so the code from source file must exist in the dictionary %s). Note that if you know the id, you can also use it in the source file instead of the code. Import should work in both cases. DataIsInsertedInto=Дані, що надходять з вихідного файлу, будуть вставлені в наступне поле: DataIDSourceIsInsertedInto=Ідентифікатор батьківського об’єкта, який було знайдено за допомогою даних у вихідному файлі, буде вставлено в наступне поле: DataCodeIDSourceIsInsertedInto=Ідентифікатор батьківського рядка, який було знайдено з коду, буде вставлено в наступне поле: diff --git a/htdocs/langs/uk_UA/main.lang b/htdocs/langs/uk_UA/main.lang index 8f1b0f27bcc..708d84da70e 100644 --- a/htdocs/langs/uk_UA/main.lang +++ b/htdocs/langs/uk_UA/main.lang @@ -420,6 +420,8 @@ TotalTTCShort=Усього (включаючи податок) TotalHT=Усього (без податку) TotalHTforthispage=Усього (без податку) для цієї сторінки Totalforthispage=Усього для цієї сторінки +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=Усього (включаючи податок) TotalTTCToYourCredit=Усього (включаючи податки) на ваш кредит TotalVAT=Загальний податок @@ -647,6 +649,7 @@ ReportName=Назва звіту ReportPeriod=Звітний період ReportDescription=Опис Report=Звіт +Reports=Reports Keyword=Ключове слово Origin=Походження Legend=Легенда diff --git a/htdocs/langs/uk_UA/modulebuilder.lang b/htdocs/langs/uk_UA/modulebuilder.lang index 89029f23d99..8c44b24cfc5 100644 --- a/htdocs/langs/uk_UA/modulebuilder.lang +++ b/htdocs/langs/uk_UA/modulebuilder.lang @@ -180,7 +180,7 @@ FailedToAddCodeIntoDescriptor=Не вдалося додати код до де DictionariesCreated=Словник %s успішно створено DictionaryDeleted=Словник %s успішно видалено PropertyModuleUpdated=Властивість %s успішно оновлено -InfoForApiFile=* Коли ви вперше створюєте файл, усі методи будуть створені для кожного об'єкта.
* Коли ви натискаєте remove, ви просто видаляєте всі методи для класу вибраний об'єкт. +InfoForApiFile=* When you generate file for the first time then all methods will be created for each object.
* When you click in remove you just remove all methods for the selected object. SetupFile=Сторінка налаштування модуля EmailingSelectors=Селектори електронних листів EmailingSelectorDesc=Тут ви можете створювати та редагувати файли класів, щоб надати нові селектори цілей електронної пошти для модуля масової електронної пошти diff --git a/htdocs/langs/ur_PK/accountancy.lang b/htdocs/langs/ur_PK/accountancy.lang index 999f91d97c0..ca034dfd592 100644 --- a/htdocs/langs/ur_PK/accountancy.lang +++ b/htdocs/langs/ur_PK/accountancy.lang @@ -287,7 +287,7 @@ TotalVente=ٹیکس سے پہلے کل کاروبار TotalMarge=فروخت کا کل مارجن DescVentilCustomer=اکاؤنٹ کے چارٹ سے پروڈکٹ اکاؤنٹ سے منسلک کسٹمر انوائس لائنوں کی فہرست یہاں دیکھیں -DescVentilMore=زیادہ تر معاملات میں، اگر آپ پہلے سے طے شدہ مصنوعات یا خدمات استعمال کرتے ہیں اور آپ پروڈکٹ/سروس کارڈ پر اکاؤنٹ (اکاؤنٹ کے چارٹ سے) سیٹ کرتے ہیں، تو ایپلیکیشن آپ کے انوائس لائنوں اور آپ کے چارٹ کے اکاؤنٹنگ اکاؤنٹ کے درمیان تمام پابندیاں عائد کر سکے گی۔ اکاؤنٹس کے، بٹن کے ساتھ صرف ایک کلک میں "%s" > اگر اکاؤنٹ پروڈکٹ/سروس کارڈز پر سیٹ نہیں کیا گیا تھا یا اگر آپ کے پاس اب بھی کچھ لائنیں ہیں جو اکاؤنٹ سے منسلک نہیں ہیں، تو آپ کو مینو "%s"۔ +DescVentilMore=In most cases, if you use predefined products or services and you set the account (from chart of account) on the product/service card, the application will be able to make all the binding between your invoice lines and the accounting account of your chart of accounts, just in one click with the button "%s". If account was not set on product/service cards or if you still have some lines not bound to an account, you will have to make a manual binding from the menu "%s". DescVentilDoneCustomer=اکاؤنٹ کے چارٹ سے انوائس کے صارفین اور ان کے پروڈکٹ اکاؤنٹ کی لائنوں کی فہرست یہاں دیکھیں DescVentilTodoCustomer=اکاؤنٹ کے چارٹ سے پروڈکٹ اکاؤنٹ کے ساتھ پہلے سے پابند انوائس لائنوں کو باندھیں۔ ChangeAccount=درج ذیل اکاؤنٹ کے ساتھ منتخب لائنوں کے لیے پروڈکٹ/سروس اکاؤنٹ (اکاؤنٹ کے چارٹ سے) تبدیل کریں: @@ -335,7 +335,6 @@ CategoryDeleted=اکاؤنٹنگ اکاؤنٹ کے زمرے کو ہٹا دیا AccountingJournals=اکاؤنٹنگ جرائد AccountingJournal=اکاؤنٹنگ جرنل NewAccountingJournal=نیا اکاؤنٹنگ جریدہ -ShowAccountingJournal=اکاؤنٹنگ جرنل دکھائیں۔ NatureOfJournal=جرنل کی نوعیت AccountingJournalType1=متفرق آپریشنز AccountingJournalType2=سیلز @@ -353,7 +352,7 @@ ACCOUNTING_DISABLE_BINDING_ON_SALES=سیلز پر اکاؤنٹنسی میں با ACCOUNTING_DISABLE_BINDING_ON_PURCHASES=خریداری پر اکاؤنٹنسی میں بائنڈنگ اور ٹرانسفر کو غیر فعال کریں (وینڈر انوائس کو اکاؤنٹنگ میں مدنظر نہیں رکھا جائے گا) ACCOUNTING_DISABLE_BINDING_ON_EXPENSEREPORTS=اخراجات کی رپورٹوں پر اکاؤنٹنسی میں بائنڈنگ اور ٹرانسفر کو غیر فعال کریں (اکاؤنٹنگ میں اخراجات کی رپورٹوں کو مدنظر نہیں رکھا جائے گا) ACCOUNTING_ENABLE_LETTERING=اکاؤنٹنگ میں لیٹرنگ فنکشن کو فعال کریں۔ -ACCOUNTING_ENABLE_LETTERING_DESC=جب یہ اختیارات فعال ہوتے ہیں، تو آپ اکاؤنٹنگ کے ہر اندراج پر، ایک کوڈ کی وضاحت کر سکتے ہیں تاکہ آپ اکاؤنٹنگ کی مختلف حرکات کو ایک ساتھ گروپ کر سکیں۔ ماضی میں، جب مختلف جرائد کو آزادانہ طور پر منظم کیا جاتا تھا، تو یہ خصوصیت مختلف جرائد کی نقل و حرکت کی لائنوں کو ایک ساتھ گروپ کرنے کے لیے ضروری تھی۔ تاہم، Dolibarr اکاؤنٹنسی کے ساتھ، ایک ٹریکنگ کوڈ، جسے "%sکہا جاتا ہے span>" پہلے سے ہی خود بخود محفوظ ہو چکا ہے، اس لیے ایک خودکار خطوط پہلے سے ہی ہو چکا ہے، جس میں غلطی کا کوئی خطرہ نہیں ہے اس لیے یہ فیچر عام استعمال کے لیے بیکار ہو گیا ہے۔ دستی خطوط کی خصوصیت ان آخری صارفین کے لیے فراہم کی گئی ہے جو اکاؤنٹنسی میں ڈیٹا کی منتقلی کرنے والے کمپیوٹر انجن پر واقعی بھروسہ نہیں کرتے ہیں۔ +ACCOUNTING_ENABLE_LETTERING_DESC=When this options is enabled, you can define, on each accounting entry, a code so you can group different accounting movements together. In the past, when different journals was managed independently, this feature was necessary to group movement lines of different journals together. However, with Dolibarr accountancy, such a tracking code, called "%s" is already saved automatically, so an automatic lettering is already done, with no risk of error so this feature has become useless for a common usage. Manual lettering feature is provided for end users that really don't trust the computer engine making the transfer of data in accountancy. EnablingThisFeatureIsNotNecessary=اکاؤنٹنگ کے سخت انتظام کے لیے اس خصوصیت کو فعال کرنا مزید ضروری نہیں ہے۔ ACCOUNTING_ENABLE_AUTOLETTERING=اکاؤنٹنگ میں منتقل کرتے وقت خودکار حروف کو فعال کریں۔ ACCOUNTING_ENABLE_AUTOLETTERING_DESC=حروف کے لیے کوڈ خود بخود تیار ہوتا ہے اور بڑھایا جاتا ہے اور آخری صارف کے ذریعے منتخب نہیں کیا جاتا ہے۔ diff --git a/htdocs/langs/ur_PK/admin.lang b/htdocs/langs/ur_PK/admin.lang index 6839ef785d7..76b4f209038 100644 --- a/htdocs/langs/ur_PK/admin.lang +++ b/htdocs/langs/ur_PK/admin.lang @@ -346,7 +346,7 @@ StepNb=مرحلہ %s FindPackageFromWebSite=ایک ایسا پیکیج تلاش کریں جو آپ کو مطلوبہ خصوصیات فراہم کرتا ہو (مثال کے طور پر سرکاری ویب سائٹ %s پر)۔ DownloadPackageFromWebSite=پیکیج ڈاؤن لوڈ کریں (مثال کے طور پر سرکاری ویب سائٹ %s سے)۔ UnpackPackageInDolibarrRoot=پیک شدہ فائلوں کو اپنی ڈولیبر سرور ڈائرکٹری میں کھولیں/ان زپ کریں: %s -UnpackPackageInModulesRoot=کسی بیرونی ماڈیول کو تعینات/انسٹال کرنے کے لیے، آپ کو بیرونی ماڈیولز کے لیے مختص سرور ڈائرکٹری میں آرکائیو فائل کو کھولنا/ان زپ کرنا ہوگا:
b0aee8365837fz0 >%s +UnpackPackageInModulesRoot=To deploy/install an external module, you must unpack/unzip the archive file into the server directory dedicated to external modules:
%s SetupIsReadyForUse=ماڈیول کی تعیناتی ختم ہو گئی ہے۔ تاہم آپ کو صفحہ سیٹ اپ ماڈیولز: %s پر جا کر اپنی درخواست میں ماڈیول کو فعال اور سیٹ اپ کرنا ہوگا۔ NotExistsDirect=متبادل روٹ ڈائرکٹری موجودہ ڈائرکٹری سے متعین نہیں ہے۔
InfDirAlt=ورژن 3 کے بعد سے، متبادل روٹ ڈائریکٹری کی وضاحت ممکن ہے۔ یہ آپ کو ایک وقف شدہ ڈائرکٹری، پلگ ان اور حسب ضرورت ٹیمپلیٹس میں ذخیرہ کرنے کی اجازت دیتا ہے۔
بس Dolibarr کے روٹ پر ایک ڈائرکٹری بنائیں (جیسے: کسٹم)۔
@@ -368,7 +368,7 @@ GenericMaskCodes3EAN=ماسک میں باقی تمام حروف برقرار ر GenericMaskCodes4a=تیسرے فریق TheCompany کی 99ویں %s پر مثال، تاریخ 2023-01-31 کے ساتھ:
GenericMaskCodes4b=31-01-2023 کو بنائے گئے فریق ثالث کی مثال:
> GenericMaskCodes4c=31-01-2023 کو تیار کردہ پروڈکٹ کی مثال:
-GenericMaskCodes5=ABC{yy}{mm}-{000000} دے گا b0aee83365830 span>ABC2301-000099
b0aee8365837fz0{0@0@0@span }-ZZZ/{dd}/XXX دے گا 0199-ZZZ/31/XXX
IN{yy}{mm}-{0000}-{t} class='notranslate'>
دے گا IN2301-0099-A اگر کمپنی کی قسم ہے 'ذمہ دار انسکرپٹو' اس قسم کے کوڈ کے ساتھ جو 'A_RI' ہے +GenericMaskCodes5=ABC{yy}{mm}-{000000} will give ABC2301-000099
{0000+100@1}-ZZZ/{dd}/XXX will give 0199-ZZZ/31/XXX
IN{yy}{mm}-{0000}-{t} will give IN2301-0099-A if the type of company is 'Responsable Inscripto' with code for type that is 'A_RI' GenericNumRefModelDesc=ایک متعین ماسک کے مطابق حسب ضرورت نمبر لوٹاتا ہے۔ ServerAvailableOnIPOrPort=سرور %s پورٹ %s a09a4b739f17f80 پر دستیاب ہے۔ ServerNotAvailableOnIPOrPort=پورٹ %s پر سرور دستیاب نہیں ہے %s a09a4b739f178 @@ -464,7 +464,7 @@ ExtrafieldParamHelpPassword=اس فیلڈ کو خالی چھوڑنے کا مطل ExtrafieldParamHelpselect=اقدار کی فہرست شکل کلید کے ساتھ لائنوں کا ہونا لازمی ہے، قدر (جہاں چابی نہیں ہو سکتا '0') مثال کے

:
1، VALUE1
2، VALUE2
code3، value3
...

ہے کرنے کے لئے فہرست ایک اور اعزازی وصف فہرست پر منحصر:
1، VALUE1 | options_ parent_list_code : parent_key
2، VALUE2 | options_ parent_list_code : parent_key

واسطے ایک اور فہرست کے لحاظ فہرست ہے کرنا:
1، VALUE1 | parent_list_code :parent_key
2,value2| parent_list_code :parent_key ExtrafieldParamHelpcheckbox=اقدار کی فہرست فارمیٹ کلید کے ساتھ لائنوں میں ہونی چاہیے، ویلیو (جہاں کلید '0' نہیں ہو سکتی)

مثال کے طور پر:
1,value1

a0342fda19bz0 2,342fdavalue... ExtrafieldParamHelpradio=اقدار کی فہرست فارمیٹ کلید کے ساتھ لائنوں میں ہونی چاہیے، ویلیو (جہاں کلید '0' نہیں ہو سکتی)

مثال کے طور پر:
1,value1

a0342fda19bz0 2,342fdavalue... -ExtrafieldParamHelpsellist=اقدار کی فہرست ایک ٹیبل سے آتی ہے
نحو: table_name:label_field:id_field::filtersql
مثال: ccfda19bz0 ::filtersql

- id_field لازمی طور پر ایک بنیادی int کلید ہے
- filtersql ایک SQL شرط ہے۔ صرف فعال قدر ظاہر کرنے کے لیے یہ ایک سادہ ٹیسٹ (مثلاً فعال=1) ہو سکتا ہے
آپ $ID$ کو فلٹر میں بھی استعمال کر سکتے ہیں جو موجودہ آبجیکٹ کی موجودہ id ہے
فلٹر میں SELECT استعمال کرنے کے لیے اینٹی انجیکشن تحفظ کو نظرانداز کرنے کے لیے مطلوبہ لفظ $SEL$ استعمال کریں۔
اگر آپ ایکسٹرا فیلڈز پر فلٹر کرنا چاہتے ہیں نحو کا استعمال کریں extra.fieldcode=... (جہاں فیلڈ کوڈ extrafield کا کوڈ ہے)

فہرست ایک اور تکمیلی انتساب کی فہرست پر منحصر ہے:
c_typent:libelle:id:options_parent_list_code'notranslate'>'notranslate'
|parent_column:filter

دوسری فہرست پر منحصر فہرست رکھنے کے لیے:
c_typent:libelle:id:parent_list_codeb0ae64758bac33parent_col> +ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filtersql
Example: c_typent:libelle:id::filtersql

- id_field is necessarily a primary int key
- filtersql is a SQL condition. It can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter which is the current id of current object
To use a SELECT into the filter use the keyword $SEL$ to bypass anti-injection protection.
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=اقدار کی فہرست ایک ٹیبل سے آتی ہے فلٹر ڈائن میں $ID$ بھی استعمال کر سکتے ہیں موجودہ آبجیکٹ
کی موجودہ آئی ڈی ہے extrafield کا کوڈ)

ایک اور اعزازی وصف فہرست پر منحصر فہرست حاصل کرنے کے لیے:
c_typent: libelle: ID: options_ parent_list_code | parent_column: فلٹر

ایک اور فہرست کے لحاظ فہرست حاصل کرنے کے لیے:
c_typent: libelle:id: parent_list_code |parent_column:filter ExtrafieldParamHelplink=پیرامیٹرز کا ہونا ضروری ہے ObjectName:Classpath
نحو: ObjectName:Classpath ExtrafieldParamHelpSeparator=ایک سادہ سیپریٹر کے لیے خالی رکھیں اسٹیٹس کو ہر صارف کے سیشن کے لیے رکھا جاتا ہے) @@ -1197,6 +1197,7 @@ Skin=جلد کی تھیم DefaultSkin=پہلے سے طے شدہ جلد کی تھیم MaxSizeList=فہرست کے لیے زیادہ سے زیادہ لمبائی DefaultMaxSizeList=فہرستوں کے لیے پہلے سے طے شدہ زیادہ سے زیادہ لمبائی +DisplayGrandTotalInList=Display grand total (for all pages) in lists footer DefaultMaxSizeShortList=مختصر فہرستوں کے لیے پہلے سے طے شدہ زیادہ سے زیادہ لمبائی (یعنی کسٹمر کارڈ میں) MessageOfDay=دن کا پیغام MessageLogin=لاگ ان پیج پیغام @@ -1860,7 +1861,7 @@ PastDelayVCalExport=سے پرانا واقعہ برآمد نہ کریں۔ SecurityKey = سیکیورٹی کلید ##### ClickToDial ##### ClickToDialSetup=ماڈیول سیٹ اپ ڈائل کرنے کے لیے کلک کریں۔ -ClickToDialUrlDesc=یو آر ایل اس وقت کال کیا جاتا ہے جب فون پکٹو پر کلک کیا جاتا ہے۔ URL میں، آپ ٹیگز استعمال کر سکتے ہیں
__PHONETO__یہ ہوگا کال کرنے والے شخص کے فون نمبر سے بدل دیا گیا
__PHONEFROM__ کال کرنے والے شخص (آپ کا) کے فون نمبر سے بدل دیا جائے گا
__LOGIN__b09a4b739f17f span> جسے کلک ٹوڈیل لاگ ان سے تبدیل کیا جائے گا (یوزر کارڈ پر بیان کیا گیا ہے)
__PASS__ جسے کلک ٹوڈیل پاس ورڈ (یوزر کارڈ پر بیان کیا گیا) سے بدل دیا جائے گا۔ +ClickToDialUrlDesc=URL called when a click on phone picto is done. In URL, you can use tags
__PHONETO__ that will be replaced with the phone number of person to call
__PHONEFROM__ that will be replaced with phone number of calling person (yours)
__LOGIN__ that will be replaced with clicktodial login (defined on user card)
__PASS__ that will be replaced with clicktodial password (defined on user card). ClickToDialDesc=یہ ماڈیول ڈیسک ٹاپ کمپیوٹر کا استعمال کرتے وقت فون نمبروں کو کلک کے قابل لنکس میں تبدیل کرتا ہے۔ ایک کلک نمبر پر کال کرے گا۔ یہ آپ کے ڈیسک ٹاپ پر سافٹ فون استعمال کرتے وقت یا مثال کے طور پر SIP پروٹوکول پر مبنی CTI سسٹم استعمال کرتے وقت فون کال شروع کرنے کے لیے استعمال کیا جا سکتا ہے۔ نوٹ: اسمارٹ فون استعمال کرتے وقت، فون نمبرز ہمیشہ کلک کے قابل ہوتے ہیں۔ ClickToDialUseTelLink=فون نمبرز پر صرف ایک لنک "tel:" استعمال کریں۔ ClickToDialUseTelLinkDesc=یہ طریقہ استعمال کریں اگر آپ کے صارفین کے پاس سافٹ فون یا سافٹ ویئر انٹرفیس ہے، جو براؤزر والے کمپیوٹر پر انسٹال ہے، اور جب آپ اپنے براؤزر میں "tel:" سے شروع ہونے والے لنک پر کلک کرتے ہیں تو اسے کال کیا جاتا ہے۔ اگر آپ کو کسی ایسے لنک کی ضرورت ہے جو "sip:" سے شروع ہو یا ایک مکمل سرور حل (مقامی سافٹ ویئر انسٹالیشن کی ضرورت نہیں)، آپ کو اسے "نہیں" پر سیٹ کرنا ہوگا اور اگلا فیلڈ بھرنا ہوگا۔ @@ -2176,7 +2177,7 @@ CreateCandidature=ملازمت کی درخواست بنائیں FormatZip=زپ MainMenuCode=مینو انٹری کوڈ (مین مینو) ECMAutoTree=خودکار ECM درخت دکھائیں۔ -OperationParamDesc=کچھ ڈیٹا نکالنے کے لیے استعمال کرنے کے لیے قواعد کی وضاحت کریں یا آپریشن کے لیے استعمال کرنے کے لیے قدریں سیٹ کریں۔

سے کمپنی کا نام نکالنے کی مثال ای میل کا موضوع ایک عارضی متغیر میں:
tmp_var=EXTRACT:SUBJECT:کمپنی کی طرف سے پیغام ([^\n]*)

تخلیق کے لیے کسی آبجیکٹ کی خصوصیات سیٹ کرنے کی مثالیں:
objproperty1=SET:ایک ہارڈ کوڈ شدہ قدر
objproperty2=SET:__tmp_var__
objproperty (MPvalue3=SETIFEa value: صرف اس صورت میں سیٹ کیا جاتا ہے جب پراپرٹی کی پہلے سے وضاحت نہ کی گئی ہو)
objproperty4=EXTRACT:HEADER:X-Myheaderkey:\\s*([^\\s]*)
options_myextrafield1=EXTRACT:SUBJECT:([^\n]*)
object.objproperty5=EXTRACT:BODY is:My s([^\\s]*)

متعدد خصوصیات کو نکالنے یا سیٹ کرنے کے لیے ایک نئی لائن استعمال کریں۔ +OperationParamDesc=Define the rules to use to extract some data or set values to use for operation.

Example to extract a company name from email subject into a temporary variable:
tmp_var=EXTRACT:SUBJECT:Message from company ([^\n]*)

Examples to set the properties of an object to create:
objproperty1=SET:a hard coded value
objproperty2=SET:__tmp_var__
objproperty3=SETIFEMPTY:a value (value is set only if property is not already defined)
objproperty4=EXTRACT:HEADER:X-Myheaderkey:\\s*([^\\s]*)
options_myextrafield1=EXTRACT:SUBJECT:([^\n]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a new line to extract or set several properties. OpeningHours=ابتدائی گھنٹے OpeningHoursDesc=اپنی کمپنی کے باقاعدہ کھلنے کے اوقات یہاں درج کریں۔ ResourceSetup=وسائل کے ماڈیول کی ترتیب @@ -2291,7 +2292,7 @@ APIsAreNotEnabled=APIs ماڈیولز فعال نہیں ہیں۔ YouShouldSetThisToOff=آپ کو اسے 0 یا آف پر سیٹ کرنا چاہیے۔ InstallAndUpgradeLockedBy=انسٹال اور اپ گریڈ فائل %s کے ذریعہ مقفل ہیں۔ InstallLockedBy=انسٹال/دوبارہ انسٹال فائل %s کے ذریعہ مقفل ہے۔ -InstallOfAddonIsNotBlocked=ایڈونز کی تنصیبات مقفل نہیں ہیں۔ ایک فائل installmodules.lock ڈائرکٹری میں بنائیں ='notranslate'>%s
بیرونی ایڈونز/ماڈیولز کی تنصیبات کو بلاک کرنے کے لیے۔ +InstallOfAddonIsNotBlocked=Installations of addons are not locked. Create a file installmodules.lock into directory %s to block installations of external addons/modules. OldImplementation=پرانا عمل درآمد PDF_SHOW_LINK_TO_ONLINE_PAYMENT=اگر آن لائن ادائیگی کے کچھ ماڈیولز فعال ہیں (پے پال، پٹی، ...)، آن لائن ادائیگی کرنے کے لیے پی ڈی ایف پر ایک لنک شامل کریں۔ DashboardDisableGlobal=کھلی اشیاء کے تمام انگوٹھوں کو عالمی سطح پر غیر فعال کریں۔ @@ -2405,8 +2406,8 @@ NotAvailableByDefaultEnabledOnModuleActivation=ڈیفالٹ کے ذریعہ نہ CSSPage=سی ایس ایس اسٹائل Defaultfortype=طے شدہ DefaultForTypeDesc=ٹیمپلیٹ کی قسم کے لیے نیا ای میل بناتے وقت بطور ڈیفالٹ استعمال کیا جاتا ہے۔ -OptionXShouldBeEnabledInModuleY=آپشن "%s" ماڈیول %s -OptionXIsCorrectlyEnabledInModuleY=آپشن "%s" ماڈیول میں فعال ہے
%s +OptionXShouldBeEnabledInModuleY=Option "%s" should be enabled into module %s +OptionXIsCorrectlyEnabledInModuleY=Option "%s" is enabled into module %s AllowOnLineSign=آن لائن دستخط کی اجازت دیں۔ AtBottomOfPage=صفحہ کے نیچے FailedAuth=ناکام تصدیق @@ -2433,3 +2434,12 @@ UrlPublicInterfaceHelpAdmin=It is possible to define an alias to the web server ExportUseForce=Use the parameter -f ExportUseForceHelp=Force to continue the export even when an error is found (Backup may not be reliable) CustomPrompt=Custom prompts +AiDescription=AI (Artificial Intelligence) features +AiDescriptionLong=Provides AI (Artificial Intelligence) features in different part of the application. Need external AI API. +AI_KEY_API_CHATGPT= Key for ChatGPT IA api +AiSetup=AI module setup +AiCustomPrompt=AI customs prompt +AI_CONFIGURATIONS_PROMPT=Custom prompt +ImageGeneration=Image generation +AIPromptForFeatures=AI custom prompts for features +EnterAnIP=Enter an IP address diff --git a/htdocs/langs/ur_PK/bills.lang b/htdocs/langs/ur_PK/bills.lang index 38604133b54..04fce8cc959 100644 --- a/htdocs/langs/ur_PK/bills.lang +++ b/htdocs/langs/ur_PK/bills.lang @@ -13,12 +13,12 @@ BillsStatistics=صارفین کی رسیدوں کے اعدادوشمار BillsStatisticsSuppliers=وینڈرز انوائس کے اعدادوشمار DisabledBecauseDispatchedInBookkeeping=غیر فعال کیونکہ انوائس بک کیپنگ میں بھیجی گئی تھی۔ DisabledBecauseNotLastInvoice=انوائس کو مٹانے کے قابل نہ ہونے کی وجہ سے غیر فعال ہے۔ اس کے بعد کچھ رسیدیں ریکارڈ کی گئیں اور اس سے کاؤنٹر میں سوراخ ہو جائیں گے۔ -DisabledBecauseNotLastSituationInvoice=Disabled because invoice is not erasable. This invoice is not the last one in situation invoice cycle. +DisabledBecauseNotLastSituationInvoice=انوائس کو مٹانے کے قابل نہ ہونے کی وجہ سے غیر فعال ہے۔ یہ انوائس صورتحال انوائس سائیکل میں آخری نہیں ہے۔ DisabledBecauseNotErasable=غیر فعال کیونکہ مٹایا نہیں جا سکتا InvoiceStandard=معیاری رسید InvoiceStandardAsk=معیاری رسید InvoiceStandardDesc=اس قسم کی رسید عام رسید ہے۔ -InvoiceStandardShort=Standard +InvoiceStandardShort=معیاری InvoiceDeposit=ڈاون پیمنٹ انوائس InvoiceDepositAsk=ڈاون پیمنٹ انوائس InvoiceDepositDesc=اس قسم کی رسید اس وقت کی جاتی ہے جب ڈاؤن پیمنٹ موصول ہو جاتی ہے۔ @@ -26,7 +26,7 @@ InvoiceProForma=پروفارما رسید InvoiceProFormaAsk=پروفارما رسید InvoiceProFormaDesc= پروفارما انوائس ایک حقیقی انوائس کی تصویر ہے لیکن اس کی کوئی اکاؤنٹنسی ویلیو نہیں ہے۔ InvoiceReplacement=متبادل رسید -InvoiceReplacementShort=Replacement +InvoiceReplacementShort=متبادل InvoiceReplacementAsk=انوائس کے بدلے انوائس InvoiceReplacementDesc= تبدیلی کی رسید کو مکمل طور پر انوائس کو تبدیل کرنے کے لیے استعمال کیا جاتا ہے جس میں پہلے سے کوئی ادائیگی موصول نہیں ہوئی ہے۔

نوٹ: صرف ان انوائسز کو تبدیل کیا جا سکتا ہے جن پر کوئی ادائیگی نہ ہو۔ اگر آپ جو انوائس تبدیل کرتے ہیں وہ ابھی تک بند نہیں ہوا ہے، تو یہ خود بخود 'متروک' پر بند ہو جائے گا۔ InvoiceAvoir=کریڈٹ نوٹ @@ -84,15 +84,18 @@ PaymentsReports=ادائیگی کی رپورٹس PaymentsAlreadyDone=ادائیگیاں ہو چکی ہیں۔ PaymentsBackAlreadyDone=ریفنڈز پہلے ہی ہو چکے ہیں۔ PaymentRule=ادائیگی کا اصول -PaymentMode=Payment method -PaymentModes=Payment methods -DefaultPaymentMode=Default Payment method +PaymentMode=ادائیگی کا طریقہ +PaymentModes=ادائیگی کے طریقے +DefaultPaymentMode=پہلے سے طے شدہ ادائیگی کا طریقہ DefaultBankAccount=ڈیفالٹ بینک اکاؤنٹ -IdPaymentMode=Payment method (id) -CodePaymentMode=Payment method (code) -LabelPaymentMode=Payment method (label) -PaymentModeShort=Payment method +IdPaymentMode=ادائیگی کا طریقہ (id) +CodePaymentMode=ادائیگی کا طریقہ (کوڈ) +LabelPaymentMode=ادائیگی کا طریقہ (لیبل) +PaymentModeShort=ادائیگی کا طریقہ PaymentTerm=ادائیگی کی شرط +IdPaymentTerm=Payment term (id) +CodePaymentTerm=Payment term (code) +LabelPaymentTerm=Payment term (label) PaymentConditions=ادائیگی کی شرائط PaymentConditionsShort=ادائیگی کی شرائط PaymentAmount=ادائیگی کی رقم @@ -124,7 +127,7 @@ EnterPaymentDueToCustomer=گاہک کی وجہ سے ادائیگی کریں۔ DisabledBecauseRemainderToPayIsZero=غیرفعال ہے کیونکہ بقیہ غیر ادا شدہ صفر ہے۔ PriceBase=بنیادی قیمت BillStatus=رسید کی حیثیت -StatusOfAutoGeneratedInvoices=Status of automatically generated invoices +StatusOfAutoGeneratedInvoices=خودکار طور پر تیار کردہ رسیدوں کی حیثیت BillStatusDraft=مسودہ (توثیق کرنے کی ضرورت ہے) BillStatusPaid=ادا کیا BillStatusPaidBackOrConverted=کریڈٹ نوٹ کی واپسی یا کریڈٹ دستیاب کے بطور نشان زد @@ -159,15 +162,15 @@ ErrorInvoiceAvoirMustBeNegative=خرابی، درست انوائس میں منف ErrorInvoiceOfThisTypeMustBePositive=خرابی، اس قسم کی رسید میں ٹیکس مثبت (یا کالعدم) کے علاوہ رقم ہونی چاہیے ErrorCantCancelIfReplacementInvoiceNotValidated=خرابی، ایک انوائس کو منسوخ نہیں کیا جا سکتا جس کی جگہ کسی اور انوائس نے لے لی ہو جو ابھی بھی مسودہ کی حالت میں ہے ErrorThisPartOrAnotherIsAlreadyUsedSoDiscountSerieCantBeRemoved=یہ حصہ یا دوسرا حصہ پہلے ہی استعمال ہو چکا ہے لہذا ڈسکاؤنٹ سیریز کو ہٹایا نہیں جا سکتا۔ -ErrorInvoiceIsNotLastOfSameType=Error: The date of invoice %s is %s. It must be posterior or equal to last date for same type invoices (%s). Please change the invoice date. +ErrorInvoiceIsNotLastOfSameType=خرابی: انوائس کی تاریخ %s ہے %s۔ یہ ایک ہی قسم کے انوائس (%s) کے لیے پچھلی یا آخری تاریخ کے برابر ہونا چاہیے۔ براہ کرم رسید کی تاریخ تبدیل کریں۔ BillFrom=سے BillTo=کو -ShippingTo=Shipping to +ShippingTo=بھیجنا ActionsOnBill=انوائس پر کارروائیاں -ActionsOnBillRec=Actions on recurring invoice +ActionsOnBillRec=اعادی انوائس پر کارروائیاں RecurringInvoiceTemplate=ٹیمپلیٹ / بار بار چلنے والی رسید NoQualifiedRecurringInvoiceTemplateFound=کوئی اعادی ٹیمپلیٹ انوائس جنریشن کے لیے اہل نہیں ہے۔ -FoundXQualifiedRecurringInvoiceTemplate=%s recurring template invoice(s) qualified for generation. +FoundXQualifiedRecurringInvoiceTemplate=%s اعادی ٹیمپلیٹ انوائس جنریشن کے لیے اہل ہیں۔ NotARecurringInvoiceTemplate=اعادی ٹیمپلیٹ انوائس نہیں ہے۔ NewBill=نئی رسید LastBills=تازہ ترین %s رسیدیں۔ @@ -197,9 +200,9 @@ ConfirmClassifyPaidPartiallyReasonDiscount=بقیہ بلا معاوضہ (%s ConfirmClassifyPaidPartiallyReasonDiscountNoVat=بقیہ بلا معاوضہ (%s %s) دی گئی رعایت ہے کیونکہ ادائیگی مدت سے پہلے کی گئی تھی۔ میں اس رعایت پر VAT کھونا قبول کرتا ہوں۔ ConfirmClassifyPaidPartiallyReasonDiscountVat=بقیہ بلا معاوضہ (%s %s) دی گئی رعایت ہے کیونکہ ادائیگی مدت سے پہلے کی گئی تھی۔ میں بغیر کریڈٹ نوٹ کے اس رعایت پر VAT وصول کرتا ہوں۔ ConfirmClassifyPaidPartiallyReasonBadCustomer=برا گاہک -ConfirmClassifyPaidPartiallyReasonBadSupplier=Bad vendor -ConfirmClassifyPaidPartiallyReasonBankCharge=Deduction by bank (intermediary bank fee) -ConfirmClassifyPaidPartiallyReasonWithholdingTax=Withholding tax +ConfirmClassifyPaidPartiallyReasonBadSupplier=برا فروش +ConfirmClassifyPaidPartiallyReasonBankCharge=بینک کی طرف سے کٹوتی (درمیانی بینک کی فیس) +ConfirmClassifyPaidPartiallyReasonWithholdingTax=ودہولڈنگ ٹیکس ConfirmClassifyPaidPartiallyReasonProductReturned=مصنوعات جزوی طور پر واپس آ گئیں۔ ConfirmClassifyPaidPartiallyReasonOther=دوسری وجہ سے چھوڑ دی گئی رقم ConfirmClassifyPaidPartiallyReasonDiscountNoVatDesc=یہ انتخاب ممکن ہے اگر آپ کی رسید مناسب تبصروں کے ساتھ فراہم کی گئی ہو۔ (مثال کے طور پر "صرف اس قیمت کے مطابق ٹیکس جو اصل میں ادا کیا گیا ہے، کٹوتی کے حقوق دیتا ہے") @@ -208,16 +211,16 @@ ConfirmClassifyPaidPartiallyReasonAvoirDesc=اس انتخاب کا استعما ConfirmClassifyPaidPartiallyReasonBadCustomerDesc= برا گاہک وہ صارف ہے جو اپنا قرض ادا کرنے سے انکار کرتا ہے۔ ConfirmClassifyPaidPartiallyReasonProductReturnedDesc=یہ انتخاب اس وقت استعمال کیا جاتا ہے جب ادائیگی مکمل نہیں ہوتی ہے کیونکہ کچھ مصنوعات واپس کردی گئی تھیں۔ ConfirmClassifyPaidPartiallyReasonBankChargeDesc=غیر ادا شدہ رقم انٹرمیڈیری بینک فیس ہے -ConfirmClassifyPaidPartiallyReasonWithholdingTaxDesc=The unpaid amount will never be paid as it is a withholding tax +ConfirmClassifyPaidPartiallyReasonWithholdingTaxDesc=ادا نہ کی گئی رقم کبھی ادا نہیں کی جائے گی کیونکہ یہ ودہولڈنگ ٹیکس ہے۔ ConfirmClassifyPaidPartiallyReasonOtherDesc=اس انتخاب کو استعمال کریں اگر باقی سب موزوں نہیں ہیں، مثال کے طور پر درج ذیل صورت حال میں:
- ادائیگی مکمل نہیں ہوئی کیونکہ کچھ پروڈکٹس واپس بھیجے گئے تھے ایک کریڈٹ نوٹ بنا کر اکاؤنٹنسی سسٹم میں۔ -ConfirmClassifyPaidPartiallyReasonBadSupplierDesc=A bad supplier is a supplier we refuse to pay. +ConfirmClassifyPaidPartiallyReasonBadSupplierDesc=ایک خراب سپلائر ایک ایسا سپلائر ہے جسے ہم ادائیگی کرنے سے انکار کرتے ہیں۔ ConfirmClassifyAbandonReasonOther=دیگر ConfirmClassifyAbandonReasonOtherDesc=یہ انتخاب دیگر تمام معاملات میں استعمال کیا جائے گا۔ مثال کے طور پر کیونکہ آپ ایک بدلی انوائس بنانے کا ارادہ رکھتے ہیں۔ ConfirmCustomerPayment=کیا آپ %s %s کے لیے اس ادائیگی کے ان پٹ کی تصدیق کرتے ہیں؟ ConfirmSupplierPayment=کیا آپ %s %s کے لیے اس ادائیگی کے ان پٹ کی تصدیق کرتے ہیں؟ ConfirmValidatePayment=کیا آپ واقعی اس ادائیگی کی توثیق کرنا چاہتے ہیں؟ ادائیگی کی توثیق ہونے کے بعد کوئی تبدیلی نہیں کی جا سکتی۔ ValidateBill=رسید کی توثیق کریں۔ -UnvalidateBill=Invalidate invoice +UnvalidateBill=انوائس کو باطل کریں۔ NumberOfBills=رسیدوں کی تعداد NumberOfBillsByMonth=ماہانہ رسیدوں کی تعداد AmountOfBills=رسیدوں کی رقم @@ -252,7 +255,7 @@ RemainderToPayBack=ریفنڈ کے لیے باقی رقم RemainderToPayBackMulticurrency=ریفنڈ کے لیے باقی رقم، اصل کرنسی NegativeIfExcessReceived=اضافی موصول ہونے پر منفی NegativeIfExcessRefunded=اضافی رقم کی واپسی کی صورت میں منفی -NegativeIfExcessPaid=negative if excess paid +NegativeIfExcessPaid=اگر زیادہ ادائیگی کی جائے تو منفی Rest=زیر التواء AmountExpected=دعوی کردہ رقم ExcessReceived=ضرورت سے زیادہ موصول ہوئی۔ @@ -268,6 +271,8 @@ NoDraftBills=کوئی مسودہ رسید نہیں ہے۔ NoOtherDraftBills=کوئی دوسرا مسودہ رسید نہیں ہے۔ NoDraftInvoices=کوئی مسودہ رسید نہیں ہے۔ RefBill=انوائس کا حوالہ +RefSupplierBill=Supplier invoice ref +SupplierOrderCreateBill=Create invoice ToBill=بل کرنا RemainderToBill=بل کے لیے باقی ہے۔ SendBillByMail=ای میل کے ذریعے رسید بھیجیں۔ @@ -291,11 +296,11 @@ SetRevenuStamp=ریونیو سٹیمپ سیٹ کریں۔ Billed=بل کیا گیا۔ RecurringInvoices=بار بار چلنے والی رسیدیں RecurringInvoice=بار بار چلنے والی رسید -RecurringInvoiceSource=Source recurring invoice +RecurringInvoiceSource=ماخذ بار بار چلنے والی رسید RepeatableInvoice=ٹیمپلیٹ رسید RepeatableInvoices=ٹیمپلیٹ رسیدیں -RecurringInvoicesJob=Generation of recurring invoices (sales invoices) -RecurringSupplierInvoicesJob=Generation of recurring invoices (purchase invoices) +RecurringInvoicesJob=بار بار چلنے والی رسیدوں کی تخلیق (سیلز انوائس) +RecurringSupplierInvoicesJob=بار بار چلنے والی رسیدوں کی تخلیق (خریداری رسیدیں) Repeatable=سانچے Repeatables=ٹیمپلیٹس ChangeIntoRepeatableInvoice=ٹیمپلیٹ انوائس میں تبدیل کریں۔ @@ -334,8 +339,8 @@ DiscountFromExcessPaid=انوائس %s سے زیادہ ادائیگی AbsoluteDiscountUse=اس قسم کا کریڈٹ انوائس پر اس کی توثیق سے پہلے استعمال کیا جا سکتا ہے۔ CreditNoteDepositUse=اس قسم کے کریڈٹ استعمال کرنے کے لیے انوائس کی توثیق ہونی چاہیے۔ NewGlobalDiscount=نیا مطلق رعایت -NewSupplierGlobalDiscount=New absolute supplier discount -NewClientGlobalDiscount=New absolute client discount +NewSupplierGlobalDiscount=نیا مطلق سپلائر رعایت +NewClientGlobalDiscount=کلائنٹ کی نئی مطلق رعایت NewRelativeDiscount=نیا رشتہ دار رعایت DiscountType=ڈسکاؤنٹ کی قسم NoteReason=نوٹ/ وجہ @@ -352,6 +357,7 @@ HelpAbandonOther=اس رقم کو چھوڑ دیا گیا ہے کیونکہ یہ IdSocialContribution=سماجی/مالیاتی ٹیکس ادائیگی کی شناخت PaymentId=ادائیگی کی شناخت PaymentRef=ادائیگی کا حوالہ +SourceInvoiceId=Source invoice id InvoiceId=انوائس آئی ڈی InvoiceRef=انوائس کا حوالہ InvoiceDateCreation=انوائس بنانے کی تاریخ @@ -405,7 +411,7 @@ DateLastGenerationShort=تازہ ترین جنرل کی تاریخ۔ MaxPeriodNumber=زیادہ سے زیادہ انوائس نسل کی تعداد NbOfGenerationDone=انوائس جنریشن کی تعداد پہلے ہی ہو چکی ہے۔ NbOfGenerationOfRecordDone=ریکارڈ جنریشن کی تعداد پہلے ہی ہو چکی ہے۔ -NbOfGenerationDoneShort=Number of generations done +NbOfGenerationDoneShort=مکمل ہونے والی نسلوں کی تعداد MaxGenerationReached=نسلوں کی زیادہ سے زیادہ تعداد تک پہنچ گئی۔ InvoiceAutoValidate=انوائسز کی خود بخود توثیق کریں۔ GeneratedFromRecurringInvoice=ٹیمپلیٹ ریکرنگ انوائس %s سے تیار کردہ @@ -442,24 +448,24 @@ PaymentConditionShort14D=14 دن PaymentCondition14D=14 دن PaymentConditionShort14DENDMONTH=مہینے کے اختتام کے 14 دن PaymentCondition14DENDMONTH=مہینے کے اختتام کے بعد 14 دنوں کے اندر -PaymentConditionShortDEP30PCTDEL=__DEPOSIT_PERCENT__%% deposit -PaymentConditionDEP30PCTDEL=__DEPOSIT_PERCENT__%% deposit, remainder on delivery +PaymentConditionShortDEP30PCTDEL=__DEPOSIT_PERCENT__%% جمع +PaymentConditionDEP30PCTDEL=__DEPOSIT_PERCENT__%% ڈپازٹ، ڈیلیوری پر باقی FixAmount=مقررہ رقم - '%s' لیبل کے ساتھ 1 لائن VarAmount=متغیر رقم (%% tot.) VarAmountOneLine=متغیر رقم (%% tot.) - '%s' لیبل کے ساتھ 1 لائن VarAmountAllLines=متغیر رقم (%% tot.) - اصل سے تمام لائنیں -DepositPercent=Deposit %% -DepositGenerationPermittedByThePaymentTermsSelected=This is permitted by the payment terms selected -GenerateDeposit=Generate a %s%% deposit invoice -ValidateGeneratedDeposit=Validate the generated deposit -DepositGenerated=Deposit generated -ErrorCanOnlyAutomaticallyGenerateADepositFromProposalOrOrder=You can only automatically generate a deposit from a proposal or an order -ErrorPaymentConditionsNotEligibleToDepositCreation=The chose payment conditions are not eligible for automatic deposit generation +DepositPercent=ڈپازٹ %% +DepositGenerationPermittedByThePaymentTermsSelected=ادائیگی کی منتخب کردہ شرائط سے اس کی اجازت ہے۔ +GenerateDeposit=ایک %s%% جمع رسید بنائیں +ValidateGeneratedDeposit=پیدا شدہ ڈپازٹ کی توثیق کریں۔ +DepositGenerated=جمع کرایا +ErrorCanOnlyAutomaticallyGenerateADepositFromProposalOrOrder=آپ کسی تجویز یا آرڈر سے صرف خود بخود جمع کر سکتے ہیں۔ +ErrorPaymentConditionsNotEligibleToDepositCreation=ادائیگی کی منتخب کردہ شرائط خودکار ڈپازٹ جنریشن کے لیے اہل نہیں ہیں۔ # PaymentType PaymentTypeVIR=بینک ٹرانسفر PaymentTypeShortVIR=بینک ٹرانسفر PaymentTypePRE=براہ راست ڈیبٹ ادائیگی کا آرڈر -PaymentTypePREdetails=(on account %s...) +PaymentTypePREdetails=(اکاؤنٹ %s پر...) PaymentTypeShortPRE=ڈیبٹ ادائیگی کا آرڈر PaymentTypeLIQ=نقد PaymentTypeShortLIQ=نقد @@ -508,7 +514,7 @@ PaymentByChequeOrderedToShort=چیک کی ادائیگیاں (ٹیکس سمیت) SendTo=کو بھیجا PaymentByTransferOnThisBankAccount=درج ذیل بینک اکاؤنٹ میں ٹرانسفر کے ذریعے ادائیگی VATIsNotUsedForInvoice=* CGI کا غیر قابل اطلاق VAT آرٹ-293B -VATIsNotUsedForInvoiceAsso=* Non applicable VAT art-261-7 of CGI +VATIsNotUsedForInvoiceAsso=* CGI کا غیر قابل اطلاق VAT آرٹ-261-7 LawApplicationPart1=قانون 80.335 از 12/05/80 کے اطلاق سے LawApplicationPart2=سامان کی ملکیت رہتی ہے LawApplicationPart3=کی مکمل ادائیگی تک بیچنے والے @@ -518,14 +524,14 @@ UseLine=درخواست دیں UseDiscount=ڈسکاؤنٹ استعمال کریں۔ UseCredit=کریڈٹ استعمال کریں۔ UseCreditNoteInInvoicePayment=اس کریڈٹ کے ساتھ ادائیگی کے لیے رقم کم کریں۔ -MenuChequeDeposits=Deposits slips +MenuChequeDeposits=جمع پرچی MenuCheques=چیک کرتا ہے۔ -MenuChequesReceipts=Deposit slips -NewChequeDeposit=New deposit slip -ChequesReceipts=Cheque deposit slips -DocumentsDepositArea=Deposit slip area -ChequesArea=Deposit slips area -ChequeDeposits=Deposit slips +MenuChequesReceipts=ڈپازٹ سلپس +NewChequeDeposit=نئی ڈپازٹ سلپ +ChequesReceipts=ڈپازٹ سلپس چیک کریں۔ +DocumentsDepositArea=ڈپازٹ سلپ ایریا +ChequesArea=ڈپازٹ سلپس کا علاقہ +ChequeDeposits=ڈپازٹ سلپس Cheques=چیک کرتا ہے۔ DepositId=آئی ڈی ڈپازٹ NbCheque=چیکوں کی تعداد @@ -562,10 +568,10 @@ YouMustCreateStandardInvoiceFirstDesc=آپ کو سب سے پہلے ایک معی PDFCrabeDescription=انوائس پی ڈی ایف ٹیمپلیٹ کریب۔ ایک مکمل انوائس ٹیمپلیٹ (سپنج ٹیمپلیٹ کا پرانا نفاذ) PDFSpongeDescription=انوائس پی ڈی ایف ٹیمپلیٹ سپنج۔ ایک مکمل انوائس ٹیمپلیٹ PDFCrevetteDescription=انوائس پی ڈی ایف ٹیمپلیٹ کریویٹ۔ صورت حال کی رسیدوں کے لیے ایک مکمل انوائس ٹیمپلیٹ -TerreNumRefModelDesc1=Return number in the format %syymm-nnnn for standard invoices and %syymm-nnnn for credit notes where yy is year, mm is month and nnnn is a sequential auto-incrementing number with no break and no return to 0 -MarsNumRefModelDesc1=Return number in the format %syymm-nnnn for standard invoices, %syymm-nnnn for replacement invoices, %syymm-nnnn for down payment invoices and %syymm-nnnn for credit notes where yy is year, mm is month and nnnn is a sequential auto-incrementing number with no break and no return to 0 +TerreNumRefModelDesc1=فارمیٹ میں واپسی نمبر %sمعیاری رسیدوں کے لیے yymm-nnnn اور %sکریڈٹ نوٹس کے لیے yymm-nnnn جہاں yy سال ہے، mm مہینہ ہے اور nnnn ایک ترتیب وار خود بخود بڑھنے والا نمبر ہے جس میں کوئی وقفہ نہیں اور 0 پر واپسی نہیں +MarsNumRefModelDesc1=فارمیٹ میں واپسی نمبر %sمعیاری رسیدوں کے لیے yymm-nnnn، %sمتبادل انوائسز کے لیے yymm-nnnn، %sڈاؤن پیمنٹ انوائسز کے لیے yymm-nnnn اور %sکریڈٹ نوٹس کے لیے yymm-nnnn جہاں yy سال ہے، mm مہینہ ہے اور nnnn ایک ترتیب وار خودکار ہے۔ بغیر کسی وقفے کے اور 0 پر واپسی کے بغیر بڑھتی ہوئی تعداد TerreNumRefModelError=$syymm سے شروع ہونے والا بل پہلے سے موجود ہے اور ترتیب کے اس ماڈل کے ساتھ مطابقت نہیں رکھتا ہے۔ اس ماڈیول کو فعال کرنے کے لیے اسے ہٹا دیں یا اس کا نام تبدیل کریں۔ -CactusNumRefModelDesc1=Return number in the format %syymm-nnnn for standard invoices, %syymm-nnnn for credit notes and %syymm-nnnn for down payment invoices where yy is year, mm is month and nnnn is a sequential auto-incrementing number with no break and no return to 0 +CactusNumRefModelDesc1=فارمیٹ میں واپسی نمبر %sمعیاری رسیدوں کے لیے yymm-nnnn، %sکریڈٹ نوٹس کے لیے yymm-nnnn اور %sڈاؤن پیمنٹ انوائسز کے لیے yymm-nnnn جہاں yy سال ہے، mm مہینہ ہے اور nnnn ایک ترتیب وار خود بخود بڑھنے والا نمبر ہے جس میں کوئی وقفہ نہیں ہے اور نہ ہی 0 پر واپسی ہے۔ EarlyClosingReason=ابتدائی بندش کی وجہ EarlyClosingComment=ابتدائی اختتامی نوٹ ##### Types de contacts ##### @@ -631,19 +637,19 @@ SituationTotalRayToRest=ٹیکس کے بغیر ادا کرنے کے لیے با PDFSituationTitle=صورتحال n° %d SituationTotalProgress=کل پیش رفت %d %% SearchUnpaidInvoicesWithDueDate=مقررہ تاریخ = %s کے ساتھ بلا معاوضہ رسیدیں تلاش کریں۔ -SearchValidatedInvoicesWithDate=Search unpaid invoices with a validation date = %s +SearchValidatedInvoicesWithDate=توثیق کی تاریخ = %s کے ساتھ بلا معاوضہ رسیدیں تلاش کریں۔ NoPaymentAvailable=%s کے لیے کوئی ادائیگی دستیاب نہیں ہے۔ PaymentRegisteredAndInvoiceSetToPaid=ادائیگی رجسٹرڈ اور انوائس %s ادا کرنے پر سیٹ ہے۔ -SendEmailsRemindersOnInvoiceDueDate=Send reminder by email for validated and unpaid invoices -MakePaymentAndClassifyPayed=Record payment -BulkPaymentNotPossibleForInvoice=Bulk payment is not possible for invoice %s (bad type or status) -MentionVATDebitOptionIsOn=Option to pay tax based on debits -MentionCategoryOfOperations=Category of operations -MentionCategoryOfOperations0=Delivery of goods -MentionCategoryOfOperations1=Provision of services -MentionCategoryOfOperations2=Mixed - Delivery of goods & provision of services -Salaries=Salaries -InvoiceSubtype=Invoice Subtype -SalaryInvoice=Salary -BillsAndSalaries=Bills & Salaries -CreateCreditNoteWhenClientInvoiceExists=This option is enabled only when validated invoice(s) exist for a customer or when constant INVOICE_CREDIT_NOTE_STANDALONE is used(useful for some countries) +SendEmailsRemindersOnInvoiceDueDate=تصدیق شدہ اور غیر ادا شدہ رسیدوں کے لیے ای میل کے ذریعے یاد دہانی بھیجیں۔ +MakePaymentAndClassifyPayed=ادائیگی ریکارڈ کریں۔ +BulkPaymentNotPossibleForInvoice=انوائس کے لیے بلک ادائیگی ممکن نہیں ہے %s (خراب قسم یا حیثیت) +MentionVATDebitOptionIsOn=ڈیبٹ کی بنیاد پر ٹیکس ادا کرنے کا اختیار +MentionCategoryOfOperations=آپریشنز کا زمرہ +MentionCategoryOfOperations0=سامان کی ترسیل +MentionCategoryOfOperations1=خدمات کی فراہمی +MentionCategoryOfOperations2=مخلوط - سامان کی ترسیل اور خدمات کی فراہمی +Salaries=تنخواہیں +InvoiceSubtype=انوائس ذیلی قسم +SalaryInvoice=تنخواہ +BillsAndSalaries=بل اور تنخواہ +CreateCreditNoteWhenClientInvoiceExists=یہ اختیار صرف اس وقت فعال ہوتا ہے جب کسی گاہک کے لیے تصدیق شدہ انوائس موجود ہوں یا جب مستقل INVOICE_CREDIT_NOTE_STANDALONE استعمال کیا جائے (کچھ ممالک کے لیے مفید) diff --git a/htdocs/langs/ur_PK/companies.lang b/htdocs/langs/ur_PK/companies.lang index 7155ad7f338..6c0575b3c57 100644 --- a/htdocs/langs/ur_PK/companies.lang +++ b/htdocs/langs/ur_PK/companies.lang @@ -1,4 +1,6 @@ # Dolibarr language file - Source file is en_US - companies +newSocieteAdded=آپ کے رابطے کی تفصیلات ریکارڈ کر لی گئی ہیں۔ ہم جلد ہی آپ سے رابطہ کریں گے... +ContactUsDesc=یہ فارم آپ کو پہلے رابطے کے لیے ہمیں پیغام بھیجنے کی اجازت دیتا ہے۔ ErrorCompanyNameAlreadyExists=کمپنی کا نام %s پہلے سے موجود ہے۔ ایک اور کا انتخاب کریں۔ ErrorSetACountryFirst=پہلے ملک کو سیٹ کریں۔ SelectThirdParty=تیسرے فریق کو منتخب کریں۔ @@ -19,7 +21,7 @@ ProspectionArea=پراسپیکشن ایریا IdThirdParty=آئی ڈی تھرڈ پارٹی IdCompany=کمپنی کی شناخت IdContact=رابطہ کی شناخت -ThirdPartyAddress=Third-party address +ThirdPartyAddress=فریق ثالث کا پتہ ThirdPartyContacts=فریق ثالث کے رابطے ThirdPartyContact=فریق ثالث کا رابطہ/ پتہ Company=کمپنی @@ -52,22 +54,22 @@ CivilityCode=شہریت کا ضابطہ RegisteredOffice=منظور شدہ دفتر Lastname=آخری نام Firstname=پہلا نام -RefEmployee=Employee reference -NationalRegistrationNumber=National registration number +RefEmployee=ملازم کا حوالہ +NationalRegistrationNumber=قومی رجسٹریشن نمبر PostOrFunction=عہدہ UserTitle=عنوان NatureOfThirdParty=تیسرے فریق کی نوعیت NatureOfContact=رابطے کی نوعیت Address=پتہ State=ریاست/صوبہ -StateId=State ID +StateId=ریاستی شناخت StateCode=ریاست/صوبائی کوڈ StateShort=حالت Region=علاقہ Region-State=علاقہ - ریاست Country=ملک CountryCode=ملک کا کوڈ -CountryId=Country ID +CountryId=ملک کی شناخت Phone=فون PhoneShort=فون Skype=سکائپ @@ -86,6 +88,9 @@ DefaultLang=پہلے سے طے شدہ زبان VATIsUsed=سیلز ٹیکس استعمال کیا گیا۔ VATIsUsedWhenSelling=یہ اس بات کی وضاحت کرتا ہے کہ آیا اس تیسرے فریق میں سیلز ٹیکس شامل ہے یا نہیں جب وہ اپنے صارفین کو انوائس کرتا ہے۔ VATIsNotUsed=سیلز ٹیکس استعمال نہیں کیا جاتا +VATReverseCharge=VAT ریورس چارج +VATReverseChargeByDefault=پہلے سے طے شدہ طور پر VAT ریورس چارج +VATReverseChargeByDefaultDesc=سپلائر انوائس پر، VAT ریورس چارج بطور ڈیفالٹ استعمال ہوتا ہے۔ CopyAddressFromSoc=تیسرے فریق کی تفصیلات سے پتہ کاپی کریں۔ ThirdpartyNotCustomerNotSupplierSoNoRef=فریق ثالث نہ تو گاہک اور نہ وینڈر، کوئی حوالہ دینے والی اشیاء دستیاب نہیں۔ ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=تھرڈ پارٹی نہ تو گاہک اور نہ وینڈر، چھوٹ دستیاب نہیں ہے۔ @@ -106,7 +111,7 @@ WrongSupplierCode=وینڈر کوڈ غلط ہے۔ CustomerCodeModel=کسٹمر کوڈ ماڈل SupplierCodeModel=وینڈر کوڈ ماڈل Gencod=بارکوڈ -GencodBuyPrice=Barcode of price ref +GencodBuyPrice=قیمت کا بار کوڈ حوالہ ##### Professional ID ##### ProfId1Short=پروفیسر آئی ڈی 1 ProfId2Short=پروفیسر آئی ڈی 2 @@ -114,12 +119,20 @@ ProfId3Short=پروفیسر آئی ڈی 3 ProfId4Short=پروفیسر آئی ڈی 4 ProfId5Short=پروفیسر آئی ڈی 5 ProfId6Short=پروفیسر آئی ڈی 6 +ProfId7Short=پروفیسر آئی ڈی 7 +ProfId8Short=پروفیسر آئی ڈی 8 +ProfId9Short=پروفیسر آئی ڈی 9 +ProfId10Short=پروفیسر id 10 ProfId1=پروفیشنل آئی ڈی 1 ProfId2=پروفیشنل آئی ڈی 2 ProfId3=پروفیشنل آئی ڈی 3 ProfId4=پروفیشنل آئی ڈی 4 ProfId5=پروفیشنل آئی ڈی 5 ProfId6=پروفیشنل آئی ڈی 6 +ProfId7=پروفیشنل آئی ڈی 7 +ProfId8=پروفیشنل آئی ڈی 8 +ProfId9=پروفیشنل آئی ڈی 9 +ProfId10=پروفیشنل آئی ڈی 10 ProfId1AR=پروفیسر کی شناخت 1 (CUIT/CUIL) ProfId2AR=Prof Id 2 (Revenu brutes) ProfId3AR=- @@ -162,17 +175,17 @@ ProfId3CL=- ProfId4CL=- ProfId5CL=- ProfId6CL=- -ProfId1CM=Id. prof. 1 (Trade Register) -ProfId2CM=Id. prof. 2 (Taxpayer No.) -ProfId3CM=Id. prof. 3 (No. of creation decree) -ProfId4CM=Id. prof. 4 (Deposit certificate No.) -ProfId5CM=Id. prof. 5 (Others) +ProfId1CM=آئی ڈی پروفیسر 1 (تجارتی رجسٹر) +ProfId2CM=آئی ڈی پروفیسر 2 (ٹیکس دہندہ نمبر) +ProfId3CM=آئی ڈی پروفیسر 3 (تخلیق کے فرمان کی تعداد) +ProfId4CM=آئی ڈی پروفیسر 4 (ڈپازٹ سرٹیفکیٹ کی تعداد) +ProfId5CM=آئی ڈی پروفیسر 5 (دیگر) ProfId6CM=- -ProfId1ShortCM=Trade Register -ProfId2ShortCM=Taxpayer No. -ProfId3ShortCM=No. of creation decree -ProfId4ShortCM=Deposit certificate No. -ProfId5ShortCM=Others +ProfId1ShortCM=تجارتی رجسٹر +ProfId2ShortCM=ٹیکس دہندہ نمبر +ProfId3ShortCM=تخلیق کے فرمان کی تعداد +ProfId4ShortCM=ڈپازٹ سرٹیفکیٹ کی تعداد +ProfId5ShortCM=دوسرے ProfId6ShortCM=- ProfId1CO=پروفیسر Id 1 (R.U.T.) ProfId2CO=- @@ -198,12 +211,20 @@ ProfId3FR=Prof Id 3 (NAF, old APE) ProfId4FR=پروفیسر کی شناخت 4 (RCS/RM) ProfId5FR=پروفیسر آئی ڈی 5 (نمبر EORI) ProfId6FR=- +ProfId7FR=- +ProfId8FR=- +ProfId9FR=- +ProfId10FR=- ProfId1ShortFR=سائرن کی آواز ProfId2ShortFR=SIRET ProfId3ShortFR=این اے ایف ProfId4ShortFR=آر سی ایس ProfId5ShortFR=ای او آر آئی ProfId6ShortFR=- +ProfId7ShortFR=- +ProfId8ShortFR=- +ProfId9ShortFR=- +ProfId10ShortFR=- ProfId1GB=رجسٹریشن نمبر ProfId2GB=- ProfId3GB=ایس آئی سی @@ -242,7 +263,7 @@ ProfId5MA=آئی ڈی پروفیسر 5 (I.C.E.) ProfId6MA=- ProfId1MX=پروفیسر Id 1 (R.F.C)۔ ProfId2MX=پروفیسر Id 2 (R.P. IMSS) -ProfId3MX=Prof Id 3 (پروفیشنل چارٹر) +ProfId3MX=پروفیسر کی شناخت 3 (پیشہ ورانہ چارٹر) ProfId4MX=- ProfId5MX=- ProfId6MX=- @@ -312,12 +333,12 @@ CustomerRelativeDiscountShort=متعلقہ رعایت CustomerAbsoluteDiscountShort=مطلق رعایت CompanyHasRelativeDiscount=اس صارف کے پاس %s%% کی ڈیفالٹ رعایت ہے۔ CompanyHasNoRelativeDiscount=اس صارف کو بطور ڈیفالٹ کوئی رشتہ دار رعایت نہیں ہے۔ -HasRelativeDiscountFromSupplier=آپ کے پاس اس وینڈر سے %s%% کی ڈیفالٹ رعایت ہے۔ -HasNoRelativeDiscountFromSupplier=آپ کے پاس اس وینڈر سے کوئی ڈیفالٹ رشتہ دار رعایت نہیں ہے۔ +HasRelativeDiscountFromSupplier=You have a default discount of %s%% with this vendor +HasNoRelativeDiscountFromSupplier=اس وینڈر کے ساتھ کوئی ڈیفالٹ رشتہ دار رعایت نہیں۔ CompanyHasAbsoluteDiscount=اس صارف کے پاس %s %s کے لیے رعایتیں دستیاب ہیں (کریڈٹ نوٹس یا ڈاؤن پیمنٹس) CompanyHasDownPaymentOrCommercialDiscount=اس صارف کے پاس %s %s کے لیے چھوٹ دستیاب ہے (تجارتی، نیچے ادائیگیاں) CompanyHasCreditNote=اس صارف کے پاس ابھی بھی %s %s کے لیے کریڈٹ نوٹ موجود ہیں۔ -HasNoAbsoluteDiscountFromSupplier=آپ کو اس وینڈر سے کوئی رعایتی کریڈٹ دستیاب نہیں ہے۔ +HasNoAbsoluteDiscountFromSupplier=اس وینڈر سے کوئی رعایت/کریڈٹ دستیاب نہیں ہے۔ HasAbsoluteDiscountFromSupplier=آپ کے پاس اس وینڈر سے %s %s کے لیے رعایتیں دستیاب ہیں (کریڈٹ نوٹس یا ڈاؤن پیمنٹس) HasDownPaymentOrCommercialDiscountFromSupplier=آپ کے پاس اس وینڈر سے %s %s کے لیے چھوٹ دستیاب ہے (تجارتی، نیچے ادائیگی) HasCreditNoteFromSupplier=آپ کے پاس اس وینڈر سے %s %s کے لیے کریڈٹ نوٹس ہیں۔ @@ -364,7 +385,7 @@ ListOfThirdParties=تیسرے فریق کی فہرست ShowCompany=تیسری پارٹی ShowContact=رابطہ کا پتہ ContactsAllShort=تمام (کوئی فلٹر نہیں) -ContactType=Contact role +ContactType=رابطہ کردار ContactForOrders=آرڈر کا رابطہ ContactForOrdersOrShipments=آرڈر یا شپمنٹ کا رابطہ ContactForProposals=تجویز کا رابطہ @@ -384,7 +405,7 @@ EditCompany=کمپنی میں ترمیم کریں۔ ThisUserIsNot=یہ صارف کوئی امکان، گاہک یا وینڈر نہیں ہے۔ VATIntraCheck=چیک کریں۔ VATIntraCheckDesc=VAT ID میں ملک کا سابقہ شامل ہونا چاہیے۔ لنک %s یورپی VAT چیکر سروس (VIES) کا استعمال کرتا ہے جسے Dolibarr سرور سے انٹرنیٹ تک رسائی کی ضرورت ہوتی ہے۔ -VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do +VATIntraCheckURL=https://ec.europa.eu/taxation_customs/vies/#/vat-validation VATIntraCheckableOnEUSite=یورپی کمیشن کی ویب سائٹ پر انٹرا کمیونٹی VAT ID چیک کریں۔ VATIntraManualCheck=آپ یورپی کمیشن کی ویب سائٹ %s پر دستی طور پر بھی چیک کر سکتے ہیں۔ ErrorVATCheckMS_UNAVAILABLE=چیک کرنا ممکن نہیں ہے۔ چیک سروس رکن ریاست (%s) کی طرف سے فراہم نہیں کی جاتی ہے۔ @@ -444,7 +465,7 @@ AddAddress=ایڈریس شامل کریں۔ SupplierCategory=وینڈر کیٹیگری JuridicalStatus200=آزاد DeleteFile=فائل کو ڈیلیٹ کریں -ConfirmDeleteFile=Are you sure you want to delete this file? +ConfirmDeleteFile=کیا آپ واقعی اس فائل کو حذف کرنا چاہتے ہیں %s؟ AllocateCommercial=سیلز کے نمائندے کو تفویض کیا گیا۔ Organization=تنظیم FiscalYearInformation=مالی سال @@ -472,7 +493,7 @@ CurrentOutstandingBill=موجودہ بقایا بل OutstandingBill=زیادہ سے زیادہ بقایا بل کے لیے OutstandingBillReached=زیادہ سے زیادہ بقایا بل تک پہنچ گئے۔ OrderMinAmount=آرڈر کے لیے کم از کم رقم -MonkeyNumRefModelDesc=کسٹمر کوڈ کے لیے %syymm-nnnn فارمیٹ میں ایک نمبر اور وینڈر کوڈ کے لیے %syymm-nnnn جہاں yy سال ہے، mm مہینہ ہے اور nnnn ایک ترتیب وار خود بخود بڑھنے والا نمبر ہے جس میں کوئی وقفہ نہیں ہوتا ہے اور 0 پر واپس نہیں آتا ہے۔ +MonkeyNumRefModelDesc=فارمیٹ میں نمبر واپس کریں %sکسٹمر کوڈ کے لیے yymm-nnnn اور %s yymm-nnnn وینڈر کوڈ کے لیے جہاں yy ہے سال، mm مہینہ ہے اور nnnn ایک ترتیب وار خود بخود بڑھنے والا نمبر ہے جس میں کوئی وقفہ نہیں ہوتا اور 0 پر واپسی نہیں ہوتی۔ LeopardNumRefModelDesc=کوڈ مفت ہے۔ اس کوڈ میں کسی بھی وقت ترمیم کی جا سکتی ہے۔ ManagingDirectors=مینیجر کا نام (سی ای او، ڈائریکٹر، صدر...) MergeOriginThirdparty=ڈپلیکیٹ تھرڈ پارٹی (تیسری پارٹی جسے آپ حذف کرنا چاہتے ہیں) @@ -498,3 +519,12 @@ RestOfEurope=باقی یورپ (EEC) OutOfEurope=یورپ سے باہر (EEC) CurrentOutstandingBillLate=موجودہ بقایا بل دیر سے BecarefullChangeThirdpartyBeforeAddProductToInvoice=ہوشیار رہیں، آپ کی پروڈکٹ کی قیمت کی ترتیبات کے مطابق، آپ کو POS میں پروڈکٹ شامل کرنے سے پہلے فریق ثالث کو تبدیل کرنا چاہیے۔ +EmailAlreadyExistsPleaseRewriteYourCompanyName=ای میل پہلے سے موجود ہے براہ کرم اپنی کمپنی کا نام دوبارہ لکھیں۔ +TwoRecordsOfCompanyName=اس کمپنی کے لیے ایک سے زیادہ ریکارڈ موجود ہیں، اپنی شراکت کی درخواست مکمل کرنے کے لیے براہ کرم ہم سے رابطہ کریں۔ +CompanySection=کمپنی سیکشن +ShowSocialNetworks=سوشل نیٹ ورک دکھائیں۔ +HideSocialNetworks=سوشل نیٹ ورک چھپائیں۔ +ExternalSystemID=بیرونی سسٹم ID +IDOfPaymentInAnExternalSystem=بیرونی نظام میں ادائیگی کے موڈ کی ID (جیسے پٹی، پے پال، ...) +AADEWebserviceCredentials=AADE ویب سروس کی اسناد +ThirdPartyMustBeACustomerToCreateBANOnStripe=فریق ثالث کو سٹرائپ سائیڈ پر اپنی بینک کی معلومات بنانے کی اجازت دینے کے لیے ایک صارف ہونا چاہیے۔ diff --git a/htdocs/langs/ur_PK/compta.lang b/htdocs/langs/ur_PK/compta.lang index 8273429d767..bc8e3a604b2 100644 --- a/htdocs/langs/ur_PK/compta.lang +++ b/htdocs/langs/ur_PK/compta.lang @@ -29,8 +29,8 @@ BalanceBefore=توازن (پہلے) Balance=بقیہ Debit=ڈیبٹ Credit=کریڈٹ -AccountingDebit=Debit -AccountingCredit=Credit +AccountingDebit=ڈیبٹ +AccountingCredit=کریڈٹ Piece=اکاؤنٹنگ ڈاکٹر AmountHTVATRealReceived=نیٹ جمع AmountHTVATRealPaid=خالص ادائیگی @@ -82,8 +82,8 @@ MenuNewSocialContribution=نیا سماجی/مالیاتی ٹیکس NewSocialContribution=نیا سماجی/مالیاتی ٹیکس AddSocialContribution=سماجی/مالیاتی ٹیکس شامل کریں۔ ContributionsToPay=ادا کرنے کے لیے سماجی/مالیاتی ٹیکس -AccountancyTreasuryArea=Accounting area -InvoicesArea=Billing and payment area +AccountancyTreasuryArea=اکاؤنٹنگ ایریا +InvoicesArea=بلنگ اور ادائیگی کا علاقہ NewPayment=نئی ادائیگی PaymentCustomerInvoice=کسٹمر انوائس کی ادائیگی PaymentSupplierInvoice=وینڈر انوائس کی ادائیگی @@ -131,17 +131,17 @@ SalesTurnoverMinimum=کم سے کم کاروبار ByExpenseIncome=اخراجات اور آمدنی سے ByThirdParties=تیسرے فریق کے ذریعہ ByUserAuthorOfInvoice=انوائس مصنف کے ذریعہ -CheckReceipt=Deposit slip -CheckReceiptShort=Deposit slip -LastCheckReceiptShort=Latest %s deposit slips -LastPaymentForDepositShort=Latest %s %s deposit slips +CheckReceipt=رقم جمع کروانے کی رسید +CheckReceiptShort=رقم جمع کروانے کی رسید +LastCheckReceiptShort=تازہ ترین %s ڈپازٹ سلپس +LastPaymentForDepositShort=تازہ ترین %s %s ڈپازٹ سلپس NewCheckReceipt=نئی رعایت -NewCheckDeposit=New deposit slip +NewCheckDeposit=نئی ڈپازٹ سلپ NewCheckDepositOn=اکاؤنٹ پر جمع کرنے کے لیے رسید بنائیں: %s NoWaitingChecks=کوئی چیک ڈپازٹ کے منتظر نہیں۔ -NoWaitingPaymentForDeposit=No %s payment awaiting deposit. +NoWaitingPaymentForDeposit=کوئی %s ادائیگی ڈپازٹ کی منتظر ہے۔ DateChequeReceived=وصول کرنے کی تاریخ چیک کریں۔ -DatePaymentReceived=Date of document reception +DatePaymentReceived=دستاویز کے استقبال کی تاریخ NbOfCheques=چیکوں کی تعداد PaySocialContribution=سماجی/مالیاتی ٹیکس ادا کریں۔ PayVAT=VAT اعلامیہ ادا کریں۔ @@ -152,18 +152,19 @@ ConfirmPaySalary=کیا آپ واقعی اس تنخواہ کارڈ کو بطور DeleteSocialContribution=سماجی یا مالی ٹیکس کی ادائیگی کو حذف کریں۔ DeleteVAT=VAT اعلامیہ حذف کریں۔ DeleteSalary=تنخواہ کارڈ حذف کریں۔ -DeleteVariousPayment=Delete a various payment +DeleteVariousPayment=مختلف ادائیگیوں کو حذف کریں۔ ConfirmDeleteSocialContribution=کیا آپ واقعی اس سماجی/مالیاتی ٹیکس کی ادائیگی کو حذف کرنا چاہتے ہیں؟ ConfirmDeleteVAT=کیا آپ واقعی اس VAT ڈیکلریشن کو حذف کرنا چاہتے ہیں؟ -ConfirmDeleteSalary=Are you sure you want to delete this salary ? -ConfirmDeleteVariousPayment=Are you sure you want to delete this various payment ? +ConfirmDeleteSalary=کیا آپ واقعی اس تنخواہ کو حذف کرنا چاہتے ہیں؟ +ConfirmDeleteVariousPayment=کیا آپ واقعی اس مختلف ادائیگی کو حذف کرنا چاہتے ہیں؟ ExportDataset_tax_1=سماجی اور مالیاتی ٹیکس اور ادائیگیاں CalcModeVATDebt=موڈ %sVAT پر عزم accounting%s ۔ CalcModeVATEngagement=موڈ %sVAT آمدنی-خرچوں0ecb2ec87f49fz0 -CalcModeDebt=Analysis of known recorded documents -CalcModeEngagement=Analysis of known recorded payments +CalcModeDebt=معلوم ریکارڈ شدہ دستاویزات کا تجزیہ +CalcModeEngagement=معلوم ریکارڈ شدہ ادائیگیوں کا تجزیہ +CalcModePayment=Analysis of known recorded payments CalcModeBookkeeping=بک کیپنگ لیجر ٹیبل میں جرنلائزڈ ڈیٹا کا تجزیہ۔ -CalcModeNoBookKeeping=Even if they are not yet accounted in Ledger +CalcModeNoBookKeeping=یہاں تک کہ اگر ان کا ابھی تک لیجر میں حساب نہیں لیا گیا ہے۔ CalcModeLT1= موڈ %sRE کسٹمر انوائس پر - سپلائرز invoices%s CalcModeLT1Debt=موڈ %sRE کسٹمر انوائس پر موڈ CalcModeLT1Rec= موڈ %sRE سپلائرز انوائس پر @@ -177,7 +178,7 @@ AnnualByCompaniesDueDebtMode=آمدنی اور اخراجات کا توازن، AnnualByCompaniesInputOutputMode=آمدنی اور اخراجات کا توازن، پہلے سے طے شدہ گروپوں کے لحاظ سے تفصیل، موڈ %sIncomes-Expenses%s نے کہا a0aee83365837fz4701917fz SeeReportInInputOutputMode=دیکھیں %sادائیگیوں کا تجزیہ SeeReportInDueDebtMode=دیکھیں %s ریکارڈ شدہ دستاویزات کا تجزیہ. -SeeReportInBookkeepingMode=دیکھیں %s بک کیپنگ لیجر ٹیبل کا تجزیہ +SeeReportInBookkeepingMode=See %sanalysis of bookkeeping ledger table%s for a report based on Bookkeeping Ledger table RulesAmountWithTaxIncluded=- دکھائی گئی رقم تمام ٹیکسوں کے ساتھ ہے۔ RulesAmountWithTaxExcluded=- دکھائے گئے انوائسز کی رقم تمام ٹیکسوں کو چھوڑ کر ہے۔ RulesResultDue=- اس میں تمام رسیدیں، اخراجات، VAT، عطیات، تنخواہیں، چاہے وہ ادا کیے جائیں یا نہ ہوں۔
- یہ انوائسز کی بلنگ کی تاریخ اور اخراجات یا ٹیکس کی ادائیگیوں کی مقررہ تاریخ پر مبنی ہے۔ تنخواہوں کے لیے، مدت کے اختتام کی تاریخ استعمال کی جاتی ہے۔ @@ -251,14 +252,16 @@ TurnoverPerProductInCommitmentAccountingNotRelevant=فی پروڈکٹ جمع ہ TurnoverPerSaleTaxRateInCommitmentAccountingNotRelevant=فی سیل ٹیکس کی شرح سے جمع ہونے والے ٹرن اوور کی رپورٹ دستیاب نہیں ہے۔ یہ رپورٹ صرف ٹرن اوور انوائس کے لیے دستیاب ہے۔ CalculationMode=کیلکولیشن موڈ AccountancyJournal=اکاؤنٹنگ کوڈ جرنل -ACCOUNTING_VAT_SOLD_ACCOUNT=Account (from the Chart Of Account) to be used as the default account for VAT on sales (used if not defined on VAT dictionary setup) -ACCOUNTING_VAT_BUY_ACCOUNT=Account (from the Chart Of Account) to be used as the default account for VAT on purchases (used if not defined on VAT dictionary setup) -ACCOUNTING_VAT_PAY_ACCOUNT=Account (from the Chart Of Account) to be used as the default account for paying VAT -ACCOUNTING_VAT_BUY_REVERSE_CHARGES_CREDIT=Account (from the Chart Of Account) to be used as the default account for VAT on purchases for reverse charges (Credit) -ACCOUNTING_VAT_BUY_REVERSE_CHARGES_DEBIT=Account (from the Chart Of Account) to be used as the default account for VAT on purchases for reverse charges (Debit) -ACCOUNTING_ACCOUNT_CUSTOMER=Account (from the Chart Of Account) used for "customer" third parties +ACCOUNTING_VAT_SOLD_ACCOUNT=اکاؤنٹ (اکاؤنٹ کے چارٹ سے) سیلز پر VAT کے لیے ڈیفالٹ اکاؤنٹ کے طور پر استعمال کیا جائے گا (اگر VAT ڈکشنری سیٹ اپ پر اس کی وضاحت نہیں کی گئی ہے) +ACCOUNTING_VAT_BUY_ACCOUNT=اکاؤنٹ (اکاؤنٹ کے چارٹ سے) خریداریوں پر VAT کے لیے ڈیفالٹ اکاؤنٹ کے طور پر استعمال کیا جائے گا (اگر VAT ڈکشنری سیٹ اپ پر اس کی وضاحت نہیں کی گئی ہے) +ACCOUNTING_REVENUESTAMP_SOLD_ACCOUNT=اکاؤنٹ (اکاؤنٹ کے چارٹ سے) سیلز پر ریونیو سٹیمپ کے لیے استعمال کیا جائے گا۔ +ACCOUNTING_REVENUESTAMP_BUY_ACCOUNT=اکاؤنٹ (اکاؤنٹ کے چارٹ سے) خریداریوں پر ریونیو سٹیمپ کے لیے استعمال کیا جائے گا۔ +ACCOUNTING_VAT_PAY_ACCOUNT=اکاؤنٹ (اکاؤنٹ کے چارٹ سے) VAT کی ادائیگی کے لیے بطور ڈیفالٹ اکاؤنٹ استعمال کیا جائے۔ +ACCOUNTING_VAT_BUY_REVERSE_CHARGES_CREDIT=اکاؤنٹ (اکاؤنٹ کے چارٹ سے) ریورس چارجز کے لیے خریداریوں پر VAT کے لیے ڈیفالٹ اکاؤنٹ کے طور پر استعمال کیا جائے گا (کریڈٹ) +ACCOUNTING_VAT_BUY_REVERSE_CHARGES_DEBIT=اکاؤنٹ (اکاؤنٹ کے چارٹ سے) ریورس چارجز (ڈیبٹ) کے لیے خریداریوں پر VAT کے لیے بطور ڈیفالٹ اکاؤنٹ استعمال کیا جائے گا۔ +ACCOUNTING_ACCOUNT_CUSTOMER=اکاؤنٹ (اکاؤنٹ کے چارٹ سے) "کسٹمر" تیسرے فریق کے لیے استعمال کیا جاتا ہے۔ ACCOUNTING_ACCOUNT_CUSTOMER_Desc=تھرڈ پارٹی کارڈ پر بیان کردہ وقف اکاؤنٹنگ اکاؤنٹ صرف Subledger اکاؤنٹنگ کے لیے استعمال کیا جائے گا۔ یہ جنرل لیجر کے لیے اور سبلیجر اکاؤنٹنگ کی ڈیفالٹ ویلیو کے طور پر استعمال کیا جائے گا اگر تھرڈ پارٹی پر مخصوص کسٹمر اکاؤنٹنگ اکاؤنٹ کی وضاحت نہیں کی گئی ہے۔ -ACCOUNTING_ACCOUNT_SUPPLIER=Account (from the Chart of Account) used for the "vendor" third parties +ACCOUNTING_ACCOUNT_SUPPLIER=اکاؤنٹ (اکاؤنٹ کے چارٹ سے) "فروش" تیسرے فریق کے لیے استعمال کیا جاتا ہے۔ ACCOUNTING_ACCOUNT_SUPPLIER_Desc=تھرڈ پارٹی کارڈ پر بیان کردہ وقف اکاؤنٹنگ اکاؤنٹ صرف Subledger اکاؤنٹنگ کے لیے استعمال کیا جائے گا۔ یہ جنرل لیجر کے لیے اور سبلیجر اکاؤنٹنگ کی ڈیفالٹ ویلیو کے طور پر استعمال کیا جائے گا اگر تیسرے فریق پر ڈیڈیکیٹڈ وینڈر اکاؤنٹنگ اکاؤنٹ کی وضاحت نہیں کی گئی ہے۔ ConfirmCloneTax=سماجی/مالیاتی ٹیکس کے کلون کی تصدیق کریں۔ ConfirmCloneVAT=VAT ڈیکلریشن کے کلون کی تصدیق کریں۔ @@ -298,9 +301,9 @@ ReportPurchaseTurnover=ٹرن اوور کی انوائس خریدی۔ ReportPurchaseTurnoverCollected=خریداری کا کاروبار جمع ہوا۔ IncludeVarpaysInResults = رپورٹس میں مختلف ادائیگیاں شامل کریں۔ IncludeLoansInResults = رپورٹوں میں قرضوں کو شامل کریں۔ -InvoiceLate30Days = Late (> 30 days) -InvoiceLate15Days = Late (15 to 30 days) -InvoiceLateMinus15Days = Late (< 15 days) +InvoiceLate30Days = دیر سے (> 30 دن) +InvoiceLate15Days = دیر سے (15 سے 30 دن) +InvoiceLateMinus15Days = دیر سے (<15 دن) InvoiceNotLate = جمع کیا جائے گا (<15 دن) InvoiceNotLate15Days = جمع کیا جائے گا (15 سے 30 دن) InvoiceNotLate30Days = جمع کیا جائے گا (> 30 دن) @@ -309,4 +312,4 @@ InvoiceToPay15Days=ادائیگی کے لیے (15 سے 30 دن) InvoiceToPay30Days=ادائیگی کے لیے (> 30 دن) ConfirmPreselectAccount=اکاؤنٹنسی کوڈ کو پہلے سے منتخب کریں۔ ConfirmPreselectAccountQuestion=کیا آپ واقعی اس اکاؤنٹنسی کوڈ کے ساتھ %s منتخب لائنوں کو پہلے سے منتخب کرنا چاہتے ہیں؟ -AmountPaidMustMatchAmountOfDownPayment=Amount paid must match amount of down payment +AmountPaidMustMatchAmountOfDownPayment=ادا کی گئی رقم ڈاؤن پیمنٹ کی رقم سے مماثل ہونی چاہیے۔ diff --git a/htdocs/langs/ur_PK/errors.lang b/htdocs/langs/ur_PK/errors.lang index ab928e58764..cf0e1c7b47a 100644 --- a/htdocs/langs/ur_PK/errors.lang +++ b/htdocs/langs/ur_PK/errors.lang @@ -95,7 +95,7 @@ ErrorModuleRequireJavascript=اس خصوصیت کو کام کرنے کے لیے ErrorPasswordsMustMatch=دونوں ٹائپ شدہ پاس ورڈ ایک دوسرے سے مماثل ہونے چاہئیں ErrorContactEMail=ایک تکنیکی خرابی پیش آگئی۔ براہ کرم، مندرجہ ذیل ای میل کے لیے منتظم سے رابطہ کریں %s اور غلطی فراہم کریں کوڈ %s اپنے پیغام میں، یا اس کی اسکرین کاپی شامل کریں یہ صفحہ. ErrorWrongValueForField=فیلڈ %s : ' %s a09a4b739f17f8zec0839f17f8zec083839f17f8zexa83fz39fz7839f49fz083839f49fz0839fz7839f49fz0839fz7fz19 سے مماثل ہے -ErrorHtmlInjectionForField=فیلڈ %s: قدر '%s' میں بدنیتی پر مبنی ڈیٹا کی اجازت نہیں ہے +ErrorHtmlInjectionForField=Field %s: The value '%s' contains a malicious data not allowed ErrorFieldValueNotIn=فیلڈ %s : ' %s ' ایک قیمت میدان %s میں پائے کا نہیں ہے %s ErrorFieldRefNotIn=فیلڈ %s : ' %s 839f17f8z080839f739f17fz087839fz08739fz087fz0839fz087fz39fz087fz087fz087fz07fz087f49fz07fz09fz0839f17fz087fz087fz07fz07fz0839f17fz07fz087fz0839f17fz087fz. ErrorMultipleRecordFoundFromRef=ref %s سے تلاش کرنے پر کئی ریکارڈ ملے۔ یہ جاننے کا کوئی طریقہ نہیں کہ کون سی آئی ڈی استعمال کرنی ہے۔ @@ -263,7 +263,7 @@ ErrorReplaceStringEmpty=خرابی، جس سٹرنگ کو تبدیل کرنا ہ ErrorProductNeedBatchNumber=خرابی، پروڈکٹ ' %s ' بہت زیادہ/سیریل نمبر کی ضرورت ہے ErrorProductDoesNotNeedBatchNumber=خرابی، پروڈکٹ ' %s ' لاٹ/سیریل نمبر قبول نہیں کرتا ErrorFailedToReadObject=خرابی، %s قسم کے آبجیکٹ کو پڑھنے میں ناکام -ErrorParameterMustBeEnabledToAllwoThisFeature=خرابی، پیرامیٹر %s کو conf/conf.php<> اندرونی جاب شیڈولر کے ذریعہ کمانڈ لائن انٹرفیس کے استعمال کی اجازت دینے کے لیے +ErrorParameterMustBeEnabledToAllwoThisFeature=Error, parameter %s must be enabled into conf/conf.php<> to allow use of Command Line Interface by the internal job scheduler ErrorLoginDateValidity=خرابی، یہ لاگ ان درست تاریخ کی حد سے باہر ہے۔ ErrorValueLength=فیلڈ کی لمبائی ' %s ' ' %s a09a4b739f' سے زیادہ ہونی چاہیے۔ ErrorReservedKeyword=لفظ ' %s ' ایک محفوظ مطلوبہ لفظ ہے۔ diff --git a/htdocs/langs/ur_PK/eventorganization.lang b/htdocs/langs/ur_PK/eventorganization.lang index 3a040d40fcd..aabea31a087 100644 --- a/htdocs/langs/ur_PK/eventorganization.lang +++ b/htdocs/langs/ur_PK/eventorganization.lang @@ -36,7 +36,7 @@ EventOrganizationSetup=ایونٹ آرگنائزیشن سیٹ اپ EventOrganization=تقریب کی تنظیم EventOrganizationSetupPage = ایونٹ آرگنائزیشن سیٹ اپ صفحہ EVENTORGANIZATION_TASK_LABEL = پروجیکٹ کی توثیق ہونے پر خود بخود تخلیق کرنے کے لیے کاموں کا لیبل -EVENTORGANIZATION_TASK_LABELTooltip = جب آپ کسی ایونٹ کو منظم کرنے کے لیے توثیق کرتے ہیں، تو پروجیکٹ میں کچھ کام خود بخود بن سکتے ہیں

مثال کے طور پر:
کانفرنسز کے لیے کال بھیجیں
بوتھز کے لیے کال بھیجیں
کلاسز کی درست تجویز کریں ='notranslate'>
بوتھس کے لیے درخواست کی توثیق کریں
شرکاء کے لیے ایونٹ کی سبسکرپشنز کھولیںb0342fccfda19bzmin تقریب کے مقررین کو
بوتھ کے میزبانوں کو ایونٹ کی یاد دہانی بھیجیں
شرکاء کو ایونٹ کی یاد دہانی بھیجیں +EVENTORGANIZATION_TASK_LABELTooltip = When you validate an event to organize, some tasks can be automatically created in the project

For example:
Send Call for Conferences
Send Call for Booths
Validate suggestions of Conferences
Validate application for Booths
Open subscriptions to the event for attendees
Send a remind of the event to speakers
Send a remind of the event to Booth hosters
Send a remind of the event to attendees EVENTORGANIZATION_TASK_LABELTooltip2=اگر آپ کو خود بخود کام بنانے کی ضرورت نہیں ہے تو خالی رکھیں۔ EVENTORGANIZATION_CATEG_THIRDPARTY_CONF = فریق ثالث میں شامل کرنے کے لیے زمرہ خود بخود بن جاتا ہے جب کوئی کانفرنس تجویز کرتا ہے۔ EVENTORGANIZATION_CATEG_THIRDPARTY_BOOTH = تیسری پارٹیوں میں شامل کرنے کے لیے زمرہ خود بخود بن جاتا ہے جب وہ بوتھ تجویز کرتے ہیں۔ @@ -88,6 +88,7 @@ PriceOfRegistration=رجسٹریشن کی قیمت PriceOfRegistrationHelp=رجسٹر کرنے یا ایونٹ میں شرکت کے لیے ادا کرنے کی قیمت PriceOfBooth=ایک بوتھ کھڑا کرنے کے لیے سبسکرپشن کی قیمت PriceOfBoothHelp=ایک بوتھ کھڑے کرنے کے لئے سبسکرپشن کی قیمت +EventOrganizationICSLinkProject=Link ICS for the event EventOrganizationICSLink=کانفرنسوں کے لیے ICS لنک کریں۔ ConferenceOrBoothInformation=کانفرنس یا بوتھ کی معلومات Attendees=حاضرین diff --git a/htdocs/langs/ur_PK/exports.lang b/htdocs/langs/ur_PK/exports.lang index ebea0298bca..8247a223aa9 100644 --- a/htdocs/langs/ur_PK/exports.lang +++ b/htdocs/langs/ur_PK/exports.lang @@ -95,7 +95,7 @@ NbOfLinesImported=کامیابی سے درآمد شدہ لائنوں کی تعد DataComeFromNoWhere=داخل کرنے کی قدر سورس فائل میں کہیں سے نہیں آتی ہے۔ DataComeFromFileFieldNb=داخل کرنے کی قدر ماخذ فائل میں کالم %s سے آتی ہے۔ DataComeFromIdFoundFromRef=ماخذ فائل سے آنے والی قدر کو استعمال کرنے کے لیے پیرنٹ آبجیکٹ کی شناخت تلاش کرنے کے لیے استعمال کیا جائے گا (لہذا آبجیکٹ %s جس میں ماخذ فائل سے حوالہ ڈیٹا بیس میں موجود ہونا چاہیے)۔ -DataComeFromIdFoundFromCodeId=ماخذ فائل سے آنے والے کوڈ کی قدر کو استعمال کرنے کے لیے پیرنٹ آبجیکٹ کی شناخت تلاش کرنے کے لیے استعمال کیا جائے گا (لہذا ماخذ فائل کا کوڈ لغت میں موجود ہونا چاہیے %s)۔ نوٹ کریں کہ اگر آپ کو آئی ڈی معلوم ہے تو آپ اسے کوڈ کے بجائے سورس فائل میں بھی استعمال کر سکتے ہیں۔ درآمد دونوں صورتوں میں کام کرنا چاہئے. +DataComeFromIdFoundFromCodeId=The value of code that comes from source file will be used to find the id of the parent object to use (so the code from source file must exist in the dictionary %s). Note that if you know the id, you can also use it in the source file instead of the code. Import should work in both cases. DataIsInsertedInto=سورس فائل سے آنے والا ڈیٹا درج ذیل فیلڈ میں داخل کیا جائے گا: DataIDSourceIsInsertedInto=پیرنٹ آبجیکٹ کی آئی ڈی، جو سورس فائل میں ڈیٹا کا استعمال کرتے ہوئے پائی گئی تھی، درج ذیل فیلڈ میں ڈالی جائے گی: DataCodeIDSourceIsInsertedInto=پیرنٹ لائن کی آئی ڈی، جو کوڈ سے ملی تھی، درج ذیل فیلڈ میں ڈالی جائے گی: diff --git a/htdocs/langs/ur_PK/hrm.lang b/htdocs/langs/ur_PK/hrm.lang index 56060320255..fe4a8f81cc4 100644 --- a/htdocs/langs/ur_PK/hrm.lang +++ b/htdocs/langs/ur_PK/hrm.lang @@ -12,7 +12,7 @@ OpenEtablishment=کھلی اسٹیبلشمنٹ CloseEtablishment=بند اسٹیبلشمنٹ # Dictionary DictionaryPublicHolidays=چھٹی - عوامی تعطیلات -DictionaryDepartment=HRM - Organizational Unit +DictionaryDepartment=HRM - تنظیمی یونٹ DictionaryFunction=HRM - ملازمت کی پوزیشنیں۔ # Module Employees=ملازمین @@ -26,9 +26,9 @@ HRM_DEFAULT_SKILL_DESCRIPTION=صفوں کی پہلے سے طے شدہ تفصیل deplacement=شفٹ DateEval=تشخیص کی تاریخ JobCard=جاب کارڈ -NewJobProfile=New Job Profile -JobProfile=Job profile -JobsProfiles=Job profiles +NewJobProfile=نئی جاب پروفائل +JobProfile=ملازمت کی پروفائل +JobsProfiles=جاب پروفائلز NewSkill=نیا ہنر SkillType=مہارت کی قسم Skilldets=اس مہارت کے لیے درجات کی فہرست @@ -37,7 +37,7 @@ rank=رینک ErrNoSkillSelected=کوئی ہنر منتخب نہیں کیا گیا۔ ErrSkillAlreadyAdded=یہ مہارت پہلے سے ہی فہرست میں ہے۔ SkillHasNoLines=اس مہارت کی کوئی لکیر نہیں ہے۔ -Skill=Skill +Skill=ہنر Skills=ہنر SkillCard=ہنر کارڈ EmployeeSkillsUpdated=ملازمین کی مہارتوں کو اپ ڈیٹ کر دیا گیا ہے (ملازمین کارڈ کا "ہنر" ٹیب دیکھیں) @@ -47,51 +47,51 @@ NewEval=نئی تشخیص ValidateEvaluation=تشخیص کی توثیق کریں۔ ConfirmValidateEvaluation=Are you sure you want to validate this evaluation with the reference %s? EvaluationCard=تشخیصی کارڈ -RequiredRank=Required rank for the job profile -RequiredRankShort=Required rank -PositionsWithThisProfile=Positions with this job profiles +RequiredRank=جاب پروفائل کے لیے مطلوبہ رینک +RequiredRankShort=مطلوبہ درجہ +PositionsWithThisProfile=اس جاب پروفائلز کے ساتھ عہدے EmployeeRank=اس مہارت کے لیے ملازم کا درجہ -EmployeeRankShort=Employee rank +EmployeeRankShort=ملازم کا درجہ EmployeePosition=ملازم کی پوزیشن EmployeePositions=ملازمین کے عہدے EmployeesInThisPosition=اس عہدے پر ملازمین group1ToCompare=تجزیہ کرنے کے لیے صارف گروپ group2ToCompare=موازنہ کے لیے دوسرا صارف گروپ -OrJobToCompare=Compare to skill requirements of a job profile +OrJobToCompare=ملازمت کے پروفائل کی مہارت کی ضروریات کا موازنہ کریں۔ difference=فرق CompetenceAcquiredByOneOrMore=قابلیت ایک یا زیادہ صارفین نے حاصل کی ہے لیکن دوسرے موازنہ کنندہ کے ذریعہ درخواست نہیں کی گئی ہے۔ -MaxlevelGreaterThan=Employee level is greater than the expected level -MaxLevelEqualTo=Employee level is equals to the expected level -MaxLevelLowerThan=Employee level is lower than that the expected level -MaxlevelGreaterThanShort=Level greater than expected -MaxLevelEqualToShort=Level equal to the expected level -MaxLevelLowerThanShort=Level lower than expected +MaxlevelGreaterThan=ملازمین کی سطح متوقع سطح سے زیادہ ہے۔ +MaxLevelEqualTo=ملازمین کی سطح متوقع سطح کے برابر ہے۔ +MaxLevelLowerThan=ملازمین کی سطح متوقع سطح سے کم ہے۔ +MaxlevelGreaterThanShort=سطح توقع سے زیادہ ہے۔ +MaxLevelEqualToShort=متوقع سطح کے برابر سطح +MaxLevelLowerThanShort=توقع سے کم سطح SkillNotAcquired=مہارت تمام صارفین کے ذریعہ حاصل نہیں کی گئی ہے اور دوسرے موازنہ کنندہ کے ذریعہ درخواست کی گئی ہے۔ legend=لیجنڈ TypeSkill=مہارت کی قسم -AddSkill=Add skills to job profile -RequiredSkills=Required skills for this job profile +AddSkill=جاب پروفائل میں مہارتیں شامل کریں۔ +RequiredSkills=اس جاب پروفائل کے لیے درکار ہنر UserRank=صارف کی درجہ بندی SkillList=ہنر کی فہرست SaveRank=رینک محفوظ کریں۔ -TypeKnowHow=Know-how -TypeHowToBe=How to be -TypeKnowledge=Knowledge +TypeKnowHow=جاننے کا طریقہ +TypeHowToBe=کیسے بننا ہے۔ +TypeKnowledge=علم AbandonmentComment=ترک تبصرہ DateLastEval=آخری تشخیص کی تاریخ NoEval=اس ملازم کی کوئی تشخیص نہیں کی گئی۔ HowManyUserWithThisMaxNote=اس رینک والے صارفین کی تعداد HighestRank=اعلیٰ ترین عہدہ SkillComparison=مہارت کا موازنہ -ActionsOnJob=Events on this job -VacantPosition=job vacancy -VacantCheckboxHelper=Checking this option will show unfilled positions (job vacancy) -SaveAddSkill = Skill(s) added -SaveLevelSkill = Skill(s) level saved -DeleteSkill = Skill removed -SkillsExtraFields=Complementary attributes (Skills) -JobsExtraFields=Complementary attributes (Job profile) -EvaluationsExtraFields=Complementary attributes (Evaluations) -NeedBusinessTravels=Need business travels -NoDescription=No description -TheJobProfileHasNoSkillsDefinedFixBefore=The evaluated job profile of this employee has no skill defined on it. Please add skill(s), then delete and restart the evaluation. +ActionsOnJob=اس کام پر ہونے والے واقعات +VacantPosition=ملازمت کی جگہ خالی +VacantCheckboxHelper=اس آپشن کو چیک کرنے سے خالی جگہیں دکھائی دیں گی (نوکری کی خالی جگہ) +SaveAddSkill = مہارتیں شامل کی گئیں۔ +SaveLevelSkill = مہارت کی سطح محفوظ ہو گئی۔ +DeleteSkill = ہنر ہٹا دیا گیا۔ +SkillsExtraFields=تکمیلی صفات (مہارت) +JobsExtraFields=تکمیلی صفات (جاب پروفائل) +EvaluationsExtraFields=تکمیلی صفات (تشخیصات) +NeedBusinessTravels=کاروباری سفر کی ضرورت ہے۔ +NoDescription=کوئی وضاحت نہیں +TheJobProfileHasNoSkillsDefinedFixBefore=اس ملازم کی جانچ شدہ جاب پروفائل میں اس پر کوئی ہنر متعین نہیں ہے۔ براہ کرم مہارت (ہنر) شامل کریں، پھر حذف کریں اور تشخیص کو دوبارہ شروع کریں۔ diff --git a/htdocs/langs/ur_PK/mails.lang b/htdocs/langs/ur_PK/mails.lang index 5fe727a17f1..e13f65d2de1 100644 --- a/htdocs/langs/ur_PK/mails.lang +++ b/htdocs/langs/ur_PK/mails.lang @@ -182,7 +182,7 @@ IsAnAnswer=ابتدائی ای میل کا جواب ہے۔ RecordCreatedByEmailCollector=ای میل کلکٹر %s ای میل %s سے ریکارڈ بنایا گیا DefaultBlacklistMailingStatus=نیا رابطہ بناتے وقت فیلڈ '%s' کے لیے ڈیفالٹ قدر DefaultStatusEmptyMandatory=خالی لیکن لازمی -WarningLimitSendByDay=انتباہ: آپ کی مثال کا سیٹ اپ یا معاہدہ آپ کی روزانہ کی ای میلز کی تعداد کو %s
۔ مزید بھیجنے کی کوشش کرنے کے نتیجے میں آپ کی مثال سست یا معطل ہو سکتی ہے۔ اگر آپ کو زیادہ کوٹے کی ضرورت ہو تو براہ کرم اپنے سپورٹ سے رابطہ کریں۔ +WarningLimitSendByDay=WARNING: The setup or contract of your instance limits your number of emails per day to %s. Trying to send more may result in having your instance slow down or suspended. Please contact your support if you need a higher quota. NoMoreRecipientToSendTo=ای میل بھیجنے کے لیے مزید وصول کنندہ نہیں۔ EmailOptedOut=ای میل کے مالک نے اس ای میل کے ساتھ مزید رابطہ نہ کرنے کی درخواست کی ہے۔ EvenUnsubscribe=آپٹ آؤٹ ای میلز شامل کریں۔ diff --git a/htdocs/langs/ur_PK/modulebuilder.lang b/htdocs/langs/ur_PK/modulebuilder.lang index 114379304df..87901c095d7 100644 --- a/htdocs/langs/ur_PK/modulebuilder.lang +++ b/htdocs/langs/ur_PK/modulebuilder.lang @@ -94,7 +94,7 @@ SeeExamples=یہاں مثالیں دیکھیں EnabledDesc=اس فیلڈ کو فعال رکھنے کی شرط۔

مثالیں:
1
isModEnabled('anothermodule')
getDolGlobalString('MYMODULE_OPTION')==2 VisibleDesc=کیا میدان نظر آتا ہے؟ (مثالیں: 0=کبھی دکھائی نہیں دیتا، 1=فہرست پر نظر آتا ہے اور فارمز بنائیں/اپ ڈیٹ کریں/دیکھیں، 2=صرف فہرست میں مرئی، 3=صرف بنانے/اپ ڈیٹ کرنے/دیکھنے کے فارم پر مرئی (فہرستوں پر نہیں)، 4=فہرستوں پر مرئی اور صرف فارم کو اپ ڈیٹ/دیکھیں (تخلیق نہیں)، 5=صرف فہرست میں دکھائی دیتا ہے اور فارم کو صرف دیکھتا ہے (تخلیق نہیں کرتا، اپ ڈیٹ نہیں کرتا)۔

منفی قدر کا استعمال کرنے کا مطلب ہے کہ فیلڈ کو فہرست میں بطور ڈیفالٹ نہیں دکھایا جاتا ہے لیکن اسے دیکھنے کے لیے منتخب کیا جا سکتا ہے)۔ ItCanBeAnExpression=یہ ایک اظہار ہوسکتا ہے۔ مثال:
preg_match('/public/', $_SERVER['PHP_SELF'])?0:1
$user -> ہے حق ('چھٹی'، 'تعریف_چھٹی')؟1:5 -DisplayOnPdfDesc=اس فیلڈ کو مطابقت پذیر پی ڈی ایف دستاویزات پر ڈسپلے کریں، آپ "پوزیشن" فیلڈ کے ساتھ پوزیشن کا نظم کر سکتے ہیں۔
دستاویز کے لیے:
0 = ڈسپلے نہیں کیا گیا
1 = ڈسپلے
2 = صرف ڈسپلے کریں اگر خالی نہ ہو

b0e784943 span>دستاویزی خطوط کے لیے :

0 = ظاہر نہیں کیا گیا
1 = ایک کالم میں ظاہر ہوتا ہے
3 = تفصیل کے بعد لائن تفصیل کے کالم میں ڈسپلے
4 = تفصیل کے بعد تفصیل کے کالم میں ڈسپلے صرف اس صورت میں جب خالی نہ ہو۔ +DisplayOnPdfDesc=Display this field on compatible PDF documents, you can manage position with "Position" field.
For document :
0 = not displayed
1 = display
2 = display only if not empty

For document lines :
0 = not displayed
1 = displayed in a column
3 = display in line description column after the description
4 = display in description column after the description only if not empty DisplayOnPdf=پی ڈی ایف پر IsAMeasureDesc=کیا فہرست میں کل حاصل کرنے کے لیے فیلڈ کی قدر کو جمع کیا جا سکتا ہے؟ (مثالیں: 1 یا 0) SearchAllDesc=کیا کوئیک سرچ ٹول سے تلاش کرنے کے لیے فیلڈ کا استعمال کیا جاتا ہے؟ (مثالیں: 1 یا 0) @@ -148,7 +148,7 @@ CSSListClass=فہرست کے لیے سی ایس ایس NotEditable=قابل تدوین نہیں۔ ForeignKey=غیر ملکی چابی ForeignKeyDesc=اگر اس فیلڈ کی قدر کسی دوسرے ٹیبل میں موجود ہونے کی ضمانت ہونی چاہیے۔ یہاں ایک قدر مماثل نحو درج کریں: tablename.parentfieldtocheck -TypeOfFieldsHelp=مثال:
varchar(99)
ای میل
فون
ip
url
پاس ورڈ
span>double(24,8)
real
text
html
date
تاریخ کا وقت
ٹائم اسٹیمپانٹیجر
انٹیجر:ClassName:relativepath/to/classfile.class.php[:1[:filter]]b0342fcc
'1' کا مطلب ہے کہ ہم ریکارڈ بنانے کے لیے کومبو کے بعد + بٹن شامل کرتے ہیں
'فلٹر' ایک ہے یونیورسل فلٹر نحو کی حالت، مثال: '((status:=:1) AND (fk_user:=:__USER_ID__) اور (entity:IN:(__SHARED_ENTITIES__))' +TypeOfFieldsHelp=Example:
varchar(99)
email
phone
ip
url
password
double(24,8)
real
text
html
date
datetime
timestamp
integer
integer:ClassName:relativepath/to/classfile.class.php[:1[:filter]]

'1' means we add a + button after the combo to create the record
'filter' is an Universal Filter syntax condition, example: '((status:=:1) AND (fk_user:=:__USER_ID__) AND (entity:IN:(__SHARED_ENTITIES__))' TypeOfFieldsHelpIntro=یہ فیلڈ/انتساب کی قسم ہے۔ AsciiToHtmlConverter=Ascii سے HTML کنورٹر AsciiToPdfConverter=Ascii سے پی ڈی ایف کنورٹر @@ -180,7 +180,7 @@ FailedToAddCodeIntoDescriptor=ڈسکرپٹر میں کوڈ شامل کرنے م DictionariesCreated=ڈکشنری %s کامیابی کے ساتھ بنائی گئی DictionaryDeleted=ڈکشنری %s کو کامیابی سے ہٹا دیا گیا PropertyModuleUpdated=پراپرٹی %s کو کامیابی سے اپ ڈیٹ کر دیا گیا ہے۔ -InfoForApiFile=* جب آپ پہلی بار فائل بنائیں گے تو تمام طریقے بنائے جائیں گے ہر چیز کے لیے۔
* جب آپ ہٹائیں پر کلک کریں تو آپ منتخب کردہ آبجیکٹ۔ +InfoForApiFile=* When you generate file for the first time then all methods will be created for each object.
* When you click in remove you just remove all methods for the selected object. SetupFile=ماڈیول سیٹ اپ کے لیے صفحہ EmailingSelectors=Emails selectors EmailingSelectorDesc=You can generate and edit here the class files to provide new email target selectors for the mass emailing module diff --git a/htdocs/langs/ur_PK/oauth.lang b/htdocs/langs/ur_PK/oauth.lang index 10b206ab0b0..e24c98bc308 100644 --- a/htdocs/langs/ur_PK/oauth.lang +++ b/htdocs/langs/ur_PK/oauth.lang @@ -29,7 +29,7 @@ OAUTH_GOOGLE_SECRET=OAuth گوگل سیکریٹ OAUTH_GITHUB_NAME=OAuth GitHub سروس OAUTH_GITHUB_ID=OAuth GitHub Id OAUTH_GITHUB_SECRET=OAuth GitHub سیکریٹ -OAUTH_URL_FOR_CREDENTIAL=اس صفحہ
اپنی OAuth ID اور خفیہ بنانے یا حاصل کرنے کے لیے +OAUTH_URL_FOR_CREDENTIAL=Go to this page to create or get your OAuth ID and Secret OAUTH_STRIPE_TEST_NAME=OAuth اسٹرائپ ٹیسٹ OAUTH_STRIPE_LIVE_NAME=OAuth اسٹرائپ لائیو OAUTH_ID=OAuth کلائنٹ ID diff --git a/htdocs/langs/ur_PK/partnership.lang b/htdocs/langs/ur_PK/partnership.lang index 055b1f4d2d1..87e7b1cbe43 100644 --- a/htdocs/langs/ur_PK/partnership.lang +++ b/htdocs/langs/ur_PK/partnership.lang @@ -91,8 +91,7 @@ CountLastUrlCheckError=آخری URL چیک کے لیے غلطیوں کی تعد LastCheckBacklink=آخری URL چیک کی تاریخ NewPartnershipRequest=نئی شراکت داری کی درخواست -NewPartnershipRequestDesc=یہ فارم آپ کو ہمارے شراکتی پروگرام میں سے کسی ایک کا حصہ بننے کی درخواست کرنے کی اجازت دیتا ہے۔ اگر آپ کو اس فارم کو پُر کرنے میں مدد کی ضرورت ہو تو، براہ کرم ای میل کے ذریعے رابطہ کریں %s
+NewPartnershipRequestDesc=This form allows you to request to be part of one of our partnership program. If you need help to fill this form, please contact by email %s. ThisUrlMustContainsAtLeastOneLinkToWebsite=اس صفحہ میں درج ذیل ڈومین میں سے کسی ایک کا کم از کم ایک لنک ہونا چاہیے: %s IPOfApplicant=درخواست دہندہ کا IP - diff --git a/htdocs/langs/ur_PK/receptions.lang b/htdocs/langs/ur_PK/receptions.lang index de8e98aa643..aee6695ae6c 100644 --- a/htdocs/langs/ur_PK/receptions.lang +++ b/htdocs/langs/ur_PK/receptions.lang @@ -1,12 +1,10 @@ # Dolibarr language file - Source file is en_US - receptions -ReceptionDescription=Vendor reception management (Create reception documents) -ReceptionsSetup=Vendor Reception setup +ReceptionDescription=وینڈر ریسپشن مینجمنٹ (استقبالیہ دستاویزات بنائیں) +ReceptionsSetup=وینڈر ریسپشن سیٹ اپ RefReception=حوالہ استقبالیہ Reception=استقبالیہ Receptions=استقبالیہ AllReceptions=تمام استقبالیہ -Reception=استقبالیہ -Receptions=استقبالیہ ShowReception=استقبالیہ دکھائیں۔ ReceptionsArea=استقبالیہ علاقہ ListOfReceptions=استقبالیوں کی فہرست @@ -32,11 +30,11 @@ StatusReceptionDraftShort=مسودہ StatusReceptionValidatedShort=تصدیق شدہ StatusReceptionProcessedShort=پروسیس شدہ ReceptionSheet=استقبالیہ شیٹ -ValidateReception=Validate reception +ValidateReception=استقبال کی توثیق کریں۔ ConfirmDeleteReception=کیا آپ واقعی اس استقبالیہ کو حذف کرنا چاہتے ہیں؟ ConfirmValidateReception=Are you sure you want to validate this reception with the reference %s? ConfirmCancelReception=کیا آپ واقعی اس استقبالیہ کو منسوخ کرنا چاہتے ہیں؟ -StatsOnReceptionsOnlyValidated=Statistics conducted on validated only receptions. Date used is date of validation of reception (planned delivery date is not always known). +StatsOnReceptionsOnlyValidated=اعداد و شمار صرف تصدیق شدہ استقبالیہ پر کئے گئے ہیں۔ استعمال شدہ تاریخ استقبالیہ کی توثیق کی تاریخ ہے (منصوبہ بند ترسیل کی تاریخ ہمیشہ معلوم نہیں ہوتی ہے)۔ SendReceptionByEMail=ای میل کے ذریعے استقبالیہ بھیجیں۔ SendReceptionRef=استقبالیہ %s جمع کروانا ActionsOnReception=استقبالیہ پر تقریبات @@ -52,7 +50,7 @@ ReceptionExist=ایک استقبالیہ موجود ہے۔ ReceptionBackToDraftInDolibarr=استقبالیہ %s ڈرافٹ پر واپس ReceptionClassifyClosedInDolibarr=استقبالیہ %s کلاسیفائیڈ بند ReceptionUnClassifyCloseddInDolibarr=استقبالیہ %s دوبارہ کھولیں۔ -RestoreWithCurrentQtySaved=Fill quantities with latest saved values -ReceptionsRecorded=Receptions recorded -ReceptionUpdated=Reception successfully updated -ReceptionDistribution=Reception distribution +RestoreWithCurrentQtySaved=تازہ ترین محفوظ شدہ اقدار کے ساتھ مقدار بھریں۔ +ReceptionsRecorded=استقبالیہ ریکارڈ کیا گیا۔ +ReceptionUpdated=استقبالیہ کامیابی کے ساتھ اپ ڈیٹ ہو گیا۔ +ReceptionDistribution=استقبالیہ تقسیم diff --git a/htdocs/langs/ur_PK/sendings.lang b/htdocs/langs/ur_PK/sendings.lang index a384fbcc5cd..e59628184c0 100644 --- a/htdocs/langs/ur_PK/sendings.lang +++ b/htdocs/langs/ur_PK/sendings.lang @@ -48,7 +48,7 @@ DateDeliveryPlanned=ترسیل کی منصوبہ بند تاریخ RefDeliveryReceipt=حوالگی کی رسید StatusReceipt=حیثیت کی ترسیل کی رسید DateReceived=موصول ہونے کی تاریخ -ClassifyReception=Classify Received +ClassifyReception=درجہ بندی موصول ہوئی۔ SendShippingByEMail=ای میل کے ذریعے کھیپ بھیجیں۔ SendShippingRef=کھیپ جمع کروانا %s ActionsOnShipping=شپمنٹ پر واقعات @@ -62,7 +62,7 @@ ProductQtyInSuppliersShipmentAlreadyRecevied=کھلے خریداری کے آرڈ NoProductToShipFoundIntoStock=گودام %s میں بھیجنے کے لیے کوئی پروڈکٹ نہیں ملا۔ اسٹاک کو درست کریں یا دوسرا گودام منتخب کرنے کے لیے واپس جائیں۔ WeightVolShort=وزن/جلد ValidateOrderFirstBeforeShipment=ترسیل کرنے کے قابل ہونے سے پہلے آپ کو پہلے آرڈر کی توثیق کرنی ہوگی۔ -NoLineGoOnTabToAddSome=No line, go on tab "%s" to add +NoLineGoOnTabToAddSome=کوئی لائن نہیں، شامل کرنے کے لیے ٹیب "%s" پر جائیں۔ # Sending methods # ModelDocument @@ -75,12 +75,12 @@ SumOfProductWeights=مصنوعات کے وزن کا مجموعہ # warehouse details DetailWarehouseNumber= گودام کی تفصیلات DetailWarehouseFormat= W:%s (Qty: %d) -SHIPPING_DISPLAY_STOCK_ENTRY_DATE=Display last date of entry in stock during shipment creation for serial number or batch -CreationOptions=Available options during shipment creation +SHIPPING_DISPLAY_STOCK_ENTRY_DATE=سیریل نمبر یا بیچ کے لیے شپمنٹ کی تخلیق کے دوران اسٹاک میں داخلے کی آخری تاریخ دکھائیں۔ +CreationOptions=شپمنٹ کی تخلیق کے دوران دستیاب اختیارات -ShipmentDistribution=Shipment distribution +ShipmentDistribution=کھیپ کی تقسیم -ErrorTooManyCombinationBatchcode=No dispatch for line %s as too many combinations of warehouse, product, batch code was found (%s). -ErrorNoCombinationBatchcode=Could not save the line %s as the combination of warehouse-product-lot/serial (%s, %s, %s) was not found in stock. +ErrorTooManyCombinationBatchcode=لائن %s کے لیے کوئی ڈسپیچ نہیں کیونکہ گودام، پروڈکٹ، بیچ کوڈ کے بہت زیادہ مجموعے ملے تھے (%s)۔ +ErrorNoCombinationBatchcode=warehouse-product-lot/serial (%s کے مجموعہ کے طور پر %s لائن کو محفوظ نہیں کیا جا سکا، %s, %s) اسٹاک میں نہیں ملا۔ -ErrorTooMuchShipped=Quantity shipped should not be greater than quantity ordered for line %s +ErrorTooMuchShipped=بھیجی گئی مقدار لائن %s کے لیے آرڈر کی گئی مقدار سے زیادہ نہیں ہونی چاہیے۔ diff --git a/htdocs/langs/ur_PK/stocks.lang b/htdocs/langs/ur_PK/stocks.lang index 362ed95af74..d6af3262631 100644 --- a/htdocs/langs/ur_PK/stocks.lang +++ b/htdocs/langs/ur_PK/stocks.lang @@ -282,7 +282,7 @@ ModuleStockTransferName=اعلی درجے کی اسٹاک کی منتقلی ModuleStockTransferDesc=ٹرانسفر شیٹ کی نسل کے ساتھ اسٹاک ٹرانسفر کا جدید انتظام StockTransferNew=نیا اسٹاک ٹرانسفر StockTransferList=اسٹاک کی منتقلی کی فہرست -ConfirmValidateStockTransfer=کیا آپ واقعی %s حوالہ کے ساتھ اس اسٹاک کی منتقلی کی توثیق کرنا چاہتے ہیں span>؟ +ConfirmValidateStockTransfer=Are you sure you want to validate this stocks transfer with the reference %s ? ConfirmDestock=منتقلی کے ساتھ اسٹاک کی کمی %s ConfirmDestockCancel=منتقلی کے ساتھ اسٹاک کی کمی کو منسوخ کریں %s DestockAllProduct=اسٹاک کی کمی diff --git a/htdocs/langs/ur_PK/withdrawals.lang b/htdocs/langs/ur_PK/withdrawals.lang index f84564c3beb..998b2097b4e 100644 --- a/htdocs/langs/ur_PK/withdrawals.lang +++ b/htdocs/langs/ur_PK/withdrawals.lang @@ -15,7 +15,7 @@ BankTransferReceipt=کریڈٹ ٹرانسفر آرڈر LatestBankTransferReceipts=تازہ ترین %s کریڈٹ ٹرانسفر آرڈرز LastWithdrawalReceipts=تازہ ترین %s ڈائریکٹ ڈیبٹ فائلیں۔ WithdrawalsLine=ڈائریکٹ ڈیبٹ آرڈر لائن -CreditTransfer=Credit transfer +CreditTransfer=کریڈٹ ٹرانسفر CreditTransferLine=کریڈٹ ٹرانسفر لائن WithdrawalsLines=ڈائریکٹ ڈیبٹ آرڈر لائنز CreditTransferLines=کریڈٹ ٹرانسفر لائنز @@ -31,9 +31,9 @@ SupplierInvoiceWaitingWithdraw=وینڈر انوائس کریڈٹ ٹرانسفر InvoiceWaitingWithdraw=انوائس براہ راست ڈیبٹ کا انتظار کر رہا ہے۔ InvoiceWaitingPaymentByBankTransfer=انوائس کریڈٹ ٹرانسفر کا انتظار کر رہی ہے۔ AmountToWithdraw=واپس لینے کی رقم -AmountToTransfer=Amount to transfer +AmountToTransfer=منتقلی کی رقم NoInvoiceToWithdraw='%s' کے لیے کھلا کوئی رسید انتظار نہیں کر رہا ہے۔ درخواست کرنے کے لیے انوائس کارڈ پر ٹیب '%s' پر جائیں۔ -NoSupplierInvoiceToWithdraw=No supplier invoice with open '%s' is waiting. Go on tab '%s' on invoice card to make a request. +NoSupplierInvoiceToWithdraw=کھلے '%s' کے ساتھ کوئی سپلائر انوائس انتظار نہیں کر رہا ہے۔ درخواست کرنے کے لیے انوائس کارڈ پر ٹیب '%s' پر جائیں۔ ResponsibleUser=صارف ذمہ دار WithdrawalsSetup=براہ راست ڈیبٹ ادائیگی کا سیٹ اپ CreditTransferSetup=کریڈٹ ٹرانسفر سیٹ اپ @@ -42,23 +42,23 @@ CreditTransferStatistics=کریڈٹ ٹرانسفر کے اعدادوشمار Rejects=رد کرتا ہے۔ LastWithdrawalReceipt=تازہ ترین %s براہ راست ڈیبٹ رسیدیں۔ MakeWithdrawRequest=براہ راست ڈیبٹ ادائیگی کی درخواست کریں۔ -MakeWithdrawRequestStripe=Make a direct debit payment request via Stripe +MakeWithdrawRequestStripe=پٹی کے ذریعے براہ راست ڈیبٹ ادائیگی کی درخواست کریں۔ MakeBankTransferOrder=کریڈٹ ٹرانسفر کی درخواست کریں۔ WithdrawRequestsDone=%s براہ راست ڈیبٹ ادائیگی کی درخواستیں ریکارڈ کی گئیں۔ BankTransferRequestsDone=%s کریڈٹ ٹرانسفر کی درخواستیں ریکارڈ کی گئیں۔ ThirdPartyBankCode=تھرڈ پارٹی بینک کوڈ NoInvoiceCouldBeWithdrawed=No invoice processed successfully. Check that invoices are on companies with a valid IBAN and that IBAN has a UMR (Unique Mandate Reference) with mode %s. -NoInvoiceCouldBeWithdrawedSupplier=No invoice processed successfully. Check that invoices are on companies with a valid IBAN. -NoSalariesCouldBeWithdrawed=No salary processed successfully. Check that salary are on users with a valid IBAN. +NoInvoiceCouldBeWithdrawedSupplier=کسی انوائس پر کامیابی سے کارروائی نہیں ہوئی۔ چیک کریں کہ رسیدیں ایک درست IBAN والی کمپنیوں پر ہیں۔ +NoSalariesCouldBeWithdrawed=کسی تنخواہ پر کامیابی سے کارروائی نہیں ہوئی۔ چیک کریں کہ تنخواہ ایک درست IBAN والے صارفین پر ہے۔ WithdrawalCantBeCreditedTwice=یہ واپسی کی رسید پہلے ہی بطور کریڈٹ نشان زد ہے۔ یہ دو بار نہیں کیا جا سکتا، کیونکہ اس سے ممکنہ طور پر ڈپلیکیٹ ادائیگیاں اور بینک اندراجات پیدا ہوں گے۔ ClassCredited=درجہ بندی کریڈٹ -ClassDebited=Classify debited +ClassDebited=ڈیبٹ کی درجہ بندی کریں۔ ClassCreditedConfirm=کیا آپ واقعی اس رقم نکلوانے کی رسید کو اپنے بینک اکاؤنٹ میں کریڈٹ کے طور پر درجہ بندی کرنا چاہتے ہیں؟ TransData=ترسیل کی تاریخ TransMetod=ترسیل کا طریقہ Send=بھیجیں Lines=لکیریں -StandingOrderReject=Record a rejection +StandingOrderReject=ایک مسترد ریکارڈ کریں۔ WithdrawsRefused=براہ راست ڈیبٹ سے انکار کر دیا۔ WithdrawalRefused=واپس لینے سے انکار کر دیا۔ CreditTransfersRefused=کریڈٹ ٹرانسفر سے انکار کر دیا گیا۔ @@ -66,9 +66,9 @@ WithdrawalRefusedConfirm=کیا آپ کو یقین ہے کہ آپ سوسائٹی RefusedData=مسترد ہونے کی تاریخ RefusedReason=انکار کی وجہ RefusedInvoicing=مسترد کرنے کا بل دینا -NoInvoiceRefused=Do not charge the customer for the refusal -InvoiceRefused=Charge the customer for the refusal -DirectDebitRefusedInvoicingDesc=Set a flag to say this refusal must be charged to the customer +NoInvoiceRefused=انکار پر گاہک سے چارج نہ کریں۔ +InvoiceRefused=انکار کے لیے گاہک سے چارج کریں۔ +DirectDebitRefusedInvoicingDesc=یہ کہنے کے لیے ایک جھنڈا لگائیں کہ یہ انکار گاہک سے وصول کیا جانا چاہیے۔ StatusDebitCredit=اسٹیٹس ڈیبٹ/کریڈٹ StatusWaiting=انتظار کر رہا ہے۔ StatusTrans=بھیجا @@ -104,11 +104,11 @@ CreditDate=پر کریڈٹ WithdrawalFileNotCapable=آپ کے ملک %s (آپ کا ملک تعاون یافتہ نہیں ہے) کے لیے رقم نکلوانے کی رسید بنانے میں ناکام ShowWithdraw=براہ راست ڈیبٹ آرڈر دکھائیں۔ IfInvoiceNeedOnWithdrawPaymentWontBeClosed=تاہم، اگر انوائس میں کم از کم ایک براہ راست ڈیبٹ ادائیگی کا آرڈر ابھی تک پروسیس نہیں ہوا ہے، تو اسے پہلے سے نکالنے کے انتظام کی اجازت دینے کے لیے بطور ادائیگی سیٹ نہیں کیا جائے گا۔ -DoStandingOrdersBeforePayments=This tab allows you to request a direct debit payment order. Once done, you can go into menu "Bank->Payment by direct debit" to generate and manage a Direct debit order file. -DoStandingOrdersBeforePayments2=You can also send a request directly to a SEPA payment processor like Stripe, ... -DoStandingOrdersBeforePayments3=When request is closed, payment on invoices will be automatically recorded, and invoices closed if remainder to pay is null. -DoCreditTransferBeforePayments=This tab allows you to request a credit transfer order. Once done, go into menu "Bank->Payment by credit transfer" to generate and manage a Credit transfer order file. -DoCreditTransferBeforePayments3=When credit transfer order is closed, payment on invoices will be automatically recorded, and invoices closed if remainder to pay is null. +DoStandingOrdersBeforePayments=یہ ٹیب آپ کو براہ راست ڈیبٹ ادائیگی کے آرڈر کی درخواست کرنے کی اجازت دیتا ہے۔ ایک بار مکمل ہو جانے کے بعد، آپ ڈائریکٹ ڈیبٹ آرڈر فائل بنانے اور اس کا نظم کرنے کے لیے مینو "بینک->براہ راست ڈیبٹ کے ذریعے ادائیگی" میں جا سکتے ہیں۔ +DoStandingOrdersBeforePayments2=آپ براہ راست SEPA ادائیگی کے پروسیسر کو بھی درخواست بھیج سکتے ہیں جیسے Stripe،... +DoStandingOrdersBeforePayments3=درخواست بند ہونے پر، انوائس پر ادائیگی خود بخود ریکارڈ ہو جائے گی، اور اگر ادائیگی باقی ہے تو انوائسز بند ہو جائیں گی۔ +DoCreditTransferBeforePayments=یہ ٹیب آپ کو کریڈٹ ٹرانسفر آرڈر کی درخواست کرنے کی اجازت دیتا ہے۔ ایک بار ہو جانے کے بعد، کریڈٹ ٹرانسفر آرڈر فائل بنانے اور اس کا نظم کرنے کے لیے مینو "بینک-> کریڈٹ ٹرانسفر کے ذریعے ادائیگی" میں جائیں۔ +DoCreditTransferBeforePayments3=جب کریڈٹ ٹرانسفر آرڈر بند ہو جائے گا، انوائس پر ادائیگی خود بخود ریکارڈ ہو جائے گی، اور اگر ادائیگی باقی ہے تو انوائسز بند ہو جائیں گی۔ WithdrawalFile=ڈیبٹ آرڈر فائل CreditTransferFile=کریڈٹ ٹرانسفر فائل SetToStatusSent="فائل بھیجی گئی" کی حیثیت پر سیٹ کریں @@ -118,14 +118,14 @@ RUM=UMR DateRUM=مینڈیٹ کے دستخط کی تاریخ RUMLong=منفرد مینڈیٹ حوالہ RUMWillBeGenerated=خالی ہونے کی صورت میں، بینک اکاؤنٹ کی معلومات محفوظ ہونے کے بعد ایک UMR (منفرد مینڈیٹ حوالہ) تیار کیا جائے گا۔ -WithdrawMode=Direct debit mode (FRST or RCUR) +WithdrawMode=ڈائریکٹ ڈیبٹ موڈ (FRST یا RCUR) WithdrawRequestAmount=براہ راست ڈیبٹ کی درخواست کی رقم: BankTransferAmount=کریڈٹ ٹرانسفر کی درخواست کی رقم: WithdrawRequestErrorNilAmount=خالی رقم کے لیے براہ راست ڈیبٹ کی درخواست بنانے سے قاصر۔ SepaMandate=SEPA ڈائریکٹ ڈیبٹ مینڈیٹ SepaMandateShort=SEPA مینڈیٹ PleaseReturnMandate=براہ کرم یہ مینڈیٹ فارم بذریعہ ای میل %s پر یا بذریعہ ڈاک واپس کریں۔ -SEPALegalText=By signing this mandate form, you authorize (A) %s and its payment service provider to send instructions to your bank to debit your account and (B) your bank to debit your account in accordance with the instructions from %s. As part of your rights, you are entitled to a refund from your bank under the terms and conditions of your agreement with your bank. Your rights regarding the above mandate are explained in a statement that you can obtain from your bank. You agree to receive notifications about future charges up to 2 days before they occur. +SEPALegalText=اس مینڈیٹ فارم پر دستخط کر کے، آپ (A) %s اور اس کے ادائیگی سروس فراہم کنندہ کو آپ کے اکاؤنٹ کو ڈیبٹ کرنے کے لیے آپ کے بینک کو ہدایات بھیجنے کی اجازت دیتے ہیں اور (B) آپ کے بینک کو آپ کے اکاؤنٹ کو ڈیبٹ کرنے کے لیے %s کی ہدایات کے مطابق۔ اپنے حقوق کے حصے کے طور پر، آپ اپنے بینک کے ساتھ اپنے معاہدے کی شرائط و ضوابط کے تحت اپنے بینک سے رقم کی واپسی کے حقدار ہیں۔ مندرجہ بالا مینڈیٹ سے متعلق آپ کے حقوق کی وضاحت ایک بیان میں کی گئی ہے جو آپ اپنے بینک سے حاصل کر سکتے ہیں۔ آپ مستقبل کے چارجز کے وقوع پذیر ہونے سے 2 دن پہلے تک اطلاعات موصول کرنے سے اتفاق کرتے ہیں۔ CreditorIdentifier=قرض دہندہ شناخت کنندہ CreditorName=قرض دینے والے کا نام SEPAFillForm=(B) براہ کرم نشان زدہ تمام فیلڈز کو مکمل کریں* @@ -134,7 +134,7 @@ SEPAFormYourBAN=آپ کے بینک اکاؤنٹ کا نام (IBAN) SEPAFormYourBIC=آپ کا بینک شناختی کوڈ (BIC) SEPAFrstOrRecur=ادائیگی کی قسم ModeRECUR=بار بار چلنے والی ادائیگی -ModeRCUR=Recurring payment +ModeRCUR=بار بار چلنے والی ادائیگی ModeFRST=یک طرفہ ادائیگی PleaseCheckOne=براہ کرم صرف ایک چیک کریں۔ CreditTransferOrderCreated=کریڈٹ ٹرانسفر آرڈر %s بنایا گیا۔ @@ -145,7 +145,7 @@ SEPAFRST=SEPA FRST ExecutionDate=پھانسی کی تاریخ CreateForSepa=ڈائریکٹ ڈیبٹ فائل بنائیں ICS=کریڈٹ کنندہ شناخت کنندہ - ICS -IDS=Debitor Identifier +IDS=ڈیبیٹر شناخت کنندہ END_TO_END="EndToEndId" SEPA XML ٹیگ - فی ٹرانزیکشن تفویض کردہ منفرد شناخت USTRD="غیر ساختہ" SEPA XML ٹیگ ADDDAYS=عملدرآمد کی تاریخ میں دن شامل کریں۔ @@ -159,16 +159,15 @@ InfoTransData=رقم: %s
طریقہ: %s
تاریخ: %s InfoRejectSubject=براہ راست ڈیبٹ ادائیگی کے آرڈر سے انکار کر دیا گیا۔ InfoRejectMessage=ہیلو،

کمپنی %s سے متعلق انوائس %s کا براہ راست ڈیبٹ ادائیگی آرڈر، جس میں %s کی رقم ہے بینک نے انکار کر دیا ہے۔

--
%s ModeWarning=اصلی موڈ کے لیے آپشن سیٹ نہیں کیا گیا تھا، ہم اس سمولیشن کے بعد رک جاتے ہیں۔ -ErrorCompanyHasDuplicateDefaultBAN=Company with id %s has more than one default bank account. No way to know which one to use. +ErrorCompanyHasDuplicateDefaultBAN=id %s والی کمپنی کے پاس ایک سے زیادہ ڈیفالٹ بینک اکاؤنٹ ہیں۔ یہ جاننے کا کوئی طریقہ نہیں کہ کون سا استعمال کرنا ہے۔ ErrorICSmissing=بینک اکاؤنٹ %s میں ICS غائب ہے۔ TotalAmountOfdirectDebitOrderDiffersFromSumOfLines=براہ راست ڈیبٹ آرڈر کی کل رقم لائنوں کے مجموعے سے مختلف ہے۔ WarningSomeDirectDebitOrdersAlreadyExists=انتباہ: پہلے سے ہی کچھ زیر التواء ڈائریکٹ ڈیبٹ آرڈرز (%s) کی درخواست کی گئی ہے %s WarningSomeCreditTransferAlreadyExists=انتباہ: پہلے سے ہی کچھ زیر التواء کریڈٹ ٹرانسفر (%s) کی درخواست کی گئی ہے %s کی رقم -UsedFor=Used for %s -Societe_ribSigned=SEPA mandate Signed -NbOfInvoiceToPayByBankTransferForSalaries=No. of qualified salaries waiting for a payment by credit transfer -SalaryWaitingWithdraw=Salaries waiting for payment by credit transfer -RefSalary=Salary -NoSalaryInvoiceToWithdraw=No salary waiting for a '%s'. Go on tab '%s' on salary card to make a request. -SalaryInvoiceWaitingWithdraw=Salaries waiting for payment by credit transfer - +UsedFor=%s کے لیے استعمال کیا جاتا ہے +Societe_ribSigned=SEPA مینڈیٹ پر دستخط کیے گئے۔ +NbOfInvoiceToPayByBankTransferForSalaries=کریڈٹ ٹرانسفر کے ذریعے ادائیگی کے منتظر اہل تنخواہوں کی تعداد +SalaryWaitingWithdraw=کریڈٹ ٹرانسفر کے ذریعے ادائیگی کے منتظر تنخواہ +RefSalary=تنخواہ +NoSalaryInvoiceToWithdraw='%s' کے انتظار میں کوئی تنخواہ نہیں۔ درخواست کرنے کے لیے سیلری کارڈ پر ٹیب '%s' پر جائیں۔ +SalaryInvoiceWaitingWithdraw=کریڈٹ ٹرانسفر کے ذریعے ادائیگی کے منتظر تنخواہ diff --git a/htdocs/langs/uz_UZ/accountancy.lang b/htdocs/langs/uz_UZ/accountancy.lang index b5b37d1a2a5..d034ac9ec9f 100644 --- a/htdocs/langs/uz_UZ/accountancy.lang +++ b/htdocs/langs/uz_UZ/accountancy.lang @@ -287,7 +287,7 @@ TotalVente=Total turnover before tax TotalMarge=Total sales margin DescVentilCustomer=Hisoblar jadvalidan mahsulot hisobiga bog'langan (yoki bog'lanmagan) mijozlar hisob-fakturalari ro'yxatini shu yerda ko'ring. -DescVentilMore=Aksariyat hollarda, agar siz oldindan belgilangan mahsulot yoki xizmatlardan foydalansangiz va mahsulot/xizmat kartasida hisobni (hisob jadvalidan) o'rnatgan bo'lsangiz, dastur hisob-faktura satrlari va jadvalingizning buxgalteriya hisobi o'rtasidagi barcha bog'lanishlarni amalga oshirishi mumkin. bir marta bosish bilan "%s"b0a65d071f6spanfc90z >. Agar hisob mahsulot/xizmat kartalarida oʻrnatilmagan boʻlsa yoki sizda hali ham hisobga bogʻlanmagan qatorlar mavjud boʻlsa, “%s". +DescVentilMore=In most cases, if you use predefined products or services and you set the account (from chart of account) on the product/service card, the application will be able to make all the binding between your invoice lines and the accounting account of your chart of accounts, just in one click with the button "%s". If account was not set on product/service cards or if you still have some lines not bound to an account, you will have to make a manual binding from the menu "%s". DescVentilDoneCustomer=Bu yerda mijozlar hisob-fakturalari qatorlari ro‘yxati va hisoblar jadvalidagi mahsulot hisobi bilan tanishing DescVentilTodoCustomer=Hisoblar jadvalidan mahsulot hisobi bilan bog'lanmagan hisob-faktura qatorlarini bog'lang ChangeAccount=Tanlangan qatorlar uchun mahsulot/xizmat hisobini (hisob jadvalidan) quyidagi hisob bilan o'zgartiring: @@ -352,7 +352,7 @@ ACCOUNTING_DISABLE_BINDING_ON_SALES=Sotish bo'yicha buxgalteriyada majburiy va o ACCOUNTING_DISABLE_BINDING_ON_PURCHASES=Xaridlar bo'yicha buxgalteriyada majburiy va o'tkazishni o'chirib qo'ying (sotuvchi hisob-kitoblari buxgalteriya hisobida hisobga olinmaydi) ACCOUNTING_DISABLE_BINDING_ON_EXPENSEREPORTS=Xarajatlar hisobotlari bo'yicha buxgalteriyada majburiy va o'tkazishni o'chirib qo'ying (xarajatlar hisoboti buxgalteriya hisobida hisobga olinmaydi) ACCOUNTING_ENABLE_LETTERING=Buxgalteriya hisobida harflar funksiyasini yoqing -ACCOUNTING_ENABLE_LETTERING_DESC=Ushbu parametr yoqilganda, siz har bir buxgalteriya yozuvida turli xil buxgalteriya harakatlarini guruhlashingiz uchun kodni belgilashingiz mumkin. Ilgari, turli jurnallar mustaqil ravishda boshqarilsa, bu xususiyat turli jurnallarning harakat chiziqlarini birlashtirish uchun zarur edi. Biroq, Dolibarr buxgalteriyasi bilan bunday kuzatuv kodi "%sb09a4b739fz01f deb ataladi. span>" allaqachon avtomatik tarzda saqlangan, shuning uchun avtomatik harflar allaqachon bajarilgan, xatolik xavfi yo'q, shuning uchun bu xususiyat umumiy foydalanish uchun foydasiz bo'lib qoldi. Qo'lda harf yozish xususiyati buxgalteriya hisobidagi ma'lumotlarni uzatishni amalga oshiradigan kompyuter dvigateliga haqiqatan ham ishonmaydigan oxirgi foydalanuvchilar uchun taqdim etiladi. +ACCOUNTING_ENABLE_LETTERING_DESC=When this options is enabled, you can define, on each accounting entry, a code so you can group different accounting movements together. In the past, when different journals was managed independently, this feature was necessary to group movement lines of different journals together. However, with Dolibarr accountancy, such a tracking code, called "%s" is already saved automatically, so an automatic lettering is already done, with no risk of error so this feature has become useless for a common usage. Manual lettering feature is provided for end users that really don't trust the computer engine making the transfer of data in accountancy. EnablingThisFeatureIsNotNecessary=Bu xususiyatni yoqish buxgalteriya hisobini jiddiy boshqarish uchun endi zarur emas. ACCOUNTING_ENABLE_AUTOLETTERING=Buxgalteriya hisobiga o'tishda avtomatik harflarni yoqish ACCOUNTING_ENABLE_AUTOLETTERING_DESC=Harf uchun kod avtomatik ravishda yaratiladi va oshiriladi va oxirgi foydalanuvchi tomonidan tanlanmaydi @@ -360,7 +360,7 @@ ACCOUNTING_LETTERING_NBLETTERS=Harf kodini yaratishda harflar soni (standart 3) ACCOUNTING_LETTERING_NBLETTERS_DESC=Ba'zi buxgalteriya dasturlari faqat ikki harfli kodni qabul qiladi. Ushbu parametr ushbu jihatni o'rnatishga imkon beradi. Harflarning standart soni uchtadir. OptionsAdvanced=Kengaytirilgan variantlar ACCOUNTING_FORCE_ENABLE_VAT_REVERSE_CHARGE=Yetkazib beruvchining xaridlari uchun QQS teskari to'lovini boshqarishni faollashtiring -ACCOUNTING_FORCE_ENABLE_VAT_REVERSE_CHARGE_DESC=Ushbu parametr yoqilgan bo'lsa, siz yetkazib beruvchi yoki ma'lum bir sotuvchi hisob-fakturasini buxgalteriya hisobiga boshqacha tarzda o'tkazish kerakligini belgilashingiz mumkin: "<" da belgilangan hisoblar rejasidan 2 ta hisobvaraq bo'yicha buxgalteriya hisobiga qo'shimcha debet va kredit liniyasi hosil bo'ladi. span class='notranslate'>%s" sozlash sahifasi. +ACCOUNTING_FORCE_ENABLE_VAT_REVERSE_CHARGE_DESC=When this option is enabled, you can define that a supplier or a given vendor invoice must be transferred into accountancy differently: A additional debit and a credit line will generated into the accounting on 2 given accounts from the chart of account defined into the "%s" setup page. ## Export NotExportLettering=Faylni yaratishda harflarni eksport qilmang diff --git a/htdocs/langs/uz_UZ/admin.lang b/htdocs/langs/uz_UZ/admin.lang index 11732df3ce1..de8754cc081 100644 --- a/htdocs/langs/uz_UZ/admin.lang +++ b/htdocs/langs/uz_UZ/admin.lang @@ -366,9 +366,9 @@ GenericMaskCodes2= {cccc} n kodidagi mijoz kodi
{cccc000} a09a GenericMaskCodes3=Maskadagi barcha boshqa belgilar buzilmasdan qoladi.
bo'sh joylarga ruxsat berilmaydi.
GenericMaskCodes3EAN=Maskadagi barcha boshqa belgilar buzilmasdan qoladi (* yoki "EAN13" ning 13-pozitsiyasidan tashqari).
bo'sh joylarga ruxsat berilmaydi.
EAN13 da 13-o'rinda oxirgi} dan keyin oxirgi belgi * yoki bo'lishi kerak? . U hisoblangan kalit bilan almashtiriladi.
GenericMaskCodes4a=31-01-2023 sanasi bilan uchinchi tomon TheCompany kompaniyasining 99-chi %sdagi misol:
-GenericMaskCodes4b=31-01-2023-yilda uchinchi tomonda yaratilgan misol:b0342fccfda19b > -GenericMaskCodes4c=2023-01-31 da yaratilgan mahsulotga misol:b0342fccfda19b -GenericMaskCodes5=ABC{yy}{mm}-{000000} b0aee833608ABC2301-000099

b0aee83365837{100@ }-ZZZ/{dd}/XXX
0199-ZZZ/31/XXX

IN{yy}{mm}-{0000}-{t}, agar kompaniya turi bo'lsa, IN2301-0099-Ab09a4b739f17f8z beradi. "A_RI" turi uchun kodli "Ma'suliyatli Inscripto" +GenericMaskCodes4b=Example on third party created on 2023-01-31:
+GenericMaskCodes4c=Example on product created on 2023-01-31:
+GenericMaskCodes5=ABC{yy}{mm}-{000000} will give ABC2301-000099
{0000+100@1}-ZZZ/{dd}/XXX will give 0199-ZZZ/31/XXX
IN{yy}{mm}-{0000}-{t} will give IN2301-0099-A if the type of company is 'Responsable Inscripto' with code for type that is 'A_RI' GenericNumRefModelDesc=Belgilangan niqobga ko'ra moslashtirilgan raqamni qaytaradi. ServerAvailableOnIPOrPort=Server %s manzilida %s ServerNotAvailableOnIPOrPort=Server %s manzilida %s manzilida mavjud emas @@ -464,7 +464,7 @@ ExtrafieldParamHelpPassword=Bu maydonni boʻsh qoldirish, bu qiymat shifrlashSIZ ExtrafieldParamHelpselect=Qadriyatlar ro'yxati format bo'lishi kerak, bu erda kalit '0' bo'lishi mumkin emas
masalan:
2, value2
boshqa to'ldiruvchi xususiyati ro'yxatida qarab ro'yxati:
1, VALUE1 | options_ parent_list_code : parent_key
2, değer2 | options_ parent_list_code : maqsadida parent_key

boshqa ro'yxatiga qarab ro'yxatini ega bo'lishi:
1, VALUE1 | parent_list_code : parent_key
2, value2 | parent_list_code : parent_key ExtrafieldParamHelpcheckbox=Qadriyatlar ro'yxati format kaliti bo'lgan satrlardan iborat bo'lishi kerak, (agar bu erda '0' bo'lishi mumkin emas)

masalan:
1, value1
2, value2
3 ,03f03f ExtrafieldParamHelpradio=Qadriyatlar ro'yxati format kaliti bo'lgan satrlardan iborat bo'lishi kerak, (agar bu erda '0' bo'lishi mumkin emas)

masalan:
1, value1
2, value2
3 ,03f03f -ExtrafieldParamHelpsellist=Qiymatlar roʻyxati jadvaldan olingan
Sintaksis: table_name:label_field:id_field::filtersql
Misol: c_typent: ::filtersql

- id_field birlamchi int kalitidirb0342fcczfda19> - filtersql - bu SQL sharti. Bu faqat faol qiymatni ko'rsatish uchun oddiy sinov (masalan, active=1) bo'lishi mumkin
Shuningdek, joriy ob'ekt
Filtrda SELECTdan foydalanish uchun in'ektsiyaga qarshi himoyani chetlab o'tish uchun $SEL$ kalit so'zidan foydalaning.
agar siz qo'shimcha maydonlarda filtrlashni xohlasangiz extra.fieldcode=... sintaksisidan foydalaning (bu erda maydon kodi - ekstrafield kodi)

boshqa qo'shimcha atributlar ro'yxatiga qarab ro'yxat:
c_typent:libelle:id:options_parent_list_codeb0ae64758baclum>0333 +ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filtersql
Example: c_typent:libelle:id::filtersql

- id_field is necessarily a primary int key
- filtersql is a SQL condition. It can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter which is the current id of current object
To use a SELECT into the filter use the keyword $SEL$ to bypass anti-injection protection.
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=Qadriyatlar ro'yxati
jadvalidan olingan Sintaksis: table_name: label_field: id_field :: filtersql
Misol: c_typent: libelle: id :: filtersql

filter faqat oddiy bo'lishi mumkin jodugarda $ ID $ ni ishlatishi mumkin, bu joriy ob'ektning identifikatori
Filtrda SELECT qilish uchun $ SEL $
dan foydalaning, agar ekstra maydonlarda filtrlashni xohlasangiz, sintaksisidan foydalaning. extra.fieldcode = ... (bu erda maydon kodi extrafield kodi)

boshqa to'ldiruvchi xususiyati ro'yxatida qarab ro'yxatini bo'lishi uchun:
c_typent: libelle: id: options_ parent_list_code | parent_column: filtri

boshqa ro'yxatiga qarab ro'yxatini ega bo'lish uchun:
c_typent: libelle: id: parent_list_code | parent_column: filter ExtrafieldParamHelplink=Parametrlar ObjectName: Classpath
sintaksis: ObjectName: Classpath bo'lishi kerak ExtrafieldParamHelpSeparator=
oddiy ajratuvchisi uchun bo'sh joyni saqlang holat har bir foydalanuvchi seansida saqlanadi) @@ -1197,6 +1197,7 @@ Skin=Teri mavzusi DefaultSkin=Standart teri mavzusi MaxSizeList=Ro'yxat uchun maksimal uzunlik DefaultMaxSizeList=Ro'yxatlar uchun standart maksimal uzunlik +DisplayGrandTotalInList=Display grand total (for all pages) in lists footer DefaultMaxSizeShortList=Qisqa ro'yxatlar uchun standart maksimal uzunlik (ya'ni mijozlar kartasida) MessageOfDay=Kunning xabari MessageLogin=Kirish sahifasidagi xabar @@ -1860,7 +1861,7 @@ PastDelayVCalExport=Eskiroq voqeani eksport qilmang SecurityKey = Elektron kalit ##### ClickToDial ##### ClickToDialSetup=To Dial modulini o'rnatish uchun bosing -ClickToDialUrlDesc=Telefon piktogrammasi bosilganda URL chaqiriladi. URL manzilida siz teglardan foydalanishingiz mumkin
__PHONETO__b09a4b739f17f80 bo'ladi qo'ng'iroq qilish uchun shaxsning telefon raqami bilan almashtirildi
__PHONEFROM__b09a4b739f017 qo'ng'iroq qilayotgan shaxsning telefon raqami (sizniki) bilan almashtiriladi
__LOGIN__b09a4170z span> bu klik orqali kirish bilan almashtiriladi (foydalanuvchi kartasida belgilangan)
__PASS__ bu tugmani bosish paroli bilan almashtiriladi (foydalanuvchi kartasida belgilangan). +ClickToDialUrlDesc=URL called when a click on phone picto is done. In URL, you can use tags
__PHONETO__ that will be replaced with the phone number of person to call
__PHONEFROM__ that will be replaced with phone number of calling person (yours)
__LOGIN__ that will be replaced with clicktodial login (defined on user card)
__PASS__ that will be replaced with clicktodial password (defined on user card). ClickToDialDesc=Ushbu modul statsionar kompyuterdan foydalanilganda telefon raqamlarini bosish mumkin bo'lgan havolalarga o'zgartiradi. Bir marta bosish raqamga qo'ng'iroq qiladi. Bu ish stolida yumshoq telefondan foydalanilganda yoki masalan, SIP protokoliga asoslangan CTI tizimidan foydalanilganda telefon qo'ng'irog'ini boshlash uchun ishlatilishi mumkin. Eslatma: Smartfondan foydalanganda telefon raqamlari doim bosilishi mumkin. ClickToDialUseTelLink=Telefon raqamlarida faqat "tel:" havolasidan foydalaning ClickToDialUseTelLinkDesc=Agar sizning foydalanuvchilaringiz brauzer bilan bir xil kompyuterda o'rnatilgan va brauzeringizda "tel:" bilan boshlangan havolani bosganingizda qo'ng'iroq qiladigan dasturiy ta'minot yoki dasturiy ta'minot interfeysi bo'lsa, ushbu usuldan foydalaning. Agar sizga "sip:" bilan boshlanadigan havola yoki serverning to'liq echimi kerak bo'lsa (mahalliy dasturiy ta'minotni o'rnatishga hojat yo'q), buni "Yo'q" deb belgilashingiz va keyingi maydonni to'ldirishingiz kerak. @@ -2291,7 +2292,7 @@ APIsAreNotEnabled=API modullari yoqilmagan YouShouldSetThisToOff=Buni 0 ga yoki o'chirib qo'yishingiz kerak InstallAndUpgradeLockedBy=O'rnatish va yangilanishlar %s fayli bilan qulflangan. InstallLockedBy=Oʻrnatish/qayta oʻrnatish %s fayli tomonidan bloklangan. -InstallOfAddonIsNotBlocked=Qo'shimchalarning o'rnatilishi qulflanmagan. installmodules.lock faylini b0aee83365837fz%s
tashqi qoʻshimchalar/modullarni oʻrnatishni bloklash. +InstallOfAddonIsNotBlocked=Installations of addons are not locked. Create a file installmodules.lock into directory %s to block installations of external addons/modules. OldImplementation=Eski dastur PDF_SHOW_LINK_TO_ONLINE_PAYMENT=Agar ba'zi onlayn to'lov modullari yoqilgan bo'lsa (Paypal, Stripe, ...), onlayn to'lovni amalga oshirish uchun PDF -ga havola qo'shing. DashboardDisableGlobal=Butun dunyo bo'ylab ochiq narsalarning bosh barmog'ini o'chirib qo'ying @@ -2405,8 +2406,8 @@ NotAvailableByDefaultEnabledOnModuleActivation=Sukut bo'yicha yaratilmagan. Faqa CSSPage=CSS uslubi Defaultfortype=Standart DefaultForTypeDesc=Shablon turi uchun yangi elektron pochta yaratishda sukut bo'yicha qo'llaniladigan shablon -OptionXShouldBeEnabledInModuleY="%s" varianti %s -OptionXIsCorrectlyEnabledInModuleY="%s" varianti %s +OptionXShouldBeEnabledInModuleY=Option "%s" should be enabled into module %s +OptionXIsCorrectlyEnabledInModuleY=Option "%s" is enabled into module %s AllowOnLineSign=Onlayn imzoga ruxsat berish AtBottomOfPage=Sahifaning pastki qismida FailedAuth=muvaffaqiyatsiz autentifikatsiyalar @@ -2433,3 +2434,12 @@ UrlPublicInterfaceHelpAdmin=It is possible to define an alias to the web server ExportUseForce=Use the parameter -f ExportUseForceHelp=Force to continue the export even when an error is found (Backup may not be reliable) CustomPrompt=Custom prompts +AiDescription=AI (Artificial Intelligence) features +AiDescriptionLong=Provides AI (Artificial Intelligence) features in different part of the application. Need external AI API. +AI_KEY_API_CHATGPT= Key for ChatGPT IA api +AiSetup=AI module setup +AiCustomPrompt=AI customs prompt +AI_CONFIGURATIONS_PROMPT=Custom prompt +ImageGeneration=Image generation +AIPromptForFeatures=AI custom prompts for features +EnterAnIP=Enter an IP address diff --git a/htdocs/langs/uz_UZ/assets.lang b/htdocs/langs/uz_UZ/assets.lang index 9c78f7235d5..63ca936f84f 100644 --- a/htdocs/langs/uz_UZ/assets.lang +++ b/htdocs/langs/uz_UZ/assets.lang @@ -122,7 +122,6 @@ AssetDepreciationOptionDepreciationTypeLinear=Chiziqli AssetDepreciationOptionDepreciationTypeDegressive=Degressiv AssetDepreciationOptionDepreciationTypeExceptional=Istisno AssetDepreciationOptionDegressiveRate=Degressiv stavka -AssetDepreciationOptionAcceleratedDepreciation=Tezlashtirilgan amortizatsiya (soliq) AssetDepreciationOptionDuration=Davomiyligi AssetDepreciationOptionDurationType=Tur muddati AssetDepreciationOptionDurationTypeAnnual=Yillik diff --git a/htdocs/langs/uz_UZ/bills.lang b/htdocs/langs/uz_UZ/bills.lang index 4baaebe14e6..15caa29276d 100644 --- a/htdocs/langs/uz_UZ/bills.lang +++ b/htdocs/langs/uz_UZ/bills.lang @@ -188,7 +188,7 @@ SuppliersDraftInvoices=Xaridor hisob-fakturalari Unpaid=To'lanmagan ErrorNoPaymentDefined=Xato To'lov aniqlanmadi ConfirmDeleteBill=Ushbu hisob-fakturani o'chirishni xohlaysizmi? -ConfirmValidateBill=Haqiqatan ham bu fakturani %s havolasi bilan tasdiqlamoqchimisiz >? +ConfirmValidateBill=Are you sure you want to validate this invoice with the reference %s? ConfirmUnvalidateBill=Hisob-fakturani %s holatini qoralama holatiga o'zgartirishni xohlaysizmi? ConfirmClassifyPaidBill=Hisob-fakturani %s ni to'langan holatga o'zgartirishni xohlaysizmi? ConfirmCancelBill=Hisob-fakturani bekor qilishni xohlaysizmi %s ? @@ -571,7 +571,7 @@ PDFCrevetteDescription=Hisob-fakturaning PDF shablonini Crevette. Vaziyat-faktur TerreNumRefModelDesc1=Qaytariladigan raqam standart invoyslar uchun %syymm-nnnn va kredit eslatmalari uchun %syymm-nnnn formatida, yy yil, mm - oy va nnnn - uzilishsiz va 0 ga qaytmaydigan ketma-ket avtomatik oshiruvchi raqam MarsNumRefModelDesc1=Qaytish raqami %sstandart hisob-fakturalar uchun yymm-nnnn, almashtiriladigan hisob-fakturalar uchun %syymm-nnnn, %syymm-nnnn dastlabki toʻlov hisob-fakturalari uchun va %syymm-nnnn kredit notalari uchun bu erda yy yil, mm oy va nnnn ketma-ket avtomatik tanaffussiz va 0 ga qaytmaydigan sonni oshirish TerreNumRefModelError=$ Syymm bilan boshlangan qonun loyihasi allaqachon mavjud va ushbu ketma-ketlik modeliga mos kelmaydi. Ushbu modulni faollashtirish uchun uni olib tashlang yoki nomini o'zgartiring. -CactusNumRefModelDesc1=Qaytish raqami %sstandart hisob-fakturalar uchun yymm-nnnn, kredit eslatmalari uchun %syymm-nnnn va %syymm-nnnn avans to‘lov schyot-fakturalari uchun bu yerda yy yil, mm oy va nnnn uzilishsiz va 0 ga qaytmaydigan ketma-ket avtomatik oshiruvchi raqamdir. +CactusNumRefModelDesc1=Return number in the format %syymm-nnnn for standard invoices, %syymm-nnnn for credit notes and %syymm-nnnn for down payment invoices where yy is year, mm is month and nnnn is a sequential auto-incrementing number with no break and no return to 0 EarlyClosingReason=Erta yopilish sababi EarlyClosingComment=Erta yopilish eslatmasi ##### Types de contacts ##### diff --git a/htdocs/langs/uz_UZ/cashdesk.lang b/htdocs/langs/uz_UZ/cashdesk.lang index 97bbf3bf6c4..46274bd2722 100644 --- a/htdocs/langs/uz_UZ/cashdesk.lang +++ b/htdocs/langs/uz_UZ/cashdesk.lang @@ -136,7 +136,7 @@ PrintWithoutDetailsLabelDefault=Tafsilotlarsiz chop etishda satr yorlig'i sukut PrintWithoutDetails=Tafsilotlarsiz chop eting YearNotDefined=Yil aniqlanmagan TakeposBarcodeRuleToInsertProduct=Mahsulotni kiritish uchun shtrix kod qoidasi -TakeposBarcodeRuleToInsertProductDesc=Skanerlangan shtrix-koddan mahsulot maʼlumotnomasi + miqdorni chiqarish qoidasi.
Agar boʻsh boʻlsa (standart qiymat), ilova mahsulotni topish uchun skanerlangan toʻliq shtrix-koddan foydalanadi.

Agar aniqlangan bo'lsa, sintaksis quyidagicha bo'lishi kerak:
notranslate class='notranslate
ref:NB+qu:NB+qd:NB+other:NB
bu yerda skanerlangan shtrix-koddan maʼlumotlarni chiqarish uchun foydalaniladigan belgilar soni:
refb09a4b78z1f : mahsulot ma'lumoti
qu: elementni (birliklarni) kiritishda oʻrnatish elementni (oʻnlik kasr) kiritishda oʻrnatish
boshqab09a4b739f17f8>zs. +TakeposBarcodeRuleToInsertProductDesc=Rule to extract the product reference + a quantity from a scanned barcode.
If empty (default value), application will use the full barcode scanned to find the product.

If defined, syntax must be:
ref:NB+qu:NB+qd:NB+other:NB
where NB is the number of characters to use to extract data from the scanned barcode with:
ref : product reference
qu : quantity to set when inserting item (units)
qd : quantity to set when inserting item (decimals)
other : others characters AlreadyPrinted=Allaqachon chop etilgan HideCategories=Kategoriyalar tanlovining butun qismini yashirish HideStockOnLine=Onlayn zaxiralarni yashirish diff --git a/htdocs/langs/uz_UZ/compta.lang b/htdocs/langs/uz_UZ/compta.lang index a4807040306..d3988da7b66 100644 --- a/htdocs/langs/uz_UZ/compta.lang +++ b/htdocs/langs/uz_UZ/compta.lang @@ -178,7 +178,7 @@ AnnualByCompaniesDueDebtMode=Daromadlar va xarajatlar balansi, oldindan aniqlang AnnualByCompaniesInputOutputMode=Daromadlar va xarajatlar balansi, oldindan belgilangan guruhlar bo'yicha tafsilotlar, %sInomes-Exenses%s dedi pul buxgalteriyasi a09a4b73. SeeReportInInputOutputMode= %s to'lovni tahlil qilishs%s ga asoslanib, asosida yozilgan to'lovlarni ko'ring , agar ular amalga oshirilmagan bo'lsa ham SeeReportInDueDebtMode= %s yozilgan hujjatlarni tahlil qilish %s ga asoslanib, ma'lum yozilgan hujjatlar even ifed -SeeReportInBookkeepingMode=Qarang: %sbuxgalteriya hisobi jadvali tahlili%s Buxgalteriya hisobi jadvali asosidagi hisobot uchun notranslate'>
+SeeReportInBookkeepingMode=See %sanalysis of bookkeeping ledger table%s for a report based on Bookkeeping Ledger table RulesAmountWithTaxIncluded=- Ko'rsatilgan summalar barcha soliqlarni hisobga olgan holda RulesAmountWithTaxExcluded=- Ko'rsatilgan schyot-fakturalar summalari barcha soliqlarsiz RulesResultDue=- Unga barcha hisob-fakturalar, xarajatlar, QQS, xayriyalar, maoshlar, ular to‘langan yoki to‘lanmaganligi kiradi.
- Bu schyot-fakturalarning hisob-kitob sanasiga va xarajatlar yoki soliq to'lovlari uchun to'lov sanasiga asoslanadi. Ish haqi uchun muddat tugash sanasi qo'llaniladi. diff --git a/htdocs/langs/uz_UZ/cron.lang b/htdocs/langs/uz_UZ/cron.lang index 48c7424f311..207e9e16e55 100644 --- a/htdocs/langs/uz_UZ/cron.lang +++ b/htdocs/langs/uz_UZ/cron.lang @@ -1,6 +1,5 @@ # Dolibarr language file - Source file is en_US - cron -# About page -# Right +# Permissions Permission23101 = Rejalashtirilgan ishni o'qing Permission23102 = Rejalashtirilgan ishni yaratish / yangilash Permission23103 = Rejalashtirilgan ishni o'chirish @@ -67,7 +66,7 @@ CronModuleHelp=Dolibarr moduli katalogining nomi (tashqi Dolibarr moduli bilan h CronClassFileHelp=Yuklanadigan nisbiy yo'l va fayl nomi (yo'l veb-serverning ildiz katalogiga nisbatan).
Masalan, Dolibarr Product ob'ektini olish usulini chaqirish uchun htdocs / product / class / product.class.php , sinf fayli nomi uchun qiymati
a049271ecaf / product07f.c8f CronObjectHelp=Yuklanadigan ob'ekt nomi.
Masalan, Dolibarr Product ob'ektini olish usulini chaqirish uchun CronMethodHelp=Ob'ektni ishga tushirish usuli.
Masalan, Dolibarr Product ob'ektini olish usulini chaqirish uchun -CronArgsHelp=Usul argumentlari.
Masalan, Dolibarr mahsuloti obyektining /htdocs/product/class/product.class.php olish usulini chaqirish uchun parametrlar qiymati
0, ProductRef +CronArgsHelp=The method arguments.
For example to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for parameters can be
0, ProductRef CronCommandHelp=Amalga oshirish uchun tizim buyruq satri. CronCreateJob=Yangi Rejalashtirilgan ish yarating CronFrom=Kimdan diff --git a/htdocs/langs/uz_UZ/errors.lang b/htdocs/langs/uz_UZ/errors.lang index cd74e7fc166..fe8efb660aa 100644 --- a/htdocs/langs/uz_UZ/errors.lang +++ b/htdocs/langs/uz_UZ/errors.lang @@ -95,7 +95,7 @@ ErrorModuleRequireJavascript=Bu funksiya ishlashi uchun JavaScript oʻchirib qo ErrorPasswordsMustMatch=Yozilgan har ikkala parol bir-biriga mos kelishi kerak ErrorContactEMail=Texnik xatolik yuz berdi. Iltimos, quyidagi e-pochta manziliga administrator bilan bog'laning %s va xatoni kiriting. Xabaringizda %s kodi yoki ekran nusxasini qo‘shing bu sahifa. ErrorWrongValueForField=Maydon %s : ' %s ' regex qoida %s -ErrorHtmlInjectionForField=Maydon %s: qiymati ''notranslate= '>
%s' ruxsat etilmagan zararli maʼlumotlarni oʻz ichiga oladi +ErrorHtmlInjectionForField=Field %s: The value '%s' contains a malicious data not allowed ErrorFieldValueNotIn=Dala %s : « %s " bir qiymati dala %s topilmadi %s ErrorFieldRefNotIn=Maydon %s : ' %s ' %s emas ErrorMultipleRecordFoundFromRef=%s dan qidirilayotganda bir nechta yozuv topildi. Qaysi identifikatordan foydalanishni bilishning iloji yo'q. @@ -263,7 +263,7 @@ ErrorReplaceStringEmpty=Xato, o'rnini bosadigan satr bo'sh ErrorProductNeedBatchNumber=Xato, ' %s ' mahsulotiga juda ko'p / seriya raqami kerak ErrorProductDoesNotNeedBatchNumber=Xato, ' %s ' mahsuloti ko'p / seriya raqamini qabul qilmaydi ErrorFailedToReadObject=Xato, %s turidagi ob'ekt o'qilmadi -ErrorParameterMustBeEnabledToAllwoThisFeature=Xato, %s parametri conf/conf.php<> ichki ish rejalashtiruvchisi tomonidan buyruq qatori interfeysidan foydalanishga ruxsat berish +ErrorParameterMustBeEnabledToAllwoThisFeature=Error, parameter %s must be enabled into conf/conf.php<> to allow use of Command Line Interface by the internal job scheduler ErrorLoginDateValidity=Xato, ushbu kirish amal qilish muddati oralig'ida emas ErrorValueLength=' %s ' maydonining uzunligi ' %s ' dan yuqori bo'lishi kerak ErrorReservedKeyword=' %s ' so'zi zaxiralangan kalit so'z @@ -311,7 +311,7 @@ ErrorValueCantBeNull=%s uchun qiymat null bo‘lishi mumkin emas ErrorDateOfMovementLowerThanDateOfFileTransmission=Bank operatsiyasining sanasi faylni yuborish sanasidan past bo'lishi mumkin emas ErrorTooMuchFileInForm=Formadagi fayllar juda koʻp, maksimal soni %s fayl(lar) ErrorSessionInvalidatedAfterPasswordChange=Parol, elektron pochta manzili, holat yoki amal qilish sanasi oʻzgargandan keyin sessiya bekor qilingan. Iltimos, qayta kiring. -ErrorExistingPermission = Ruxsat %s %s . DataComeFromNoWhere=Qo'shish uchun qiymat manba faylida yo'q. DataComeFromFileFieldNb=Qo'shiladigan qiymat manba faylidagi %s ustunidan olinadi. DataComeFromIdFoundFromRef=Manba faylidan keladigan qiymat foydalaniladigan asosiy ob'ektning identifikatorini topish uchun ishlatiladi (shuning uchun ob'ekt %s manba faylidan olingan koʻrsatma maʼlumotlar bazasida boʻlishi kerak). -DataComeFromIdFoundFromCodeId=Manba faylidan keladigan kod qiymati foydalaniladigan asosiy ob'ekt identifikatorini topish uchun ishlatiladi (shuning uchun manba fayldagi kod %s). E'tibor bering, agar siz identifikatorni bilsangiz, uni kod o'rniga manba faylida ham ishlatishingiz mumkin. Import ikkala holatda ham ishlashi kerak. +DataComeFromIdFoundFromCodeId=The value of code that comes from source file will be used to find the id of the parent object to use (so the code from source file must exist in the dictionary %s). Note that if you know the id, you can also use it in the source file instead of the code. Import should work in both cases. DataIsInsertedInto=Dastlabki fayldan olingan ma'lumotlar quyidagi maydonga kiritiladi: DataIDSourceIsInsertedInto=Manba faylidagi ma'lumotlar yordamida topilgan asosiy ob'ektning identifikatori quyidagi maydonga kiritiladi: DataCodeIDSourceIsInsertedInto=Koddan topilgan ota -onaning identifikatori quyidagi maydonga kiritiladi: diff --git a/htdocs/langs/uz_UZ/mails.lang b/htdocs/langs/uz_UZ/mails.lang index 2c803f4b6d1..f975342c053 100644 --- a/htdocs/langs/uz_UZ/mails.lang +++ b/htdocs/langs/uz_UZ/mails.lang @@ -182,12 +182,12 @@ IsAnAnswer=Dastlabki elektron pochtaning javobi RecordCreatedByEmailCollector=%s elektron pochtasidan elektron pochta yig'uvchisi %s tomonidan yaratilgan yozuv DefaultBlacklistMailingStatus=Yangi kontakt yaratishda "%s" maydonining standart qiymati DefaultStatusEmptyMandatory=Bo'sh, ammo majburiy -WarningLimitSendByDay=OGOHLANTIRISH: Namunangizni sozlash yoki shartnomasi kunlik xatlar soningizni %s
. Koʻproq yuborishga urinish misolingiz sekinlashishiga yoki toʻxtatilishiga olib kelishi mumkin. Agar sizga kattaroq kvota kerak bo'lsa, qo'llab-quvvatlash xizmatiga murojaat qiling. +WarningLimitSendByDay=WARNING: The setup or contract of your instance limits your number of emails per day to %s. Trying to send more may result in having your instance slow down or suspended. Please contact your support if you need a higher quota. NoMoreRecipientToSendTo=E-pochtani yuborish uchun boshqa qabul qiluvchi yo'q EmailOptedOut=E-pochta egasi u bilan endi bu xat orqali bog‘lanmaslikni so‘radi EvenUnsubscribe=O'chirish xatlarini ham qo'shing EvenUnsubscribeDesc=Maqsad sifatida elektron pochta xabarlarini tanlaganingizda, rad etish xatlarini qo'shing. Masalan, majburiy elektron pochta xabarlari uchun foydalidir. -XEmailsDoneYActionsDone=%s e-pochta xatlari oldindan malakali, %s xatlar muvaffaqiyatli qayta ishlandi (%s uchun) /bajarilgan harakatlar) +XEmailsDoneYActionsDone=%s emails pre-qualified, %s emails successfully processed (for %s record/actions done) helpWithAi=Generate message from AI YouCanMakeSomeInstructionForEmail=You can make some instructions for your Email (Example: generate image in email template...) ModelTemplate=Email template diff --git a/htdocs/langs/uz_UZ/main.lang b/htdocs/langs/uz_UZ/main.lang index 86c2446086c..4d772dbfad4 100644 --- a/htdocs/langs/uz_UZ/main.lang +++ b/htdocs/langs/uz_UZ/main.lang @@ -420,6 +420,8 @@ TotalTTCShort=Jami (soliq bilan birga) TotalHT=Jami (soliqdan tashqari) TotalHTforthispage=Ushbu sahifa uchun jami (soliqdan tashqari) Totalforthispage=Ushbu sahifa uchun jami +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=Jami (soliq bilan birga) TotalTTCToYourCredit=Sizning kreditingiz uchun jami (soliq) TotalVAT=Jami soliq @@ -647,6 +649,7 @@ ReportName=Hisobot nomi ReportPeriod=Hisobot davri ReportDescription=Tavsif Report=Hisobot +Reports=Reports Keyword=Kalit so'z Origin=Kelib chiqishi Legend=Afsona diff --git a/htdocs/langs/uz_UZ/modulebuilder.lang b/htdocs/langs/uz_UZ/modulebuilder.lang index a1c3f1383c7..c797d04b5c6 100644 --- a/htdocs/langs/uz_UZ/modulebuilder.lang +++ b/htdocs/langs/uz_UZ/modulebuilder.lang @@ -94,7 +94,7 @@ SeeExamples=Bu erda misollarni ko'ring EnabledDesc=Bu maydonni faollashtirish sharti.

Misollar:
1
isModEnabled('anothermodule')
getDolGlobalString('MYMODULE_OPTION')==2 VisibleDesc=Maydon ko'rinadimi? (Misollar: 0=Hech qachon koʻrinmaydi, 1=Roʻyxatda koʻrinadi va shakllarni yaratish/yangilash/koʻrish, 2=Faqat roʻyxatda koʻrinadi, 3=Faqat shakl yaratish/yangilash/koʻrishda koʻrinadi (roʻyxatlarda emas), 4=Roʻyxatlarda koʻrinadi va faqat shaklni yangilash/ko‘rish (yaratmaydi), 5=Ro‘yxatda ko‘rinadi va forma faqat ko‘rinadi (yaratmaydi, yangilanmaydi).

Salbiy qiymatdan foydalanish, bu maydon sukut boʻyicha roʻyxatda koʻrsatilmaydi, lekin koʻrish uchun tanlanishi mumkin). ItCanBeAnExpression=Bu ifoda bo'lishi mumkin. Misol:
preg_match('/public/', $_SERVER['PHP_SELF'])?0:1
$user ->hasRight('holiday', 'define_holiday')?1:5 -DisplayOnPdfDesc=Bu maydonni mos keluvchi PDF hujjatlarida ko‘rsating, siz “Joylashuv” maydoni bilan joylashuvni boshqarishingiz mumkin.
Hujjat uchun:
0 = ko'rsatilmaydi
1 = displey
b09b784 span>Hujjat qatorlari uchun:

0 = koʻrsatilmagan
= ustunda ko'rsatiladi
3 = tavsifdan keyin satr tavsifi ustunida ko'rsatiladi
4 = tavsifdan keyin tavsif ustunida ko'rsatiladi faqat bo'sh bo'lmasa +DisplayOnPdfDesc=Display this field on compatible PDF documents, you can manage position with "Position" field.
For document :
0 = not displayed
1 = display
2 = display only if not empty

For document lines :
0 = not displayed
1 = displayed in a column
3 = display in line description column after the description
4 = display in description column after the description only if not empty DisplayOnPdf=PDF formatida IsAMeasureDesc=Jami ro'yxatga kiritish uchun maydon qiymatini yig'ish mumkinmi? (Masalan: 1 yoki 0) SearchAllDesc=Ushbu maydon tezkor qidiruv vositasidan qidirish uchun foydalaniladimi? (Masalan: 1 yoki 0) @@ -148,7 +148,7 @@ CSSListClass=Ro'yxat uchun CSS NotEditable=Tahrirlash mumkin emas ForeignKey=Chet el kaliti ForeignKeyDesc=Agar ushbu maydonning qiymati boshqa jadvalda mavjudligi kafolatlangan bo'lsa. Bu yerga mos qiymat sintaksisini kiriting: tablename.parentfieldtocheck -TypeOfFieldsHelp=Misol:
varchar(99)
elektron pochta
telefon ='notranslate'>
ip
url
parolb span>double(24,8)
real
matn

date
datetime
vaqt tamg'asi
integer
integer:ClassName:relativepath/to/classfile.class.php[:1[:filter]]ccb01
'1' yozuv yaratish uchun kombinatsiyadan keyin + tugmasi qo'shilganligini bildiradi
'filtr Universal filtr sintaksisi sharti, misol: '((status:=:1) VA (fk_user:=:__USER_ID__) AND (obyekt:IN:(__SHARED_ENTITIES__))' +TypeOfFieldsHelp=Example:
varchar(99)
email
phone
ip
url
password
double(24,8)
real
text
html
date
datetime
timestamp
integer
integer:ClassName:relativepath/to/classfile.class.php[:1[:filter]]

'1' means we add a + button after the combo to create the record
'filter' is an Universal Filter syntax condition, example: '((status:=:1) AND (fk_user:=:__USER_ID__) AND (entity:IN:(__SHARED_ENTITIES__))' TypeOfFieldsHelpIntro=Bu maydon/atributning turi. AsciiToHtmlConverter=Ascii-dan HTML-ga o'zgartiruvchi AsciiToPdfConverter=Ascii-dan PDF-ga o'tkazuvchi @@ -180,7 +180,7 @@ FailedToAddCodeIntoDescriptor=Deskriptorga kod qo‘shib bo‘lmadi. Faylda “% DictionariesCreated=%s lug'ati muvaffaqiyatli yaratildi. DictionaryDeleted=%s lug'ati olib tashlandi. PropertyModuleUpdated=%s mulki muvaffaqiyatli yangilandi -InfoForApiFile=* Faylni birinchi marta yaratganingizda, har bir obyekt uchun barcha usullar yaratiladi.
* oʻchirishni bosganingizda ni bosganingizda, tanlangan obyekt. +InfoForApiFile=* When you generate file for the first time then all methods will be created for each object.
* When you click in remove you just remove all methods for the selected object. SetupFile=Modulni sozlash sahifasi EmailingSelectors=Emails selectors EmailingSelectorDesc=Ommaviy elektron pochta moduli uchun yangi elektron maqsadli tanlovchilarni taqdim etish uchun sinf fayllarini bu yerda yaratishingiz va tahrirlashingiz mumkin diff --git a/htdocs/langs/uz_UZ/oauth.lang b/htdocs/langs/uz_UZ/oauth.lang index cc95ac43594..2a44cd3481d 100644 --- a/htdocs/langs/uz_UZ/oauth.lang +++ b/htdocs/langs/uz_UZ/oauth.lang @@ -29,7 +29,7 @@ OAUTH_GOOGLE_SECRET=OAuth Google Secret OAUTH_GITHUB_NAME=OAuth GitHub xizmati OAUTH_GITHUB_ID=OAuth GitHub Id OAUTH_GITHUB_SECRET=OAuth GitHub Secret -OAUTH_URL_FOR_CREDENTIAL=bu sahifaga o'tingda yozilgan onlayn obuna %s
Asl IP-manzili: %s
Tranzaksiya identifikatori: +OnlineSubscriptionPaymentLine=Online subscription recorded on %s
Paid via %s
Originating IP address: %s
Transaction ID: %s diff --git a/htdocs/langs/uz_UZ/products.lang b/htdocs/langs/uz_UZ/products.lang index bd027e05832..d894ba6175f 100644 --- a/htdocs/langs/uz_UZ/products.lang +++ b/htdocs/langs/uz_UZ/products.lang @@ -433,4 +433,6 @@ ModifyValueExtrafields = Qo'shimcha maydonning qiymatini o'zgartirish OrProductsWithCategories=Yoki teglar/toifali mahsulotlar WarningTransferBatchStockMouvToGlobal = Agar siz ushbu mahsulotni seriyadan chiqarishni istasangiz, uning barcha seriyali zaxiralari global zaxiraga aylantiriladi WarningConvertFromBatchToSerial=Agar sizda mahsulot uchun 2 ga teng yoki kattaroq miqdor mavjud bo'lsa, ushbu tanlovga o'tish sizda bir xil partiyaning turli ob'ektlari bo'lgan mahsulotga ega bo'lishingizni anglatadi (agar siz noyob seriya raqamini xohlasangiz). Dublikat inventarizatsiya qilinmaguncha yoki uni tuzatish uchun qo'lda stok harakati amalga oshirilgunga qadar qoladi. +AllowStockMovementVariantParent=Also records stock movements on parent products of variant products +AllowStockMovementVariantParentHelp=By default, a parent of a variant is a virtual product, so no stock is managed for it. By enabling this option, a stock will be managed for parent products and each time a stock quantity is modified for a variant product, the same quantity will be modified for the parent product. You should not need this option, except if you are using variant to manage the same product than parent (but with different descriptions, prices...) ConfirmSetToDraftInventory=Haqiqatan ham qoralama holatiga qaytmoqchimisiz?
Hozirda inventarda oʻrnatilgan miqdorlar asliga qaytariladi. diff --git a/htdocs/langs/uz_UZ/receiptprinter.lang b/htdocs/langs/uz_UZ/receiptprinter.lang index 993c6c775d6..ce8c73eaaf2 100644 --- a/htdocs/langs/uz_UZ/receiptprinter.lang +++ b/htdocs/langs/uz_UZ/receiptprinter.lang @@ -10,6 +10,7 @@ ReceiptPrinterTemplateDesc=Shablonlarni sozlash ReceiptPrinterTypeDesc=Drayv turiga ko'ra "Parametrlar" maydoni uchun mumkin bo'lgan qiymatlarga misol ReceiptPrinterProfileDesc=Qabul qilish printeri profilining tavsifi ListPrinters=Printerlar ro'yxati +FromServerPointOfView=From the web server point of view. This method must be reachable from the web server hosting. SetupReceiptTemplate=Shablonni sozlash CONNECTOR_DUMMY=Dummy printer CONNECTOR_NETWORK_PRINT=Tarmoq printeri diff --git a/htdocs/langs/uz_UZ/receptions.lang b/htdocs/langs/uz_UZ/receptions.lang index d754acb8cc1..4ffa4e04f41 100644 --- a/htdocs/langs/uz_UZ/receptions.lang +++ b/htdocs/langs/uz_UZ/receptions.lang @@ -5,8 +5,6 @@ RefReception=Ref. ziyofat Reception=Qabul qilish Receptions=Qabullar AllReceptions=Barcha qabullar -Reception=Qabul qilish -Receptions=Qabullar ShowReception=Qabullarni ko'rsatish ReceptionsArea=Qabullar maydoni ListOfReceptions=Qabullar ro'yxati diff --git a/htdocs/langs/uz_UZ/resource.lang b/htdocs/langs/uz_UZ/resource.lang index 802c5fc9a5d..fa4aa2ac537 100644 --- a/htdocs/langs/uz_UZ/resource.lang +++ b/htdocs/langs/uz_UZ/resource.lang @@ -37,3 +37,5 @@ ImportDataset_resource_1=Resurslar ErrorResourcesAlreadyInUse=Ba'zi manbalardan foydalanilmoqda ErrorResourceUseInEvent=%s tadbirida ishlatiladigan %s + +MaxUsers=Maximum users (places, seats, etc.) diff --git a/htdocs/langs/uz_UZ/sendings.lang b/htdocs/langs/uz_UZ/sendings.lang index de41cbd95fc..c0d0c85e352 100644 --- a/htdocs/langs/uz_UZ/sendings.lang +++ b/htdocs/langs/uz_UZ/sendings.lang @@ -39,7 +39,7 @@ StatusSendingValidatedShort=Tasdiqlangan StatusSendingProcessedShort=Qayta ishlangan SendingSheet=Yuk jo'natmasi ConfirmDeleteSending=Ushbu yukni o'chirishni xohlaysizmi? -ConfirmValidateSending=Are you sure you want to validate this shipment with the reference %s? +ConfirmValidateSending=Haqiqatan ham bu jo‘natishni %s havolasi bilan tasdiqlamoqchimisiz ? ConfirmCancelSending=Ushbu yukni bekor qilmoqchi ekanligingizga aminmisiz? DocumentModelMerou=Merou A5 modeli WarningNoQtyLeftToSend=Ogohlantirish, jo'natilishini kutayotgan mahsulotlar yo'q. @@ -81,6 +81,6 @@ CreationOptions=Yukni yaratish vaqtida mavjud variantlar ShipmentDistribution=Yuklarni taqsimlash ErrorTooManyCombinationBatchcode=%s qatori uchun jo‘natma yo‘q, chunki ombor, mahsulot, partiya kodining juda ko‘p kombinatsiyasi topilmadi (%s). -ErrorNoCombinationBatchcode=%s qatorini ombor-mahsulot-lot/serial (%s, %s, %s) zaxirada topilmadi. +ErrorNoCombinationBatchcode=Could not save the line %s as the combination of warehouse-product-lot/serial (%s, %s, %s) was not found in stock. ErrorTooMuchShipped=Yuborilgan miqdor %s qatori uchun buyurtma qilingan miqdordan oshmasligi kerak diff --git a/htdocs/langs/uz_UZ/stocks.lang b/htdocs/langs/uz_UZ/stocks.lang index 89299483ea1..bf4f5f1e9ce 100644 --- a/htdocs/langs/uz_UZ/stocks.lang +++ b/htdocs/langs/uz_UZ/stocks.lang @@ -282,7 +282,7 @@ ModuleStockTransferName=Kengaytirilgan aktsiyalarni uzatish ModuleStockTransferDesc=O'tkazma varaqlarini yaratish bilan birja transferini ilg'or boshqarish StockTransferNew=Yangi aktsiyalarni o'tkazish StockTransferList=Birja o'tkazmalari ro'yxati -ConfirmValidateStockTransfer=Haqiqatan ham, bu aktsiyalarning transferini %s bilan tasdiqlamoqchimisiz span>? +ConfirmValidateStockTransfer=Are you sure you want to validate this stocks transfer with the reference %s ? ConfirmDestock=%s transferi bilan aksiyalar kamayishi ConfirmDestockCancel=%s transferi bilan aksiyalar kamayishini bekor qilish DestockAllProduct=Aksiyalarning kamayishi diff --git a/htdocs/langs/uz_UZ/users.lang b/htdocs/langs/uz_UZ/users.lang index 65067f0e741..3a96aa0e21c 100644 --- a/htdocs/langs/uz_UZ/users.lang +++ b/htdocs/langs/uz_UZ/users.lang @@ -133,4 +133,4 @@ HideAllPerms=Barcha ruxsat qatorlarini yashirish UserPublicPageDesc=Ushbu foydalanuvchi uchun virtual kartani yoqishingiz mumkin. Foydalanuvchi profili va shtrix-kodi bilan url mavjud bo'lib, u smartfonga ega bo'lgan har bir kishi uni skanerlashi va kontaktingizni manzillar kitobiga qo'shishi mumkin. EnablePublicVirtualCard=Foydalanuvchining virtual tashrifnomasini yoqing UserEnabledDisabled=Foydalanuvchi holati oʻzgardi: %s -AlternativeEmailForOAuth2=Alternative Email for OAuth2 login +AlternativeEmailForOAuth2=OAuth2 tizimiga kirish uchun muqobil elektron pochta diff --git a/htdocs/langs/uz_UZ/website.lang b/htdocs/langs/uz_UZ/website.lang index fd422e04533..f9e788323ea 100644 --- a/htdocs/langs/uz_UZ/website.lang +++ b/htdocs/langs/uz_UZ/website.lang @@ -63,8 +63,8 @@ YouCanEditHtmlSourceckeditor=HTML manba kodini tahrirlashdagi "Manba" tugmasi yo YouCanEditHtmlSource=
You can include PHP code into this source using tags <?php ?>. The following global variables are available: $conf, $db, $mysoc, $user, $website, $websitepage, $weblangs, $pagelangs.

You can also include content of another Page/Container with the following syntax:
<?php includeContainer('alias_of_container_to_include'); ?>

You can make a redirect to another Page/Container with the following syntax (Note: do not output any content before a redirect):
<?php redirectToContainer('alias_of_container_to_redirect_to'); ?>

To add a link to another page, use the syntax:
<a href="alias_of_page_to_link_to.php">mylink<a>

To include a link to download a file stored into the documents directory, use the document.php wrapper:
Example, for a file into documents/ecm (need to be logged), syntax is:
<a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext">
For a file into documents/medias (open directory for public access), syntax is:
<a href="/document.php?modulepart=medias&file=[relative_dir/]filename.ext">
For a file shared with a share link (open access using the sharing hash key of file), syntax is:
<a href="/document.php?hashp=publicsharekeyoffile">
YouCanEditHtmlSource1=
To include an image stored into the documents directory, use the viewimage.php wrapper.
Example, for an image into documents/medias (open directory for public access), syntax is:
<img src="/viewimage.php?modulepart=medias&file=[relative_dir/]filename.ext">
YouCanEditHtmlSource2=Almashish havolasi bilan birgalikda foydalaniladigan rasm uchun (faylning umumiy xesh tugmachasidan foydalangan holda ochiq kirish) sintaksis quyidagicha:
<img src = "/ viewimage.php? Hashp = 12345679012 ..." a0012c7dff0a0z0z00090f0f08a0f09a0f09a09a09cb08a0a09a03c09a03c09c9c9c9c9c9c08f96f96f9f08f08f0f9fdf9fdfdfdfc7fd -YouCanEditHtmlSource3=PHP obyekti tasvirining URL-manzilini olish uchun
< dan foydalaning. span>img src="<?php chop etish getImagePublicURLOfObject($object, 1, "_small") ?b0012c7dcbe087z class='notranslate'>>
-YouCanEditHtmlSourceMore=
HTML yoki dinamik kodning boshqa namunalari
wiki hujjatlaridab0e40dc6508d.
+YouCanEditHtmlSource3=To get the URL of the image of a PHP object, use
<img src="<?php print getImagePublicURLOfObject($object, 1, "_small") ?>">
+YouCanEditHtmlSourceMore=
More examples of HTML or dynamic code available on
the wiki documentation.
ClonePage=Sahifani / konteynerni klonlash CloneSite=Klon sayti SiteAdded=Veb-sayt qo'shildi diff --git a/htdocs/langs/uz_UZ/withdrawals.lang b/htdocs/langs/uz_UZ/withdrawals.lang index 575d8215c8e..ccc46191657 100644 --- a/htdocs/langs/uz_UZ/withdrawals.lang +++ b/htdocs/langs/uz_UZ/withdrawals.lang @@ -47,7 +47,7 @@ MakeBankTransferOrder=Kredit o'tkazish to'g'risida so'rov yuboring WithdrawRequestsDone=%s to'g'ridan-to'g'ri debet to'lovi bo'yicha so'rovlar yozib olindi BankTransferRequestsDone=%s kredit o'tkazish bo'yicha so'rovlar yozib olindi ThirdPartyBankCode=Uchinchi tomonning bank kodi -NoInvoiceCouldBeWithdrawed=Hech qanday hisob-faktura muvaffaqiyatli bajarilmadi. Hisob-fakturalar yaroqli IBANga ega kompaniyalarda ekanligini va IBANda UMR (Noyob mandat maʼlumotnomasi) rejimi %s< borligini tekshiring. span class='notranslate'>
. +NoInvoiceCouldBeWithdrawed=No invoice processed successfully. Check that invoices are on companies with a valid IBAN and that IBAN has a UMR (Unique Mandate Reference) with mode %s. NoInvoiceCouldBeWithdrawedSupplier=Hech qanday hisob-faktura muvaffaqiyatli qayta ishlanmadi. Hisob-fakturalar to'g'ri IBANga ega kompaniyalarda ekanligini tekshiring. NoSalariesCouldBeWithdrawed=Hech qanday ish haqi muvaffaqiyatli qayta ishlanmadi. Ish haqi to'g'ri IBANga ega bo'lgan foydalanuvchilar uchun ekanligini tekshiring. WithdrawalCantBeCreditedTwice=Ushbu pulni qaytarib olish kvitansiyasi allaqachon kreditlangan deb belgilangan; buni ikki marta bajarish mumkin emas, chunki bu takroriy to'lovlar va bank yozuvlarini yaratishi mumkin. @@ -66,9 +66,9 @@ WithdrawalRefusedConfirm=Jamiyat uchun pulni rad etishni xohlaganingizga aminmis RefusedData=Rad etilgan sana RefusedReason=Rad etish sababi RefusedInvoicing=Rad etish uchun hisob-kitob -NoInvoiceRefused=Do not charge the customer for the refusal -InvoiceRefused=Charge the customer for the refusal -DirectDebitRefusedInvoicingDesc=Set a flag to say this refusal must be charged to the customer +NoInvoiceRefused=Rad etish uchun mijozdan to'lov olmang +InvoiceRefused=Rad etish uchun mijozdan haq to'lang +DirectDebitRefusedInvoicingDesc=Bu rad etish mijozdan to‘lanishi kerakligini bildirish uchun belgi qo‘ying StatusDebitCredit=Holati debet / kredit StatusWaiting=Kutish StatusTrans=Yuborildi @@ -171,4 +171,3 @@ SalaryWaitingWithdraw=Kredit o'tkazish yo'li bilan to'lashni kutayotgan ish haqi RefSalary=Ish haqi NoSalaryInvoiceToWithdraw="%s" uchun maosh kutilmaydi. So‘rov yuborish uchun ish haqi kartasidagi “%s” sahifasiga o‘ting. SalaryInvoiceWaitingWithdraw=Kredit o'tkazish yo'li bilan to'lashni kutayotgan ish haqi - diff --git a/htdocs/langs/uz_UZ/workflow.lang b/htdocs/langs/uz_UZ/workflow.lang index 2bbddec407f..8b034e3d7df 100644 --- a/htdocs/langs/uz_UZ/workflow.lang +++ b/htdocs/langs/uz_UZ/workflow.lang @@ -9,16 +9,16 @@ descWORKFLOW_CONTRACT_AUTOCREATE_INVOICE=Shartnoma tasdiqlangandan so'ng mijozni descWORKFLOW_ORDER_AUTOCREATE_INVOICE=Savdo buyurtmasi yopilgandan so'ng avtomatik ravishda mijozning hisob-fakturasini yarating (yangi hisob-faktura buyurtma bilan bir xil miqdorda bo'ladi) descWORKFLOW_TICKET_CREATE_INTERVENTION=Chipta yaratishda avtomatik ravishda intervensiya yarating. # Autoclassify customer proposal or order -descWORKFLOW_ORDER_CLASSIFY_BILLED_PROPAL=Classify linked source proposals as billed when a sales order is set to billed (and if the amount of the order is the same as the total amount of the signed linked proposals) -descWORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL=Classify linked source proposals as billed when a customer invoice is validated (and if the amount of the invoice is the same as the total amount of the signed linked proposals) -descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER=Classify linked source sales order as billed when a customer invoice is validated (and if the amount of the invoice is the same as the total amount of the linked sales orders). If you have 1 invoice validated for n orders, this may set all orders to billed too. -descWORKFLOW_INVOICE_CLASSIFY_BILLED_ORDER=Classify linked source sales orders as billed when a customer invoice is set to paid (and if the amount of the invoice is the same as the total amount of the linked sales orders). If you have 1 invoice set billed for n orders, this may set all orders to billed too. +descWORKFLOW_ORDER_CLASSIFY_BILLED_PROPAL=Savdo buyurtmasi toʻlovga oʻrnatilganda (va buyurtma miqdori imzolangan bogʻlangan takliflarning umumiy miqdori bilan bir xil boʻlsa) bogʻlangan manba takliflarini hisoblangan deb tasniflang. +descWORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL=Mijoz hisob-fakturasi tasdiqlanganda (va agar schyot-faktura summasi imzolangan bog‘langan takliflarning umumiy miqdori bilan bir xil bo‘lsa) bog‘langan manba takliflarini hisoblangan deb tasniflang. +descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER=Mijoz hisob-fakturasi tasdiqlanganda (va agar schyot-faktura miqdori bog'langan savdo buyurtmalarining umumiy miqdori bilan bir xil bo'lsa) bog'langan manba savdo buyurtmasini to'langan deb tasniflang. Agar sizda n ta buyurtma uchun tasdiqlangan 1 ta hisob-faktura boʻlsa, bu barcha buyurtmalar uchun ham toʻlovni belgilashi mumkin. +descWORKFLOW_INVOICE_CLASSIFY_BILLED_ORDER=Mijoz hisob-fakturasi toʻlanishi belgilanganida (va agar schyot-faktura summasi bogʻlangan savdo buyurtmalarining umumiy miqdori bilan bir xil boʻlsa) bogʻlangan manba savdo buyurtmalarini hisoblangan deb tasniflang. Agar sizda n ta buyurtma uchun toʻlangan 1 ta hisob-faktura boʻlsa, bu barcha buyurtmalar uchun ham toʻlovni belgilashi mumkin. descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING=Bog'langan manba savdo buyurtmalarini jo'natish tasdiqlanganda jo'natilgan deb tasniflang (va barcha jo'natmalar tomonidan jo'natilgan miqdor yangilash tartibidagi bilan bir xil bo'lsa) descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING_CLOSED=Bog'langan manbalarni sotish buyurtmasini yuk yopilganda yuborilgan deb tasniflang (va agar barcha yuklar jo'natilgan miqdori yangilash tartibidagi kabi bo'lsa). # Autoclassify purchase proposal -descWORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL=Classify linked source vendor proposal as billed when vendor invoice is validated (and if the amount of the invoice is the same as the total amount of the linked proposals) +descWORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL=Bog'langan manba sotuvchisi taklifini sotuvchi hisob-fakturasi tasdiqlanganda hisoblangan deb tasniflang (va agar hisob-faktura miqdori bog'langan takliflarning umumiy miqdori bilan bir xil bo'lsa) # Autoclassify purchase order -descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER=Classify linked source purchase order as billed when vendor invoice is validated (and if the amount of the invoice is the same as the total amount of the linked orders) +descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER=Sotuvchi hisob-fakturasi tasdiqlanganda (va agar schyot-faktura summasi bog‘langan buyurtmalarning umumiy miqdori bilan bir xil bo‘lsa) bog‘langan manba xarid buyurtmasini to‘langan deb tasniflang. descWORKFLOW_ORDER_CLASSIFY_RECEIVED_RECEPTION=Bog'langan manba sotib olish buyurtmasini qabul qilish tasdiqlanganda olingan deb tasniflang (va barcha qabullar tomonidan qabul qilingan miqdor yangilash uchun xarid buyurtmasi bilan bir xil bo'lsa) descWORKFLOW_ORDER_CLASSIFY_RECEIVED_RECEPTION_CLOSED=Bog'langan manba buyurtmasini qabulxona yopilganda olingan deb tasniflang (va barcha qabulxonalar tomonidan qabul qilingan miqdor yangilash uchun xarid buyurtmasidagi bilan bir xil bo'lsa) # Autoclassify shipment diff --git a/htdocs/langs/vi_VN/admin.lang b/htdocs/langs/vi_VN/admin.lang index b4b174e8ce9..27849bdfdeb 100644 --- a/htdocs/langs/vi_VN/admin.lang +++ b/htdocs/langs/vi_VN/admin.lang @@ -245,7 +245,7 @@ ActivatableOn=Có thể kích hoạt trên SourceFile=Tập tin nguồn AvailableOnlyIfJavascriptAndAjaxNotDisabled=Chỉ có sẵn nếu JavaScript không bị vô hiệu hóa Required=Được yêu cầu -UsedOnlyWithTypeOption=Được dùng chỉ bởi một vài tùy chọn chương trình nghị sự +UsedOnlyWithTypeOption=Được dùng chỉ bởi một vài tùy chọn chương trình nghị sự Security=Bảo mật Passwords=Mật khẩu DoNotStoreClearPassword=Mã hóa mật khẩu được lưu trữ trong cơ sở dữ liệu (KHÔNG phải là văn bản thuần túy). Rất khuyến khích kích hoạt tùy chọn này. @@ -323,7 +323,7 @@ FixOnTransifex=Sửa bản dịch trên nền tảng dịch trực tuyến của SubmitTranslation=Nếu bản dịch cho ngôn ngữ này chưa hoàn thành hoặc bạn thấy có lỗi, bạn có thể sửa lỗi này bằng cách chỉnh sửa các tệp trong thư mục langs / %s và gửi thay đổi của bạn tới www.transifex.com/dolibarr-association/dolibarr/ SubmitTranslationENUS=Nếu bản dịch cho ngôn ngữ này chưa hoàn chỉnh hoặc bạn phát hiện thấy lỗi, bạn có thể sửa lỗi này bằng cách chỉnh sửa tệp vào thư mục langs/%s và gửi các tệp đã sửa đổi trên dolibarr.org/forum hoặc, nếu bạn là nhà phát triển, có PR trên github.com/Dolibarr/dolibarr ModuleSetup=Cài đặt module -ModulesSetup=Thiết lập Mô-đun / Ứng dụng +ModulesSetup=Thiết lập Mô-đun / Ứng dụng ModuleFamilyBase=Hệ thống ModuleFamilyCrm=Quản lý quan hệ khách hàng (CRM) ModuleFamilySrm=Quản lý quan hệ nhà cung cấp (VRM) @@ -1197,6 +1197,7 @@ Skin=Chủ đề giao diện DefaultSkin=Chủ đề giao diện mặc định MaxSizeList=Chiều dài tối đa cho danh sách DefaultMaxSizeList=Độ dài tối đa mặc định cho danh sách +DisplayGrandTotalInList=Display grand total (for all pages) in lists footer DefaultMaxSizeShortList=Độ dài tối đa mặc định cho danh sách ngắn (ví dụ: trong thẻ khách hàng) MessageOfDay=Tin trong ngày MessageLogin=Tin trang đăng nhập @@ -1249,7 +1250,7 @@ SetupDescription2=Hai phần sau đây là bắt buộc (hai mục đầu tiên SetupDescription3=%s -> %s

Các tham số cơ bản được sử dụng để tùy chỉnh hành vi mặc định của ứng dụng của bạn (ví dụ: đối với các tính năng liên quan đến quốc gia). SetupDescription4=%s -> %s
Phần mềm này là một bộ gồm nhiều mô-đun/ứng dụng, tất cả đều ít nhiều độc lập nhau. Các mô-đun liên quan đến nhu cầu của bạn phải được kích hoạt và cấu hình. Các mục/tùy chọn sẽ được thêm vào menu với sự kích hoạt của một mô-đun. SetupDescription5=Các menu thiết lập khác quản lý các tham số tùy chọn. -SetupDescriptionLink=%s - %s< /nhịp> +SetupDescriptionLink=%s - %s SetupDescription3b=Các tham số cơ bản được sử dụng để tùy chỉnh hành vi mặc định của ứng dụng của bạn (ví dụ: đối với các tính năng liên quan đến quốc gia). SetupDescription4b=Phần mềm này là một bộ gồm nhiều mô-đun/ứng dụng. Các mô-đun liên quan đến nhu cầu của bạn phải được kích hoạt. Các mục menu sẽ xuất hiện khi kích hoạt các mô-đun này. AuditedSecurityEvents=Các sự kiện bảo mật được kiểm tra @@ -2293,7 +2294,7 @@ InstallAndUpgradeLockedBy=Cài đặt và nâng cấp bị khóa bởi tệp InstallLockedBy=Cài đặt/Cài đặt lại bị khóa bởi tệp %s InstallOfAddonIsNotBlocked=Cài đặt các addon không bị khóa. Tạo một tệp installmodules.lock vào thư mục %s để chặn cài đặt các tiện ích bổ sung/mô-đun bên ngoài. OldImplementation=Cách triển khai cũ -PDF_SHOW_LINK_TO_ONLINE_PAYMENT=Nếu một số mô-đun thanh toán trực tuyến được bật (Paypal, Stripe, ...), hãy thêm liên kết trên tệp PDF để tạo thanh toán +PDF_SHOW_LINK_TO_ONLINE_PAYMENT=If some online payment modules are enabled (Paypal, Stripe, ...), add a link on the PDF to make the online payment DashboardDisableGlobal=Vô hiệu hóa trên toàn cầu tất cả các ngón tay cái của các đối tượng đang mở BoxstatsDisableGlobal=Tắt thống kê toàn bộ hộp DashboardDisableBlocks=Thumbs của các đối tượng đang mở (để xử lý hoặc xử lý muộn) trên bảng điều khiển chính @@ -2433,3 +2434,12 @@ UrlPublicInterfaceHelpAdmin=It is possible to define an alias to the web server ExportUseForce=Use the parameter -f ExportUseForceHelp=Force to continue the export even when an error is found (Backup may not be reliable) CustomPrompt=Custom prompts +AiDescription=AI (Artificial Intelligence) features +AiDescriptionLong=Provides AI (Artificial Intelligence) features in different part of the application. Need external AI API. +AI_KEY_API_CHATGPT= Key for ChatGPT IA api +AiSetup=AI module setup +AiCustomPrompt=AI customs prompt +AI_CONFIGURATIONS_PROMPT=Custom prompt +ImageGeneration=Image generation +AIPromptForFeatures=AI custom prompts for features +EnterAnIP=Enter an IP address diff --git a/htdocs/langs/vi_VN/assets.lang b/htdocs/langs/vi_VN/assets.lang index f4c117b8626..c9469a11b4f 100644 --- a/htdocs/langs/vi_VN/assets.lang +++ b/htdocs/langs/vi_VN/assets.lang @@ -122,7 +122,6 @@ AssetDepreciationOptionDepreciationTypeLinear=tuyến tính AssetDepreciationOptionDepreciationTypeDegressive=thoái hóa AssetDepreciationOptionDepreciationTypeExceptional=Đặc biệt AssetDepreciationOptionDegressiveRate=Tỷ lệ giảm dần -AssetDepreciationOptionAcceleratedDepreciation=Khấu hao nhanh (thuế) AssetDepreciationOptionDuration=Thời hạn AssetDepreciationOptionDurationType=Loại thời lượng AssetDepreciationOptionDurationTypeAnnual=Hàng năm diff --git a/htdocs/langs/vi_VN/cron.lang b/htdocs/langs/vi_VN/cron.lang index add9bbe610e..a6fc41bc215 100644 --- a/htdocs/langs/vi_VN/cron.lang +++ b/htdocs/langs/vi_VN/cron.lang @@ -1,6 +1,5 @@ # Dolibarr language file - Source file is en_US - cron -# About page -# Right +# Permissions Permission23101 = Xem công việc theo lịch trình Permission23102 = Tạo/cập nhật công việc theo lịch trình Permission23103 = Xóa công việc theo lịch trình diff --git a/htdocs/langs/vi_VN/eventorganization.lang b/htdocs/langs/vi_VN/eventorganization.lang index 980adbb02a7..7c549e7b8ec 100644 --- a/htdocs/langs/vi_VN/eventorganization.lang +++ b/htdocs/langs/vi_VN/eventorganization.lang @@ -88,6 +88,7 @@ PriceOfRegistration=Giá đăng ký PriceOfRegistrationHelp=Giá phải trả để đăng ký hoặc tham gia sự kiện PriceOfBooth=Giá đăng ký đứng gian hàng PriceOfBoothHelp=Giá đăng ký đứng gian hàng +EventOrganizationICSLinkProject=Link ICS for the event EventOrganizationICSLink=Liên kết ICS cho hội nghị ConferenceOrBoothInformation=Thông tin hội nghị hoặc gian hàng Attendees=Người tham dự diff --git a/htdocs/langs/vi_VN/main.lang b/htdocs/langs/vi_VN/main.lang index 637400ebf3d..9d4e8c21463 100644 --- a/htdocs/langs/vi_VN/main.lang +++ b/htdocs/langs/vi_VN/main.lang @@ -420,6 +420,8 @@ TotalTTCShort=Tổng (gồm thuế) TotalHT=Tổng cộng (chưa thuế) TotalHTforthispage=Tổng cộng (chưa thuế) cho trang này Totalforthispage=Tổng cộng cho trang này +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=Tổng (gồm thuế) TotalTTCToYourCredit=Tổng (gồm thuế) cho nợ của bạn TotalVAT=Tổng thuế @@ -647,6 +649,7 @@ ReportName=Tên báo cáo ReportPeriod=Kỳ báo cáo ReportDescription=Mô tả Report=Báo cáo +Reports=Báo cáo Keyword=Từ khóa Origin=Nguyên gốc Legend=Chú thích diff --git a/htdocs/langs/vi_VN/modulebuilder.lang b/htdocs/langs/vi_VN/modulebuilder.lang index 18ed62a2dae..fb753024386 100644 --- a/htdocs/langs/vi_VN/modulebuilder.lang +++ b/htdocs/langs/vi_VN/modulebuilder.lang @@ -180,7 +180,7 @@ FailedToAddCodeIntoDescriptor=Không thêm được mã vào bộ mô tả. Ki DictionariesCreated=Từ điển %s đã được tạo thành công DictionaryDeleted=Đã xóa thành công từ điển %s PropertyModuleUpdated=Thuộc tính %s đã được cập nhật thành công -InfoForApiFile=* Khi bạn tạo tệp lần đầu tiên thì tất cả các phương thức sẽ được tạo cho từng đối tượng.
* Khi bạn nhấp vào remove, bạn chỉ cần xóa tất cả các phương thức cho lớp ='notranslate'>đối tượng được chọn. +InfoForApiFile=* When you generate file for the first time then all methods will be created for each object.
* When you click in remove you just remove all methods for the selected object. SetupFile=Trang để thiết lập mô-đun EmailingSelectors=Emails selectors EmailingSelectorDesc=Bạn có thể tạo và chỉnh sửa các tệp lớp tại đây để cung cấp bộ chọn mục tiêu email mới cho mô-đun gửi email hàng loạt diff --git a/htdocs/langs/vi_VN/other.lang b/htdocs/langs/vi_VN/other.lang index 4d27075a02e..54cc3b724a7 100644 --- a/htdocs/langs/vi_VN/other.lang +++ b/htdocs/langs/vi_VN/other.lang @@ -336,3 +336,5 @@ FTPFailedToUploadFile=Không tải được tệp lên %s. AddFolder=Tạo thư mục FileWasCreateFolder=Thư mục %s đã được tạo FTPFailedToCreateFolder=Không tạo được thư mục %s. +SelectADay=Select a day in calendar +SelectANewDate=Select a new date diff --git a/htdocs/langs/vi_VN/partnership.lang b/htdocs/langs/vi_VN/partnership.lang index af2b551d97a..27c46457a5a 100644 --- a/htdocs/langs/vi_VN/partnership.lang +++ b/htdocs/langs/vi_VN/partnership.lang @@ -91,8 +91,7 @@ CountLastUrlCheckError=Số lỗi trong lần kiểm tra URL cuối cùng LastCheckBacklink=Ngày kiểm tra URL lần cuối NewPartnershipRequest=Yêu cầu hợp tác mới -NewPartnershipRequestDesc=Biểu mẫu này cho phép bạn yêu cầu tham gia một trong các chương trình hợp tác của chúng tôi. Nếu bạn cần trợ giúp để điền vào biểu mẫu này, vui lòng liên hệ qua email %s. +NewPartnershipRequestDesc=This form allows you to request to be part of one of our partnership program. If you need help to fill this form, please contact by email %s. ThisUrlMustContainsAtLeastOneLinkToWebsite=Trang này phải chứa ít nhất một liên kết đến một trong các tên miền sau: %s IPOfApplicant=IP của người nộp đơn - diff --git a/htdocs/langs/vi_VN/paypal.lang b/htdocs/langs/vi_VN/paypal.lang index 421108dff74..d96f11f7408 100644 --- a/htdocs/langs/vi_VN/paypal.lang +++ b/htdocs/langs/vi_VN/paypal.lang @@ -1,6 +1,6 @@ # Dolibarr language file - Source file is en_US - paypal PaypalSetup=Thiết lập mô-đun PayPal -PaypalDesc=Mô-đun này cho phép thanh toán của khách hàng thông qua PayPal . Điều này có thể được sử dụng cho thanh toán đặc biệt hoặc thanh toán liên quan đến đối tượng Dolibarr (hóa đơn, đơn đặt hàng, ...) +PaypalDesc=Mô-đun này cho phép khách hàng thanh toán qua PayPal. Điều này có thể được sử dụng để thanh toán không dự tính trước hoặc thanh toán liên quan đến đối tượng Dolibarr (hóa đơn, đơn đặt hàng, ...) PaypalOrCBDoPayment=Thanh toán bằng PayPal (Thẻ hoặc PayPal) PaypalDoPayment=Thanh toán bằng PayPal PAYPAL_API_SANDBOX=Chế độ kiểm tra / hộp cát @@ -34,3 +34,4 @@ ARollbackWasPerformedOnPostActions=Một rollback đã được thực hiện tr ValidationOfPaymentFailed=Xác thực thanh toán không thành công CardOwner=Chủ thẻ PayPalBalance=Tín dụng Paypal +OnlineSubscriptionPaymentLine=Đăng ký trực tuyến được ghi lại trên %s
Được thanh toán qua %s
Địa chỉ IP gốc: %s
ID giao dịch: %s diff --git a/htdocs/langs/vi_VN/products.lang b/htdocs/langs/vi_VN/products.lang index 03ec9111e49..658250533e2 100644 --- a/htdocs/langs/vi_VN/products.lang +++ b/htdocs/langs/vi_VN/products.lang @@ -433,4 +433,6 @@ ModifyValueExtrafields = Sửa đổi giá trị của trường ngoại vi OrProductsWithCategories=Hoặc các sản phẩm có thẻ/danh mục WarningTransferBatchStockMouvToGlobal = Nếu bạn muốn giải tuần tự hóa sản phẩm này, tất cả hàng tồn kho được xê-ri hóa của nó sẽ được chuyển thành hàng tồn kho toàn cầu WarningConvertFromBatchToSerial=Nếu bạn hiện có số lượng cao hơn hoặc bằng 2 cho sản phẩm, việc chuyển sang lựa chọn này có nghĩa là bạn vẫn sẽ có một sản phẩm với các đối tượng khác nhau trong cùng một lô (trong khi bạn muốn có một số sê-ri duy nhất). Bản sao sẽ vẫn tồn tại cho đến khi hoàn thành việc kiểm kê hoặc di chuyển kho thủ công để khắc phục vấn đề này. +AllowStockMovementVariantParent=Also records stock movements on parent products of variant products +AllowStockMovementVariantParentHelp=By default, a parent of a variant is a virtual product, so no stock is managed for it. By enabling this option, a stock will be managed for parent products and each time a stock quantity is modified for a variant product, the same quantity will be modified for the parent product. You should not need this option, except if you are using variant to manage the same product than parent (but with different descriptions, prices...) ConfirmSetToDraftInventory=Bạn có chắc chắn muốn quay lại trạng thái Dự thảo không?
Số lượng hiện được đặt trong kho sẽ được đặt lại. diff --git a/htdocs/langs/vi_VN/projects.lang b/htdocs/langs/vi_VN/projects.lang index a61a2d87efc..b2eabd2853a 100644 --- a/htdocs/langs/vi_VN/projects.lang +++ b/htdocs/langs/vi_VN/projects.lang @@ -249,7 +249,7 @@ LatestProjects=Dự án %s mới nhất LatestModifiedProjects=Dự án sửa đổi %s mới nhất OtherFilteredTasks=Các nhiệm vụ được lọc khác NoAssignedTasks=Không tìm thấy nhiệm vụ được giao (chỉ định dự án / nhiệm vụ cho người dùng hiện tại từ hộp chọn trên cùng để nhập thời gian vào nó) -ThirdPartyRequiredToGenerateInvoice=Một bên thứ ba phải được xác định trong dự án để có thể lập hóa đơn. +ThirdPartyRequiredToGenerateIntervention=A third party must be defined on project to be able to create intervention. ThirdPartyRequiredToGenerateInvoice=Một bên thứ ba phải được xác định trong dự án để có thể lập hóa đơn. ChooseANotYetAssignedTask=Chọn một cônng việc chưa gán cho bạn # Comments trans diff --git a/htdocs/langs/vi_VN/receiptprinter.lang b/htdocs/langs/vi_VN/receiptprinter.lang index e12bcaf6c06..d85cdc02633 100644 --- a/htdocs/langs/vi_VN/receiptprinter.lang +++ b/htdocs/langs/vi_VN/receiptprinter.lang @@ -10,6 +10,7 @@ ReceiptPrinterTemplateDesc=Thiết lập mẫu ReceiptPrinterTypeDesc=Ví dụ về các giá trị có thể có cho trường "Tham số" theo loại trình điều khiển ReceiptPrinterProfileDesc=Mô tả hồ sơ của máy in hóa đơn ListPrinters=Danh sách máy in +FromServerPointOfView=From the web server point of view. This method must be reachable from the web server hosting. SetupReceiptTemplate=Thiết lập mẫu CONNECTOR_DUMMY=Máy in giả CONNECTOR_NETWORK_PRINT=Máy in mạng diff --git a/htdocs/langs/vi_VN/resource.lang b/htdocs/langs/vi_VN/resource.lang index c68abc0bf7b..3e3d375d9a9 100644 --- a/htdocs/langs/vi_VN/resource.lang +++ b/htdocs/langs/vi_VN/resource.lang @@ -37,3 +37,5 @@ ImportDataset_resource_1=Tài nguyên ErrorResourcesAlreadyInUse=Một số tài nguyên đang được sử dụng ErrorResourceUseInEvent=%s được sử dụng trong %s sự kiện + +MaxUsers=Maximum users (places, seats, etc.) diff --git a/htdocs/langs/vi_VN/stocks.lang b/htdocs/langs/vi_VN/stocks.lang index 4aac852f95d..63038b52aa9 100644 --- a/htdocs/langs/vi_VN/stocks.lang +++ b/htdocs/langs/vi_VN/stocks.lang @@ -282,7 +282,7 @@ ModuleStockTransferName=Chuyển nhượng cổ phiếu nâng cao ModuleStockTransferDesc=Quản lý nâng cao việc chuyển nhượng chứng khoán, với việc tạo bảng chuyển nhượng StockTransferNew=Chuyển nhượng cổ phiếu mới StockTransferList=Danh sách chuyển nhượng cổ phiếu -ConfirmValidateStockTransfer=Bạn có chắc chắn muốn xác thực việc chuyển nhượng cổ phiếu này bằng tham chiếu %s ? +ConfirmValidateStockTransfer=Are you sure you want to validate this stocks transfer with the reference %s ? ConfirmDestock=Giảm cổ phiếu khi chuyển %s ConfirmDestockCancel=Hủy giảm cổ phiếu bằng cách chuyển %s DestockAllProduct=Giảm cổ phiếu diff --git a/htdocs/langs/vi_VN/website.lang b/htdocs/langs/vi_VN/website.lang index 73a340d7c7d..9b161fa7f59 100644 --- a/htdocs/langs/vi_VN/website.lang +++ b/htdocs/langs/vi_VN/website.lang @@ -49,7 +49,7 @@ SetHereVirtualHost=Sử dụng với Apache/NGinx/...
Tạo trên máy ExampleToUseInApacheVirtualHostConfig=Ví dụ để sử dụng trong thiết lập máy chủ ảo Apache: YouCanAlsoTestWithPHPS=Sử dụng với máy chủ nhúng PHP
Trên môi trường phát triển, bạn có thể muốn kiểm tra trang web với máy chủ web nhúng PHP (yêu cầu PHP 5.5) bằng cách chạy
php -S 0.0.0.0:8080 -t %s YouCanAlsoDeployToAnotherWHP=Chạy trang web của bạn với một nhà cung cấp dịch vụ lưu trữ Dolibarr Hosting khác
Nếu bạn không có sẵn máy chủ web như Apache hoặc NGinx trên internet, bạn có thể xuất và nhập trang web của mình vào một phiên bản Dolibarr khác do nhà cung cấp dịch vụ lưu trữ Dolibarr khác cung cấp tích hợp đầy đủ với mô-đun Trang web. Bạn có thể tìm thấy danh sách một số nhà cung cấp dịch vụ lưu trữ Dolibarr trên https://saas.dolibarr.org -CheckVirtualHostPerms=Ngoài ra, hãy kiểm tra xem người dùng máy chủ ảo (ví dụ: www-data) có %s quyền đối với các tệp vào
%s
+CheckVirtualHostPerms=Check also that the virtual host user (for example www-data) has %s permissions on files into
%s ReadPerm=Đọc WritePerm=Viết TestDeployOnWeb=Kiểm tra / triển khai trên web diff --git a/htdocs/langs/zh_CN/main.lang b/htdocs/langs/zh_CN/main.lang index 208771e21e2..b16924c1785 100644 --- a/htdocs/langs/zh_CN/main.lang +++ b/htdocs/langs/zh_CN/main.lang @@ -420,6 +420,8 @@ TotalTTCShort=共计(含税) TotalHT=总计(不含税金) TotalHTforthispage=此页总计(不含税金) Totalforthispage=本页总计 +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=共计(含税) TotalTTCToYourCredit=共计(含税)你的信用 TotalVAT=增值税总金额 @@ -647,6 +649,7 @@ ReportName=报告名称 ReportPeriod=报告期间 ReportDescription=描述 Report=报告 +Reports=报表 Keyword=关键字 Origin=原始 Legend=图例 @@ -933,7 +936,7 @@ NotAllExportedMovementsCouldBeRecordedAsExported=并非所有导出的调拨都 Miscellaneous=各项设定 Calendar=日历 GroupBy=分组: -GroupByX=按 %s 分组\n +GroupByX=Group by %s ViewFlatList=查看全部列表 ViewAccountList=查看账本 ViewSubAccountList=查看子账户账本 @@ -1115,7 +1118,7 @@ ToRefuse=拒绝 ToProcess=待处理 ToApprove=审批 GlobalOpenedElemView=全局视图 -NoArticlesFoundForTheKeyword=未找到与关键字“”相关的文章\n %s ' +NoArticlesFoundForTheKeyword=No article found for the keyword '%s' NoArticlesFoundForTheCategory=没有找到该类别的文章 ToAcceptRefuse=接受 |拒绝 ContactDefault_agenda=事件 @@ -1139,7 +1142,7 @@ SelectYourGraphOptionsFirst=选择图表选项来构建图表 Measures=措施 XAxis=X轴 YAxis=Y轴 -StatusOfRefMustBe=%s 的状态\n 必须是 %s +StatusOfRefMustBe=Status of %s must be %s DeleteFileHeader=确认文件删除 DeleteFileText=您真的要删除该文件吗? ShowOtherLanguages=显示其他语言 @@ -1179,7 +1182,7 @@ ConfirmUpdatePrice=选择加价/减价率 ConfirmAffectTagQuestion=您确定要将标签分配给 %s 选定的记录? ConfirmAffectUserQuestion=您确定要将用户分配给 %s 选定的记录? ConfirmSetSupervisorQuestion=您确定要将主管设置为 %s 选定的记录? -ConfirmUpdatePriceQuestion=您确定要更新 %s 的价格吗\n 选定的记录? +ConfirmUpdatePriceQuestion=Are you sure you want to update the price of the %s selected record(s)? CategTypeNotFound=未找到记录类型的标签类型 SupervisorNotFound=未找到主管 CopiedToClipboard=已复制到剪贴板 @@ -1234,7 +1237,7 @@ HideOnVCard=隐藏%s ShowOnVCard=Show %s AddToContacts=将地址添加到我的联系人 LastAccess=上次访问时间 -UploadAnImageToSeeAPhotoHere=从标签 %s 上传图像\n 在这里查看照片 +UploadAnImageToSeeAPhotoHere=Upload an image from the tab %s to see a photo here LastPasswordChangeDate=上次密码更改日期 PublicVirtualCardUrl=虚拟名片页面 URL PublicVirtualCard=虚拟名片 diff --git a/htdocs/langs/zh_HK/admin.lang b/htdocs/langs/zh_HK/admin.lang index 080ddb9c7fd..bab98436900 100644 --- a/htdocs/langs/zh_HK/admin.lang +++ b/htdocs/langs/zh_HK/admin.lang @@ -62,7 +62,7 @@ UploadNewTemplate=Upload new template(s) FormToTestFileUploadForm=測試文件上傳的表單(根據設置) ModuleMustBeEnabled=The module/application %s must be enabled ModuleIsEnabled=The module/application %s has been enabled -IfModuleEnabled=注意:yes 僅在模塊 時有效\n %s 已啟用 +IfModuleEnabled=Note: yes is effective only if module %s is enabled RemoveLock=刪除/重命名文件 %s 如果存在,則允許使用更新/安裝工具。 RestoreLock=恢復文件 %s ,僅具有讀取權限,以禁用更新/安裝工具的任何進一步使用。 SecuritySetup=安全設置 @@ -106,7 +106,7 @@ NextValueForInvoices=下一個值(發票) NextValueForCreditNotes=下一個值(貸方票據) NextValueForDeposit=下一個值(首付款) NextValueForReplacements=下一個值(替換) -MustBeLowerThanPHPLimit=注意:您的 PHP 配置目前限制上傳到 的最大文件大小\n %s %s,無論該參數的值如何 +MustBeLowerThanPHPLimit=Note: your PHP configuration currently limits the maximum filesize for upload to %s %s, irrespective of the value of this parameter NoMaxSizeByPHPLimit=注意:您的 PHP 配置中沒有設置限制 MaxSizeForUploadedFiles=上傳文件的最大大小(0 表示禁止上傳) UseCaptchaCode=在登錄頁面和一些公共頁面上使用圖形代碼(CAPTCHA) @@ -159,7 +159,7 @@ SystemInfo=系統信息 SystemToolsArea=系統工具區 SystemToolsAreaDesc=該區域提供管理功能。使用菜單選擇所需的功能。 Purge=清除 -PurgeAreaDesc=此頁面允許您刪除 Dolibarr 生成或存儲的所有文件(臨時文件或 中的所有文件\n %s 目錄)。通常不需要使用此功能。它是為 Dolibarr 由提供商託管的用戶提供的一種解決方法,該提供商不提供刪除 Web 服務器生成的文件的權限。 +PurgeAreaDesc=This page allows you to delete all files generated or stored by Dolibarr (temporary files or all files in %s directory). Using this feature is not normally necessary. It is provided as a workaround for users whose Dolibarr is hosted by a provider that does not offer permissions to delete files generated by the web server. PurgeDeleteLogFile=刪除日誌文件,包括 %s 為 Syslog 模塊定義(沒有丟失數據的風險) PurgeDeleteTemporaryFiles=刪除所有日誌和臨時文件(沒有丟失數據的風險)。參數可以是“tempfilesold”、“logfiles”或兩者都是“tempfilesold+logfiles”。注意:僅當臨時目錄創建時間超過 24 小時時,才會刪除臨時文件。 PurgeDeleteTemporaryFilesShort=Delete log and temporary files (no risk of losing data) @@ -210,7 +210,7 @@ AutoDetectLang=自動檢測(瀏覽器語言) FeatureDisabledInDemo=演示中禁用的功能 FeatureAvailableOnlyOnStable=Feature only available on official stable versions BoxesDesc=小部件是顯示一些信息的組件,您可以添加這些信息來個性化某些頁面。您可以通過選擇目標頁面並單擊“激活”來選擇是否顯示小部件,或者單擊垃圾桶將其禁用。 -OnlyActiveElementsAreShown=僅來自 的元素\n 啟用模塊 顯示。 +OnlyActiveElementsAreShown=Only elements from enabled modules are shown. ModulesDesc=模塊/應用程序確定軟件中可用的功能。有些模塊需要在激活模塊後授予用戶權限。點擊開/關按鈕 %s 每個模塊的啟用或禁用模塊/應用程序。 ModulesDesc2=Click the wheel button %s to configure the module/application. ModulesMarketPlaceDesc=您可以在互聯網上的外部網站上找到更多模塊下載... @@ -250,8 +250,8 @@ Security=安全 Passwords=密碼 DoNotStoreClearPassword=加密存儲在數據庫中的密碼(不是純文本)。強烈建議激活此選項。 MainDbPasswordFileConfEncrypted=加密存儲在conf.php中的數據庫密碼。強烈建議激活此選項。 -InstrucToEncodePass=將密碼編碼到 conf.php 文件,替換行
$dolibarr_main_db_pass="...";
作者:
$dolibarr_main_db_pass="加密:%s"; -InstrucToClearPass=將密碼解碼(清除)到 conf.php 文件,替換行
$dolibarr_main_db_pass="已加密:...";
作者:
$dolibarr_main_db_pass="%s"; +InstrucToEncodePass=將密碼編碼到 conf.php 文件,替換行
$dolibarr_main_db_pass="...";
作者:
$dolibarr_main_db_pass="加密:%s"; +InstrucToClearPass=將密碼解碼(清除)到 conf.php 文件,替換行
$dolibarr_main_db_pass="已加密:...";
作者:
$dolibarr_main_db_pass="%s"; ProtectAndEncryptPdfFiles=保護生成的 PDF 文件。不建議這樣做,因為它會破壞批量 PDF 生成。 ProtectAndEncryptPdfFilesDesc=對 PDF 文檔的保護使其可以使用任何 PDF 瀏覽器閱讀和打印。但是,編輯和復制已不再可能。請注意,使用此功能會使全局合併 PDF 的構建不起作用。 Feature=特徵 @@ -268,10 +268,10 @@ OtherResources=其他資源 ExternalResources=External Resources SocialNetworks=Social Networks SocialNetworkId=Social Network ID -ForDocumentationSeeWiki=對於用戶或開發人員文檔(文檔、常見問題解答...),
看看 Dolibarr Wiki:
%s -ForAnswersSeeForum=對於任何其他問題/幫助,您可以使用 Dolibarr 論壇:
%s +ForDocumentationSeeWiki=對於用戶或開發人員文檔(文檔、常見問題解答...),
看看 Dolibarr Wiki:
%s +ForAnswersSeeForum=對於任何其他問題/幫助,您可以使用 Dolibarr 論壇:
%s HelpCenterDesc1=以下是一些獲取 Dolibarr 幫助和支持的資源。 -HelpCenterDesc2=其中一些資源僅在 中提供\n 英語 。 +HelpCenterDesc2=Some of these resources are only available in english. CurrentMenuHandler=當前菜單處理程序 MeasuringUnit=測量單位 LeftMargin=Left margin @@ -320,7 +320,7 @@ UserEmail=User email CompanyEmail=Company Email FeatureNotAvailableOnLinux=該功能在類 Unix 系統上不可用。在本地測試您的 sendmail 程序。 FixOnTransifex=Fix the translation on the online translation platform of project -SubmitTranslation=如果該語言的翻譯不完整或發現錯誤,您可以通過編輯目錄 中的文件來更正此問題\n langs/%s 並將您的更改提交至 www.transifex.com/dolibarr-association/dolibarr/ +SubmitTranslation=If the translation for this language is not complete or you find errors, you can correct this by editing files in directory langs/%s and submit your change to www.transifex.com/dolibarr-association/dolibarr/ SubmitTranslationENUS=If translation for this language is not complete or you find errors, you can correct this by editing files into directory langs/%s and submit modified files on dolibarr.org/forum or, if you are a developer, with a PR on github.com/Dolibarr/dolibarr ModuleSetup=模塊設置 ModulesSetup=模塊/應用程序設置 @@ -345,11 +345,11 @@ ThisIsAlternativeProcessToFollow=This is an alternative setup to process manuall StepNb=步驟%s FindPackageFromWebSite=找到一個提供您需要的功能的軟件包(例如在官方網站%s)。 DownloadPackageFromWebSite=下載包(例如從官方網站%s)。 -UnpackPackageInDolibarrRoot=將打包文件解壓/解壓到您的 Dolibarr 服務器目錄中: %s +UnpackPackageInDolibarrRoot=將打包文件解壓/解壓到您的 Dolibarr 服務器目錄中: %s UnpackPackageInModulesRoot=To deploy/install an external module, you must unpack/unzip the archive file into the server directory dedicated to external modules:
%s SetupIsReadyForUse=模塊部署完成。但是,您必須通過轉至頁面設置模塊來在應用程序中啟用和設置該模塊: %s 。 -NotExistsDirect=備用根目錄未定義為現有目錄。
-InfDirAlt=從版本 3 開始,可以定義備用根目錄。這允許您將插件和自定義模板存儲到專用目錄中。
只需在 Dolibarr 的根目錄創建一個目錄(例如:custom)。
+NotExistsDirect=備用根目錄未定義為現有目錄。
+InfDirAlt=從版本 3 開始,可以定義備用根目錄。這允許您將插件和自定義模板存儲到專用目錄中。
只需在 Dolibarr 的根目錄創建一個目錄(例如:custom)。
InfDirExample=
然後在文件中聲明 conf.php
$dolibarr_main_url_root_alt='/custom'
$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'
如果這些行用“#”註釋,要啟用它們,只需通過刪除“#”字符來取消註釋即可。 YouCanSubmitFile=您可以從這裡上傳模塊包的 .zip 文件: CurrentVersion=多利巴爾當前版本 @@ -361,21 +361,21 @@ LastActivationIP=Latest activation IP LastActivationVersion=Latest activation version UpdateServerOffline=Update server offline WithCounter=Manage a counter -GenericMaskCodes=您可以輸入任何編號掩碼。在此掩碼中,可以使用以下標籤:
{000000} 對應於每個 %s 都會遞增的數字\n。輸入所需計數器長度的零個數。計數器將從左側開始補零,以便具有與掩碼一樣多的零。
{000000+000} 與前一個相同,但從第一個 %s 開始應用與 + 號右側數字相對應的偏移量\n。
{000000@x} 與前一個相同,但當到達 x 月份時計數器將重置為零(x 介於 1 和 12 之間,或 0 表示使用配置中定義的會計年度的前幾個月,或 99 每月重置為零)。如果使用此選項並且 x 為 2 或更高,則還需要序列 {yy}{mm} 或 {yyyy}{mm}。
{dd} 天(01 至 31)。
{mm} 月(01 至 12)。
{yy} , {yyyy} {y} 年超過 2、4 或 1 個數字。
-GenericMaskCodes2= {cccc} n 個字符的客戶端代碼
{cccc000} n 個字符的客戶代碼後面是一個專門針對該客戶的計數器。該客戶專用計數器與全局計數器同時重置。
{tttt} n 個字符上的第三方類型代碼(參見菜單主頁 - 設置 - 詞典 - 第三方類型)。如果添加此標籤,則每種類型的第三方的計數器都會不同。
-GenericMaskCodes3=面具中的所有其他角色將保持不變。
不允許有空格。
+GenericMaskCodes=You may enter any numbering mask. In this mask, the following tags can be used:
{000000} corresponds to a number which will be incremented on each %s. Enter as many zeros as the desired length of the counter. The counter will be completed by zeros from the left in order to have as many zeros as the mask.
{000000+000} same as the previous one but an offset corresponding to the number to the right of the + sign is applied starting on the first %s.
{000000@x} same as the previous one but the counter is reset to zero when month x is reached (x between 1 and 12, or 0 to use the early months of fiscal year defined in your configuration, or 99 to reset to zero every month). If this option is used and x is 2 or higher, then the sequence {yy}{mm} or {yyyy}{mm} is also required.
{dd} day (01 to 31).
{mm} month (01 to 12).
{yy}, {yyyy} or {y} year over 2, 4 or 1 numbers.
+GenericMaskCodes2= {cccc} n 個字符的客戶端代碼
{cccc000} n 個字符的客戶代碼後面是一個專門針對該客戶的計數器。該客戶專用計數器與全局計數器同時重置。
{tttt} n 個字符上的第三方類型代碼(參見菜單主頁 - 設置 - 詞典 - 第三方類型)。如果添加此標籤,則每種類型的第三方的計數器都會不同。
+GenericMaskCodes3=面具中的所有其他角色將保持不變。
不允許有空格。
GenericMaskCodes3EAN=All other characters in the mask will remain intact (except * or ? in 13th position in EAN13).
Spaces are not allowed.
In EAN13, the last character after the last } in 13th position should be * or ? . It will be replaced by the calculated key.
-GenericMaskCodes4a= 99號示例%s 第三方 TheCompany 的日期為 2023 年 1 月 31 日:
-GenericMaskCodes4b= 2023 年 1 月 31 日創建的第三方示例:
-GenericMaskCodes4c= 2023 年 1 月 31 日創建的產品示例:
+GenericMaskCodes4a= 99號示例%s 第三方 TheCompany 的日期為 2023 年 1 月 31 日:
+GenericMaskCodes4b= 2023 年 1 月 31 日創建的第三方示例:
+GenericMaskCodes4c= 2023 年 1 月 31 日創建的產品示例:
GenericMaskCodes5= ABC{yy}{mm}-{000000} 將給出 ABC2301-000099
{0000+100@1}-ZZZ/{dd}/XXX 將給出 0199-ZZZ/31/XXX
IN{yy}{mm}-{0000}-{t} 將給出 IN2301-0099-A 如果公司類型為“Responsable Inscripto”,類型代碼為“A_RI” GenericNumRefModelDesc=根據定義的掩碼返回可定制的數字。 -ServerAvailableOnIPOrPort=服務器地址為 %s 在端口 %s -ServerNotAvailableOnIPOrPort=服務器在地址 處不可用\n %s 在端口 %s +ServerAvailableOnIPOrPort=服務器地址為 %s 在端口 %s +ServerNotAvailableOnIPOrPort=Server is not available at address %s on port %s DoTestServerAvailability=測試服務器連接 DoTestSend=測試發送 DoTestSendHTML=測試發送 HTML -ErrorCantUseRazIfNoYearInMask=錯誤,如果序列為 {yy} 或 {yyyy},則無法使用選項 @ 每年重置計數器\n 不在面具中。 +ErrorCantUseRazIfNoYearInMask=Error, can't use option @ to reset counter each year if sequence {yy} or {yyyy} is not in mask. ErrorCantUseRazInStartedYearIfNoYearMonthInMask=錯誤,無法使用選項 @ if 序列 {yy}{mm} 或 {yyyy}{mm} 不在面具中。 UMask=Unix/Linux/BSD/Mac 文件系統上新文件的 UMask 參數。 UMaskExplanation=此參數允許您定義 Dolibarr 在服務器上創建的文件的默認權限設置(例如在上傳期間)。
它必須是八進制值(例如,0666 表示所有人都可以讀寫)。建議值為 0600 或 0660
該參數在 Windows 服務器上無用。 @@ -390,7 +390,7 @@ LanguageFilesCachedIntoShmopSharedMemory=文件 .lang 加載到共享內存中 LanguageFile=Language file ExamplesWithCurrentSetup=當前配置的示例 ListOfDirectories=OpenDocument 模板目錄列表 -ListOfDirectoriesForModelGenODT=包含 OpenDocument 格式的模板文件的目錄列表。

將目錄的完整路徑放在這裡。
在每個目錄之間添加回車符。
要添加 GED 模塊的目錄,請在此處添加 DOL_DATA_ROOT/ecm/yourdirectoryname

這些目錄中的文件必須以 結尾\n .odt .ods 。 +ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.

Put here full path of directories.
Add a carriage return between eah directory.
To add a directory of the GED module, add here DOL_DATA_ROOT/ecm/yourdirectoryname.

Files in those directories must end with .odt or .ods. NumberOfModelFilesFound=在這些目錄中找到的 ODT/ODS 模板文件的數量 ExampleOfDirectoriesForModelGen=語法示例:
c:\\myapp\\mydocumentdir\\mysubdir
/home/myapp/mydocumentdir/mysubdir
DOL_DATA_ROOT/ecm/ecmdir FollowingSubstitutionKeysCanBeUsed=
要了解如何創建 odt 文檔模板,在將它們存儲到這些目錄之前,請閱讀 wiki 文檔: @@ -406,7 +406,7 @@ ResponseTimeout=響應超時 SmsTestMessage=測試從 __PHONEFROM__ 到 __PHONETO__ 的消息 ModuleMustBeEnabledFirst=模塊 %s 如果您需要此功能,必須先啟用。 SecurityToken=保護 URL 的關鍵 -NoSmsEngine=沒有可用的短信發送器管理器。默認發行版中未安裝短信發送器管理器,因為它們依賴於外部供應商,但您可以在 %s 上找到一些\n +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external vendor, but you can find some on %s PDF=PDF PDFDesc=PDF 生成的全局選項 PDFOtherDesc=PDF Option specific to some modules @@ -471,9 +471,9 @@ ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 LibraryToBuildPDF=用於 PDF 生成的庫 LocalTaxDesc=某些國家/地區可能會對每個發票行徵收兩種或三種稅。如果是這種情況,請選擇第二個和第三個稅的類型及其稅率。可能的類型有:
1:產品和服務適用地方稅,不含增值稅(地方稅按不含稅金額計算)
2:產品和服務需繳納地方稅,包括增值稅(地方稅按金額+主要稅費計算)
3:不含增值稅的產品適用地方稅(地方稅按不含稅金額計算)
4:含增值稅產品適用地方稅(地方稅按金額+主要增值稅計算)
5:服務需繳納地方稅,不含增值稅(地方稅按不含稅金額計算)
6:服務需繳納地方稅,含增值稅(地方稅按金額+稅費計算) SMS=短信 -LinkToTestClickToDial=輸入要撥打的電話號碼,以顯示測試用戶 的 ClickToDial 網址的鏈接\n %s +LinkToTestClickToDial=Enter a phone number to call to show a link to test the ClickToDial url for user %s RefreshPhoneLink=刷新鏈接 -LinkToTest=為用戶生成可點擊鏈接\n %s (點擊電話號碼進行測試) +LinkToTest=Clickable link generated for user %s (click phone number to test) KeepEmptyToUseDefault=保留為空以使用默認值 KeepThisEmptyInMostCases=In most cases, you can keep this field empty. DefaultLink=默認鏈接 @@ -484,7 +484,7 @@ InstalledInto=Installed into directory %s BarcodeInitForThirdparties=Mass barcode init for third-parties BarcodeInitForProductsOrServices=產品或服務的批量條形碼初始化或重置 CurrentlyNWithoutBarCode=目前,您有 %s 記錄在 %s %s 沒有定義條形碼。 -InitEmptyBarCode=%s 的初始值\n 空條形碼 +InitEmptyBarCode=Init value for the %s empty barcodes EraseAllCurrentBarCode=擦除所有當前條形碼值 ConfirmEraseAllCurrentBarCode=您確定要刪除所有當前條形碼值嗎? AllBarcodeReset=所有條形碼值已被刪除 @@ -1135,12 +1135,12 @@ LocalTax2IsUsedDesc=使用第三種稅種(第一種稅種除外) LocalTax2IsNotUsedDesc=請勿使用其他類型的稅(第一種稅除外) LocalTax2Management=第三類稅種 LocalTax1ManagementES=可再生能源管理 -LocalTax1IsUsedDescES=創建潛在客戶、發票、訂單等時默認的 RE 費率遵循有效的標準規則:
如果買家不受RE約束,則RE默認=0。規則結束。
如果買方須繳納 RE,則默認為 RE。規則結束。
+LocalTax1IsUsedDescES=創建潛在客戶、發票、訂單等時默認的 RE 費率遵循有效的標準規則:
如果買家不受RE約束,則RE默認=0。規則結束。
如果買方須繳納 RE,則默認為 RE。規則結束。
LocalTax1IsNotUsedDescES=默認情況下,建議的 RE 為 0。規則結束。 LocalTax1IsUsedExampleES=在西班牙,他們是受西班牙 IAE 某些特定部分管轄的專業人員。 LocalTax1IsNotUsedExampleES=在西班牙,他們是專業人士和社團,並受西班牙 IAE 某些部分的管轄。 LocalTax2ManagementES=IRPF管理 -LocalTax2IsUsedDescES=創建潛在客戶、發票、訂單等時默認的 IRPF 費率遵循現行標準規則:
如果賣家不受 IRPF 約束,則 IRPF 默認=0。規則結束。
如果賣方受 IRPF 約束,則默認 IRPF。規則結束。
+LocalTax2IsUsedDescES=創建潛在客戶、發票、訂單等時默認的 IRPF 費率遵循現行標準規則:
如果賣家不受 IRPF 約束,則 IRPF 默認=0。規則結束。
如果賣方受 IRPF 約束,則默認 IRPF。規則結束。
LocalTax2IsNotUsedDescES=默認情況下,建議的 IRPF 為 0。規則結束。 LocalTax2IsUsedExampleES=在西班牙,提供服務的自由職業者和獨立專業人士以及選擇模塊稅務系統的公司。 LocalTax2IsNotUsedExampleES=在西班牙,它們是不受模塊稅收制度約束的企業。 @@ -1197,6 +1197,7 @@ Skin=皮膚主題 DefaultSkin=默認皮膚主題 MaxSizeList=列表的最大長度 DefaultMaxSizeList=列表的默認最大長度 +DisplayGrandTotalInList=Display grand total (for all pages) in lists footer DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card) MessageOfDay=當天的消息 MessageLogin=登錄頁面消息 @@ -1268,8 +1269,8 @@ BrowserOS=瀏覽器操作系統 ListOfSecurityEvents=Dolibarr 安全事件列表 SecurityEventsPurged=安全事件已清除 TrackableSecurityEvents=Trackable security events -LogEventDesc=啟用特定安全事件的日誌記錄。通過菜單管理日誌\n %s - %s 。警告,此功能可能會在數據庫中生成大量數據。 -AreaForAdminOnly=設置參數可以通過設置\n 管理員用戶 僅有的。 +LogEventDesc=Enable logging for specific security events. Administrators the log via menu %s - %s. Warning, this feature can generate a large amount of data in the database. +AreaForAdminOnly=Setup parameters can be set by administrator users only. SystemInfoDesc=系統信息是您在只讀模式下獲得的雜項技術信息,僅管理員可見。 SystemAreaForAdminOnly=該區域僅供管理員用戶使用。 Dolibarr 用戶權限無法更改此限制。 CompanyFundationDesc=編輯您的公司/組織的信息。點擊“%s完成後,頁面底部的“按鈕。 @@ -1283,11 +1284,11 @@ SessionTimeOut=會話超時 SessionExplanation=如果會話清理器是由內部 PHP 會話清理器(而不是其他任何東西)完成的,則此數字保證會話在此延遲之前永遠不會過期。內部 PHP 會話清理器不保證會話在此延遲後過期。在此延遲之後,當會話清理器運行時,它將過期,因此每個 %s/%s 訪問,但僅在其他會話進行訪問期間(如果值為 0,則意味著會話的清除僅由外部進程完成)。
注意:在某些具有外部會話清理機制的服務器上(debian、ubuntu 下的 cron ...),會話可能會在外部設置定義的時間段後被銷毀,無論此處輸入的值是什麼。 SessionsPurgedByExternalSystem=Sessions on this server seems to be cleaned by an external mechanism (cron under debian, ubuntu ...), probably every %s seconds (= value of parameter session.gc_maxlifetime), so changing the value here has no effect. You must ask the server administrator to change session delay. TriggersAvailable=可用的觸發器 -TriggersDesc=觸發器是複製到目錄 後修改 Dolibarr 工作流程行為的文件\n htdocs/core/triggers 。他們實現了在 Dolibarr 事件上激活的新行動(新公司創建、發票驗證等)。 -TriggerDisabledByName=此文件中的觸發器已被 禁用\n -NORUN 他們名字的後綴。 -TriggerDisabledAsModuleDisabled=此文件中的觸發器作為模塊 被禁用\n %s 被禁用。 +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory htdocs/core/triggers. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...). +TriggerDisabledByName=Triggers in this file are disabled by the -NORUN suffix in their name. +TriggerDisabledAsModuleDisabled=Triggers in this file are disabled as module %s is disabled. TriggerAlwaysActive=無論激活的 Dolibarr 模塊是什麼,此文件中的觸發器始終處於活動狀態。 -TriggerActiveAsModuleActive=此文件中的觸發器作為模塊 處於活動狀態\n %s 已啟用。 +TriggerActiveAsModuleActive=Triggers in this file are active as module %s is enabled. GeneratedPasswordDesc=選擇自動生成密碼所使用的方法。 DictionaryDesc=插入所有參考數據。您可以將您的值添加到默認值。 ConstDesc=此頁面允許您編輯(覆蓋)其他頁面中不可用的參數。這些大多是為開發人員/高級故障排除保留的參數。 @@ -1297,7 +1298,7 @@ LimitsSetup=限制/精度設置 LimitsDesc=您可以在此處定義 Dolibarr 使用的限制、精度和優化 MAIN_MAX_DECIMALS_UNIT=最大限度。單價的小數點 MAIN_MAX_DECIMALS_TOT=最大限度。總價的小數點 -MAIN_MAX_DECIMALS_SHOWN=最大限度。價格小數點 顯示在屏幕上 。添加省略號 ... 如果您想看到“ 在此參數之後(例如“2...”)\n ... " 後綴為截斷價格。 +MAIN_MAX_DECIMALS_SHOWN=Max. decimals for prices shown on screen. Add an ellipsis ... after this parameter (e.g. "2...") if you want to see "..." suffixed to the truncated price. MAIN_ROUNDING_RULE_TOT=舍入範圍步長(適用於以 10 為基數以外的其他方式進行舍入的國家/地區。例如,如果按 0.05 步長進行舍入,則輸入 0.05) UnitPriceOfProduct=產品淨單價 TotalPriceAfterRounding=四捨五入後的總價(不含/增值稅/含稅) @@ -1320,11 +1321,11 @@ ValueIsForcedBySystem=This value is forced by the system. You can't change it. PreviousDumpFiles=現有備份文件 PreviousArchiveFiles=Existing archive files WeekStartOnDay=一周的第一天 -RunningUpdateProcessMayBeRequired=似乎需要運行升級過程(程序版本%s 與數據庫版本%s不同\n) -YouMustRunCommandFromCommandLineAfterLoginToUser=使用用戶 登錄 shell 後,您必須從命令行運行此命令\n %s 或者您必須在命令行末尾添加 -W 選項以提供 %s 密碼。 +RunningUpdateProcessMayBeRequired=Running the upgrade process seems to be required (Program version %s differs from Database version %s) +YouMustRunCommandFromCommandLineAfterLoginToUser=You must run this command from command line after login to a shell with user %s or you must add -W option at end of command line to provide %s password. YourPHPDoesNotHaveSSLSupport=SSL 函數在您的 PHP 中不可用 DownloadMoreSkins=更多皮膚可供下載 -SimpleNumRefModelDesc=返回格式為 %s 的參考號\nyymm-nnnn 其中 yy 是年份,mm 是月份,nnnn 是連續自動遞增數字,無需重置 +SimpleNumRefModelDesc=Returns the reference number in the format %syymm-nnnn where yy is the year, mm is the month and nnnn is a sequential auto-incrementing number with no reset SimpleRefNumRefModelDesc=Returns the reference number in the format n where n is a sequential auto-incrementing number with no reset AdvancedNumRefModelDesc=Returns the reference number in the format %syymm-nnnn where yy is the year, mm is the month and nnnn is a sequential auto-incrementing number with no reset SimpleNumRefNoDateModelDesc=Returns the reference number in the format %s-nnnn where nnnn is a sequential auto-incrementing number with no reset @@ -1381,12 +1382,12 @@ NewTranslationStringToShow=New translation string to show OriginalValueWas=The original translation is overwritten. Original value was:

%s TransKeyWithoutOriginalValue=You forced a new translation for the translation key '%s' that does not exist in any language files TitleNumberOfActivatedModules=Activated modules -TotalNumberOfActivatedModules=激活的模塊: %s / %s +TotalNumberOfActivatedModules=激活的模塊: %s / %s YouMustEnableOneModule=您必須至少啟用 1 個模塊 YouMustEnableTranslationOverwriteBefore=You must first enable translation overwriting to be allowed to replace a translation ClassNotFoundIntoPathWarning=類 %s 在 PHP 路徑中找不到 YesInSummer=是的,夏天 -OnlyFollowingModulesAreOpenedToExternalUsers=請注意,只有以下模塊可供外部用戶使用(無論此類用戶的權限如何),並且只有在授予權限的情況下:
+OnlyFollowingModulesAreOpenedToExternalUsers=請注意,只有以下模塊可供外部用戶使用(無論此類用戶的權限如何),並且只有在授予權限的情況下:
SuhosinSessionEncrypt=Suhosin 加密的會話存儲 ConditionIsCurrently=目前狀況為 %s YouUseBestDriver=您使用驅動程序%s 這是目前可用的最好的驅動程序。 @@ -1451,7 +1452,7 @@ TechnicalServicesProvided=Technical services provided WebDAVSetupDesc=This is the link to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that needs an existing login account/password for access. WebDavServer=Root URL of %s server: %s ##### WebCAL setup ##### -WebCalUrlForVCalExport=指向 的導出鏈接\n %s 格式可在以下鏈接中找到:%s +WebCalUrlForVCalExport=An export link to %s format is available at following link: %s ##### Invoices ##### BillsSetup=發票模塊設置 BillsNumberingModule=發票和貸方票據編號模型 @@ -1663,7 +1664,7 @@ LDAPDescUsers=此頁面允許您在 LDAP 樹中為 Dolibarr 用戶上找到的 LDAPDescGroups=此頁面允許您在 LDAP 樹中為 Dolibarr 組上找到的每個數據定義 LDAP 屬性名稱。 LDAPDescMembers=此頁面允許您在 LDAP 樹中為 Dolibarr 成員模塊上找到的每個數據定義 LDAP 屬性名稱。 LDAPDescMembersTypes=This page allows you to define LDAP attributes name in LDAP tree for each data found on Dolibarr members types. -LDAPDescValues=示例值專為 設計\n OpenLDAP 具有以下加載的架構: core.schema、cosine.schema、inetorgperson.schema )。如果您使用 thoose 值和 OpenLDAP,請修改 LDAP 配置文件 slapd.conf 加載所有這些模式。 +LDAPDescValues=Example values are designed for OpenLDAP with following loaded schemas: core.schema, cosine.schema, inetorgperson.schema). If you use thoose values and OpenLDAP, modify your LDAP config file slapd.conf to have all thoose schemas loaded. ForANonAnonymousAccess=對於經過身份驗證的訪問(例如,對於寫入訪問) PerfDolibarr=性能設置/優化報告 YouMayFindPerfAdviceHere=此頁面提供一些與性能相關的檢查或建議。 @@ -1677,10 +1678,10 @@ MemcachedAvailableAndSetup=啟用了專門用於使用 memcached 服務器的 me OPCodeCache=操作碼緩存 NoOPCodeCacheFound=未找到 OPCode 緩存。也許您正在使用 XCache 或 eAccelerator 以外的 OPCode 緩存(好),或者您可能沒有 OPCode 緩存(非常糟糕)。 HTTPCacheStaticResources=HTTP cache for static resources (css, img, JavaScript) -FilesOfTypeCached=%s 類型的文件\n 由 HTTP 服務器緩存 -FilesOfTypeNotCached=%s 類型的文件\n 不被 HTTP 服務器緩存 -FilesOfTypeCompressed=%s 類型的文件\n 由 HTTP 服務器壓縮 -FilesOfTypeNotCompressed=%s 類型的文件\n 不被 HTTP 服務器壓縮 +FilesOfTypeCached=Files of type %s are cached by HTTP server +FilesOfTypeNotCached=Files of type %s are not cached by HTTP server +FilesOfTypeCompressed=Files of type %s are compressed by HTTP server +FilesOfTypeNotCompressed=Files of type %s are not compressed by HTTP server CacheByServer=由服務器緩存 CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000" CacheByClient=通過瀏覽器緩存 @@ -2433,3 +2434,12 @@ UrlPublicInterfaceHelpAdmin=It is possible to define an alias to the web server ExportUseForce=Use the parameter -f ExportUseForceHelp=Force to continue the export even when an error is found (Backup may not be reliable) CustomPrompt=Custom prompts +AiDescription=AI (Artificial Intelligence) features +AiDescriptionLong=Provides AI (Artificial Intelligence) features in different part of the application. Need external AI API. +AI_KEY_API_CHATGPT= Key for ChatGPT IA api +AiSetup=AI module setup +AiCustomPrompt=AI customs prompt +AI_CONFIGURATIONS_PROMPT=Custom prompt +ImageGeneration=Image generation +AIPromptForFeatures=AI custom prompts for features +EnterAnIP=Enter an IP address diff --git a/htdocs/langs/zh_HK/banks.lang b/htdocs/langs/zh_HK/banks.lang index 6f04fdbc1df..169497545ad 100644 --- a/htdocs/langs/zh_HK/banks.lang +++ b/htdocs/langs/zh_HK/banks.lang @@ -68,7 +68,7 @@ AccountCard=賬戶卡 DeleteAccount=刪除帳戶 ConfirmDeleteAccount=您確定要刪除該帳戶嗎? BankTransactionByCategories=按類別分類的銀行分錄 -BankTransactionForCategory=類別 的銀行條目\n %s +BankTransactionForCategory=Bank entries for category %s RemoveFromRubrique=刪除帶有類別的鏈接 RemoveFromRubriqueConfirm=您確定要刪除條目和類別之間的鏈接嗎? ListBankTransactions=銀行分錄清單 @@ -115,7 +115,7 @@ MenuBankInternalTransfer=Internal transfer TransferDesc=使用內部轉賬從一個賬戶轉賬到另一個賬戶,應用程序將寫入兩條記錄:源賬戶中的借方和目標賬戶中的貸方。本次交易將使用相同的金額、標籤和日期。 TransferFrom=從 TransferTo=到 -TransferFromToDone=來自 的轉賬\n %s %s %s %s 已被記錄。 +TransferFromToDone=A transfer from %s to %s of %s %s has been recorded. CheckTransmitter=發件人 ValidateCheckReceipt=驗證此支票收據嗎? ConfirmValidateCheckReceipt=您確定要提交此支票收據進行驗證嗎?一旦驗證,將無法更改。 diff --git a/htdocs/langs/zh_HK/bills.lang b/htdocs/langs/zh_HK/bills.lang index cd6c84b2cfb..cd450d9014a 100644 --- a/htdocs/langs/zh_HK/bills.lang +++ b/htdocs/langs/zh_HK/bills.lang @@ -5,9 +5,9 @@ BillsCustomers=客戶發票 BillsCustomer=客戶發票 BillsSuppliers=供應商發票 BillsCustomersUnpaid=未付客戶發票 -BillsCustomersUnpaidForCompany=%s 的未付客戶發票\n +BillsCustomersUnpaidForCompany=Unpaid customer invoices for %s BillsSuppliersUnpaid=未支付的供應商發票 -BillsSuppliersUnpaidForCompany=%s 的未付款供應商發票\n +BillsSuppliersUnpaidForCompany=Unpaid vendors invoices for %s BillsLate=逾期付款 BillsStatistics=客戶發票統計 BillsStatisticsSuppliers=供應商發票統計 @@ -79,7 +79,7 @@ ReceivedPayments=已收到付款 ReceivedCustomersPayments=從客戶處收到的付款 PayedSuppliersPayments=支付給供應商的款項 ReceivedCustomersPaymentsToValid=收到客戶付款進行驗證 -PaymentsReportsForYear=%s 的付款報告\n +PaymentsReportsForYear=Payments reports for %s PaymentsReports=付款報告 PaymentsAlreadyDone=付款已經完成 PaymentsBackAlreadyDone=退款已經完成 @@ -93,6 +93,9 @@ CodePaymentMode=Payment method (code) LabelPaymentMode=Payment method (label) PaymentModeShort=Payment method PaymentTerm=Payment Term +IdPaymentTerm=Payment term (id) +CodePaymentTerm=Payment term (code) +LabelPaymentTerm=Payment term (label) PaymentConditions=付款條件 PaymentConditionsShort=付款條件 PaymentAmount=支付金額 @@ -213,8 +216,8 @@ ConfirmClassifyPaidPartiallyReasonOtherDesc=如果所有其他選項都不適合 ConfirmClassifyPaidPartiallyReasonBadSupplierDesc=A bad supplier is a supplier we refuse to pay. ConfirmClassifyAbandonReasonOther=其他 ConfirmClassifyAbandonReasonOtherDesc=此選擇將用於所有其他情況。例如,因為您計劃創建替換發票。 -ConfirmCustomerPayment=您是否確認的付款輸入\n %s %s? -ConfirmSupplierPayment=您是否確認的付款輸入\n %s %s? +ConfirmCustomerPayment=Do you confirm this payment input for %s %s? +ConfirmSupplierPayment=Do you confirm this payment input for %s %s? ConfirmValidatePayment=您確定要驗證此付款嗎?付款一經驗證,將無法進行任何更改。 ValidateBill=驗證發票 UnvalidateBill=Invalidate invoice @@ -268,6 +271,8 @@ NoDraftBills=沒有草稿發票 NoOtherDraftBills=沒有其他草稿發票 NoDraftInvoices=沒有草稿發票 RefBill=發票參考號 +RefSupplierBill=Supplier invoice ref +SupplierOrderCreateBill=Create invoice ToBill=開單 RemainderToBill=剩餘的賬單 SendBillByMail=通過電子郵件發送發票 @@ -352,6 +357,7 @@ HelpAbandonOther=該金額已被放棄,因為它是一個錯誤(例如錯誤 IdSocialContribution=社會/財政稅繳稅號 PaymentId=付款編號 PaymentRef=Payment ref. +SourceInvoiceId=Source invoice id InvoiceId=發票編號 InvoiceRef=發票參考號 InvoiceDateCreation=發票創建日期 @@ -371,7 +377,7 @@ DisabledBecauseReplacedInvoice=由於發票已被替換,操作被禁用 DescTaxAndDividendsArea=此區域顯示所有特殊費用付款的摘要。此處僅包含固定年份內的付款記錄。 NbOfPayments=付款次數 SplitDiscount=折扣一分為二 -ConfirmSplitDiscount=您確定要分割 的折扣嗎\n %s %s 分成兩個較小的折扣? +ConfirmSplitDiscount=Are you sure you want to split this discount of %s %s into two smaller discounts? TypeAmountOfEachNewDiscount=兩部分各輸入金額: TotalOfTwoDiscountMustEqualsOriginal=兩次新折扣的總和必須等於原來的折扣金額。 ConfirmRemoveDiscount=您確定要刪除此折扣嗎? @@ -444,7 +450,7 @@ PaymentConditionShort14DENDMONTH=14 days of month-end PaymentCondition14DENDMONTH=Within 14 days following the end of the month PaymentConditionShortDEP30PCTDEL=__DEPOSIT_PERCENT__%% deposit PaymentConditionDEP30PCTDEL=__DEPOSIT_PERCENT__%% deposit, remainder on delivery -FixAmount=固定金額 - 1 行,帶有標籤“%s”\n' +FixAmount=Fixed amount - 1 line with label '%s' VarAmount=可變金額 (%% 總。) VarAmountOneLine=Variable amount (%% tot.) - 1 line with label '%s' VarAmountAllLines=Variable amount (%% tot.) - all lines from origin diff --git a/htdocs/langs/zh_HK/boxes.lang b/htdocs/langs/zh_HK/boxes.lang index b738683c5cc..3214c63c92a 100644 --- a/htdocs/langs/zh_HK/boxes.lang +++ b/htdocs/langs/zh_HK/boxes.lang @@ -26,7 +26,7 @@ BoxTitleMemberNextBirthdays=Birthdays of this month (members) BoxTitleMembersByType=Members by type and status BoxTitleMembersByTags=Members by tags and status BoxTitleMembersSubscriptionsByYear=Members Subscriptions by year -BoxTitleLastRssInfos=最新%s 來自%s的新聞\n +BoxTitleLastRssInfos=Latest %s news from %s BoxTitleLastProducts=產品/服務:最後%s 修改的 BoxTitleProductsAlertStock=產品:庫存提醒 BoxTitleLastSuppliers=最新%s 記錄的供應商 @@ -115,7 +115,7 @@ BoxLastCustomerShipments=Last customer shipments BoxTitleLastCustomerShipments=Latest %s customer shipments BoxTitleLastLeaveRequests=Latest %s modified leave requests NoRecordedShipments=No recorded customer shipment -BoxCustomersOutstandingBillReached=Customers with oustanding limit reached +BoxCustomersOutstandingBillReached=Customers with outstanding limit reached # Pages UsersHome=Home users and groups MembersHome=Home Membership diff --git a/htdocs/langs/zh_HK/commercial.lang b/htdocs/langs/zh_HK/commercial.lang index bc01912b916..1c81a322d3f 100644 --- a/htdocs/langs/zh_HK/commercial.lang +++ b/htdocs/langs/zh_HK/commercial.lang @@ -14,7 +14,7 @@ ConfirmDeleteAction=您確定要刪除此活動嗎? CardAction=活動卡 ActionOnCompany=關聯公司 ActionOnContact=相關聯繫方式 -TaskRDVWith=與 %s 會面\n +TaskRDVWith=Meeting with %s ShowTask=顯示任務 ShowAction=展會活動 ActionsReport=活動報導 @@ -77,13 +77,17 @@ ToOfferALinkForOnlineSignature=Link for online signature WelcomeOnOnlineSignaturePageProposal=Welcome to the page to accept commercial proposals from %s WelcomeOnOnlineSignaturePageContract=Welcome to %s Contract PDF Signing Page WelcomeOnOnlineSignaturePageFichinter=Welcome to %s Intervention PDF Signing Page +WelcomeOnOnlineSignaturePageSociete_rib=Welcome to %s SEPA mandate PDF Signing Page ThisScreenAllowsYouToSignDocFromProposal=This screen allow you to accept and sign, or refuse, a quote/commercial proposal ThisScreenAllowsYouToSignDocFromContract=This screen allow you to sign contract on PDF format online. ThisScreenAllowsYouToSignDocFromFichinter=This screen allow you to sign intervention on PDF format online. +ThisScreenAllowsYouToSignDocFromSociete_rib=This screen allow you to sign SEPA Mandate on PDF format online. ThisIsInformationOnDocumentToSignProposal=This is information on document to accept or refuse ThisIsInformationOnDocumentToSignContract=This is information on contract to sign ThisIsInformationOnDocumentToSignFichinter=This is information on intervention to sign +ThisIsInformationOnDocumentToSignSociete_rib=This is information on SEPA Mandate to sign SignatureProposalRef=Signature of quote/commercial proposal %s SignatureContractRef=Signature of contract %s SignatureFichinterRef=Signature of intervention %s +SignatureSociete_ribRef=Signature of SEPA Mandate %s FeatureOnlineSignDisabled=Feature for online signing disabled or document generated before the feature was enabled diff --git a/htdocs/langs/zh_HK/companies.lang b/htdocs/langs/zh_HK/companies.lang index b2863ab1205..ecafe19bc59 100644 --- a/htdocs/langs/zh_HK/companies.lang +++ b/htdocs/langs/zh_HK/companies.lang @@ -1,4 +1,6 @@ # Dolibarr language file - Source file is en_US - companies +newSocieteAdded=Your contact details have been recorded. We will get back to you soon... +ContactUsDesc=This form allows you to send us a message for a first contact. ErrorCompanyNameAlreadyExists=公司名稱%s 已經存在。選擇另一個。 ErrorSetACountryFirst=把國家放在第一位 SelectThirdParty=選擇第三方 @@ -37,7 +39,7 @@ ThirdPartyProspects=前景 ThirdPartyProspectsStats=前景 ThirdPartyCustomers=顧客 ThirdPartyCustomersStats=顧客 -ThirdPartyCustomersWithIdProf12=擁有 %s 的客戶\n 或%s +ThirdPartyCustomersWithIdProf12=Customers with %s or %s ThirdPartySuppliers=供應商 ThirdPartyType=第三方類型 Individual=私人個體 @@ -46,7 +48,7 @@ ParentCompany=母公司 Subsidiaries=子公司 ReportByMonth=Report per month ReportByCustomers=每個客戶的報告 -ReportByThirdparties=Report per thirdparty +ReportByThirdparties=Report per third party ReportByQuarter=按費率報告 CivilityCode=文明守則 RegisteredOffice=註冊辦事處 @@ -117,12 +119,20 @@ ProfId3Short=教授 ID 3 ProfId4Short=教授 ID 4 ProfId5Short=教授 ID 5 ProfId6Short=教授 ID 6 +ProfId7Short=Prof. id 7 +ProfId8Short=Prof. id 8 +ProfId9Short=Prof. id 9 +ProfId10Short=Prof. id 10 ProfId1=專業 ID 1 ProfId2=專業 ID 2 ProfId3=專業 ID 3 ProfId4=專業 ID 4 ProfId5=專業 ID 5 ProfId6=專業 ID 6 +ProfId7=Professional ID 7 +ProfId8=Professional ID 8 +ProfId9=Professional ID 9 +ProfId10=Professional ID 10 ProfId1AR=教授 ID 1 (CUIT/CUIL) ProfId2AR=Prof Id 2(收入野蠻人) ProfId3AR=- @@ -201,12 +211,20 @@ ProfId3FR=教授 Id 3(NAF,舊 APE) ProfId4FR=教授 ID 4 (RCS/RM) ProfId5FR=教授 ID 5(EORI 號) ProfId6FR=- +ProfId7FR=- +ProfId8FR=- +ProfId9FR=- +ProfId10FR=- ProfId1ShortFR=SIREN ProfId2ShortFR=SIRET ProfId3ShortFR=NAF ProfId4ShortFR=RCS ProfId5ShortFR=EORI ProfId6ShortFR=- +ProfId7ShortFR=- +ProfId8ShortFR=- +ProfId9ShortFR=- +ProfId10ShortFR=- ProfId1GB=註冊號碼 ProfId2GB=- ProfId3GB=碳化矽 @@ -245,7 +263,7 @@ ProfId5MA=身份證教授。 5(ICE) ProfId6MA=- ProfId1MX=教授 ID 1 (R.F.C)。 ProfId2MX=教授 Id 2 (R..P. IMSS) -ProfId3MX=教授 ID 3(專業章程) +ProfId3MX=Prof Id 3 (Professional Charter) ProfId4MX=- ProfId5MX=- ProfId6MX=- @@ -313,13 +331,13 @@ CustomerRelativeDiscount=相對客戶折扣 SupplierRelativeDiscount=Relative vendor discount CustomerRelativeDiscountShort=相對折扣 CustomerAbsoluteDiscountShort=絕對折扣 -CompanyHasRelativeDiscount=該客戶的默認折扣為 %s%% +CompanyHasRelativeDiscount=該客戶的默認折扣為 %s%% CompanyHasNoRelativeDiscount=該客戶默認無相對折扣 HasRelativeDiscountFromSupplier=You have a default discount of %s%% with this vendor HasNoRelativeDiscountFromSupplier=No default relative discount with this vendor -CompanyHasAbsoluteDiscount=該客戶可享受 折扣(貸項票據或預付款)\n %s %s +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for %s %s CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for %s %s -CompanyHasCreditNote=該客戶仍有 的貸方票據\n %s %s +CompanyHasCreditNote=This customer still has credit notes for %s %s HasNoAbsoluteDiscountFromSupplier=No discount/credit available from this vendor HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for %s %s from this vendor HasDownPaymentOrCommercialDiscountFromSupplier=You have discounts available (commercial, down payments) for %s %s from this vendor @@ -382,14 +400,14 @@ NewContact=新聯繫人 NewContactAddress=新聯繫人/地址 MyContacts=我的聯繫方式 Capital=首都 -CapitalOf=%s 的大寫字母\n +CapitalOf=Capital of %s EditCompany=編輯公司 ThisUserIsNot=該用戶不是潛在客戶、客戶或供應商 VATIntraCheck=查看 VATIntraCheckDesc=增值稅 ID 必須包含國家/地區前綴。鏈接 %s 使用歐洲增值稅檢查服務 (VIES),該服務需要從 Dolibarr 服務器訪問互聯網。 -VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do +VATIntraCheckURL=https://ec.europa.eu/taxation_customs/vies/#/vat-validation VATIntraCheckableOnEUSite=在歐盟委員會網站上查看共同體內增值稅 ID -VATIntraManualCheck=您還可以在歐盟委員會網站上手動查看 %s +VATIntraManualCheck=您還可以在歐盟委員會網站上手動查看 %s ErrorVATCheckMS_UNAVAILABLE=檢查不可能。成員國不提供檢查服務 (%s)。 NorProspectNorCustomer=不是潛在客戶,也不是客戶 JuridicalStatus=企業實體類型 @@ -470,12 +488,12 @@ UniqueThirdParties=第三方總數 InActivity=打開 ActivityCeased=關閉 ThirdPartyIsClosed=Third party is closed -ProductsIntoElements=映射到 %s 的產品/服務列表\n +ProductsIntoElements=List of products/services mapped to %s CurrentOutstandingBill=當前未結帳單 OutstandingBill=最大限度。對於未結帳單 OutstandingBillReached=最大限度。未結帳單達到 OrderMinAmount=Minimum amount for order -MonkeyNumRefModelDesc=返回格式為 %s 的數字\nyymm-nnnn 為客戶代碼,%syymm-nnnn 表示供應商代碼,其中 yy 是年份,mm 是月份,nnnn 是連續的自動遞增數字,不會中斷,也不會返回到 0。 +MonkeyNumRefModelDesc=Return a number in the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequential auto-incrementing number with no break and no return to 0. LeopardNumRefModelDesc=該代碼是免費的。該代碼可以隨時修改。 ManagingDirectors=經理姓名(首席執行官、董事、總裁...) MergeOriginThirdparty=Duplicate third party (third party you want to delete) @@ -500,7 +518,7 @@ InEEC=Europe (EEC) RestOfEurope=Rest of Europe (EEC) OutOfEurope=Out of Europe (EEC) CurrentOutstandingBillLate=Current outstanding bill late -BecarefullChangeThirdpartyBeforeAddProductToInvoice=Be carefull, depending on your product price settings, you should change thirdparty before adding product to POS. +BecarefullChangeThirdpartyBeforeAddProductToInvoice=Be careful, depending on your product price settings, you should change the third party before adding product to POS. EmailAlreadyExistsPleaseRewriteYourCompanyName=email already exists please rewrite your company name TwoRecordsOfCompanyName=more than one record exists for this company, please contact us to complete your partnership request CompanySection=Company section @@ -508,3 +526,5 @@ ShowSocialNetworks=Show social networks HideSocialNetworks=Hide social networks ExternalSystemID=External system ID IDOfPaymentInAnExternalSystem=ID of the payment mode into an external system (like Stripe, Paypal, ...) +AADEWebserviceCredentials=AADE Webservice Credentials +ThirdPartyMustBeACustomerToCreateBANOnStripe=The third-party must be a customer to allow the creation of its bank info on Stripe side diff --git a/htdocs/langs/zh_HK/compta.lang b/htdocs/langs/zh_HK/compta.lang index 41996a7b6c8..dbd9fb34f57 100644 --- a/htdocs/langs/zh_HK/compta.lang +++ b/htdocs/langs/zh_HK/compta.lang @@ -162,28 +162,29 @@ CalcModeVATDebt=模式 %s承諾會計增值稅%s 。 CalcModeVATEngagement=模式 %s收入支出增值稅%s 。 CalcModeDebt=對已知記錄文件的分析 CalcModeEngagement=已知付款記錄分析 +CalcModePayment=Analysis of known recorded payments CalcModeBookkeeping=Analysis of data journalized in Bookkeeping Ledger table. CalcModeNoBookKeeping=Even if they are not yet accounted in Ledger -CalcModeLT1= 模式 %s客戶發票上的 RE - 供應商發票%s -CalcModeLT1Debt=模式 %s客戶發票上的 RE%s -CalcModeLT1Rec= 模式 %s供應商發票上的 RE%s -CalcModeLT2= 模式 %s客戶發票上的 IRPF - 供應商發票%s -CalcModeLT2Debt=模式 %s客戶發票上的 IRPF%s -CalcModeLT2Rec= 模式 %s供應商發票上的 IRPF%s +CalcModeLT1= 模式 %s客戶發票上的 RE - 供應商發票%s +CalcModeLT1Debt=模式 %s客戶發票上的 RE%s +CalcModeLT1Rec= 模式 %s供應商發票上的 RE%s +CalcModeLT2= 模式 %s客戶發票上的 IRPF - 供應商發票%s +CalcModeLT2Debt=模式 %s客戶發票上的 IRPF%s +CalcModeLT2Rec= 模式 %s供應商發票上的 IRPF%s AnnualSummaryDueDebtMode=收入和支出餘額,年度匯總 AnnualSummaryInputOutputMode=收入和支出餘額,年度匯總 AnnualByCompanies=Balance of income and expenses, by predefined groups of account AnnualByCompaniesDueDebtMode=收入和支出餘額,按預定義組劃分的詳細信息,模式 %s索賠-債務%s 承諾會計 。 AnnualByCompaniesInputOutputMode=收入和支出餘額,按預定義組劃分的詳細信息,模式 %s收入-支出%s 現金會計 。 -SeeReportInInputOutputMode=請參閱 %s付款分析%s 基於的計算\n 記錄的付款 即使尚未計入 Ledger,也已完成 -SeeReportInDueDebtMode=請參閱 %s記錄文檔分析%s 基於已知的進行計算\n 錄製的文檔 即使它們尚未計入 Ledger -SeeReportInBookkeepingMode=See %sanalysis of bookeeping ledger table%s for a report based on Bookkeeping Ledger table +SeeReportInInputOutputMode=See %sanalysis of payments%s for a calculation based on recorded payments made even if they are not yet accounted in Ledger +SeeReportInDueDebtMode=See %sanalysis of recorded documents%s for a calculation based on known recorded documents even if they are not yet accounted in Ledger +SeeReportInBookkeepingMode=See %sanalysis of bookkeeping ledger table%s for a report based on Bookkeeping Ledger table RulesAmountWithTaxIncluded=- 顯示的金額包含所有稅費 RulesAmountWithTaxExcluded=- Amounts of invoices shown are with all taxes excluded RulesResultDue=- 包括所有發票、費用、增值稅、捐贈、工資,無論是否支付。
- 它基於發票的開票日期以及費用或稅款支付的到期日。對於工資,使用期末日期。 RulesResultInOut=- 它包括發票、費用、增值稅和工資的實際付款。
- 它基於發票、費用、增值稅、捐贈和工資的支付日期。 -RulesCADue=- 它包括客戶的到期發票,無論是否已付款。
- 它基於這些發票的賬單日期。
-RulesCAIn=- 它包括從客戶收到的發票的所有有效付款。
- 基於這些發票的付款日期
+RulesCADue=- 它包括客戶的到期發票,無論是否已付款。
- 它基於這些發票的賬單日期。
+RulesCAIn=- 它包括從客戶收到的發票的所有有效付款。
- 基於這些發票的付款日期
RulesCATotalSaleJournal=It includes all credit lines from the Sale journal. RulesSalesTurnoverOfIncomeAccounts=It includes (credit - debit) of lines for product accounts in group INCOME RulesAmountOnInOutBookkeepingRecord=It includes record in your Ledger with accounting accounts that has the group "EXPENSE" or "INCOME" @@ -245,7 +246,7 @@ ToCreateAPredefinedInvoice=要創建模板發票,請創建標準發票,然 LinkedOrder=訂單鏈接 Mode1=方法一 Mode2=方法二 -CalculationRuleDesc=要計算增值稅總額,有兩種方法:
方法 1 是對每行的數據進行四捨五入,然後求和。
方法 2 是將每行上的所有增值稅相加,然後對結果進行四捨五入。
最終結果可能相差幾美分。默認模式為 模式\n %s 。 +CalculationRuleDesc=To calculate total VAT, there is two methods:
Method 1 is rounding vat on each line, then summing them.
Method 2 is summing all vat on each line, then rounding result.
Final result may differs from few cents. Default mode is mode %s. CalculationRuleDescSupplier=根據供應商的情況,選擇適當的方法來應用相同的計算規則並得到與供應商期望的相同的結果。 TurnoverPerProductInCommitmentAccountingNotRelevant=無法獲取按產品收集的營業額報告。此報告僅適用於已開具發票的營業額。 TurnoverPerSaleTaxRateInCommitmentAccountingNotRelevant=The report of Turnover collected per sale tax rate is not available. This report is only available for turnover invoiced. @@ -253,6 +254,8 @@ CalculationMode=計算方式 AccountancyJournal=會計代碼日記帳 ACCOUNTING_VAT_SOLD_ACCOUNT=Account (from the Chart Of Account) to be used as the default account for VAT on sales (used if not defined on VAT dictionary setup) ACCOUNTING_VAT_BUY_ACCOUNT=Account (from the Chart Of Account) to be used as the default account for VAT on purchases (used if not defined on VAT dictionary setup) +ACCOUNTING_REVENUESTAMP_SOLD_ACCOUNT=Account (from the Chart Of Account) to be used for the revenue stamp on sales +ACCOUNTING_REVENUESTAMP_BUY_ACCOUNT=Account (from the Chart Of Account) to be used for the revenue stamp on purchases ACCOUNTING_VAT_PAY_ACCOUNT=Account (from the Chart Of Account) to be used as the default account for paying VAT ACCOUNTING_VAT_BUY_REVERSE_CHARGES_CREDIT=Account (from the Chart Of Account) to be used as the default account for VAT on purchases for reverse charges (Credit) ACCOUNTING_VAT_BUY_REVERSE_CHARGES_DEBIT=Account (from the Chart Of Account) to be used as the default account for VAT on purchases for reverse charges (Debit) diff --git a/htdocs/langs/zh_HK/contracts.lang b/htdocs/langs/zh_HK/contracts.lang index df1ca5be030..4d3b965bcb4 100644 --- a/htdocs/langs/zh_HK/contracts.lang +++ b/htdocs/langs/zh_HK/contracts.lang @@ -35,7 +35,7 @@ DeleteAContract=刪除合同 ActivateAllOnContract=Activate all services CloseAContract=關閉合同 ConfirmDeleteAContract=您確定要刪除此合同及其所有服務嗎? -ConfirmValidateContract=您確定要以 名義驗證此合同嗎\n %s ? +ConfirmValidateContract=Are you sure you want to validate this contract under name %s? ConfirmActivateAllOnContract=This will open all services (not yet active). Are you sure you want to open all services? ConfirmCloseContract=這將關閉所有服務(過期或未過期)。您確定要關閉此合同嗎? ConfirmCloseService=您確定要關閉此服務嗎?日期為 %s ? @@ -78,12 +78,12 @@ CloseAllContracts=關閉所有合同行 DeleteContractLine=刪除合同行 ConfirmDeleteContractLine=您確定要刪除此合同行嗎? MoveToAnotherContract=將服務轉移到另一個合同中。 -ConfirmMoveToAnotherContract=我選擇了新的目標合同並確認我想將此服務移至此合同中。 +ConfirmMoveToAnotherContract=I chose a new target contract and confirm I want to move this service into this contract. ConfirmMoveToAnotherContractQuestion=選擇您想要將此服務移至哪個現有合同(同一第三方)? PaymentRenewContractId=續訂合同%s (服務%s) ExpiredSince=截止日期 NoExpiredServices=沒有過期的活動服務 -ListOfServicesToExpireWithDuration=將於 %s 到期的服務列表\n 天 +ListOfServicesToExpireWithDuration=List of Services to expire in %s days ListOfServicesToExpireWithDurationNeg=服務列表已過期超過 %s 天 ListOfServicesToExpire=即將到期的服務列表 NoteListOfYourExpiredServices=此列表僅包含您作為銷售代錶鍊接到的第三方的合同服務。 diff --git a/htdocs/langs/zh_HK/cron.lang b/htdocs/langs/zh_HK/cron.lang index 177ca2636e4..6586d7bf25b 100644 --- a/htdocs/langs/zh_HK/cron.lang +++ b/htdocs/langs/zh_HK/cron.lang @@ -1,6 +1,5 @@ # Dolibarr language file - Source file is en_US - cron -# About page -# Right +# Permissions Permission23101 = 讀取預定作業 Permission23102 = 創建/更新預定作業 Permission23103 = 刪除預定作業 @@ -14,7 +13,7 @@ FileToLaunchCronJobs=命令行檢查並啟動合格的 cron 作業 CronExplainHowToRunUnix=在 Unix 環境中,您應該使用以下 crontab 條目每 5 分鐘運行一次命令行 CronExplainHowToRunWin=在 Microsoft(tm) Windows 環境中,您可以使用計劃任務工具每 5 分鐘運行一次命令行 CronMethodDoesNotExists=Class %s does not contain any method %s -CronMethodNotAllowed=Method %s of class %s is in blacklist of forbidden methods +CronMethodNotAllowed=Method %s of class %s is in blocklist of forbidden methods CronJobDefDesc=Cron job profiles are defined into the module descriptor file. When module is activated, they are loaded and available so you can administer the jobs from the admin tools menu %s. CronJobProfiles=List of predefined cron job profiles # Menu @@ -63,11 +62,11 @@ CronStatusInactiveBtn=禁用 CronTaskInactive=該作業已禁用(未安排) CronId=ID CronClassFile=帶類的文件名 -CronModuleHelp=Dolibarr 模塊目錄的名稱(也適用於外部 Dolibarr 模塊)。
例如調用 Dolibarr Product 對象 /htdocs/ 的 fetch 方法\n 產品 /class/product.class.php,模塊的值為
產品 -CronClassFileHelp=要加載的相對路徑和文件名(路徑相對於 Web 服務器根目錄)。
例如調用 Dolibarr Product 對象 htdocs/product/class/ 的 fetch 方法\n 產品.class.php ,類文件名的值為
產品/類/product.class.php -CronObjectHelp=要加載的對象名稱。
例如調用 Dolibarr Product 對象 /htdocs/product/class/product.class.php 的 fetch 方法,類文件名的值為
產品 -CronMethodHelp=要啟動的對象方法。
例如調用 Dolibarr Product 對象 /htdocs/product/class/product.class.php 的 fetch 方法,method 的值為
獲取 -CronArgsHelp=方法參數。
例如調用 Dolibarr Product 對象 /htdocs/product/class/product.class.php 的 fetch 方法,參數值可以是
0、ProductRef +CronModuleHelp=Name of Dolibarr module directory (also work with external Dolibarr module).
For example to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for module is
product +CronClassFileHelp=The relative path and file name to load (path is relative to web server root directory).
For example to call the fetch method of Dolibarr Product object htdocs/product/class/product.class.php, the value for class file name is
product/class/product.class.php +CronObjectHelp=要加載的對象名稱。
例如調用 Dolibarr Product 對象 /htdocs/product/class/product.class.php 的 fetch 方法,類文件名的值為
產品 +CronMethodHelp=要啟動的對象方法。
例如調用 Dolibarr Product 對象 /htdocs/product/class/product.class.php 的 fetch 方法,method 的值為
獲取 +CronArgsHelp=The method arguments.
For example to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for parameters can be
0, ProductRef CronCommandHelp=要執行的系統命令行。 CronCreateJob=Create new Scheduled Job CronFrom=From @@ -91,6 +90,7 @@ WarningCronDelayed=Attention, for performance purpose, whatever is next date of DATAPOLICYJob=Data cleaner and anonymizer JobXMustBeEnabled=Job %s must be enabled EmailIfError=Email for warning on error +JobNotFound=Job %s not found in list of jobs (try to disable/enabled module) ErrorInBatch=Error when running the job %s # Cron Boxes diff --git a/htdocs/langs/zh_HK/errors.lang b/htdocs/langs/zh_HK/errors.lang index b1b00dd3a62..5fea1e573fd 100644 --- a/htdocs/langs/zh_HK/errors.lang +++ b/htdocs/langs/zh_HK/errors.lang @@ -15,14 +15,14 @@ ErrorGroupAlreadyExists=組%s 已經存在。 ErrorEmailAlreadyExists=Email %s already exists. ErrorRecordNotFound=找不到記錄。 ErrorRecordNotFoundShort=Not found -ErrorFailToCopyFile=無法複製文件“”\n %s ' 進入 ' %s '。 +ErrorFailToCopyFile=Failed to copy file '%s' into '%s'. ErrorFailToCopyDir=Failed to copy directory '%s' into '%s'. -ErrorFailToRenameFile=無法重命名文件“”\n %s ' 進入 ' %s '。 -ErrorFailToDeleteFile=無法刪除文件“”\n %s '。 -ErrorFailToCreateFile=無法創建文件“”\n %s '。 -ErrorFailToRenameDir=無法重命名目錄“”\n %s ' 進入 ' %s '。 -ErrorFailToCreateDir=無法創建目錄“”\n %s '。 -ErrorFailToDeleteDir=無法刪除目錄“”\n %s '。 +ErrorFailToRenameFile=Failed to rename file '%s' into '%s'. +ErrorFailToDeleteFile=Failed to remove file '%s'. +ErrorFailToCreateFile=Failed to create file '%s'. +ErrorFailToRenameDir=Failed to rename directory '%s' into '%s'. +ErrorFailToCreateDir=Failed to create directory '%s'. +ErrorFailToDeleteDir=Failed to delete directory '%s'. ErrorFailToMakeReplacementInto=Failed to make replacement into file '%s'. ErrorFailToGenerateFile=Failed to generate file '%s'. ErrorThisContactIsAlreadyDefinedAsThisType=該聯繫人已被定義為該類型的聯繫人。 @@ -51,7 +51,7 @@ ErrorBadDateFormat=值 '%s' 日期格式錯誤 ErrorWrongDate=日期不正確! ErrorFailedToWriteInDir=無法寫入目錄 %s ErrorFailedToBuildArchive=Failed to build archive file %s -ErrorFoundBadEmailInFile=發現 %s 的電子郵件語法不正確\n 文件中的行(示例行 %s 電子郵件=%s) +ErrorFoundBadEmailInFile=Found incorrect email syntax for %s lines in file (example line %s with email=%s) ErrorUserCannotBeDelete=用戶無法刪除。也許它與 Dolibarr 實體有關。 ErrorFieldsRequired=一些必填字段已留空。 ErrorSubjectIsRequired=The email subject is required @@ -85,7 +85,7 @@ ErrorFieldMustHaveXChar=The field %s must have at least %s characters. ErrorNoAccountancyModuleLoaded=沒有激活會計模塊 ErrorExportDuplicateProfil=該導出集的配置文件名稱已存在。 ErrorLDAPSetupNotComplete=Dolibarr-LDAP 匹配不完整。 -ErrorLDAPMakeManualTest=目錄 %s 中已生成 .ldif 文件\n。嘗試從命令行手動加載它以獲得有關錯誤的更多信息。 +ErrorLDAPMakeManualTest=A .ldif file has been generated in directory %s. Try to load it manually from command line to have more information on errors. ErrorCantSaveADoneUserWithZeroPercentage=如果字段“完成者”也已填寫,則無法保存“狀態未開始”的操作。 ErrorPleaseTypeBankTransactionReportName=請輸入必須報告該條目的銀行對賬單名稱(格式 YYYYMM 或 YYYYMMDD) ErrorRecordHasChildren=無法刪除記錄,因為它有一些子記錄。 @@ -94,9 +94,9 @@ ErrorRecordIsUsedCantDelete=無法刪除記錄。它已被使用或包含到另 ErrorModuleRequireJavascript=JavaScript must not be disabled to have this feature working. To enable/disable JavaScript, go to menu Home->Setup->Display. ErrorPasswordsMustMatch=兩個輸入的密碼必須相互匹配 ErrorContactEMail=A technical error occurred. Please, contact administrator to following email %s and provide the error code %s in your message, or add a screen copy of this page. -ErrorWrongValueForField=字段 %s : ' %s ' 與正則表達式規則 不匹配\n %s +ErrorWrongValueForField=Field %s: '%s' does not match regex rule %s ErrorHtmlInjectionForField=Field %s: The value '%s' contains a malicious data not allowed -ErrorFieldValueNotIn=字段 %s : ' %s ' 不是字段 中找到的值\n %s %s +ErrorFieldValueNotIn=Field %s: '%s' is not a value found in field %s of %s ErrorFieldRefNotIn=字段 %s : ' %s ' 不是 %s 現有參考 ErrorMultipleRecordFoundFromRef=Several record found when searching from ref %s. No way to know which ID to use. ErrorsOnXLines=%s 發現錯誤 @@ -118,14 +118,14 @@ ErrorProdIdAlreadyExist=%s 被分配給另外三分之一 ErrorFailedToSendPassword=發送密碼失敗 ErrorFailedToLoadRSSFile=無法獲取 RSS 源。如果錯誤消息未提供足夠的信息,請嘗試添加常量 MAIN_SIMPLEXMLLOAD_DEBUG。 ErrorForbidden=拒絕訪問。
您嘗試訪問已禁用模塊的頁面、區域或功能,或者未處於經過身份驗證的會話中,或者您的用戶不允許訪問該頁面、區域或功能。 -ErrorForbidden2=您的 Dolibarr 管理員可以從菜單 %s 定義此登錄的權限\n->%s。 +ErrorForbidden2=Permission for this login can be defined by your Dolibarr administrator from menu %s->%s. ErrorForbidden3=看來 Dolibarr 不是通過經過身份驗證的會話使用的。查看 Dolibarr 設置文檔以了解如何管理身份驗證(htaccess、mod_auth 或其他...)。 ErrorForbidden4=Note: clear your browser cookies to destroy existing sessions for this login. ErrorNoImagickReadimage=在此 PHP 中未找到 Imagick 類。無法進行預覽。管理員可以從菜單“設置 - 顯示”禁用此選項卡。 ErrorRecordAlreadyExists=記錄已存在 ErrorLabelAlreadyExists=This label already exists -ErrorCantReadFile=無法讀取文件“%s”\n' -ErrorCantReadDir=無法讀取目錄“%s”\n' +ErrorCantReadFile=Failed to read file '%s' +ErrorCantReadDir=Failed to read directory '%s' ErrorBadLoginPassword=登錄名或密碼值錯誤 ErrorLoginDisabled=您的帳戶已禁用 ErrorFailedToRunExternalCommand=無法運行外部命令。檢查它是否可用並且可由您的 PHP 服務器用戶運行。還要檢查該命令是否在 shell 級別上不受 apparmor 等安全層的保護。 @@ -140,7 +140,7 @@ ErrorLinesCantBeNegativeOnDeposits=Lines can't be negative in a deposit. You wil ErrorQtyForCustomerInvoiceCantBeNegative=Quantity for line into customer invoices can't be negative ErrorWebServerUserHasNotPermission=用戶帳戶 %s 用於執行 Web 服務器沒有權限 ErrorNoActivatedBarcode=未激活條形碼類型 -ErrUnzipFails=解壓%s失敗\n 與 ZipArchive +ErrUnzipFails=Failed to unzip %s with ZipArchive ErrNoZipEngine=沒有引擎可壓縮/解壓縮 %s 這個 PHP 中的文件 ErrorFileMustBeADolibarrPackage=文件%s 必須是 Dolibarr zip 包 ErrorModuleFileRequired=You must select a Dolibarr module package file @@ -341,9 +341,9 @@ WarningSafeModeOnCheckExecDir=警告,PHP 選項 安全模式 因此 WarningBookmarkAlreadyExists=具有此標題或此目標 (URL) 的書籤已存在。 WarningPassIsEmpty=警告,數據庫密碼為空。這是一個安全漏洞。您應該向數據庫添加密碼並更改conf.php 文件以反映這一點。 WarningConfFileMustBeReadOnly=警告,您的配置文件 ( htdocs/conf/conf.php ) 可以被網絡服務器覆蓋。這是一個嚴重的安全漏洞。將文件的權限修改為Web 服務器使用的操作系統用戶的只讀模式。如果你的磁盤使用Windows和FAT格式,你必須知道這個文件系統不允許給文件添加權限,所以不能完全安全。 -WarningsOnXLines=關於 的警告\n %s 源記錄 +WarningsOnXLines=Warnings on %s source record(s) WarningNoDocumentModelActivated=尚未激活用於文檔生成的模型。在您檢查模塊設置之前,將默認選擇一個模型。 -WarningLockFileDoesNotExists=警告,安裝完成後,您必須通過添加文件 來禁用安裝/遷移工具\n install.lock 進入目錄 %s 。忽略創建此文件會帶來嚴重的安全風險。 +WarningLockFileDoesNotExists=Warning, once setup is finished, you must disable the installation/migration tools by adding a file install.lock into directory %s. Omitting the creation of this file is a grave security risk. WarningUntilDirRemoved=只要漏洞存在,此安全警告就會保持有效。 WarningCloseAlways=警告,即使源元素和目標元素之間的金額不同,也會完成關閉。請謹慎啟用此功能。 WarningUsingThisBoxSlowDown=警告,使用此框會嚴重減慢所有顯示該框的頁面。 diff --git a/htdocs/langs/zh_HK/exports.lang b/htdocs/langs/zh_HK/exports.lang index dafd7bf2b66..66b45b2f37d 100644 --- a/htdocs/langs/zh_HK/exports.lang +++ b/htdocs/langs/zh_HK/exports.lang @@ -57,7 +57,7 @@ FileMustHaveOneOfFollowingFormat=要導入的文件必須具有以下格式之 DownloadEmptyExampleShort=Download a sample file DownloadEmptyExample=下載包含可導入字段的示例和信息的模板文件 StarAreMandatory=Into the template file, all fields with a * are mandatory fields -ChooseFormatOfFileToImport=單擊 %s 選擇要用作導入文件格式的文件格式\n 圖標來選擇它... +ChooseFormatOfFileToImport=Choose the file format to use as import file format by clicking on the %s icon to select it... ChooseFileToImport=上傳文件,然後點擊%s 圖標選擇文件作為源導入文件... SourceFileFormat=源文件格式 FieldsInSourceFile=源文件中的字段 @@ -83,13 +83,13 @@ SelectFormat=選擇此導入文件格式 RunImportFile=導入數據 NowClickToRunTheImport=檢查導入模擬的結果。更正所有錯誤並重新測試。
當模擬報告沒有錯誤時,您可以繼續將數據導入數據庫。 DataLoadedWithId=導入的數據將在每個數據庫表中具有一個具有以下導入 ID 的附加字段: %s ,以便在調查與此導入相關的問題時可以對其進行搜索。 -ErrorMissingMandatoryValue=源文件中 列中的強制數據為空\n %s 。 +ErrorMissingMandatoryValue=Mandatory data is empty in the source file in column %s. TooMuchErrors=還有 %s 其他源代碼行有錯誤,但輸出受到限制。 TooMuchWarnings=還有 %s 其他源代碼行帶有警告,但輸出受到限制。 EmptyLine=空行(將被丟棄) -CorrectErrorBeforeRunningImport=您 必須 更正所有錯誤
之前\n 運行最終導入。 +CorrectErrorBeforeRunningImport=You must correct all errors before running the definitive import. FileWasImported=文件已導入,編號為 %s 。 -YouCanUseImportIdToFindRecord=您可以通過過濾字段來查找數據庫中所有導入的記錄\n import_key='%s' 。 +YouCanUseImportIdToFindRecord=You can find all the imported records in your database by filtering on field import_key='%s'. NbOfLinesOK=沒有錯誤和警告的行數: %s 。 NbOfLinesImported=成功導入的行數: %s 。 DataComeFromNoWhere=要插入的值來自源文件中的任何地方。 @@ -101,8 +101,8 @@ DataIDSourceIsInsertedInto=使用源文件中的數據找到的父對象的 ID DataCodeIDSourceIsInsertedInto=從代碼中找到的父行的 id 將被插入到以下字段中: SourceRequired=數據值是必填項 SourceExample=可能的數據值示例 -ExampleAnyRefFoundIntoElement=找到元素 的任何引用\n %s -ExampleAnyCodeOrIdFoundIntoDictionary=在字典中找到的任何代碼(或 ID) %s +ExampleAnyRefFoundIntoElement=Any ref found for element %s +ExampleAnyCodeOrIdFoundIntoDictionary=在字典中找到的任何代碼(或 ID) %s CSVFormatDesc= 逗號分隔值 文件格式 (.csv)。
這是一種文本文件格式,其中字段由分隔符分隔 [ %s ]。如果在字段內容中找到分隔符,則字段將按四捨五入字符 [ %s ]。轉義圓字符的轉義字符是 [ %s ]。 Excel95FormatDesc= Excel 文件格式 (.xls)
這是本機 Excel 95 格式 (BIFF5)。 Excel2007FormatDesc= Excel 文件格式 (.xlsx)
這是本機 Excel 2007 格式 (SpreadsheetML)。 diff --git a/htdocs/langs/zh_HK/holiday.lang b/htdocs/langs/zh_HK/holiday.lang index 9b740a37459..88bb3232983 100644 --- a/htdocs/langs/zh_HK/holiday.lang +++ b/htdocs/langs/zh_HK/holiday.lang @@ -5,7 +5,7 @@ Holiday=Leave CPTitreMenu=離開 MenuReportMonth=月結單 MenuAddCP=新請假申請 -MenuCollectiveAddCP=New collective leave request +MenuCollectiveAddCP=New collective leave NotActiveModCP=您必須啟用“離開”模塊才能查看此頁面。 AddCP=提出請假請求 DateDebCP=開始日期 @@ -29,7 +29,7 @@ DescCP=描述 SendRequestCP=創建休假請求 DelayToRequestCP=休假請求必須至少 %s 天 在他們面前。 MenuConfCP=休假餘額 -SoldeCPUser=請假餘額(以天為單位): %s +SoldeCPUser=請假餘額(以天為單位): %s ErrorEndDateCP=您選擇的結束日期必須大於開始日期。 ErrorSQLCreateCP=創建過程中出現SQL錯誤: ErrorIDFicheCP=發生錯誤,休假請求不存在。 @@ -95,21 +95,20 @@ UseralreadyCPexist=A leave request has already been done on this period for %s. groups=Groups users=Users AutoSendMail=Automatic mailing -NewHolidayForGroup=New collective leave request -SendRequestCollectiveCP=Send collective leave request +NewHolidayForGroup=New collective leave +SendRequestCollectiveCP=Create collective leave AutoValidationOnCreate=Automatic validation FirstDayOfHoliday=請假的開始日期 LastDayOfHoliday=請假的結束日期 HolidaysMonthlyUpdate=每月更新 ManualUpdate=手動更新 -HolidaysCancelation=請假請求取消 +HolidaysCancelation=Leave request cancellation EmployeeLastname=Employee last name EmployeeFirstname=Employee first name TypeWasDisabledOrRemoved=Leave type (id %s) was disabled or removed LastHolidays=Latest %s leave requests AllHolidays=All leave requests HalfDay=Half day -NotTheAssignedApprover=You are not the assigned approver LEAVE_PAID=Paid vacation LEAVE_SICK=Sick leave LEAVE_OTHER=Other leave @@ -125,14 +124,14 @@ NoticePeriod=Notice period #Messages HolidaysToValidate=驗證休假請求 HolidaysToValidateBody=以下是要驗證的請假請求 -HolidaysToValidateDelay=此休假請求將在 %s 的時間內提出\n 天。 +HolidaysToValidateDelay=This leave request will take place within a period of less than %s days. HolidaysToValidateAlertSolde=提出此休假請求的用戶沒有足夠的可用天數。 HolidaysValidated=已驗證的休假請求 -HolidaysValidatedBody=您的%s請假申請\n 至 %s 已被驗證。 +HolidaysValidatedBody=Your leave request for %s to %s has been validated. HolidaysRefused=請求被拒絕 -HolidaysRefusedBody=您的%s請假申請\n 至 %s 因以下原因被拒絕: +HolidaysRefusedBody=Your leave request for %s to %s has been denied for the following reason: HolidaysCanceled=已取消留下的請求 -HolidaysCanceledBody=您的%s請假申請\n 至 %s 已被取消。 +HolidaysCanceledBody=Your leave request for %s to %s has been canceled. FollowedByACounter=1: This type of leave need to be followed by a counter. Counter is incremented manually or automatically and when a leave request is validated, counter is decremented.
0: Not followed by a counter. NoLeaveWithCounterDefined=There is no leave types defined that need to be followed by a counter GoIntoDictionaryHolidayTypes=Go into Home - Setup - Dictionaries - Type of leave to setup the different types of leaves. @@ -144,7 +143,7 @@ WatermarkOnDraftHolidayCards=Watermarks on draft leave requests HolidaysToApprove=Holidays to approve NobodyHasPermissionToValidateHolidays=Nobody has permission to validate leave requests HolidayBalanceMonthlyUpdate=Monthly update of leave balance -XIsAUsualNonWorkingDay=%s is usualy a NON working day +XIsAUsualNonWorkingDay=%s is usually a NON working day BlockHolidayIfNegative=Block if balance negative LeaveRequestCreationBlockedBecauseBalanceIsNegative=The creation of this leave request is blocked because your balance is negative ErrorLeaveRequestMustBeDraftCanceledOrRefusedToBeDeleted=Leave request %s must be draft, canceled or refused to be deleted diff --git a/htdocs/langs/zh_HK/install.lang b/htdocs/langs/zh_HK/install.lang index 95252cfdca6..f2e7ea972c9 100644 --- a/htdocs/langs/zh_HK/install.lang +++ b/htdocs/langs/zh_HK/install.lang @@ -20,13 +20,13 @@ ErrorPHPDoesNotSupportSessions=您的 PHP 安裝不支持會話。 Dolibarr 工 ErrorPHPDoesNotSupport=Your PHP installation does not support %s functions. ErrorDirDoesNotExists=目錄%s 不存在。 ErrorGoBackAndCorrectParameters=返回並檢查/更正參數。 -ErrorWrongValueForParameter=您可能為參數“%s”輸入了錯誤的值\n'。 -ErrorFailedToCreateDatabase=無法創建數據庫“%s”\n'。 -ErrorFailedToConnectToDatabase=無法連接到數據庫“%s”\n'。 +ErrorWrongValueForParameter=You may have typed a wrong value for parameter '%s'. +ErrorFailedToCreateDatabase=Failed to create database '%s'. +ErrorFailedToConnectToDatabase=Failed to connect to database '%s'. ErrorDatabaseVersionTooLow=數據庫版本(%s) 太老。版本%s 或更高的要求。 ErrorPHPVersionTooLow=PHP 版本太舊。版本%s 或更高的要求。 ErrorPHPVersionTooHigh=PHP version too high. Version %s or lower is required. -ErrorConnectedButDatabaseNotFound=連接到服務器成功,但數據庫“%s”\n' 未找到。 +ErrorConnectedButDatabaseNotFound=Connection to server successful but database '%s' not found. ErrorDatabaseAlreadyExists=數據庫 '%s' 已經存在。 ErrorNoMigrationFilesFoundForParameters=No migration file found for the selected versions IfDatabaseNotExistsGoBackAndUncheckCreate=如果數據庫不存在,請返回並選中“創建數據庫”選項。 @@ -66,7 +66,7 @@ CreateDatabaseObjects=數據庫對象創建 ReferenceDataLoading=參考數據加載 TablesAndPrimaryKeysCreation=表和主鍵創建 CreateTableAndPrimaryKey=創建表%s -CreateOtherKeysForTable=為表%s創建外鍵和索引\n +CreateOtherKeysForTable=Create foreign keys and indexes for table %s OtherKeysCreation=外鍵和索引創建 FunctionsCreation=函數創建 AdminAccountCreation=管理員登錄創建 @@ -88,7 +88,7 @@ LoginAlreadyExists=已經存在 DolibarrAdminLogin=多利巴爾管理員登錄 AdminLoginAlreadyExists=Dolibarr 管理員帳戶 ' %s ' 已經存在。如果您想創建另一個,請返回。 FailedToCreateAdminLogin=Failed to create Dolibarr administrator account. -WarningRemoveInstallDir=警告,出於安全原因,安裝過程完成後,您必須添加一個名為 的文件\n install.lock 進入 Dolibarr 文檔目錄,以防止再次意外/惡意使用安裝工具。 +WarningRemoveInstallDir=Warning, for security reasons, once the installation process is complete, you must add a file called install.lock into the Dolibarr document directory in order to prevent the accidental/malicious use of the install tools again. FunctionNotAvailableInThisPHP=在此 PHP 中不可用 ChoosedMigrateScript=選擇遷移腳本 DataMigration=數據庫遷移(數據) @@ -100,7 +100,7 @@ FreshInstallDesc=如果這是您第一次安裝,請使用此模式。如果沒 Upgrade=升級 UpgradeDesc=如果您已將舊的 Dolibarr 文件替換為新版本的文件,請使用此模式。這將升級您的數據庫和數據。 Start=開始 -InstallNotAllowed= 不允許設置\n conf.php 權限 +InstallNotAllowed=Setup not allowed by conf.php permissions YouMustCreateWithPermission=您必須創建文件 %s 並在安裝過程中為 Web 服務器設置寫入權限。 CorrectProblemAndReloadPage=請修復問題並按 F5 重新加載頁面。 AlreadyDone=已經遷移 @@ -111,12 +111,12 @@ DBSortingCollation=字符排序順序 YouAskDatabaseCreationSoDolibarrNeedToConnect=您選擇了創建數據庫 %s ,但為此,Dolibarr 需要連接到服務器 %s 與超級用戶 %s 權限。 YouAskLoginCreationSoDolibarrNeedToConnect=您選擇創建數據庫用戶 %s ,但為此,Dolibarr 需要連接到服務器 %s 與超級用戶 %s 權限。 BecauseConnectionFailedParametersMayBeWrong=數據庫連接失敗:主機或超級用戶參數錯誤。 -OrphelinsPaymentsDetectedByMethod=%s 方法檢測到的孤兒付款\n +OrphelinsPaymentsDetectedByMethod=Orphans payment detected by method %s RemoveItManuallyAndPressF5ToContinue=手動將其刪除並按 F5 繼續。 FieldRenamed=字段已重命名 IfLoginDoesNotExistsCheckCreateUser=如果用戶尚不存在,則必須選中“創建用戶”選項 ErrorConnection=服務器“ %s ", 數據庫名稱 " %s ”,登錄“ %s ”,或者數據庫密碼可能錯誤或者PHP客戶端版本相對於數據庫版本太舊。 -InstallChoiceRecommanded=建議選擇安裝版本 %s 從您當前的版本開始 %s +InstallChoiceRecommanded=建議選擇安裝版本 %s 從您當前的版本開始 %s InstallChoiceSuggested= 安裝程序建議的安裝選擇 。 MigrateIsDoneStepByStep=目標版本 (%s)有幾個版本的差距。一旦完成,安裝嚮導將返回建議進一步遷移。 CheckThatDatabasenameIsCorrect=檢查數據庫名稱“ %s “ 是正確的。 @@ -129,7 +129,7 @@ MigrationCustomerOrderShipping=遷移銷售訂單存儲的運輸 MigrationShippingDelivery=升級運輸倉儲 MigrationShippingDelivery2=升級運輸存儲2 MigrationFinished=遷移完成 -LastStepDesc= 最後一步 :在此定義您希望用於連接 Dolibarr 的登錄名和密碼。 不要丟失此帳戶,因為它是管理所有其他/附加用戶帳戶的主帳戶。 +LastStepDesc=Last step: Define here the login and password you wish to use to connect to Dolibarr. Do not lose this as it is the main account to administer all other/additional user accounts. ActivateModule=激活模塊%s ShowEditTechnicalParameters=單擊此處顯示/編輯高級參數(專家模式) WarningUpgrade=Warning:\nDid you run a database backup first?\nThis is highly recommended. Loss of data (due to for example bugs in mysql version 5.5.40/41/42/43) may be possible during this process, so it is essential to take a complete dump of your database before starting any migration.\n\nClick OK to start migration process... @@ -211,7 +211,7 @@ YouTryInstallDisabledByFileLock=The application tried to self-upgrade, but the i YouTryUpgradeDisabledByMissingFileUnLock=The application tried to self-upgrade, but the upgrade process is currently not allowed.
ClickHereToGoToApp=Click here to go to your application ClickOnLinkOrRemoveManualy=If an upgrade is in progress, please wait. If not, click on the following link. If you always see this same page, you must remove/rename the file install.lock in the documents directory. -ClickOnLinkOrCreateUnlockFileManualy=If an upgrade is in progress, please wait... If not, you must create a file upgrade.unlock into the Dolibarr documents directory. +ClickOnLinkOrCreateUnlockFileManualy=If an upgrade is in progress, please wait... If not, you must remove the file install.lock or create a file upgrade.unlock into the Dolibarr documents directory. Loaded=Loaded FunctionTest=Function test NodoUpgradeAfterDB=No action requested by external modules after upgrade of database diff --git a/htdocs/langs/zh_HK/interventions.lang b/htdocs/langs/zh_HK/interventions.lang index bbc94c05825..a3edb27b712 100644 --- a/htdocs/langs/zh_HK/interventions.lang +++ b/htdocs/langs/zh_HK/interventions.lang @@ -14,10 +14,12 @@ InterventionContact=干預聯絡 DeleteIntervention=刪除乾預 ValidateIntervention=驗證干預措施 ModifyIntervention=修改干預措施 +CloseIntervention=Close intervention DeleteInterventionLine=刪除乾預線 ConfirmDeleteIntervention=您確定要刪除此干預嗎? -ConfirmValidateIntervention=您確定要以 名義驗證此干預嗎\n %s ? +ConfirmValidateIntervention=Are you sure you want to validate this intervention under name %s? ConfirmModifyIntervention=您確定要修改此干預措施嗎? +ConfirmCloseIntervention=Are you sure you want to close this intervention? ConfirmDeleteInterventionLine=您確定要刪除此干預行嗎? ConfirmCloneIntervention=Are you sure you want to clone this intervention? NameAndSignatureOfInternalContact=干預者姓名及簽名: @@ -36,6 +38,7 @@ InterventionModifiedInDolibarr=Intervention %s modified InterventionClassifiedBilledInDolibarr=Intervention %s set as billed InterventionClassifiedUnbilledInDolibarr=Intervention %s set as unbilled InterventionSentByEMail=Intervention %s sent by email +InterventionClosedInDolibarr= Intervention %s closed InterventionDeletedInDolibarr=Intervention %s deleted InterventionsArea=Interventions area DraftFichinter=Draft interventions diff --git a/htdocs/langs/zh_HK/main.lang b/htdocs/langs/zh_HK/main.lang index b72b47c566c..a7c7a4308c3 100644 --- a/htdocs/langs/zh_HK/main.lang +++ b/htdocs/langs/zh_HK/main.lang @@ -9,10 +9,10 @@ DIRECTION=ltr # cid0kr is for Korean # DejaVuSans is for some Eastern languages, some Asian languages and some Arabic languages # freemono is for ru_RU or uk_UA, uz_UZ -# freeserif is for Tamil +# freeserif is for Tamil or Ethiopian FONTFORPDF=msungstdlight FONTSIZEFORPDF=10 -SeparatorDecimal=. +SeparatorDecimal=。 SeparatorThousand=, FormatDateShort=%m/%d/%Y FormatDateShortInput=%m/%d/%Y @@ -29,279 +29,282 @@ FormatDateHourShort=%m/%d/%Y %I:%M %p FormatDateHourSecShort=%m/%d/%Y %I:%M:%S %p FormatDateHourTextShort=%b %d, %Y, %I:%M %p FormatDateHourText=%B %d, %Y, %I:%M %p -DatabaseConnection=Database connection +DatabaseConnection=數據庫連接 NoTemplateDefined=No template available for this email type AvailableVariables=Available substitution variables -NoTranslation=No translation +NoTranslation=沒有翻譯 Translation=Translation Translations=Translations CurrentTimeZone=TimeZone PHP (server) -EmptySearchString=Enter non empty search criterias +EmptySearchString=Enter non empty search criteria EnterADateCriteria=Enter a date criteria -NoRecordFound=No record found +NoRecordFound=沒有找到記錄 NoRecordDeleted=No record deleted NotEnoughDataYet=Not enough data -NoError=No error -Error=Error +NoError=沒有錯誤 +Error=錯誤 Errors=Errors -ErrorFieldRequired=Field '%s' is required -ErrorFieldFormat=Field '%s' has a bad value -ErrorFileDoesNotExists=File %s does not exist -ErrorFailedToOpenFile=Failed to open file %s -ErrorCanNotCreateDir=Cannot create dir %s -ErrorCanNotReadDir=Cannot read dir %s -ErrorConstantNotDefined=Parameter %s not defined -ErrorUnknown=Unknown error -ErrorSQL=SQL Error +ErrorFieldRequired=字段 '%s' 是必須的 +ErrorFieldFormat=字段 '%s' 價值不高 +ErrorFileDoesNotExists=文件%s 不存在 +ErrorFailedToOpenFile=無法打開文件%s +ErrorCanNotCreateDir=無法創建目錄 %s +ErrorCanNotReadDir=無法讀取目錄 %s +ErrorConstantNotDefined=參數%s 沒有定義的 +ErrorUnknown=未知錯誤 +ErrorSQL=SQL錯誤 ErrorLogoFileNotFound=Logo file '%s' was not found -ErrorGoToGlobalSetup=Go to 'Company/Organization' setup to fix this -ErrorGoToModuleSetup=Go to Module setup to fix this -ErrorFailedToSendMail=Failed to send mail (sender=%s, receiver=%s) -ErrorFileNotUploaded=File was not uploaded. Check that size does not exceed maximum allowed, that free space is available on disk and that there is not already a file with same name in this directory. -ErrorInternalErrorDetected=Error detected -ErrorWrongHostParameter=Wrong host parameter -ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again. -ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record. -ErrorWrongValue=Wrong value -ErrorWrongValueForParameterX=Wrong value for parameter %s -ErrorNoRequestInError=No request in error -ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later. -ErrorDuplicateField=Duplicate value in a unique field -ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back. -ErrorConfigParameterNotDefined=Parameter %s is not defined in the Dolibarr config file conf.php. -ErrorCantLoadUserFromDolibarrDatabase=Failed to find user %s in Dolibarr database. +ErrorGoToGlobalSetup=轉到“公司/組織”設置來解決此問題 +ErrorGoToModuleSetup=轉到模塊設置來修復此問題 +ErrorFailedToSendMail=發送郵件失敗(sender=%s, 接收者=%s) +ErrorFileNotUploaded=文件未上傳。檢查大小是否未超過允許的最大值、磁盤上是否有可用空間以及該目錄中是否存在同名文件。 +ErrorInternalErrorDetected=檢測到錯誤 +ErrorWrongHostParameter=主機參數錯誤 +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Company/Foundation and post the form again. +ErrorRecordIsUsedByChild=刪除該記錄失敗。該記錄至少被一個子記錄使用。 +ErrorWrongValue=值錯誤 +ErrorWrongValueForParameterX=參數值錯誤 %s +ErrorNoRequestInError=沒有錯誤的請求 +ErrorServiceUnavailableTryLater=目前不提供服務。稍後再試。 +ErrorDuplicateField=唯一字段中的重複值 +ErrorSomeErrorWereFoundRollbackIsDone=發現了一些錯誤。更改已回滾。 +ErrorConfigParameterNotDefined=參數 %s 未在 Dolibarr 配置文件中定義 conf.php 。 +ErrorCantLoadUserFromDolibarrDatabase=找不到用戶 %s 在 Dolibarr 數據庫中。 ErrorNoVATRateDefinedForSellerCountry=Error, no vat rates defined for country '%s'. ErrorNoSocialContributionForSellerCountry=Error, no social/fiscal taxes type defined for country '%s'. -ErrorFailedToSaveFile=Error, failed to save file. +ErrorFailedToSaveFile=錯誤,保存文件失敗。 ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a existing warehouse +ErrorInvalidSubtype=Selected Subtype is not allowed FieldCannotBeNegative=Field "%s" cannot be negative MaxNbOfRecordPerPage=Max. number of records per page NotAuthorized=You are not authorized to do that. -SetDate=Set date -SelectDate=Select a date -SeeAlso=See also %s +SetDate=設置日期 +SelectDate=選擇日期 +SeeAlso=另請參閱%s SeeHere=See here ClickHere=Click here Here=Here Apply=Apply -BackgroundColorByDefault=Default background color +BackgroundColorByDefault=默認背景顏色 FileRenamed=The file was successfully renamed FileGenerated=The file was successfully generated FileSaved=The file was successfully saved FileUploaded=The file was successfully uploaded -FileTransferComplete=File(s) uploaded successfully +FileTransferComplete=文件上傳成功 FilesDeleted=File(s) successfully deleted -FileWasNotUploaded=A file is selected for attachment but was not yet uploaded. Click on "Attach file" for this. -NbOfEntries=No. of entries -GoToWikiHelpPage=Read online help (Internet access needed) -GoToHelpPage=Read help +FileWasNotUploaded=已選擇一個文件作為附件,但尚未上傳。為此,單擊“附加文件”。 +NbOfEntries=條目數 +GoToWikiHelpPage=閱讀在線幫助(需要連接互聯網) +GoToHelpPage=閱讀幫助 DedicatedPageAvailable=Dedicated help page related to your current screen HomePage=Home Page -RecordSaved=Record saved -RecordDeleted=Record deleted +RecordSaved=記錄已保存 +RecordDeleted=記錄已刪除 RecordGenerated=Record generated -LevelOfFeature=Level of features -NotDefined=Not defined -DolibarrInHttpAuthenticationSoPasswordUseless=Dolibarr authentication mode is set to %s in configuration file conf.php.
This means that the password database is external to Dolibarr, so changing this field may have no effect. -Administrator=Administrator -Undefined=Undefined -PasswordForgotten=Password forgotten? +LevelOfFeature=功能級別 +NotDefined=沒有定義的 +DolibarrInHttpAuthenticationSoPasswordUseless=Dolibarr 身份驗證模式設置為 %s 在配置文件中 conf.php
這意味著密碼數據庫位於 Dolibarr 外部,因此更改此字段可能不會產生任何效果。 +Administrator=System administrator +AdministratorDesc=System administrator (can administer user, permissions but also system setup and modules configuration) +Undefined=不明確的 +PasswordForgotten=密碼忘記了? NoAccount=No account? -SeeAbove=See above -HomeArea=Home -LastConnexion=Last login -PreviousConnexion=Previous login +SeeAbove=往上看 +HomeArea=家 +LastConnexion=上次登錄 +PreviousConnexion=上次登錄 PreviousValue=Previous value -ConnectedOnMultiCompany=Connected on environment -ConnectedSince=Connected since -AuthenticationMode=Authentication mode -RequestedUrl=Requested URL -DatabaseTypeManager=Database type manager -RequestLastAccessInError=Latest database access request error -ReturnCodeLastAccessInError=Return code for latest database access request error -InformationLastAccessInError=Information for latest database access request error -DolibarrHasDetectedError=Dolibarr has detected a technical error +ConnectedOnMultiCompany=連接環境 +ConnectedSince=連接自 +AuthenticationMode=認證方式 +RequestedUrl=請求的網址 +DatabaseTypeManager=數據庫類型管理器 +RequestLastAccessInError=最新數據庫訪問請求錯誤 +ReturnCodeLastAccessInError=最新數據庫訪問請求錯誤的返回碼 +InformationLastAccessInError=最新數據庫訪問請求錯誤信息 +DolibarrHasDetectedError=Dolibarr 檢測到技術錯誤 YouCanSetOptionDolibarrMainProdToZero=You can read log file or set option $dolibarr_main_prod to '0' in your config file to get more information. -InformationToHelpDiagnose=This information can be useful for diagnostic purposes (you can set option $dolibarr_main_prod to '1' to hide sensitive information) -MoreInformation=More information -TechnicalInformation=Technical information +InformationToHelpDiagnose=此信息可用於診斷目的(您可以將選項 $dolibarr_main_prod 設置為“1”以隱藏敏感信息) +MoreInformation=更多信息 +TechnicalInformation=技術信息 TechnicalID=Technical ID LineID=Line ID -NotePublic=Note (public) -NotePrivate=Note (private) -PrecisionUnitIsLimitedToXDecimals=Dolibarr was setup to limit precision of unit prices to %s decimals. -DoTest=Test -ToFilter=Filter +NotePublic=注(公開) +NotePrivate=注(私人) +PrecisionUnitIsLimitedToXDecimals=Dolibarr 設置為將單價精度限制為 %s 小數點。 +DoTest=測試 +ToFilter=篩選 NoFilter=No filter -WarningYouHaveAtLeastOneTaskLate=Warning, you have at least one element that has exceeded the tolerance time. -yes=yes -Yes=Yes -no=no -No=No -All=All -Home=Home -Help=Help -OnlineHelp=Online help -PageWiki=Wiki page +WarningYouHaveAtLeastOneTaskLate=警告,您至少有一個元素超出了容差時間。 +yes=是的 +Yes=是的 +no=不 +No=不 +All=全部 +Home=家 +Help=幫助 +OnlineHelp=網上幫助 +PageWiki=維基頁面 MediaBrowser=Media browser -Always=Always -Never=Never -Under=under -Period=Period -PeriodEndDate=End date for period +Always=總是 +Never=絕不 +Under=在下面 +Period=時期 +PeriodEndDate=期間的結束日期 SelectedPeriod=Selected period PreviousPeriod=Previous period -Activate=Activate -Activated=Activated -Closed=Closed -Closed2=Closed +Activate=啟用 +Activated=活性 +Closed=關閉 +Closed2=關閉 NotClosed=Not closed -Enabled=Enabled +Enabled=啟用 Enable=Enable -Deprecated=Deprecated -Disable=Disable -Disabled=Disabled -Add=Add -AddLink=Add link +Deprecated=已棄用 +Disable=禁用 +Disabled=殘疾人 +Add=添加 +AddLink=添加鏈接 RemoveLink=Remove link AddToDraft=Add to draft -Update=Update -Close=Close +Update=更新 +Close=關閉 CloseAs=Set status to CloseBox=Remove widget from your dashboard -Confirm=Confirm -ConfirmSendCardByMail=Do you really want to send the content of this card by mail to %s? -Delete=Delete -Remove=Remove -Resiliate=Terminate -Cancel=Cancel -Modify=Modify -Edit=Edit -Validate=Validate +Confirm=確認 +ConfirmSendCardByMail=您確實想將此卡片的內容郵寄至 %s ? +Delete=刪除 +Remove=消除 +Resiliate=終止 +Cancel=取消 +Modify=調整 +Edit=編輯 +Validate=證實 ValidateAndApprove=Validate and Approve -ToValidate=To validate +ToValidate=驗證 NotValidated=Not validated -Save=Save -SaveAs=Save As +Save=節省 +SaveAs=另存為 SaveAndStay=Save and stay SaveAndNew=Save and new -TestConnection=Test connection -ToClone=Clone +TestConnection=測試連接 +ToClone=克隆 ConfirmCloneAsk=Are you sure you want to clone the object %s? -ConfirmClone=Choose the data you want to clone: -NoCloneOptionsSpecified=No data to clone defined. -Of=of -Go=Go -Run=Run -CopyOf=Copy of -Show=Show +ConfirmClone=選擇您要克隆的數據: +NoCloneOptionsSpecified=沒有定義要克隆的數據。 +Of=的 +Go=去 +Run=跑步 +CopyOf=備份 +Show=展示 Hide=Hide -ShowCardHere=Show card -Search=Search -SearchOf=Search -SearchMenuShortCut=Ctrl + shift + f +ShowCardHere=出示卡片 +Search=搜索 +SearchOf=搜索 QuickAdd=Quick add -QuickAddMenuShortCut=Ctrl + shift + l -Valid=Valid -Approve=Approve +Valid=有效的 +Approve=批准 Disapprove=Disapprove -ReOpen=Re-Open +ReOpen=重新開放 OpenVerb=Open -Upload=Upload -ToLink=Link -Select=Select +Upload=上傳 +ToLink=關聯 +Select=選擇 SelectAll=Select all -Choose=Choose -Resize=Resize +Choose=選擇 +Resize=調整大小 +Crop=Crop ResizeOrCrop=Resize or Crop -Recenter=Recenter -Author=Author -User=User -Users=Users -Group=Group -Groups=Groups +Author=作者 +User=用戶 +Users=用戶 +Group=團體 +Groups=團體 UserGroup=User group UserGroups=User groups NoUserGroupDefined=No user group defined -Password=Password -PasswordRetype=Repeat your password +Password=密碼 +PasswordRetype=重複您的密碼 NoteSomeFeaturesAreDisabled=Note that a lot of features/modules are disabled in this demonstration. -Name=Name +YourUserFile=Your user file +Name=姓名 NameSlashCompany=Name / Company -Person=Person -Parameter=Parameter -Parameters=Parameters -Value=Value -PersonalValue=Personal value +Person=人 +Parameter=範圍 +Parameters=參數 +Value=價值 +PersonalValue=個人價值 NewObject=New %s -NewValue=New value +NewValue=新價值 OldValue=Old value %s -CurrentValue=Current value -Code=Code -Type=Type -Language=Language -MultiLanguage=Multi-language -Note=Note -Title=Title -Label=Label -RefOrLabel=Ref. or label -Info=Log -Family=Family -Description=Description -Designation=Description +FieldXModified=Field %s modified +FieldXModifiedFromYToZ=Field %s modified from %s to %s +CurrentValue=當前值 +Code=代碼 +Type=類型 +Language=語言 +MultiLanguage=多語言 +Note=筆記 +Title=標題 +Label=標籤 +RefOrLabel=參考號或標籤 +Info=日誌 +Family=家庭 +Description=描述 +Designation=描述 DescriptionOfLine=Description of line DateOfLine=Date of line DurationOfLine=Duration of line ParentLine=Parent line ID -Model=Doc template -DefaultModel=Default doc template -Action=Event -About=About -Number=Number -NumberByMonth=Total reports by month -AmountByMonth=Amount by month -Numero=Number -Limit=Limit -Limits=Limits -Logout=Logout -NoLogoutProcessWithAuthMode=No applicative disconnect feature with authentication mode %s -Connection=Login -Setup=Setup -Alert=Alert +Model=文檔模板 +DefaultModel=默認文檔模板 +Action=事件 +About=關於 +Number=數字 +NumberByMonth=按月統計的報告總數 +AmountByMonth=按月金額 +Numero=數字 +Limit=限制 +Limits=限制 +Logout=登出 +NoLogoutProcessWithAuthMode=身份驗證模式沒有適用的斷開連接功能 %s +Connection=登錄 +Setup=設置 +Alert=警報 MenuWarnings=Alerts -Previous=Previous -Next=Next -Cards=Cards -Card=Card -Now=Now +Previous=以前的 +Next=下一個 +Cards=牌 +Card=卡片 +Now=現在 HourStart=Start hour Deadline=Deadline -Date=Date +Date=日期 DateAndHour=Date and hour DateToday=Today's date DateReference=Reference date -DateStart=Start date -DateEnd=End date -DateCreation=Creation date +DateStart=開始日期 +DateEnd=結束日期 +DateCreation=創建日期 DateCreationShort=Creat. date IPCreation=Creation IP -DateModification=Modification date -DateModificationShort=Modif. date +DateModification=修改日期 +DateModificationShort=修改。日期 IPModification=Modification IP -DateLastModification=Latest modification date -DateValidation=Validation date +DateLastModification=最新修改日期 +DateValidation=驗證日期 DateSigning=Signing date -DateClosing=Closing date -DateDue=Due date -DateValue=Value date -DateValueShort=Value date -DateOperation=Operation date -DateOperationShort=Oper. Date -DateLimit=Limit date -DateRequest=Request date -DateProcess=Process date -DateBuild=Report build date -DatePayment=Date of payment +DateClosing=截止日期 +DateDue=到期日 +DateValue=起息日 +DateValueShort=起息日 +DateOperation=營業日期 +DateOperationShort=歌劇。日期 +DateLimit=限制日期 +DateRequest=查詢日期 +DateProcess=處理日期 +DateBuild=報告構建日期 +DatePayment=付款日期 DateApprove=Approving date DateApprove2=Approving date (second approval) RegistrationDate=Registration date @@ -311,82 +314,85 @@ UserValidation=Validation user UserCreationShort=Creat. user UserModificationShort=Modif. user UserValidationShort=Valid. user -DurationYear=year -DurationMonth=month -DurationWeek=week -DurationDay=day -DurationYears=years -DurationMonths=months -DurationWeeks=weeks -DurationDays=days -Year=Year -Month=Month -Week=Week +UserClosing=Closing user +UserClosingShort=Closing user +DurationYear=年 +DurationMonth=月 +DurationWeek=星期 +DurationDay=天 +DurationYears=年 +DurationMonths=月 +DurationWeeks=週 +DurationDays=天 +Year=年 +Month=月 +Week=星期 WeekShort=Week -Day=Day -Hour=Hour -Minute=Minute -Second=Second -Years=Years -Months=Months -Days=Days -days=days -Hours=Hours -Minutes=Minutes -Seconds=Seconds +Day=天 +Hour=小時 +Minute=分鐘 +Second=第二 +Years=年 +Months=幾個月 +Days=天 +days=天 +Hours=小時 +Minutes=分鐘 +Seconds=秒數 Weeks=Weeks -Today=Today -Yesterday=Yesterday -Tomorrow=Tomorrow -Morning=Morning -Afternoon=Afternoon -Quadri=Quadri -MonthOfDay=Month of the day +Today=今天 +Yesterday=昨天 +Tomorrow=明天 +Morning=早晨 +Afternoon=下午 +Quadri=誇德里 +MonthOfDay=當天的月份 DaysOfWeek=Days of week HourShort=H MinuteShort=mn -Rate=Rate +SecondShort=sec +Rate=速度 CurrencyRate=Currency conversion rate -UseLocalTax=Include tax -Bytes=Bytes -KiloBytes=Kilobytes -MegaBytes=Megabytes -GigaBytes=Gigabytes -TeraBytes=Terabytes +UseLocalTax=含稅 +Bytes=字節 +KiloBytes=千字節 +MegaBytes=兆字節 +GigaBytes=千兆字節 +TeraBytes=太字節 UserAuthor=Created by UserModif=Updated by b=b. -Kb=Kb -Mb=Mb -Gb=Gb -Tb=Tb -Cut=Cut -Copy=Copy -Paste=Paste -Default=Default -DefaultValue=Default value +Kb=鉀 +Mb=MB +Gb=國標 +Tb=铽 +Cut=切 +Copy=複製 +Paste=粘貼 +Default=默認 +DefaultValue=默認值 DefaultValues=Default values/filters/sorting -Price=Price +Price=價格 PriceCurrency=Price (currency) -UnitPrice=Unit price -UnitPriceHT=Unit price (excl.) +UnitPrice=單價 +UnitPriceHT=單價(不含) UnitPriceHTCurrency=Unit price (excl.) (currency) -UnitPriceTTC=Unit price -PriceU=U.P. -PriceUHT=U.P. (net) +UnitPriceTTC=單價 +PriceU=向上。 +PriceUHT=向上。 (網) PriceUHTCurrency=U.P (net) (currency) -PriceUTTC=U.P. (inc. tax) -Amount=Amount -AmountInvoice=Invoice amount +PriceUTTC=向上。 (含稅) +Amount=數量 +AmountInvoice=發票金額 AmountInvoiced=Amount invoiced AmountInvoicedHT=Amount invoiced (excl. tax) AmountInvoicedTTC=Amount invoiced (inc. tax) -AmountPayment=Payment amount -AmountHTShort=Amount (excl.) -AmountTTCShort=Amount (inc. tax) -AmountHT=Amount (excl. tax) -AmountTTC=Amount (inc. tax) -AmountVAT=Amount tax +AmountPayment=支付金額 +AmountHTShort=金額(不含) +AmountTTCShort=金額(含稅) +AmountHT=金額(不含稅) +AmountTTC=金額(含稅) +AmountVAT=稅額 MulticurrencyAlreadyPaid=Already paid, original currency MulticurrencyRemainderToPay=Remain to pay, original currency MulticurrencyPaymentAmount=Payment amount, original currency @@ -394,41 +400,43 @@ MulticurrencyAmountHT=Amount (excl. tax), original currency MulticurrencyAmountTTC=Amount (inc. of tax), original currency MulticurrencyAmountVAT=Amount tax, original currency MulticurrencySubPrice=Amount sub price multi currency -AmountLT1=Amount tax 2 -AmountLT2=Amount tax 3 -AmountLT1ES=Amount RE -AmountLT2ES=Amount IRPF -AmountTotal=Total amount -AmountAverage=Average amount -PriceQtyMinHT=Price quantity min. (excl. tax) +AmountLT1=稅額2 +AmountLT2=稅額3 +AmountLT1ES=金額 RE +AmountLT2ES=金額 IRPF +AmountTotal=總金額 +AmountAverage=平均金額 +PriceQtyMinHT=價格 最少數量(不含稅) PriceQtyMinHTCurrency=Price quantity min. (excl. tax) (currency) PercentOfOriginalObject=Percent of original object AmountOrPercent=Amount or percent -Percentage=Percentage -Total=Total -SubTotal=Subtotal -TotalHTShort=Total (excl.) +Percentage=百分比 +Total=全部的 +SubTotal=小計 +TotalHTShort=總計(不含) TotalHT100Short=Total 100%% (excl.) TotalHTShortCurrency=Total (excl. in currency) -TotalTTCShort=Total (inc. tax) -TotalHT=Total (excl. tax) -TotalHTforthispage=Total (excl. tax) for this page +TotalTTCShort=總計(含稅) +TotalHT=總計(不含稅) +TotalHTforthispage=本頁總計(不含稅) Totalforthispage=Total for this page -TotalTTC=Total (inc. tax) -TotalTTCToYourCredit=Total (inc. tax) to your credit -TotalVAT=Total tax +GrandTotal=Grand total +TotalforAllPages=Total for all pages +TotalTTC=總計(含稅) +TotalTTCToYourCredit=您的信用總額(含稅) +TotalVAT=稅金總額 TotalVATIN=Total IGST -TotalLT1=Total tax 2 -TotalLT2=Total tax 3 -TotalLT1ES=Total RE -TotalLT2ES=Total IRPF +TotalLT1=總稅額 2 +TotalLT2=總稅額 3 +TotalLT1ES=總稀土 +TotalLT2ES=總IRPF TotalLT1IN=Total CGST TotalLT2IN=Total SGST -HT=Excl. tax -TTC=Inc. tax +HT=排除。稅 +TTC=公司稅 INCVATONLY=Inc. VAT INCT=Inc. all taxes -VAT=Sales tax +VAT=銷售稅 VATIN=IGST VATs=Sales taxes VATINs=IGST taxes @@ -436,186 +444,189 @@ LT1=Sales tax 2 LT1Type=Sales tax 2 type LT2=Sales tax 3 LT2Type=Sales tax 3 type -LT1ES=RE +LT1ES=關於 LT2ES=IRPF LT1IN=CGST LT2IN=SGST -LT1GC=Additionnal cents -VATRate=Tax Rate +LT1GC=Additional cents +VATRate=稅率 RateOfTaxN=Rate of tax %s VATCode=Tax Rate code VATNPR=Tax Rate NPR DefaultTaxRate=Default tax rate -Average=Average -Sum=Sum -Delta=Delta +Average=平均的 +Sum=和 +Delta=三角洲 StatusToPay=To pay RemainToPay=Remain to pay -Module=Module/Application +Module=模塊/應用 Modules=Modules/Applications -Option=Option +Option=選項 Filters=Filters -List=List -FullList=Full list +List=列表 +FullList=完整列表 FullConversation=Full conversation -Statistics=Statistics -OtherStatistics=Other statistics -Status=Status +Statistics=統計數據 +OtherStatistics=其他統計數據 +Status=地位 Favorite=Favorite -ShortInfo=Info. -Ref=Ref. +ShortInfo=信息。 +Ref=參考號 ExternalRef=Ref. extern -RefSupplier=Ref. vendor -RefPayment=Ref. payment -CommercialProposalsShort=Commercial proposals -Comment=Comment -Comments=Comments -ActionsToDo=Events to do -ActionsToDoShort=To do -ActionsDoneShort=Done -ActionNotApplicable=Not applicable -ActionRunningNotStarted=To start -ActionRunningShort=In progress -ActionDoneShort=Finished -ActionUncomplete=Incomplete +RefSupplier=參考號小販 +RefPayment=參考號支付 +CommercialProposalsShort=商業提案 +Comment=評論 +Comments=評論 +ActionsToDo=要做的活動 +ActionsToDoShort=去做 +ActionsDoneShort=完畢 +ActionNotApplicable=不適用 +ActionRunningNotStarted=開始 +ActionRunningShort=進行中 +ActionDoneShort=完成的 +ActionUncomplete=不完整 LatestLinkedEvents=Latest %s linked events -CompanyFoundation=Company/Organization +CompanyFoundation=公司/組織 Accountant=Accountant -ContactsForCompany=Contacts for this third party -ContactsAddressesForCompany=Contacts/addresses for this third party -AddressesForCompany=Addresses for this third party -ActionsOnCompany=Events for this third party +ContactsForCompany=該第三方的聯繫方式 +ContactsAddressesForCompany=該第三方的聯繫方式/地址 +AddressesForCompany=該第三方的地址 +ActionsOnCompany=該第三方的活動 ActionsOnContact=Events for this contact/address ActionsOnContract=Events for this contract -ActionsOnMember=Events about this member +ActionsOnMember=關於該會員的活動 ActionsOnProduct=Events about this product ActionsOnAsset=Events for this fixed asset -NActionsLate=%s late +NActionsLate=%s 晚的 ToDo=To do Completed=Completed Running=In progress RequestAlreadyDone=Request already recorded -Filter=Filter +Filter=篩選 FilterOnInto=Search criteria '%s' into fields %s -RemoveFilter=Remove filter -ChartGenerated=Chart generated -ChartNotGenerated=Chart not generated +RemoveFilter=移除過濾器 +ChartGenerated=生成圖表 +ChartNotGenerated=圖表未生成 GeneratedOn=Build on %s -Generate=Generate -Duration=Duration -TotalDuration=Total duration -Summary=Summary -DolibarrStateBoard=Database Statistics -DolibarrWorkBoard=Open Items +Generate=產生 +Duration=期間 +TotalDuration=總持續時間 +Summary=概括 +DolibarrStateBoard=數據庫統計 +DolibarrWorkBoard=未清項目 NoOpenedElementToProcess=No open element to process -Available=Available -NotYetAvailable=Not yet available -NotAvailable=Not available -Categories=Tags/categories -Category=Tag/category -By=By -From=From +Available=可用的 +NotYetAvailable=尚不可用 +NotAvailable=無法使用 +Categories=標籤/類別 +Category=標籤/類別 +SelectTheTagsToAssign=Select the tags/categories to assign +By=經過 +From=從 FromDate=From FromLocation=From -to=to +to=到 To=to ToDate=to ToLocation=to at=at -and=and -or=or -Other=Other -Others=Others -OtherInformations=Other information +and=和 +or=或者 +Other=其他 +Others=其他的 +OtherInformations=其他信息 Workflow=Workflow -Quantity=Quantity -Qty=Qty -ChangedBy=Changed by +Quantity=數量 +Qty=數量 +ChangedBy=更改者 ApprovedBy=Approved by ApprovedBy2=Approved by (second approval) Approved=Approved Refused=Refused -ReCalculate=Recalculate -ResultKo=Failure -Reporting=Reporting -Reportings=Reporting -Draft=Draft -Drafts=Drafts +ReCalculate=重新計算 +ResultKo=失敗 +Reporting=報告 +Reportings=報告 +Draft=草稿 +Drafts=草稿 StatusInterInvoiced=Invoiced -Validated=Validated +Done=Done +Validated=已驗證 ValidatedToProduce=Validated (To produce) -Opened=Open +Opened=打開 OpenAll=Open (All) ClosedAll=Closed (All) -New=New -Discount=Discount -Unknown=Unknown -General=General -Size=Size +New=新的 +Discount=折扣 +Unknown=未知 +General=一般的 +Size=尺寸 OriginalSize=Original size -Received=Received -Paid=Paid -Topic=Subject -ByCompanies=By third parties -ByUsers=By user -Links=Links -Link=Link -Rejects=Rejects -Preview=Preview -NextStep=Next step -Datas=Data -None=None -NoneF=None +RotateImage=Rotate 90° +Received=已收到 +Paid=有薪酬的 +Topic=主題 +ByCompanies=由第三方 +ByUsers=按用戶 +Links=鏈接 +Link=關聯 +Rejects=拒絕 +Preview=預覽 +NextStep=下一步 +Datas=數據 +None=沒有任何 +NoneF=沒有任何 NoneOrSeveral=None or several -Late=Late +Late=晚的 LateDesc=An item is defined as Delayed as per the system configuration in menu Home - Setup - Alerts. NoItemLate=No late item -Photo=Picture -Photos=Pictures -AddPhoto=Add picture +Photo=圖片 +Photos=圖片 +AddPhoto=添加圖片 DeletePicture=Picture delete ConfirmDeletePicture=Confirm picture deletion? -Login=Login +Login=登錄 LoginEmail=Login (email) LoginOrEmail=Login or Email -CurrentLogin=Current login +CurrentLogin=當前登錄 EnterLoginDetail=Enter login details -January=January -February=February -March=March -April=April -May=May -June=June -July=July -August=August -September=September -October=October -November=November -December=December -Month01=January -Month02=February -Month03=March -Month04=April -Month05=May -Month06=June -Month07=July -Month08=August -Month09=September -Month10=October -Month11=November -Month12=December -MonthShort01=Jan -MonthShort02=Feb -MonthShort03=Mar -MonthShort04=Apr -MonthShort05=May -MonthShort06=Jun -MonthShort07=Jul -MonthShort08=Aug -MonthShort09=Sep -MonthShort10=Oct -MonthShort11=Nov -MonthShort12=Dec +January=一月 +February=二月 +March=行進 +April=四月 +May=可能 +June=六月 +July=七月 +August=八月 +September=九月 +October=十月 +November=十一月 +December=十二月 +Month01=一月 +Month02=二月 +Month03=行進 +Month04=四月 +Month05=可能 +Month06=六月 +Month07=七月 +Month08=八月 +Month09=九月 +Month10=十月 +Month11=十一月 +Month12=十二月 +MonthShort01=揚 +MonthShort02=二月 +MonthShort03=三月 +MonthShort04=四月 +MonthShort05=可能 +MonthShort06=君 +MonthShort07=七月 +MonthShort08=八月 +MonthShort09=九月 +MonthShort10=十月 +MonthShort11=十一月 +MonthShort12=十二月 MonthVeryShort01=J MonthVeryShort02=F MonthVeryShort03=M @@ -628,186 +639,188 @@ MonthVeryShort09=S MonthVeryShort10=O MonthVeryShort11=N MonthVeryShort12=D -AttachedFiles=Attached files and documents +AttachedFiles=附件和文件 JoinMainDoc=Join main document JoinMainDocOrLastGenerated=Send the main document or the last generated one if not found DateFormatYYYYMM=YYYY-MM -DateFormatYYYYMMDD=YYYY-MM-DD -DateFormatYYYYMMDDHHMM=YYYY-MM-DD HH:SS -ReportName=Report name -ReportPeriod=Report period -ReportDescription=Description -Report=Report -Keyword=Keyword +DateFormatYYYYMMDD=年-月-日 +DateFormatYYYYMMDDHHMM=年-月-日 時:秒 +ReportName=報告名稱 +ReportPeriod=報告期 +ReportDescription=描述 +Report=報告 +Reports=Reports +Keyword=關鍵詞 Origin=Origin -Legend=Legend -Fill=Fill -Reset=Reset -File=File -Files=Files -NotAllowed=Not allowed -ReadPermissionNotAllowed=Read permission not allowed +Legend=傳奇 +Fill=充滿 +Reset=重置 +File=文件 +Files=文件 +NotAllowed=不允許 +ReadPermissionNotAllowed=不允許讀取權限 AmountInCurrency=Amount in %s currency -Example=Example -Examples=Examples -NoExample=No example -FindBug=Report a bug -NbOfThirdParties=Number of third parties -NbOfLines=Number of lines -NbOfObjects=Number of objects +Example=例子 +Examples=例子 +NoExample=沒有例子 +FindBug=報告錯誤 +NbOfThirdParties=第三方數量 +NbOfLines=行數 +NbOfObjects=物體數量 NbOfObjectReferers=Number of related items -Referers=Related items -TotalQuantity=Total quantity -DateFromTo=From %s to %s -DateFrom=From %s -DateUntil=Until %s -Check=Check +Referers=相關項目 +TotalQuantity=總數(量 +DateFromTo=來自%s 至 %s +DateFrom=來自%s +DateUntil=直到%s +Check=查看 Uncheck=Uncheck -Internal=Internal -External=External -Internals=Internal -Externals=External -Warning=Warning -Warnings=Warnings -BuildDoc=Build Doc -Entity=Environment -Entities=Entities -CustomerPreview=Customer preview -SupplierPreview=Vendor preview -ShowCustomerPreview=Show customer preview -ShowSupplierPreview=Show vendor preview -RefCustomer=Ref. customer +Internal=內部的 +External=外部的 +Internals=內部的 +Externals=外部的 +Warning=警告 +Warnings=警告 +BuildDoc=構建文檔 +Entity=環境 +Entities=實體 +CustomerPreview=客戶預覽 +SupplierPreview=供應商預覽 +ShowCustomerPreview=顯示客戶預覽 +ShowSupplierPreview=顯示供應商預覽 +RefCustomer=參考號顧客 InternalRef=Internal ref. -Currency=Currency -InfoAdmin=Information for administrators -Undo=Undo -Redo=Redo -ExpandAll=Expand all -UndoExpandAll=Undo expand +Currency=貨幣 +InfoAdmin=管理員信息 +Undo=撤消 +Redo=重做 +ExpandAll=展開全部 +UndoExpandAll=撤消展開 SeeAll=See all -Reason=Reason -FeatureNotYetSupported=Feature not yet supported -CloseWindow=Close window -Response=Response -Priority=Priority -SendByMail=Send by email -MailSentBy=Email sent by +Reason=原因 +FeatureNotYetSupported=尚不支持的功能 +CloseWindow=關閉窗口 +Response=回复 +Priority=優先事項 +SendByMail=通過電子郵件發送 +MailSentBy=電子郵件發送者 +MailSentByTo=Email sent by %s to %s NotSent=Not sent -TextUsedInTheMessageBody=Email body -SendAcknowledgementByMail=Send confirmation email +TextUsedInTheMessageBody=電子郵件正文 +SendAcknowledgementByMail=發送確認電子郵件 SendMail=Send email Email=Email -NoEMail=No email +NoEMail=沒有電子郵件 AlreadyRead=Already read NotRead=Unread -NoMobilePhone=No mobile phone -Owner=Owner -FollowingConstantsWillBeSubstituted=The following constants will be replaced with the corresponding value. -Refresh=Refresh -BackToList=Back to list +NoMobilePhone=沒有手機 +Owner=所有者 +FollowingConstantsWillBeSubstituted=以下常量將替換為相應的值。 +Refresh=刷新 +BackToList=返回目錄 BackToTree=Back to tree -GoBack=Go back -CanBeModifiedIfOk=Can be modified if valid -CanBeModifiedIfKo=Can be modified if not valid +GoBack=回去 +CanBeModifiedIfOk=有效的話可以修改 +CanBeModifiedIfKo=如果無效可以修改 ValueIsValid=Value is valid ValueIsNotValid=Value is not valid RecordCreatedSuccessfully=Record created successfully -RecordModifiedSuccessfully=Record modified successfully -RecordsModified=%s record(s) modified +RecordModifiedSuccessfully=記錄修改成功 +RecordsModified=%s 記錄已修改 RecordsDeleted=%s record(s) deleted RecordsGenerated=%s record(s) generated -AutomaticCode=Automatic code -FeatureDisabled=Feature disabled -MoveBox=Move widget -Offered=Offered -NotEnoughPermissions=You don't have permission for this action +ValidatedRecordWhereFound = Some of the selected records have already been validated. No records have been deleted. +AutomaticCode=自動編碼 +FeatureDisabled=功能已禁用 +MoveBox=移動小部件 +Offered=提供 +NotEnoughPermissions=您沒有執行此操作的權限 UserNotInHierachy=This action is reserved to the supervisors of this user -SessionName=Session name -Method=Method -Receive=Receive +SessionName=會話名稱 +Method=方法 +Receive=收到 CompleteOrNoMoreReceptionExpected=Complete or nothing more expected ExpectedValue=Expected Value ExpectedQty=Expected Qty -PartialWoman=Partial -TotalWoman=Total -NeverReceived=Never received -Canceled=Canceled -YouCanChangeValuesForThisListFromDictionarySetup=You can change values for this list from menu Setup - Dictionaries +PartialWoman=部分的 +TotalWoman=全部的 +NeverReceived=從未收到過 +Canceled=取消 +YouCanChangeValuesForThisListFromDictionarySetup=您可以從菜單設置 - 詞典更改此列表的值 YouCanChangeValuesForThisListFrom=You can change values for this list from menu %s YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup -Color=Color -Documents=Linked files -Documents2=Documents -UploadDisabled=Upload disabled +Color=顏色 +Documents=鏈接文件 +Documents2=文件 +UploadDisabled=上傳已禁用 MenuAccountancy=Accounting -MenuECM=Documents -MenuAWStats=AWStats -MenuMembers=Members -MenuAgendaGoogle=Google agenda +MenuECM=文件 +MenuAWStats=AWS統計 +MenuMembers=會員 +MenuAgendaGoogle=谷歌議程 MenuTaxesAndSpecialExpenses=Taxes | Special expenses -ThisLimitIsDefinedInSetup=Dolibarr limit (Menu home-setup-security): %s Kb, PHP limit: %s Kb +ThisLimitIsDefinedInSetup=Dolibarr 限制(菜單 home-setup-security):%s Kb,PHP 限制:%s 鉀 ThisLimitIsDefinedInSetupAt=Dolibarr limit (Menu %s): %s Kb, PHP limit (Param %s): %s Kb -NoFileFound=No documents uploaded -CurrentUserLanguage=Current language -CurrentTheme=Current theme -CurrentMenuManager=Current menu manager +NoFileFound=沒有上傳任何文件 +CurrentUserLanguage=當前語言 +CurrentTheme=當前主題 +CurrentMenuManager=當前菜單管理器 Browser=Browser Layout=Layout Screen=Screen -DisabledModules=Disabled modules -For=For -ForCustomer=For customer -Signature=Signature -DateOfSignature=Date of signature -HidePassword=Show command with password hidden -UnHidePassword=Show real command with clear password -Root=Root -RootOfMedias=Root of public medias (/medias) -Informations=Information -Page=Page -Notes=Notes -AddNewLine=Add new line -AddFile=Add file -FreeZone=Free-text product -FreeLineOfType=Free-text item, type: -CloneMainAttributes=Clone object with its main attributes +DisabledModules=禁用模塊 +For=為了 +ForCustomer=對於客戶 +Signature=簽名 +HidePassword=顯示隱藏密碼的命令 +UnHidePassword=顯示帶有清晰密碼的真實命令 +Root=根 +RootOfMedias=Root of public media (/medias) +Informations=信息 +Page=頁 +Notes=筆記 +AddNewLine=添加新行 +AddFile=添加文件 +FreeZone=自由文本產品 +FreeLineOfType=自由文本項,類型: +CloneMainAttributes=克隆對象及其主要屬性 ReGeneratePDF=Re-generate PDF -PDFMerge=PDF Merge -Merge=Merge +PDFMerge=PDF合併 +Merge=合併 DocumentModelStandardPDF=Standard PDF template -PrintContentArea=Show page to print main content area -MenuManager=Menu manager -WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode: only login %s is allowed to use the application in this mode. -CoreErrorTitle=System error -CoreErrorMessage=Sorry, an error occurred. Contact your system administrator to check the logs or disable $dolibarr_main_prod=1 to get more information. -CreditCard=Credit card +PrintContentArea=顯示打印主要內容區域的頁面 +MenuManager=菜單管理器 +WarningYouAreInMaintenanceMode=警告,您處於維護模式:僅登錄 %s 允許在此模式下使用應用程序。 +CoreErrorTitle=系統錯誤 +CoreErrorMessage=抱歉,發生錯誤。請聯繫您的系統管理員檢查日誌或禁用 $dolibarr_main_prod=1 以獲取更多信息。 +CreditCard=信用卡 ValidatePayment=Validate payment CreditOrDebitCard=Credit or debit card FieldsWithAreMandatory=Fields with %s are mandatory FieldsWithIsForPublic=Fields with %s are shown in public list of members. If you don't want this, uncheck the "public" box. -AccordingToGeoIPDatabase=(according to GeoIP conversion) -Line=Line -NotSupported=Not supported -RequiredField=Required field -Result=Result -ToTest=Test -ValidateBefore=Item must be validated before using this feature -Visibility=Visibility +AccordingToGeoIPDatabase=(根據GeoIP換算) +Line=線 +NotSupported=不支持 +RequiredField=必填項目 +Result=結果 +ToTest=測試 +ValidateBefore=使用此功能之前必須驗證項目 +Visibility=能見度 Totalizable=Totalizable TotalizableDesc=This field is totalizable in list -Private=Private -Hidden=Hidden -Resources=Resources -Source=Source -Prefix=Prefix -Before=Before -After=After -IPAddress=IP address -Frequency=Frequency -IM=Instant messaging -NewAttribute=New attribute -AttributeCode=Attribute code -URLPhoto=URL of photo/logo +Private=私人的 +Hidden=隱 +Resources=資源 +Source=來源 +Prefix=字首 +Before=前 +After=後 +IPAddress=IP地址 +Frequency=頻率 +IM=即時通訊 +NewAttribute=新屬性 +AttributeCode=屬性代碼 +URLPhoto=照片/徽標的 URL SetLinkToAnotherThirdParty=Link to another third party LinkTo=Link to LinkToProposal=Link to proposal @@ -822,49 +835,49 @@ LinkToContract=Link to contract LinkToIntervention=Link to intervention LinkToTicket=Link to ticket LinkToMo=Link to Mo -CreateDraft=Create draft +CreateDraft=創建草稿 SetToDraft=Back to draft -ClickToEdit=Click to edit +ClickToEdit=點擊編輯 ClickToRefresh=Click to refresh EditWithEditor=Edit with CKEditor EditWithTextEditor=Edit with Text editor EditHTMLSource=Edit HTML Source -ObjectDeleted=Object %s deleted -ByCountry=By country -ByTown=By town -ByDate=By date -ByMonthYear=By month/year -ByYear=By year -ByMonth=By month -ByDay=By day -BySalesRepresentative=By sales representative -LinkedToSpecificUsers=Linked to a particular user contact -NoResults=No results +ObjectDeleted=對象%s 已刪除 +ByCountry=按國家/地區 +ByTown=按城鎮 +ByDate=按日期 +ByMonthYear=按月/年 +ByYear=按年份 +ByMonth=按月 +ByDay=白天 +BySalesRepresentative=由銷售代表 +LinkedToSpecificUsers=鏈接到特定用戶聯繫人 +NoResults=沒有結果 AdminTools=Admin Tools SystemTools=System tools -ModulesSystemTools=Modules tools -Test=Test -Element=Element -NoPhotoYet=No pictures available yet +ModulesSystemTools=模塊工具 +Test=測試 +Element=元素 +NoPhotoYet=還沒有可用的圖片 Dashboard=Dashboard MyDashboard=My Dashboard -Deductible=Deductible -from=from -toward=toward -Access=Access +Deductible=免賠額 +from=從 +toward=朝向 +Access=使用權 SelectAction=Select action SelectTargetUser=Select target user/employee -HelpCopyToClipboard=Use Ctrl+C to copy to clipboard -SaveUploadedFileWithMask=Save file on server with name "%s" (otherwise "%s") -OriginFileName=Original filename -SetDemandReason=Set source -SetBankAccount=Define Bank Account -AccountCurrency=Account currency -ViewPrivateNote=View notes -XMoreLines=%s line(s) hidden +HelpCopyToClipboard=使用 Ctrl+C 複製到剪貼板 +SaveUploadedFileWithMask=將文件保存在服務器上,名稱為“ %s ”(否則“%s”) +OriginFileName=原始文件名 +SetDemandReason=設置來源 +SetBankAccount=定義銀行賬戶 +AccountCurrency=賬戶幣種 +ViewPrivateNote=查看筆記 +XMoreLines=%s 隱藏行 ShowMoreLines=Show more/less lines -PublicUrl=Public URL -AddBox=Add box +PublicUrl=公共網址 +AddBox=添加框 SelectElementAndClick=Select an element and click on %s PrintFile=Print File %s ShowTransaction=Show entry on bank account @@ -897,9 +910,12 @@ MassFilesArea=Area for files built by mass actions ShowTempMassFilesArea=Show area of files built by mass actions ConfirmMassDeletion=Bulk Delete confirmation ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record(s)? +ConfirmMassClone=Bulk clone confirmation +ConfirmMassCloneQuestion=Select project to clone to +ConfirmMassCloneToOneProject=Clone to project %s RelatedObjects=Related Objects -ClassifyBilled=Classify billed -ClassifyUnbilled=Classify unbilled +ClassifyBilled=Classify Billed +ClassifyUnbilled=Classify Unbilled Progress=Progress ProgressShort=Progr. FrontOffice=Front office @@ -907,18 +923,20 @@ BackOffice=Back office Submit=Submit View=View Export=Export +Import=Import Exports=Exports ExportFilteredList=Export filtered list ExportList=Export list ExportOptions=Export Options IncludeDocsAlreadyExported=Include docs already exported -ExportOfPiecesAlreadyExportedIsEnable=Export of pieces already exported is enable -ExportOfPiecesAlreadyExportedIsDisable=Export of pieces already exported is disable +ExportOfPiecesAlreadyExportedIsEnable=Documents already exported are visible and will be exported +ExportOfPiecesAlreadyExportedIsDisable=Documents already exported are hidden and won't be exported AllExportedMovementsWereRecordedAsExported=All exported movements were recorded as exported NotAllExportedMovementsCouldBeRecordedAsExported=Not all exported movements could be recorded as exported Miscellaneous=Miscellaneous Calendar=Calendar GroupBy=Group by... +GroupByX=Group by %s ViewFlatList=View flat list ViewAccountList=View ledger ViewSubAccountList=View subaccount ledger @@ -939,7 +957,7 @@ BulkActions=Bulk actions ClickToShowHelp=Click to show tooltip help WebSite=Website WebSites=Websites -WebSiteAccounts=Website accounts +WebSiteAccounts=Web access accounts ExpenseReport=Expense report ExpenseReports=Expense reports HR=HR @@ -948,6 +966,7 @@ AutomaticallyCalculated=Automatically calculated TitleSetToDraft=Go back to draft ConfirmSetToDraft=Are you sure you want to go back to Draft status? ImportId=Import id +Event=Event Events=Events EMailTemplates=Email templates FileNotShared=File not shared to external public @@ -965,31 +984,31 @@ LineNb=Line no. IncotermLabel=Incoterms TabLetteringCustomer=Customer lettering TabLetteringSupplier=Vendor lettering -Monday=Monday -Tuesday=Tuesday -Wednesday=Wednesday -Thursday=Thursday -Friday=Friday -Saturday=Saturday -Sunday=Sunday -MondayMin=Mo -TuesdayMin=Tu -WednesdayMin=We -ThursdayMin=Th +Monday=週一 +Tuesday=週二 +Wednesday=週三 +Thursday=週四 +Friday=星期五 +Saturday=週六 +Sunday=星期日 +MondayMin=莫 +TuesdayMin=塗 +WednesdayMin=我們 +ThursdayMin=釷 FridayMin=Fr -SaturdayMin=Sa -SundayMin=Su -Day1=Monday -Day2=Tuesday -Day3=Wednesday -Day4=Thursday -Day5=Friday -Day6=Saturday -Day0=Sunday -ShortMonday=M -ShortTuesday=T -ShortWednesday=W -ShortThursday=T +SaturdayMin=薩 +SundayMin=蘇 +Day1=週一 +Day2=週二 +Day3=週三 +Day4=週四 +Day5=星期五 +Day6=週六 +Day0=星期日 +ShortMonday=中號 +ShortTuesday=時間 +ShortWednesday=瓦 +ShortThursday=時間 ShortFriday=F ShortSaturday=S ShortSunday=S @@ -1067,6 +1086,7 @@ CommentPage=Comments space CommentAdded=Comment added CommentDeleted=Comment deleted Everybody=Everybody +EverybodySmall=Everybody PayedBy=Paid by PayedTo=Paid to Monthly=Monthly @@ -1079,7 +1099,7 @@ KeyboardShortcut=Keyboard shortcut AssignedTo=Assigned to Deletedraft=Delete draft ConfirmMassDraftDeletion=Draft mass delete confirmation -FileSharedViaALink=File shared with a public link +FileSharedViaALink=Public file shared via link SelectAThirdPartyFirst=Select a third party first... YouAreCurrentlyInSandboxMode=You are currently in the %s "sandbox" mode Inventory=Inventory @@ -1113,7 +1133,7 @@ ContactDefault_project_task=Task ContactDefault_propal=Proposal ContactDefault_supplier_proposal=Supplier Proposal ContactDefault_ticket=Ticket -ContactAddedAutomatically=Contact added from contact thirdparty roles +ContactAddedAutomatically=Contact added from third-party contact roles More=More ShowDetails=Show details CustomReports=Custom reports @@ -1128,6 +1148,7 @@ DeleteFileText=Do you really want delete this file? ShowOtherLanguages=Show other languages SwitchInEditModeToAddTranslation=Switch in edit mode to add translations for this language NotUsedForThisCustomer=Not used for this customer +NotUsedForThisVendor=Not used for this vendor AmountMustBePositive=Amount must be positive ByStatus=By status InformationMessage=Information @@ -1148,14 +1169,14 @@ EventReminder=Event Reminder UpdateForAllLines=Update for all lines OnHold=On hold Civility=Civility -AffectTag=Assign Tag -AffectUser=Assign User -SetSupervisor=Set Supervisor +AffectTag=Assign a Tag +AffectUser=Assign a User +SetSupervisor=Set the supervisor CreateExternalUser=Create external user -ConfirmAffectTag=Bulk Tag Assignement -ConfirmAffectUser=Bulk User Assignement -ProjectRole=Role assigned on each project -TasksRole=Role assigned on each task of each project +ConfirmAffectTag=Bulk Tag Assignment +ConfirmAffectUser=Bulk User Assignment +ProjectRole=Role assigned on each project/opportunity +TasksRole=Role assigned on each task (if used) ConfirmSetSupervisor=Bulk Supervisor Set ConfirmUpdatePrice=Choose a increase/decrease price rate ConfirmAffectTagQuestion=Are you sure you want to assign tags to the %s selected record(s)? @@ -1163,7 +1184,6 @@ ConfirmAffectUserQuestion=Are you sure you want to assign users to the %s select ConfirmSetSupervisorQuestion=Are you sure you want to set supervisor to the %s selected record(s)? ConfirmUpdatePriceQuestion=Are you sure you want to update the price of the %s selected record(s)? CategTypeNotFound=No tag type found for type of records -Rate=Rate SupervisorNotFound=Supervisor not found CopiedToClipboard=Copied to clipboard InformationOnLinkToContract=This amount is only the total of all the lines of the contract. No notion of time is taken into consideration. @@ -1196,6 +1216,7 @@ CanceledHidden=Canceled hidden CanceledShown=Canceled shown Terminate=Terminate Terminated=Terminated +Position=Position AddLineOnPosition=Add line on position (at the end if empty) ConfirmAllocateCommercial=Assign sales representative confirmation ConfirmAllocateCommercialQuestion=Are you sure you want to assign the %s selected record(s)? @@ -1210,3 +1231,40 @@ CreatedByPublicPortal=Created from Public portal UserAgent=User Agent InternalUser=Internal user ExternalUser=External user +NoSpecificContactAddress=No specific contact or address +NoSpecificContactAddressBis=This tab is dedicated to force specific contacts or addresses for the current object. Use it only if you want to define one or several specific contacts or addresses for the object when the information on the third party is not enough or not accurate. +HideOnVCard=Hide %s +ShowOnVCard=Show %s +AddToContacts=Add address to my contacts +LastAccess=Last access +UploadAnImageToSeeAPhotoHere=Upload an image from the tab %s to see a photo here +LastPasswordChangeDate=Last password change date +PublicVirtualCardUrl=Virtual business card page URL +PublicVirtualCard=Virtual business card +TreeView=Tree view +DropFileToAddItToObject=Drop a file to add it to this object +UploadFileDragDropSuccess=The file(s) have been uploaded successfully +SearchSyntaxTooltipForStringOrNum=For searching inside text fields, you can use the characters ^ or $ to make a 'start or end with' search or use the ! to make a 'does not contain' test. You can use the | between two strings instead of a space for a 'OR' condition instead of 'AND'. For numeric values, you can use the operator <, >, <=, >= or != before the value, to filter using a mathematical comparison +InProgress=In progress +DateOfPrinting=Date of printing +ClickFullScreenEscapeToLeave=Click here to switch in Full screen mode. Press ESCAPE to leave Full screen mode. +UserNotYetValid=Not yet valid +UserExpired=Expired +LinkANewFile=Link a new file/document +LinkedFiles=Linked files and documents +NoLinkFound=No registered links +LinkComplete=The file has been linked successfully +ErrorFileNotLinked=The file could not be linked +LinkRemoved=The link %s has been removed +ErrorFailedToDeleteLink= Failed to remove link '%s' +ErrorFailedToUpdateLink= Failed to update link '%s' +URLToLink=URL to link +OverwriteIfExists=Overwrite if file exists +AmountSalary=Salary amount +InvoiceSubtype=Invoice subtype +ConfirmMassReverse=Bulk Reverse confirmation +ConfirmMassReverseQuestion=Are you sure you want to reverse the %s selected record(s)? +ElementType=Element type +ElementId=Element Id +Encrypted=Encrypted +Settings=Settings diff --git a/htdocs/langs/zh_HK/opensurvey.lang b/htdocs/langs/zh_HK/opensurvey.lang index c286034e7be..02659f0acf1 100644 --- a/htdocs/langs/zh_HK/opensurvey.lang +++ b/htdocs/langs/zh_HK/opensurvey.lang @@ -11,7 +11,7 @@ PollTitle=投票標題 ToReceiveEMailForEachVote=每次投票都會收到一封電子郵件 TypeDate=輸入日期 TypeClassic=類型標準 -OpenSurveyStep2=從空閒日(灰色)中選擇您的日期。所選日期為綠色。您可以通過再次單擊先前選擇的日期來取消選擇該日期 +OpenSurveyStep2=Select your dates among the free days (gray). The selected days are green. You can unselect a day previously selected by clicking again on it RemoveAllDays=刪除所有日期 CopyHoursOfFirstDay=複製第一天的時間 RemoveAllHours=刪除所有時間 @@ -37,7 +37,7 @@ ExpireDate=限制日期 NbOfSurveys=投票數 NbOfVoters=選民人數 SurveyResults=結果 -PollAdminDesc=您可以使用“編輯”按鈕更改本次投票的所有投票行。您還可以使用 %s 刪除列或行\n。您還可以使用 %s 添加新列\n。 +PollAdminDesc=You are allowed to change all vote lines of this poll with button "Edit". You can, as well, remove a column or a line with %s. You can also add a new column with %s. 5MoreChoices=還有 5 個選擇 Against=反對 YouAreInivitedToVote=邀請您為本次民意調查投票 @@ -61,3 +61,4 @@ SurveyExpiredInfo=投票已結束或投票延遲已到期。 EmailSomeoneVoted=%s 已填滿一行。\n您可以在以下鏈接找到您的民意調查:\n%s ShowSurvey=Show survey UserMustBeSameThanUserUsedToVote=You must have voted and use the same user name that the one used to vote, to post a comment +ListOfOpenSurveys=List of open surveys diff --git a/htdocs/langs/zh_HK/orders.lang b/htdocs/langs/zh_HK/orders.lang index f6bba3e2d62..79395539098 100644 --- a/htdocs/langs/zh_HK/orders.lang +++ b/htdocs/langs/zh_HK/orders.lang @@ -19,7 +19,7 @@ MakeOrder=下單 SupplierOrder=採購訂單 SuppliersOrders=訂單 SaleOrderLines=Sales order lines -PurchaseOrderLines=Puchase order lines +PurchaseOrderLines=Purchase order lines SuppliersOrdersRunning=當前採購訂單 CustomerOrder=銷售訂單 CustomersOrders=銷售訂單 @@ -72,7 +72,7 @@ Approve2Order=Approve order (second level) UserApproval=User for approval UserApproval2=User for approval (second level) ValidateOrder=驗證訂單 -UnvalidateOrder=取消訂單 +UnvalidateOrder=Invalidate order DeleteOrder=刪除訂單 CancelOrder=取消訂單 OrderReopened= Order %s re-open @@ -103,10 +103,10 @@ disablelinefree=No free lines CloseOrder=關閉訂單 ConfirmCloseOrder=您確定要將此訂單設置為已送達嗎?訂單交付後,可以將其設置為計費。 ConfirmDeleteOrder=您確定要刪除此訂單嗎? -ConfirmValidateOrder=您確定要驗證名稱為 的訂單嗎\n %s ? +ConfirmValidateOrder=Are you sure you want to validate this order under name %s? ConfirmUnvalidateOrder=您確定要恢復訂單嗎 %s 草稿狀態? ConfirmCancelOrder=您確定要取消此訂單嗎? -ConfirmMakeOrder=您確定要確認您是在 下的訂單嗎\n %s ? +ConfirmMakeOrder=Are you sure you want to confirm you made this order on %s? GenerateBill=生成發票 ClassifyShipped=分類交付 PassedInShippedStatus=classified delivered @@ -130,7 +130,7 @@ DispatchSupplierOrder=接收採購訂單%s FirstApprovalAlreadyDone=First approval already done SecondApprovalAlreadyDone=Second approval already done SupplierOrderReceivedInDolibarr=Purchase Order %s received %s -SupplierOrderSubmitedInDolibarr=Purchase Order %s submitted +SupplierOrderSubmitedInDolibarr=Purchase Order %s submitted (%s) SupplierOrderClassifiedBilled=Purchase Order %s set billed OtherOrders=Other orders SupplierOrderValidatedAndApproved=Supplier order is validated and approved : %s diff --git a/htdocs/langs/zh_HK/other.lang b/htdocs/langs/zh_HK/other.lang index 4aab1dc731b..b375602ce96 100644 --- a/htdocs/langs/zh_HK/other.lang +++ b/htdocs/langs/zh_HK/other.lang @@ -31,7 +31,7 @@ PreviousYearOfInvoice=Previous year of invoice date NextYearOfInvoice=Following year of invoice date DateNextInvoiceBeforeGen=Date of next invoice (before generation) DateNextInvoiceAfterGen=Date of next invoice (after generation) -GraphInBarsAreLimitedToNMeasures=Grapics are limited to %s measures in 'Bars' mode. The mode 'Lines' was automatically selected instead. +GraphInBarsAreLimitedToNMeasures=Graphics are limited to %s measures in 'Bars' mode. The mode 'Lines' was automatically selected instead. OnlyOneFieldForXAxisIsPossible=Only 1 field is currently possible as X-Axis. Only the first selected field has been selected. AtLeastOneMeasureIsRequired=At least 1 field for measure is required AtLeastOneXAxisIsRequired=At least 1 field for X-Axis is required @@ -45,6 +45,7 @@ Notify_ORDER_CLOSE=Sales order delivered Notify_ORDER_SUPPLIER_SENTBYMAIL=通過電子郵件發送的採購訂單 Notify_ORDER_SUPPLIER_VALIDATE=已記錄採購訂單 Notify_ORDER_SUPPLIER_APPROVE=採購訂單已批准 +Notify_ORDER_SUPPLIER_SUBMIT=Purchase order submitted Notify_ORDER_SUPPLIER_REFUSE=採購訂單被拒絕 Notify_PROPAL_VALIDATE=客戶提案已驗證 Notify_PROPAL_CLOSE_SIGNED=客戶提案已結束簽署 @@ -63,9 +64,10 @@ Notify_BILL_SENTBYMAIL=通過郵件發送客戶發票 Notify_BILL_SUPPLIER_VALIDATE=供應商發票已驗證 Notify_BILL_SUPPLIER_PAYED=供應商發票已支付 Notify_BILL_SUPPLIER_SENTBYMAIL=通過郵件發送的供應商發票 -Notify_BILL_SUPPLIER_CANCELED=供應商發票已取消 +Notify_BILL_SUPPLIER_CANCELED=Vendor invoice canceled Notify_CONTRACT_VALIDATE=合同已驗證 Notify_FICHINTER_VALIDATE=Intervention validated +Notify_FICHINTER_CLOSE=Intervention closed Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention Notify_FICHINTER_SENTBYMAIL=通過郵件發送干預措施 Notify_SHIPPING_VALIDATE=發貨已驗證 @@ -118,9 +120,9 @@ DemoCompanyManufacturing=Company manufacturing products DemoCompanyAll=擁有多項活動的公司(所有主要模塊) CreatedBy=創建者:%s ModifiedBy=修改者 %s -ValidatedBy=已由 %s 驗證\n +ValidatedBy=Validated by %s SignedBy=Signed by %s -ClosedBy=由 %s 關閉\n +ClosedBy=Closed by %s CreatedById=創建的用戶id ModifiedById=進行最新更改的用戶 ID ValidatedById=驗證的用戶 ID @@ -172,7 +174,7 @@ VolumeUnitmm3=毫米立方(微升) VolumeUnitfoot3=立方英尺 VolumeUnitinch3=立方英寸 VolumeUnitounce=盎司 -VolumeUnitlitre=升 +VolumeUnitlitre=liter VolumeUnitgallon=加侖 SizeUnitm=米 SizeUnitdm=DM @@ -190,7 +192,11 @@ EnableGDLibraryDesc=在 PHP 安裝上安裝或啟用 GD 庫以使用此選項。 ProfIdShortDesc= 教授 ID %s 是取決於第三方國家的信息。
例如,對於國家/地區 %s ,它的代碼是 %s 。 DolibarrDemo=Dolibarr ERP/CRM 演示 StatsByAmount=Statistics on amount of products/services +StatsByAmountProducts=Statistics on amount of products +StatsByAmountServices=Statistics on amount of services StatsByNumberOfUnits=產品/服務數量總和統計 +StatsByNumberOfUnitsProducts=Statistics for sum of qty of products +StatsByNumberOfUnitsServices=Statistics for sum of qty of services StatsByNumberOfEntities=引用實體數量的統計信息(發票或訂單的數量...) NumberOf=Number of %s NumberOfUnits=Number of units on %s @@ -198,6 +204,7 @@ AmountIn=Amount in %s NumberOfUnitsMos=Number of units to produce in manufacturing orders EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=干預%s 已被驗證。 +EMailTextInterventionClosed=The intervention %s has been closed. EMailTextInvoiceValidated=發票%s 已被驗證。 EMailTextInvoicePayed=Invoice %s has been paid. EMailTextProposalValidated=提案%s 已被驗證。 @@ -207,11 +214,10 @@ EMailTextProposalClosedRefused=Proposal %s has been closed refused. EMailTextProposalClosedRefusedWeb=Proposal %s has been closed refuse on portal page. EMailTextOrderValidated=訂購%s 已被驗證。 EMailTextOrderClose=Order %s has been delivered. -EMailTextOrderApproved=訂購%s 已經批准了。 -EMailTextOrderValidatedBy=Order %s has been recorded by %s. -EMailTextOrderApprovedBy=訂購%s 已獲得 %s 批准\n。 -EMailTextOrderRefused=訂購%s 已被拒絕。 -EMailTextOrderRefusedBy=訂購%s 已被 %s 拒絕\n。 +EMailTextSupplierOrderApprovedBy=Purchase order %s has been approved by %s. +EMailTextSupplierOrderValidatedBy=Purchase order %s has been recorded by %s. +EMailTextSupplierOrderSubmittedBy=Purchase order %s has been submitted by %s. +EMailTextSupplierOrderRefusedBy=Purchase order %s has been refused by %s. EMailTextExpeditionValidated=運送%s 已被驗證。 EMailTextExpenseReportValidated=Expense report %s has been validated. EMailTextExpenseReportApproved=Expense report %s has been approved. @@ -227,7 +233,7 @@ NewSizeAfterCropping=裁剪後的新尺寸 DefineNewAreaToPick=在圖像上定義要選取的新區域(左鍵單擊圖像,然後拖動直到到達對角) CurrentInformationOnImage=該工具旨在幫助您調整圖像大小或裁剪圖像。這是當前編輯圖像的信息 ImageEditor=圖片編輯器 -YouReceiveMailBecauseOfNotification=您收到此消息是因為您的電子郵件已添加到 %s 的特定事件通知目標列表中\n %s 的軟件\n。 +YouReceiveMailBecauseOfNotification=You receive this message because your email has been added to list of targets to be informed of particular events into %s software of %s. YouReceiveMailBecauseOfNotification2=本次活動內容如下: ThisIsListOfModules=這是此演示配置文件預選的模塊列表(此演示中僅顯示最常見的模塊)。編輯此內容以獲得更個性化的演示,然後單擊“開始”。 UseAdvancedPerms=使用部分模塊的高級權限 @@ -289,10 +295,12 @@ LinesToImport=Lines to import MemoryUsage=Memory usage RequestDuration=Duration of request -ProductsPerPopularity=Products/Services by popularity -PopuProp=Products/Services by popularity in Proposals -PopuCom=Products/Services by popularity in Orders -ProductStatistics=Products/Services Statistics +ProductsServicesPerPopularity=Products|Services by popularity +ProductsPerPopularity=Products by popularity +ServicesPerPopularity=Services by popularity +PopuProp=Products|Services by popularity in Proposals +PopuCom=Products|Services by popularity in Orders +ProductStatistics=Products|Services Statistics NbOfQtyInOrders=Qty in orders SelectTheTypeOfObjectToAnalyze=Select an object to view its statistics... @@ -328,3 +336,5 @@ FTPFailedToUploadFile=Failed to upload the file %s. AddFolder=Create folder FileWasCreateFolder=Folder %s has been created FTPFailedToCreateFolder=Failed to create folder %s. +SelectADay=Select a day in calendar +SelectANewDate=Select a new date diff --git a/htdocs/langs/zh_HK/paybox.lang b/htdocs/langs/zh_HK/paybox.lang index 5e5d347c26e..bea8c454c0c 100644 --- a/htdocs/langs/zh_HK/paybox.lang +++ b/htdocs/langs/zh_HK/paybox.lang @@ -1,10 +1,10 @@ # Dolibarr language file - Source file is en_US - paybox PayBoxSetup=PayBox模塊設置 -PayBoxDesc=此模塊提供允許在 上付款的頁面\n 收款箱 由客戶。這可用於免費付款或針對特定 Dolibarr 對象(發票、訂單等)的付款 +PayBoxDesc=This module offer pages to allow payment on Paybox by customers. This can be used for a free payment or for a payment on a particular Dolibarr object (invoice, order, ...) FollowingUrlAreAvailableToMakePayments=以下 URL 可用於向客戶提供用於對 Dolibarr 對象進行付款的頁面 PaymentForm=付款方式 WelcomeOnPaymentPage=歡迎使用我們的在線支付服務 -ThisScreenAllowsYouToPay=您可以通過此屏幕向 %s 進行在線付款\n。 +ThisScreenAllowsYouToPay=This screen allow you to make an online payment to %s. ThisIsInformationOnPayment=這是有關付款的信息 ToComplete=去完成 YourEMail=用於接收付款確認的電子郵件 @@ -13,7 +13,7 @@ PaymentCode=付款碼 PayBoxDoPayment=使用 Paybox 付款 YouWillBeRedirectedOnPayBox=您將被重定向到安全的 Paybox 頁面以輸入您的信用卡信息 Continue=下一個 -SetupPayBoxToHavePaymentCreatedAutomatically=使用 URL 設置您的 Paybox\n %s 通過 Paybox 驗證後自動創建付款。 +SetupPayBoxToHavePaymentCreatedAutomatically=Setup your Paybox with url %s to have payment created automatically when validated by Paybox. YourPaymentHasBeenRecorded=此頁面確認您的付款已被記錄。謝謝。 YourPaymentHasNotBeenRecorded=您的付款尚未被記錄,交易已被取消。謝謝。 AccountParameter=賬戶參數 diff --git a/htdocs/langs/zh_HK/paypal.lang b/htdocs/langs/zh_HK/paypal.lang index 436b5eb2ee1..21a468f52b7 100644 --- a/htdocs/langs/zh_HK/paypal.lang +++ b/htdocs/langs/zh_HK/paypal.lang @@ -1,6 +1,6 @@ # Dolibarr language file - Source file is en_US - paypal PaypalSetup=貝寶模塊設置 -PaypalDesc=此模塊允許客戶通過 付款\n 貝寶 。這可用於臨時付款或與 Dolibarr 對象(發票、訂單等)相關的付款 +PaypalDesc=This module allows payment by customers via PayPal. This can be used for a ad-hoc payment or for a payment related to a Dolibarr object (invoice, order, ...) PaypalOrCBDoPayment=使用 PayPal 付款(銀行卡或 PayPal) PaypalDoPayment=使用貝寶支付 PAYPAL_API_SANDBOX=模式測試/沙箱 @@ -12,7 +12,7 @@ PAYPAL_API_INTEGRAL_OR_PAYPALONLY=提供“積分”付款(信用卡+PayPal) PaypalModeIntegral=不可缺少的 PaypalModeOnlyPaypal=僅限貝寶 ONLINE_PAYMENT_CSS_URL=Optional URL of CSS stylesheet on online payment page -ThisIsTransactionId=這是交易 ID: %s +ThisIsTransactionId=這是交易 ID: %s PAYPAL_ADD_PAYMENT_URL=通過電子郵件發送文檔時包含 PayPal 付款網址 NewOnlinePaymentReceived=New online payment received NewOnlinePaymentFailed=New online payment tried but failed diff --git a/htdocs/langs/zh_HK/products.lang b/htdocs/langs/zh_HK/products.lang index 302ab8ea374..9927d8ba2db 100644 --- a/htdocs/langs/zh_HK/products.lang +++ b/htdocs/langs/zh_HK/products.lang @@ -18,7 +18,7 @@ Reference=參考 NewProduct=新產品 NewService=新服務 ProductVatMassChange=全球增值稅更新 -ProductVatMassChangeDesc=此工具更新 上定義的增值稅率\n 全部 產品和服務! +ProductVatMassChangeDesc=This tool updates the VAT rate defined on ALL products and services! MassBarcodeInit=批量條形碼初始化 MassBarcodeInitDesc=此頁面可用於初始化未定義條形碼的對像上的條形碼。檢查模塊條碼設置是否完成。 ProductAccountancyBuyCode=會計代碼(採購) @@ -80,10 +80,13 @@ SoldAmount=Sold amount PurchasedAmount=Purchased amount NewPrice=新價格 MinPrice=分鐘。售價 +MinPriceHT=Min. selling price (excl. tax) +MinPriceTTC=Min. selling price (inc. tax) EditSellingPriceLabel=Edit selling price label -CantBeLessThanMinPrice=售價不能低於該產品允許的最低價格 (%s 不含稅)。如果您輸入的折扣太重要,也會出現此消息。 +CantBeLessThanMinPrice=The selling price can't be lower than minimum allowed for this product (%s without tax). This message can also appear if you type a significant discount. +CantBeLessThanMinPriceInclTax=The selling price can't be lower than minimum allowed for this product (%s including taxes). This message can also appears if you type a too important discount. ContractStatusClosed=關閉 -ErrorProductAlreadyExists=參考號為 %s 的產品\n 已經存在。 +ErrorProductAlreadyExists=A product with reference %s already exists. ErrorProductBadRefOrLabel=參考值或標籤值錯誤。 ErrorProductClone=嘗試克隆產品或服務時出現問題。 ErrorPriceCantBeLowerThanMinPrice=Error, price can't be lower than minimum price. @@ -205,11 +208,6 @@ unitSET=Set unitS=Second unitH=Hour unitD=Day -unitG=Gram -unitM=Meter -unitLM=Linear meter -unitM2=Square meter -unitM3=Cubic meter unitL=Liter unitT=ton unitKG=kg @@ -218,6 +216,7 @@ unitMG=mg unitLB=pound unitOZ=ounce unitM=Meter +unitLM=Linear meter unitDM=dm unitCM=cm unitMM=mm @@ -347,16 +346,17 @@ UseProductFournDesc=Add a feature to define the product description defined by t ProductSupplierDescription=Vendor description for the product UseProductSupplierPackaging=Use the "packaging" feature to round the quantities to some given multiples (when adding/updating line in a vendor documents, recalculate quantities and purchase prices according to the higher multiple set on the purchase prices of a product) PackagingForThisProduct=Packaging of quantities -PackagingForThisProductDesc=You will automaticaly purchase a multiple of this quantity. +PackagingForThisProductDesc=You will automatically purchase a multiple of this quantity. QtyRecalculatedWithPackaging=The quantity of the line were recalculated according to supplier packaging #Attributes +Attributes=Attributes VariantAttributes=Variant attributes ProductAttributes=Variant attributes for products ProductAttributeName=Variant attribute %s ProductAttribute=Variant attribute ProductAttributeDeleteDialog=Are you sure you want to delete this attribute? All values will be deleted -ProductAttributeValueDeleteDialog=Are you sure you want to delete the value "%s" with reference "%s" of this attribute? +ProductAttributeValueDeleteDialog=Are you sure you want to delete the value "%s" with the reference "%s" of this attribute? ProductCombinationDeleteDialog=Are you sure want to delete the variant of the product "%s"? ProductCombinationAlreadyUsed=There was an error while deleting the variant. Please check it is not being used in any object ProductCombinations=Variants @@ -387,6 +387,7 @@ ErrorDeletingGeneratedProducts=There was an error while trying to delete existin NbOfDifferentValues=No. of different values NbProducts=Number of products ParentProduct=Parent product +ParentProductOfVariant=Parent product of variant HideChildProducts=Hide variant products ShowChildProducts=Show variant products NoEditVariants=Go to Parent product card and edit variants price impact in the variants tab @@ -417,7 +418,7 @@ ErrorsProductsMerge=Errors in products merge SwitchOnSaleStatus=Switch on sale status SwitchOnPurchaseStatus=Switch on purchase status UpdatePrice=Increase/decrease customer price -StockMouvementExtraFields= Extra Fields (stock mouvement) +StockMouvementExtraFields= Extra Fields (stock movement) InventoryExtraFields= Extra Fields (inventory) ScanOrTypeOrCopyPasteYourBarCodes=Scan or type or copy/paste your barcodes PuttingPricesUpToDate=Update prices with current known prices @@ -430,3 +431,8 @@ ConfirmEditExtrafield = Select the extrafield you want modify ConfirmEditExtrafieldQuestion = Are you sure you want to modify this extrafield? ModifyValueExtrafields = Modify value of an extrafield OrProductsWithCategories=Or products with tags/categories +WarningTransferBatchStockMouvToGlobal = If you want to deserialize this product, all its serialized stock will be transformed into global stock +WarningConvertFromBatchToSerial=If you currently have a quantity higher or equal to 2 for the product, switching to this choice means you will still have a product with different objects of the same batch (while you want a unique serial number). The duplicate will remain until an inventory or a manual stock movement to fix this is done. +AllowStockMovementVariantParent=Also records stock movements on parent products of variant products +AllowStockMovementVariantParentHelp=By default, a parent of a variant is a virtual product, so no stock is managed for it. By enabling this option, a stock will be managed for parent products and each time a stock quantity is modified for a variant product, the same quantity will be modified for the parent product. You should not need this option, except if you are using variant to manage the same product than parent (but with different descriptions, prices...) +ConfirmSetToDraftInventory=Are you sure you want to go back to Draft status?
The quantities currently set in the inventory will be reset. diff --git a/htdocs/langs/zh_HK/projects.lang b/htdocs/langs/zh_HK/projects.lang index aa083483465..4b2d27450d2 100644 --- a/htdocs/langs/zh_HK/projects.lang +++ b/htdocs/langs/zh_HK/projects.lang @@ -122,7 +122,7 @@ ChildOfTask=任務的孩子 TaskHasChild=Task has child NotOwnerOfProject=不是這個私人項目的所有者 AffectedTo=分配給 -CantRemoveProject=該項目無法刪除,因為它被其他一些對象(發票、訂單或其他)引用。請參閱選項卡“%s”\n'。 +CantRemoveProject=This project can't be removed as it is referenced by some other objects (invoice, orders or other). See tab '%s'. ValidateProject=Validate project ConfirmValidateProject=您確定要驗證該項目嗎? CloseAProject=關閉項目 @@ -249,7 +249,7 @@ LatestProjects=Latest %s projects LatestModifiedProjects=Latest %s modified projects OtherFilteredTasks=Other filtered tasks NoAssignedTasks=No assigned tasks found (assign project/tasks to the current user from the top select box to enter time on it) -ThirdPartyRequiredToGenerateInvoice=A third party must be defined on project to be able to invoice it. +ThirdPartyRequiredToGenerateIntervention=A third party must be defined on project to be able to create intervention. ThirdPartyRequiredToGenerateInvoice=A third party must be defined on project to be able to invoice it. ChooseANotYetAssignedTask=Choose a task not yet assigned to you # Comments trans diff --git a/htdocs/langs/zh_HK/propal.lang b/htdocs/langs/zh_HK/propal.lang index 125cee3cf8b..66dc2e74a40 100644 --- a/htdocs/langs/zh_HK/propal.lang +++ b/htdocs/langs/zh_HK/propal.lang @@ -12,9 +12,11 @@ NewPropal=新提案 Prospect=前景 DeleteProp=刪除商業提案 ValidateProp=驗證商業提案 +CancelPropal=Cancel AddProp=創建提案 ConfirmDeleteProp=您確定要刪除此商業提案嗎? -ConfirmValidateProp=您確定要驗證名稱為 的商業提案嗎\n %s ? +ConfirmValidateProp=Are you sure you want to validate this commercial proposal under name %s? +ConfirmCancelPropal=Are you sure you want to cancel commercial proposal %s? LastPropals=最新%s 提案 LastModifiedProposals=最新%s 修改後的提案 AllPropals=所有提案 @@ -27,13 +29,15 @@ NbOfProposals=商業提案數量 ShowPropal=顯示提案 PropalsDraft=草稿 PropalsOpened=打開 +PropalStatusCanceled=Canceled (Abandoned) PropalStatusDraft=草案(需要驗證) PropalStatusValidated=已驗證(提案已開放) PropalStatusSigned=簽字(需要開具賬單) PropalStatusNotSigned=未簽署(已關閉) PropalStatusBilled=計費 +PropalStatusCanceledShort=Canceled PropalStatusDraftShort=草稿 -PropalStatusValidatedShort=Validated (open) +PropalStatusValidatedShort=Open PropalStatusClosedShort=關閉 PropalStatusSignedShort=簽 PropalStatusNotSignedShort=未簽名 @@ -114,6 +118,7 @@ RefusePropal=Refuse proposal Sign=Sign SignContract=Sign contract SignFichinter=Sign intervention +SignSociete_rib=Sign mandate SignPropal=Accept proposal Signed=signed SignedOnly=Signed only diff --git a/htdocs/langs/zh_HK/stocks.lang b/htdocs/langs/zh_HK/stocks.lang index c44b541e8ba..8d83942e282 100644 --- a/htdocs/langs/zh_HK/stocks.lang +++ b/htdocs/langs/zh_HK/stocks.lang @@ -116,9 +116,10 @@ EstimatedStockValue=輸入股票價值 DeleteAWarehouse=刪除倉庫 ConfirmDeleteWarehouse=您確定要刪除倉庫 %s ? PersonalStock=個人股票%s -ThisWarehouseIsPersonalStock=此倉庫代表 %s 的個人庫存\n %s +ThisWarehouseIsPersonalStock=This warehouse represents personal stock of %s %s SelectWarehouseForStockDecrease=選擇用於減少庫存的倉庫 SelectWarehouseForStockIncrease=選擇用於增加庫存的倉庫 +RevertProductsToStock=Revert products to stock ? NoStockAction=無股票行動 DesiredStock=所需股票 DesiredStockDesc=This stock amount will be the value used to fill the stock by replenishment feature. @@ -167,6 +168,7 @@ qtyToTranferLotIsNotEnough=You don't have enough stock, for this lot number, fro ShowWarehouse=Show warehouse MovementCorrectStock=Stock correction for product %s MovementTransferStock=Stock transfer of product %s into another warehouse +BatchStockMouvementAddInGlobal=Batch stock move into global stock (product doesn't use batch anymore) InventoryCodeShort=Inv./Mov. code NoPendingReceptionOnSupplierOrder=No pending reception due to open purchase order ThisSerialAlreadyExistWithDifferentDate=This lot/serial number (%s) already exists but with different eatby or sellby date (found %s but you enter %s). @@ -210,10 +212,10 @@ INVENTORY_USE_INVENTORY_DATE_FOR_DATE_OF_MVT=Stock movements will have the date inventoryChangePMPPermission=Allow to change PMP value for a product ColumnNewPMP=New unit PMP OnlyProdsInStock=Do not add product without stock -TheoricalQty=Theorical qty -TheoricalValue=Theorical qty +TheoricalQty=Theoretical qty +TheoricalValue=Theoretical qty LastPA=Last BP -CurrentPA=Curent BP +CurrentPA=Current BP RecordedQty=Recorded Qty RealQty=Real Qty RealValue=Real Value @@ -244,7 +246,7 @@ StockAtDatePastDesc=You can view here the stock (real stock) at a given date in StockAtDateFutureDesc=You can view here the stock (virtual stock) at a given date in the future CurrentStock=Current stock InventoryRealQtyHelp=Set value to 0 to reset qty
Keep field empty, or remove line, to keep unchanged -UpdateByScaning=Complete real qty by scaning +UpdateByScaning=Complete real qty by scanning UpdateByScaningProductBarcode=Update by scan (product barcode) UpdateByScaningLot=Update by scan (lot|serial barcode) DisableStockChangeOfSubProduct=Deactivate the stock change for all the subproducts of this Kit during this movement. @@ -280,7 +282,7 @@ ModuleStockTransferName=Advanced Stock Transfer ModuleStockTransferDesc=Advanced management of Stock Transfer, with generation of transfer sheet StockTransferNew=New stock transfer StockTransferList=Stock transfers list -ConfirmValidateStockTransfer=Are you sure you want to validate this stocks transfer with reference %s ? +ConfirmValidateStockTransfer=Are you sure you want to validate this stocks transfer with the reference %s ? ConfirmDestock=Decrease of stocks with transfer %s ConfirmDestockCancel=Cancel decrease of stocks with transfer %s DestockAllProduct=Decrease of stocks @@ -307,19 +309,26 @@ StockTransferDecrementationCancel=Cancel decrease of source warehouses StockTransferIncrementationCancel=Cancel increase of destination warehouses StockStransferDecremented=Source warehouses decreased StockStransferDecrementedCancel=Decrease of source warehouses canceled -StockStransferIncremented=Closed - Stocks transfered -StockStransferIncrementedShort=Stocks transfered +StockStransferIncremented=Closed - Stocks transferred +StockStransferIncrementedShort=Stocks transferred StockStransferIncrementedShortCancel=Increase of destination warehouses canceled StockTransferNoBatchForProduct=Product %s doesn't use batch, clear batch on line and retry StockTransferSetup = Stocks Transfer module configuration -Settings=Settings StockTransferSetupPage = Configuration page for stocks transfer module StockTransferRightRead=Read stocks transfers StockTransferRightCreateUpdate=Create/Update stocks transfers StockTransferRightDelete=Delete stocks transfers BatchNotFound=Lot / serial not found for this product +StockEntryDate=Date of
entry in stock StockMovementWillBeRecorded=Stock movement will be recorded StockMovementNotYetRecorded=Stock movement will not be affected by this step +ReverseConfirmed=Stock movement has been reversed successfully WarningThisWIllAlsoDeleteStock=Warning, this will also destroy all quantities in stock in the warehouse +ValidateInventory=Inventory validation +IncludeSubWarehouse=Include sub-warehouse ? +IncludeSubWarehouseExplanation=Check this box if you want to include all sub-warehouses of the associated warehouse in the inventory DeleteBatch=Delete lot/serial ConfirmDeleteBatch=Are you sure you want to delete lot/serial ? +WarehouseUsage=Warehouse usage +InternalWarehouse=Internal warehouse +ExternalWarehouse=External warehouse diff --git a/htdocs/langs/zh_HK/stripe.lang b/htdocs/langs/zh_HK/stripe.lang index 2c95bcfce27..da6a38d0da7 100644 --- a/htdocs/langs/zh_HK/stripe.lang +++ b/htdocs/langs/zh_HK/stripe.lang @@ -41,7 +41,8 @@ STRIPE_LIVE_WEBHOOK_KEY=Webhook live key ONLINE_PAYMENT_WAREHOUSE=Stock to use for stock decrease when online payment is done
(TODO When option to decrease stock is done on an action on invoice and the online payment generate itself the invoice ?) StripeLiveEnabled=Stripe live enabled (otherwise test/sandbox mode) StripeImportPayment=Import Stripe payments -ExampleOfTestCreditCard=Example of credit card for test: %s => valid, %s => error CVC, %s => expired, %s => charge fails +ExampleOfTestCreditCard=Example of credit card for a test payment: %s => valid, %s => error CVC, %s => expired, %s => charge fails +ExampleOfTestBankAcountForSEPA=Example of bank account BAN for direct debit test: %s StripeGateways=Stripe gateways OAUTH_STRIPE_TEST_ID=Stripe Connect Client ID (ca_...) OAUTH_STRIPE_LIVE_ID=Stripe Connect Client ID (ca_...) @@ -50,6 +51,7 @@ StripeAccount=Stripe account StripeChargeList=List of Stripe charges StripeTransactionList=List of Stripe transactions StripeCustomerId=Stripe customer id +StripePaymentId=Stripe payment id StripePaymentModes=Stripe payment modes LocalID=Local ID StripeID=Stripe ID @@ -61,6 +63,7 @@ DeleteACard=Delete Card ConfirmDeleteCard=Are you sure you want to delete this Credit or Debit card? CreateCustomerOnStripe=Create customer on Stripe CreateCardOnStripe=Create card on Stripe +CreateBANOnStripe=Create bank on Stripe ShowInStripe=Show in Stripe StripeUserAccountForActions=User account to use for email notification of some Stripe events (Stripe payouts) StripePayoutList=List of Stripe payouts @@ -68,4 +71,10 @@ ToOfferALinkForTestWebhook=Link to setup Stripe WebHook to call the IPN (test mo ToOfferALinkForLiveWebhook=Link to setup Stripe WebHook to call the IPN (live mode) PaymentWillBeRecordedForNextPeriod=Payment will be recorded for the next period. ClickHereToTryAgain=Click here to try again... -CreationOfPaymentModeMustBeDoneFromStripeInterface=Due to Strong Customer Authentication rules, creation of a card must be done from Stripe backoffice. You can click here to switch on Stripe customer record: %s +CreationOfPaymentModeMustBeDoneFromStripeInterface=Due to Strong Customer Authentication rules, creation of a card must be done from Stripe back office. You can click here to switch on Stripe customer record: %s +STRIPE_CARD_PRESENT=Card Present for Stripe Terminals +TERMINAL_LOCATION=Location (address) for Stripe Terminals +RequestDirectDebitWithStripe=Request Direct Debit with Stripe +RequesCreditTransferWithStripe=Request Credit Transfer with Stripe +STRIPE_SEPA_DIRECT_DEBIT=Enable the Direct Debit payments through Stripe +StripeConnect_Mode=Stripe Connect mode diff --git a/htdocs/langs/zh_HK/suppliers.lang b/htdocs/langs/zh_HK/suppliers.lang index 5fffb9104a6..b79d6a98c69 100644 --- a/htdocs/langs/zh_HK/suppliers.lang +++ b/htdocs/langs/zh_HK/suppliers.lang @@ -32,7 +32,7 @@ ConfirmDenyingThisOrder=您確定要拒絕此訂單 %s ? ConfirmCancelThisOrder=您確定要取消此訂單 %s ? AddSupplierOrder=創建採購訂單 AddSupplierInvoice=創建供應商發票 -ListOfSupplierProductForSupplier=供應商 的產品和價格列表\n %s +ListOfSupplierProductForSupplier=List of products and prices for vendor %s SentToSuppliers=發送給供應商 ListOfSupplierOrders=List of purchase orders MenuOrdersSupplierToBill=Purchase orders to invoice diff --git a/htdocs/langs/zh_HK/users.lang b/htdocs/langs/zh_HK/users.lang index cb36598fc0d..303fe3d66ac 100644 --- a/htdocs/langs/zh_HK/users.lang +++ b/htdocs/langs/zh_HK/users.lang @@ -9,7 +9,7 @@ SendNewPassword=重新生成並發送密碼 SendNewPasswordLink=Send link to reset password ReinitPassword=重新生成密碼 PasswordChangedTo=密碼更改為:%s -SubjectNewPassword=您的 %s 的新密碼\n +SubjectNewPassword=Your new password for %s GroupRights=組權限 UserRights=用戶權限 Credentials=Credentials @@ -25,18 +25,17 @@ ConfirmDisableUser=您確定要禁用用戶 %s ? ConfirmDeleteUser=您確定要刪除用戶 %s ? ConfirmDeleteGroup=您確定要刪除群組 %s ? ConfirmEnableUser=您確定要啟用用戶 %s ? -ConfirmReinitPassword=您確定要為用戶 生成新密碼嗎\n %s ? -ConfirmSendNewPassword=您確定要為用戶 生成並發送新密碼嗎\n %s ? +ConfirmReinitPassword=Are you sure you want to generate a new password for user %s? +ConfirmSendNewPassword=Are you sure you want to generate and send new password for user %s? NewUser=新用戶 CreateUser=創建用戶 LoginNotDefined=未定義登錄。 NameNotDefined=名稱未定義。 ListOfUsers=用戶列表 -SuperAdministrator=超級管理員 -SuperAdministratorDesc=全局管理員 -AdministratorDesc=行政人員 +SuperAdministrator=Multicompany Administrator +SuperAdministratorDesc=Multicompany system administrator (can change setup and users) DefaultRights=默認權限 -DefaultRightsDesc=在此定義 默認 自動授予 的權限\n 新 用戶(要修改現有用戶的權限,請轉到用戶卡)。 +DefaultRightsDesc=Define here the default permissions that are automatically granted to a new user (to modify permissions for existing users, go to the user card). DolibarrUsers=多利巴爾用戶 LastName=姓 FirstName=名 @@ -46,7 +45,7 @@ CreateGroup=創建組 RemoveFromGroup=從組中刪除 PasswordChangedAndSentTo=密碼已更改並發送至 %s 。 PasswordChangeRequest=Request to change password for %s -PasswordChangeRequestSent=請求更改 的密碼\n %s 發送至 %s 。 +PasswordChangeRequestSent=Request to change password for %s sent to %s. IfLoginExistPasswordRequestSent=If this login is a valid account (with a valid email), an email to reset password has been sent. IfEmailExistPasswordRequestSent=If this email is a valid account, an email to reset password has been sent (remember to check your SPAM folder if you do not receive anything) ConfirmPasswordReset=Confirm password reset @@ -81,7 +80,7 @@ UserWillBeInternalUser=創建的用戶將是內部用戶(因為未鏈接到特 UserWillBeExternalUser=創建的用戶將是外部用戶(因為鏈接到特定的第三方) IdPhoneCaller=來電者身份 NewUserCreated=用戶%s 已創建 -NewUserPassword=%s 的密碼更改\n +NewUserPassword=Password change for %s NewPasswordValidated=Your new password have been validated and must be used now to login. EventUserModified=用戶%s 修改的 UserDisabled=用戶%s 殘疾人 @@ -110,8 +109,9 @@ ExpectedWorkedHours=Expected hours worked per week ColorUser=Color of the user DisabledInMonoUserMode=Disabled in maintenance mode UserAccountancyCode=User accounting code -UserLogoff=User logout -UserLogged=User logged +UserLogoff=User logout: %s +UserLogged=User logged: %s +UserLoginFailed=User login failed: %s DateOfEmployment=Employment date DateEmployment=Employment DateEmploymentStart=Employment Start Date @@ -120,10 +120,10 @@ RangeOfLoginValidity=Access validity date range CantDisableYourself=You can't disable your own user record ForceUserExpenseValidator=Force expense report validator ForceUserHolidayValidator=Force leave request validator -ValidatorIsSupervisorByDefault=By default, the validator is the supervisor of the user. Keep empty to keep this behaviour. +ValidatorIsSupervisorByDefault=By default, the validator is the supervisor of the user. Keep empty to keep this behavior. UserPersonalEmail=Personal email UserPersonalMobile=Personal mobile phone -WarningNotLangOfInterface=Warning, this is the main language the user speak, not the language of the interface he choosed to see. To change the interface language visible by this user, go on tab %s +WarningNotLangOfInterface=Warning, this is the main language the user speak, not the language of the interface he chose to see. To change the interface language visible by this user, go on tab %s DateLastLogin=Date last login DatePreviousLogin=Date previous login IPLastLogin=IP last login @@ -132,3 +132,5 @@ ShowAllPerms=Show all permission rows HideAllPerms=Hide all permission rows UserPublicPageDesc=You can enable a virtual card for this user. An url with the user profile and a barcode will be available to allow anybody with a smartphone to scan it and add your contact to its address book. EnablePublicVirtualCard=Enable the user's virtual business card +UserEnabledDisabled=User status changed: %s +AlternativeEmailForOAuth2=Alternative Email for OAuth2 login diff --git a/htdocs/langs/zh_HK/withdrawals.lang b/htdocs/langs/zh_HK/withdrawals.lang index 01ce5f781fc..c9f195b844c 100644 --- a/htdocs/langs/zh_HK/withdrawals.lang +++ b/htdocs/langs/zh_HK/withdrawals.lang @@ -32,7 +32,7 @@ InvoiceWaitingWithdraw=等待直接扣款的發票 InvoiceWaitingPaymentByBankTransfer=Invoice waiting for credit transfer AmountToWithdraw=提取金額 AmountToTransfer=Amount to transfer -NoInvoiceToWithdraw=沒有開具“%s”的發票\n' 在等待。轉到選項卡“%s”\n' 在發票卡上提出請求。 +NoInvoiceToWithdraw=No invoice open for '%s' is waiting. Go on tab '%s' on invoice card to make a request. NoSupplierInvoiceToWithdraw=No supplier invoice with open '%s' is waiting. Go on tab '%s' on invoice card to make a request. ResponsibleUser=用戶負責 WithdrawalsSetup=直接借記付款設置 @@ -151,10 +151,10 @@ USTRD="Unstructured" SEPA XML tag ADDDAYS=Add days to Execution Date NoDefaultIBANFound=No default IBAN found for this third party ### Notifications -InfoCreditSubject=直接借記付款訂單%s的支付\n 由銀行 +InfoCreditSubject=Payment of direct debit payment order %s by the bank InfoCreditMessage=直接借記付款訂單%s 已由銀行付款
付款數據:%s InfoTransSubject=傳輸直接借記付款訂單%s 到銀行 -InfoTransMessage=直接借記付款訂單%s 已由 %s 發送至銀行\n %s。

+InfoTransMessage=The direct debit payment order %s has been sent to bank by %s %s.

InfoTransData=金額:%s
方法:%s
日期:%s InfoRejectSubject=直接借記付款訂單被拒絕 InfoRejectMessage=你好,

發票直接借記付款順序%s 與公司相關%s,數量為 %s 已被銀行拒絕。

--
%s @@ -171,4 +171,3 @@ SalaryWaitingWithdraw=Salaries waiting for payment by credit transfer RefSalary=Salary NoSalaryInvoiceToWithdraw=No salary waiting for a '%s'. Go on tab '%s' on salary card to make a request. SalaryInvoiceWaitingWithdraw=Salaries waiting for payment by credit transfer - diff --git a/htdocs/langs/zh_TW/main.lang b/htdocs/langs/zh_TW/main.lang index 831fa690c91..df7d1255245 100644 --- a/htdocs/langs/zh_TW/main.lang +++ b/htdocs/langs/zh_TW/main.lang @@ -420,6 +420,8 @@ TotalTTCShort=總計(含稅) TotalHT=總計(不含稅) TotalHTforthispage=此頁總計(不含稅) Totalforthispage=此頁總計 +GrandTotal=Grand total +TotalforAllPages=Total for all pages TotalTTC=金額總計(含稅) TotalTTCToYourCredit=信用總額度(含稅) TotalVAT=總稅金 @@ -647,6 +649,7 @@ ReportName=報表名稱 ReportPeriod=報表期間 ReportDescription=詳細描述 Report=報表 +Reports=Reports Keyword=關鍵字 Origin=原始 Legend=舊有 diff --git a/htdocs/loan/calcmens.php b/htdocs/loan/calcmens.php index 73b222c8274..30a275fbd44 100644 --- a/htdocs/loan/calcmens.php +++ b/htdocs/loan/calcmens.php @@ -40,8 +40,8 @@ require DOL_DOCUMENT_ROOT.'/core/lib/loan.lib.php'; $mens = price2num(GETPOST('mens')); $capital = price2num(GETPOST('capital')); $rate = price2num(GETPOST('rate')); -$echance = GETPOST('echeance', 'int'); -$nbterm = GETPOST('nbterm', 'int'); +$echance = GETPOSTINT('echeance'); +$nbterm = GETPOSTINT('nbterm'); top_httphead(); diff --git a/htdocs/loan/card.php b/htdocs/loan/card.php index 981d805e52b..803717ae085 100644 --- a/htdocs/loan/card.php +++ b/htdocs/loan/card.php @@ -46,15 +46,15 @@ if (isModEnabled('project')) { // Load translation files required by the page $langs->loadLangs(array("bills", "compta", "loan")); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm'); $cancel = GETPOST('cancel', 'alpha'); -$projectid = GETPOST('projectid', 'int'); +$projectid = GETPOSTINT('projectid'); // Security check -$socid = GETPOST('socid', 'int'); +$socid = GETPOSTINT('socid'); if ($user->socid) { $socid = $user->socid; } @@ -104,8 +104,8 @@ if (empty($reshook)) { // Add loan if ($action == 'add' && $user->hasRight('loan', 'write')) { if (!$cancel) { - $datestart = dol_mktime(12, 0, 0, GETPOST('startmonth', 'int'), GETPOST('startday', 'int'), GETPOST('startyear', 'int')); - $dateend = dol_mktime(12, 0, 0, GETPOST('endmonth', 'int'), GETPOST('endday', 'int'), GETPOST('endyear', 'int')); + $datestart = dol_mktime(12, 0, 0, GETPOSTINT('startmonth'), GETPOSTINT('startday'), GETPOSTINT('startyear')); + $dateend = dol_mktime(12, 0, 0, GETPOSTINT('endmonth'), GETPOSTINT('endday'), GETPOSTINT('endyear')); $capital = price2num(GETPOST('capital')); $rate = price2num(GETPOST('rate')); @@ -141,7 +141,7 @@ if (empty($reshook)) { $object->note_private = GETPOST('note_private', 'restricthtml'); $object->note_public = GETPOST('note_public', 'restricthtml'); $object->fk_project = GETPOSTINT('projectid'); - $object->insurance_amount = GETPOST('insurance_amount', 'int'); + $object->insurance_amount = GETPOSTINT('insurance_amount'); $accountancy_account_capital = GETPOST('accountancy_account_capital'); $accountancy_account_insurance = GETPOST('accountancy_account_insurance'); @@ -179,8 +179,8 @@ if (empty($reshook)) { if (!$cancel) { $result = $object->fetch($id); - $datestart = dol_mktime(12, 0, 0, GETPOST('startmonth', 'int'), GETPOST('startday', 'int'), GETPOST('startyear', 'int')); - $dateend = dol_mktime(12, 0, 0, GETPOST('endmonth', 'int'), GETPOST('endday', 'int'), GETPOST('endyear', 'int')); + $datestart = dol_mktime(12, 0, 0, GETPOSTINT('startmonth'), GETPOSTINT('startday'), GETPOSTINT('startyear')); + $dateend = dol_mktime(12, 0, 0, GETPOSTINT('endmonth'), GETPOSTINT('endday'), GETPOSTINT('endyear')); $capital = price2num(GETPOST('capital')); if (!$capital) { @@ -190,9 +190,9 @@ if (empty($reshook)) { $object->datestart = $datestart; $object->dateend = $dateend; $object->capital = $capital; - $object->nbterm = GETPOST("nbterm", 'int'); + $object->nbterm = GETPOSTINT("nbterm"); $object->rate = price2num(GETPOST("rate", 'alpha')); - $object->insurance_amount = price2num(GETPOST('insurance_amount', 'int')); + $object->insurance_amount = price2num(GETPOSTINT('insurance_amount')); $accountancy_account_capital = GETPOST('accountancy_account_capital'); $accountancy_account_insurance = GETPOST('accountancy_account_insurance'); @@ -258,7 +258,7 @@ if (empty($reshook)) { $form = new Form($db); $formproject = new FormProjets($db); -$morehtmlright = ''; +$morehtmlstatus = ''; $outputlangs = $langs; if (isModEnabled('accounting')) { $formaccounting = new FormAccounting($db); @@ -276,7 +276,7 @@ if ($action == 'create') { print load_fiche_titre($langs->trans("NewLoan"), '', 'money-bill-alt'); - $datec = dol_mktime(12, 0, 0, GETPOST('remonth', 'int'), GETPOST('reday', 'int'), GETPOST('reyear', 'int')); + $datec = dol_mktime(12, 0, 0, GETPOSTINT('remonth'), GETPOSTINT('reday'), GETPOSTINT('reyear')); print ''."\n"; print ''; @@ -290,7 +290,7 @@ if ($action == 'create') { print '
'; // Bank account - if (isModEnabled("banque")) { + if (isModEnabled("bank")) { print ''; @@ -306,13 +306,13 @@ if ($action == 'create') { // Date Start print ""; print ''; // Date End print ""; print ''; // Number of terms @@ -474,7 +474,7 @@ if ($id > 0) { $object->totalpaid = $totalpaid; // To give a chance to dol_banner_tab to use already paid amount to show correct status - dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'ref', $morehtmlref, '', 0, '', $morehtmlright); + dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'ref', $morehtmlref, '', 0, '', $morehtmlstatus); print '
'; print '
'; diff --git a/htdocs/loan/class/loan.class.php b/htdocs/loan/class/loan.class.php index 89b7a974854..466dde2cef3 100644 --- a/htdocs/loan/class/loan.class.php +++ b/htdocs/loan/class/loan.class.php @@ -1,6 +1,6 @@ - * Copyright (C) 2015-2023 Frédéric France + * Copyright (C) 2015-2024 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -108,7 +108,7 @@ class Loan extends CommonObject public $fk_project; /** - * @var int totalpaid + * @var float totalpaid */ public $totalpaid; @@ -501,21 +501,23 @@ class Loan extends CommonObject $langs->loadLangs(array("customers", "bills")); unset($this->labelStatus); // Force to reset the array of status label, because label can change depending on parameters - if (empty($this->labelStatus) || empty($this->labelStatusShort)) { - global $langs; - $this->labelStatus[self::STATUS_UNPAID] = $langs->transnoentitiesnoconv('Unpaid'); - $this->labelStatus[self::STATUS_PAID] = $langs->transnoentitiesnoconv('Paid'); - $this->labelStatus[self::STATUS_STARTED] = $langs->transnoentitiesnoconv("BillStatusStarted"); - if ($status == 0 && $alreadypaid > 0) { - $this->labelStatus[self::STATUS_UNPAID] = $langs->transnoentitiesnoconv("BillStatusStarted"); - } - $this->labelStatusShort[self::STATUS_UNPAID] = $langs->transnoentitiesnoconv('Unpaid'); - $this->labelStatusShort[self::STATUS_PAID] = $langs->transnoentitiesnoconv('Paid'); - $this->labelStatusShort[self::STATUS_STARTED] = $langs->transnoentitiesnoconv("BillStatusStarted"); - if ($status == 0 && $alreadypaid > 0) { - $this->labelStatusShort[self::STATUS_UNPAID] = $langs->transnoentitiesnoconv("BillStatusStarted"); - } + // Always true because of 'unset': + // if (empty($this->labelStatus) || empty($this->labelStatusShort)) { + global $langs; + $this->labelStatus = array(); + $this->labelStatus[self::STATUS_UNPAID] = $langs->transnoentitiesnoconv('Unpaid'); + $this->labelStatus[self::STATUS_PAID] = $langs->transnoentitiesnoconv('Paid'); + $this->labelStatus[self::STATUS_STARTED] = $langs->transnoentitiesnoconv("BillStatusStarted"); + if ($status == 0 && $alreadypaid > 0) { + $this->labelStatus[self::STATUS_UNPAID] = $langs->transnoentitiesnoconv("BillStatusStarted"); } + $this->labelStatusShort[self::STATUS_UNPAID] = $langs->transnoentitiesnoconv('Unpaid'); + $this->labelStatusShort[self::STATUS_PAID] = $langs->transnoentitiesnoconv('Paid'); + $this->labelStatusShort[self::STATUS_STARTED] = $langs->transnoentitiesnoconv("BillStatusStarted"); + if ($status == 0 && $alreadypaid > 0) { + $this->labelStatusShort[self::STATUS_UNPAID] = $langs->transnoentitiesnoconv("BillStatusStarted"); + } + // } // End of empty(labelStatus,labelStatusShort) $statusType = 'status1'; if (($status == 0 && $alreadypaid > 0) || $status == self::STATUS_STARTED) { @@ -594,7 +596,7 @@ class Loan extends CommonObject global $action; $hookmanager->initHooks(array($this->element . 'dao')); - $parameters = array('id'=>$this->id, 'getnomurl' => &$result); + $parameters = array('id' => $this->id, 'getnomurl' => &$result); $reshook = $hookmanager->executeHooks('getNomUrl', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks if ($reshook > 0) { $result = $hookmanager->resPrint; @@ -609,7 +611,7 @@ class Loan extends CommonObject * Used to build previews or test instances. * id must be 0 if object instance is a specimen. * - * @return void + * @return int */ public function initAsSpecimen() { @@ -631,6 +633,8 @@ class Loan extends CommonObject $this->capital = 20000; $this->nbterm = 48; $this->rate = 4.3; + + return 1; } /** diff --git a/htdocs/loan/class/loanschedule.class.php b/htdocs/loan/class/loanschedule.class.php index 3a6929dd230..e6caeeb9de2 100644 --- a/htdocs/loan/class/loanschedule.class.php +++ b/htdocs/loan/class/loanschedule.class.php @@ -1,6 +1,6 @@ - * Copyright (C) 2018-2023 Frédéric France + * Copyright (C) 2018-2024 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -47,10 +47,14 @@ class LoanSchedule extends CommonObject public $bank_account; public $bank_line; + + /** + * @var int|string Creation date + */ public $datec; /** - * @var string Payment date + * @var int|string Payment date */ public $datep; @@ -285,11 +289,11 @@ class LoanSchedule extends CommonObject /** * Update database * - * @param User $user User that modify - * @param int $notrigger 0=launch triggers after, 1=disable triggers - * @return int Return integer <0 if KO, >0 if OK + * @param User|null $user User that modify + * @param int $notrigger 0=launch triggers after, 1=disable triggers + * @return int Return integer <0 if KO, >0 if OK */ - public function update($user = 0, $notrigger = 0) + public function update($user = null, $notrigger = 0) { global $conf, $langs; $error = 0; @@ -432,8 +436,6 @@ class LoanSchedule extends CommonObject */ public function fetchAll($loanid) { - global $langs; - $sql = "SELECT"; $sql .= " t.rowid,"; $sql .= " t.fk_loan,"; diff --git a/htdocs/loan/class/paymentloan.class.php b/htdocs/loan/class/paymentloan.class.php index ec0a8dcbe29..6d0c922aad3 100644 --- a/htdocs/loan/class/paymentloan.class.php +++ b/htdocs/loan/class/paymentloan.class.php @@ -1,7 +1,8 @@ - * Copyright (C) 2015-2023 Frederic France + * Copyright (C) 2015-2024 Frédéric France * Copyright (C) 2020 Maxime DEMAREST + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -61,12 +62,24 @@ class PaymentLoan extends CommonObject */ public $datep = ''; - public $amounts = array(); // Array of amounts + /** + * @var array Array of amounts + */ + public $amounts = array(); - public $amount_capital; // Total amount of payment + /** + * @var float|int Total amount of payment + */ + public $amount_capital; + /** + * @var float|int + */ public $amount_insurance; + /** + * @var float|int + */ public $amount_interest; /** @@ -95,11 +108,28 @@ class PaymentLoan extends CommonObject */ public $fk_user_modif; + /** + * @var string + */ public $type_code; + /** + * @var string + */ public $type_label; public $chid; + /** + * @var string + */ public $label; + + /** + * @var int + */ public $paymenttype; + + /** + * @var int + */ public $bank_account; public $bank_line; @@ -140,19 +170,19 @@ class PaymentLoan extends CommonObject $this->fk_loan = (int) $this->fk_loan; } if (isset($this->amount_capital)) { - $this->amount_capital = price2num($this->amount_capital ? $this->amount_capital : 0); + $this->amount_capital = (float) price2num($this->amount_capital ? $this->amount_capital : 0); } if (isset($this->amount_insurance)) { - $this->amount_insurance = price2num($this->amount_insurance ? $this->amount_insurance : 0); + $this->amount_insurance = (float) price2num($this->amount_insurance ? $this->amount_insurance : 0); } if (isset($this->amount_interest)) { - $this->amount_interest = price2num($this->amount_interest ? $this->amount_interest : 0); + $this->amount_interest = (float) price2num($this->amount_interest ? $this->amount_interest : 0); } if (isset($this->fk_typepayment)) { $this->fk_typepayment = (int) $this->fk_typepayment; } if (isset($this->num_payment)) { - $this->num_payment = (int) $this->num_payment; + $this->num_payment = trim($this->num_payment); } if (isset($this->note_private)) { $this->note_private = trim($this->note_private); @@ -171,7 +201,7 @@ class PaymentLoan extends CommonObject } $totalamount = $this->amount_capital + $this->amount_insurance + $this->amount_interest; - $totalamount = price2num($totalamount); + $totalamount = (float) price2num($totalamount); // Check parameters if ($totalamount == 0) { @@ -302,19 +332,19 @@ class PaymentLoan extends CommonObject $this->fk_loan = (int) $this->fk_loan; } if (isset($this->amount_capital)) { - $this->amount_capital = trim($this->amount_capital); + $this->amount_capital = (float) $this->amount_capital; } if (isset($this->amount_insurance)) { - $this->amount_insurance = trim($this->amount_insurance); + $this->amount_insurance = (float) $this->amount_insurance; } if (isset($this->amount_interest)) { - $this->amount_interest = trim($this->amount_interest); + $this->amount_interest = (float) $this->amount_interest; } if (isset($this->fk_typepayment)) { $this->fk_typepayment = (int) $this->fk_typepayment; } if (isset($this->num_payment)) { - $this->num_payment = (int) $this->num_payment; + $this->num_payment = trim($this->num_payment); } if (isset($this->note_private)) { $this->note = trim($this->note_private); @@ -504,7 +534,7 @@ class PaymentLoan extends CommonObject $error = 0; $this->db->begin(); - if (isModEnabled("banque")) { + if (isModEnabled("bank")) { require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; $acc = new Account($this->db); @@ -518,7 +548,7 @@ class PaymentLoan extends CommonObject // Insert payment into llx_bank $bank_line_id = $acc->addline( $this->datep, - $this->paymenttype, // Payment mode ID or code ("CHQ or VIR for example") + $this->paymenttype, // Payment mode ID or code ("CHQ or VIR for example") it's integer in db $label, $total, $this->num_payment, @@ -663,7 +693,7 @@ class PaymentLoan extends CommonObject global $action; $hookmanager->initHooks(array($this->element . 'dao')); - $parameters = array('id'=>$this->id, 'getnomurl' => &$result); + $parameters = array('id' => $this->id, 'getnomurl' => &$result); $reshook = $hookmanager->executeHooks('getNomUrl', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks if ($reshook > 0) { $result = $hookmanager->resPrint; diff --git a/htdocs/loan/document.php b/htdocs/loan/document.php index 56bf59b10cc..74b96bf0877 100644 --- a/htdocs/loan/document.php +++ b/htdocs/loan/document.php @@ -1,6 +1,7 @@ * Copyright (C) 2017 Ferran Marcet + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -36,7 +37,7 @@ if (isModEnabled('project')) { // Load translation files required by the page $langs->loadLangs(array("other", "companies", "compta", "bills", "loan")); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm', 'alpha'); @@ -47,10 +48,10 @@ if ($user->socid) { $result = restrictedArea($user, 'loan', $id, '', ''); // Get parameters -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } @@ -140,7 +141,8 @@ if ($object->id) { $object->totalpaid = $totalpaid; // To give a chance to dol_banner_tab to use already paid amount to show correct status - dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'ref', $morehtmlref, '', 0, '', $morehtmlright); + $morehtmlstatus = $morehtmlright; + dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'ref', $morehtmlref, '', 0, '', $morehtmlstatus); print '
'; print '
'; diff --git a/htdocs/loan/info.php b/htdocs/loan/info.php index 5017ef4ce3f..b437a73b845 100644 --- a/htdocs/loan/info.php +++ b/htdocs/loan/info.php @@ -1,6 +1,7 @@ * Copyright (C) 2017 Ferran Marcet + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -34,11 +35,11 @@ if (isModEnabled('project')) { // Load translation files required by the page $langs->loadLangs(array("compta", "bills", "loan")); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $action = GETPOST('action', 'aZ09'); // Security check -$socid = GETPOST('socid', 'int'); +$socid = GETPOSTINT('socid'); if ($user->socid) { $socid = $user->socid; } @@ -102,7 +103,8 @@ $morehtmlref .= '
'; $linkback = ''.$langs->trans("BackToList").''; -dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'ref', $morehtmlref, '', 0, '', $morehtmlright); +$morehtmlstatus = $morehtmlright; +dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'ref', $morehtmlref, '', 0, '', $morehtmlstatus); print '
'; print '
'; diff --git a/htdocs/loan/list.php b/htdocs/loan/list.php index d7487780413..013c41e3cce 100644 --- a/htdocs/loan/list.php +++ b/htdocs/loan/list.php @@ -34,7 +34,7 @@ $langs->loadLangs(array("banks", "bills", "compta", "loan")); // Get parameters $action = GETPOST('action', 'aZ09') ? GETPOST('action', 'aZ09') : 'view'; // The action 'create'/'add', 'edit'/'update', 'view', ... $massaction = GETPOST('massaction', 'alpha'); // The bulk action (combo box choice into lists) -$show_files = GETPOST('show_files', 'int'); // Show files area generated by bulk actions ? +$show_files = GETPOSTINT('show_files'); // Show files area generated by bulk actions ? $confirm = GETPOST('confirm', 'alpha'); // Result of a confirmation $cancel = GETPOST('cancel', 'alpha'); // We click on a Cancel button $toselect = GETPOST('toselect', 'array'); // Array of ids of elements selected into a list @@ -43,10 +43,10 @@ $backtopage = GETPOST('backtopage', 'alpha'); // Go back to a dedicated page $optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print') $mode = GETPOST('mode', 'aZ'); // The output mode ('list', 'kanban', 'hierarchy', 'calendar', ...) -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // If $page is not defined, or '' or -1 or if we click on clear filters $page = 0; @@ -84,7 +84,7 @@ foreach ($object->fields as $key => $val) { $arrayfields['t.'.$key] = array( 'label'=>$val['label'], 'checked'=>(($visible < 0) ? 0 : 1), - 'enabled'=>(abs($visible) != 3 && dol_eval($val['enabled'], 1)), + 'enabled'=>(abs($visible) != 3 && (int) dol_eval($val['enabled'], 1)), 'position'=>$val['position'], 'help'=> isset($val['help']) ? $val['help'] : '' ); @@ -97,14 +97,14 @@ $object->fields = dol_sort_array($object->fields, 'position'); //$arrayfields['anotherfield'] = array('type'=>'integer', 'label'=>'AnotherField', 'checked'=>1, 'enabled'=>1, 'position'=>90, 'csslist'=>'right'); $arrayfields = dol_sort_array($arrayfields, 'position'); -$search_ref = GETPOST('search_ref', 'int'); +$search_ref = GETPOST('search_ref', 'alpha'); $search_label = GETPOST('search_label', 'alpha'); $search_amount = GETPOST('search_amount', 'alpha'); $permissiontoadd = $user->hasRight('loan', 'write'); // Security check -$socid = GETPOST('socid', 'int'); +$socid = GETPOSTINT('socid'); if ($user->socid) { $socid = $user->socid; } @@ -260,7 +260,7 @@ $arrayofmassactions = array(); if (!empty($permissiontodelete)) { $arrayofmassactions['predelete'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete"); } -if (GETPOST('nomassaction', 'int') || in_array($massaction, array('presend', 'predelete'))) { +if (GETPOSTINT('nomassaction') || in_array($massaction, array('presend', 'predelete'))) { $arrayofmassactions = array(); } $massactionbutton = $form->selectMassAction('', $arrayofmassactions); @@ -320,7 +320,7 @@ if (!empty($moreforfilter)) { } $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; -$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')) : ''); // This also change content of $arrayfields +$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) : ''); // This also change content of $arrayfields $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); print '
'; // You can use div-table-responsive-no-min if you don't need reserved height for your table diff --git a/htdocs/loan/note.php b/htdocs/loan/note.php index ff5938a63c7..62d84a1adbc 100644 --- a/htdocs/loan/note.php +++ b/htdocs/loan/note.php @@ -6,6 +6,7 @@ * Copyright (C) 2015 Frederic France * Copyright (C) 2016-2023 Alexandre Spangaro * Copyright (C) 2017 Ferran Marcet + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -41,7 +42,7 @@ $action = GETPOST('action', 'aZ09'); $langs->loadLangs(array("loan")); // Security check -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $hookmanager->initHooks(array('loannote')); $result = restrictedArea($user, 'loan', $id, '&loan'); @@ -129,7 +130,8 @@ if ($id > 0) { $object->totalpaid = $totalpaid; // To give a chance to dol_banner_tab to use already paid amount to show correct status - dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'ref', $morehtmlref, '', 0, '', $morehtmlright); + $morehtmlstatus = $morehtmlright; + dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'ref', $morehtmlref, '', 0, '', $morehtmlstatus); print '
'; print '
'; diff --git a/htdocs/loan/payment/card.php b/htdocs/loan/payment/card.php index da6159fb493..31b71d49a3d 100644 --- a/htdocs/loan/payment/card.php +++ b/htdocs/loan/payment/card.php @@ -25,7 +25,7 @@ require '../../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/loan/class/loan.class.php'; require_once DOL_DOCUMENT_ROOT.'/loan/class/paymentloan.class.php'; -if (isModEnabled("banque")) { +if (isModEnabled("bank")) { require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; } @@ -33,7 +33,7 @@ if (isModEnabled("banque")) { $langs->loadLangs(array("bills", "banks", "companies", "loan")); // Security check -$id = GETPOST("id", 'int'); +$id = GETPOSTINT("id"); $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm'); if ($user->socid) { @@ -67,7 +67,7 @@ if ($action == 'confirm_delete' && $confirm == 'yes' && $user->hasRight('loan', $result = $payment->delete($user); if ($result > 0) { $db->commit(); - header("Location: ".DOL_URL_ROOT."/loan/card.php?id=".urlencode($fk_loan)); + header("Location: ".DOL_URL_ROOT."/loan/card.php?id=".urlencode((string) ($fk_loan))); exit; } else { setEventMessages($payment->error, $payment->errors, 'errors'); @@ -103,9 +103,9 @@ if ($action == 'delete') { $linkback = ''; $morehtmlref = ''; -$morehtmlright = ''; +$morehtmlstatus = ''; -dol_banner_tab($payment, 'id', $linkback, 1, 'rowid', 'ref', $morehtmlref, '', 0, '', $morehtmlright); +dol_banner_tab($payment, 'id', $linkback, 1, 'rowid', 'ref', $morehtmlref, '', 0, '', $morehtmlstatus); print '
'; print '
'; @@ -130,7 +130,7 @@ print '
'; // Bank account -if (isModEnabled("banque")) { +if (isModEnabled("bank")) { if ($payment->bank_account) { $bankline = new AccountLine($db); $bankline->fetch($payment->bank_line); diff --git a/htdocs/loan/payment/payment.php b/htdocs/loan/payment/payment.php index b2d22fbd1b7..ece271b9135 100644 --- a/htdocs/loan/payment/payment.php +++ b/htdocs/loan/payment/payment.php @@ -33,17 +33,17 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/loan.lib.php'; $langs->loadLangs(array("bills", "loan")); -$chid = GETPOST('id', 'int'); +$chid = GETPOSTINT('id'); $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'alpha'); -$datepaid = dol_mktime(12, 0, 0, GETPOST('remonth', 'int'), GETPOST('reday', 'int'), GETPOST('reyear', 'int')); +$datepaid = dol_mktime(12, 0, 0, GETPOSTINT('remonth'), GETPOSTINT('reday'), GETPOSTINT('reyear')); // Security check $socid = 0; if ($user->socid > 0) { $socid = $user->socid; } elseif (GETPOSTISSET('socid')) { - $socid = GETPOST('socid', 'int'); + $socid = GETPOSTINT('socid'); } if (!$user->hasRight('loan', 'write')) { accessforbidden(); @@ -98,7 +98,7 @@ if ($action == 'add_payment') { exit; } - if (!GETPOST('paymenttype', 'int') > 0) { + if (!GETPOSTINT('paymenttype') > 0) { setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("PaymentMode")), null, 'errors'); $error++; } @@ -106,7 +106,7 @@ if ($action == 'add_payment') { setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Date")), null, 'errors'); $error++; } - if (isModEnabled("banque") && !GETPOST('accountid', 'int') > 0) { + if (isModEnabled("bank") && !GETPOSTINT('accountid') > 0) { setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("AccountToCredit")), null, 'errors'); $error++; } @@ -114,16 +114,16 @@ if ($action == 'add_payment') { if (!$error) { $paymentid = 0; - $pay_amount_capital = price2num(GETPOST('amount_capital')); - $pay_amount_insurance = price2num(GETPOST('amount_insurance')); + $pay_amount_capital = (float) price2num(GETPOST('amount_capital')); + $pay_amount_insurance = (float) price2num(GETPOST('amount_insurance')); // User can't set interest him self if schedule is set (else value in schedule can be incoherent) if (!empty($line)) { $pay_amount_interest = $line->amount_interest; } else { - $pay_amount_interest = price2num(GETPOST('amount_interest')); + $pay_amount_interest = (float) price2num(GETPOST('amount_interest')); } - $remaindertopay = price2num(GETPOST('remaindertopay')); - $amount = $pay_amount_capital + $pay_amount_insurance + $pay_amount_interest; + $remaindertopay = (float) price2num(GETPOST('remaindertopay')); + $amount = (float) price2num($pay_amount_capital + $pay_amount_insurance + $pay_amount_interest, 'MT'); // This term is already paid if (!empty($line) && !empty($line->fk_bank)) { @@ -153,7 +153,7 @@ if ($action == 'add_payment') { $payment->amount_insurance = $pay_amount_insurance; $payment->amount_interest = $pay_amount_interest; $payment->fk_bank = GETPOSTINT('accountid'); - $payment->paymenttype = GETPOST('paymenttype', 'int'); + $payment->paymenttype = GETPOSTINT('paymenttype'); $payment->num_payment = GETPOST('num_payment', 'alphanohtml'); $payment->note_private = GETPOST('note_private', 'restricthtml'); $payment->note_public = GETPOST('note_public', 'restricthtml'); @@ -167,6 +167,7 @@ if ($action == 'add_payment') { } if (!$error) { + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder $result = $payment->addPaymentToBank($user, $chid, 'payment_loan', '(LoanPayment)', $payment->fk_bank, '', ''); if (!($result > 0)) { setEventMessages($payment->error, $payment->errors, 'errors'); @@ -288,7 +289,7 @@ if ($action == 'create') { } else { $datepayment = $datepaid; } - print $form->selectDate($datepayment, '', '', '', '', "add_payment", 1, 1); + print $form->selectDate($datepayment, '', 0, 0, 0, "add_payment", 1, 1); print ""; print ''; @@ -302,7 +303,7 @@ if ($action == 'create') { print ''; print ''; // Number diff --git a/htdocs/loan/schedule.php b/htdocs/loan/schedule.php index e4a9424c21c..ae61486bcfe 100644 --- a/htdocs/loan/schedule.php +++ b/htdocs/loan/schedule.php @@ -31,13 +31,13 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; require_once DOL_DOCUMENT_ROOT.'/loan/class/loanschedule.class.php'; require_once DOL_DOCUMENT_ROOT.'/loan/class/paymentloan.class.php'; -$loanid = GETPOST('loanid', 'int'); +$loanid = GETPOSTINT('loanid'); $action = GETPOST('action', 'aZ09'); // Security check $socid = 0; if (GETPOSTISSET('socid')) { - $socid = GETPOST('socid', 'int'); + $socid = GETPOSTINT('socid'); } if ($user->socid) { $socid = $user->socid; @@ -69,7 +69,7 @@ if ($action == 'createecheancier' && empty($pay_without_schedule)) { $db->begin(); $i = 1; while ($i < $object->nbterm + 1) { - $date = GETPOST('hi_date'.$i, 'int'); + $date = GETPOSTINT('hi_date'.$i); $mens = price2num(GETPOST('mens'.$i)); $int = price2num(GETPOST('hi_interets'.$i)); $insurance = price2num(GETPOST('hi_insurance'.$i)); @@ -185,9 +185,9 @@ if (isModEnabled('project')) { } $morehtmlref .= ''; -$morehtmlright = ''; +$morehtmlstatus = ''; -dol_banner_tab($object, 'loanid', $linkback, 1, 'rowid', 'ref', $morehtmlref, '', 0, '', $morehtmlright); +dol_banner_tab($object, 'loanid', $linkback, 1, 'rowid', 'ref', $morehtmlref, '', 0, '', $morehtmlstatus); ?> "; @@ -807,7 +807,7 @@ if ($id > 0 || $ref) { print ''; print ''; print ''; } @@ -835,7 +835,7 @@ if ($id > 0 || $ref) { if (!empty($extralabels)) { if (empty($rowid)) { foreach ($extralabels as $key => $value) { - if (!empty($extrafields->attributes["product_fournisseur_price"]['list'][$key]) && ($extrafields->attributes["product_fournisseur_price"]['list'][$key] == 1 || $extrafields->attributes["product_fournisseur_price"]['list'][$key] == 3 || ($action == "update_price" && $extrafields->attributes["product_fournisseur_price"]['list'][$key] == 4))) { + if (!empty($extrafields->attributes["product_fournisseur_price"]['list'][$key]) && ($extrafields->attributes["product_fournisseur_price"]['list'][$key] == 1 || $extrafields->attributes["product_fournisseur_price"]['list'][$key] == 3 || ($action == "edit_price" && $extrafields->attributes["product_fournisseur_price"]['list'][$key] == 4))) { if (!empty($extrafields->attributes["product_fournisseur_price"]['langfile'][$key])) { $langs->load($extrafields->attributes["product_fournisseur_price"]['langfile'][$key]); } @@ -861,7 +861,7 @@ if ($id > 0 || $ref) { if ($resql) { $obj = $db->fetch_object($resql); foreach ($extralabels as $key => $value) { - if (!empty($extrafields->attributes["product_fournisseur_price"]['list'][$key]) && ($extrafields->attributes["product_fournisseur_price"]['list'][$key] == 1 || $extrafields->attributes["product_fournisseur_price"]['list'][$key] == 3 || ($action == "update_price" && $extrafields->attributes["product_fournisseur_price"]['list'][$key] == 4))) { + if (!empty($extrafields->attributes["product_fournisseur_price"]['list'][$key]) && ($extrafields->attributes["product_fournisseur_price"]['list'][$key] == 1 || $extrafields->attributes["product_fournisseur_price"]['list'][$key] == 3 || ($action == "edit_price" && $extrafields->attributes["product_fournisseur_price"]['list'][$key] == 4))) { if (!empty($extrafields->attributes["product_fournisseur_price"]['langfile'][$key])) { $langs->load($extrafields->attributes["product_fournisseur_price"]['langfile'][$key]); } @@ -906,7 +906,7 @@ if ($id > 0 || $ref) { print '
'."\n"; - if ($action != 'create_price' && $action != 'update_price') { + if ($action != 'create_price' && $action != 'edit_price') { $parameters = array(); $reshook = $hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been modified by hook if (empty($reshook)) { @@ -1291,7 +1291,7 @@ if ($id > 0 || $ref) { print '
'; } -print ''; +if ($object->status == $object::STATUS_DRAFT || $object->status == $object::STATUS_VALIDATED) { + // Expected quantity = If inventory is open: Quantity currently in stock (may change if stock movement are done during the inventory) + print ''; +} else { + // Expected quantity = If inventory is closed: Quantity we had in stock when we start the inventory. + print ''; +} if (getDolGlobalString('INVENTORY_MANAGE_REAL_PMP')) { print ''; print ''; @@ -954,10 +964,10 @@ print ''; if ($object->status == $object::STATUS_DRAFT || $object->status == $object::STATUS_VALIDATED) { print ''; print ''; print ''; if (isModEnabled('productbatch')) { print ''; } - // Expected quantity = Quantity in stock when we start inventory + // Expected quantity = If inventory is open: Quantity currently in stock (may change if stock movement are done during the inventory) + // Expected quantity = If inventory is closed: Quantity we had in stock when we start the inventory. print ''; } @@ -1217,7 +1219,7 @@ if (!empty($arrayfields[$alias_product_perentity . '.accountancy_code_buy_export // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php'; // Fields from hook -$parameters = array('arrayfields'=>$arrayfields); +$parameters = array('arrayfields' => $arrayfields); $reshook = $hookmanager->executeHooks('printFieldListOption', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; // Date creation @@ -1236,12 +1238,12 @@ if (!empty($arrayfields['p.import_key']['checked'])) { } if (!empty($arrayfields['p.tosell']['checked'])) { print ''; } if (!empty($arrayfields['p.tobuy']['checked'])) { print ''; } // Action column @@ -1454,7 +1456,7 @@ if (!empty($arrayfields[$alias_product_perentity . '.accountancy_code_buy_export // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; // Hook fields -$parameters = array('arrayfields'=>$arrayfields, 'param'=>$param, 'sortfield'=>$sortfield, 'sortorder'=>$sortorder, 'totalarray'=>&$totalarray); +$parameters = array('arrayfields' => $arrayfields, 'param' => $param, 'sortfield' => $sortfield, 'sortorder' => $sortorder, 'totalarray' => &$totalarray); $reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; if (!empty($arrayfields['p.datec']['checked'])) { @@ -1716,9 +1718,9 @@ while ($i < $imaxinloop) { $duration_unit = substr($obj->duration, -1); if ((float) $duration_value > 1) { - $dur = array("i"=>$langs->trans("Minutes"), "h"=>$langs->trans("Hours"), "d"=>$langs->trans("Days"), "w"=>$langs->trans("Weeks"), "m"=>$langs->trans("Months"), "y"=>$langs->trans("Years")); + $dur = array("i" => $langs->trans("Minutes"), "h" => $langs->trans("Hours"), "d" => $langs->trans("Days"), "w" => $langs->trans("Weeks"), "m" => $langs->trans("Months"), "y" => $langs->trans("Years")); } elseif ((float) $duration_value > 0) { - $dur = array("i"=>$langs->trans("Minute"), "h"=>$langs->trans("Hour"), "d"=>$langs->trans("Day"), "w"=>$langs->trans("Week"), "m"=>$langs->trans("Month"), "y"=>$langs->trans("Year")); + $dur = array("i" => $langs->trans("Minute"), "h" => $langs->trans("Hour"), "d" => $langs->trans("Day"), "w" => $langs->trans("Week"), "m" => $langs->trans("Month"), "y" => $langs->trans("Year")); } print $duration_value; print((!empty($duration_unit) && isset($dur[$duration_unit]) && $duration_value != '') ? ' '.$langs->trans($dur[$duration_unit]) : ''); @@ -1738,7 +1740,7 @@ while ($i < $imaxinloop) { if (!empty($conf->cache['product'][$obj->fk_product_parent])) { $product_parent_static = $conf->cache['product'][$obj->fk_product_parent]; } else { - $product_parent_static= new Product($db); + $product_parent_static = new Product($db); $product_parent_static->fetch($obj->fk_product_parent); $conf->cache['product'][$obj->fk_product_parent] = $product_parent_static; } @@ -1925,7 +1927,7 @@ while ($i < $imaxinloop) { // Multiprices if (getDolGlobalString('PRODUIT_MULTIPRICES')) { if (! isset($productpricescache)) { - $productpricescache=array(); + $productpricescache = array(); } if (! isset($productpricescache[$obj->rowid])) { $productpricescache[$obj->rowid] = array(); @@ -2173,7 +2175,7 @@ while ($i < $imaxinloop) { // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php'; // Fields from hook - $parameters = array('arrayfields'=>$arrayfields, 'obj'=>$obj, 'i'=>$i, 'totalarray'=>&$totalarray); + $parameters = array('arrayfields' => $arrayfields, 'obj' => $obj, 'i' => $i, 'totalarray' => &$totalarray); $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; // Date creation diff --git a/htdocs/product/note.php b/htdocs/product/note.php index ad397349125..c8348552835 100644 --- a/htdocs/product/note.php +++ b/htdocs/product/note.php @@ -34,7 +34,7 @@ require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php'; // Load translation files required by the page $langs->load("companies"); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); diff --git a/htdocs/product/popuprop.php b/htdocs/product/popuprop.php index 0c54b88c7d0..0af9c8052ae 100644 --- a/htdocs/product/popuprop.php +++ b/htdocs/product/popuprop.php @@ -5,6 +5,7 @@ * Copyright (C) 2005-2012 Regis Houssin * Copyright (C) 2014 Marcos García * Copyright (C) 2015 Jean-François Ferry + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -36,7 +37,7 @@ $langs->loadLangs(array('commande', 'propal', 'bills', 'other', 'products')); $backtopage = GETPOST('backtopage', 'alpha'); $backtopageforcancel = GETPOST('backtopageforcancel', 'alpha'); -$type = GETPOST("type", "int"); +$type = GETPOSTINT("type"); $mode = GETPOST('mode', 'alpha') ? GETPOST('mode', 'alpha') : ''; // Security check @@ -44,10 +45,10 @@ if (!empty($user->socid)) { $socid = $user->socid; } -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -74,8 +75,6 @@ $tmpproduct = new Product($db); $helpurl = ''; if ($type == '0') { $helpurl = 'EN:Module_Products|FR:Module_Produits|ES:Módulo_Productos'; -} elseif ($type == '1') { - $helpurl = 'EN:Module_Services_En|FR:Module_Services|ES:Módulo_Servicios'; } else { $helpurl = 'EN:Module_Services_En|FR:Module_Services|ES:Módulo_Servicios'; } @@ -171,7 +170,7 @@ if (!empty($mode) && $mode != '-1') { while ($i < $num) { $objp = $db->fetch_object($resql); - $infoprod[$objp->rowid] = array('type'=>$objp->type, 'ref'=>$objp->ref, 'label'=>$objp->label, 'tobuy'=>$objp->tobuy, 'tosell'=>$objp->tobuy, 'tobatch'=>$objp->tobatch, 'barcode'=>$objp->barcode); + $infoprod[$objp->rowid] = array('type' => $objp->type, 'ref' => $objp->ref, 'label' => $objp->label, 'tobuy' => $objp->tobuy, 'tosell' => $objp->tobuy, 'tobatch' => $objp->tobatch, 'barcode' => $objp->barcode); $infoprod[$objp->rowid]['nbline'] = $objp->c; $i++; @@ -261,7 +260,6 @@ if ($mode && $mode != '-1') { print ''; print ''; print "\n"; - $i++; } } else { print ''; diff --git a/htdocs/product/price.php b/htdocs/product/price.php index a2abdf524a3..0ece26ed6d8 100644 --- a/htdocs/product/price.php +++ b/htdocs/product/price.php @@ -54,11 +54,11 @@ $langs->loadLangs(array('products', 'bills', 'companies', 'other')); $error = 0; $errors = array(); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'alpha'); -$eid = GETPOST('eid', 'int'); +$eid = GETPOSTINT('eid'); $search_soc = GETPOST('search_soc'); @@ -102,7 +102,7 @@ if ($cancel) { $action = ''; } -$parameters = array('id'=>$id, 'ref'=>$ref); +$parameters = array('id' => $id, 'ref' => $ref); $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); @@ -123,6 +123,8 @@ if (empty($reshook)) { if (($action == 'update_vat') && !$cancel && ($user->hasRight('produit', 'creer') || $user->hasRight('service', 'creer'))) { $tva_tx_txt = GETPOST('tva_tx', 'alpha'); // tva_tx can be '8.5' or '8.5*' or '8.5 (XXX)' or '8.5* (XXX)' + $price_label = GETPOST('price_label', 'alpha'); + // We must define tva_tx, npr and local taxes $tva_tx = $tva_tx_txt; $reg = array(); @@ -190,6 +192,7 @@ if (empty($reshook)) { $object->localtax2_tx = $localtax2; $object->localtax1_type = $localtax1_type; $object->localtax2_type = $localtax2_type; + $object->price_label = $price_label; $db->begin(); @@ -216,7 +219,7 @@ if (empty($reshook)) { //$localtaxarray=array('0'=>$localtax1_type,'1'=>$localtax1,'2'=>$localtax2_type,'3'=>$localtax2); $localtaxarray = array(); // We do not store localtaxes into product, we will use instead the "vat code" to retrieve them. $level = $i; - $ret = $object->updatePrice($oldprice, $oldpricebasetype, $user, $tva_tx, $oldminprice, $level, $oldnpr, 0, 0, $localtaxarray, $vatratecode); + $ret = $object->updatePrice($oldprice, $oldpricebasetype, $user, $tva_tx, $oldminprice, $level, $oldnpr, 0, 0, $localtaxarray, $vatratecode, $price_label); if ($ret < 0) { $error++; @@ -238,7 +241,7 @@ if (empty($reshook)) { //$localtaxarray=array('0'=>$localtax1_type,'1'=>$localtax1,'2'=>$localtax2_type,'3'=>$localtax2); $localtaxarray = array(); // We do not store localtaxes into product, we will use instead the "vat code" to retrieve them when required. $level = 0; - $ret = $object->updatePrice($oldprice, $oldpricebasetype, $user, $tva_tx, $oldminprice, $level, $oldnpr, 0, 0, $localtaxarray, $vatratecode); + $ret = $object->updatePrice($oldprice, $oldpricebasetype, $user, $tva_tx, $oldminprice, $level, $oldnpr, 0, 0, $localtaxarray, $vatratecode, $price_label); if ($ret < 0) { $error++; @@ -292,7 +295,7 @@ if (empty($reshook)) { $newlocaltax2_type = GETPOST('localtax2_type', 'array'); //Shall we generate prices using price rules? - $object->price_autogen = GETPOST('usePriceRules') == 'on'; + $object->price_autogen = (int) (GETPOST('usePriceRules') == 'on'); for ($i = 1; $i <= $conf->global->PRODUIT_MULTIPRICES_LIMIT; $i++) { if (!isset($newprice[$i])) { @@ -369,7 +372,7 @@ if (empty($reshook)) { 'default_vat_code' => $vatratecode, 'vat_tx' => $tva_tx, // default_vat_code should be used in priority in a future 'npr' => $npr, // default_vat_code should be used in priority in a future - 'localtaxes_array' => array('0'=>$localtax1_type, '1'=>$localtax1, '2'=>$localtax2_type, '3'=>$localtax2) // default_vat_code should be used in priority in a future + 'localtaxes_array' => array('0' => $localtax1_type, '1' => $localtax1, '2' => $localtax2_type, '3' => $localtax2) // default_vat_code should be used in priority in a future ); //If autogeneration is enabled, then we only set the first level @@ -382,6 +385,7 @@ if (empty($reshook)) { $newprice_min = price2num(GETPOST('price_min', 'alpha'), '', 2); $newpricebase = GETPOST('price_base_type', 'alpha'); $tva_tx_txt = GETPOST('tva_tx', 'alpha'); // tva_tx can be '8.5' or '8.5*' or '8.5 (XXX)' or '8.5* (XXX)' + $price_label = GETPOST('price_label', 'alpha'); $tva_tx = $tva_tx_txt; $vatratecode = ''; @@ -447,12 +451,13 @@ if (empty($reshook)) { $pricestoupdate[0] = array( 'price' => $newprice, + 'price_label' => $price_label, 'price_min' => $newprice_min, 'price_base_type' => $newpricebase, 'default_vat_code' => $vatratecode, 'vat_tx' => $tva_tx, // default_vat_code should be used in priority in a future 'npr' => $npr, // default_vat_code should be used in priority in a future - 'localtaxes_array' => array('0'=>$localtax1_type, '1'=>$localtax1, '2'=>$localtax2_type, '3'=>$localtax2) // default_vat_code should be used in priority in a future + 'localtaxes_array' => array('0' => $localtax1_type, '1' => $localtax1, '2' => $localtax2_type, '3' => $localtax2) // default_vat_code should be used in priority in a future ); } @@ -478,7 +483,7 @@ if (empty($reshook)) { // If price has changed, we update it if (!array_key_exists($key, $object->multiprices) || $object->multiprices[$key] != $newprice || $object->multiprices_min[$key] != $newprice_min || $object->multiprices_base_type[$key] != $val['price_base_type'] || $object->multiprices_tva_tx[$key] != $newvattx) { - $res = $object->updatePrice($newprice, $val['price_base_type'], $user, $val['vat_tx'], $newprice_min, $key, $val['npr'], $psq, 0, $val['localtaxes_array'], $val['default_vat_code']); + $res = $object->updatePrice($newprice, $val['price_base_type'], $user, $val['vat_tx'], $newprice_min, $key, $val['npr'], $psq, 0, $val['localtaxes_array'], $val['default_vat_code'], $val['price_label']); } else { $res = 0; } @@ -508,7 +513,7 @@ if (empty($reshook)) { if ($action == 'delete' && $user->hasRight('produit', 'supprimer')) { - $result = $object->log_price_delete($user, GETPOST('lineid', 'int')); + $result = $object->log_price_delete($user, GETPOSTINT('lineid')); if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); } @@ -517,7 +522,7 @@ if (empty($reshook)) { // Set Price by quantity if ($action == 'activate_price_by_qty') { // Activating product price by quantity add a new price line with price_by_qty set to 1 - $level = GETPOST('level', 'int'); + $level = GETPOSTINT('level'); $ret = $object->updatePrice(0, $object->price_base_type, $user, $object->tva_tx, 0, $level, $object->tva_npr, 1); if ($ret < 0) { @@ -527,7 +532,7 @@ if (empty($reshook)) { // Unset Price by quantity if ($action == 'disable_price_by_qty') { // Disabling product price by quantity add a new price line with price_by_qty set to 0 - $level = GETPOST('level', 'int'); + $level = GETPOSTINT('level'); $ret = $object->updatePrice(0, $object->price_base_type, $user, $object->tva_tx, 0, $level, $object->tva_npr, 0); if ($ret < 0) { @@ -536,14 +541,14 @@ if (empty($reshook)) { } if ($action == 'edit_price_by_qty') { // Edition d'un prix par quantité - $rowid = GETPOST('rowid', 'int'); + $rowid = GETPOSTINT('rowid'); } // Add or update price by quantity if ($action == 'update_price_by_qty') { // Récupération des variables - $rowid = GETPOST('rowid', 'int'); - $priceid = GETPOST('priceid', 'int'); + $rowid = GETPOSTINT('rowid'); + $priceid = GETPOSTINT('priceid'); $newprice = price2num(GETPOST("price"), 'MU', 2); // $newminprice=price2num(GETPOST("price_min"),'MU'); // TODO : Add min price management $quantity = price2num(GETPOST('quantity'), 'MS', 2); @@ -598,7 +603,7 @@ if (empty($reshook)) { } if ($action == 'delete_price_by_qty') { - $rowid = GETPOST('rowid', 'int'); + $rowid = GETPOSTINT('rowid'); if (!empty($rowid)) { $sql = "DELETE FROM ".MAIN_DB_PREFIX."product_price_by_qty"; $sql .= " WHERE rowid = ".((int) $rowid); @@ -610,7 +615,7 @@ if (empty($reshook)) { } if ($action == 'delete_all_price_by_qty') { - $priceid = GETPOST('priceid', 'int'); + $priceid = GETPOSTINT('priceid'); if (!empty($rowid)) { $sql = "DELETE FROM ".MAIN_DB_PREFIX."product_price_by_qty"; $sql .= " WHERE fk_product_price = ".((int) $priceid); @@ -629,15 +634,16 @@ if (empty($reshook)) { if ($action == 'add_customer_price_confirm' && !$cancel && ($user->hasRight('produit', 'creer') || $user->hasRight('service', 'creer'))) { $maxpricesupplier = $object->min_recommended_price(); - $update_child_soc = GETPOST('updatechildprice', 'int'); + $update_child_soc = GETPOSTINT('updatechildprice'); // add price by customer - $prodcustprice->fk_soc = GETPOST('socid', 'int'); + $prodcustprice->fk_soc = GETPOSTINT('socid'); $prodcustprice->ref_customer = GETPOST('ref_customer', 'alpha'); $prodcustprice->fk_product = $object->id; $prodcustprice->price = price2num(GETPOST("price"), 'MU'); $prodcustprice->price_min = price2num(GETPOST("price_min"), 'MU'); $prodcustprice->price_base_type = GETPOST("price_base_type", 'alpha'); + $prodcustprice->price_label = GETPOST("price_label", 'alpha'); $tva_tx_txt = GETPOST("tva_tx", 'alpha'); @@ -738,7 +744,7 @@ if (empty($reshook)) { if ($action == 'delete_customer_price' && ($user->hasRight('produit', 'supprimer') || $user->hasRight('service', 'supprimer'))) { // Delete price by customer - $prodcustprice->id = GETPOST('lineid', 'int'); + $prodcustprice->id = GETPOSTINT('lineid'); $result = $prodcustprice->delete($user); if ($result < 0) { @@ -752,15 +758,16 @@ if (empty($reshook)) { if ($action == 'update_customer_price_confirm' && !$cancel && ($user->hasRight('produit', 'creer') || $user->hasRight('service', 'creer'))) { $maxpricesupplier = $object->min_recommended_price(); - $update_child_soc = GETPOST('updatechildprice', 'int'); + $update_child_soc = GETPOSTINT('updatechildprice'); - $prodcustprice->fetch(GETPOST('lineid', 'int')); + $prodcustprice->fetch(GETPOSTINT('lineid')); // update price by customer $prodcustprice->ref_customer = GETPOST('ref_customer', 'alpha'); $prodcustprice->price = price2num(GETPOST("price"), 'MU'); $prodcustprice->price_min = price2num(GETPOST("price_min"), 'MU'); $prodcustprice->price_base_type = GETPOST("price_base_type", 'alpha'); + $prodcustprice->price_label = GETPOST("price_label", 'alpha'); $tva_tx_txt = GETPOST("tva_tx"); @@ -1234,7 +1241,11 @@ if (getDolGlobalString('PRODUIT_MULTIPRICES') || getDolGlobalString('PRODUIT_CUS print ' - ' . price($object->price_min_ttc).' '.$langs->trans('TTC') . ''; } } + print ''; + // Price Label + print ''; // Price by quantity @@ -1521,6 +1532,14 @@ if ($action == 'edit_price' && $object->getRights()->creer) { print ''; print ''; + // Price Label + print ''; + print ''; + $parameters = array(); $reshook = $hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook @@ -1661,6 +1680,7 @@ if ((!getDolGlobalString('PRODUIT_CUSTOMER_PRICES') || $action == 'showlog_defau $sql = "SELECT p.rowid, p.price, p.price_ttc, p.price_base_type, p.tva_tx, p.default_vat_code, p.recuperableonly, p.localtax1_tx, p.localtax1_type, p.localtax2_tx, p.localtax2_type,"; $sql .= " p.price_level, p.price_min, p.price_min_ttc,p.price_by_qty,"; $sql .= " p.date_price as dp, p.fk_price_expression, u.rowid as user_id, u.login"; + $sql .= " ,p.price_label"; $sql .= " FROM ".MAIN_DB_PREFIX."product_price as p,"; $sql .= " ".MAIN_DB_PREFIX."user as u"; $sql .= " WHERE fk_product = ".((int) $object->id); @@ -1705,8 +1725,10 @@ if ((!getDolGlobalString('PRODUIT_CUSTOMER_PRICES') || $action == 'showlog_defau $backbutton = ''.$langs->trans("Back").''; if (getDolGlobalString('PRODUIT_CUSTOMER_PRICES')) { + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition, PhanPluginSuspiciousParamOrder print_barre_liste($langs->trans("DefaultPriceLog"), 0, $_SERVER["PHP_SELF"], '', '', '', $backbutton, 0, $num, 'title_accountancy.png'); } else { + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition, PhanPluginSuspiciousParamOrder print_barre_liste($langs->trans("PriceByCustomerLog"), 0, $_SERVER["PHP_SELF"], '', '', '', '', 0, $num, 'title_accountancy.png'); } @@ -1738,6 +1760,7 @@ if ((!getDolGlobalString('PRODUIT_CUSTOMER_PRICES') || $action == 'showlog_defau } print ''; print ''; + print ''; print ''; if ($user->hasRight('produit', 'supprimer')) { print ''; @@ -1867,6 +1890,11 @@ if ((!getDolGlobalString('PRODUIT_CUSTOMER_PRICES') || $action == 'showlog_defau } print ''; + // Price Label + print ''; + // User print ''; + // Action if ($user->hasRight('produit', 'supprimer')) { $candelete = 0; @@ -1921,10 +1950,10 @@ if ((!getDolGlobalString('PRODUIT_CUSTOMER_PRICES') || $action == 'showlog_defau if (getDolGlobalString('PRODUIT_CUSTOMER_PRICES')) { $prodcustprice = new ProductCustomerPrice($db); - $limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; + $limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); - $page = (GETPOST("page", 'int') ? GETPOST("page", 'int') : 0); + $page = (GETPOSTINT("page") ? GETPOSTINT("page") : 0); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -2012,6 +2041,14 @@ if (getDolGlobalString('PRODUIT_CUSTOMER_PRICES')) { } print ''; + // Price Label + print ''; + print ''; + print '
'; + print '
'; print dol_htmlentitiesbr($texttoshow); print '

'; print "\n\n"; @@ -145,7 +145,7 @@ if (!getDolGlobalString('MAIN_REMOVE_INSTALL_WARNING')) { } /* - * Dashboard Dolibarr states (statistics) + * Dashboard Dolibarr statistics * Hidden for external users */ @@ -156,7 +156,7 @@ $boxstatFromHook = ''; $langs->loadLangs(array('commercial', 'bills', 'orders', 'contracts')); // Dolibarr Working Board with weather -if (!getDolGlobalString('MAIN_DISABLE_GLOBAL_WORKBOARD')) { +if (!getDolGlobalString('MAIN_DISABLE_GLOBAL_WORKBOARD') && getDolGlobalInt('MAIN_OPTIMIZEFORTEXTBROWSER') < 2) { $showweather = (!getDolGlobalString('MAIN_DISABLE_METEO') || getDolGlobalInt('MAIN_DISABLE_METEO') == 2) ? 1 : 0; //Array that contains all WorkboardResponse classes to process them @@ -206,7 +206,7 @@ if (!getDolGlobalString('MAIN_DISABLE_GLOBAL_WORKBOARD')) { } // Number of sales orders - if (isModEnabled('commande') && !getDolGlobalString('MAIN_DISABLE_BLOCK_CUSTOMER') && $user->hasRight('commande', 'lire')) { + if (isModEnabled('order') && !getDolGlobalString('MAIN_DISABLE_BLOCK_CUSTOMER') && $user->hasRight('commande', 'lire')) { include_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php'; $board = new Commande($db); // Number of customer orders to be shipped (validated and in progress) @@ -228,7 +228,7 @@ if (!getDolGlobalString('MAIN_DISABLE_GLOBAL_WORKBOARD')) { } // Number of contract / services enabled (delayed) - if (isModEnabled('contrat') && !getDolGlobalString('MAIN_DISABLE_BLOCK_CONTRACT') && $user->hasRight('contrat', 'lire')) { + if (isModEnabled('contract') && !getDolGlobalString('MAIN_DISABLE_BLOCK_CONTRACT') && $user->hasRight('contrat', 'lire')) { include_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php'; $board = new Contrat($db); $dashboardlines[$board->element.'_inactive'] = $board->load_board($user, "inactive"); @@ -246,7 +246,7 @@ if (!getDolGlobalString('MAIN_DISABLE_GLOBAL_WORKBOARD')) { } // Number of invoices customers (paid) - if (isModEnabled('facture') && !getDolGlobalString('MAIN_DISABLE_BLOCK_CUSTOMER') && $user->hasRight('facture', 'lire')) { + if (isModEnabled('invoice') && !getDolGlobalString('MAIN_DISABLE_BLOCK_CUSTOMER') && $user->hasRight('facture', 'lire')) { include_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; $board = new Facture($db); $dashboardlines[$board->element] = $board->load_board($user); @@ -260,7 +260,7 @@ if (!getDolGlobalString('MAIN_DISABLE_GLOBAL_WORKBOARD')) { } // Number of transactions to conciliate - if (isModEnabled('banque') && !getDolGlobalString('MAIN_DISABLE_BLOCK_BANK') && $user->hasRight('banque', 'lire') && !$user->socid) { + if (isModEnabled('bank') && !getDolGlobalString('MAIN_DISABLE_BLOCK_BANK') && $user->hasRight('banque', 'lire') && !$user->socid) { include_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; $board = new Account($db); $nb = $board->countAccountToReconcile(); // Get nb of account to reconciliate @@ -271,7 +271,7 @@ if (!getDolGlobalString('MAIN_DISABLE_GLOBAL_WORKBOARD')) { // Number of cheque to send - if (isModEnabled('banque') && !getDolGlobalString('MAIN_DISABLE_BLOCK_BANK') && $user->hasRight('banque', 'lire') && !$user->socid) { + if (isModEnabled('bank') && !getDolGlobalString('MAIN_DISABLE_BLOCK_BANK') && $user->hasRight('banque', 'lire') && !$user->socid) { if (!getDolGlobalString('BANK_DISABLE_CHECK_DEPOSIT')) { include_once DOL_DOCUMENT_ROOT . '/compta/paiement/cheque/class/remisecheque.class.php'; $board = new RemiseCheque($db); @@ -290,7 +290,7 @@ if (!getDolGlobalString('MAIN_DISABLE_GLOBAL_WORKBOARD')) { } // Number of foundation members - if (isModEnabled('adherent') && !getDolGlobalString('MAIN_DISABLE_BLOCK_ADHERENT') && $user->hasRight('adherent', 'lire') && !$user->socid) { + if (isModEnabled('member') && !getDolGlobalString('MAIN_DISABLE_BLOCK_ADHERENT') && $user->hasRight('adherent', 'lire') && !$user->socid) { include_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php'; $board = new Adherent($db); $dashboardlines[$board->element.'_shift'] = $board->load_board($user, 'shift'); diff --git a/htdocs/install/doctemplates/websites/website_template-corporate/containers/wrapper.php b/htdocs/install/doctemplates/websites/website_template-corporate/containers/wrapper.php index e2d47656da1..a5350d6bad4 100644 --- a/htdocs/install/doctemplates/websites/website_template-corporate/containers/wrapper.php +++ b/htdocs/install/doctemplates/websites/website_template-corporate/containers/wrapper.php @@ -14,10 +14,10 @@ $encoding = ''; // Parameters to download files $hashp = GETPOST('hashp', 'aZ09'); $modulepart = GETPOST('modulepart', 'aZ09'); -$entity = GETPOST('entity', 'int') ?GETPOST('entity', 'int') : $conf->entity; +$entity = GETPOSTINT('entity') ?GETPOSTINT('entity') : $conf->entity; $original_file = GETPOST("file", "alpha"); $l = GETPOST('l', 'aZ09'); -$limit = GETPOST('limit', 'int'); +$limit = GETPOSTINT('limit'); // Parameters for RSS $rss = GETPOST('rss', 'aZ09'); diff --git a/htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/wrapper.php b/htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/wrapper.php index e2d47656da1..a5350d6bad4 100644 --- a/htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/wrapper.php +++ b/htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/wrapper.php @@ -14,10 +14,10 @@ $encoding = ''; // Parameters to download files $hashp = GETPOST('hashp', 'aZ09'); $modulepart = GETPOST('modulepart', 'aZ09'); -$entity = GETPOST('entity', 'int') ?GETPOST('entity', 'int') : $conf->entity; +$entity = GETPOSTINT('entity') ?GETPOSTINT('entity') : $conf->entity; $original_file = GETPOST("file", "alpha"); $l = GETPOST('l', 'aZ09'); -$limit = GETPOST('limit', 'int'); +$limit = GETPOSTINT('limit'); // Parameters for RSS $rss = GETPOST('rss', 'aZ09'); diff --git a/htdocs/install/doctemplates/websites/website_template-noimg/containers/wrapper.php b/htdocs/install/doctemplates/websites/website_template-noimg/containers/wrapper.php index e2d47656da1..a5350d6bad4 100644 --- a/htdocs/install/doctemplates/websites/website_template-noimg/containers/wrapper.php +++ b/htdocs/install/doctemplates/websites/website_template-noimg/containers/wrapper.php @@ -14,10 +14,10 @@ $encoding = ''; // Parameters to download files $hashp = GETPOST('hashp', 'aZ09'); $modulepart = GETPOST('modulepart', 'aZ09'); -$entity = GETPOST('entity', 'int') ?GETPOST('entity', 'int') : $conf->entity; +$entity = GETPOSTINT('entity') ?GETPOSTINT('entity') : $conf->entity; $original_file = GETPOST("file", "alpha"); $l = GETPOST('l', 'aZ09'); -$limit = GETPOST('limit', 'int'); +$limit = GETPOSTINT('limit'); // Parameters for RSS $rss = GETPOST('rss', 'aZ09'); diff --git a/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/containers/wrapper.php b/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/containers/wrapper.php index e2d47656da1..a5350d6bad4 100644 --- a/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/containers/wrapper.php +++ b/htdocs/install/doctemplates/websites/website_template-onepageblackpurple/containers/wrapper.php @@ -14,10 +14,10 @@ $encoding = ''; // Parameters to download files $hashp = GETPOST('hashp', 'aZ09'); $modulepart = GETPOST('modulepart', 'aZ09'); -$entity = GETPOST('entity', 'int') ?GETPOST('entity', 'int') : $conf->entity; +$entity = GETPOSTINT('entity') ?GETPOSTINT('entity') : $conf->entity; $original_file = GETPOST("file", "alpha"); $l = GETPOST('l', 'aZ09'); -$limit = GETPOST('limit', 'int'); +$limit = GETPOSTINT('limit'); // Parameters for RSS $rss = GETPOST('rss', 'aZ09'); diff --git a/htdocs/install/doctemplates/websites/website_template-restaurant/containers/wrapper.php b/htdocs/install/doctemplates/websites/website_template-restaurant/containers/wrapper.php index e2d47656da1..a5350d6bad4 100644 --- a/htdocs/install/doctemplates/websites/website_template-restaurant/containers/wrapper.php +++ b/htdocs/install/doctemplates/websites/website_template-restaurant/containers/wrapper.php @@ -14,10 +14,10 @@ $encoding = ''; // Parameters to download files $hashp = GETPOST('hashp', 'aZ09'); $modulepart = GETPOST('modulepart', 'aZ09'); -$entity = GETPOST('entity', 'int') ?GETPOST('entity', 'int') : $conf->entity; +$entity = GETPOSTINT('entity') ?GETPOSTINT('entity') : $conf->entity; $original_file = GETPOST("file", "alpha"); $l = GETPOST('l', 'aZ09'); -$limit = GETPOST('limit', 'int'); +$limit = GETPOSTINT('limit'); // Parameters for RSS $rss = GETPOST('rss', 'aZ09'); diff --git a/htdocs/install/doctemplates/websites/website_template-stellar/containers/wrapper.php b/htdocs/install/doctemplates/websites/website_template-stellar/containers/wrapper.php index 4ca5fbf8ba9..309d4f935fa 100644 --- a/htdocs/install/doctemplates/websites/website_template-stellar/containers/wrapper.php +++ b/htdocs/install/doctemplates/websites/website_template-stellar/containers/wrapper.php @@ -14,10 +14,10 @@ $encoding = ''; // Parameters to download files $hashp = GETPOST('hashp', 'aZ09'); $modulepart = GETPOST('modulepart', 'aZ09'); -$entity = GETPOST('entity', 'int') ?GETPOST('entity', 'int') : $conf->entity; +$entity = GETPOSTINT('entity') ?GETPOSTINT('entity') : $conf->entity; $original_file = GETPOST("file", "alpha"); $l = GETPOST('l', 'aZ09'); -$limit = GETPOST('limit', 'int'); +$limit = GETPOSTINT('limit'); // Parameters for RSS $rss = GETPOST('rss', 'aZ09'); diff --git a/htdocs/install/fileconf.php b/htdocs/install/fileconf.php index 7d211faae21..64b360472bb 100644 --- a/htdocs/install/fileconf.php +++ b/htdocs/install/fileconf.php @@ -6,6 +6,7 @@ * Copyright (C) 2004 Sebastien DiCintio * Copyright (C) 2005-2011 Regis Houssin * Copyright (C) 2016 Raphaël Doursenaud + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -188,7 +189,7 @@ if (!empty($force_install_noedit)) { name="main_data_dir" value="" >

*** Check fields into extra table structure match table of definition. If not add column into table
Repair llx_commande_fournisseur_dispatch.fk_commandefourndet
Repair llx_receptiondet_batch.fk_commandefourndet
Repair in progress. This may take a while.
'; - $array = array('-1'=>' ', '0'=>$langs->trans('Product'), '1'=>$langs->trans('Service')); + $array = array('-1' => ' ', '0' => $langs->trans('Product'), '1' => $langs->trans('Service')); print $form->selectarray('search_type', $array, $search_type); print '
'.$langs->trans("Categories").''; print $form->showCategories($object->id, Categorie::TYPE_KNOWLEDGEMANAGEMENT, 1); print "
'.$langs->trans("Label").'
'.$langs->trans("BankAccount").''; $form->select_comptes(GETPOST("accountid"), "accountid", 0, "courant=1", 1); // Show list of bank account with courant print '
'.$langs->trans("DateStart").''; - print $form->selectDate(!empty($datestart) ? $datestart : -1, 'start', '', '', '', 'add', 1, 1); + print $form->selectDate(!empty($datestart) ? $datestart : -1, 'start', 0, 0, 0, 'add', 1, 1); print '
'.$langs->trans("DateEnd").''; - print $form->selectDate(!empty($dateend) ? $dateend : -1, 'end', '', '', '', 'add', 1, 1); + print $form->selectDate(!empty($dateend) ? $dateend : -1, 'end', 0, 0, 0, 'add', 1, 1); print '
'.$langs->trans('NotePrivate').''.nl2br($payment->note_p print '
'.$langs->trans('NotePublic').''.nl2br($payment->note_public).'
'.$langs->trans('AccountToDebit').''; print img_picto('', 'bank_account', 'class="pictofixedwidth"'); - $form->select_comptes(GETPOSTISSET("accountid") ? GETPOST("accountid", 'int') : $loan->accountid, "accountid", 0, 'courant = '.Account::TYPE_CURRENT, 1); // Show opend bank account list + $form->select_comptes(GETPOSTISSET("accountid") ? GETPOSTINT("accountid") : $loan->accountid, "accountid", 0, 'courant = '.Account::TYPE_CURRENT, 1); // Show opend bank account list print '
'.$langs->trans('GencodBuyPrice').''; print img_picto('', 'barcode', 'class="pictofixedwidth"'); - print $formbarcode->selectBarcodeType((GETPOSTISSET('fk_barcode_type') ? GETPOST('fk_barcode_type', 'int') : ($rowid ? $object->supplier_fk_barcode_type : getDolGlobalInt("PRODUIT_DEFAULT_BARCODE_TYPE"))), 'fk_barcode_type', 1); + print $formbarcode->selectBarcodeType((GETPOSTISSET('fk_barcode_type') ? GETPOSTINT('fk_barcode_type') : ($rowid ? $object->supplier_fk_barcode_type : getDolGlobalInt("PRODUIT_DEFAULT_BARCODE_TYPE"))), 'fk_barcode_type', 1); print '
'; if ($usercancreate) { - print ''.img_edit().""; + print ''.img_edit().""; print '   '; print ''.img_picto($langs->trans("Remove"), 'delete').''; } diff --git a/htdocs/product/index.php b/htdocs/product/index.php index f26c28b840d..4c95be804b3 100644 --- a/htdocs/product/index.php +++ b/htdocs/product/index.php @@ -35,7 +35,7 @@ require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; require_once DOL_DOCUMENT_ROOT.'/product/dynamic_price/class/price_parser.class.php'; -$type = GETPOST("type", 'int'); +$type = GETPOST("type", 'intcomma'); if ($type == '' && !$user->hasRight('produit', 'lire') && $user->hasRight('service', 'lire')) { $type = '1'; // Force global page on service page only } @@ -69,15 +69,15 @@ if ($type == '0') { $transAreaType = $langs->trans("ProductsAndServicesArea"); $helpurl = ''; -if (!isset($_GET["type"])) { +if (!GETPOSTISSET("type")) { $transAreaType = $langs->trans("ProductsAndServicesArea"); $helpurl = 'EN:Module_Products|FR:Module_Produits|ES:Módulo_Productos'; } -if ((isset($_GET["type"]) && $_GET["type"] == 0) || !isModEnabled("service")) { +if ((GETPOSTISSET("type") && GETPOST("type") == '0') || !isModEnabled("service")) { $transAreaType = $langs->trans("ProductsArea"); $helpurl = 'EN:Module_Products|FR:Module_Produits|ES:Módulo_Productos'; } -if ((isset($_GET["type"]) && $_GET["type"] == 1) || !isModEnabled("product")) { +if ((GETPOSTISSET("type") && GETPOST("type") == '1') || !isModEnabled("product")) { $transAreaType = $langs->trans("ServicesArea"); $helpurl = 'EN:Module_Services_En|FR:Module_Services|ES:Módulo_Servicios'; } @@ -92,9 +92,13 @@ print '
'; if (getDolGlobalString('MAIN_SEARCH_FORM_ON_HOME_AREAS')) { // This may be useless due to the global search combo + if (!isset($listofsearchfields) || !is_array($listofsearchfields)) { + // Ensure $listofsearchfields is set and array + $listofsearchfields = array(); + } // Search contract if ((isModEnabled("product") || isModEnabled("service")) && ($user->hasRight('produit', 'lire') || $user->hasRight('service', 'lire'))) { - $listofsearchfields['search_product'] = array('text'=>'ProductOrService'); + $listofsearchfields['search_product'] = array('text' => 'ProductOrService'); } if (count($listofsearchfields)) { @@ -215,7 +219,7 @@ if ((isModEnabled("product") || isModEnabled("service")) && ($user->hasRight("pr } -if (isModEnabled('categorie') && getDolGlobalString('CATEGORY_GRAPHSTATS_ON_PRODUCTS')) { +if (isModEnabled('category') && getDolGlobalString('CATEGORY_GRAPHSTATS_ON_PRODUCTS')) { require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; print '
'; print '
'; @@ -310,10 +314,10 @@ if ((isModEnabled("product") || isModEnabled("service")) && ($user->hasRight("pr if ($num > 0) { $transRecordedType = $langs->trans("LastModifiedProductsAndServices", $max); - if (isset($_GET["type"]) && $_GET["type"] == 0) { + if (GETPOSTISSET("type") && GETPOST("type") == '0') { $transRecordedType = $langs->trans("LastRecordedProducts", $max); } - if (isset($_GET["type"]) && $_GET["type"] == 1) { + if (GETPOSTISSET("type") && GETPOST("type") == '1') { $transRecordedType = $langs->trans("LastRecordedServices", $max); } diff --git a/htdocs/product/inventory/ajax/searchfrombarcode.php b/htdocs/product/inventory/ajax/searchfrombarcode.php index efe4d65f2d3..68b848bcc34 100644 --- a/htdocs/product/inventory/ajax/searchfrombarcode.php +++ b/htdocs/product/inventory/ajax/searchfrombarcode.php @@ -43,11 +43,11 @@ $barcode = GETPOST("barcode", "aZ09"); $product = GETPOST("product"); $response = ""; -$fk_entrepot = GETPOST("fk_entrepot", "int"); -$fk_inventory = GETPOST("fk_inventory", "int"); -$fk_product = GETPOST("fk_product", "int"); -$reelqty = GETPOST("reelqty", "int"); -$batch = GETPOST("batch", "int"); +$fk_entrepot = GETPOSTINT("fk_entrepot"); +$fk_inventory = GETPOSTINT("fk_inventory"); +$fk_product = GETPOSTINT("fk_product"); +$reelqty = GETPOSTINT("reelqty"); +$batch = GETPOSTINT("batch"); $mode = GETPOST("mode", "aZ"); $warehousefound = 0; diff --git a/htdocs/product/inventory/card.php b/htdocs/product/inventory/card.php index 55f04b96523..c8e467eb5d7 100644 --- a/htdocs/product/inventory/card.php +++ b/htdocs/product/inventory/card.php @@ -33,7 +33,7 @@ require_once DOL_DOCUMENT_ROOT.'/product/inventory/lib/inventory.lib.php'; $langs->loadLangs(array("stocks", "other")); // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm', 'alpha'); @@ -147,7 +147,7 @@ if (empty($reshook)) { $object->setValueFrom('fk_soc', GETPOST('fk_soc', 'int'), '', '', 'date', '', $user, 'MYOBJECT_MODIFY'); }*/ if ($action == 'classin' && $permissiontoadd) { - $object->setProject(GETPOST('projectid', 'int')); + $object->setProject(GETPOSTINT('projectid')); } // Actions to send emails diff --git a/htdocs/product/inventory/class/inventory.class.php b/htdocs/product/inventory/class/inventory.class.php index ae477dafd8e..71de87fbb6a 100644 --- a/htdocs/product/inventory/class/inventory.class.php +++ b/htdocs/product/inventory/class/inventory.class.php @@ -3,6 +3,8 @@ * Copyright (C) 2014-2016 Juanjo Menent * Copyright (C) 2015 Florian Henry * Copyright (C) 2015 Raphaël Doursenaud + * Copyright (C) 2024 Frédéric France + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -94,25 +96,25 @@ class Inventory extends CommonObject // BEGIN MODULEBUILDER PROPERTIES /** - * @var array Array with all fields and their property + * @var array|string,position:int,notnull?:int,visible:int,noteditable?:int,default?:string,index?:int,foreignkey?:string,searchall?:int,isameasure?:int,css?:string,csslist?:string,help?:string,showoncombobox?:int,disabled?:int,arrayofkeyval?:array,comment?:string}> Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. */ public $fields = array( - 'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'visible'=>-1, 'enabled'=>1, 'position'=>1, 'notnull'=>1, 'index'=>1, 'comment'=>'Id',), - 'ref' => array('type'=>'varchar(64)', 'label'=>'Ref', 'visible'=>1, 'enabled'=>1, 'position'=>10, 'notnull'=>1, 'index'=>1, 'searchall'=>1, 'comment'=>'Reference of object', 'css'=>'maxwidth150'), - 'entity' => array('type'=>'integer', 'label'=>'Entity', 'visible'=>0, 'enabled'=>1, 'position'=>20, 'notnull'=>1, 'index'=>1,), - 'title' => array('type'=>'varchar(255)', 'label'=>'Label', 'visible'=>1, 'enabled'=>1, 'position'=>25, 'css'=>'minwidth300', 'csslist'=>'tdoverflowmax150', 'alwayseditable'=>1), - 'fk_warehouse' => array('type'=>'integer:Entrepot:product/stock/class/entrepot.class.php', 'label'=>'Warehouse', 'visible'=>1, 'enabled'=>1, 'position'=>30, 'index'=>1, 'help'=>'InventoryForASpecificWarehouse', 'picto'=>'stock', 'css'=>'minwidth300 maxwidth500 widthcentpercentminusx', 'csslist'=>'tdoverflowmax150'), - 'fk_product' => array('type'=>'integer:Product:product/class/product.class.php', 'label'=>'Product', 'get_name_url_params' => '0::0:-1:0::1', 'visible'=>1, 'enabled'=>1, 'position'=>32, 'index'=>1, 'help'=>'InventoryForASpecificProduct', 'picto'=>'product', 'css'=>'minwidth300 maxwidth500 widthcentpercentminusx', 'csslist'=>'tdoverflowmax150'), - 'categories_product' => array('type'=>'chkbxlst:categorie:label:rowid::type=0:0:', 'label'=>'OrProductsWithCategories', 'visible'=>3, 'enabled'=>1, 'position'=>33, 'help'=>'', 'picto'=>'category', 'css'=>'minwidth300 maxwidth500 widthcentpercentminusx'), - 'date_inventory' => array('type'=>'date', 'label'=>'DateValue', 'visible'=>1, 'enabled'=>'$conf->global->STOCK_INVENTORY_ADD_A_VALUE_DATE', 'position'=>35, 'csslist'=>'nowraponall'), // This date is not used so disabled by default. - 'date_creation' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>500, 'csslist'=>'nowraponall'), - 'tms' => array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>501, 'csslist'=>'nowraponall'), - 'date_validation' => array('type'=>'datetime', 'label'=>'DateValidation', 'visible'=>-2, 'enabled'=>1, 'position'=>502, 'csslist'=>'nowraponall'), - 'fk_user_creat' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserAuthor', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>510, 'foreignkey'=>'user.rowid', 'csslist'=>'tdoverflowmax150'), - 'fk_user_modif' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserModif', 'enabled'=>1, 'visible'=>-2, 'notnull'=>-1, 'position'=>511, 'csslist'=>'tdoverflowmax150'), - 'fk_user_valid' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserValidation', 'visible'=>-2, 'enabled'=>1, 'position'=>512, 'csslist'=>'tdoverflowmax150'), - 'import_key' => array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>1, 'visible'=>-2, 'notnull'=>-1, 'index'=>0, 'position'=>1000), - 'status' => array('type'=>'integer', 'label'=>'Status', 'visible'=>4, 'enabled'=>1, 'position'=>1000, 'notnull'=>1, 'default'=>0, 'index'=>1, 'arrayofkeyval'=>array(0=>'Draft', 1=>'Validated', 2=>'Closed', 9=>'Canceled')) + 'rowid' => array('type' => 'integer', 'label' => 'TechnicalID', 'visible' => -1, 'enabled' => 1, 'position' => 1, 'notnull' => 1, 'index' => 1, 'comment' => 'Id',), + 'ref' => array('type' => 'varchar(64)', 'label' => 'Ref', 'visible' => 1, 'enabled' => 1, 'position' => 10, 'notnull' => 1, 'index' => 1, 'searchall' => 1, 'comment' => 'Reference of object', 'css' => 'maxwidth150'), + 'entity' => array('type' => 'integer', 'label' => 'Entity', 'visible' => 0, 'enabled' => 1, 'position' => 20, 'notnull' => 1, 'index' => 1,), + 'title' => array('type' => 'varchar(255)', 'label' => 'Label', 'visible' => 1, 'enabled' => 1, 'position' => 25, 'css' => 'minwidth300', 'csslist' => 'tdoverflowmax150', 'alwayseditable' => 1), + 'fk_warehouse' => array('type' => 'integer:Entrepot:product/stock/class/entrepot.class.php', 'label' => 'Warehouse', 'visible' => 1, 'enabled' => 1, 'position' => 30, 'index' => 1, 'help' => 'InventoryForASpecificWarehouse', 'picto' => 'stock', 'css' => 'minwidth300 maxwidth500 widthcentpercentminusx', 'csslist' => 'tdoverflowmax150'), + 'fk_product' => array('type' => 'integer:Product:product/class/product.class.php', 'label' => 'Product', 'get_name_url_params' => '0::0:-1:0::1', 'visible' => 1, 'enabled' => 1, 'position' => 32, 'index' => 1, 'help' => 'InventoryForASpecificProduct', 'picto' => 'product', 'css' => 'minwidth300 maxwidth500 widthcentpercentminusx', 'csslist' => 'tdoverflowmax150'), + 'categories_product' => array('type' => 'chkbxlst:categorie:label:rowid::type=0:0:', 'label' => 'OrProductsWithCategories', 'visible' => 3, 'enabled' => 1, 'position' => 33, 'help' => '', 'picto' => 'category', 'css' => 'minwidth300 maxwidth500 widthcentpercentminusx'), + 'date_inventory' => array('type' => 'date', 'label' => 'DateValue', 'visible' => 1, 'enabled' => '$conf->global->STOCK_INVENTORY_ADD_A_VALUE_DATE', 'position' => 35, 'csslist' => 'nowraponall'), // This date is not used so disabled by default. + 'date_creation' => array('type' => 'datetime', 'label' => 'DateCreation', 'enabled' => 1, 'visible' => -2, 'notnull' => 1, 'position' => 500, 'csslist' => 'nowraponall'), + 'tms' => array('type' => 'timestamp', 'label' => 'DateModification', 'enabled' => 1, 'visible' => -2, 'notnull' => 1, 'position' => 501, 'csslist' => 'nowraponall'), + 'date_validation' => array('type' => 'datetime', 'label' => 'DateValidation', 'visible' => -2, 'enabled' => 1, 'position' => 502, 'csslist' => 'nowraponall'), + 'fk_user_creat' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'UserAuthor', 'enabled' => 1, 'visible' => -2, 'notnull' => 1, 'position' => 510, 'foreignkey' => 'user.rowid', 'csslist' => 'tdoverflowmax150'), + 'fk_user_modif' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'UserModif', 'enabled' => 1, 'visible' => -2, 'notnull' => -1, 'position' => 511, 'csslist' => 'tdoverflowmax150'), + 'fk_user_valid' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'UserValidation', 'visible' => -2, 'enabled' => 1, 'position' => 512, 'csslist' => 'tdoverflowmax150'), + 'import_key' => array('type' => 'varchar(14)', 'label' => 'ImportId', 'enabled' => 1, 'visible' => -2, 'notnull' => -1, 'index' => 0, 'position' => 1000), + 'status' => array('type' => 'integer', 'label' => 'Status', 'visible' => 4, 'enabled' => 1, 'position' => 1000, 'notnull' => 1, 'default' => '0', 'index' => 1, 'arrayofkeyval' => array(0 => 'Draft', 1 => 'Validated', 2 => 'Closed', 9 => 'Canceled')) ); /** @@ -203,11 +205,11 @@ class Inventory extends CommonObject public $class_element_line = 'Inventoryline'; /** - * @var array List of child tables. To test if we can delete object. + * @var array> List of child tables. To test if we can delete object. */ protected $childtables = array(); /** - * @var array List of child tables. To know object to delete on cascade. + * @var string[] List of child tables. To know object to delete on cascade. */ protected $childtablesoncascade = array('inventorydet'); @@ -262,7 +264,6 @@ class Inventory extends CommonObject */ public function validate(User $user, $notrigger = 0, $include_sub_warehouse = 0) { - global $conf; $this->db->begin(); $result = 0; @@ -279,10 +280,17 @@ class Inventory extends CommonObject // Scan existing stock to prefill the inventory $sql = "SELECT ps.rowid, ps.fk_entrepot as fk_warehouse, ps.fk_product, ps.reel,"; - $sql .= " pb.batch, pb.qty"; + if (isModEnabled('productbatch')) { + $sql .= " pb.batch as batch, pb.qty as qty,"; + } else { + $sql .= " '' as batch, 0 as qty,"; + } + $sql .= " p.ref, p.tobatch"; $sql .= " FROM ".$this->db->prefix()."product_stock as ps"; - $sql .= " LEFT JOIN ".$this->db->prefix()."product_batch as pb ON pb.fk_product_stock = ps.rowid,"; - $sql .= " ".$this->db->prefix()."product as p, ".$this->db->prefix()."entrepot as e"; + if (isModEnabled('productbatch')) { + $sql .= " LEFT JOIN ".$this->db->prefix()."product_batch as pb ON pb.fk_product_stock = ps.rowid"; + } + $sql .= ", ".$this->db->prefix()."product as p, ".$this->db->prefix()."entrepot as e"; $sql .= " WHERE p.entity IN (".getEntity('product').")"; $sql .= " AND ps.fk_product = p.rowid AND ps.fk_entrepot = e.rowid"; if (!getDolGlobalString('STOCK_SUPPORTS_SERVICES')) { @@ -315,6 +323,7 @@ class Inventory extends CommonObject $sql .= " WHERE pa.fk_product_pere = ps.fk_product"; $sql .= ")"; } + $sql .= " ORDER BY p.rowid"; $inventoryline = new InventoryLine($this->db); @@ -333,10 +342,18 @@ class Inventory extends CommonObject $inventoryline->datec = dol_now(); if (isModEnabled('productbatch')) { + if ($obj->batch && empty($obj->tobatch)) { + // Bad consistency of data. The product is not a product with lot/serial but we found a stock for some lot/serial. + $result = -2; + $this->error = 'The product ID='.$obj->ref." has stock with lot/serial but is configured to not manage lot/serial. You must first fix this, this way: Set the product to have 'Management of Lot/Serial' to Yes, then set it back to 'Management of Lot/Serial to No"; + break; + } + $inventoryline->qty_stock = ($obj->batch ? $obj->qty : $obj->reel); // If there is batch detail, we take qty for batch, else global qty } else { $inventoryline->qty_stock = $obj->reel; } + //var_dump($obj->batch.' '.$obj->qty.' '.$obj->reel.' '.$this->error);exit; $resultline = $inventoryline->create($user); if ($resultline <= 0) { @@ -644,6 +661,7 @@ class Inventory extends CommonObject global $langs; $labelStatus = array(); + $labelStatusShort = array(); $labelStatus[self::STATUS_DRAFT] = $langs->transnoentitiesnoconv('Draft'); $labelStatus[self::STATUS_VALIDATED] = $langs->transnoentitiesnoconv('Validated').' ('.$langs->transnoentitiesnoconv('InventoryStartedShort').')'; $labelStatus[self::STATUS_CANCELED] = $langs->transnoentitiesnoconv('Canceled'); @@ -739,12 +757,14 @@ class Inventory extends CommonObject * Initialise object with example values * Id must be 0 if object instance is a specimen * - * @return void + * @return int */ public function initAsSpecimen() { - $this->initAsSpecimenCommon(); + $ret = $this->initAsSpecimenCommon(); $this->title = ''; + + return $ret; } /** @@ -757,10 +777,10 @@ class Inventory extends CommonObject public function getChildWarehouse($id, &$TChildWarehouse) { $sql = 'SELECT rowid FROM '.MAIN_DB_PREFIX.'entrepot'; - $sql.= ' WHERE fk_parent='.(int) $id; - $sql.= ' ORDER BY rowid'; + $sql .= ' WHERE fk_parent='.(int) $id; + $sql .= ' ORDER BY rowid'; $resql = $this->db->query($sql); - if ($resql && $this->db->num_rows($resql)>0) { + if ($resql && $this->db->num_rows($resql) > 0) { while ($obj = $this->db->fetch_object($resql)) { $TChildWarehouse[] = $obj->rowid; $this->getChildWarehouse($obj->rowid, $TChildWarehouse); @@ -821,21 +841,21 @@ class InventoryLine extends CommonObjectLine // BEGIN MODULEBUILDER PROPERTIES /** - * @var array Array with all fields and their property + * @var array|string,position:int,notnull?:int,visible:int,noteditable?:int,default?:string,index?:int,foreignkey?:string,searchall?:int,isameasure?:int,css?:string,csslist?:string,help?:string,showoncombobox?:int,disabled?:int,arrayofkeyval?:array,comment?:string}> Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. */ public $fields = array( - 'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'visible'=>-1, 'enabled'=>1, 'position'=>1, 'notnull'=>1, 'index'=>1, 'comment'=>'Id',), - 'fk_inventory' => array('type'=>'integer:Inventory:product/inventory/class/inventory.class.php', 'label'=>'Inventory', 'visible'=>1, 'enabled'=>1, 'position'=>30, 'index'=>1, 'help'=>'LinkToInventory'), - 'fk_warehouse' => array('type'=>'integer:Entrepot:product/stock/class/entrepot.class.php', 'label'=>'Warehouse', 'visible'=>1, 'enabled'=>1, 'position'=>30, 'index'=>1, 'help'=>'LinkToThirdparty'), - 'fk_product' => array('type'=>'integer:Product:product/class/product.class.php', 'label'=>'Product', 'visible'=>1, 'enabled'=>1, 'position'=>32, 'index'=>1, 'help'=>'LinkToProduct'), - 'batch' => array('type'=>'string', 'label'=>'Batch', 'visible'=>1, 'enabled'=>1, 'position'=>32, 'index'=>1, 'help'=>'LinkToProduct'), - 'datec' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>500), - 'tms' => array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>501), - 'qty_stock' => array('type'=>'double', 'label'=>'QtyFound', 'visible'=>1, 'enabled'=>1, 'position'=>32, 'index'=>1, 'help'=>'Qty we found/want (to define during draft edition)'), - 'qty_view' => array('type'=>'double', 'label'=>'QtyBefore', 'visible'=>1, 'enabled'=>1, 'position'=>33, 'index'=>1, 'help'=>'Qty before (filled once movements are validated)'), - 'qty_regulated' => array('type'=>'double', 'label'=>'QtyDelta', 'visible'=>1, 'enabled'=>1, 'position'=>34, 'index'=>1, 'help'=>'Qty added or removed (filled once movements are validated)'), - 'pmp_real' => array('type'=>'double', 'label'=>'PMPReal', 'visible'=>1, 'enabled'=>1, 'position'=>35), - 'pmp_expected' => array('type'=>'double', 'label'=>'PMPExpected', 'visible'=>1, 'enabled'=>1, 'position'=>36), + 'rowid' => array('type' => 'integer', 'label' => 'TechnicalID', 'visible' => -1, 'enabled' => 1, 'position' => 1, 'notnull' => 1, 'index' => 1, 'comment' => 'Id',), + 'fk_inventory' => array('type' => 'integer:Inventory:product/inventory/class/inventory.class.php', 'label' => 'Inventory', 'visible' => 1, 'enabled' => 1, 'position' => 30, 'index' => 1, 'help' => 'LinkToInventory'), + 'fk_warehouse' => array('type' => 'integer:Entrepot:product/stock/class/entrepot.class.php', 'label' => 'Warehouse', 'visible' => 1, 'enabled' => 1, 'position' => 30, 'index' => 1, 'help' => 'LinkToThirdparty'), + 'fk_product' => array('type' => 'integer:Product:product/class/product.class.php', 'label' => 'Product', 'visible' => 1, 'enabled' => 1, 'position' => 32, 'index' => 1, 'help' => 'LinkToProduct'), + 'batch' => array('type' => 'string', 'label' => 'Batch', 'visible' => 1, 'enabled' => 1, 'position' => 32, 'index' => 1, 'help' => 'LinkToProduct'), + 'datec' => array('type' => 'datetime', 'label' => 'DateCreation', 'enabled' => 1, 'visible' => -2, 'notnull' => 1, 'position' => 500), + 'tms' => array('type' => 'timestamp', 'label' => 'DateModification', 'enabled' => 1, 'visible' => -2, 'notnull' => 1, 'position' => 501), + 'qty_stock' => array('type' => 'double', 'label' => 'QtyFound', 'visible' => 1, 'enabled' => 1, 'position' => 32, 'index' => 1, 'help' => 'Qty we found/want (to define during draft edition)'), + 'qty_view' => array('type' => 'double', 'label' => 'QtyBefore', 'visible' => 1, 'enabled' => 1, 'position' => 33, 'index' => 1, 'help' => 'Qty before (filled once movements are validated)'), + 'qty_regulated' => array('type' => 'double', 'label' => 'QtyDelta', 'visible' => 1, 'enabled' => 1, 'position' => 34, 'index' => 1, 'help' => 'Qty added or removed (filled once movements are validated)'), + 'pmp_real' => array('type' => 'double', 'label' => 'PMPReal', 'visible' => 1, 'enabled' => 1, 'position' => 35), + 'pmp_expected' => array('type' => 'double', 'label' => 'PMPExpected', 'visible' => 1, 'enabled' => 1, 'position' => 36), ); /** diff --git a/htdocs/product/inventory/inventory.php b/htdocs/product/inventory/inventory.php index cd8ee975ed4..0aab3be055c 100644 --- a/htdocs/product/inventory/inventory.php +++ b/htdocs/product/inventory/inventory.php @@ -35,7 +35,7 @@ include_once DOL_DOCUMENT_ROOT.'/product/stock/class/productlot.class.php'; $langs->loadLangs(array("stocks", "other", "productbatch")); // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm', 'alpha'); @@ -43,8 +43,8 @@ $cancel = GETPOST('cancel', 'aZ09'); $contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'inventorycard'; // To manage different context of search $backtopage = GETPOST('backtopage', 'alpha'); $listoffset = GETPOST('listoffset', 'alpha'); -$limit = GETPOST('limit', 'int') > 0 ? GETPOST('limit', 'int') : $conf->liste_limit; -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$limit = GETPOSTINT('limit') > 0 ? GETPOSTINT('limit') : $conf->liste_limit; +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } @@ -52,9 +52,9 @@ $offset = $limit * $page; $pageprev = $page - 1; $pagenext = $page + 1; -$fk_warehouse = GETPOST('fk_warehouse', 'int'); -$fk_product = GETPOST('fk_product', 'int'); -$lineid = GETPOST('lineid', 'int'); +$fk_warehouse = GETPOSTINT('fk_warehouse'); +$fk_product = GETPOSTINT('fk_product'); +$lineid = GETPOSTINT('lineid'); $batch = GETPOST('batch', 'alphanohtml'); $totalExpectedValuation = 0; $totalRealValuation = 0; @@ -150,12 +150,15 @@ if (empty($reshook)) { $sql .= ' id.fk_product, id.batch, id.qty_stock, id.qty_view, id.qty_regulated, id.pmp_real'; $sql .= ' FROM '.MAIN_DB_PREFIX.'inventorydet as id'; $sql .= ' WHERE id.fk_inventory = '.((int) $object->id); + $sql .= ' ORDER BY id.rowid'; $resql = $db->query($sql); if ($resql) { $num = $db->num_rows($resql); $i = 0; $totalarray = array(); + $option = ''; + while ($i < $num) { $line = $db->fetch_object($resql); @@ -183,9 +186,10 @@ if (empty($reshook)) { $realqtynow = $product_static->stock_warehouse[$line->fk_warehouse]->detail_batch[$line->batch]->qty; } - if (!is_null($qty_view)) { $stock_movement_qty = price2num($qty_view - $realqtynow, 'MS'); + //print "Process inventory line ".$line->rowid." product=".$product_static->id." realqty=".$realqtynow." qty_stock=".$qty_stock." qty_view=".$qty_view." warehouse=".$line->fk_warehouse." qty to move=".$stock_movement_qty."
\n"; + if ($stock_movement_qty != 0) { if ($stock_movement_qty < 0) { $movement_type = 1; @@ -261,7 +265,7 @@ if (empty($reshook)) { } // Save quantity found during inventory (when we click on Save button on inventory page) - if ($action =='updateinventorylines' && $permissiontoadd) { + if ($action == 'updateinventorylines' && $permissiontoadd) { $sql = 'SELECT id.rowid, id.datec as date_creation, id.tms as date_modification, id.fk_inventory, id.fk_warehouse,'; $sql .= ' id.fk_product, id.batch, id.qty_stock, id.qty_view, id.qty_regulated'; $sql .= ' FROM '.MAIN_DB_PREFIX.'inventorydet as id'; @@ -356,7 +360,7 @@ if (empty($reshook)) { include DOL_DOCUMENT_ROOT.'/core/actions_sendmails.inc.php';*/ if (GETPOST('addline', 'alpha')) { - $qty= (GETPOST('qtytoadd') != '' ? price2num(GETPOST('qtytoadd', 'MS')) : null); + $qty = (GETPOST('qtytoadd') != '' ? price2num(GETPOST('qtytoadd', 'MS')) : null); if ($fk_warehouse <= 0) { $error++; setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Warehouse")), null, 'errors'); @@ -373,12 +377,12 @@ if (empty($reshook)) { $tmpproduct = new Product($db); $result = $tmpproduct->fetch($fk_product); - if (empty($error) && $tmpproduct->status_batch>0 && empty($batch)) { + if (empty($error) && $tmpproduct->status_batch > 0 && empty($batch)) { $error++; $langs->load("errors"); setEventMessages($langs->trans("ErrorProductNeedBatchNumber", $tmpproduct->ref), null, 'errors'); } - if (empty($error) && $tmpproduct->status_batch==2 && !empty($batch) && $qty>1) { + if (empty($error) && $tmpproduct->status_batch == 2 && !empty($batch) && $qty > 1) { $error++; $langs->load("errors"); setEventMessages($langs->trans("TooManyQtyForSerialNumber", $tmpproduct->ref, $batch), null, 'errors'); @@ -926,7 +930,13 @@ if (isModEnabled('productbatch')) { print $langs->trans("Batch"); print '
'.$langs->trans("ExpectedQty").''.$form->textwithpicto($langs->trans("ExpectedQty"), $langs->trans("QtyCurrentlyKnownInStock")).''.$form->textwithpicto($langs->trans("ExpectedQty"), $langs->trans("QtyInStockWhenInventoryWasValidated")).''.$langs->trans('PMPExpected').''.$langs->trans('ExpectedValuation').'
'; - print $formproduct->selectWarehouses((GETPOSTISSET('fk_warehouse') ? GETPOST('fk_warehouse', 'int') : $object->fk_warehouse), 'fk_warehouse', 'warehouseopen', 1, 0, 0, '', 0, 0, array(), 'maxwidth300'); + print $formproduct->selectWarehouses((GETPOSTISSET('fk_warehouse') ? GETPOSTINT('fk_warehouse') : $object->fk_warehouse), 'fk_warehouse', 'warehouseopen', 1, 0, 0, '', 0, 0, array(), 'maxwidth300'); print ''; - print $form->select_produits((GETPOSTISSET('fk_product') ? GETPOST('fk_product', 'int') : $object->fk_product), 'fk_product', '', 0, 0, -1, 2, '', 0, null, 0, '1', 0, 'maxwidth300'); + print $form->select_produits((GETPOSTISSET('fk_product') ? GETPOSTINT('fk_product') : $object->fk_product), 'fk_product', '', 0, 0, -1, 2, '', 0, null, 0, '1', 0, 'maxwidth300'); print ''; @@ -1050,6 +1060,7 @@ if ($resql) { if (isModEnabled('productbatch')) { print ''; $batch_static = new Productlot($db); + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition $res = $batch_static->fetch(0, $product_static->id, $obj->batch); if ($res) { print $batch_static->getNomUrl(1); @@ -1059,7 +1070,8 @@ if ($resql) { print ''; $valuetoshow = $obj->qty_stock; // For inventory not yet close, we overwrite with the real value in stock now diff --git a/htdocs/product/inventory/list.php b/htdocs/product/inventory/list.php index 727c767b7f7..d9ff6026f0d 100644 --- a/htdocs/product/inventory/list.php +++ b/htdocs/product/inventory/list.php @@ -23,20 +23,18 @@ // Load Dolibarr environment require '../../main.inc.php'; +require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcategory.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; require_once DOL_DOCUMENT_ROOT.'/product/inventory/class/inventory.class.php'; -if (isModEnabled('categorie')) { - require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; -} // Load translation files required by the page $langs->loadLangs(array("stocks", "other")); $action = GETPOST('action', 'aZ09') ? GETPOST('action', 'aZ09') : 'view'; // The action 'add', 'create', 'edit', 'update', 'view', ... $massaction = GETPOST('massaction', 'alpha'); // The bulk action (combo box choice into lists) -$show_files = GETPOST('show_files', 'int'); // Show files area generated by bulk actions ? +$show_files = GETPOSTINT('show_files'); // Show files area generated by bulk actions ? $confirm = GETPOST('confirm', 'alpha'); // Result of a confirmation $cancel = GETPOST('cancel', 'alpha'); // We click on a Cancel button $toselect = GETPOST('toselect', 'array'); // Array of ids of elements selected into a list @@ -45,13 +43,13 @@ $backtopage = GETPOST('backtopage', 'alpha'); // Go back to a dedicated page $optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print') $mode = GETPOST('mode', 'aZ'); // The output mode ('list', 'kanban', 'hierarchy', 'calendar', ...) -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // If $page is not defined, or '' or -1 or if we click on clear filters $page = 0; @@ -88,13 +86,13 @@ foreach ($object->fields as $key => $val) { $search[$key] = GETPOST('search_'.$key, 'alpha'); } if (preg_match('/^(date|timestamp|datetime)/', $val['type'])) { - $search[$key.'_dtstart'] = dol_mktime(0, 0, 0, GETPOST('search_'.$key.'_dtstartmonth', 'int'), GETPOST('search_'.$key.'_dtstartday', 'int'), GETPOST('search_'.$key.'_dtstartyear', 'int')); - $search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOST('search_'.$key.'_dtendmonth', 'int'), GETPOST('search_'.$key.'_dtendday', 'int'), GETPOST('search_'.$key.'_dtendyear', 'int')); + $search[$key.'_dtstart'] = dol_mktime(0, 0, 0, GETPOSTINT('search_'.$key.'_dtstartmonth'), GETPOSTINT('search_'.$key.'_dtstartday'), GETPOSTINT('search_'.$key.'_dtstartyear')); + $search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOSTINT('search_'.$key.'_dtendmonth'), GETPOSTINT('search_'.$key.'_dtendday'), GETPOSTINT('search_'.$key.'_dtendyear')); } } $searchCategoryProductOperator = 0; if (GETPOSTISSET('formfilteraction')) { - $searchCategoryProductOperator = GETPOST('search_category_product_operator', 'int'); + $searchCategoryProductOperator = GETPOSTINT('search_category_product_operator'); } elseif (getDolGlobalString('MAIN_SEARCH_CAT_OR_BY_DEFAULT')) { $searchCategoryProductOperator = getDolGlobalString('MAIN_SEARCH_CAT_OR_BY_DEFAULT'); } @@ -117,7 +115,7 @@ foreach ($object->fields as $key => $val) { $arrayfields['t.'.$key] = array( 'label'=>$val['label'], 'checked'=>(($visible < 0) ? 0 : 1), - 'enabled'=>(abs($visible) != 3 && dol_eval($val['enabled'], 1)), + 'enabled'=>(abs($visible) != 3 && (int) dol_eval($val['enabled'], 1)), 'position'=>$val['position'], 'help'=> isset($val['help']) ? $val['help'] : '' ); @@ -396,9 +394,9 @@ foreach ($search as $key => $val) { } } } elseif (preg_match('/(_dtstart|_dtend)$/', $key) && !empty($val)) { - $param .= '&search_'.$key.'month='.((int) GETPOST('search_'.$key.'month', 'int')); - $param .= '&search_'.$key.'day='.((int) GETPOST('search_'.$key.'day', 'int')); - $param .= '&search_'.$key.'year='.((int) GETPOST('search_'.$key.'year', 'int')); + $param .= '&search_'.$key.'month='.(GETPOSTINT('search_'.$key.'month')); + $param .= '&search_'.$key.'day='.(GETPOSTINT('search_'.$key.'day')); + $param .= '&search_'.$key.'year='.(GETPOSTINT('search_'.$key.'year')); } elseif ($search[$key] != '') { $param .= '&search_'.$key.'='.urlencode($search[$key]); } @@ -426,7 +424,7 @@ $arrayofmassactions = array( if (!empty($permissiontodelete)) { $arrayofmassactions['predelete'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete"); } -if (GETPOST('nomassaction', 'int') || in_array($massaction, array('presend', 'predelete'))) { +if (GETPOSTINT('nomassaction') || in_array($massaction, array('presend', 'predelete'))) { $arrayofmassactions = array(); } $massactionbutton = $form->selectMassAction('', $arrayofmassactions); @@ -476,7 +474,10 @@ $moreforfilter.= $langs->trans('MyFilter') . ': '; $tmptitle = $langs->transnoentities('ProductsCategoriesShort'); $moreforfilter .= img_picto($tmptitle, 'category', 'class="pictofixedwidth"'); @@ -486,6 +487,7 @@ if (getDolGlobalString('MAIN_SEARCH_CATEGORY_PRODUCT_ON_LISTS') && isModEnabled( $moreforfilter .= ' '; $moreforfilter .= $form->textwithpicto('', $langs->trans('UseOrOperatorForCategories') . ' : ' . $tmptitle, 1, 'help', '', 0, 2, 'tooltip_cat_pro'); // Tooltip on click $moreforfilter .= ''; + */ } $parameters = array(); @@ -506,7 +508,7 @@ if (!empty($moreforfilter)) { } $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; -$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')) : ''); // This also change content of $arrayfields +$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) : ''); // This also change content of $arrayfields $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); print '
'; // You can use div-table-responsive-no-min if you don't need reserved height for your table diff --git a/htdocs/product/list.php b/htdocs/product/list.php index bed22f4b30d..7d387457b23 100644 --- a/htdocs/product/list.php +++ b/htdocs/product/list.php @@ -14,6 +14,7 @@ * Copyright (C) 2020-2021 Open-DSI * Copyright (C) 2022 Charlene Benke * Copyright (C) 2020-2023 Alexandre Spangaro + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -50,7 +51,7 @@ require_once DOL_DOCUMENT_ROOT.'/product/class/html.formproduct.class.php'; if (isModEnabled('workstation')) { require_once DOL_DOCUMENT_ROOT.'/workstation/class/workstation.class.php'; } -if (isModEnabled('categorie')) { +if (isModEnabled('category')) { require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcategory.class.php'; } @@ -65,7 +66,7 @@ if (isModEnabled('productbatch')) { // Get parameters $action = GETPOST('action', 'aZ09'); $massaction = GETPOST('massaction', 'alpha'); -$show_files = GETPOST('show_files', 'int'); +$show_files = GETPOSTINT('show_files'); $confirm = GETPOST('confirm', 'alpha'); $toselect = GETPOST('toselect', 'array'); @@ -77,7 +78,7 @@ $search_ref_supplier = GETPOST("search_ref_supplier", 'alpha'); $search_barcode = GETPOST("search_barcode", 'alpha'); $search_label = GETPOST("search_label", 'alpha'); $search_default_workstation = GETPOST("search_default_workstation", 'alpha'); -$search_type = GETPOST("search_type", 'int'); +$search_type = GETPOST("search_type", "int"); $search_vatrate = GETPOST("search_vatrate", 'alpha'); $searchCategoryProductOperator = 0; if (GETPOSTISSET('formfilteraction')) { @@ -86,26 +87,26 @@ if (GETPOSTISSET('formfilteraction')) { $searchCategoryProductOperator = getDolGlobalString('MAIN_SEARCH_CAT_OR_BY_DEFAULT'); } $searchCategoryProductList = GETPOST('search_category_product_list', 'array'); -$catid = GETPOST('catid', 'int'); +$catid = GETPOSTINT('catid'); if (!empty($catid) && empty($searchCategoryProductList)) { $searchCategoryProductList = array($catid); } -$search_tosell = GETPOST("search_tosell", 'int'); -$search_tobuy = GETPOST("search_tobuy", 'int'); -$search_country = GETPOST("search_country", 'int'); -$search_state = GETPOST("state_id", 'int'); -$fourn_id = GETPOST("fourn_id", 'int'); -$search_tobatch = GETPOST("search_tobatch", 'int'); +$search_tosell = GETPOST("search_tosell"); +$search_tobuy = GETPOST("search_tobuy"); +$search_country = GETPOSTINT("search_country"); +$search_state = GETPOSTINT("state_id"); +$fourn_id = GETPOSTINT("fourn_id"); +$search_tobatch = GETPOST("search_tobatch"); $search_accountancy_code_sell = GETPOST("search_accountancy_code_sell", 'alpha'); $search_accountancy_code_sell_intra = GETPOST("search_accountancy_code_sell_intra", 'alpha'); $search_accountancy_code_sell_export = GETPOST("search_accountancy_code_sell_export", 'alpha'); $search_accountancy_code_buy = GETPOST("search_accountancy_code_buy", 'alpha'); $search_accountancy_code_buy_intra = GETPOST("search_accountancy_code_buy_intra", 'alpha'); $search_accountancy_code_buy_export = GETPOST("search_accountancy_code_buy_export", 'alpha'); -$search_finished = GETPOST("search_finished", 'int'); -$search_units = GETPOST('search_units', 'int'); +$search_finished = GETPOST("search_finished"); +$search_units = GETPOSTINT('search_units'); $optioncss = GETPOST('optioncss', 'alpha'); -$type = GETPOST("type", "int"); +$type = GETPOSTINT("type"); $mode = GETPOST('mode', 'alpha'); // Show/hide child product variants @@ -117,10 +118,10 @@ if (isModEnabled('variants')) { $diroutputmassaction = $conf->product->dir_output.'/temp/massgeneration/'.$user->id; // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // If $page is not defined, or '' or -1 or if we click on clear filters $page = 0; @@ -188,11 +189,11 @@ if (getDolGlobalString('STOCK_CALCULATE_ON_SHIPMENT') // List of fields to search into when doing a "search in all" $fieldstosearchall = array( - 'p.ref'=>"Ref", - 'p.label'=>"ProductLabel", - 'p.description'=>"Description", - "p.note"=>"Note", - 'pfp.ref_fourn'=>'RefSupplier' + 'p.ref' => "Ref", + 'p.label' => "ProductLabel", + 'p.description' => "Description", + "p.note" => "Note", + 'pfp.ref_fourn' => 'RefSupplier' ); // multilang if (getDolGlobalInt('MAIN_MULTILANGS')) { @@ -220,57 +221,58 @@ $isInEEC = isInEEC($mysoc); $alias_product_perentity = !getDolGlobalString('MAIN_PRODUCT_PERENTITY_SHARED') ? "p" : "ppe"; +$arraypricelevel = array(); // Definition of array of fields for columns $arrayfields = array( - 'p.rowid'=>array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>1, 'visible'=>-2, 'noteditable'=>1, 'notnull'=> 1, 'index'=>1, 'position'=>1, 'comment'=>'Id', 'css'=>'left'), - 'p.ref'=>array('label'=>'ProductRef', 'checked'=>1, 'position'=>10), + 'p.rowid' => array('type' => 'integer', 'label' => 'TechnicalID', 'enabled' => 1, 'visible' => -2, 'noteditable' => 1, 'notnull' => 1, 'index' => 1, 'position' => 1, 'comment' => 'Id', 'css' => 'left'), + 'p.ref' => array('label' => 'ProductRef', 'checked' => 1, 'position' => 10), //'pfp.ref_fourn'=>array('label'=>$langs->trans("RefSupplier"), 'checked'=>1, 'enabled'=>(isModEnabled('barcode'))), - 'thumbnail'=>array('label'=>'Photo', 'checked'=>0, 'position'=>10), - 'p.description'=>array('label'=>'Description', 'checked'=>0, 'position'=>10), - 'p.label'=>array('label'=>"Label", 'checked'=>1, 'position'=>10), - 'p.fk_product_type'=>array('label'=>"Type", 'checked'=>0, 'enabled'=>(isModEnabled("product") && isModEnabled("service")), 'position'=>11), - 'p.barcode'=>array('label'=>"Gencod", 'checked'=>1, 'enabled'=>(isModEnabled('barcode')), 'position'=>12), - 'p.duration'=>array('label'=>"Duration", 'checked'=>($contextpage != 'productlist'), 'enabled'=>(isModEnabled("service") && (string) $type == '1'), 'position'=>13), - 'pac.fk_product_parent' => array('label'=>"ParentProductOfVariant", 'checked'=>-1, 'enabled'=>(isModEnabled('variants')), 'position'=>14), - 'p.finished'=>array('label'=>"Nature", 'checked'=>0, 'enabled'=>(isModEnabled("product") && $type != '1'), 'position'=>19), - 'p.weight'=>array('label'=>'Weight', 'checked'=>0, 'enabled'=>(isModEnabled("product") && $type != '1'), 'position'=>20), - 'p.weight_units'=>array('label'=>'WeightUnits', 'checked'=>0, 'enabled'=>(isModEnabled("product") && $type != '1'), 'position'=>21), - 'p.length'=>array('label'=>'Length', 'checked'=>0, 'enabled'=>(isModEnabled("product") && !getDolGlobalString('PRODUCT_DISABLE_SIZE') && $type != '1'), 'position'=>22), - 'p.length_units'=>array('label'=>'LengthUnits', 'checked'=>0, 'enabled'=>(isModEnabled("product") && !getDolGlobalString('PRODUCT_DISABLE_SIZE') && $type != '1'), 'position'=>23), - 'p.width'=>array('label'=>'Width', 'checked'=>0, 'enabled'=>(isModEnabled("product") && !getDolGlobalString('PRODUCT_DISABLE_SIZE') && $type != '1'), 'position'=>24), - 'p.width_units'=>array('label'=>'WidthUnits', 'checked'=>0, 'enabled'=>(isModEnabled("product") && !getDolGlobalString('PRODUCT_DISABLE_SIZE') && $type != '1'), 'position'=>25), - 'p.height'=>array('label'=>'Height', 'checked'=>0, 'enabled'=>(isModEnabled("product") && !getDolGlobalString('PRODUCT_DISABLE_SIZE') && $type != '1'), 'position'=>26), - 'p.height_units'=>array('label'=>'HeightUnits', 'checked'=>0, 'enabled'=>(isModEnabled("product") && !getDolGlobalString('PRODUCT_DISABLE_SIZE') && $type != '1'), 'position'=>27), - 'p.surface'=>array('label'=>'Surface', 'checked'=>0, 'enabled'=>(isModEnabled("product") && !getDolGlobalString('PRODUCT_DISABLE_SURFACE') && $type != '1'), 'position'=>28), - 'p.surface_units'=>array('label'=>'SurfaceUnits', 'checked'=>0, 'enabled'=>(isModEnabled("product") && !getDolGlobalString('PRODUCT_DISABLE_SURFACE') && $type != '1'), 'position'=>29), - 'p.volume'=>array('label'=>'Volume', 'checked'=>0, 'enabled'=>(isModEnabled("product") && !getDolGlobalString('PRODUCT_DISABLE_VOLUME') && $type != '1'), 'position'=>30), - 'p.volume_units'=>array('label'=>'VolumeUnits', 'checked'=>0, 'enabled'=>(isModEnabled("product") && !getDolGlobalString('PRODUCT_DISABLE_VOLUME') && $type != '1'), 'position'=>31), - 'cu.label'=>array('label'=>"DefaultUnitToShow", 'checked'=>0, 'enabled'=>(isModEnabled("product") && getDolGlobalString('PRODUCT_USE_UNITS')), 'position'=>32), - 'p.fk_default_workstation'=>array('label'=>'DefaultWorkstation', 'checked'=>0, 'enabled'=>isModEnabled('workstation') && $type == 1, 'position'=>33), - 'p.sellprice'=>array('label'=>"SellingPrice", 'checked'=>1, 'enabled'=>!getDolGlobalString('PRODUIT_MULTIPRICES'), 'position'=>40), - 'p.tva_tx'=>array('label'=>"VATRate", 'checked'=>0, 'enabled'=>!getDolGlobalString('PRODUIT_MULTIPRICES'), 'position'=>41), - 'p.minbuyprice'=>array('label'=>"BuyingPriceMinShort", 'checked'=>1, 'enabled'=>($user->hasRight('fournisseur', 'lire')), 'position'=>42), - 'p.numbuyprice'=>array('label'=>"BuyingPriceNumShort", 'checked'=>0, 'enabled'=>($user->hasRight('fournisseur', 'lire')), 'position'=>43), - 'p.pmp'=>array('label'=>"PMPValueShort", 'checked'=>0, 'enabled'=>($user->hasRight('fournisseur', 'lire')), 'position'=>44), - 'p.cost_price'=>array('label'=>"CostPrice", 'checked'=>0, 'enabled'=>($user->hasRight('fournisseur', 'lire')), 'position'=>45), - 'p.seuil_stock_alerte'=>array('label'=>"StockLimit", 'checked'=>0, 'enabled'=>(isModEnabled('stock') && $user->hasRight('stock', 'lire') && ($contextpage != 'servicelist' || getDolGlobalString('STOCK_SUPPORTS_SERVICES'))), 'position'=>50), - 'p.desiredstock'=>array('label'=>"DesiredStock", 'checked'=>1, 'enabled'=>(isModEnabled('stock') && $user->hasRight('stock', 'lire') && ($contextpage != 'servicelist' || getDolGlobalString('STOCK_SUPPORTS_SERVICES'))), 'position'=>51), - 'p.stock'=>array('label'=>"PhysicalStock", 'checked'=>1, 'enabled'=>(isModEnabled('stock') && $user->hasRight('stock', 'lire') && ($contextpage != 'servicelist' || getDolGlobalString('STOCK_SUPPORTS_SERVICES'))), 'position'=>52), - 'stock_virtual'=>array('label'=>"VirtualStock", 'checked'=>1, 'enabled'=>(isModEnabled('stock') && $user->hasRight('stock', 'lire') && ($contextpage != 'servicelist' || getDolGlobalString('STOCK_SUPPORTS_SERVICES')) && $virtualdiffersfromphysical), 'position'=>53), - 'p.tobatch'=>array('label'=>"ManageLotSerial", 'checked'=>0, 'enabled'=>(isModEnabled('productbatch')), 'position'=>60), - 'p.fk_country'=>array('label'=>"Country", 'checked'=>0, 'position'=>100), - 'p.fk_state'=>array('label'=>"State", 'checked'=>0, 'position'=>101), - $alias_product_perentity . '.accountancy_code_sell'=>array('label'=>"ProductAccountancySellCode", 'checked'=>0, 'enabled'=>!getDolGlobalString('PRODUCT_DISABLE_ACCOUNTING'), 'position'=>400), - $alias_product_perentity . '.accountancy_code_sell_intra'=>array('label'=>"ProductAccountancySellIntraCode", 'checked'=>0, 'enabled'=>$isInEEC && !getDolGlobalString('PRODUCT_DISABLE_ACCOUNTING'), 'position'=>401), - $alias_product_perentity . '.accountancy_code_sell_export'=>array('label'=>"ProductAccountancySellExportCode", 'checked'=>0, 'enabled'=>!getDolGlobalString('PRODUCT_DISABLE_ACCOUNTING'), 'position'=>402), - $alias_product_perentity . '.accountancy_code_buy'=>array('label'=>"ProductAccountancyBuyCode", 'checked'=>0, 'enabled'=>!getDolGlobalString('PRODUCT_DISABLE_ACCOUNTING'), 'position'=>403), - $alias_product_perentity . '.accountancy_code_buy_intra'=>array('label'=>"ProductAccountancyBuyIntraCode", 'checked'=>0, 'enabled'=>$isInEEC && !getDolGlobalString('PRODUCT_DISABLE_ACCOUNTING'), 'position'=>404), - $alias_product_perentity . '.accountancy_code_buy_export'=>array('label'=>"ProductAccountancyBuyExportCode", 'checked'=>0, 'enabled'=>!getDolGlobalString('PRODUCT_DISABLE_ACCOUNTING'), 'position'=>405), - 'p.datec'=>array('label'=>"DateCreation", 'checked'=>0, 'position'=>500), - 'p.tms'=>array('label'=>"DateModificationShort", 'checked'=>0, 'position'=>500), - 'p.tosell'=>array('label'=>$langs->transnoentitiesnoconv("Status").' ('.$langs->transnoentitiesnoconv("Sell").')', 'checked'=>1, 'position'=>1000), - 'p.tobuy'=>array('label'=>$langs->transnoentitiesnoconv("Status").' ('.$langs->transnoentitiesnoconv("Buy").')', 'checked'=>1, 'position'=>1000), - 'p.import_key' => array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>1, 'visible'=>-2, 'notnull'=>-1, 'index'=>0, 'checked'=>-1, 'position'=>1100), + 'thumbnail' => array('label' => 'Photo', 'checked' => 0, 'position' => 10), + 'p.description' => array('label' => 'Description', 'checked' => 0, 'position' => 10), + 'p.label' => array('label' => "Label", 'checked' => 1, 'position' => 10), + 'p.fk_product_type' => array('label' => "Type", 'checked' => 0, 'enabled' => (isModEnabled("product") && isModEnabled("service")), 'position' => 11), + 'p.barcode' => array('label' => "Gencod", 'checked' => 1, 'enabled' => (isModEnabled('barcode')), 'position' => 12), + 'p.duration' => array('label' => "Duration", 'checked' => ($contextpage != 'productlist'), 'enabled' => (isModEnabled("service") && (string) $type == '1'), 'position' => 13), + 'pac.fk_product_parent' => array('label' => "ParentProductOfVariant", 'checked' => -1, 'enabled' => (isModEnabled('variants')), 'position' => 14), + 'p.finished' => array('label' => "Nature", 'checked' => 0, 'enabled' => (isModEnabled("product") && $type != '1'), 'position' => 19), + 'p.weight' => array('label' => 'Weight', 'checked' => 0, 'enabled' => (isModEnabled("product") && $type != '1'), 'position' => 20), + 'p.weight_units' => array('label' => 'WeightUnits', 'checked' => 0, 'enabled' => (isModEnabled("product") && $type != '1'), 'position' => 21), + 'p.length' => array('label' => 'Length', 'checked' => 0, 'enabled' => (isModEnabled("product") && !getDolGlobalString('PRODUCT_DISABLE_SIZE') && $type != '1'), 'position' => 22), + 'p.length_units' => array('label' => 'LengthUnits', 'checked' => 0, 'enabled' => (isModEnabled("product") && !getDolGlobalString('PRODUCT_DISABLE_SIZE') && $type != '1'), 'position' => 23), + 'p.width' => array('label' => 'Width', 'checked' => 0, 'enabled' => (isModEnabled("product") && !getDolGlobalString('PRODUCT_DISABLE_SIZE') && $type != '1'), 'position' => 24), + 'p.width_units' => array('label' => 'WidthUnits', 'checked' => 0, 'enabled' => (isModEnabled("product") && !getDolGlobalString('PRODUCT_DISABLE_SIZE') && $type != '1'), 'position' => 25), + 'p.height' => array('label' => 'Height', 'checked' => 0, 'enabled' => (isModEnabled("product") && !getDolGlobalString('PRODUCT_DISABLE_SIZE') && $type != '1'), 'position' => 26), + 'p.height_units' => array('label' => 'HeightUnits', 'checked' => 0, 'enabled' => (isModEnabled("product") && !getDolGlobalString('PRODUCT_DISABLE_SIZE') && $type != '1'), 'position' => 27), + 'p.surface' => array('label' => 'Surface', 'checked' => 0, 'enabled' => (isModEnabled("product") && !getDolGlobalString('PRODUCT_DISABLE_SURFACE') && $type != '1'), 'position' => 28), + 'p.surface_units' => array('label' => 'SurfaceUnits', 'checked' => 0, 'enabled' => (isModEnabled("product") && !getDolGlobalString('PRODUCT_DISABLE_SURFACE') && $type != '1'), 'position' => 29), + 'p.volume' => array('label' => 'Volume', 'checked' => 0, 'enabled' => (isModEnabled("product") && !getDolGlobalString('PRODUCT_DISABLE_VOLUME') && $type != '1'), 'position' => 30), + 'p.volume_units' => array('label' => 'VolumeUnits', 'checked' => 0, 'enabled' => (isModEnabled("product") && !getDolGlobalString('PRODUCT_DISABLE_VOLUME') && $type != '1'), 'position' => 31), + 'cu.label' => array('label' => "DefaultUnitToShow", 'checked' => 0, 'enabled' => (isModEnabled("product") && getDolGlobalString('PRODUCT_USE_UNITS')), 'position' => 32), + 'p.fk_default_workstation' => array('label' => 'DefaultWorkstation', 'checked' => 0, 'enabled' => isModEnabled('workstation') && $type == 1, 'position' => 33), + 'p.sellprice' => array('label' => "SellingPrice", 'checked' => 1, 'enabled' => !getDolGlobalString('PRODUIT_MULTIPRICES'), 'position' => 40), + 'p.tva_tx' => array('label' => "VATRate", 'checked' => 0, 'enabled' => !getDolGlobalString('PRODUIT_MULTIPRICES'), 'position' => 41), + 'p.minbuyprice' => array('label' => "BuyingPriceMinShort", 'checked' => 1, 'enabled' => ($user->hasRight('fournisseur', 'lire')), 'position' => 42), + 'p.numbuyprice' => array('label' => "BuyingPriceNumShort", 'checked' => 0, 'enabled' => ($user->hasRight('fournisseur', 'lire')), 'position' => 43), + 'p.pmp' => array('label' => "PMPValueShort", 'checked' => 0, 'enabled' => ($user->hasRight('fournisseur', 'lire')), 'position' => 44), + 'p.cost_price' => array('label' => "CostPrice", 'checked' => 0, 'enabled' => ($user->hasRight('fournisseur', 'lire')), 'position' => 45), + 'p.seuil_stock_alerte' => array('label' => "StockLimit", 'checked' => 0, 'enabled' => (isModEnabled('stock') && $user->hasRight('stock', 'lire') && ($contextpage != 'servicelist' || getDolGlobalString('STOCK_SUPPORTS_SERVICES'))), 'position' => 50), + 'p.desiredstock' => array('label' => "DesiredStock", 'checked' => 1, 'enabled' => (isModEnabled('stock') && $user->hasRight('stock', 'lire') && ($contextpage != 'servicelist' || getDolGlobalString('STOCK_SUPPORTS_SERVICES'))), 'position' => 51), + 'p.stock' => array('label' => "PhysicalStock", 'checked' => 1, 'enabled' => (isModEnabled('stock') && $user->hasRight('stock', 'lire') && ($contextpage != 'servicelist' || getDolGlobalString('STOCK_SUPPORTS_SERVICES'))), 'position' => 52), + 'stock_virtual' => array('label' => "VirtualStock", 'checked' => 1, 'enabled' => (isModEnabled('stock') && $user->hasRight('stock', 'lire') && ($contextpage != 'servicelist' || getDolGlobalString('STOCK_SUPPORTS_SERVICES')) && $virtualdiffersfromphysical), 'position' => 53), + 'p.tobatch' => array('label' => "ManageLotSerial", 'checked' => 0, 'enabled' => (isModEnabled('productbatch')), 'position' => 60), + 'p.fk_country' => array('label' => "Country", 'checked' => 0, 'position' => 100), + 'p.fk_state' => array('label' => "State", 'checked' => 0, 'position' => 101), + $alias_product_perentity . '.accountancy_code_sell' => array('label' => "ProductAccountancySellCode", 'checked' => 0, 'enabled' => !getDolGlobalString('PRODUCT_DISABLE_ACCOUNTING'), 'position' => 400), + $alias_product_perentity . '.accountancy_code_sell_intra' => array('label' => "ProductAccountancySellIntraCode", 'checked' => 0, 'enabled' => $isInEEC && !getDolGlobalString('PRODUCT_DISABLE_ACCOUNTING'), 'position' => 401), + $alias_product_perentity . '.accountancy_code_sell_export' => array('label' => "ProductAccountancySellExportCode", 'checked' => 0, 'enabled' => !getDolGlobalString('PRODUCT_DISABLE_ACCOUNTING'), 'position' => 402), + $alias_product_perentity . '.accountancy_code_buy' => array('label' => "ProductAccountancyBuyCode", 'checked' => 0, 'enabled' => !getDolGlobalString('PRODUCT_DISABLE_ACCOUNTING'), 'position' => 403), + $alias_product_perentity . '.accountancy_code_buy_intra' => array('label' => "ProductAccountancyBuyIntraCode", 'checked' => 0, 'enabled' => $isInEEC && !getDolGlobalString('PRODUCT_DISABLE_ACCOUNTING'), 'position' => 404), + $alias_product_perentity . '.accountancy_code_buy_export' => array('label' => "ProductAccountancyBuyExportCode", 'checked' => 0, 'enabled' => !getDolGlobalString('PRODUCT_DISABLE_ACCOUNTING'), 'position' => 405), + 'p.datec' => array('label' => "DateCreation", 'checked' => 0, 'position' => 500), + 'p.tms' => array('label' => "DateModificationShort", 'checked' => 0, 'position' => 500), + 'p.tosell' => array('label' => $langs->transnoentitiesnoconv("Status").' ('.$langs->transnoentitiesnoconv("Sell").')', 'checked' => 1, 'position' => 1000), + 'p.tobuy' => array('label' => $langs->transnoentitiesnoconv("Status").' ('.$langs->transnoentitiesnoconv("Buy").')', 'checked' => 1, 'position' => 1000), + 'p.import_key' => array('type' => 'varchar(14)', 'label' => 'ImportId', 'enabled' => 1, 'visible' => -2, 'notnull' => -1, 'index' => 0, 'checked' => -1, 'position' => 1100), ); /*foreach ($object->fields as $key => $val) { // If $val['visible']==0, then we never show the field @@ -279,7 +281,7 @@ $arrayfields = array( $arrayfields['p.'.$key] = array( 'label'=>$val['label'], 'checked'=>(($visible < 0) ? 0 : 1), - 'enabled'=>($visible != 3 && dol_eval($val['enabled'], 1, 1, '1')), + 'enabled'=>(abs($visible) != 3 && (int) dol_eval($val['enabled'], 1, 1, '1')), 'position'=>$val['position'] ); } @@ -295,7 +297,7 @@ if (getDolGlobalString('PRODUIT_MULTIPRICES')) { } else { $labelp = $langs->transnoentitiesnoconv("SellingPrice")." ".$i; } - $arrayfields['p.sellprice'.$i] = array('label'=>$labelp, 'checked'=>($i == 1 ? 1 : 0), 'enabled'=>getDolGlobalString('PRODUIT_MULTIPRICES'), 'position'=>(float) ('40.'.sprintf('%03s', $i))); + $arrayfields['p.sellprice'.$i] = array('label' => $labelp, 'checked' => ($i == 1 ? 1 : 0), 'enabled' => getDolGlobalString('PRODUIT_MULTIPRICES'), 'position' => (float) ('40.'.sprintf('%03d', $i))); $arraypricelevel[$i] = array($i); } } @@ -747,7 +749,7 @@ if ($sall) { $param .= "&sall=".urlencode($sall); } if ($searchCategoryProductOperator == 1) { - $param .= "&search_category_product_operator=".urlencode($searchCategoryProductOperator); + $param .= "&search_category_product_operator=".urlencode((string) ($searchCategoryProductOperator)); } foreach ($searchCategoryProductList as $searchCategoryProduct) { $param .= "&search_category_product_list[]=".urlencode($searchCategoryProduct); @@ -777,22 +779,22 @@ if ($search_tobatch) { $param .= "&search_tobatch=".urlencode($search_tobatch); } if ($search_country != '') { - $param .= "&search_country=".urlencode($search_country); + $param .= "&search_country=".urlencode((string) ($search_country)); } if ($search_state != '') { - $param .= "&search_state=".urlencode($search_state); + $param .= "&search_state=".urlencode((string) ($search_state)); } if ($search_vatrate) { $param .= "&search_vatrate=".urlencode($search_vatrate); } if ($fourn_id > 0) { - $param .= "&fourn_id=".urlencode($fourn_id); + $param .= "&fourn_id=".urlencode((string) ($fourn_id)); } if ($show_childproducts) { $param .= ($show_childproducts ? "&search_show_childproducts=".urlencode($show_childproducts) : ""); } if ($type != '') { - $param .= '&type='.urlencode($type); + $param .= '&type='.urlencode((string) ($type)); } if ($search_type != '') { $param .= '&search_type='.urlencode($search_type); @@ -828,8 +830,8 @@ $param .= $hookmanager->resPrint; // List of mass actions available $arrayofmassactions = array( - 'generate_doc'=>img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("ReGeneratePDF"), - 'edit_extrafields'=>img_picto('', 'edit', 'class="pictofixedwidth"').$langs->trans("ModifyValueExtrafields"), + 'generate_doc' => img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("ReGeneratePDF"), + 'edit_extrafields' => img_picto('', 'edit', 'class="pictofixedwidth"').$langs->trans("ModifyValueExtrafields"), //'builddoc'=>img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("PDFMerge"), //'presend'=>img_picto('', 'email', 'class="pictofixedwidth"').$langs->trans("SendByMail"), ); @@ -850,8 +852,8 @@ if ($user->hasRight($rightskey, 'supprimer')) { $massactionbutton = $form->selectMassAction('', $arrayofmassactions); $newcardbutton = ''; -$newcardbutton .= dolGetButtonTitle($langs->trans('ViewList'), '', 'fa fa-bars imgforviewmode', $_SERVER["PHP_SELF"].'?mode=common'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ((empty($mode) || $mode == 'common') ? 2 : 1), array('morecss'=>'reposition')); -$newcardbutton .= dolGetButtonTitle($langs->trans('ViewKanban'), '', 'fa fa-th-list imgforviewmode', $_SERVER["PHP_SELF"].'?mode=kanban'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ($mode == 'kanban' ? 2 : 1), array('morecss'=>'reposition')); +$newcardbutton .= dolGetButtonTitle($langs->trans('ViewList'), '', 'fa fa-bars imgforviewmode', $_SERVER["PHP_SELF"].'?mode=common'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ((empty($mode) || $mode == 'common') ? 2 : 1), array('morecss' => 'reposition')); +$newcardbutton .= dolGetButtonTitle($langs->trans('ViewKanban'), '', 'fa fa-th-list imgforviewmode', $_SERVER["PHP_SELF"].'?mode=kanban'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ($mode == 'kanban' ? 2 : 1), array('morecss' => 'reposition')); if ($type === "") { $perm = ($user->hasRight('produit', 'creer') || $user->hasRight('service', 'creer')); @@ -860,8 +862,8 @@ if ($type === "") { } elseif ($type == Product::TYPE_PRODUCT) { $perm = $user->hasRight('produit', 'creer'); } - $oldtype = $type; - $params = array(); +$oldtype = $type; +$params = array(); if ($type === "") { $params['forcenohideoftext'] = 1; } @@ -926,7 +928,7 @@ if ($sall) { // Filter on categories $moreforfilter = ''; -if (isModEnabled('categorie') && $user->hasRight('categorie', 'read')) { +if (isModEnabled('category') && $user->hasRight('categorie', 'read')) { $formcategory = new FormCategory($db); $moreforfilter .= $formcategory->getFilterBox(Categorie::TYPE_PRODUCT, $searchCategoryProductList, 'minwidth300', $searchCategoryProductOperator ? $searchCategoryProductOperator : 0); } @@ -954,7 +956,7 @@ if (!empty($moreforfilter)) { } $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; -$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')) : ''); // This also change content of $arrayfields +$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) : ''); // This also change content of $arrayfields $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); print '
'; @@ -998,7 +1000,7 @@ if (!empty($arrayfields['p.label']['checked'])) { // Type if (!empty($arrayfields['p.fk_product_type']['checked'])) { print '
'; - $array = array('-1'=>' ', '0'=>$langs->trans('Product'), '1'=>$langs->trans('Service')); + $array = array('-1' => ' ', '0' => $langs->trans('Product'), '1' => $langs->trans('Service')); print $form->selectarray('search_type', $array, $search_type); print ''; - print $form->selectarray('search_tosell', array('0'=>$langs->trans('ProductStatusNotOnSellShort'), '1'=>$langs->trans('ProductStatusOnSellShort')), $search_tosell, 1, 0, 0, '', 0, 0, 0, '', 'search_status width100 onrightofpage'); + print $form->selectarray('search_tosell', array('0' => $langs->trans('ProductStatusNotOnSellShort'), '1' => $langs->trans('ProductStatusOnSellShort')), $search_tosell, 1, 0, 0, '', 0, 0, 0, '', 'search_status width100 onrightofpage'); print ''; - print $form->selectarray('search_tobuy', array('0'=>$langs->trans('ProductStatusNotOnBuyShort'), '1'=>$langs->trans('ProductStatusOnBuyShort')), $search_tobuy, 1, 0, 0, '', 0, 0, 0, '', 'search_status width100 onrightofpage'); + print $form->selectarray('search_tobuy', array('0' => $langs->trans('ProductStatusNotOnBuyShort'), '1' => $langs->trans('ProductStatusOnBuyShort')), $search_tobuy, 1, 0, 0, '', 0, 0, 0, '', 'search_status width100 onrightofpage'); print ''.dol_escape_htmltag($vals['label']).''.$vals['nbline'].'
'.$langs->trans("SelectTheTypeOfObjectToAnalyze").'
'.$langs->trans("PriceLabel").''; + print $object->price_label; print '
'; + print $langs->trans('PriceLabel'); + print ''; + print ''; + print '
'.$langs->trans("MinPrice").' '.$langs->trans("HT").''.$langs->trans("MinPrice").' '.$langs->trans("TTC").''.$langs->trans("Label").''.$langs->trans("ChangedBy").' '; + print $objp->price_label; + print ''; if ($objp->user_id > 0) { @@ -1876,6 +1904,7 @@ if ((!getDolGlobalString('PRODUIT_CUSTOMER_PRICES') || $action == 'showlog_defau } print '
'; + print $langs->trans('PriceLabel'); + print ''; + print ''; + print '
'; print ''; @@ -2035,7 +2072,7 @@ if (getDolGlobalString('PRODUIT_CUSTOMER_PRICES')) { print ''; print load_fiche_titre($langs->trans('PriceByCustomer')); - $result = $prodcustprice->fetch(GETPOST('lineid', 'int')); + $result = $prodcustprice->fetch(GETPOSTINT('lineid')); if ($result < 0) { setEventMessages($prodcustprice->error, $prodcustprice->errors, 'errors'); } @@ -2099,6 +2136,16 @@ if (getDolGlobalString('PRODUIT_CUSTOMER_PRICES')) { } print '
'; + print $langs->trans('PriceLabel'); + print ''; + print ''; + print '
'; @@ -2115,7 +2162,7 @@ if (getDolGlobalString('PRODUIT_CUSTOMER_PRICES')) { // List of all log of prices by customers print ''."\n"; - $filter = array('t.fk_product' => $object->id, 't.fk_soc' => GETPOST('socid', 'int')); + $filter = array('t.fk_product' => $object->id, 't.fk_soc' => GETPOSTINT('socid')); // Count total nb of records $nbtotalofrecords = ''; @@ -2128,16 +2175,17 @@ if (getDolGlobalString('PRODUIT_CUSTOMER_PRICES')) { setEventMessages($prodcustprice->error, $prodcustprice->errors, 'errors'); } - $option = '&socid='.GETPOST('socid', 'int').'&id='.$object->id; + $option = '&socid='.GETPOSTINT('socid').'&id='.$object->id; $staticsoc = new Societe($db); - $staticsoc->fetch(GETPOST('socid', 'int')); + $staticsoc->fetch(GETPOSTINT('socid')); $title = $langs->trans('PriceByCustomerLog'); $title .= ' - '.$staticsoc->getNomUrl(1); $backbutton = ''.$langs->trans("Back").''; + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder print_barre_liste($title, $page, $_SERVER['PHP_SELF'], $option, $sortfield, $sortorder, $backbutton, count($prodcustprice->lines), $nbtotalofrecords, 'title_accountancy.png'); if (count($prodcustprice->lines) > 0) { @@ -2161,6 +2209,7 @@ if (getDolGlobalString('PRODUIT_CUSTOMER_PRICES')) { } print '
'.$langs->trans("MinPrice").' '.$langs->trans("HT").''.$langs->trans("MinPrice").' '.$langs->trans("TTC").''.$langs->trans("PriceLabel").''.$langs->trans("ChangedBy").' 
'.price($line->price_min).''.price($line->price_min_ttc).''.$line->price_label.'
'."\n"; if (count($prodcustprice->lines) > 0 || $search_soc) { - $colspan = 9; + $colspan = 10; if ($mysoc->localtax1_assuj == "1" || $mysoc->localtax2_assuj == "1") { $colspan++; } @@ -2297,6 +2348,7 @@ if (getDolGlobalString('PRODUIT_CUSTOMER_PRICES')) { } print ''; print ''; + print ''; print ''; print ''; print ''; @@ -2356,6 +2408,7 @@ if (getDolGlobalString('PRODUIT_CUSTOMER_PRICES')) { print ''; print ''; + print ''; print ''; if ($user->hasRight('produit', 'supprimer') || $user->hasRight('service', 'supprimer')) { @@ -2434,6 +2487,7 @@ if (getDolGlobalString('PRODUIT_CUSTOMER_PRICES')) { print ''; print ''; + print ''; // User $userstatic = new User($db); diff --git a/htdocs/product/reassort.php b/htdocs/product/reassort.php index 76c2e89c3e4..32d15a43939 100644 --- a/htdocs/product/reassort.php +++ b/htdocs/product/reassort.php @@ -41,18 +41,18 @@ $action = GETPOST('action', 'aZ09'); $sref = GETPOST("sref", 'alpha'); $snom = GETPOST("snom", 'alpha'); $sall = trim((GETPOST('search_all', 'alphanohtml') != '') ? GETPOST('search_all', 'alphanohtml') : GETPOST('sall', 'alphanohtml')); -$type = GETPOSTISSET('type') ? GETPOST('type', 'int') : Product::TYPE_PRODUCT; +$type = GETPOSTISSET('type') ? GETPOSTINT('type') : Product::TYPE_PRODUCT; $search_barcode = GETPOST("search_barcode", 'alpha'); $search_toolowstock = GETPOST('search_toolowstock'); $tosell = GETPOST("tosell"); $tobuy = GETPOST("tobuy"); -$fourn_id = GETPOST("fourn_id", 'int'); -$sbarcode = GETPOST("sbarcode", 'int'); +$fourn_id = GETPOSTINT("fourn_id"); +$sbarcode = GETPOSTINT("sbarcode"); $search_stock_physique = GETPOST('search_stock_physique', 'alpha'); $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0) { $page = 0; } @@ -62,7 +62,7 @@ if (!$sortfield) { if (!$sortorder) { $sortorder = "ASC"; } -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -71,9 +71,9 @@ $offset = $limit * $page; // Load sale and categ filters $search_sale = GETPOST("search_sale"); if (GETPOSTISSET('catid')) { - $search_categ = GETPOST('catid', 'int'); + $search_categ = GETPOSTINT('catid'); } else { - $search_categ = GETPOST('search_categ', 'int'); + $search_categ = GETPOSTINT('search_categ'); } // Get object canvas (By default, this is not defined, so standard usage of dolibarr) @@ -141,7 +141,11 @@ if (!empty($objp->stock_physique) && $objp->stock_physique < 0) { $sql = 'SELECT p.rowid, p.ref, p.label, p.barcode, p.price, p.price_ttc, p.price_base_type, p.entity,'; $sql .= ' p.fk_product_type, p.tms as datem,'; $sql .= ' p.duration, p.tosell as statut, p.tobuy, p.seuil_stock_alerte, p.desiredstock,'; -$sql .= ' SUM(s.reel) as stock_physique'; +if (getDolGlobalString('PRODUCT_STOCK_LIST_SHOW_WITH_PRECALCULATED_DENORMALIZED_PHYSICAL_STOCK')) { + $sql .= ' p.stock as stock_physique'; +} else { + $sql .= ' SUM(s.reel) as stock_physique'; +} if (getDolGlobalString('PRODUCT_USE_UNITS')) { $sql .= ', u.short_label as unit_short'; } @@ -150,7 +154,9 @@ $parameters = array(); $reshook = $hookmanager->executeHooks('printFieldListSelect', $parameters, $object); // Note that $action and $object may have been modified by hook $sql .= $hookmanager->resPrint; $sql .= ' FROM '.MAIN_DB_PREFIX.'product as p'; -$sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'product_stock as s ON p.rowid = s.fk_product'; +if (!getDolGlobalString('PRODUCT_STOCK_LIST_SHOW_WITH_PRECALCULATED_DENORMALIZED_PHYSICAL_STOCK')) { + $sql .= ' LEFT JOIN ' . MAIN_DB_PREFIX . 'product_stock as s ON p.rowid = s.fk_product'; +} if (getDolGlobalString('PRODUCT_USE_UNITS')) { $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_units as u on p.fk_unit = u.rowid'; } @@ -175,43 +181,45 @@ if (!empty($search_categ) && $search_categ != '-1') { } $sql .= ")"; } -if (!getDolGlobalString('PRODUCT_STOCK_LIST_SHOW_VIRTUAL_WITH_NO_PHYSICAL')) { - $sql .= " AND EXISTS (SELECT e.rowid FROM ".MAIN_DB_PREFIX."entrepot as e WHERE e.rowid = s.fk_entrepot AND e.entity IN (".getEntity('stock')."))"; -} else { - $sql .= " AND +if (!getDolGlobalString('PRODUCT_STOCK_LIST_SHOW_WITH_PRECALCULATED_DENORMALIZED_PHYSICAL_STOCK')) { + if (!getDolGlobalString('PRODUCT_STOCK_LIST_SHOW_VIRTUAL_WITH_NO_PHYSICAL')) { + $sql .= " AND EXISTS (SELECT e.rowid FROM " . MAIN_DB_PREFIX . "entrepot as e WHERE e.rowid = s.fk_entrepot AND e.entity IN (" . getEntity('stock') . "))"; + } else { + $sql .= " AND ( - EXISTS - (SELECT e.rowid - FROM ".MAIN_DB_PREFIX."entrepot as e - WHERE e.rowid = s.fk_entrepot AND e.entity IN (".getEntity('stock').")) + EXISTS + (SELECT e.rowid + FROM " . MAIN_DB_PREFIX . "entrepot as e + WHERE e.rowid = s.fk_entrepot AND e.entity IN (" . getEntity('stock') . ")) OR ( - SELECT SUM(cd1.qty) as qty - FROM ".MAIN_DB_PREFIX."commande_fournisseurdet as cd1 - LEFT JOIN ".MAIN_DB_PREFIX."commande_fournisseur as c1 - ON c1.rowid = cd1.fk_commande + SELECT SUM(cd1.qty) as qty + FROM " . MAIN_DB_PREFIX . "commande_fournisseurdet as cd1 + LEFT JOIN " . MAIN_DB_PREFIX . "commande_fournisseur as c1 + ON c1.rowid = cd1.fk_commande WHERE c1.entity IN (1) AND cd1.fk_product = p.rowid AND c1.fk_statut in (3,4) AND cd1.qty <> 0 ) IS NOT NULL OR ( - SELECT SUM(cd2.qty) as qty - FROM ".MAIN_DB_PREFIX."commandedet as cd2 - LEFT JOIN ".MAIN_DB_PREFIX."commande as c2 ON c2.rowid = cd2.fk_commande + SELECT SUM(cd2.qty) as qty + FROM " . MAIN_DB_PREFIX . "commandedet as cd2 + LEFT JOIN " . MAIN_DB_PREFIX . "commande as c2 ON c2.rowid = cd2.fk_commande WHERE c2.entity IN (1) AND cd2.fk_product = p.rowid AND c2.fk_statut in (1,2) AND cd2.qty <> 0 ) IS NOT NULL OR ( - SELECT SUM(ed3.qty) as qty - FROM ".MAIN_DB_PREFIX."expeditiondet as ed3 - LEFT JOIN ".MAIN_DB_PREFIX."expedition as e3 ON e3.rowid = ed3.fk_expedition - LEFT JOIN ".MAIN_DB_PREFIX."commandedet as cd3 ON ed3.fk_origin_line = cd3.rowid - LEFT JOIN ".MAIN_DB_PREFIX."commande as c3 ON c3.rowid = cd3.fk_commande + SELECT SUM(ed3.qty) as qty + FROM " . MAIN_DB_PREFIX . "expeditiondet as ed3 + LEFT JOIN " . MAIN_DB_PREFIX . "expedition as e3 ON e3.rowid = ed3.fk_expedition + LEFT JOIN " . MAIN_DB_PREFIX . "commandedet as cd3 ON ed3.fk_origin_line = cd3.rowid + LEFT JOIN " . MAIN_DB_PREFIX . "commande as c3 ON c3.rowid = cd3.fk_commande WHERE e3.entity IN (1) AND cd3.fk_product = p.rowid AND c3.fk_statut IN (1,2) AND e3.fk_statut IN (1,2) AND ed3.qty <> 0 ) IS NOT NULL OR ( - SELECT SUM(mp4.qty) as qty - FROM ".MAIN_DB_PREFIX."mrp_production as mp4 - LEFT JOIN ".MAIN_DB_PREFIX."mrp_mo as m4 ON m4.rowid = mp4.fk_mo AND m4.entity IN (1) AND m4.status IN (1,2) + SELECT SUM(mp4.qty) as qty + FROM " . MAIN_DB_PREFIX . "mrp_production as mp4 + LEFT JOIN " . MAIN_DB_PREFIX . "mrp_mo as m4 ON m4.rowid = mp4.fk_mo AND m4.entity IN (1) AND m4.status IN (1,2) WHERE mp4.fk_product = p.rowid AND mp4.qty <> 0 ) IS NOT NULL ) "; + } } if ($sall) { $sql .= natural_search(array('p.ref', 'p.label', 'p.description', 'p.note'), $sall); @@ -245,12 +253,22 @@ if (!empty($canvas)) { if ($fourn_id > 0) { $sql .= " AND p.rowid = pf.fk_product AND pf.fk_soc = ".((int) $fourn_id); } +if (getDolGlobalString('PRODUCT_STOCK_LIST_SHOW_WITH_PRECALCULATED_DENORMALIZED_PHYSICAL_STOCK')) { + if ($search_toolowstock) { + $sql .= " AND p.stock < p.seuil_stock_alerte"; + } + if ($search_stock_physique != '') { + $sql .= natural_search('p.stock', $search_stock_physique, 1, 1); + } +} // Add where from hooks $parameters = array(); $reshook = $hookmanager->executeHooks('printFieldListWhere', $parameters, $object); // Note that $action and $object may have been modified by hook $sql .= $hookmanager->resPrint; -$sql .= " GROUP BY p.rowid, p.ref, p.label, p.barcode, p.price, p.price_ttc, p.price_base_type, p.entity,"; -$sql .= " p.fk_product_type, p.tms, p.duration, p.tosell, p.tobuy, p.seuil_stock_alerte, p.desiredstock"; +if (!getDolGlobalString('PRODUCT_STOCK_LIST_SHOW_WITH_PRECALCULATED_DENORMALIZED_PHYSICAL_STOCK')) { + $sql .= " GROUP BY p.rowid, p.ref, p.label, p.barcode, p.price, p.price_ttc, p.price_base_type, p.entity,"; + $sql .= " p.fk_product_type, p.tms, p.duration, p.tosell, p.tobuy, p.seuil_stock_alerte, p.desiredstock"; +} // Add GROUP BY from hooks $parameters = array(); @@ -258,19 +276,21 @@ $reshook = $hookmanager->executeHooks('printFieldListGroupBy', $parameters, $obj $sql .= $hookmanager->resPrint; $sql_having = ''; -if ($search_toolowstock) { - $sql_having .= " HAVING SUM(".$db->ifsql('s.reel IS NULL', '0', 's.reel').") < p.seuil_stock_alerte"; -} -if ($search_stock_physique != '') { - //$natural_search_physique = natural_search('HAVING SUM(' . $db->ifsql('s.reel IS NULL', '0', 's.reel') . ')', $search_stock_physique, 1, 1); - $natural_search_physique = natural_search('SUM(' . $db->ifsql('s.reel IS NULL', '0', 's.reel') . ')', $search_stock_physique, 1, 1); - $natural_search_physique = " " . substr($natural_search_physique, 1, -1); // remove first "(" and last ")" characters - if (!empty($sql_having)) { - $sql_having .= " AND"; - } else { - $sql_having .= " HAVING"; +if (!getDolGlobalString('PRODUCT_STOCK_LIST_SHOW_WITH_PRECALCULATED_DENORMALIZED_PHYSICAL_STOCK')) { + if ($search_toolowstock) { + $sql_having .= " HAVING SUM(" . $db->ifsql('s.reel IS NULL', '0', 's.reel') . ") < p.seuil_stock_alerte"; + } + if ($search_stock_physique != '') { + //$natural_search_physique = natural_search('HAVING SUM(' . $db->ifsql('s.reel IS NULL', '0', 's.reel') . ')', $search_stock_physique, 1, 1); + $natural_search_physique = natural_search('SUM(' . $db->ifsql('s.reel IS NULL', '0', 's.reel') . ')', $search_stock_physique, 1, 1); + $natural_search_physique = " " . substr($natural_search_physique, 1, -1); // remove first "(" and last ")" characters + if (!empty($sql_having)) { + $sql_having .= " AND"; + } else { + $sql_having .= " HAVING"; + } + $sql_having .= $natural_search_physique; } - $sql_having .= $natural_search_physique; } // Add HAVING from hooks @@ -340,10 +360,10 @@ if ($resql) { $param .= "&tobuy=".urlencode($tobuy); } if ($type != '') { - $param .= "&type=".urlencode($type); + $param .= "&type=".urlencode((string) ($type)); } if ($fourn_id) { - $param .= "&fourn_id=".urlencode($fourn_id); + $param .= "&fourn_id=".urlencode((string) ($fourn_id)); } if ($snom) { $param .= "&snom=".urlencode($snom); @@ -355,13 +375,13 @@ if ($resql) { $param .= "&search_sale=".urlencode($search_sale); } if ($search_categ > 0) { - $param .= "&search_categ=".urlencode($search_categ); + $param .= "&search_categ=".urlencode((string) ($search_categ)); } if ($search_toolowstock) { $param .= "&search_toolowstock=".urlencode($search_toolowstock); } if ($sbarcode) { - $param .= "&sbarcode=".urlencode($sbarcode); + $param .= "&sbarcode=".urlencode((string) ($sbarcode)); } if ($search_stock_physique) { $param .= '&search_stock_physique=' . urlencode($search_stock_physique); @@ -389,7 +409,7 @@ if ($resql) { // Filter on categories $moreforfilter = ''; - if (isModEnabled('categorie')) { + if (isModEnabled('category')) { $moreforfilter .= '
'; $moreforfilter .= img_picto($langs->trans('Categories'), 'category', 'class="pictofixedwidth"'); $moreforfilter .= $htmlother->select_categories(Categorie::TYPE_PRODUCT, $search_categ, 'search_categ', 1); @@ -499,7 +519,7 @@ if ($resql) { print_liste_field_titre("ProductStatusOnSell", $_SERVER["PHP_SELF"], "p.tosell", '', $param, "", $sortfield, $sortorder, 'right '); print_liste_field_titre("ProductStatusOnBuy", $_SERVER["PHP_SELF"], "p.tobuy", '', $param, "", $sortfield, $sortorder, 'right '); // Hook fields - $parameters = array('param'=>$param, 'sortfield'=>$sortfield, 'sortorder'=>$sortorder); + $parameters = array('param' => $param, 'sortfield' => $sortfield, 'sortorder' => $sortorder); $reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; // Action column @@ -597,7 +617,7 @@ if ($resql) { print '
'; print ''; // Fields from hook - $parameters = array('obj'=>$objp); + $parameters = array('obj' => $objp); $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters, $product); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; // Action column diff --git a/htdocs/product/reassortlot.php b/htdocs/product/reassortlot.php index ba066ce40d6..07873e790ad 100644 --- a/htdocs/product/reassortlot.php +++ b/htdocs/product/reassortlot.php @@ -50,7 +50,7 @@ $mode = GETPOST('mode', 'aZ'); $sref = GETPOST("sref", 'alpha'); $snom = GETPOST("snom", 'alpha'); $search_all = trim((GETPOST('search_all', 'alphanohtml') != '') ? GETPOST('search_all', 'alphanohtml') : GETPOST('sall', 'alphanohtml')); -$type = GETPOSTISSET('type') ? GETPOST('type', 'int') : Product::TYPE_PRODUCT; +$type = GETPOSTISSET('type') ? GETPOSTINT('type') : Product::TYPE_PRODUCT; $search_barcode = GETPOST("search_barcode", 'alpha'); $search_warehouse = GETPOST('search_warehouse', 'alpha'); $search_batch = GETPOST('search_batch', 'alpha'); @@ -58,15 +58,15 @@ $search_toolowstock = GETPOST('search_toolowstock'); $search_subjecttolotserial = GETPOST('search_subjecttolotserial'); $tosell = GETPOST("tosell"); $tobuy = GETPOST("tobuy"); -$fourn_id = GETPOST("fourn_id", 'int'); -$sbarcode = GETPOST("sbarcode", 'int'); +$fourn_id = GETPOSTINT("fourn_id"); +$sbarcode = GETPOSTINT("sbarcode"); $search_stock_physique = GETPOST('search_stock_physique', 'alpha'); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // If $page is not defined, or '' or -1 or if we click on clear filters $page = 0; @@ -79,11 +79,11 @@ $pagenext = $page + 1; $object = new Product($db); $search_sale = GETPOST("search_sale"); if (GETPOSTISSET('catid')) { - $search_categ = GETPOST('catid', 'int'); + $search_categ = GETPOSTINT('catid'); } else { - $search_categ = GETPOST('search_categ', 'int'); + $search_categ = GETPOSTINT('search_categ'); } -$search_warehouse_categ = GETPOST('search_warehouse_categ', 'int'); +$search_warehouse_categ = GETPOSTINT('search_warehouse_categ'); // Fetch optionals attributes and labels $extrafields->fetch_name_optionals_label($object->table_element); @@ -108,16 +108,16 @@ foreach ($object->fields as $key => $val) { $search[$key] = GETPOST('search_'.$key, 'alpha'); } if (preg_match('/^(date|timestamp|datetime)/', $val['type'])) { - $search[$key.'_dtstart'] = dol_mktime(0, 0, 0, GETPOST('search_'.$key.'_dtstartmonth', 'int'), GETPOST('search_'.$key.'_dtstartday', 'int'), GETPOST('search_'.$key.'_dtstartyear', 'int')); - $search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOST('search_'.$key.'_dtendmonth', 'int'), GETPOST('search_'.$key.'_dtendday', 'int'), GETPOST('search_'.$key.'_dtendyear', 'int')); + $search[$key.'_dtstart'] = dol_mktime(0, 0, 0, GETPOSTINT('search_'.$key.'_dtstartmonth'), GETPOSTINT('search_'.$key.'_dtstartday'), GETPOSTINT('search_'.$key.'_dtstartyear')); + $search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOSTINT('search_'.$key.'_dtendmonth'), GETPOSTINT('search_'.$key.'_dtendday'), GETPOSTINT('search_'.$key.'_dtendyear')); } } $key = 'sellby'; -$search[$key.'_dtstart'] = dol_mktime(0, 0, 0, GETPOST('search_'.$key.'_dtstartmonth', 'int'), GETPOST('search_'.$key.'_dtstartday', 'int'), GETPOST('search_'.$key.'_dtstartyear', 'int')); -$search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOST('search_'.$key.'_dtendmonth', 'int'), GETPOST('search_'.$key.'_dtendday', 'int'), GETPOST('search_'.$key.'_dtendyear', 'int')); +$search[$key.'_dtstart'] = dol_mktime(0, 0, 0, GETPOSTINT('search_'.$key.'_dtstartmonth'), GETPOSTINT('search_'.$key.'_dtstartday'), GETPOSTINT('search_'.$key.'_dtstartyear')); +$search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOSTINT('search_'.$key.'_dtendmonth'), GETPOSTINT('search_'.$key.'_dtendday'), GETPOSTINT('search_'.$key.'_dtendyear')); $key = 'eatby'; -$search[$key.'_dtstart'] = dol_mktime(0, 0, 0, GETPOST('search_'.$key.'_dtstartmonth', 'int'), GETPOST('search_'.$key.'_dtstartday', 'int'), GETPOST('search_'.$key.'_dtstartyear', 'int')); -$search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOST('search_'.$key.'_dtendmonth', 'int'), GETPOST('search_'.$key.'_dtendday', 'int'), GETPOST('search_'.$key.'_dtendyear', 'int')); +$search[$key.'_dtstart'] = dol_mktime(0, 0, 0, GETPOSTINT('search_'.$key.'_dtstartmonth'), GETPOSTINT('search_'.$key.'_dtstartday'), GETPOSTINT('search_'.$key.'_dtstartyear')); +$search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOSTINT('search_'.$key.'_dtendmonth'), GETPOSTINT('search_'.$key.'_dtendday'), GETPOSTINT('search_'.$key.'_dtendyear')); // Get object canvas (By default, this is not defined, so standard usage of dolibarr) $canvas = GETPOST("canvas"); @@ -139,15 +139,15 @@ $result = restrictedArea($user, 'produit|service', 0, 'product&product'); // Definition of array of fields for columns $arrayfields = array( - array('type'=>'varchar', 'label'=>'Ref', 'checked'=>1, 'enabled'=>1, 'position'=>1), - array('type'=>'varchar', 'label'=>'Label', 'checked'=>1, 'enabled'=>1, 'position'=>1), - array('type'=>'int', 'label'=>'Warehouse', 'checked'=>1, 'enabled'=>1, 'position'=>1), - array('type'=>'varchar', 'label'=>'Lot', 'checked'=>1, 'enabled'=>1, 'position'=>1), - array('type'=>'varchar', 'label'=>'DLC', 'checked'=>1, 'enabled'=>1, 'position'=>1), - array('type'=>'varchar', 'label'=>'DLUO', 'checked'=>1, 'enabled'=>1, 'position'=>1), - array('type'=>'int', 'label'=>'Stock', 'checked'=>1, 'enabled'=>1, 'position'=>1), - array('type'=>'int', 'label'=>'StatusSell', 'checked'=>1, 'enabled'=>1, 'position'=>1), - array('type'=>'int', 'label'=>'StatusBuy', 'checked'=>1, 'enabled'=>1, 'position'=>1), + array('type' => 'varchar', 'label' => 'Ref', 'checked' => 1, 'enabled' => 1, 'position' => 1), + array('type' => 'varchar', 'label' => 'Label', 'checked' => 1, 'enabled' => 1, 'position' => 1), + array('type' => 'int', 'label' => 'Warehouse', 'checked' => 1, 'enabled' => 1, 'position' => 1), + array('type' => 'varchar', 'label' => 'Lot', 'checked' => 1, 'enabled' => 1, 'position' => 1), + array('type' => 'varchar', 'label' => 'DLC', 'checked' => 1, 'enabled' => 1, 'position' => 1), + array('type' => 'varchar', 'label' => 'DLUO', 'checked' => 1, 'enabled' => 1, 'position' => 1), + array('type' => 'int', 'label' => 'Stock', 'checked' => 1, 'enabled' => 1, 'position' => 1), + array('type' => 'int', 'label' => 'StatusSell', 'checked' => 1, 'enabled' => 1, 'position' => 1), + array('type' => 'int', 'label' => 'StatusBuy', 'checked' => 1, 'enabled' => 1, 'position' => 1), ); //$arrayfields['anotherfield'] = array('type'=>'integer', 'label'=>'AnotherField', 'checked'=>1, 'enabled'=>1, 'position'=>90, 'csslist'=>'right'); @@ -214,11 +214,11 @@ if (empty($reshook)) { } // Mass actions - /*$objectclass = 'MyObject'; - $objectlabel = 'MyObject'; - $uploaddir = $conf->mymodule->dir_output; - include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; - */ + /*$objectclass = 'MyObject'; + $objectlabel = 'MyObject'; + $uploaddir = $conf->mymodule->dir_output; + include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; + */ } @@ -489,10 +489,10 @@ if ($tobuy) { $param .= "&tobuy=".urlencode($tobuy); } if ($type != '') { - $param .= "&type=".urlencode($type); + $param .= "&type=".urlencode((string) ($type)); } if ($fourn_id) { - $param .= "&fourn_id=".urlencode($fourn_id); + $param .= "&fourn_id=".urlencode((string) ($fourn_id)); } if ($snom) { $param .= "&snom=".urlencode($snom); @@ -504,7 +504,7 @@ if ($search_batch) { $param .= "&search_batch=".urlencode($search_batch); } if ($sbarcode) { - $param .= "&sbarcode=".urlencode($sbarcode); + $param .= "&sbarcode=".urlencode((string) ($sbarcode)); } if ($search_warehouse) { $param .= "&search_warehouse=".urlencode($search_warehouse); @@ -519,10 +519,10 @@ if ($search_sale) { $param .= "&search_sale=".urlencode($search_sale); } if (!empty($search_categ) && $search_categ != '-1') { - $param .= "&search_categ=".urlencode($search_categ); + $param .= "&search_categ=".urlencode((string) ($search_categ)); } if (!empty($search_warehouse_categ) && $search_warehouse_categ != '-1') { - $param .= "&search_warehouse_categ=".urlencode($search_warehouse_categ); + $param .= "&search_warehouse_categ=".urlencode((string) ($search_warehouse_categ)); } if ($search_stock_physique) { $param .= '&search_stock_physique=' . urlencode($search_stock_physique); @@ -560,21 +560,21 @@ if ($search_categ > 0) { // Filter on categories $moreforfilter = ''; -if (isModEnabled('categorie')) { +if (isModEnabled('category')) { $moreforfilter .= '
'; $moreforfilter .= img_picto($langs->trans('ProductsCategoriesShort'), 'category', 'class="pictofixedwidth"'); $moreforfilter .= $htmlother->select_categories(Categorie::TYPE_PRODUCT, $search_categ, 'search_categ', 1, $langs->trans("ProductsCategoryShort"), 'maxwidth400'); $moreforfilter .= '
'; } // Filter on warehouse categories -if (isModEnabled('categorie')) { +if (isModEnabled('category')) { $moreforfilter .= '
'; $moreforfilter .= img_picto($langs->trans('StockCategoriesShort'), 'category', 'class="pictofixedwidth"'); $moreforfilter .= $htmlother->select_categories(Categorie::TYPE_WAREHOUSE, $search_warehouse_categ, 'search_warehouse_categ', 1, $langs->trans("StockCategoriesShort"), 'maxwidth400'); $moreforfilter .= '
'; } -$moreforfilter.=''; +$moreforfilter .= ''; if (!empty($moreforfilter)) { @@ -686,7 +686,7 @@ print_liste_field_titre(''); print_liste_field_titre("ProductStatusOnSell", $_SERVER["PHP_SELF"], "p.tosell", "", $param, '', $sortfield, $sortorder, 'right '); print_liste_field_titre("ProductStatusOnBuy", $_SERVER["PHP_SELF"], "p.tobuy", "", $param, '', $sortfield, $sortorder, 'right '); // Hook fields -$parameters = array('param'=>$param, 'sortfield'=>$sortfield, 'sortorder'=>$sortorder); +$parameters = array('param' => $param, 'sortfield' => $sortfield, 'sortorder' => $sortorder); $reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) { @@ -875,7 +875,7 @@ while ($i < $imaxinloop) { } // Fields values from hook - $parameters = array('obj'=>$objp); + $parameters = array('obj' => $objp); $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters, $product); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; diff --git a/htdocs/product/stats/bom.php b/htdocs/product/stats/bom.php index 06fd8d17a41..73714afa21c 100644 --- a/htdocs/product/stats/bom.php +++ b/htdocs/product/stats/bom.php @@ -33,7 +33,7 @@ require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php'; // Load translation files required by the page $langs->loadLangs(array('mrp', 'products', 'companies')); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); // Security check @@ -50,10 +50,10 @@ $mesg = ''; $option = ''; // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -82,7 +82,7 @@ if ($id > 0 || !empty($ref)) { $object = $product; - $parameters = array('id'=>$id); + $parameters = array('id' => $id); $reshook = $hookmanager->executeHooks('doActions', $parameters, $product, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); @@ -130,7 +130,7 @@ if ($id > 0 || !empty($ref)) { //Calcul total qty and amount for global if full scan list $total_qty_toconsume = 0; $total_qty_toproduce = 0; - $product_cache=array(); + $product_cache = array(); $bom_data_result = array(); //Qauntity to produce @@ -283,7 +283,7 @@ if ($id > 0 || !empty($ref)) { print_barre_liste($langs->trans("BOMs"), $page, $_SERVER["PHP_SELF"], $option, $sortfield, $sortorder, '', count($bom_data_result), count($bom_data_result), '', 0, '', '', $limit, 0, 0, 1); if (!empty($page)) { - $option .= '&page='.urlencode($page); + $option .= '&page='.urlencode((string) ($page)); } print '
'; diff --git a/htdocs/product/stats/card.php b/htdocs/product/stats/card.php index f7dd11c382c..9f298b9d438 100644 --- a/htdocs/product/stats/card.php +++ b/htdocs/product/stats/card.php @@ -5,6 +5,7 @@ * Copyright (C) 2005 Eric Seigne * Copyright (C) 2013 Juanjo Menent * Copyright (C) 2019 Thibault FOUCART + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -41,19 +42,19 @@ $HEIGHT = DolGraph::getDefaultGraphSizeForStats('height', 160); // Load translation files required by the page $langs->loadLangs(array('companies', 'products', 'stocks', 'bills', 'other')); -$id = GETPOST('id', 'int'); // For this page, id can also be 'all' +$id = GETPOSTINT('id'); // For this page, id can also be 'all' $ref = GETPOST('ref', 'alpha'); $mode = (GETPOST('mode', 'alpha') ? GETPOST('mode', 'alpha') : 'byunit'); -$search_year = GETPOST('search_year', 'int'); -$search_categ = GETPOST('search_categ', 'int'); -$notab = GETPOST('notab', 'int'); +$search_year = GETPOSTINT('search_year'); +$search_categ = GETPOSTINT('search_categ'); +$notab = GETPOSTINT('notab'); $type = GETPOST('type', 'alpha'); $error = 0; $mesg = ''; $graphfiles = array(); -$socid = GETPOST('socid', 'int'); +$socid = GETPOSTINT('socid'); if (!empty($user->socid)) { $socid = $user->socid; } @@ -102,17 +103,13 @@ if (!($id > 0) && empty($ref) || $notab) { llxHeader("", $langs->trans("ProductStatistics")); - $type = GETPOST('type', 'int'); + $type = GETPOSTINT('type'); $helpurl = ''; if ($type == '0') { $helpurl = 'EN:Module_Products|FR:Module_Produits|ES:Módulo_Productos'; //$title=$langs->trans("StatisticsOfProducts"); $title = $langs->trans("Statistics"); - } elseif ($type == '1') { - $helpurl = 'EN:Module_Services_En|FR:Module_Services|ES:Módulo_Servicios'; - //$title=$langs->trans("StatisticsOfServices"); - $title = $langs->trans("Statistics"); } else { $helpurl = 'EN:Module_Services_En|FR:Module_Services|ES:Módulo_Servicios'; //$title=$langs->trans("StatisticsOfProductsOrServices"); @@ -203,7 +200,7 @@ if ($result || !($id > 0)) { if (!($id > 0) || $notab) { // Type print '
'; @@ -214,7 +211,7 @@ if ($result || !($id > 0)) { print ''; // Tag - if (isModEnabled('categorie')) { + if (isModEnabled('category')) { print '\n"; diff --git a/htdocs/product/stats/facture_fournisseur.php b/htdocs/product/stats/facture_fournisseur.php index 7951d82799e..2ee2e18b793 100644 --- a/htdocs/product/stats/facture_fournisseur.php +++ b/htdocs/product/stats/facture_fournisseur.php @@ -35,7 +35,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php'; // Load translation files required by the page $langs->loadLangs(array('companies', 'bills', 'products', 'companies', 'supplier_proposal')); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); // Security check @@ -50,10 +50,10 @@ if (!empty($user->socid)) { $hookmanager->initHooks(array('productstatssupplierinvoice')); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -66,8 +66,8 @@ if (!$sortorder) { if (!$sortfield) { $sortfield = "f.datef"; } -$search_month = GETPOST('search_month', 'int'); -$search_year = GETPOST('search_year', 'int'); +$search_month = GETPOSTINT('search_month'); +$search_year = GETPOSTINT('search_year'); if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter', 'alpha')) { $search_month = ''; @@ -190,10 +190,10 @@ if ($id > 0 || !empty($ref)) { $option .= '&limit='.((int) $limit); } if (!empty($search_month)) { - $option .= '&search_month='.urlencode($search_month); + $option .= '&search_month='.urlencode((string) ($search_month)); } if (!empty($search_year)) { - $option .= '&search_year='.urlencode($search_year); + $option .= '&search_year='.urlencode((string) ($search_year)); } print ''."\n"; @@ -205,10 +205,11 @@ if ($id > 0 || !empty($ref)) { print ''; } + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder print_barre_liste($langs->trans("SuppliersInvoices"), $page, $_SERVER["PHP_SELF"], $option, $sortfield, $sortorder, '', $num, $totalofrecords, '', 0, '', '', $limit, 0, 0, 1); if (!empty($page)) { - $option .= '&page='.urlencode($page); + $option .= '&page='.urlencode((string) ($page)); } print '
'; diff --git a/htdocs/product/stats/facturerec.php b/htdocs/product/stats/facturerec.php index 3374f353391..83d66963e51 100644 --- a/htdocs/product/stats/facturerec.php +++ b/htdocs/product/stats/facturerec.php @@ -36,7 +36,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php'; // Load translation files required by the page $langs->loadLangs(array('companies', 'bills', 'products', 'supplier_proposal')); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); // Security check @@ -53,10 +53,10 @@ $hookmanager->initHooks(array('productstatsinvoice')); $showmessage = GETPOST('showmessage'); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -70,8 +70,8 @@ if (!$sortfield) { $sortfield = "f.datec"; } -$search_month = GETPOST('search_month', 'int'); -$search_year = GETPOST('search_year', 'int'); +$search_month = GETPOSTINT('search_month'); +$search_year = GETPOSTINT('search_year'); if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter', 'alpha')) { $search_month = ''; @@ -97,7 +97,7 @@ if ($id > 0 || !empty($ref)) { $object = $product; - $parameters = array('id'=>$id); + $parameters = array('id' => $id); $reshook = $hookmanager->executeHooks('doActions', $parameters, $product, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); @@ -208,10 +208,10 @@ if ($id > 0 || !empty($ref)) { $option .= '&limit='.((int) $limit); } if (!empty($search_month)) { - $option .= '&search_month='.urlencode($search_month); + $option .= '&search_month='.urlencode((string) ($search_month)); } if (!empty($search_year)) { - $option .= '&search_year='.urlencode($search_year); + $option .= '&search_year='.urlencode((string) ($search_year)); } print ''."\n"; @@ -223,10 +223,11 @@ if ($id > 0 || !empty($ref)) { print ''; } + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder print_barre_liste($langs->trans("CustomersInvoices"), $page, $_SERVER["PHP_SELF"], $option, $sortfield, $sortorder, '', $num, $totalofrecords, '', 0, '', '', $limit, 0, 0, 1); if (!empty($page)) { - $option .= '&page='.urlencode($page); + $option .= '&page='.urlencode((string) ($page)); } print '
'; diff --git a/htdocs/product/stats/mo.php b/htdocs/product/stats/mo.php index bdd561f79fc..d98a73fbc79 100644 --- a/htdocs/product/stats/mo.php +++ b/htdocs/product/stats/mo.php @@ -34,7 +34,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php'; // Load translation files required by the page $langs->loadLangs(array('mrp', 'products', 'companies')); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); // Security check @@ -48,10 +48,10 @@ if ($user->socid) { $hookmanager->initHooks(array('productstatsmo')); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -65,8 +65,8 @@ if (!$sortfield) { $sortfield = "c.date_valid"; } -$search_month = GETPOST('search_month', 'int'); -$search_year = GETPOST('search_year', 'int'); +$search_month = GETPOSTINT('search_month'); +$search_year = GETPOSTINT('search_year'); if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter', 'alpha')) { $search_month = ''; @@ -92,7 +92,7 @@ if ($id > 0 || !empty($ref)) { $object = $product; - $parameters = array('id'=>$id); + $parameters = array('id' => $id); $reshook = $hookmanager->executeHooks('doActions', $parameters, $product, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); @@ -186,10 +186,10 @@ if ($id > 0 || !empty($ref)) { $option .= '&limit='.((int) $limit); } if (!empty($search_month)) { - $option .= '&search_month='.urlencode($search_month); + $option .= '&search_month='.urlencode((string) ($search_month)); } if (!empty($search_year)) { - $option .= '&search_year='.urlencode($search_year); + $option .= '&search_year='.urlencode((string) ($search_year)); } print ''."\n"; @@ -201,10 +201,11 @@ if ($id > 0 || !empty($ref)) { print ''; } + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder print_barre_liste($langs->trans("MOs"), $page, $_SERVER["PHP_SELF"], $option, $sortfield, $sortorder, '', $num, $totalofrecords, '', 0, '', '', $limit, 0, 0, 1); if (!empty($page)) { - $option .= '&page='.urlencode($page); + $option .= '&page='.urlencode((string) ($page)); } print '
'; diff --git a/htdocs/product/stats/propal.php b/htdocs/product/stats/propal.php index e2f26e810b7..9e6084f78c5 100644 --- a/htdocs/product/stats/propal.php +++ b/htdocs/product/stats/propal.php @@ -34,7 +34,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php'; // Load translation files required by the page $langs->loadLangs(array('products', 'companies')); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); // Security check @@ -50,10 +50,10 @@ $result = restrictedArea($user, 'produit|service', $fieldvalue, 'product&product $hookmanager->initHooks(array('productstatspropal')); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -67,8 +67,8 @@ if (!$sortfield) { $sortfield = "p.datep"; } -$search_month = GETPOST('search_month', 'int'); -$search_year = GETPOST('search_year', 'int'); +$search_month = GETPOSTINT('search_month'); +$search_year = GETPOSTINT('search_year'); if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter', 'alpha')) { $search_month = ''; @@ -192,10 +192,10 @@ if ($id > 0 || !empty($ref)) { $option .= '&limit='.((int) $limit); } if (!empty($search_month)) { - $option .= '&search_month='.urlencode($search_month); + $option .= '&search_month='.urlencode((string) ($search_month)); } if (!empty($search_year)) { - $option .= '&search_year='.urlencode($search_year); + $option .= '&search_year='.urlencode((string) ($search_year)); } print ''."\n"; @@ -207,10 +207,11 @@ if ($id > 0 || !empty($ref)) { print ''; } + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder print_barre_liste($langs->trans("Proposals"), $page, $_SERVER["PHP_SELF"], $option, $sortfield, $sortorder, '', $num, $totalofrecords, '', 0, '', '', $limit, 0, 0, 1); if (!empty($page)) { - $option .= '&page='.urlencode($page); + $option .= '&page='.urlencode((string) ($page)); } print '
'; diff --git a/htdocs/product/stats/supplier_proposal.php b/htdocs/product/stats/supplier_proposal.php index 3f178ee0b7e..5c755024acd 100644 --- a/htdocs/product/stats/supplier_proposal.php +++ b/htdocs/product/stats/supplier_proposal.php @@ -34,7 +34,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php'; // Load translation files required by the page $langs->loadLangs(array('products', 'companies', 'supplier_proposal')); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); // Security check @@ -49,10 +49,10 @@ if (!empty($user->socid)) { $hookmanager->initHooks(array('productstatssupplierpropal')); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -66,8 +66,8 @@ if (!$sortfield) { $sortfield = "p.date_valid"; } -$search_month = GETPOST('search_month', 'int'); -$search_year = GETPOST('search_year', 'int'); +$search_month = GETPOSTINT('search_month'); +$search_year = GETPOSTINT('search_year'); if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter', 'alpha')) { $search_month = ''; @@ -191,10 +191,10 @@ if ($id > 0 || !empty($ref)) { $option .= '&limit='.((int) $limit); } if (!empty($search_month)) { - $option .= '&search_month='.urlencode($search_month); + $option .= '&search_month='.urlencode((string) ($search_month)); } if (!empty($search_year)) { - $option .= '&search_year='.urlencode($search_year); + $option .= '&search_year='.urlencode((string) ($search_year)); } print ''."\n"; @@ -206,10 +206,11 @@ if ($id > 0 || !empty($ref)) { print ''; } + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder print_barre_liste($langs->trans("Proposals"), $page, $_SERVER["PHP_SELF"], $option, $sortfield, $sortorder, '', $num, $totalofrecords, '', 0, '', '', $limit, 0, 0, 1); if (!empty($page)) { - $option .= '&page='.urlencode($page); + $option .= '&page='.urlencode((string) ($page)); } print '
'; diff --git a/htdocs/product/stock/card.php b/htdocs/product/stock/card.php index a5c32a79043..c812e507035 100644 --- a/htdocs/product/stock/card.php +++ b/htdocs/product/stock/card.php @@ -51,14 +51,14 @@ $langs->loadLangs(array('products', 'stocks', 'companies', 'categories')); $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'alpha'); $confirm = GETPOST('confirm'); -$projectid = GETPOST('projectid', 'int'); +$projectid = GETPOSTINT('projectid'); -$id = GETPOST('id', 'int'); -$socid = GETPOST('socid', 'int'); +$id = GETPOSTINT('id'); +$socid = GETPOSTINT('socid'); $ref = GETPOST('ref', 'alpha'); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); if (!$sortfield) { @@ -103,7 +103,7 @@ $usercandelete = (($user->hasRight('stock', 'supprimer'))); $error = 0; -$parameters = array('id'=>$id, 'ref'=>$ref); +$parameters = array('id' => $id, 'ref' => $ref); $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); @@ -168,7 +168,7 @@ if (empty($reshook)) { header("Location: ".$backtopage); exit; } else { - header("Location: card.php?id=".urlencode($id)); + header("Location: card.php?id=".urlencode((string) ($id))); exit; } } else { @@ -184,7 +184,7 @@ if (empty($reshook)) { // Delete warehouse if ($action == 'confirm_delete' && $confirm == 'yes' && $user->hasRight('stock', 'supprimer')) { - $object->fetch(GETPOST('id', 'int')); + $object->fetch(GETPOSTINT('id')); $result = $object->delete($user); if ($result > 0) { setEventMessages($langs->trans("RecordDeleted"), null, 'mesgs'); @@ -257,7 +257,7 @@ if (empty($reshook)) { } } elseif ($action == 'classin' && $usercancreate) { // Link to a project - $object->setProject(GETPOST('projectid', 'int')); + $object->setProject(GETPOSTINT('projectid')); } if ($cancel == $langs->trans("Cancel")) { @@ -315,7 +315,7 @@ if ($action == 'create') { // Parent entrepot print '
'; // Project @@ -382,7 +382,7 @@ if ($action == 'create') { // Other attributes include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_add.tpl.php'; - if (isModEnabled('categorie')) { + if (isModEnabled('category')) { // Categories print '"; @@ -659,7 +659,7 @@ if ($action == 'create') { $totalarray['nbfield']++; } // Hook fields - $parameters = array('sortfield'=>$sortfield, 'sortorder'=>$sortorder, 'totalarray' => &$totalarray); + $parameters = array('sortfield' => $sortfield, 'sortorder' => $sortorder, 'totalarray' => &$totalarray); $reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; print "\n"; @@ -744,7 +744,7 @@ if ($action == 'create') { //print ''; print ''; - $parameters = array('obj'=>$objp, 'totalarray' => &$totalarray); + $parameters = array('obj' => $objp, 'totalarray' => &$totalarray); $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; @@ -961,7 +961,7 @@ if ($action == 'create') { } // Tags-Categories - if (isModEnabled('categorie')) { + if (isModEnabled('category')) { print '"; @@ -1002,28 +1004,28 @@ if ($limit > 0 && $limit != $conf->liste_limit) { $param .= '&limit='.((int) $limit); } if ($id > 0) { - $param .= '&id='.urlencode($id); + $param .= '&id='.urlencode((string) ($id)); } if ($show_files) { - $param .= '&show_files='.urlencode($show_files); + $param .= '&show_files='.urlencode((string) ($show_files)); } if ($search_date_startday) { - $param .= '&search_date_startday='.urlencode($search_date_startday); + $param .= '&search_date_startday='.urlencode((string) ($search_date_startday)); } if ($search_date_startmonth) { - $param .= '&search_date_startmonth='.urlencode($search_date_startmonth); + $param .= '&search_date_startmonth='.urlencode((string) ($search_date_startmonth)); } if ($search_date_startyear) { - $param .= '&search_date_startyear='.urlencode($search_date_startyear); + $param .= '&search_date_startyear='.urlencode((string) ($search_date_startyear)); } if ($search_date_endday) { - $param .= '&search_date_endday='.urlencode($search_date_endday); + $param .= '&search_date_endday='.urlencode((string) ($search_date_endday)); } if ($search_date_endmonth) { - $param .= '&search_date_endmonth='.urlencode($search_date_endmonth); + $param .= '&search_date_endmonth='.urlencode((string) ($search_date_endmonth)); } if ($search_date_endyear) { - $param .= '&search_date_endyear='.urlencode($search_date_endyear); + $param .= '&search_date_endyear='.urlencode((string) ($search_date_endyear)); } if ($search_movement) { $param .= '&search_movement='.urlencode($search_movement); @@ -1050,10 +1052,10 @@ if ($search_user) { $param .= '&search_user='.urlencode($search_user); } if ($idproduct > 0) { - $param .= '&idproduct='.urlencode($idproduct); + $param .= '&idproduct='.urlencode((string) ($idproduct)); } if ($search_fk_project != '' && $search_fk_project != '-1') { - $param .= '&search_fk_project='.urlencode($search_fk_project); + $param .= '&search_fk_project='.urlencode((string) ($search_fk_project)); } // Add $param from extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php'; @@ -1074,7 +1076,7 @@ if (getDolGlobalString('STOCK_ALLOW_DELETE_OF_MOVEMENT') && $permissiontodelete) if (!empty($permissiontoadd)) { $arrayofmassactions['prereverse'] = img_picto('', 'add', 'class="pictofixedwidth"').$langs->trans("Reverse"); } -if (GETPOST('nomassaction', 'int') || in_array($massaction, array('presend', 'predelete', 'prereverse'))) { +if (GETPOSTINT('nomassaction') || in_array($massaction, array('presend', 'predelete', 'prereverse'))) { $arrayofmassactions = array(); } @@ -1101,11 +1103,7 @@ if ($id > 0) { $newcardbutton = ''; -if ($id > 0) { - print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'movement', 0, '', '', $limit, 0, 0, 1); -} else { - print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'movement', 0, '', '', $limit, 0, 0, 1); -} +print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'movement', 0, '', '', $limit, 0, 0, 1); // Add code for pre mass action (confirmation or email presend form) $topicmail = "SendStockMovement"; @@ -1120,6 +1118,10 @@ if ($massaction == 'prereverse') { if ($search_all) { $setupstring = ''; + if (!isset($fieldstosearchall) || !is_array($fieldstosearchall)) { + // Ensure $fieldstosearchall is array + $fieldstosearchall = array(); + } foreach ($fieldstosearchall as $key => $val) { $fieldstosearchall[$key] = $langs->trans($val); $setupstring .= $key."=".$val.";"; @@ -1130,7 +1132,7 @@ if ($search_all) { $moreforfilter = ''; -$parameters = array('arrayfields'=>&$arrayfields); +$parameters = array('arrayfields' => &$arrayfields); $reshook = $hookmanager->executeHooks('printFieldPreListTitle', $parameters, $warehouse, $action); // Note that $action and $warehouse may have been modified by hook if (empty($reshook)) { $moreforfilter .= $hookmanager->resPrint; @@ -1145,7 +1147,7 @@ if (!empty($moreforfilter)) { } $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; -$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')) : ''); // This also change content of $arrayfields +$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) : ''); // This also change content of $arrayfields $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); print '
'; // You can use div-table-responsive-no-min if you don't need reserved height for your table @@ -1272,7 +1274,7 @@ if (!empty($arrayfields['m.price']['checked'])) { include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php'; // Fields from hook -$parameters = array('arrayfields'=>$arrayfields); +$parameters = array('arrayfields' => $arrayfields); $reshook = $hookmanager->executeHooks('printFieldListOption', $parameters, $warehouse, $action); // Note that $action and $warehouse may have been modified by hook print $hookmanager->resPrint; // Date creation @@ -1359,7 +1361,7 @@ if (!empty($arrayfields['m.price']['checked'])) { include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; // Hook fields -$parameters = array('arrayfields'=>$arrayfields, 'param'=>$param, 'sortfield'=>$sortfield, 'sortorder'=>$sortorder, 'totalarray'=>&$totalarray); +$parameters = array('arrayfields' => $arrayfields, 'param' => $param, 'sortfield' => $sortfield, 'sortorder' => $sortorder, 'totalarray' => &$totalarray); $reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters, $warehouse, $action); // Note that $action and $warehouse may have been modified by hook print $hookmanager->resPrint; if (!empty($arrayfields['m.datec']['checked'])) { @@ -1494,7 +1496,8 @@ while ($i < $imaxinloop) { if (!empty($arrayfields['m.rowid']['checked'])) { print '
'; // This is primary not movement id } if (!empty($arrayfields['m.datem']['checked'])) { @@ -1593,7 +1596,7 @@ while ($i < $imaxinloop) { // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php'; // Fields from hook - $parameters = array('arrayfields'=>$arrayfields, 'object'=>$object, 'obj'=>$obj, 'i'=>$i, 'totalarray'=>&$totalarray); + $parameters = array('arrayfields' => $arrayfields, 'object' => $object, 'obj' => $obj, 'i' => $i, 'totalarray' => &$totalarray); $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; @@ -1632,7 +1635,7 @@ if ($num == 0) { $db->free($resql); -$parameters = array('arrayfields'=>$arrayfields, 'sql'=>$sql); +$parameters = array('arrayfields' => $arrayfields, 'sql' => $sql); $reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; diff --git a/htdocs/product/stock/product.php b/htdocs/product/stock/product.php index 442fa454d95..1a33d36a1f5 100644 --- a/htdocs/product/stock/product.php +++ b/htdocs/product/stock/product.php @@ -65,15 +65,15 @@ $backtopage = GETPOST('backtopage', 'alpha'); $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'alpha'); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $stocklimit = (float) GETPOST('seuil_stock_alerte'); $desiredstock = GETPOST('desiredstock'); $cancel = GETPOST('cancel', 'alpha'); $fieldid = isset($_GET["ref"]) ? 'ref' : 'rowid'; -$d_eatby = dol_mktime(0, 0, 0, GETPOST('eatbymonth', 'int'), GETPOST('eatbyday', 'int'), GETPOST('eatbyyear', 'int')); -$d_sellby = dol_mktime(0, 0, 0, GETPOST('sellbymonth', 'int'), GETPOST('sellbyday', 'int'), GETPOST('sellbyyear', 'int')); -$pdluoid = GETPOST('pdluoid', 'int'); +$d_eatby = dol_mktime(0, 0, 0, GETPOSTINT('eatbymonth'), GETPOSTINT('eatbyday'), GETPOSTINT('eatbyyear')); +$d_sellby = dol_mktime(0, 0, 0, GETPOSTINT('sellbymonth'), GETPOSTINT('sellbyday'), GETPOSTINT('sellbyyear')); +$pdluoid = GETPOSTINT('pdluoid'); $batchnumber = GETPOST('batch_number', 'san_alpha'); if (!empty($batchnumber)) { $batchnumber = trim($batchnumber); @@ -144,7 +144,7 @@ if ($cancel) { $action = ''; } -$parameters = array('id'=>$id, 'ref'=>$ref, 'objcanvas'=>$objcanvas); +$parameters = array('id' => $id, 'ref' => $ref, 'objcanvas' => $objcanvas); $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); @@ -181,7 +181,8 @@ if ($action == 'addlimitstockwarehouse' && $user->hasRight('produit', 'creer')) if ($maj_ok) { $pse = new ProductStockEntrepot($db); - if ($pse->fetch(0, $id, GETPOST('fk_entrepot', 'int')) > 0) { + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition + if ($pse->fetch(0, $id, GETPOSTINT('fk_entrepot')) > 0) { // Update $pse->seuil_stock_alerte = $seuil_stock_alerte; $pse->desiredstock = $desiredstock; @@ -207,7 +208,7 @@ if ($action == 'addlimitstockwarehouse' && $user->hasRight('produit', 'creer')) if ($action == 'delete_productstockwarehouse' && $user->hasRight('produit', 'creer')) { $pse = new ProductStockEntrepot($db); - $pse->fetch(GETPOST('fk_productstockwarehouse', 'int')); + $pse->fetch(GETPOSTINT('fk_productstockwarehouse')); if ($pse->delete($user) > 0) { setEventMessages($langs->trans('ProductStockWarehouseDeleted'), null, 'mesgs'); } @@ -244,7 +245,7 @@ if ($action == 'setdesiredstock' && $user->hasRight('produit', 'creer')) { // Correct stock if ($action == "correct_stock" && !$cancel) { - if (!(GETPOST("id_entrepot", 'int') > 0)) { + if (!(GETPOSTINT("id_entrepot") > 0)) { setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Warehouse")), null, 'errors'); $error++; $action = 'correction'; @@ -273,9 +274,9 @@ if ($action == "correct_stock" && !$cancel) { $origin_element = ''; $origin_id = null; - if (GETPOST('projectid', 'int')) { + if (GETPOSTINT('projectid')) { $origin_element = 'project'; - $origin_id = GETPOST('projectid', 'int'); + $origin_id = GETPOSTINT('projectid'); } if (empty($object)) { @@ -291,9 +292,9 @@ if ($action == "correct_stock" && !$cancel) { if ($object->hasbatch()) { $result = $object->correct_stock_batch( $user, - GETPOST("id_entrepot", 'int'), + GETPOSTINT("id_entrepot"), $nbpiece, - GETPOST("mouvement", 'int'), + GETPOSTINT("mouvement"), GETPOST("label", 'alphanohtml'), // label movement $priceunit, $d_eatby, @@ -307,9 +308,9 @@ if ($action == "correct_stock" && !$cancel) { } else { $result = $object->correct_stock( $user, - GETPOST("id_entrepot", 'int'), + GETPOSTINT("id_entrepot"), $nbpiece, - GETPOST("mouvement", 'int'), + GETPOSTINT("mouvement"), GETPOST("label", 'alphanohtml'), $priceunit, GETPOST('inventorycode', 'alphanohtml'), @@ -337,17 +338,17 @@ if ($action == "correct_stock" && !$cancel) { // Transfer stock from a warehouse to another warehouse if ($action == "transfert_stock" && !$cancel) { - if (!(GETPOST("id_entrepot", 'int') > 0) || !(GETPOST("id_entrepot_destination", 'int') > 0)) { + if (!(GETPOSTINT("id_entrepot") > 0) || !(GETPOSTINT("id_entrepot_destination") > 0)) { setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Warehouse")), null, 'errors'); $error++; $action = 'transfert'; } - if (!GETPOST("nbpiece", 'int')) { + if (!GETPOSTINT("nbpiece")) { setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("NumberOfUnit")), null, 'errors'); $error++; $action = 'transfert'; } - if (GETPOST("id_entrepot", 'int') == GETPOST("id_entrepot_destination", 'int')) { + if (GETPOSTINT("id_entrepot") == GETPOSTINT("id_entrepot_destination")) { setEventMessages($langs->trans("ErrorSrcAndTargetWarehouseMustDiffers"), null, 'errors'); $error++; $action = 'transfert'; @@ -396,7 +397,7 @@ if ($action == "transfert_stock" && !$cancel) { $error++; } } else { - $srcwarehouseid = GETPOST('id_entrepot', 'int'); + $srcwarehouseid = GETPOSTINT('id_entrepot'); $batch = $batchnumber; $eatby = $d_eatby; $sellby = $d_sellby; @@ -426,7 +427,7 @@ if ($action == "transfert_stock" && !$cancel) { // Add stock $result2 = $object->correct_stock_batch( $user, - GETPOST("id_entrepot_destination", 'int'), + GETPOSTINT("id_entrepot_destination"), $nbpiece, 0, GETPOST("label", 'alphanohtml'), @@ -445,7 +446,7 @@ if ($action == "transfert_stock" && !$cancel) { // Remove stock $result1 = $object->correct_stock( $user, - GETPOST("id_entrepot", 'int'), + GETPOSTINT("id_entrepot"), $nbpiece, 1, GETPOST("label", 'alphanohtml'), @@ -460,7 +461,7 @@ if ($action == "transfert_stock" && !$cancel) { // Add stock $result2 = $object->correct_stock( $user, - GETPOST("id_entrepot_destination", 'int'), + GETPOSTINT("id_entrepot_destination"), $nbpiece, 0, GETPOST("label", 'alphanohtml'), @@ -496,15 +497,15 @@ if ($action == "transfert_stock" && !$cancel) { // Update batch information if ($action == 'updateline' && GETPOST('save') == $langs->trans("Save")) { $pdluo = new Productbatch($db); - $result = $pdluo->fetch(GETPOST('pdluoid', 'int')); + $result = $pdluo->fetch(GETPOSTINT('pdluoid')); if ($result > 0) { if ($pdluo->id) { if ((!GETPOST("sellby")) && (!GETPOST("eatby")) && (!$batchnumber)) { setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("atleast1batchfield")), null, 'errors'); } else { - $d_eatby = dol_mktime(0, 0, 0, GETPOST('eatbymonth', 'int'), GETPOST('eatbyday', 'int'), GETPOST('eatbyyear', 'int')); - $d_sellby = dol_mktime(0, 0, 0, GETPOST('sellbymonth', 'int'), GETPOST('sellbyday', 'int'), GETPOST('sellbyyear', 'int')); + $d_eatby = dol_mktime(0, 0, 0, GETPOSTINT('eatbymonth'), GETPOSTINT('eatbyday'), GETPOSTINT('eatbyyear')); + $d_sellby = dol_mktime(0, 0, 0, GETPOSTINT('sellbymonth'), GETPOSTINT('sellbyday'), GETPOSTINT('sellbyyear')); $pdluo->batch = $batchnumber; $pdluo->eatby = $d_eatby; $pdluo->sellby = $d_sellby; @@ -780,7 +781,7 @@ if ($id > 0 || $ref) { $found = 0; $helpondiff = ''.$langs->trans("StockDiffPhysicTeoric").':
'; // Number of sales orders running - if (isModEnabled('commande')) { + if (isModEnabled('order')) { if ($found) { $helpondiff .= '
'; } else { @@ -795,7 +796,7 @@ if ($id > 0 || $ref) { } // Number of product from sales order already sent (partial shipping) - if (isModEnabled("expedition")) { + if (isModEnabled("shipping")) { require_once DOL_DOCUMENT_ROOT.'/expedition/class/expedition.class.php'; $filterShipmentStatus = ''; if (getDolGlobalString('STOCK_CALCULATE_ON_SHIPMENT')) { @@ -1137,7 +1138,7 @@ if (!$variants || getDolGlobalString('VARIANT_ALLOW_STOCK_MOVEMENT_ON_VARIANT_PA $product_lot_static->eatby = $pdluo->eatby; $product_lot_static->sellby = $pdluo->sellby; - if ($action == 'editline' && GETPOST('lineid', 'int') == $pdluo->id) { //Current line edit + if ($action == 'editline' && GETPOSTINT('lineid') == $pdluo->id) { //Current line edit print "\n".''; print ''; if (!getDolGlobalString('PRODUCT_DISABLE_SELLBY')) { print ''; } if (!getDolGlobalString('PRODUCT_DISABLE_EATBY')) { print ''; } print ''; diff --git a/htdocs/product/stock/productlot_card.php b/htdocs/product/stock/productlot_card.php index 4cca04d141b..b199e5b5295 100644 --- a/htdocs/product/stock/productlot_card.php +++ b/htdocs/product/stock/productlot_card.php @@ -40,8 +40,8 @@ global $conf, $db, $langs, $user; $langs->loadLangs(array('stocks', 'other', 'productbatch')); // Get parameters -$id = GETPOST('id', 'int'); -$lineid = GETPOST('lineid', 'int'); +$id = GETPOSTINT('id'); +$lineid = GETPOSTINT('lineid'); $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm', 'alpha'); $cancel = GETPOST('cancel', 'aZ09'); @@ -72,15 +72,15 @@ if (empty($action) && empty($id) && empty($ref)) { } $batch = GETPOST('batch', 'alpha'); -$productid = GETPOST('productid', 'int'); +$productid = GETPOSTINT('productid'); $ref = GETPOST('ref', 'alpha'); // ref is productid_batch -$search_entity = GETPOST('search_entity', 'int'); -$search_fk_product = GETPOST('search_fk_product', 'int'); +$search_entity = GETPOSTINT('search_entity'); +$search_fk_product = GETPOSTINT('search_fk_product'); $search_batch = GETPOST('search_batch', 'alpha'); -$search_fk_user_creat = GETPOST('search_fk_user_creat', 'int'); -$search_fk_user_modif = GETPOST('search_fk_user_modif', 'int'); -$search_import_key = GETPOST('search_import_key', 'int'); +$search_fk_user_creat = GETPOSTINT('search_fk_user_creat'); +$search_fk_user_modif = GETPOSTINT('search_fk_user_modif'); +$search_import_key = GETPOSTINT('search_import_key'); if (empty($action) && empty($id) && empty($ref)) { $action = 'list'; @@ -153,7 +153,7 @@ if (empty($reshook)) { $backurlforlist = dol_buildpath('/product/stock/productlot_list.php', 1); if ($action == 'seteatby' && $user->hasRight('stock', 'creer') && ! GETPOST('cancel', 'alpha')) { - $newvalue = dol_mktime(12, 0, 0, GETPOST('eatbymonth', 'int'), GETPOST('eatbyday', 'int'), GETPOST('eatbyyear', 'int')); + $newvalue = dol_mktime(12, 0, 0, GETPOSTINT('eatbymonth'), GETPOSTINT('eatbyday'), GETPOSTINT('eatbyyear')); // check parameters $object->eatby = $newvalue; @@ -178,7 +178,7 @@ if (empty($reshook)) { } if ($action == 'setsellby' && $user->hasRight('stock', 'creer') && ! GETPOST('cancel', 'alpha')) { - $newvalue = dol_mktime(12, 0, 0, GETPOST('sellbymonth', 'int'), GETPOST('sellbyday', 'int'), GETPOST('sellbyyear', 'int')); + $newvalue = dol_mktime(12, 0, 0, GETPOSTINT('sellbymonth'), GETPOSTINT('sellbyday'), GETPOSTINT('sellbyyear')); // check parameters $object->sellby = $newvalue; @@ -203,7 +203,7 @@ if (empty($reshook)) { } if ($action == 'seteol_date' && $user->hasRight('stock', 'creer') && ! GETPOST('cancel', 'alpha')) { - $newvalue = dol_mktime(12, 0, 0, GETPOST('eol_datemonth', 'int'), GETPOST('eol_dateday', 'int'), GETPOST('eol_dateyear', 'int')); + $newvalue = dol_mktime(12, 0, 0, GETPOSTINT('eol_datemonth'), GETPOSTINT('eol_dateday'), GETPOSTINT('eol_dateyear')); $result = $object->setValueFrom('eol_date', $newvalue, '', null, 'date', '', $user, 'PRODUCTLOT_MODIFY'); if ($result < 0) { setEventMessages($object->error, null, 'errors'); @@ -214,7 +214,7 @@ if (empty($reshook)) { } if ($action == 'setmanufacturing_date' && $user->hasRight('stock', 'creer') && ! GETPOST('cancel', 'alpha')) { - $newvalue = dol_mktime(12, 0, 0, GETPOST('manufacturing_datemonth', 'int'), GETPOST('manufacturing_dateday', 'int'), GETPOST('manufacturing_dateyear', 'int')); + $newvalue = dol_mktime(12, 0, 0, GETPOSTINT('manufacturing_datemonth'), GETPOSTINT('manufacturing_dateday'), GETPOSTINT('manufacturing_dateyear')); $result = $object->setValueFrom('manufacturing_date', $newvalue, '', null, 'date', '', $user, 'PRODUCTLOT_MODIFY'); if ($result < 0) { setEventMessages($object->error, null, 'errors'); @@ -225,7 +225,7 @@ if (empty($reshook)) { } if ($action == 'setscrapping_date' && $user->hasRight('stock', 'creer') && ! GETPOST('cancel', 'alpha')) { - $newvalue = dol_mktime(12, 0, 0, GETPOST('scrapping_datemonth', 'int'), GETPOST('scrapping_dateday', 'int'), GETPOST('scrapping_dateyear', 'int')); + $newvalue = dol_mktime(12, 0, 0, GETPOSTINT('scrapping_datemonth'), GETPOSTINT('scrapping_dateday'), GETPOSTINT('scrapping_dateyear')); $result = $object->setValueFrom('scrapping_date', $newvalue, '', null, 'date', '', $user, 'PRODUCTLOT_MODIFY'); if ($result < 0) { setEventMessages($object->error, null, 'errors'); diff --git a/htdocs/product/stock/productlot_document.php b/htdocs/product/stock/productlot_document.php index 8cc4343ea63..3adc9370df5 100644 --- a/htdocs/product/stock/productlot_document.php +++ b/htdocs/product/stock/productlot_document.php @@ -43,7 +43,7 @@ global $conf, $db, $langs, $user; // Load translation files required by the page $langs->loadLangs(array('other', 'products')); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm', 'alpha'); @@ -60,10 +60,10 @@ $result = restrictedArea($user, 'produit|service'); $hookmanager->initHooks(array('productlotdocuments')); // Get parameters -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 diff --git a/htdocs/product/stock/productlot_list.php b/htdocs/product/stock/productlot_list.php index 6bd524d7269..bd1733bdf81 100644 --- a/htdocs/product/stock/productlot_list.php +++ b/htdocs/product/stock/productlot_list.php @@ -36,7 +36,7 @@ require_once DOL_DOCUMENT_ROOT.'/product/stock/class/productlot.class.php'; $langs->loadLangs(array('stocks', 'productbatch', 'other', 'users')); // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $action = GETPOST('action', 'aZ09'); $massaction = GETPOST('massaction', 'alpha'); $backtopage = GETPOST('backtopage', 'alpha'); @@ -45,18 +45,18 @@ $contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'pr $optioncss = GETPOST('optioncss', 'alpha'); $mode = GETPOST('mode', 'alpha'); -$search_entity = GETPOST('search_entity', 'int'); +$search_entity = GETPOSTINT('search_entity'); $search_product = GETPOST('search_product', 'alpha'); $search_batch = GETPOST('search_batch', 'alpha'); -$search_fk_user_creat = GETPOST('search_fk_user_creat', 'int'); -$search_fk_user_modif = GETPOST('search_fk_user_modif', 'int'); -$search_import_key = GETPOST('search_import_key', 'int'); +$search_fk_user_creat = GETPOSTINT('search_fk_user_creat'); +$search_fk_user_modif = GETPOSTINT('search_fk_user_modif'); +$search_import_key = GETPOSTINT('search_import_key'); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // If $page is not defined, or '' or -1 or if we click on clear filters $page = 0; @@ -93,8 +93,8 @@ foreach ($object->fields as $key => $val) { $search[$key] = GETPOST('search_'.$key, 'alpha'); } if (preg_match('/^(date|timestamp|datetime)/', $val['type'])) { - $search[$key.'_dtstart'] = dol_mktime(0, 0, 0, GETPOST('search_'.$key.'_dtstartmonth', 'int'), GETPOST('search_'.$key.'_dtstartday', 'int'), GETPOST('search_'.$key.'_dtstartyear', 'int')); - $search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOST('search_'.$key.'_dtendmonth', 'int'), GETPOST('search_'.$key.'_dtendday', 'int'), GETPOST('search_'.$key.'_dtendyear', 'int')); + $search[$key.'_dtstart'] = dol_mktime(0, 0, 0, GETPOSTINT('search_'.$key.'_dtstartmonth'), GETPOSTINT('search_'.$key.'_dtstartday'), GETPOSTINT('search_'.$key.'_dtstartyear')); + $search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOSTINT('search_'.$key.'_dtendmonth'), GETPOSTINT('search_'.$key.'_dtendday'), GETPOSTINT('search_'.$key.'_dtendyear')); } } @@ -115,7 +115,7 @@ foreach ($object->fields as $key => $val) { $arrayfields['t.'.$key] = array( 'label'=>$val['label'], 'checked'=>(($visible < 0) ? 0 : 1), - 'enabled'=>(abs($visible) != 3 && dol_eval($val['enabled'], 1)), + 'enabled'=>(abs($visible) != 3 && (int) dol_eval($val['enabled'], 1)), 'position'=>$val['position'], 'help'=> isset($val['help']) ? $val['help'] : '' ); @@ -411,7 +411,7 @@ $arrayofmassactions = array( if (!empty($permissiontodelete)) { $arrayofmassactions['predelete'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete"); } -if (GETPOST('nomassaction', 'int') || in_array($massaction, array('presend', 'predelete'))) { +if (GETPOSTINT('nomassaction') || in_array($massaction, array('presend', 'predelete'))) { $arrayofmassactions = array(); } $massactionbutton = $form->selectMassAction('', $arrayofmassactions); @@ -475,7 +475,7 @@ if (!empty($moreforfilter)) { } $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; -$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')); // This also change content of $arrayfields +$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')); // This also change content of $arrayfields $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); print '
'; diff --git a/htdocs/product/stock/productlot_note.php b/htdocs/product/stock/productlot_note.php index ee5c23ad162..0315f905a40 100644 --- a/htdocs/product/stock/productlot_note.php +++ b/htdocs/product/stock/productlot_note.php @@ -32,7 +32,7 @@ dol_include_once('/core/lib/product.lib.php'); $langs->loadLangs(array('other', 'products')); // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); diff --git a/htdocs/product/stock/replenish.php b/htdocs/product/stock/replenish.php index b791b335aa7..e83e505f3e0 100644 --- a/htdocs/product/stock/replenish.php +++ b/htdocs/product/stock/replenish.php @@ -55,17 +55,17 @@ $action = GETPOST('action', 'aZ09'); $search_ref = GETPOST('search_ref', 'alpha'); $search_label = GETPOST('search_label', 'alpha'); $sall = trim((GETPOST('search_all', 'alphanohtml') != '') ? GETPOST('search_all', 'alphanohtml') : GETPOST('sall', 'alphanohtml')); -$type = GETPOST('type', 'int'); -$tobuy = GETPOST('tobuy', 'int'); +$type = GETPOSTINT('type'); +$tobuy = GETPOSTINT('tobuy'); $salert = GETPOST('salert', 'alpha'); $includeproductswithoutdesiredqty = GETPOST('includeproductswithoutdesiredqty', 'alpha'); $mode = GETPOST('mode', 'alpha'); $draftorder = GETPOST('draftorder', 'alpha'); -$fourn_id = GETPOST('fourn_id', 'int'); -$fk_supplier = GETPOST('fk_supplier', 'int'); -$fk_entrepot = GETPOST('fk_entrepot', 'int'); +$fourn_id = GETPOSTINT('fourn_id'); +$fk_supplier = GETPOSTINT('fk_supplier'); +$fk_entrepot = GETPOSTINT('fk_entrepot'); // List all visible warehouses $resWar = $db->query("SELECT rowid FROM " . MAIN_DB_PREFIX . "entrepot WHERE entity IN (" . $db->sanitize(getEntity('stock')) .")"); @@ -89,11 +89,11 @@ $texte = ''; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $offset = $limit * $page; if (!$sortfield) { @@ -153,7 +153,7 @@ if ($draftorder == 'on') { // Create orders if ($action == 'order' && GETPOST('valid')) { - $linecount = GETPOST('linecount', 'int'); + $linecount = GETPOSTINT('linecount'); $box = 0; $errorQty = 0; unset($_POST['linecount']); @@ -164,12 +164,12 @@ if ($action == 'order' && GETPOST('valid')) { require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.product.class.php'; $productsupplier = new ProductFournisseur($db); for ($i = 0; $i < $linecount; $i++) { - if (GETPOST('choose'.$i, 'alpha') === 'on' && GETPOST('fourn'.$i, 'int') > 0) { + if (GETPOSTINT('choose'.$i) === 'on' && GETPOSTINT('fourn'.$i) > 0) { //one line $box = $i; - $supplierpriceid = GETPOST('fourn'.$i, 'int'); + $supplierpriceid = GETPOSTINT('fourn'.$i); //get all the parameters needed to create a line - $qty = GETPOST('tobuy'.$i, 'int'); + $qty = GETPOSTINT('tobuy'.$i); $idprod = $productsupplier->get_buyprice($supplierpriceid, $qty); $res = $productsupplier->fetch($idprod); if ($res && $idprod > 0) { @@ -415,7 +415,7 @@ if (getDolGlobalString('STOCK_ALLOW_ADD_LIMIT_STOCK_BY_WAREHOUSE') && $fk_entrep $sql .= ', s.fk_product'; if ($usevirtualstock) { - if (isModEnabled('commande')) { + if (isModEnabled('order')) { $sqlCommandesCli = "(SELECT ".$db->ifsql("SUM(cd1.qty) IS NULL", "0", "SUM(cd1.qty)")." as qty"; // We need the ifsql because if result is 0 for product p.rowid, we must return 0 and not NULL $sqlCommandesCli .= " FROM ".MAIN_DB_PREFIX."commandedet as cd1, ".MAIN_DB_PREFIX."commande as c1"; $sqlCommandesCli .= " WHERE c1.rowid = cd1.fk_commande AND c1.entity IN (".getEntity(getDolGlobalString('STOCK_CALCULATE_VIRTUAL_STOCK_TRANSVERSE_MODE') ? 'stock' : 'commande').")"; @@ -425,7 +425,7 @@ if ($usevirtualstock) { $sqlCommandesCli = '0'; } - if (isModEnabled("expedition")) { + if (isModEnabled("shipping")) { $sqlExpeditionsCli = "(SELECT ".$db->ifsql("SUM(ed2.qty) IS NULL", "0", "SUM(ed2.qty)")." as qty"; // We need the ifsql because if result is 0 for product p.rowid, we must return 0 and not NULL $sqlExpeditionsCli .= " FROM ".MAIN_DB_PREFIX."expedition as e2,"; $sqlExpeditionsCli .= " ".MAIN_DB_PREFIX."expeditiondet as ed2,"; @@ -451,7 +451,7 @@ if ($usevirtualstock) { $sqlReceptionFourn = "(SELECT ".$db->ifsql("SUM(fd4.qty) IS NULL", "0", "SUM(fd4.qty)")." as qty"; // We need the ifsql because if result is 0 for product p.rowid, we must return 0 and not NULL $sqlReceptionFourn .= " FROM ".MAIN_DB_PREFIX."commande_fournisseur as cf4,"; - $sqlReceptionFourn .= " ".MAIN_DB_PREFIX."commande_fournisseur_dispatch as fd4"; + $sqlReceptionFourn .= " ".MAIN_DB_PREFIX."receptiondet_batch as fd4"; $sqlReceptionFourn .= " WHERE fd4.fk_commande = cf4.rowid AND cf4.entity IN (".getEntity(getDolGlobalString('STOCK_CALCULATE_VIRTUAL_STOCK_TRANSVERSE_MODE') ? 'stock' : 'supplier_order').")"; $sqlReceptionFourn .= " AND fd4.fk_product = p.rowid"; $sqlReceptionFourn .= " AND cf4.fk_statut IN (3,4))"; @@ -650,23 +650,23 @@ if ($search_ref || $search_label || $sall || $salert || $draftorder || GETPOST(' $filters .= '&draftorder='.urlencode($draftorder); $filters .= '&mode='.urlencode($mode); if ($fk_supplier > 0) { - $filters .= '&fk_supplier='.urlencode($fk_supplier); + $filters .= '&fk_supplier='.urlencode((string) ($fk_supplier)); } if ($fk_entrepot > 0) { - $filters .= '&fk_entrepot='.urlencode($fk_entrepot); + $filters .= '&fk_entrepot='.urlencode((string) ($fk_entrepot)); } } else { $filters = '&search_ref='.urlencode($search_ref).'&search_label='.urlencode($search_label); - $filters .= '&fourn_id='.urlencode($fourn_id); - $filters .= (isset($type) ? '&type='.urlencode($type) : ''); + $filters .= '&fourn_id='.urlencode((string) ($fourn_id)); + $filters .= (isset($type) ? '&type='.urlencode((string) ($type)) : ''); $filters .= '&='.urlencode($salert); $filters .= '&draftorder='.urlencode($draftorder); $filters .= '&mode='.urlencode($mode); if ($fk_supplier > 0) { - $filters .= '&fk_supplier='.urlencode($fk_supplier); + $filters .= '&fk_supplier='.urlencode((string) ($fk_supplier)); } if ($fk_entrepot > 0) { - $filters .= '&fk_entrepot='.urlencode($fk_entrepot); + $filters .= '&fk_entrepot='.urlencode((string) ($fk_entrepot)); } } if ($limit > 0 && $limit != $conf->liste_limit) { @@ -679,12 +679,12 @@ if (!empty($salert)) { $filters .= '&salert='.urlencode($salert); } -$param = (isset($type) ? '&type='.urlencode($type) : ''); -$param .= '&fourn_id='.urlencode($fourn_id).'&search_label='.urlencode($search_label).'&includeproductswithoutdesiredqty='.urlencode($includeproductswithoutdesiredqty).'&salert='.urlencode($salert).'&draftorder='.urlencode($draftorder); +$param = (isset($type) ? '&type='.urlencode((string) ($type)) : ''); +$param .= '&fourn_id='.urlencode((string) ($fourn_id)).'&search_label='.urlencode((string) ($search_label)).'&includeproductswithoutdesiredqty='.urlencode((string) ($includeproductswithoutdesiredqty)).'&salert='.urlencode((string) ($salert)).'&draftorder='.urlencode((string) ($draftorder)); $param .= '&search_ref='.urlencode($search_ref); $param .= '&mode='.urlencode($mode); -$param .= '&fk_supplier='.urlencode($fk_supplier); -$param .= '&fk_entrepot='.urlencode($fk_entrepot); +$param .= '&fk_supplier='.urlencode((string) ($fk_supplier)); +$param .= '&fk_entrepot='.urlencode((string) ($fk_entrepot)); if (!empty($includeproductswithoutdesiredqty)) { $param .= '&includeproductswithoutdesiredqty='.urlencode($includeproductswithoutdesiredqty); } @@ -768,7 +768,7 @@ if (getDolGlobalString('STOCK_REPLENISH_ADD_CHECKBOX_INCLUDE_DRAFT_ORDER')) { print ''; print '
'; // Fields from hook -$parameters = array('param'=>$param, 'sortfield'=>$sortfield, 'sortorder'=>$sortorder); +$parameters = array('param' => $param, 'sortfield' => $sortfield, 'sortorder' => $sortorder); $reshook = $hookmanager->executeHooks('printFieldListOption', $parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; @@ -797,7 +797,7 @@ print_liste_field_titre('StockToBuy', $_SERVER["PHP_SELF"], '', $param, '', '', print_liste_field_titre('SupplierRef', $_SERVER["PHP_SELF"], '', $param, '', '', $sortfield, $sortorder, 'right '); // Hook fields -$parameters = array('param'=>$param, 'sortfield'=>$sortfield, 'sortorder'=>$sortorder); +$parameters = array('param' => $param, 'sortfield' => $sortfield, 'sortorder' => $sortorder); $reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; @@ -950,7 +950,8 @@ while ($i < ($limit ? min($num, $limit) : $num)) { print ''; // To order - print ''; + $tobuy = ((getDolGlobalString('STOCK_ALLOW_ADD_LIMIT_STOCK_BY_WAREHOUSE') && $fk_entrepot > 0) > 0 ? $stocktobuywarehouse : $stocktobuy); + print ''; // Supplier print ''; // Fields from hook - $parameters = array('objp'=>$objp); + $parameters = array('objp' => $objp, 'i' => $i, 'tobuy' => $tobuy); $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; @@ -982,7 +983,7 @@ if ($num == 0) { print ''; } -$parameters = array('sql'=>$sql); +$parameters = array('sql' => $sql); $reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; diff --git a/htdocs/product/stock/replenishorders.php b/htdocs/product/stock/replenishorders.php index 9a0e0847016..724eeed763c 100644 --- a/htdocs/product/stock/replenishorders.php +++ b/htdocs/product/stock/replenishorders.php @@ -45,15 +45,15 @@ $sref = GETPOST('search_ref', 'alpha'); $snom = GETPOST('search_nom', 'alpha'); $suser = GETPOST('search_user', 'alpha'); $sttc = GETPOST('search_ttc', 'alpha'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); -$search_product = GETPOST('search_product', 'int'); -$search_dateyear = GETPOST('search_dateyear', 'int'); -$search_datemonth = GETPOST('search_datemonth', 'int'); -$search_dateday = GETPOST('search_dateday', 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); +$search_product = GETPOSTINT('search_product'); +$search_dateyear = GETPOSTINT('search_dateyear'); +$search_datemonth = GETPOSTINT('search_datemonth'); +$search_dateday = GETPOSTINT('search_dateday'); $search_date = dol_mktime(0, 0, 0, $search_datemonth, $search_dateday, $search_dateyear); $optioncss = GETPOST('optioncss', 'alpha'); -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); if (!$sortorder) { @@ -62,7 +62,7 @@ if (!$sortorder) { if (!$sortfield) { $sortfield = 'cf.date_creation'; } -$page = GETPOST('page', 'int') ? GETPOST('page', 'int') : 0; +$page = GETPOSTINT('page') ? GETPOSTINT('page') : 0; if ($page < 0) { $page = 0; } @@ -160,8 +160,8 @@ if ($sall) { if (!empty($socid)) { $sql .= ' AND s.rowid = '.((int) $socid); } -if (GETPOST('statut', 'int')) { - $sql .= ' AND fk_statut = '.GETPOST('statut', 'int'); +if (GETPOSTINT('statut')) { + $sql .= ' AND fk_statut = '.GETPOSTINT('statut'); } $sql .= ' GROUP BY cf.rowid, cf.ref, cf.date_creation, cf.fk_statut'; $sql .= ', cf.total_ttc, cf.fk_user_author, u.login, s.rowid, s.nom'; @@ -202,13 +202,13 @@ if ($resql) { $param .= '&search_ttc='.urlencode($sttc); } if ($search_dateyear) { - $param .= '&search_dateyear='.urlencode($search_dateyear); + $param .= '&search_dateyear='.urlencode((string) ($search_dateyear)); } if ($search_datemonth) { - $param .= '&search_datemonth='.urlencode($search_datemonth); + $param .= '&search_datemonth='.urlencode((string) ($search_datemonth)); } if ($search_dateday) { - $param .= '&search_dateday='.urlencode($search_dateday); + $param .= '&search_dateday='.urlencode((string) ($search_dateday)); } if ($optioncss != '') { $param .= '&optioncss='.urlencode($optioncss); diff --git a/htdocs/product/stock/stats/commande_fournisseur.php b/htdocs/product/stock/stats/commande_fournisseur.php index 756f814f575..e179a65e1e1 100644 --- a/htdocs/product/stock/stats/commande_fournisseur.php +++ b/htdocs/product/stock/stats/commande_fournisseur.php @@ -37,10 +37,10 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php'; // Load translation files required by the page $langs->loadLangs(array('companies', 'bills', 'products', 'orders')); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $batch = GETPOST('batch', 'alpha'); -$objectid = GETPOST('productid', 'int'); +$objectid = GETPOSTINT('productid'); // Security check $fieldvalue = (!empty($id) ? $id : (!empty($ref) ? $ref : '')); @@ -56,10 +56,10 @@ $hookmanager->initHooks(array('batchproductstatssupplierorder')); $showmessage = GETPOST('showmessage'); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -73,8 +73,8 @@ if (!$sortfield) { $sortfield = "cf.date_commande"; } -$search_month = GETPOST('search_month', 'int'); -$search_year = GETPOST('search_year', 'int'); +$search_month = GETPOSTINT('search_month'); +$search_year = GETPOSTINT('search_year'); if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter', 'alpha')) { $search_month = ''; @@ -105,7 +105,7 @@ if ($id > 0 || !empty($ref)) { } $result = $object->fetch($id, $objectid, $batch); - $parameters = array('id'=>$id); + $parameters = array('id' => $id); $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); @@ -224,7 +224,7 @@ if ($id > 0 || !empty($ref)) { $sql .= " FROM ".MAIN_DB_PREFIX."societe as s"; $sql .= " INNER JOIN ".MAIN_DB_PREFIX."commande_fournisseur as cf ON (cf.fk_soc = s.rowid)"; $sql .= " INNER JOIN ".MAIN_DB_PREFIX."commande_fournisseurdet as cfd ON (cfd.fk_commande = cf.rowid)"; - $sql .= " INNER JOIN ".MAIN_DB_PREFIX."commande_fournisseur_dispatch as cfdi ON (cfdi.fk_commandefourndet = cfd.rowid)"; + $sql .= " INNER JOIN ".MAIN_DB_PREFIX."receptiondet_batch as cfdi ON (cfdi.fk_commandefourndet = cfd.rowid)"; if (!$user->hasRight('societe', 'client', 'voir')) { $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; } @@ -268,10 +268,10 @@ if ($id > 0 || !empty($ref)) { $option .= '&limit='.((int) $limit); } if (!empty($search_month)) { - $option .= '&search_month='.urlencode($search_month); + $option .= '&search_month='.urlencode((string) ($search_month)); } if (!empty($search_year)) { - $option .= '&search_year='.urlencode($search_year); + $option .= '&search_year='.urlencode((string) ($search_year)); } print ''."\n"; @@ -283,10 +283,11 @@ if ($id > 0 || !empty($ref)) { print ''; } + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder print_barre_liste($langs->trans("SuppliersOrders"), $page, $_SERVER["PHP_SELF"], $option, $sortfield, $sortorder, '', $num, $totalofrecords, '', 0, '', '', $limit, 0, 0, 1); if (!empty($page)) { - $option .= '&page='.urlencode($page); + $option .= '&page='.urlencode((string) ($page)); } print '
'; diff --git a/htdocs/product/stock/stats/expedition.php b/htdocs/product/stock/stats/expedition.php index 5596ff381d5..b3c30f5ce68 100644 --- a/htdocs/product/stock/stats/expedition.php +++ b/htdocs/product/stock/stats/expedition.php @@ -37,10 +37,10 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php'; // Load translation files required by the page $langs->loadLangs(array('companies', 'bills', 'products', 'supplier_proposal', 'productbatch')); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $batch = GETPOST('batch', 'alpha'); -$objectid = GETPOST('productid', 'int'); +$objectid = GETPOSTINT('productid'); // Security check $fieldvalue = (!empty($id) ? $id : (!empty($ref) ? $ref : '')); @@ -56,10 +56,10 @@ $hookmanager->initHooks(array('batchproductstatsexpedition')); $showmessage = GETPOST('showmessage'); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -73,8 +73,8 @@ if (!$sortfield) { $sortfield = "exp.date_creation"; } -$search_month = GETPOST('search_month', 'int'); -$search_year = GETPOST('search_year', 'int'); +$search_month = GETPOSTINT('search_month'); +$search_year = GETPOSTINT('search_year'); if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter', 'alpha')) { $search_month = ''; @@ -105,7 +105,7 @@ if ($id > 0 || !empty($ref)) { } $result = $object->fetch($id, $objectid, $batch); - $parameters = array('id'=>$id); + $parameters = array('id' => $id); $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); @@ -267,10 +267,10 @@ if ($id > 0 || !empty($ref)) { $option .= '&limit='.((int) $limit); } if (!empty($search_month)) { - $option .= '&search_month='.urlencode($search_month); + $option .= '&search_month='.urlencode((string) ($search_month)); } if (!empty($search_year)) { - $option .= '&search_year='.urlencode($search_year); + $option .= '&search_year='.urlencode((string) ($search_year)); } print ''."\n"; @@ -282,10 +282,11 @@ if ($id > 0 || !empty($ref)) { print ''; } + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder print_barre_liste($langs->trans("Shipments"), $page, $_SERVER["PHP_SELF"], $option, $sortfield, $sortorder, '', $num, $totalofrecords, '', 0, '', '', $limit, 0, 0, 1); if (!empty($page)) { - $option .= '&page='.urlencode($page); + $option .= '&page='.urlencode((string) ($page)); } print '
'; diff --git a/htdocs/product/stock/stats/mo.php b/htdocs/product/stock/stats/mo.php index b09a844f0f1..96699d17d92 100644 --- a/htdocs/product/stock/stats/mo.php +++ b/htdocs/product/stock/stats/mo.php @@ -35,7 +35,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php'; // Load translation files required by the page $langs->loadLangs(array('mrp', 'products', 'companies', 'productbatch')); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); // Security check @@ -49,10 +49,10 @@ if ($user->socid) { $hookmanager->initHooks(array('batchproductstatsmo')); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -66,8 +66,8 @@ if (!$sortfield) { $sortfield = "c.date_valid"; } -$search_month = GETPOST('search_month', 'int'); -$search_year = GETPOST('search_year', 'int'); +$search_month = GETPOSTINT('search_month'); +$search_year = GETPOSTINT('search_year'); if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter', 'alpha')) { $search_month = ''; @@ -98,7 +98,7 @@ if ($id > 0 || !empty($ref)) { } $result = $object->fetch($id, $objectid, $batch); - $parameters = array('id'=>$id); + $parameters = array('id' => $id); $reshook = $hookmanager->executeHooks('doActions', $parameters, $product, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); @@ -209,10 +209,10 @@ if ($id > 0 || !empty($ref)) { $option .= '&limit='.((int) $limit); } if (!empty($search_month)) { - $option .= '&search_month='.urlencode($search_month); + $option .= '&search_month='.urlencode((string) ($search_month)); } if (!empty($search_year)) { - $option .= '&search_year='.urlencode($search_year); + $option .= '&search_year='.urlencode((string) ($search_year)); } print ''."\n"; @@ -224,10 +224,11 @@ if ($id > 0 || !empty($ref)) { print ''; } + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder print_barre_liste($langs->trans("MOs"), $page, $_SERVER["PHP_SELF"], $option, $sortfield, $sortorder, '', $num, $totalofrecords, '', 0, '', '', $limit, 0, 0, 1); if (!empty($page)) { - $option .= '&page='.urlencode($page); + $option .= '&page='.urlencode((string) ($page)); } print '
'; @@ -261,7 +262,7 @@ if ($id > 0 || !empty($ref)) { $motmp = new Mo($db); - $total_consumed=$total_produced=0; + $total_consumed = $total_produced = 0; if ($num > 0) { while ($i < min($num, $limit)) { @@ -271,8 +272,8 @@ if ($id > 0 || !empty($ref)) { $motmp->ref = $objp->ref; $motmp->status = $objp->status; - $total_consumed+=$objp->nb_consumed; - $total_produced+=$objp->nb_produced; + $total_consumed += $objp->nb_consumed; + $total_produced += $objp->nb_produced; print '
'; print ''; print getTitleFieldOfList($langs->trans('ProductRef'), 0, $_SERVER["PHP_SELF"], '', $param, '', '', $sortfield, $sortorder, 'tagtd maxwidthonsmartphone '); @@ -927,7 +928,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea $formproduct->loadWarehouses(); // Pour charger la totalité des entrepôts // On stock ceux qui ne doivent pas être proposés dans la liste - $TExcludedWarehouseSource=array(); + $TExcludedWarehouseSource = array(); if (!empty($object->fk_warehouse_source)) { $source_ent = new Entrepot($db); $source_ent->fetch($object->fk_warehouse_source); @@ -939,7 +940,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } // On stock ceux qui ne doivent pas être proposés dans la liste - $TExcludedWarehouseDestination=array(); + $TExcludedWarehouseDestination = array(); if (!empty($object->fk_warehouse_destination)) { $dest_ent = new Entrepot($db); $dest_ent->fetch($object->fk_warehouse_destination); @@ -951,14 +952,14 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } // On vide le tableau pour qu'il se charge tout seul lors de l'appel à la fonction select_warehouses - $formproduct->cache_warehouses=array(); + $formproduct->cache_warehouses = array(); // In warehouse print ''; // On vide le tableau pour qu'il se charge tout seul lors de l'appel à la fonction select_warehouses - $formproduct->cache_warehouses=array(); + $formproduct->cache_warehouses = array(); // Out warehouse print '
'.$langs->trans("MinPrice").' '.$langs->trans("HT").''.$langs->trans("MinPrice").' '.$langs->trans("TTC").''.$langs->trans("PriceLabel").''.$langs->trans("ChangedBy").'
'.price($object->price_min).''.price($object->price_min_ttc).''.$object->price_label.''; print ''.price($line->price_min).''.price($line->price_min_ttc).''.$line->price_label.''.$product->LibStatut($objp->statut, 5, 0).''.$product->LibStatut($objp->tobuy, 5, 1).'
'.$langs->trans("Type").''; - $array = array('-1'=>' ', '0'=>$langs->trans('Product'), '1'=>$langs->trans('Service')); + $array = array('-1' => ' ', '0' => $langs->trans('Product'), '1' => $langs->trans('Service')); print $form->selectarray('type', $array, $type, 0, 0, 0, '', 0, 0, 0, '', 'minwidth100'); print '
'.$langs->trans("Categories").''; $moreforfilter .= img_picto($langs->trans("Categories"), 'category', 'class="pictofixedwidth"'); $moreforfilter .= $htmlother->select_categories(Categorie::TYPE_PRODUCT, $search_categ, 'search_categ', 1, 1, 'widthcentpercentminusx maxwidth400'); @@ -255,7 +252,7 @@ if ($result || !($id > 0)) { $param = ''; - $param .= (GETPOSTISSET('id') ? '&id='.GETPOST('id', 'int') : '&id='.$object->id).(($type != '' && $type != '-1') ? '&type='.((int) $type) : '').'&search_year='.((int) $search_year).($notab ? '¬ab='.$notab : ''); + $param .= (GETPOSTISSET('id') ? '&id='.GETPOSTINT('id') : '&id='.$object->id).(($type != '' && $type != '-1') ? '&type='.((int) $type) : '').'&search_year='.((int) $search_year).($notab ? '¬ab='.$notab : ''); if ($socid > 0) { $param .= '&socid='.((int) $socid); } @@ -344,50 +341,50 @@ if ($result || !($id > 0)) { $arrayforlabel = array('byunit' => 'NumberOfUnits', 'bynumber' => 'NumberOf', 'byamount' => 'AmountIn'); if (isModEnabled('propal')) { - $graphfiles['propal'] = array('modulepart'=>'productstats_proposals', + $graphfiles['propal'] = array('modulepart' => 'productstats_proposals', 'file' => $object->id.'/propal12m'.((string) $type != '' ? '_type'.$type : '').'_'.$mode.($search_year > 0 ? '_year'.$search_year : '').'.png', 'label' => $langs->transnoentitiesnoconv($arrayforlabel[$mode], $langs->transnoentitiesnoconv("Proposals"))); } if (isModEnabled('supplier_proposal')) { $langs->load("supplier_proposal"); - $graphfiles['proposalssuppliers'] = array('modulepart'=>'productstats_proposalssuppliers', + $graphfiles['proposalssuppliers'] = array('modulepart' => 'productstats_proposalssuppliers', 'file' => $object->id.'/proposalssuppliers12m'.((string) $type != '' ? '_type'.$type : '').'_'.$mode.($search_year > 0 ? '_year'.$search_year : '').'.png', 'label' => $langs->transnoentitiesnoconv($arrayforlabel[$mode], $langs->transnoentitiesnoconv("SupplierProposals"))); } if (isModEnabled('order')) { - $graphfiles['orders'] = array('modulepart'=>'productstats_orders', + $graphfiles['orders'] = array('modulepart' => 'productstats_orders', 'file' => $object->id.'/orders12m'.((string) $type != '' ? '_type'.$type : '').'_'.$mode.($search_year > 0 ? '_year'.$search_year : '').'.png', 'label' => $langs->transnoentitiesnoconv($arrayforlabel[$mode], $langs->transnoentitiesnoconv("Orders"))); } if (isModEnabled('supplier_order')) { - $graphfiles['orderssuppliers'] = array('modulepart'=>'productstats_orderssuppliers', + $graphfiles['orderssuppliers'] = array('modulepart' => 'productstats_orderssuppliers', 'file' => $object->id.'/orderssuppliers12m'.((string) $type != '' ? '_type'.$type : '').'_'.$mode.($search_year > 0 ? '_year'.$search_year : '').'.png', 'label' => $langs->transnoentitiesnoconv($arrayforlabel[$mode], $langs->transnoentitiesnoconv("SuppliersOrders"))); } - if (isModEnabled('facture')) { - $graphfiles['invoices'] = array('modulepart'=>'productstats_invoices', + if (isModEnabled('invoice')) { + $graphfiles['invoices'] = array('modulepart' => 'productstats_invoices', 'file' => $object->id.'/invoices12m'.((string) $type != '' ? '_type'.$type : '').'_'.$mode.($search_year > 0 ? '_year'.$search_year : '').'.png', 'label' => $langs->transnoentitiesnoconv($arrayforlabel[$mode], $langs->transnoentitiesnoconv("Invoices"))); } if (isModEnabled('supplier_invoice')) { - $graphfiles['invoicessuppliers'] = array('modulepart'=>'productstats_invoicessuppliers', + $graphfiles['invoicessuppliers'] = array('modulepart' => 'productstats_invoicessuppliers', 'file' => $object->id.'/invoicessuppliers12m'.((string) $type != '' ? '_type'.$type : '').'_'.$mode.($search_year > 0 ? '_year'.$search_year : '').'.png', 'label' => $langs->transnoentitiesnoconv($arrayforlabel[$mode], $langs->transnoentitiesnoconv("SupplierInvoices"))); } - if (isModEnabled('contrat')) { - $graphfiles['contracts'] = array('modulepart'=>'productstats_contracts', + if (isModEnabled('contract')) { + $graphfiles['contracts'] = array('modulepart' => 'productstats_contracts', 'file' => $object->id.'/contracts12m'.((string) $type != '' ? '_type'.$type : '').'_'.$mode.($search_year > 0 ? '_year'.$search_year : '').'.png', 'label' => $langs->transnoentitiesnoconv($arrayforlabel[$mode], $langs->transnoentitiesnoconv("Contracts"))); } if (isModEnabled('mrp') && $mode != 'byamount') { - $graphfiles['mrp'] = array('modulepart'=>'productstats_mrp', + $graphfiles['mrp'] = array('modulepart' => 'productstats_mrp', 'file' => $object->id.'/mos12m'.((string) $type != '' ? '_type'.$type : '').'_'.$mode.($search_year > 0 ? '_year'.$search_year : '').'.png', 'label' => $langs->transnoentitiesnoconv($arrayforlabel[$mode]."Mos")); } @@ -519,7 +516,7 @@ if ($result || !($id > 0)) { } else { $dategenerated = ($mesg ? ''.$mesg.'' : $langs->trans("ChartNotGenerated")); } - $linktoregenerate = ' 0 ? '&search_categ='.((int) $search_categ) : '').'">'; + $linktoregenerate = ' 0 ? '&search_categ='.((int) $search_categ) : '').'">'; $linktoregenerate .= img_picto($langs->trans("ReCalculate").' ('.$dategenerated.')', 'refresh'); $linktoregenerate .= ''; diff --git a/htdocs/product/stats/commande.php b/htdocs/product/stats/commande.php index 3532afb8116..8c9dbd7830b 100644 --- a/htdocs/product/stats/commande.php +++ b/htdocs/product/stats/commande.php @@ -35,7 +35,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formorder.class.php'; // Load translation files required by the page $langs->loadLangs(array('orders', 'products', 'companies')); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); // Security check @@ -50,10 +50,10 @@ if (!empty($user->socid)) { $hookmanager->initHooks(array('productstatsorder')); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -66,10 +66,10 @@ if (!$sortorder) { if (!$sortfield) { $sortfield = "c.date_commande"; } -$search_month = GETPOST('search_month', 'int'); -$search_year = GETPOST('search_year', 'int'); +$search_month = GETPOSTINT('search_month'); +$search_year = GETPOSTINT('search_year'); if (GETPOSTISARRAY('search_status')) { - $search_status = join(',', GETPOST('search_status', 'array:intcomma')); + $search_status = implode(',', GETPOST('search_status', 'array:intcomma')); } else { $search_status = (GETPOST('search_status', 'intcomma') != '' ? GETPOST('search_status', 'intcomma') : GETPOST('statut', 'intcomma')); } @@ -100,7 +100,7 @@ if ($id > 0 || !empty($ref)) { $object = $product; - $parameters = array('id'=>$id); + $parameters = array('id' => $id); $reshook = $hookmanager->executeHooks('doActions', $parameters, $product, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); @@ -204,10 +204,10 @@ if ($id > 0 || !empty($ref)) { $option .= '&limit='.((int) $limit); } if (!empty($search_month)) { - $option .= '&search_month='.urlencode($search_month); + $option .= '&search_month='.urlencode((string) ($search_month)); } if (!empty($search_year)) { - $option .= '&search_year='.urlencode($search_year); + $option .= '&search_year='.urlencode((string) ($search_year)); } if ($search_status != '') { @@ -223,10 +223,11 @@ if ($id > 0 || !empty($ref)) { print ''; } + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder print_barre_liste($langs->trans("CustomersOrders"), $page, $_SERVER["PHP_SELF"], $option, $sortfield, $sortorder, '', $num, $totalofrecords, '', 0, '', '', $limit, 0, 0, 1); if (!empty($page)) { - $option .= '&page='.urlencode($page); + $option .= '&page='.urlencode((string) ($page)); } print '
'; diff --git a/htdocs/product/stats/commande_fournisseur.php b/htdocs/product/stats/commande_fournisseur.php index a76c572af19..e91555cea67 100644 --- a/htdocs/product/stats/commande_fournisseur.php +++ b/htdocs/product/stats/commande_fournisseur.php @@ -33,7 +33,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formorder.class.php'; // Load translation files required by the page $langs->loadLangs(array('orders', 'products', 'companies')); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); // Security check @@ -50,10 +50,10 @@ $hookmanager->initHooks(array('productstatssupplierorder')); $mesg = ''; // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -66,10 +66,10 @@ if (!$sortorder) { if (!$sortfield) { $sortfield = "c.date_commande"; } -$search_month = GETPOST('search_month', 'int'); -$search_year = GETPOST('search_year', 'int'); +$search_month = GETPOSTINT('search_month'); +$search_year = GETPOSTINT('search_year'); if (GETPOSTISARRAY('search_status')) { - $search_status = join(',', GETPOST('search_status', 'array:intcomma')); + $search_status = implode(',', GETPOST('search_status', 'array:intcomma')); } else { $search_status = (GETPOST('search_status', 'intcomma') != '' ? GETPOST('search_status', 'intcomma') : GETPOST('statut', 'intcomma')); } @@ -204,10 +204,10 @@ if ($id > 0 || !empty($ref)) { $option .= '&limit='.((int) $limit); } if (!empty($search_month)) { - $option .= '&search_month='.urlencode($search_month); + $option .= '&search_month='.urlencode((string) ($search_month)); } if (!empty($search_year)) { - $option .= '&search_year='.urlencode($search_year); + $option .= '&search_year='.urlencode((string) ($search_year)); } if ($search_status != '') { @@ -223,10 +223,11 @@ if ($id > 0 || !empty($ref)) { print ''; } + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder print_barre_liste($langs->trans("SuppliersOrders"), $page, $_SERVER["PHP_SELF"], $option, $sortfield, $sortorder, '', $num, $totalofrecords, '', 0, '', '', $limit, 0, 0, 1); if (!empty($page)) { - $option .= '&page='.urlencode($page); + $option .= '&page='.urlencode((string) ($page)); } print '
'; diff --git a/htdocs/product/stats/contrat.php b/htdocs/product/stats/contrat.php index e8c773099e7..6712ac33185 100644 --- a/htdocs/product/stats/contrat.php +++ b/htdocs/product/stats/contrat.php @@ -32,7 +32,7 @@ require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php'; // Load translation files required by the page $langs->loadLangs(array('contracts', 'products', 'companies')); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); // Security check @@ -46,10 +46,10 @@ if ($user->socid) { $hookmanager->initHooks(array('productstatscontract')); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -81,7 +81,7 @@ if ($id > 0 || !empty($ref)) { $object = $product; - $parameters = array('id'=>$id); + $parameters = array('id' => $id); $reshook = $hookmanager->executeHooks('doActions', $parameters, $product, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); @@ -179,7 +179,7 @@ if ($id > 0 || !empty($ref)) { $option .= '&search_month='.urlencode($search_month); } if (!empty($search_year)) { - $option .= '&search_year='.urlencode($search_year); + $option .= '&search_year='.urlencode((string) ($search_year)); } print ''."\n"; @@ -191,10 +191,11 @@ if ($id > 0 || !empty($ref)) { print ''; } + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder print_barre_liste($langs->trans("Contrats"), $page, $_SERVER["PHP_SELF"], $option, $sortfield, $sortorder, '', $num, $totalofrecords, '', 0, '', '', $limit, 0, 0, 1); if (!empty($page)) { - $option .= '&page='.urlencode($page); + $option .= '&page='.urlencode((string) ($page)); } $i = 0; diff --git a/htdocs/product/stats/facture.php b/htdocs/product/stats/facture.php index 9eaf04992a3..c44e95eae64 100644 --- a/htdocs/product/stats/facture.php +++ b/htdocs/product/stats/facture.php @@ -35,7 +35,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php'; // Load translation files required by the page $langs->loadLangs(array('companies', 'bills', 'products', 'supplier_proposal')); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); // Security check @@ -58,10 +58,10 @@ $search_array_options = $extrafields->getOptionalsFromPost('facture', '', 'searc $showmessage = GETPOST('showmessage'); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -132,7 +132,7 @@ if ($id > 0 || !empty($ref)) { $object = $product; - $parameters = array('id'=>$id); + $parameters = array('id' => $id); $reshook = $hookmanager->executeHooks('doActions', $parameters, $product, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); @@ -278,7 +278,7 @@ if ($id > 0 || !empty($ref)) { $option .= '&search_month='.urlencode($search_month); } if (!empty($search_year)) { - $option .= '&search_year='.urlencode($search_year); + $option .= '&search_year='.urlencode((string) ($search_year)); } // Add $param from extra fields @@ -297,10 +297,11 @@ if ($id > 0 || !empty($ref)) { print ''; } + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder print_barre_liste($langs->trans("CustomersInvoices"), $page, $_SERVER["PHP_SELF"], $option, $sortfield, $sortorder, '', $num, $totalofrecords, '', 0, '', '', $limit, 0, 0, 1); if (!empty($page)) { - $option .= '&page='.urlencode($page); + $option .= '&page='.urlencode((string) ($page)); } print '
'; @@ -331,7 +332,7 @@ if ($id > 0 || !empty($ref)) { print_liste_field_titre("AmountHT", $_SERVER["PHP_SELF"], "d.total_ht", "", $option, 'align="right"', $sortfield, $sortorder); print_liste_field_titre("Status", $_SERVER["PHP_SELF"], "f.paye,f.fk_statut", "", $option, 'align="right"', $sortfield, $sortorder); // Hook fields - $parameters = array('param'=>$option, 'sortfield'=>$sortfield, 'sortorder'=>$sortorder); + $parameters = array('param' => $option, 'sortfield' => $sortfield, 'sortorder' => $sortorder); $reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; print "
'.$langs->trans("AddIn").''; - print img_picto('', 'stock').$formproduct->selectWarehouses((GETPOSTISSET('fk_parent') ? GETPOST('fk_parent', 'int') : 'ifone'), 'fk_parent', '', 1); + print img_picto('', 'stock').$formproduct->selectWarehouses((GETPOSTISSET('fk_parent') ? GETPOSTINT('fk_parent') : 'ifone'), 'fk_parent', '', 1); print '
'.$langs->trans("Categories").''; $cate_arbo = $form->select_all_categories(Categorie::TYPE_WAREHOUSE, '', 'parent', 64, 0, 1); @@ -397,7 +397,7 @@ if ($action == 'create') { print ''; } else { - $id = GETPOST("id", 'int'); + $id = GETPOSTINT("id"); if ($id > 0 || $ref) { $object = new Entrepot($db); $result = $object->fetch($id, $ref); @@ -417,7 +417,7 @@ if ($action == 'create') { // Confirm delete warehouse if ($action == 'delete') { $formquestion = array( - array('type' => 'other', 'name' => 'info', 'label' => img_warning('').$langs->trans("WarningThisWIllAlsoDeleteStock"), 'morecss'=>'warning') + array('type' => 'other', 'name' => 'info', 'label' => img_warning('').$langs->trans("WarningThisWIllAlsoDeleteStock"), 'morecss' => 'warning') ); $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id, $langs->trans("DeleteAWarehouse"), $langs->trans("ConfirmDeleteWarehouse", $object->label), "confirm_delete", $formquestion, 0, 2); } @@ -555,7 +555,7 @@ if ($action == 'create') { include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_view.tpl.php'; // Categories - if (isModEnabled('categorie')) { + if (isModEnabled('category')) { print '
'.$langs->trans("Categories").''; print $form->showCategories($object->id, Categorie::TYPE_WAREHOUSE, 1); print "
'.dol_print_date($objp->datem).'
'.$langs->trans("Categories").''; $cate_arbo = $form->select_all_categories(Categorie::TYPE_WAREHOUSE, '', 'parent', 64, 0, 1); $c = new Categorie($db); diff --git a/htdocs/product/stock/class/api_stockmovements.class.php b/htdocs/product/stock/class/api_stockmovements.class.php index b0a460f7b97..e2457e09f8d 100644 --- a/htdocs/product/stock/class/api_stockmovements.class.php +++ b/htdocs/product/stock/class/api_stockmovements.class.php @@ -211,9 +211,9 @@ class StockMovements extends DolibarrApi /** * Update stock movement * - * @param int $id Id of warehouse to update - * @param array $request_data Datas - * @return int + * @param int $id Id of warehouse to update + * @param array $request_data Datas + * @return Object Updated object */ /* public function put($id, $request_data = null) diff --git a/htdocs/product/stock/class/api_warehouses.class.php b/htdocs/product/stock/class/api_warehouses.class.php index c03ba11c01d..1af08af0534 100644 --- a/htdocs/product/stock/class/api_warehouses.class.php +++ b/htdocs/product/stock/class/api_warehouses.class.php @@ -188,9 +188,9 @@ class Warehouses extends DolibarrApi /** * Update warehouse * - * @param int $id Id of warehouse to update - * @param array $request_data Datas - * @return int + * @param int $id Id of warehouse to update + * @param array $request_data Datas + * @return Object Updated object */ public function put($id, $request_data = null) { @@ -222,9 +222,9 @@ class Warehouses extends DolibarrApi if ($this->warehouse->update($id, DolibarrApiAccess::$user)) { return $this->get($id); + } else { + throw new RestException(500, $this->warehouse->error); } - - return false; } /** diff --git a/htdocs/product/stock/class/entrepot.class.php b/htdocs/product/stock/class/entrepot.class.php index 6f876f245a7..a062d053ed9 100644 --- a/htdocs/product/stock/class/entrepot.class.php +++ b/htdocs/product/stock/class/entrepot.class.php @@ -4,7 +4,8 @@ * Copyright (C) 2005-2008 Regis Houssin * Copyright (C) 2011 Juanjo Menent * Copyright (C) 2016 Francis Appels - * Copyright (C) 2019-2024 Frédéric France + * Copyright (C) 2019-2024 Frédéric France + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -120,30 +121,30 @@ class Entrepot extends CommonObject /** - * @var array Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. + * @var array|string,position:int,notnull?:int,visible:int,noteditable?:int,default?:string,index?:int,foreignkey?:string,searchall?:int,isameasure?:int,css?:string,csslist?:string,help?:string,showoncombobox?:int,disabled?:int,arrayofkeyval?:array,comment?:string}> Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. */ public $fields = array( - 'rowid' =>array('type'=>'integer', 'label'=>'ID', 'enabled'=>1, 'visible'=>0, 'notnull'=>1, 'position'=>10), - 'entity' =>array('type'=>'integer', 'label'=>'Entity', 'enabled'=>1, 'visible'=>0, 'default'=>1, 'notnull'=>1, 'index'=>1, 'position'=>15), - 'ref' =>array('type'=>'varchar(255)', 'label'=>'Ref', 'enabled'=>1, 'visible'=>1, 'showoncombobox'=>1, 'position'=>25, 'searchall'=>1), - 'description' =>array('type'=>'text', 'label'=>'Description', 'enabled'=>1, 'visible'=>-2, 'position'=>35, 'searchall'=>1), - 'lieu' =>array('type'=>'varchar(64)', 'label'=>'LocationSummary', 'enabled'=>1, 'visible'=>1, 'position'=>40, 'showoncombobox'=>2, 'searchall'=>1), - 'fk_parent' =>array('type'=>'integer:Entrepot:product/stock/class/entrepot.class.php:1:((statut:=:1) AND (entity:IN:__SHARED_ENTITIES__))', 'label'=>'ParentWarehouse', 'enabled'=>1, 'visible'=>-2, 'position'=>41), - 'fk_project' =>array('type'=>'integer:Project:projet/class/project.class.php:1:(fk_statut:=:1)', 'label'=>'Project', 'enabled'=>'$conf->project->enabled', 'visible'=>-1, 'position'=>25), - 'address' =>array('type'=>'varchar(255)', 'label'=>'Address', 'enabled'=>1, 'visible'=>-2, 'position'=>45, 'searchall'=>1), - 'zip' =>array('type'=>'varchar(10)', 'label'=>'Zip', 'enabled'=>1, 'visible'=>-2, 'position'=>50, 'searchall'=>1), - 'town' =>array('type'=>'varchar(50)', 'label'=>'Town', 'enabled'=>1, 'visible'=>-2, 'position'=>55, 'searchall'=>1), - 'fk_departement' =>array('type'=>'integer', 'label'=>'State', 'enabled'=>1, 'visible'=>0, 'position'=>60), - 'fk_pays' =>array('type'=>'integer:Ccountry:core/class/ccountry.class.php', 'label'=>'Country', 'enabled'=>1, 'visible'=>-1, 'position'=>65), - 'phone' =>array('type'=>'varchar(20)', 'label'=>'Phone', 'enabled'=>1, 'visible'=>-2, 'position'=>70, 'searchall'=>1), - 'fax' =>array('type'=>'varchar(20)', 'label'=>'Fax', 'enabled'=>1, 'visible'=>-2, 'position'=>75, 'searchall'=>1), + 'rowid' => array('type' => 'integer', 'label' => 'ID', 'enabled' => 1, 'visible' => 0, 'notnull' => 1, 'position' => 10), + 'entity' => array('type' => 'integer', 'label' => 'Entity', 'enabled' => 1, 'visible' => 0, 'default' => '1', 'notnull' => 1, 'index' => 1, 'position' => 15), + 'ref' => array('type' => 'varchar(255)', 'label' => 'Ref', 'enabled' => 1, 'visible' => 1, 'showoncombobox' => 1, 'position' => 25, 'searchall' => 1), + 'description' => array('type' => 'text', 'label' => 'Description', 'enabled' => 1, 'visible' => -2, 'position' => 35, 'searchall' => 1), + 'lieu' => array('type' => 'varchar(64)', 'label' => 'LocationSummary', 'enabled' => 1, 'visible' => 1, 'position' => 40, 'showoncombobox' => 2, 'searchall' => 1), + 'fk_parent' => array('type' => 'integer:Entrepot:product/stock/class/entrepot.class.php:1:((statut:=:1) AND (entity:IN:__SHARED_ENTITIES__))', 'label' => 'ParentWarehouse', 'enabled' => 1, 'visible' => -2, 'position' => 41), + 'fk_project' => array('type' => 'integer:Project:projet/class/project.class.php:1:(fk_statut:=:1)', 'label' => 'Project', 'enabled' => '$conf->project->enabled', 'visible' => -1, 'position' => 25), + 'address' => array('type' => 'varchar(255)', 'label' => 'Address', 'enabled' => 1, 'visible' => -2, 'position' => 45, 'searchall' => 1), + 'zip' => array('type' => 'varchar(10)', 'label' => 'Zip', 'enabled' => 1, 'visible' => -2, 'position' => 50, 'searchall' => 1), + 'town' => array('type' => 'varchar(50)', 'label' => 'Town', 'enabled' => 1, 'visible' => -2, 'position' => 55, 'searchall' => 1), + 'fk_departement' => array('type' => 'integer', 'label' => 'State', 'enabled' => 1, 'visible' => 0, 'position' => 60), + 'fk_pays' => array('type' => 'integer:Ccountry:core/class/ccountry.class.php', 'label' => 'Country', 'enabled' => 1, 'visible' => -1, 'position' => 65), + 'phone' => array('type' => 'varchar(20)', 'label' => 'Phone', 'enabled' => 1, 'visible' => -2, 'position' => 70, 'searchall' => 1), + 'fax' => array('type' => 'varchar(20)', 'label' => 'Fax', 'enabled' => 1, 'visible' => -2, 'position' => 75, 'searchall' => 1), //'fk_user_author' =>array('type'=>'integer', 'label'=>'Fk user author', 'enabled'=>1, 'visible'=>-2, 'position'=>82), - 'datec' =>array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>1, 'visible'=>-2, 'position'=>300), - 'tms' =>array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>301), - 'warehouse_usage' => array('type'=>'integer', 'label' => 'WarehouseUsage', 'enabled'=>'getDolGlobalInt("MAIN_FEATURES_LEVEL")', 'visible'=>1, 'position'=>400, 'arrayofkeyval'=>array(1=>'InternalWarehouse', 2=>'ExternalWarehouse')), + 'datec' => array('type' => 'datetime', 'label' => 'DateCreation', 'enabled' => 1, 'visible' => -2, 'position' => 300), + 'tms' => array('type' => 'timestamp', 'label' => 'DateModification', 'enabled' => 1, 'visible' => -2, 'notnull' => 1, 'position' => 301), + 'warehouse_usage' => array('type' => 'integer', 'label' => 'WarehouseUsage', 'enabled' => 'getDolGlobalInt("MAIN_FEATURES_LEVEL")', 'visible' => 1, 'position' => 400, 'arrayofkeyval' => array(1 => 'InternalWarehouse', 2 => 'ExternalWarehouse')), //'import_key' =>array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>1, 'visible'=>-2, 'position'=>1000), //'model_pdf' =>array('type'=>'varchar(255)', 'label'=>'ModelPDF', 'enabled'=>1, 'visible'=>0, 'position'=>1010), - 'statut' =>array('type'=>'tinyint(4)', 'label'=>'Status', 'enabled'=>1, 'visible'=>1, 'position'=>500, 'css'=>'minwidth50'), + 'statut' => array('type' => 'tinyint(4)', 'label' => 'Status', 'enabled' => 1, 'visible' => 1, 'position' => 500, 'css' => 'minwidth50'), ); /** @@ -175,7 +176,6 @@ class Entrepot extends CommonObject */ public function __construct($db) { - global $conf; $this->db = $db; $this->labelStatus[self::STATUS_CLOSED] = 'Closed2'; @@ -738,7 +738,7 @@ class Entrepot extends CommonObject $datas['locationsummary'] = '
'.$langs->trans('LocationSummary').': '.$this->lieu; } // show categories for this record only in ajax to not overload lists - if (!$nofetch && isModEnabled('categorie')) { + if (!$nofetch && isModEnabled('category')) { require_once DOL_DOCUMENT_ROOT . '/categories/class/categorie.class.php'; $form = new Form($this->db); $datas['categories_warehouse'] = '
' . $form->showCategories($this->id, Categorie::TYPE_WAREHOUSE, 1, 1); @@ -826,7 +826,7 @@ class Entrepot extends CommonObject global $action; $hookmanager->initHooks(array('warehousedao')); - $parameters = array('id'=>$this->id, 'getnomurl' => &$result, 'withpicto' => $withpicto, 'option' => $option, 'showfullpath' => $showfullpath, 'notooltip'=> $notooltip); + $parameters = array('id' => $this->id, 'getnomurl' => &$result, 'withpicto' => $withpicto, 'option' => $option, 'showfullpath' => $showfullpath, 'notooltip' => $notooltip); $reshook = $hookmanager->executeHooks('getNomUrl', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks if ($reshook > 0) { $result = $hookmanager->resPrint; @@ -842,7 +842,7 @@ class Entrepot extends CommonObject * Used to build previews or test instances. * id must be 0 if object instance is a specimen. * - * @return void + * @return int */ public function initAsSpecimen() { @@ -863,6 +863,8 @@ class Entrepot extends CommonObject $this->town = 'MyTown'; $this->country_id = 1; $this->country_code = 'FR'; + + return 1; } // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps diff --git a/htdocs/product/stock/class/mouvementstock.class.php b/htdocs/product/stock/class/mouvementstock.class.php index cd5eae2e6d8..d9cb5fb5812 100644 --- a/htdocs/product/stock/class/mouvementstock.class.php +++ b/htdocs/product/stock/class/mouvementstock.class.php @@ -3,6 +3,8 @@ * Copyright (C) 2005-2015 Laurent Destailleur * Copyright (C) 2011 Jean Heimburger * Copyright (C) 2014 Cedric GROSS + * Copyright (C) 2024 MDW + * Copyright (C) 2024 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -122,25 +124,25 @@ class MouvementStock extends CommonObject public $fields = array( - 'rowid' =>array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>1, 'visible'=>-1, 'notnull'=>1, 'position'=>10, 'showoncombobox'=>1), - 'tms' =>array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>1, 'visible'=>-1, 'notnull'=>1, 'position'=>15), - 'datem' =>array('type'=>'datetime', 'label'=>'Datem', 'enabled'=>1, 'visible'=>-1, 'position'=>20), - 'fk_product' =>array('type'=>'integer:Product:product/class/product.class.php:1', 'label'=>'Product', 'enabled'=>1, 'visible'=>-1, 'notnull'=>1, 'position'=>25), - 'fk_entrepot' =>array('type'=>'integer:Entrepot:product/stock/class/entrepot.class.php', 'label'=>'Warehouse', 'enabled'=>1, 'visible'=>-1, 'notnull'=>1, 'position'=>30), - 'value' =>array('type'=>'double', 'label'=>'Value', 'enabled'=>1, 'visible'=>-1, 'position'=>35), - 'price' =>array('type'=>'double(24,8)', 'label'=>'Price', 'enabled'=>1, 'visible'=>-1, 'position'=>40), - 'type_mouvement' =>array('type'=>'smallint(6)', 'label'=>'Type mouvement', 'enabled'=>1, 'visible'=>-1, 'position'=>45), - 'fk_user_author' =>array('type'=>'integer:User:user/class/user.class.php', 'label'=>'Fk user author', 'enabled'=>1, 'visible'=>-1, 'position'=>50), - 'label' =>array('type'=>'varchar(255)', 'label'=>'Label', 'enabled'=>1, 'visible'=>-1, 'position'=>55), - 'fk_origin' =>array('type'=>'integer', 'label'=>'Fk origin', 'enabled'=>1, 'visible'=>-1, 'position'=>60), - 'origintype' =>array('type'=>'varchar(32)', 'label'=>'Origintype', 'enabled'=>1, 'visible'=>-1, 'position'=>65), - 'model_pdf' =>array('type'=>'varchar(255)', 'label'=>'Model pdf', 'enabled'=>1, 'visible'=>0, 'position'=>70), - 'fk_projet' =>array('type'=>'integer:Project:projet/class/project.class.php:1:(fk_statut:=:1)', 'label'=>'Project', 'enabled'=>'$conf->project->enabled', 'visible'=>-1, 'notnull'=>1, 'position'=>75), - 'inventorycode' =>array('type'=>'varchar(128)', 'label'=>'InventoryCode', 'enabled'=>1, 'visible'=>-1, 'position'=>80), - 'batch' =>array('type'=>'varchar(30)', 'label'=>'Batch', 'enabled'=>1, 'visible'=>-1, 'position'=>85), - 'eatby' =>array('type'=>'date', 'label'=>'Eatby', 'enabled'=>1, 'visible'=>-1, 'position'=>90), - 'sellby' =>array('type'=>'date', 'label'=>'Sellby', 'enabled'=>1, 'visible'=>-1, 'position'=>95), - 'fk_project' =>array('type'=>'integer:Project:projet/class/project.class.php:1:(fk_statut:=:1)', 'label'=>'Fk project', 'enabled'=>1, 'visible'=>-1, 'position'=>100), + 'rowid' => array('type' => 'integer', 'label' => 'TechnicalID', 'enabled' => 1, 'visible' => -1, 'notnull' => 1, 'position' => 10, 'showoncombobox' => 1), + 'tms' => array('type' => 'timestamp', 'label' => 'DateModification', 'enabled' => 1, 'visible' => -1, 'notnull' => 1, 'position' => 15), + 'datem' => array('type' => 'datetime', 'label' => 'Datem', 'enabled' => 1, 'visible' => -1, 'position' => 20), + 'fk_product' => array('type' => 'integer:Product:product/class/product.class.php:1', 'label' => 'Product', 'enabled' => 1, 'visible' => -1, 'notnull' => 1, 'position' => 25), + 'fk_entrepot' => array('type' => 'integer:Entrepot:product/stock/class/entrepot.class.php', 'label' => 'Warehouse', 'enabled' => 1, 'visible' => -1, 'notnull' => 1, 'position' => 30), + 'value' => array('type' => 'double', 'label' => 'Value', 'enabled' => 1, 'visible' => -1, 'position' => 35), + 'price' => array('type' => 'double(24,8)', 'label' => 'Price', 'enabled' => 1, 'visible' => -1, 'position' => 40), + 'type_mouvement' => array('type' => 'smallint(6)', 'label' => 'Type mouvement', 'enabled' => 1, 'visible' => -1, 'position' => 45), + 'fk_user_author' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'Fk user author', 'enabled' => 1, 'visible' => -1, 'position' => 50), + 'label' => array('type' => 'varchar(255)', 'label' => 'Label', 'enabled' => 1, 'visible' => -1, 'position' => 55), + 'fk_origin' => array('type' => 'integer', 'label' => 'Fk origin', 'enabled' => 1, 'visible' => -1, 'position' => 60), + 'origintype' => array('type' => 'varchar(32)', 'label' => 'Origintype', 'enabled' => 1, 'visible' => -1, 'position' => 65), + 'model_pdf' => array('type' => 'varchar(255)', 'label' => 'Model pdf', 'enabled' => 1, 'visible' => 0, 'position' => 70), + 'fk_projet' => array('type' => 'integer:Project:projet/class/project.class.php:1:(fk_statut:=:1)', 'label' => 'Project', 'enabled' => '$conf->project->enabled', 'visible' => -1, 'notnull' => 1, 'position' => 75), + 'inventorycode' => array('type' => 'varchar(128)', 'label' => 'InventoryCode', 'enabled' => 1, 'visible' => -1, 'position' => 80), + 'batch' => array('type' => 'varchar(30)', 'label' => 'Batch', 'enabled' => 1, 'visible' => -1, 'position' => 85), + 'eatby' => array('type' => 'date', 'label' => 'Eatby', 'enabled' => 1, 'visible' => -1, 'position' => 90), + 'sellby' => array('type' => 'date', 'label' => 'Sellby', 'enabled' => 1, 'visible' => -1, 'position' => 95), + 'fk_project' => array('type' => 'integer:Project:projet/class/project.class.php:1:(fk_statut:=:1)', 'label' => 'Fk project', 'enabled' => 1, 'visible' => -1, 'position' => 100), ); @@ -181,7 +183,7 @@ class MouvementStock extends CommonObject * @param int $disablestockchangeforsubproduct Disable stock change for sub-products of kit (useful only if product is a subproduct) * @param int $donotcleanemptylines Do not clean lines in stock table with qty=0 (because we want to have this done by the caller) * @param boolean $force_update_batch Allows to add batch stock movement even if $product doesn't use batch anymore - * @return int Return integer <0 if KO, 0 if fk_product is null or product id does not exists, >0 if OK + * @return int|string Return integer <0 if KO, 0 if fk_product is null or product id does not exists, >0 if OK, or printabl result of hook */ public function _create($user, $fk_product, $entrepot_id, $qty, $type, $price = 0, $label = '', $inventorycode = '', $datem = '', $eatby = '', $sellby = '', $batch = '', $skip_batch = false, $id_product_batch = 0, $disablestockchangeforsubproduct = 0, $donotcleanemptylines = 0, $force_update_batch = false) { @@ -192,7 +194,7 @@ class MouvementStock extends CommonObject require_once DOL_DOCUMENT_ROOT.'/product/stock/class/productlot.class.php'; $error = 0; - dol_syslog(get_class($this)."::_create start userid=$user->id, fk_product=$fk_product, warehouse_id=$entrepot_id, qty=$qty, type=$type, price=$price, label=$label, inventorycode=$inventorycode, datem=".$datem.", eatby=".$eatby.", sellby=".$sellby.", batch=".$batch.", skip_batch=".$skip_batch); + dol_syslog(get_class($this)."::_create start userid=$user->id, fk_product=$fk_product, warehouse_id=$entrepot_id, qty=$qty, type=$type, price=$price, label=$label, inventorycode=$inventorycode, datem=".$datem.", eatby=".$eatby.", sellby=".$sellby.", batch=".$batch.", skip_batch=".json_encode($skip_batch)); // Call hook at beginning global $action, $hookmanager; @@ -545,11 +547,11 @@ class MouvementStock extends CommonObject } else { $newpmp = $oldpmp; } - } elseif ($type == 1 || $type == 2) { - // After a stock decrease, we don't change value of the AWP/PMP of a product. - $newpmp = $oldpmp; } else { - // Type of movement unknown + // ($type == 1 || $type == 2) + // -> After a stock decrease, we don't change value of the AWP/PMP of a product. + // else + // Type of movement unknown $newpmp = $oldpmp; } } @@ -579,11 +581,11 @@ class MouvementStock extends CommonObject if ($id_product_batch > 0) { $result = $this->createBatch($id_product_batch, $qty); if ($result == -2 && $fk_product_stock > 0) { // The entry for this product batch does not exists anymore, bu we already have a llx_product_stock, so we recreate the batch entry in product_batch - $param_batch = array('fk_product_stock' =>$fk_product_stock, 'batchnumber'=>$batch); + $param_batch = array('fk_product_stock' => $fk_product_stock, 'batchnumber' => $batch); $result = $this->createBatch($param_batch, $qty); } } else { - $param_batch = array('fk_product_stock' =>$fk_product_stock, 'batchnumber'=>$batch); + $param_batch = array('fk_product_stock' => $fk_product_stock, 'batchnumber' => $batch); $result = $this->createBatch($param_batch, $qty); } if ($result < 0) { @@ -811,9 +813,9 @@ class MouvementStock extends CommonObject * @param int $qty Quantity * @param int $price Price * @param string $label Label of stock movement - * @param integer|string $datem Force date of movement - * @param integer $eatby eat-by date - * @param integer $sellby sell-by date + * @param int|string $datem Force date of movement + * @param int|string $eatby eat-by date + * @param int|string $sellby sell-by date * @param string $batch batch number * @param int $id_product_batch Id product_batch * @param string $inventorycode Inventory code @@ -1065,16 +1067,16 @@ class MouvementStock extends CommonObject * Used to build previews or test instances. * id must be 0 if object instance is a specimen. * - * @return void + * @return int */ public function initAsSpecimen() { - global $user, $langs, $conf, $mysoc; - // Initialize parameters $this->id = 0; // There is no specific properties. All data into insert are provided as method parameter. + + return 1; } /** @@ -1139,7 +1141,7 @@ class MouvementStock extends CommonObject $label .= '
'; $label .= ''.$langs->trans('Ref').': '.$this->id; $label .= '
'.$langs->trans('Label').': '.$this->label; - $qtylabel = (($this->qty > 0) ? '+' : '') . $this->qty . ''; + $qtylabel = (($this->qty > 0) ? '+' : '') . $this->qty . ''; $label .= '
'.$langs->trans('Qty').': ' . $qtylabel; if ($this->batch) { $label .= '
'.$langs->trans('Batch').': '.$this->batch; diff --git a/htdocs/product/stock/class/productlot.class.php b/htdocs/product/stock/class/productlot.class.php index 70f6334972d..3d46b4ff41e 100644 --- a/htdocs/product/stock/class/productlot.class.php +++ b/htdocs/product/stock/class/productlot.class.php @@ -3,8 +3,9 @@ * Copyright (C) 2014 Juanjo Menent * Copyright (C) 2015 Florian Henry * Copyright (C) 2015 Raphaël Doursenaud - * Copyright (C) 2018-2022 Frédéric France + * Copyright (C) 2018-2024 Frédéric France * Copyright (C) 2023 Gauthier VERDOL + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -98,28 +99,28 @@ class Productlot extends CommonObject */ /** - * @var array Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. + * @var array|string,position:int,notnull?:int,visible:int,noteditable?:int,default?:string,index?:int,foreignkey?:string,searchall?:int,isameasure?:int,css?:string,csslist?:string,help?:string,showoncombobox?:int,disabled?:int,arrayofkeyval?:array,comment?:string}> Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. */ public $fields = array( - 'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>1, 'visible'=>-2, 'noteditable'=>1, 'notnull'=> 1, 'index'=>1, 'position'=>1, 'comment'=>'Id', 'css'=>'left'), - 'fk_product' => array('type'=>'integer:Product:product/class/product.class.php', 'label'=>'Product', 'enabled'=>1, 'visible'=>1, 'position'=>5, 'notnull'=>1, 'index'=>1, 'searchall'=>1, 'picto' => 'product', 'css'=>'maxwidth500 widthcentpercentminusxx', 'csslist'=>'maxwidth150'), - 'batch' => array('type'=>'varchar(30)', 'label'=>'Batch', 'enabled'=>1, 'visible'=>1, 'notnull'=>1, 'showoncombobox'=>1, 'index'=>1, 'position'=>10, 'comment'=>'Batch', 'searchall'=>1, 'picto'=>'lot', 'validate'=>1), - 'entity' => array('type'=>'integer', 'label'=>'Entity', 'enabled'=>1, 'visible'=>0, 'default'=>1, 'notnull'=>1, 'index'=>1, 'position'=>20), - 'sellby' => array('type'=>'date', 'label'=>'SellByDate', 'enabled'=>'empty($conf->global->PRODUCT_DISABLE_SELLBY)?1:0', 'visible'=>1, 'notnull'=>0, 'position'=>60), - 'eatby' => array('type'=>'date', 'label'=>'EatByDate', 'enabled'=>'empty($conf->global->PRODUCT_DISABLE_EATBY)?1:0', 'visible'=>1, 'notnull'=>0, 'position'=>62), - 'eol_date' => array('type'=>'date', 'label'=>'EndOfLife', 'enabled'=>'getDolGlobalInt("PRODUCT_LOT_ENABLE_QUALITY_CONTROL")?1:0', 'visible'=>'getDolGlobalInt("PRODUCT_LOT_ENABLE_QUALITY_CONTROL")?5:0', 'position'=>70), - 'manufacturing_date' => array('type'=>'date', 'label'=>'ManufacturingDate', 'enabled'=>'getDolGlobalInt("PRODUCT_LOT_ENABLE_TRACEABILITY")?1:0', 'visible'=>'getDolGlobalInt("PRODUCT_LOT_ENABLE_TRACEABILITY")?5:0', 'position'=>80), - 'scrapping_date' => array('type'=>'date', 'label'=>'DestructionDate', 'enabled'=>'getDolGlobalInt("PRODUCT_LOT_ENABLE_TRACEABILITY")?1:0', 'visible'=>'getDolGlobalInt("PRODUCT_LOT_ENABLE_TRACEABILITY")?5:0', 'position'=>90), + 'rowid' => array('type' => 'integer', 'label' => 'TechnicalID', 'enabled' => 1, 'visible' => -2, 'noteditable' => 1, 'notnull' => 1, 'index' => 1, 'position' => 1, 'comment' => 'Id', 'css' => 'left'), + 'fk_product' => array('type' => 'integer:Product:product/class/product.class.php', 'label' => 'Product', 'enabled' => 1, 'visible' => 1, 'position' => 5, 'notnull' => 1, 'index' => 1, 'searchall' => 1, 'picto' => 'product', 'css' => 'maxwidth500 widthcentpercentminusxx', 'csslist' => 'maxwidth150'), + 'batch' => array('type' => 'varchar(30)', 'label' => 'Batch', 'enabled' => 1, 'visible' => 1, 'notnull' => 1, 'showoncombobox' => 1, 'index' => 1, 'position' => 10, 'comment' => 'Batch', 'searchall' => 1, 'picto' => 'lot', 'validate' => 1), + 'entity' => array('type' => 'integer', 'label' => 'Entity', 'enabled' => 1, 'visible' => 0, 'default' => '1', 'notnull' => 1, 'index' => 1, 'position' => 20), + 'sellby' => array('type' => 'date', 'label' => 'SellByDate', 'enabled' => 'empty($conf->global->PRODUCT_DISABLE_SELLBY)?1:0', 'visible' => 1, 'notnull' => 0, 'position' => 60), + 'eatby' => array('type' => 'date', 'label' => 'EatByDate', 'enabled' => 'empty($conf->global->PRODUCT_DISABLE_EATBY)?1:0', 'visible' => 1, 'notnull' => 0, 'position' => 62), + 'eol_date' => array('type' => 'date', 'label' => 'EndOfLife', 'enabled' => 'getDolGlobalInt("PRODUCT_LOT_ENABLE_QUALITY_CONTROL")?1:0', 'visible' => 'getDolGlobalInt("PRODUCT_LOT_ENABLE_QUALITY_CONTROL")?5:0', 'position' => 70), + 'manufacturing_date' => array('type' => 'date', 'label' => 'ManufacturingDate', 'enabled' => 'getDolGlobalInt("PRODUCT_LOT_ENABLE_TRACEABILITY")?1:0', 'visible' => 'getDolGlobalInt("PRODUCT_LOT_ENABLE_TRACEABILITY")?5:0', 'position' => 80), + 'scrapping_date' => array('type' => 'date', 'label' => 'DestructionDate', 'enabled' => 'getDolGlobalInt("PRODUCT_LOT_ENABLE_TRACEABILITY")?1:0', 'visible' => 'getDolGlobalInt("PRODUCT_LOT_ENABLE_TRACEABILITY")?5:0', 'position' => 90), //'commissionning_date' => array('type'=>'date', 'label'=>'FirstUseDate', 'enabled'=>'getDolGlobalInt("PRODUCT_LOT_ENABLE_TRACEABILITY", 0)', 'visible'=>5, 'position'=>100), - 'qc_frequency' => array('type'=>'integer', 'label'=>'QCFrequency', 'enabled'=>'getDolGlobalInt("PRODUCT_LOT_ENABLE_QUALITY_CONTROL")?1:0', 'visible'=>'getDolGlobalInt("PRODUCT_LOT_ENABLE_QUALITY_CONTROL")?5:0', 'position'=>110), - 'lifetime' => array('type'=>'integer', 'label'=>'Lifetime', 'enabled'=>'getDolGlobalInt("PRODUCT_LOT_ENABLE_QUALITY_CONTROL")?1:0', 'visible'=>'getDolGlobalInt("PRODUCT_LOT_ENABLE_QUALITY_CONTROL")?5:0', 'position'=>110), + 'qc_frequency' => array('type' => 'integer', 'label' => 'QCFrequency', 'enabled' => 'getDolGlobalInt("PRODUCT_LOT_ENABLE_QUALITY_CONTROL")?1:0', 'visible' => 'getDolGlobalInt("PRODUCT_LOT_ENABLE_QUALITY_CONTROL")?5:0', 'position' => 110), + 'lifetime' => array('type' => 'integer', 'label' => 'Lifetime', 'enabled' => 'getDolGlobalInt("PRODUCT_LOT_ENABLE_QUALITY_CONTROL")?1:0', 'visible' => 'getDolGlobalInt("PRODUCT_LOT_ENABLE_QUALITY_CONTROL")?5:0', 'position' => 110), 'model_pdf' => array('type' => 'varchar(255)', 'label' => 'Model pdf', 'enabled' => 1, 'visible' => 0, 'position' => 215), 'last_main_doc' => array('type' => 'varchar(255)', 'label' => 'LastMainDoc', 'enabled' => 1, 'visible' => -2, 'position' => 310), - 'datec' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>1, 'visible'=>0, 'notnull'=>1, 'position'=>500), - 'tms' => array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>501), - 'fk_user_creat' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserAuthor', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>510, 'foreignkey'=>'llx_user.rowid'), - 'fk_user_modif' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserModif', 'enabled'=>1, 'visible'=>-2, 'notnull'=>-1, 'position'=>511), - 'import_key' => array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>1, 'visible'=>-2, 'notnull'=>-1, 'index'=>0, 'position'=>1000) + 'datec' => array('type' => 'datetime', 'label' => 'DateCreation', 'enabled' => 1, 'visible' => 0, 'notnull' => 1, 'position' => 500), + 'tms' => array('type' => 'timestamp', 'label' => 'DateModification', 'enabled' => 1, 'visible' => -2, 'notnull' => 1, 'position' => 501), + 'fk_user_creat' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'UserAuthor', 'enabled' => 1, 'visible' => -2, 'notnull' => 1, 'position' => 510, 'foreignkey' => 'llx_user.rowid'), + 'fk_user_modif' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'UserModif', 'enabled' => 1, 'visible' => -2, 'notnull' => -1, 'position' => 511), + 'import_key' => array('type' => 'varchar(14)', 'label' => 'ImportId', 'enabled' => 1, 'visible' => -2, 'notnull' => -1, 'index' => 0, 'position' => 1000) ); /** @@ -161,7 +162,7 @@ class Productlot extends CommonObject */ public $import_key; - public $stats_supplier_order=array(); + public $stats_supplier_order = array(); /** @@ -853,7 +854,7 @@ class Productlot extends CommonObject $sql = "SELECT COUNT(DISTINCT cf.fk_soc) as nb_customers, COUNT(DISTINCT cf.rowid) as nb,"; $sql .= " COUNT(cfd.rowid) as nb_rows, SUM(cfdi.qty) as qty"; - $sql .= " FROM ".$this->db->prefix()."commande_fournisseur_dispatch as cfdi"; + $sql .= " FROM ".$this->db->prefix()."receptiondet_batch as cfdi"; $sql .= " INNER JOIN ".$this->db->prefix()."commande_fournisseurdet as cfd ON (cfd.rowid = cfdi.fk_commandefourndet)"; $sql .= " INNER JOIN ".$this->db->prefix()."commande_fournisseur as cf ON (cf.rowid = cfd.fk_commande)"; // $sql .= ", ".$this->db->prefix()."societe as s"; @@ -928,7 +929,7 @@ class Productlot extends CommonObject $sql = "SELECT COUNT(DISTINCT recep.fk_soc) as nb_customers, COUNT(DISTINCT recep.rowid) as nb,"; $sql .= " COUNT(cfdi.rowid) as nb_rows, SUM(cfdi.qty) as qty"; - $sql .= " FROM ".$this->db->prefix()."commande_fournisseur_dispatch as cfdi"; + $sql .= " FROM ".$this->db->prefix()."receptiondet_batch as cfdi"; $sql .= " INNER JOIN ".$this->db->prefix()."reception as recep ON (recep.rowid = cfdi.fk_reception)"; // $sql .= ", ".$this->db->prefix()."societe as s"; if (!$user->hasRight('societe', 'client', 'voir')) { @@ -1205,7 +1206,7 @@ class Productlot extends CommonObject * Initialise object with example values * Id must be 0 if object instance is a specimen * - * @return void + * @return int */ public function initAsSpecimen() { @@ -1219,15 +1220,17 @@ class Productlot extends CommonObject $this->specimen = 1; $this->entity = $conf->entity; - $this->fk_product = null; + $this->fk_product = 0; $this->batch = ''; $this->eatby = $now - 100000; $this->sellby = $now - 100000; $this->datec = $now - 3600; $this->tms = $now; - $this->fk_user_creat = null; - $this->fk_user_modif = null; + $this->fk_user_creat = 0; + $this->fk_user_modif = 0; $this->import_key = '123456'; + + return 1; } /** diff --git a/htdocs/product/stock/class/productstockentrepot.class.php b/htdocs/product/stock/class/productstockentrepot.class.php index 7d9e7c07d2b..c1335b48b0b 100644 --- a/htdocs/product/stock/class/productstockentrepot.class.php +++ b/htdocs/product/stock/class/productstockentrepot.class.php @@ -3,7 +3,8 @@ * Copyright (C) 2014-2016 Juanjo Menent * Copyright (C) 2015 Florian Henry * Copyright (C) 2015 Raphaël Doursenaud - * Copyright (C) 2018-2024 Frédéric France + * Copyright (C) 2018-2024 Frédéric France + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -137,13 +138,13 @@ class ProductStockEntrepot extends CommonObject $this->id = $this->db->last_insert_id($this->db->prefix().$this->table_element); //if (!$notrigger) { - // Uncomment this and change MYOBJECT to your own tag if you - // want this action to call a trigger. + // Uncomment this and change MYOBJECT to your own tag if you + // want this action to call a trigger. - //// Call triggers - //$result=$this->call_trigger('MYOBJECT_CREATE',$user); - //if ($result < 0) $error++; - //// End call triggers + //// Call triggers + //$result=$this->call_trigger('MYOBJECT_CREATE',$user); + //if ($result < 0) $error++; + //// End call triggers //} } @@ -230,45 +231,53 @@ class ProductStockEntrepot extends CommonObject /** * Load object in memory from the database * - * @param int $fk_product Product from which we want to get limit and desired stock by warehouse - * @param int $fk_entrepot Warehouse in which we want to get products limit and desired stock - * @param string $sortorder Sort Order - * @param string $sortfield Sort field - * @param int $limit offset limit - * @param int $offset offset limit - * @param array $filter filter array - * @param string $filtermode filter mode (AND or OR) - * - * @return int|array Return integer <0 if KO, array if OK + * @param int $fk_product Product from which we want to get limit and desired stock by warehouse + * @param int $fk_entrepot Warehouse in which we want to get products limit and desired stock + * @param string $sortorder Sort Order + * @param string $sortfield Sort field + * @param int $limit Limit + * @param int $offset Offset limit + * @param string|array $filter Filter USF. + * @param string $filtermode Filter mode (AND or OR) + * @return int|array Return integer <0 if KO, array if OK */ - public function fetchAll($fk_product = 0, $fk_entrepot = 0, $sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND') + public function fetchAll($fk_product = 0, $fk_entrepot = 0, $sortorder = '', $sortfield = '', $limit = 0, $offset = 0, $filter = '', $filtermode = 'AND') { dol_syslog(__METHOD__, LOG_DEBUG); $sql = "SELECT"; $sql .= " t.rowid,"; - $sql .= " t.tms,"; $sql .= " t.fk_product,"; $sql .= " t.fk_entrepot,"; $sql .= " t.seuil_stock_alerte,"; $sql .= " t.desiredstock,"; $sql .= " t.import_key"; - - $sql .= " FROM ".$this->db->prefix().$this->table_element." as t"; - $sql .= " WHERE 1=1"; // Manage filter - $sqlwhere = array(); - if (count($filter) > 0) { - foreach ($filter as $key => $value) { - $sqlwhere [] = $key." LIKE '%".$this->db->escape($value)."%'"; + if (is_array($filter)) { + $sqlwhere = array(); + if (count($filter) > 0) { + foreach ($filter as $key => $value) { + $sqlwhere[] = $this->db->sanitize($key)." LIKE '%".$this->db->escape($this->db->escapeforlike($value))."%'"; + } } + if (count($sqlwhere) > 0) { + $sql .= " AND ".implode(' '.$this->db->escape($filtermode).' ', $sqlwhere); + } + + $filter = ''; } - if (count($sqlwhere) > 0) { - $sql .= " AND ".implode(' '.$this->db->escape($filtermode).' ', $sqlwhere); + + // Manage filter + $errormessage = ''; + $sql .= forgeSQLFromUniversalSearchCriteria($filter, $errormessage); + if ($errormessage) { + $this->errors[] = $errormessage; + dol_syslog(__METHOD__.' '.implode(',', $this->errors), LOG_ERR); + return -1; } if (!empty($fk_product) && $fk_product > 0) { @@ -291,11 +300,11 @@ class ProductStockEntrepot extends CommonObject if ($resql) { while ($obj = $this->db->fetch_object($resql)) { $lines[$obj->rowid] = array( - 'id'=>$obj->rowid - ,'fk_product'=>$obj->fk_product - ,'fk_entrepot'=>$obj->fk_entrepot - ,'seuil_stock_alerte'=>$obj->seuil_stock_alerte - ,'desiredstock'=>$obj->desiredstock + 'id' => $obj->rowid + ,'fk_product' => $obj->fk_product + ,'fk_entrepot' => $obj->fk_entrepot + ,'seuil_stock_alerte' => $obj->seuil_stock_alerte + ,'desiredstock' => $obj->desiredstock ); } $this->db->free($resql); @@ -596,7 +605,7 @@ class ProductStockEntrepot extends CommonObject * Initialise object with example values * Id must be 0 if object instance is a specimen * - * @return void + * @return int */ public function initAsSpecimen() { @@ -608,5 +617,7 @@ class ProductStockEntrepot extends CommonObject $this->seuil_stock_alerte = ''; $this->desiredstock = ''; $this->import_key = ''; + + return 1; } } diff --git a/htdocs/product/stock/fiche-valo.php b/htdocs/product/stock/fiche-valo.php index 0e3f9367e16..e9e6c5034f5 100644 --- a/htdocs/product/stock/fiche-valo.php +++ b/htdocs/product/stock/fiche-valo.php @@ -30,7 +30,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/stock.lib.php'; // Load translation files required by the page $langs->loadLangs(array('products', 'stocks', 'companies')); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); // Security check $result = restrictedArea($user, 'stock'); diff --git a/htdocs/product/stock/info.php b/htdocs/product/stock/info.php index c49d7f2f208..84fea5ff91a 100644 --- a/htdocs/product/stock/info.php +++ b/htdocs/product/stock/info.php @@ -30,7 +30,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/stock.lib.php'; // Load translation files required by the page $langs->load("stocks"); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); // Security check diff --git a/htdocs/product/stock/lib/replenishment.lib.php b/htdocs/product/stock/lib/replenishment.lib.php index 8751935cb13..e6bf9d8a060 100644 --- a/htdocs/product/stock/lib/replenishment.lib.php +++ b/htdocs/product/stock/lib/replenishment.lib.php @@ -38,7 +38,7 @@ function dolDispatchToDo($order_id) $ordered = array(); // Count nb of quantity dispatched per product - $sql = 'SELECT fk_product, SUM(qty) as qtydispatched FROM '.MAIN_DB_PREFIX.'commande_fournisseur_dispatch'; + $sql = 'SELECT fk_product, SUM(qty) as qtydispatched FROM '.MAIN_DB_PREFIX.'receptiondet_batch'; $sql .= ' WHERE fk_commande = '.((int) $order_id); $sql .= ' GROUP BY fk_product'; $sql .= ' ORDER by fk_product'; diff --git a/htdocs/product/stock/list.php b/htdocs/product/stock/list.php index 8fc6a31c813..787cc14f779 100644 --- a/htdocs/product/stock/list.php +++ b/htdocs/product/stock/list.php @@ -29,8 +29,7 @@ // Load Dolibarr environment require '../../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/product/stock/class/entrepot.class.php'; - -if (isModEnabled('categorie')) { +if (isModEnabled('category')) { require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcategory.class.php'; require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; } @@ -40,7 +39,7 @@ $langs->loadLangs(array("stocks", "other")); $action = GETPOST('action', 'aZ09') ? GETPOST('action', 'aZ09') : 'view'; // The action 'create'/'add', 'edit'/'update', 'view', ... $massaction = GETPOST('massaction', 'alpha'); // The bulk action (combo box choice into lists) -$show_files = GETPOST('show_files', 'int'); // Show files area generated by bulk actions ? +$show_files = GETPOSTINT('show_files'); // Show files area generated by bulk actions ? $confirm = GETPOST('confirm', 'alpha'); // Result of a confirmation $cancel = GETPOST('cancel', 'alpha'); // We click on a Cancel button $toselect = GETPOST('toselect', 'array'); // Array of ids of elements selected into a list @@ -53,18 +52,18 @@ $mode = GETPOST('mode', 'aZ'); // The output mode ('list', 'kanban', 'hier $search_all = trim((GETPOST('search_all', 'alphanohtml') != '') ? GETPOST('search_all', 'alphanohtml') : GETPOST('sall', 'alphanohtml')); $search_ref = GETPOST("sref", "alpha") ? GETPOST("sref", "alpha") : GETPOST("search_ref", "alpha"); $search_label = GETPOST("snom", "alpha") ? GETPOST("snom", "alpha") : GETPOST("search_label", "alpha"); -$search_status = GETPOST("search_status", "int"); +$search_status = GETPOST("search_status", "intcomma"); $search_category_list = array(); -if (isModEnabled('categorie')) { +if (isModEnabled('category')) { $search_category_list = GETPOST("search_category_".Categorie::TYPE_WAREHOUSE."_list", "array"); } // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // If $page is not defined, or '' or -1 or if we click on clear filters $page = 0; @@ -125,7 +124,7 @@ foreach ($object->fields as $key => $val) { $arrayfields['t.'.$key] = array( 'label' => $val['label'], 'checked' => (($visible < 0) ? 0 : 1), - 'enabled' => (abs($visible) != 3 && dol_eval($val['enabled'], 1)), + 'enabled' => (abs($visible) != 3 && (int) dol_eval($val['enabled'], 1)), 'position' => $val['position'], 'help' => isset($val['help']) ? $val['help'] : '' ); @@ -426,9 +425,9 @@ foreach ($search as $key => $val) { } } } elseif (preg_match('/(_dtstart|_dtend)$/', $key) && !empty($val)) { - $param .= '&search_'.$key.'month='.((int) GETPOST('search_'.$key.'month', 'int')); - $param .= '&search_'.$key.'day='.((int) GETPOST('search_'.$key.'day', 'int')); - $param .= '&search_'.$key.'year='.((int) GETPOST('search_'.$key.'year', 'int')); + $param .= '&search_'.$key.'month='.(GETPOSTINT('search_'.$key.'month')); + $param .= '&search_'.$key.'day='.(GETPOSTINT('search_'.$key.'day')); + $param .= '&search_'.$key.'year='.(GETPOSTINT('search_'.$key.'year')); } elseif ($search[$key] != '') { $param .= '&search_'.$key.'='.urlencode($search[$key]); } @@ -446,7 +445,7 @@ $arrayofmassactions = array( //'builddoc'=>img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("PDFMerge"), ); //if ($user->rights->stock->supprimer) $arrayofmassactions['predelete']=img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete"); -if (GETPOST('nomassaction', 'int') || in_array($massaction, array('presend', 'predelete','preaffecttag'))) { +if (GETPOSTINT('nomassaction') || in_array($massaction, array('presend', 'predelete','preaffecttag'))) { $arrayofmassactions = array(); } if (isModEnabled('category') && $user->hasRight('stock', 'creer')) { @@ -497,7 +496,7 @@ if ($search_all) { $moreforfilter = ''; -if (isModEnabled('categorie') && $user->hasRight('categorie', 'lire')) { +if (isModEnabled('category') && $user->hasRight('categorie', 'lire')) { $formcategory = new FormCategory($db); $moreforfilter .= $formcategory->getFilterBox(Categorie::TYPE_WAREHOUSE, $search_category_list); } @@ -524,7 +523,7 @@ if (!empty($moreforfilter)) { } $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; -$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')) : ''); // This also change content of $arrayfields +$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) : ''); // This also change content of $arrayfields $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); print '
'; diff --git a/htdocs/product/stock/massstockmove.php b/htdocs/product/stock/massstockmove.php index 84b8b8d0379..88b51aa78ab 100644 --- a/htdocs/product/stock/massstockmove.php +++ b/htdocs/product/stock/massstockmove.php @@ -53,18 +53,18 @@ $result = restrictedArea($user, 'produit|service'); //checks if a product has been ordered $action = GETPOST('action', 'aZ09'); -$id_product = GETPOST('productid', 'int'); -$id_sw = GETPOST('id_sw', 'int'); -$id_tw = GETPOST('id_tw', 'int'); +$id_product = GETPOSTINT('productid'); +$id_sw = GETPOSTINT('id_sw'); +$id_tw = GETPOSTINT('id_tw'); $batch = GETPOST('batch'); $qty = GETPOST('qty'); $idline = GETPOST('idline'); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // If $page is not defined, or '' or -1 or if we click on clear filters $page = 0; diff --git a/htdocs/product/stock/movement_card.php b/htdocs/product/stock/movement_card.php index 1870535c45c..eae9deb3ef0 100644 --- a/htdocs/product/stock/movement_card.php +++ b/htdocs/product/stock/movement_card.php @@ -5,6 +5,7 @@ * Copyright (C) 2015 Juanjo Menent * Copyright (C) 2018 Ferran Marcet * Copyright (C) 2019 Frédéric France + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -52,17 +53,17 @@ if (isModEnabled('productbatch')) { // Security check $result = restrictedArea($user, 'stock'); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); -$msid = GETPOST('msid', 'int'); -$product_id = GETPOST("product_id", 'int'); +$msid = GETPOSTINT('msid'); +$product_id = GETPOSTINT("product_id"); $action = GETPOST('action', 'aZ09'); $cancel = GETPOST('cancel', 'alpha'); $contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'movementlist'; -$idproduct = GETPOST('idproduct', 'int'); -$year = GETPOST("year", 'int'); -$month = GETPOST("month", 'int'); +$idproduct = GETPOSTINT('idproduct'); +$year = GETPOSTINT("year"); +$month = GETPOSTINT("month"); $search_ref = GETPOST('search_ref', 'alpha'); $search_movement = GETPOST("search_movement", 'alpha'); $search_product_ref = trim(GETPOST("search_product_ref", 'alpha')); @@ -72,10 +73,10 @@ $search_inventorycode = trim(GETPOST("search_inventorycode", 'alpha')); $search_user = trim(GETPOST("search_user", 'alpha')); $search_batch = trim(GETPOST("search_batch", 'alpha')); $search_qty = trim(GETPOST("search_qty", 'alpha')); -$search_type_mouvement = GETPOST('search_type_mouvement', 'int'); +$search_type_mouvement = GETPOSTINT('search_type_mouvement'); -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); if (empty($page) || $page == -1) { @@ -89,7 +90,7 @@ if (!$sortorder) { $sortorder = "DESC"; } -$pdluoid = GETPOST('pdluoid', 'int'); +$pdluoid = GETPOSTINT('pdluoid'); // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context $object = new MouvementStock($db); @@ -103,21 +104,21 @@ $extrafields->fetch_name_optionals_label($object->table_element); $search_array_options = $extrafields->getOptionalsFromPost($object->table_element, '', 'search_'); $arrayfields = array( - 'm.rowid'=>array('label'=>$langs->trans("Ref"), 'checked'=>1), - 'm.datem'=>array('label'=>$langs->trans("Date"), 'checked'=>1), - 'p.ref'=>array('label'=>$langs->trans("ProductRef"), 'checked'=>1, 'css'=>'maxwidth100'), - 'p.label'=>array('label'=>$langs->trans("ProductLabel"), 'checked'=>1), - 'm.batch'=>array('label'=>$langs->trans("BatchNumberShort"), 'checked'=>1, 'enabled'=>(isModEnabled('productbatch'))), - 'pl.eatby'=>array('label'=>$langs->trans("EatByDate"), 'checked'=>0, 'position'=>10, 'enabled'=>(isModEnabled('productbatch'))), - 'pl.sellby'=>array('label'=>$langs->trans("SellByDate"), 'checked'=>0, 'position'=>10, 'enabled'=>(isModEnabled('productbatch'))), - 'e.ref'=>array('label'=>$langs->trans("Warehouse"), 'checked'=>1, 'enabled'=>(!($id > 0))), // If we are on specific warehouse, we hide it - 'm.fk_user_author'=>array('label'=>$langs->trans("Author"), 'checked'=>0), - 'm.inventorycode'=>array('label'=>$langs->trans("InventoryCodeShort"), 'checked'=>1), - 'm.label'=>array('label'=>$langs->trans("MovementLabel"), 'checked'=>1), - 'm.type_mouvement'=>array('label'=>$langs->trans("TypeMovement"), 'checked'=>1), - 'origin'=>array('label'=>$langs->trans("Origin"), 'checked'=>1), - 'm.value'=>array('label'=>$langs->trans("Qty"), 'checked'=>1), - 'm.price'=>array('label'=>$langs->trans("UnitPurchaseValue"), 'checked'=>0), + 'm.rowid' => array('label' => $langs->trans("Ref"), 'checked' => 1), + 'm.datem' => array('label' => $langs->trans("Date"), 'checked' => 1), + 'p.ref' => array('label' => $langs->trans("ProductRef"), 'checked' => 1, 'css' => 'maxwidth100'), + 'p.label' => array('label' => $langs->trans("ProductLabel"), 'checked' => 1), + 'm.batch' => array('label' => $langs->trans("BatchNumberShort"), 'checked' => 1, 'enabled' => (isModEnabled('productbatch'))), + 'pl.eatby' => array('label' => $langs->trans("EatByDate"), 'checked' => 0, 'position' => 10, 'enabled' => (isModEnabled('productbatch'))), + 'pl.sellby' => array('label' => $langs->trans("SellByDate"), 'checked' => 0, 'position' => 10, 'enabled' => (isModEnabled('productbatch'))), + 'e.ref' => array('label' => $langs->trans("Warehouse"), 'checked' => 1, 'enabled' => (!($id > 0))), // If we are on specific warehouse, we hide it + 'm.fk_user_author' => array('label' => $langs->trans("Author"), 'checked' => 0), + 'm.inventorycode' => array('label' => $langs->trans("InventoryCodeShort"), 'checked' => 1), + 'm.label' => array('label' => $langs->trans("MovementLabel"), 'checked' => 1), + 'm.type_mouvement' => array('label' => $langs->trans("TypeMovement"), 'checked' => 1), + 'origin' => array('label' => $langs->trans("Origin"), 'checked' => 1), + 'm.value' => array('label' => $langs->trans("Qty"), 'checked' => 1), + 'm.price' => array('label' => $langs->trans("UnitPurchaseValue"), 'checked' => 0), //'m.datec'=>array('label'=>$langs->trans("DateCreation"), 'checked'=>0, 'position'=>500), //'m.tms'=>array('label'=>$langs->trans("DateModificationShort"), 'checked'=>0, 'position'=>500) ); @@ -191,9 +192,9 @@ if ($action == "correct_stock") { $origin_element = ''; $origin_id = null; - if (GETPOST('projectid', 'int')) { + if (GETPOSTINT('projectid')) { $origin_element = 'project'; - $origin_id = GETPOST('projectid', 'int'); + $origin_id = GETPOSTINT('projectid'); } if ($product->hasbatch()) { @@ -201,14 +202,14 @@ if ($action == "correct_stock") { //$eatby=GETPOST('eatby'); //$sellby=GETPOST('sellby'); - $eatby = dol_mktime(0, 0, 0, GETPOST('eatbymonth', 'int'), GETPOST('eatbyday', 'int'), GETPOST('eatbyyear', 'int')); - $sellby = dol_mktime(0, 0, 0, GETPOST('sellbymonth', 'int'), GETPOST('sellbyday', 'int'), GETPOST('sellbyyear', 'int')); + $eatby = dol_mktime(0, 0, 0, GETPOSTINT('eatbymonth'), GETPOSTINT('eatbyday'), GETPOSTINT('eatbyyear')); + $sellby = dol_mktime(0, 0, 0, GETPOSTINT('sellbymonth'), GETPOSTINT('sellbyday'), GETPOSTINT('sellbyyear')); $result = $product->correct_stock_batch( $user, $id, - GETPOST("nbpiece", 'int'), - GETPOST("mouvement", 'int'), + GETPOSTINT("nbpiece"), + GETPOSTINT("mouvement"), GETPOST("label", 'san_alpha'), GETPOST('unitprice', 'alpha'), $eatby, @@ -222,7 +223,7 @@ if ($action == "correct_stock") { $result = $product->correct_stock( $user, $id, - GETPOST("nbpiece", 'int'), + GETPOSTINT("nbpiece"), GETPOST("mouvement", 'alpha'), GETPOST("label", 'san_alpha'), GETPOST('unitprice', 'alpha'), @@ -249,12 +250,13 @@ if ($action == "correct_stock") { // Transfer stock from a warehouse to another warehouse if ($action == "transfert_stock" && !$cancel) { + $error = 0; $product = new Product($db); if (!empty($product_id)) { $result = $product->fetch($product_id); } - if (!(GETPOST("id_entrepot_destination", 'int') > 0)) { + if (!(GETPOSTINT("id_entrepot_destination") > 0)) { setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Warehouse")), null, 'errors'); $error++; $action = 'transfert'; @@ -264,12 +266,12 @@ if ($action == "transfert_stock" && !$cancel) { setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Product")), null, 'errors'); $action = 'transfert'; } - if (!GETPOST("nbpiece", 'int')) { + if (!GETPOSTINT("nbpiece")) { setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("NumberOfUnit")), null, 'errors'); $error++; $action = 'transfert'; } - if ($id == GETPOST("id_entrepot_destination", 'int')) { + if ($id == GETPOSTINT("id_entrepot_destination")) { setEventMessages($langs->trans("ErrorSrcAndTargetWarehouseMustDiffers"), null, 'errors'); $error++; $action = 'transfert'; @@ -328,7 +330,7 @@ if ($action == "transfert_stock" && !$cancel) { $result1 = $product->correct_stock_batch( $user, $srcwarehouseid, - GETPOST("nbpiece", 'int'), + GETPOSTINT("nbpiece"), 1, GETPOST("label", 'san_alpha'), $pricesrc, @@ -340,8 +342,8 @@ if ($action == "transfert_stock" && !$cancel) { // Add stock $result2 = $product->correct_stock_batch( $user, - GETPOST("id_entrepot_destination", 'int'), - GETPOST("nbpiece", 'int'), + GETPOSTINT("id_entrepot_destination"), + GETPOSTINT("nbpiece"), 0, GETPOST("label", 'san_alpha'), $pricedest, @@ -356,7 +358,7 @@ if ($action == "transfert_stock" && !$cancel) { $result1 = $product->correct_stock( $user, $id, - GETPOST("nbpiece", 'int'), + GETPOSTINT("nbpiece"), 1, GETPOST("label", 'alpha'), $pricesrc, @@ -367,7 +369,7 @@ if ($action == "transfert_stock" && !$cancel) { $result2 = $product->correct_stock( $user, GETPOST("id_entrepot_destination"), - GETPOST("nbpiece", 'int'), + GETPOSTINT("nbpiece"), 0, GETPOST("label", 'alpha'), $pricedest, @@ -689,7 +691,7 @@ if ($resql) { $param .= '&limit='.((int) $limit); } if ($id > 0) { - $param .= '&id='.urlencode($id); + $param .= '&id='.urlencode((string) ($id)); } if ($search_movement) { $param .= '&search_movement='.urlencode($search_movement); @@ -716,7 +718,7 @@ if ($resql) { $param .= '&search_user='.urlencode($search_user); } if ($idproduct > 0) { - $param .= '&idproduct='.urlencode($idproduct); + $param .= '&idproduct='.urlencode((string) ($idproduct)); } // Add $param from extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php'; @@ -754,6 +756,10 @@ if ($resql) { } if ($sall) { + if (!isset($fieldstosearchall) || !is_array($fieldstosearchall)) { + // Ensure $fieldstosearchall is array + $fieldstosearchall = array(); + } foreach ($fieldstosearchall as $key => $val) { $fieldstosearchall[$key] = $langs->trans($val); } @@ -891,7 +897,7 @@ if ($resql) { include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php'; // Fields from hook - $parameters = array('arrayfields'=>$arrayfields); + $parameters = array('arrayfields' => $arrayfields); $reshook = $hookmanager->executeHooks('printFieldListOption', $parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; // Date creation @@ -963,7 +969,7 @@ if ($resql) { include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; // Hook fields - $parameters = array('arrayfields'=>$arrayfields, 'param'=>$param, 'sortfield'=>$sortfield, 'sortorder'=>$sortorder); + $parameters = array('arrayfields' => $arrayfields, 'param' => $param, 'sortfield' => $sortfield, 'sortorder' => $sortorder); $reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; if (!empty($arrayfields['m.datec']['checked'])) { diff --git a/htdocs/product/stock/movement_list.php b/htdocs/product/stock/movement_list.php index a666e4ac5b3..9a054d18375 100644 --- a/htdocs/product/stock/movement_list.php +++ b/htdocs/product/stock/movement_list.php @@ -5,6 +5,7 @@ * Copyright (C) 2015 Juanjo Menent * Copyright (C) 2018-2022 Ferran Marcet * Copyright (C) 2019 Frédéric France + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -60,22 +61,22 @@ $backtopage = GETPOST("backtopage", "alpha"); $optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print') $mode = GETPOST('mode', 'aZ'); // The output mode ('list', 'kanban', 'hierarchy', 'calendar', ...) -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); -$msid = GETPOST('msid', 'int'); -$idproduct = GETPOST('idproduct', 'int'); -$product_id = GETPOST("product_id", 'int'); -$show_files = GETPOST('show_files', 'int'); +$msid = GETPOSTINT('msid'); +$idproduct = GETPOSTINT('idproduct'); +$product_id = GETPOSTINT("product_id"); +$show_files = GETPOSTINT('show_files'); $search_all = trim((GETPOST('search_all', 'alphanohtml') != '') ? GETPOST('search_all', 'alphanohtml') : GETPOST('sall', 'alphanohtml')); -$search_date_startday = GETPOST('search_date_startday', 'int'); -$search_date_startmonth = GETPOST('search_date_startmonth', 'int'); -$search_date_startyear = GETPOST('search_date_startyear', 'int'); -$search_date_endday = GETPOST('search_date_endday', 'int'); -$search_date_endmonth = GETPOST('search_date_endmonth', 'int'); -$search_date_endyear = GETPOST('search_date_endyear', 'int'); -$search_date_start = dol_mktime(0, 0, 0, GETPOST('search_date_startmonth', 'int'), GETPOST('search_date_startday', 'int'), GETPOST('search_date_startyear', 'int'), 'tzuserrel'); -$search_date_end = dol_mktime(23, 59, 59, GETPOST('search_date_endmonth', 'int'), GETPOST('search_date_endday', 'int'), GETPOST('search_date_endyear', 'int'), 'tzuserrel'); +$search_date_startday = GETPOSTINT('search_date_startday'); +$search_date_startmonth = GETPOSTINT('search_date_startmonth'); +$search_date_startyear = GETPOSTINT('search_date_startyear'); +$search_date_endday = GETPOSTINT('search_date_endday'); +$search_date_endmonth = GETPOSTINT('search_date_endmonth'); +$search_date_endyear = GETPOSTINT('search_date_endyear'); +$search_date_start = dol_mktime(0, 0, 0, GETPOSTINT('search_date_startmonth'), GETPOSTINT('search_date_startday'), GETPOSTINT('search_date_startyear'), 'tzuserrel'); +$search_date_end = dol_mktime(23, 59, 59, GETPOSTINT('search_date_endmonth'), GETPOSTINT('search_date_endday'), GETPOSTINT('search_date_endyear'), 'tzuserrel'); $search_ref = GETPOST('search_ref', 'alpha'); $search_movement = GETPOST("search_movement"); $search_product_ref = trim(GETPOST("search_product_ref")); @@ -85,16 +86,16 @@ $search_inventorycode = trim(GETPOST("search_inventorycode")); $search_user = trim(GETPOST("search_user")); $search_batch = trim(GETPOST("search_batch")); $search_qty = trim(GETPOST("search_qty")); -$search_type_mouvement = GETPOST('search_type_mouvement', 'int'); -$search_fk_project=GETPOST("search_fk_project", 'int'); +$search_type_mouvement = GETPOSTINT('search_type_mouvement'); +$search_fk_project = GETPOSTINT("search_fk_project"); -$type = GETPOST("type", "int"); +$type = GETPOSTINT("type"); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // If $page is not defined, or '' or -1 or if we click on clear filters $page = 0; @@ -110,7 +111,7 @@ if (!$sortorder) { $sortorder = "DESC"; } -$pdluoid = GETPOST('pdluoid', 'int'); +$pdluoid = GETPOSTINT('pdluoid'); // Initialize technical objects $object = new MouvementStock($db); @@ -126,22 +127,22 @@ $extrafields->fetch_name_optionals_label($object->table_element); $search_array_options = $extrafields->getOptionalsFromPost($object->table_element, '', 'search_'); $arrayfields = array( - 'm.rowid'=>array('label'=>"Ref", 'checked'=>1, 'position'=>1), - 'm.datem'=>array('label'=>"Date", 'checked'=>1, 'position'=>2), - 'p.ref'=>array('label'=>"ProductRef", 'checked'=>1, 'css'=>'maxwidth100', 'position'=>3), - 'p.label'=>array('label'=>"ProductLabel", 'checked'=>0, 'position'=>5), - 'm.batch'=>array('label'=>"BatchNumberShort", 'checked'=>1, 'position'=>8, 'enabled'=>(isModEnabled('productbatch'))), - 'pl.eatby'=>array('label'=>"EatByDate", 'checked'=>0, 'position'=>9, 'enabled'=>(isModEnabled('productbatch'))), - 'pl.sellby'=>array('label'=>"SellByDate", 'checked'=>0, 'position'=>10, 'enabled'=>(isModEnabled('productbatch'))), - 'e.ref'=>array('label'=>"Warehouse", 'checked'=>1, 'position'=>100, 'enabled'=>(!($id > 0))), // If we are on specific warehouse, we hide it - 'm.fk_user_author'=>array('label'=>"Author", 'checked'=>0, 'position'=>120), - 'm.inventorycode'=>array('label'=>"InventoryCodeShort", 'checked'=>1, 'position'=>130), - 'm.label'=>array('label'=>"MovementLabel", 'checked'=>1, 'position'=>140), - 'm.type_mouvement'=>array('label'=>"TypeMovement", 'checked'=>0, 'position'=>150), - 'origin'=>array('label'=>"Origin", 'checked'=>1, 'position'=>155), - 'm.fk_projet'=>array('label'=>'Project', 'checked'=>0, 'position'=>180), - 'm.value'=>array('label'=>"Qty", 'checked'=>1, 'position'=>200), - 'm.price'=>array('label'=>"UnitPurchaseValue", 'checked'=>0, 'position'=>210, 'enabled'=>(!getDolGlobalInt('STOCK_MOVEMENT_LIST_HIDE_UNIT_PRICE'))) + 'm.rowid' => array('label' => "Ref", 'checked' => 1, 'position' => 1), + 'm.datem' => array('label' => "Date", 'checked' => 1, 'position' => 2), + 'p.ref' => array('label' => "ProductRef", 'checked' => 1, 'css' => 'maxwidth100', 'position' => 3), + 'p.label' => array('label' => "ProductLabel", 'checked' => 0, 'position' => 5), + 'm.batch' => array('label' => "BatchNumberShort", 'checked' => 1, 'position' => 8, 'enabled' => (isModEnabled('productbatch'))), + 'pl.eatby' => array('label' => "EatByDate", 'checked' => 0, 'position' => 9, 'enabled' => (isModEnabled('productbatch'))), + 'pl.sellby' => array('label' => "SellByDate", 'checked' => 0, 'position' => 10, 'enabled' => (isModEnabled('productbatch'))), + 'e.ref' => array('label' => "Warehouse", 'checked' => 1, 'position' => 100, 'enabled' => (!($id > 0))), // If we are on specific warehouse, we hide it + 'm.fk_user_author' => array('label' => "Author", 'checked' => 0, 'position' => 120), + 'm.inventorycode' => array('label' => "InventoryCodeShort", 'checked' => 1, 'position' => 130), + 'm.label' => array('label' => "MovementLabel", 'checked' => 1, 'position' => 140), + 'm.type_mouvement' => array('label' => "TypeMovement", 'checked' => 0, 'position' => 150), + 'origin' => array('label' => "Origin", 'checked' => 1, 'position' => 155), + 'm.fk_projet' => array('label' => 'Project', 'checked' => 0, 'position' => 180), + 'm.value' => array('label' => "Qty", 'checked' => 1, 'position' => 200), + 'm.price' => array('label' => "UnitPurchaseValue", 'checked' => 0, 'position' => 210, 'enabled' => (!getDolGlobalInt('STOCK_MOVEMENT_LIST_HIDE_UNIT_PRICE'))) //'m.datec'=>array('label'=>"DateCreation", 'checked'=>0, 'position'=>500), //'m.tms'=>array('label'=>"DateModificationShort", 'checked'=>0, 'position'=>500) ); @@ -366,9 +367,9 @@ if ($action == "correct_stock") { $origin_element = ''; $origin_id = null; - if (GETPOST('projectid', 'int')) { + if (GETPOSTINT('projectid')) { $origin_element = 'project'; - $origin_id = GETPOST('projectid', 'int'); + $origin_id = GETPOSTINT('projectid'); } if ($product->hasbatch()) { @@ -376,14 +377,14 @@ if ($action == "correct_stock") { //$eatby=GETPOST('eatby'); //$sellby=GETPOST('sellby'); - $eatby = dol_mktime(0, 0, 0, GETPOST('eatbymonth', 'int'), GETPOST('eatbyday', 'int'), GETPOST('eatbyyear', 'int')); - $sellby = dol_mktime(0, 0, 0, GETPOST('sellbymonth', 'int'), GETPOST('sellbyday', 'int'), GETPOST('sellbyyear', 'int')); + $eatby = dol_mktime(0, 0, 0, GETPOSTINT('eatbymonth'), GETPOSTINT('eatbyday'), GETPOSTINT('eatbyyear')); + $sellby = dol_mktime(0, 0, 0, GETPOSTINT('sellbymonth'), GETPOSTINT('sellbyday'), GETPOSTINT('sellbyyear')); $result = $product->correct_stock_batch( $user, $id, - GETPOST("nbpiece", 'int'), - GETPOST("mouvement", 'int'), + GETPOSTINT("nbpiece"), + GETPOSTINT("mouvement"), GETPOST("label", 'alphanohtml'), price2num(GETPOST('unitprice'), 'MT'), $eatby, @@ -399,8 +400,8 @@ if ($action == "correct_stock") { $result = $product->correct_stock( $user, $id, - GETPOST("nbpiece", 'int'), - GETPOST("mouvement", "int"), + GETPOSTINT("nbpiece"), + GETPOSTINT("mouvement"), GETPOST("label", 'alphanohtml'), price2num(GETPOST('unitprice'), 'MT'), GETPOST('inventorycode', 'alphanohtml'), @@ -428,12 +429,13 @@ if ($action == "correct_stock") { // Transfer stock from a warehouse to another warehouse if ($action == "transfert_stock" && !$cancel) { + $error = 0; $product = new Product($db); if (!empty($product_id)) { $result = $product->fetch($product_id); } - if (!(GETPOST("id_entrepot_destination", 'int') > 0)) { + if (!(GETPOSTINT("id_entrepot_destination") > 0)) { setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Warehouse")), null, 'errors'); $error++; $action = 'transfert'; @@ -443,12 +445,12 @@ if ($action == "transfert_stock" && !$cancel) { setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Product")), null, 'errors'); $action = 'transfert'; } - if (!GETPOST("nbpiece", 'int')) { + if (!GETPOSTINT("nbpiece")) { setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("NumberOfUnit")), null, 'errors'); $error++; $action = 'transfert'; } - if ($id == GETPOST("id_entrepot_destination", 'int')) { + if ($id == GETPOSTINT("id_entrepot_destination")) { setEventMessages($langs->trans("ErrorSrcAndTargetWarehouseMustDiffers"), null, 'errors'); $error++; $action = 'transfert'; @@ -507,7 +509,7 @@ if ($action == "transfert_stock" && !$cancel) { $result1 = $product->correct_stock_batch( $user, $srcwarehouseid, - GETPOST("nbpiece", 'int'), + GETPOSTINT("nbpiece"), 1, GETPOST("label", 'san_alpha'), $pricesrc, @@ -523,8 +525,8 @@ if ($action == "transfert_stock" && !$cancel) { // Add stock $result2 = $product->correct_stock_batch( $user, - GETPOST("id_entrepot_destination", 'int'), - GETPOST("nbpiece", 'int'), + GETPOSTINT("id_entrepot_destination"), + GETPOSTINT("nbpiece"), 0, GETPOST("label", 'san_alpha'), $pricedest, @@ -939,7 +941,7 @@ if ($warehouse->id > 0) { include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_view.tpl.php'; // Categories - if (isModEnabled('categorie')) { + if (isModEnabled('category')) { print '
'.$langs->trans("Categories").''; print $form->showCategories($warehouse->id, Categorie::TYPE_WAREHOUSE, 1); print "
'; //print img_picto($langs->trans("StockMovement"), 'movement', 'class="pictofixedwidth"'); - print $object->getNomUrl(1);; + print $object->getNomUrl(1); + ; print '
'; print '
'; @@ -1146,12 +1147,12 @@ if (!$variants || getDolGlobalString('VARIANT_ALLOW_STOCK_MOVEMENT_ON_VARIANT_PA print '
'; - print $form->selectDate($pdluo->sellby, 'sellby', '', '', 1, '', 1, 0); + print $form->selectDate($pdluo->sellby, 'sellby', 0, 0, 1, '', 1, 0); print ''; - print $form->selectDate($pdluo->eatby, 'eatby', '', '', 1, '', 1, 0); + print $form->selectDate($pdluo->eatby, 'eatby', 0, 0, 1, '', 1, 0); print ''.$pdluo->qty.($pdluo->qty < 0 ? ' '.img_warning() : '').' '.$ordered.' '.$picto.''; @@ -958,7 +959,7 @@ while ($i < ($limit ? min($num, $limit) : $num)) { print '
'; diff --git a/htdocs/product/stock/stats/reception.php b/htdocs/product/stock/stats/reception.php index 63c4b942310..e9061222cc3 100644 --- a/htdocs/product/stock/stats/reception.php +++ b/htdocs/product/stock/stats/reception.php @@ -37,10 +37,10 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php'; // Load translation files required by the page $langs->loadLangs(array('companies', 'bills', 'products', 'supplier_proposal', 'productbatch')); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $batch = GETPOST('batch', 'alpha'); -$objectid = GETPOST('productid', 'int'); +$objectid = GETPOSTINT('productid'); // Security check $fieldvalue = (!empty($id) ? $id : (!empty($ref) ? $ref : '')); @@ -56,10 +56,10 @@ $hookmanager->initHooks(array('batchproductstatsreception')); $showmessage = GETPOST('showmessage'); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 @@ -73,8 +73,8 @@ if (!$sortfield) { $sortfield = "recep.date_creation"; } -$search_month = GETPOST('search_month', 'int'); -$search_year = GETPOST('search_year', 'int'); +$search_month = GETPOSTINT('search_month'); +$search_year = GETPOSTINT('search_year'); if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter', 'alpha')) { $search_month = ''; @@ -105,7 +105,7 @@ if ($id > 0 || !empty($ref)) { } $result = $object->fetch($id, $objectid, $batch); - $parameters = array('id'=>$id); + $parameters = array('id' => $id); $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); @@ -223,7 +223,7 @@ if ($id > 0 || !empty($ref)) { } $sql .= " FROM ".MAIN_DB_PREFIX."societe as s"; $sql .= " INNER JOIN ".MAIN_DB_PREFIX."reception as recep ON (recep.fk_soc = s.rowid)"; - $sql .= " INNER JOIN ".MAIN_DB_PREFIX."commande_fournisseur_dispatch as d ON (d.fk_reception = recep.rowid)"; + $sql .= " INNER JOIN ".MAIN_DB_PREFIX."receptiondet_batch as d ON (d.fk_reception = recep.rowid)"; if (!$user->hasRight('societe', 'client', 'voir')) { $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; } @@ -266,10 +266,10 @@ if ($id > 0 || !empty($ref)) { $option .= '&limit='.((int) $limit); } if (!empty($search_month)) { - $option .= '&search_month='.urlencode($search_month); + $option .= '&search_month='.urlencode((string) ($search_month)); } if (!empty($search_year)) { - $option .= '&search_year='.urlencode($search_year); + $option .= '&search_year='.urlencode((string) ($search_year)); } print ''."\n"; @@ -281,10 +281,11 @@ if ($id > 0 || !empty($ref)) { print ''; } + // @phan-suppress-next-line PhanPluginSuspiciousParamOrder print_barre_liste($langs->trans("Receptions"), $page, $_SERVER["PHP_SELF"], $option, $sortfield, $sortorder, '', $num, $totalofrecords, '', 0, '', '', $limit, 0, 0, 1); if (!empty($page)) { - $option .= '&page='.urlencode($page); + $option .= '&page='.urlencode((string) ($page)); } print '
'; diff --git a/htdocs/product/stock/stockatdate.php b/htdocs/product/stock/stockatdate.php index 4bb7ad77326..6b39de66295 100644 --- a/htdocs/product/stock/stockatdate.php +++ b/htdocs/product/stock/stockatdate.php @@ -51,14 +51,14 @@ $result = restrictedArea($user, 'produit|service'); //checks if a product has been ordered $action = GETPOST('action', 'aZ09'); -$type = GETPOST('type', 'int'); +$type = GETPOSTINT('type'); $mode = GETPOST('mode', 'alpha'); $date = ''; $dateendofday = ''; if (GETPOSTISSET('dateday') && GETPOSTISSET('datemonth') && GETPOSTISSET('dateyear')) { - $date = dol_mktime(0, 0, 0, GETPOST('datemonth', 'int'), GETPOST('dateday', 'int'), GETPOST('dateyear', 'int')); - $dateendofday = dol_mktime(23, 59, 59, GETPOST('datemonth', 'int'), GETPOST('dateday', 'int'), GETPOST('dateyear', 'int')); + $date = dol_mktime(0, 0, 0, GETPOSTINT('datemonth'), GETPOSTINT('dateday'), GETPOSTINT('dateyear')); + $dateendofday = dol_mktime(23, 59, 59, GETPOSTINT('datemonth'), GETPOSTINT('dateday'), GETPOSTINT('dateyear')); } $search_ref = GETPOST('search_ref', 'alphanohtml'); @@ -66,15 +66,15 @@ $search_nom = GETPOST('search_nom', 'alphanohtml'); $now = dol_now(); -$productid = GETPOST('productid', 'int'); +$productid = GETPOSTINT('productid'); if (GETPOSTISARRAY('search_fk_warehouse')) { $search_fk_warehouse = GETPOST('search_fk_warehouse', 'array:int'); } else { - $search_fk_warehouse = array(GETPOST('search_fk_warehouse', 'int')); + $search_fk_warehouse = array(GETPOSTINT('search_fk_warehouse')); } // For backward compatibility -if (GETPOST('fk_warehouse', 'int')) { - $search_fk_warehouse = array(GETPOST('fk_warehouse', 'int')); +if (GETPOSTINT('fk_warehouse')) { + $search_fk_warehouse = array(GETPOSTINT('fk_warehouse')); } // Clean value -1 foreach ($search_fk_warehouse as $key => $val) { @@ -85,11 +85,11 @@ foreach ($search_fk_warehouse as $key => $val) { $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $offset = $limit * $page; if (!$sortfield) { $sortfield = 'p.ref'; @@ -429,14 +429,14 @@ if (!empty($search_fk_warehouse)) { if ($productid > 0) { $param .= '&productid='.(int) $productid; } -if (GETPOST('dateday', 'int') > 0) { - $param .= '&dateday='.GETPOST('dateday', 'int'); +if (GETPOSTINT('dateday') > 0) { + $param .= '&dateday='.GETPOSTINT('dateday'); } -if (GETPOST('datemonth', 'int') > 0) { - $param .= '&datemonth='.GETPOST('datemonth', 'int'); +if (GETPOSTINT('datemonth') > 0) { + $param .= '&datemonth='.GETPOSTINT('datemonth'); } -if (GETPOST('dateyear', 'int') > 0) { - $param .= '&dateyear='.GETPOST('dateyear', 'int'); +if (GETPOSTINT('dateyear') > 0) { + $param .= '&dateyear='.GETPOSTINT('dateyear'); } // TODO Move this into the title line ? diff --git a/htdocs/product/stock/stocktransfer/class/stocktransfer.class.php b/htdocs/product/stock/stocktransfer/class/stocktransfer.class.php index ba3ab193089..4bf107d58f3 100644 --- a/htdocs/product/stock/stocktransfer/class/stocktransfer.class.php +++ b/htdocs/product/stock/stocktransfer/class/stocktransfer.class.php @@ -1,7 +1,8 @@ * Copyright (C) 2021 Gauthier VERDOL - * Copyright (C) 2022 Frédéric France + * Copyright (C) 2022-2024 Frédéric France + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -59,7 +60,7 @@ class StockTransfer extends CommonObject /** - * @var array List of child tables. To know object to delete on cascade. + * @var string[] List of child tables. To know object to delete on cascade. * If name matches '@ClassNAme:FilePathClass;ParentFkFieldName' it will * call method deleteByParentField(parentId, ParentFkFieldName) to fetch and delete child object */ @@ -123,34 +124,34 @@ class StockTransfer extends CommonObject // BEGIN MODULEBUILDER PROPERTIES /** - * @var array Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. + * @var array|string,position:int,notnull?:int,visible:int,noteditable?:int,default?:string,index?:int,foreignkey?:string,searchall?:int,isameasure?:int,css?:string,csslist?:string,help?:string,showoncombobox?:int,disabled?:int,arrayofkeyval?:array,comment?:string}> Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. */ - public $fields=array( - 'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>'1', 'position'=>1, 'notnull'=>1, 'visible'=>0, 'noteditable'=>'1', 'index'=>1, 'comment'=>"Id"), - 'entity' => array('type'=>'integer', 'label'=>'Entity', 'enabled'=>'1', 'position'=>1, 'default'=>1, 'notnull'=>1, 'visible'=>0, 'noteditable'=>'1', 'index'=>1, 'comment'=>"Id"), - 'ref' => array('type'=>'varchar(128)', 'label'=>'Ref', 'enabled'=>'1', 'position'=>10, 'notnull'=>1, 'visible'=>4, 'noteditable'=>'1', 'default'=>'(PROV)', 'index'=>1, 'searchall'=>1, 'showoncombobox'=>'1', 'comment'=>"Reference of object"), - 'label' => array('type'=>'varchar(255)', 'label'=>'Label', 'enabled'=>'1', 'position'=>30, 'notnull'=>0, 'visible'=>1, 'searchall'=>1, 'showoncombobox'=>'1', 'css'=>'minwidth100', 'csslist'=>'tdoverflowmax125', 'autofocusoncreate'=>1), - 'description' => array('type'=>'text', 'label'=>'Description', 'enabled'=>'1', 'position'=>31, 'notnull'=>0, 'visible'=>3,), - 'fk_project' => array('type'=>'integer:Project:projet/class/project.class.php:1', 'label'=>'Project', 'enabled'=>'$conf->project->enabled', 'position'=>32, 'notnull'=>-1, 'visible'=>-1, 'index'=>1, 'picto'=>'project', 'css'=>'maxwidth500 widthcentpercentminusxx', 'csslist'=>'tdoverflowmax125'), - 'fk_soc' => array('type'=>'integer:Societe:societe/class/societe.class.php:1:((status:=:1) AND (entity:IN:__SHARED_ENTITIES__))', 'label'=>'ThirdParty', 'enabled'=>'1', 'position'=>50, 'notnull'=>-1, 'visible'=>1, 'index'=>1/*, 'help'=>"LinkToThirdparty"*/, 'picto'=>'company', 'css'=>'maxwidth500 widthcentpercentminusxx', 'csslist'=>'tdoverflowmax125'), - 'fk_warehouse_source' => array('type'=>'integer:Entrepot:product/stock/class/entrepot.class.php', 'label'=>'Entrepôt source', 'enabled'=>'1', 'position'=>50, 'notnull'=>0, 'visible'=>1, 'help'=>'HelpWarehouseStockTransferSource', 'picto'=>'stock', 'css'=>'maxwidth500 widthcentpercentminusxx', 'csslist'=>'tdoverflowmax150'), - 'fk_warehouse_destination' => array('type'=>'integer:Entrepot:product/stock/class/entrepot.class.php', 'label'=>'Entrepôt de destination', 'enabled'=>'1', 'position'=>51, 'notnull'=>0, 'visible'=>1, 'help'=>'HelpWarehouseStockTransferDestination', 'picto'=>'stock', 'css'=>'maxwidth500 widthcentpercentminusxx', 'csslist'=>'tdoverflowmax150'), - 'note_public' => array('type'=>'html', 'label'=>'NotePublic', 'enabled'=>'1', 'position'=>61, 'notnull'=>0, 'visible'=>0,), - 'note_private' => array('type'=>'html', 'label'=>'NotePrivate', 'enabled'=>'1', 'position'=>62, 'notnull'=>0, 'visible'=>0,), - 'date_creation' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>'1', 'position'=>500, 'notnull'=>1, 'visible'=>-2,), - 'date_prevue_depart' => array('type'=>'date', 'label'=>'DatePrevueDepart', 'enabled'=>'1', 'position'=>100, 'notnull'=>0, 'visible'=>1,), - 'date_reelle_depart' => array('type'=>'date', 'label'=>'DateReelleDepart', 'enabled'=>'1', 'position'=>101, 'notnull'=>0, 'visible'=>5,), - 'date_prevue_arrivee' => array('type'=>'date', 'label'=>'DatePrevueArrivee', 'enabled'=>'1', 'position'=>102, 'notnull'=>0, 'visible'=>1,), - 'date_reelle_arrivee' => array('type'=>'date', 'label'=>'DateReelleArrivee', 'enabled'=>'1', 'position'=>103, 'notnull'=>0, 'visible'=>5,), - 'lead_time_for_warning' => array('type'=>'integer', 'label'=>'LeadTimeForWarning', 'enabled'=>'1', 'position'=>200, 'default'=>0, 'notnull'=>0, 'visible'=>1), - 'tms' => array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>'1', 'position'=>501, 'notnull'=>0, 'visible'=>-2,), - 'fk_user_creat' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserAuthor', 'enabled'=>'1', 'position'=>510, 'notnull'=>1, 'visible'=>-2, 'foreignkey'=>'user.rowid',), - 'fk_user_modif' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'ChangedBy', 'enabled'=>'1', 'position'=>511, 'notnull'=>-1, 'visible'=>-2,), - 'import_key' => array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>'1', 'position'=>1000, 'notnull'=>-1, 'visible'=>-2,), - 'model_pdf' => array('type'=>'varchar(255)', 'label'=>'Model pdf', 'enabled'=>'1', 'position'=>1010, 'notnull'=>-1, 'visible'=>0,), - 'fk_incoterms' => array('type'=>'integer', 'label'=>'IncotermCode', 'enabled'=>'$conf->incoterm->enabled', 'visible'=>-2, 'position'=>220), - 'location_incoterms' => array('type'=>'varchar(255)', 'label'=>'IncotermLabel', 'enabled'=>'$conf->incoterm->enabled', 'visible'=>-2, 'position'=>225), - 'status' => array('type'=>'smallint', 'label'=>'Status', 'enabled'=>'1', 'position'=>1000, 'notnull'=>1, 'visible'=>5, 'index'=>1, 'arrayofkeyval'=>array('0'=>'Draft', '1'=>'Validated', '2'=>'StockStransferDecremented', '3'=>'StockStransferIncremented'),), + public $fields = array( + 'rowid' => array('type' => 'integer', 'label' => 'TechnicalID', 'enabled' => 1, 'position' => 1, 'notnull' => 1, 'visible' => 0, 'noteditable' => 1, 'index' => 1, 'comment' => "Id"), + 'entity' => array('type' => 'integer', 'label' => 'Entity', 'enabled' => 1, 'position' => 1, 'default' => '1', 'notnull' => 1, 'visible' => 0, 'noteditable' => 1, 'index' => 1, 'comment' => "Id"), + 'ref' => array('type' => 'varchar(128)', 'label' => 'Ref', 'enabled' => 1, 'position' => 10, 'notnull' => 1, 'visible' => 4, 'noteditable' => 1, 'default' => '(PROV)', 'index' => 1, 'searchall' => 1, 'showoncombobox' => 1, 'comment' => "Reference of object"), + 'label' => array('type' => 'varchar(255)', 'label' => 'Label', 'enabled' => 1, 'position' => 30, 'notnull' => 0, 'visible' => 1, 'searchall' => 1, 'showoncombobox' => 1, 'css' => 'minwidth100', 'csslist' => 'tdoverflowmax125', 'autofocusoncreate' => 1), + 'description' => array('type' => 'text', 'label' => 'Description', 'enabled' => 1, 'position' => 31, 'notnull' => 0, 'visible' => 3,), + 'fk_project' => array('type' => 'integer:Project:projet/class/project.class.php:1', 'label' => 'Project', 'enabled' => '$conf->project->enabled', 'position' => 32, 'notnull' => -1, 'visible' => -1, 'index' => 1, 'picto' => 'project', 'css' => 'maxwidth500 widthcentpercentminusxx', 'csslist' => 'tdoverflowmax125'), + 'fk_soc' => array('type' => 'integer:Societe:societe/class/societe.class.php:1:((status:=:1) AND (entity:IN:__SHARED_ENTITIES__))', 'label' => 'ThirdParty', 'enabled' => 1, 'position' => 50, 'notnull' => -1, 'visible' => 1, 'index' => 1/*, 'help'=>"LinkToThirdparty"*/, 'picto' => 'company', 'css' => 'maxwidth500 widthcentpercentminusxx', 'csslist' => 'tdoverflowmax125'), + 'fk_warehouse_source' => array('type' => 'integer:Entrepot:product/stock/class/entrepot.class.php', 'label' => 'Entrepôt source', 'enabled' => 1, 'position' => 50, 'notnull' => 0, 'visible' => 1, 'help' => 'HelpWarehouseStockTransferSource', 'picto' => 'stock', 'css' => 'maxwidth500 widthcentpercentminusxx', 'csslist' => 'tdoverflowmax150'), + 'fk_warehouse_destination' => array('type' => 'integer:Entrepot:product/stock/class/entrepot.class.php', 'label' => 'Entrepôt de destination', 'enabled' => 1, 'position' => 51, 'notnull' => 0, 'visible' => 1, 'help' => 'HelpWarehouseStockTransferDestination', 'picto' => 'stock', 'css' => 'maxwidth500 widthcentpercentminusxx', 'csslist' => 'tdoverflowmax150'), + 'note_public' => array('type' => 'html', 'label' => 'NotePublic', 'enabled' => 1, 'position' => 61, 'notnull' => 0, 'visible' => 0,), + 'note_private' => array('type' => 'html', 'label' => 'NotePrivate', 'enabled' => 1, 'position' => 62, 'notnull' => 0, 'visible' => 0,), + 'date_creation' => array('type' => 'datetime', 'label' => 'DateCreation', 'enabled' => 1, 'position' => 500, 'notnull' => 1, 'visible' => -2,), + 'date_prevue_depart' => array('type' => 'date', 'label' => 'DatePrevueDepart', 'enabled' => 1, 'position' => 100, 'notnull' => 0, 'visible' => 1,), + 'date_reelle_depart' => array('type' => 'date', 'label' => 'DateReelleDepart', 'enabled' => 1, 'position' => 101, 'notnull' => 0, 'visible' => 5,), + 'date_prevue_arrivee' => array('type' => 'date', 'label' => 'DatePrevueArrivee', 'enabled' => 1, 'position' => 102, 'notnull' => 0, 'visible' => 1,), + 'date_reelle_arrivee' => array('type' => 'date', 'label' => 'DateReelleArrivee', 'enabled' => 1, 'position' => 103, 'notnull' => 0, 'visible' => 5,), + 'lead_time_for_warning' => array('type' => 'integer', 'label' => 'LeadTimeForWarning', 'enabled' => 1, 'position' => 200, 'default' => '0', 'notnull' => 0, 'visible' => 1), + 'tms' => array('type' => 'timestamp', 'label' => 'DateModification', 'enabled' => 1, 'position' => 501, 'notnull' => 0, 'visible' => -2,), + 'fk_user_creat' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'UserAuthor', 'enabled' => 1, 'position' => 510, 'notnull' => 1, 'visible' => -2, 'foreignkey' => 'user.rowid',), + 'fk_user_modif' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'ChangedBy', 'enabled' => 1, 'position' => 511, 'notnull' => -1, 'visible' => -2,), + 'import_key' => array('type' => 'varchar(14)', 'label' => 'ImportId', 'enabled' => 1, 'position' => 1000, 'notnull' => -1, 'visible' => -2,), + 'model_pdf' => array('type' => 'varchar(255)', 'label' => 'Model pdf', 'enabled' => 1, 'position' => 1010, 'notnull' => -1, 'visible' => 0,), + 'fk_incoterms' => array('type' => 'integer', 'label' => 'IncotermCode', 'enabled' => '$conf->incoterm->enabled', 'visible' => -2, 'position' => 220), + 'location_incoterms' => array('type' => 'varchar(255)', 'label' => 'IncotermLabel', 'enabled' => '$conf->incoterm->enabled', 'visible' => -2, 'position' => 225), + 'status' => array('type' => 'smallint', 'label' => 'Status', 'enabled' => 1, 'position' => 1000, 'notnull' => 1, 'visible' => 5, 'index' => 1, 'arrayofkeyval' => array('0' => 'Draft', '1' => 'Validated', '2' => 'StockStransferDecremented', '3' => 'StockStransferIncremented'),), ); public $rowid; public $ref; @@ -397,7 +398,7 @@ class StockTransfer extends CommonObject } if (!empty($this->lines)) { foreach ($this->lines as $l) { - $total_pmp+= ($l->pmp * $l->qty); + $total_pmp += ($l->pmp * $l->qty); } } @@ -407,18 +408,17 @@ class StockTransfer extends CommonObject /** * Load list of objects in memory from the database. * - * @param string $sortorder Sort Order - * @param string $sortfield Sort field - * @param int $limit limit - * @param int $offset Offset - * @param array $filter Filter array. Example array('field'=>'valueforlike', 'customurl'=>...) - * @param string $filtermode Filter mode (AND or OR) - * @return array|int int <0 if KO, array of pages if OK + * @param string $sortorder Sort Order + * @param string $sortfield Sort field + * @param int $limit limit + * @param int $offset Offset + * @param string $filter Filter as an Universal Search string. + * Example: '((client:=:1) OR ((client:>=:2) AND (client:<=:3))) AND (client:!=:8) AND (nom:like:'a%')' + * @param string $filtermode No more used + * @return array|int int <0 if KO, array of pages if OK */ - public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND') + public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, $filter = '', $filtermode = 'AND') { - global $conf; - dol_syslog(__METHOD__, LOG_DEBUG); $records = array(); @@ -431,23 +431,14 @@ class StockTransfer extends CommonObject } else { $sql .= ' WHERE 1 = 1'; } + // Manage filter - $sqlwhere = array(); - if (count($filter) > 0) { - foreach ($filter as $key => $value) { - if ($key == 't.rowid') { - $sqlwhere[] = $key.'='.$value; - } elseif (strpos($key, 'date') !== false) { - $sqlwhere[] = $key.' = \''.$this->db->idate($value).'\''; - } elseif ($key == 'customsql') { - $sqlwhere[] = $value; - } else { - $sqlwhere[] = $key.' LIKE \'%'.$this->db->escape($value).'%\''; - } - } - } - if (count($sqlwhere) > 0) { - $sql .= " AND (".implode(" ".$filtermode." ", $sqlwhere).")"; + $errormessage = ''; + $sql .= forgeSQLFromUniversalSearchCriteria($filter, $errormessage); + if ($errormessage) { + $this->errors[] = $errormessage; + dol_syslog(__METHOD__.' '.implode(',', $this->errors), LOG_ERR); + return -1; } if (!empty($sortfield)) { @@ -840,7 +831,7 @@ class StockTransfer extends CommonObject global $action, $hookmanager; $hookmanager->initHooks(array('stocktransferdao')); - $parameters = array('id'=>$this->id, 'getnomurl'=>$result); + $parameters = array('id' => $this->id, 'getnomurl' => $result); $reshook = $hookmanager->executeHooks('getNomUrl', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks if ($reshook > 0) { $result = $hookmanager->resPrint; @@ -929,11 +920,11 @@ class StockTransfer extends CommonObject * Initialise object with example values * Id must be 0 if object instance is a specimen * - * @return void + * @return int */ public function initAsSpecimen() { - $this->initAsSpecimenCommon(); + return $this->initAsSpecimenCommon(); } /** @@ -946,7 +937,7 @@ class StockTransfer extends CommonObject $this->lines = array(); $objectline = new StockTransferLine($this->db); - $result = $objectline->fetchAll('ASC', 'rang', 0, 0, array('customsql'=>'fk_stocktransfer = '.$this->id)); + $result = $objectline->fetchAll('ASC', 'rang', 0, 0, "(fk_stocktransfer:=:".((int) $this->id).")"); if (is_numeric($result)) { $this->error = $objectline->error; diff --git a/htdocs/product/stock/stocktransfer/class/stocktransferline.class.php b/htdocs/product/stock/stocktransfer/class/stocktransferline.class.php index 4e6847287ca..b030daca098 100644 --- a/htdocs/product/stock/stocktransfer/class/stocktransferline.class.php +++ b/htdocs/product/stock/stocktransfer/class/stocktransferline.class.php @@ -2,6 +2,8 @@ /* Copyright (C) 2017 Laurent Destailleur * Copyright (C) 2021 Gauthier VERDOL * Copyright (C) ---Put here your own copyright and developer email--- + * Copyright (C) 2024 Frédéric France + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -92,19 +94,19 @@ class StockTransferLine extends CommonObjectLine // BEGIN MODULEBUILDER PROPERTIES /** - * @var array Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. + * @var array|string,position:int,notnull?:int,visible:int,noteditable?:int,default?:string,index?:int,foreignkey?:string,searchall?:int,isameasure?:int,css?:string,csslist?:string,help?:string,showoncombobox?:int,disabled?:int,arrayofkeyval?:array,comment?:string}> Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. */ - public $fields=array( - 'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>'1', 'position'=>1, 'notnull'=>1, 'visible'=>0, 'noteditable'=>'1', 'index'=>1, 'comment'=>"Id"), - 'amount' => array('type'=>'price', 'label'=>'Amount', 'enabled'=>'1', 'position'=>40, 'notnull'=>0, 'visible'=>1, 'default'=>'null', 'isameasure'=>'1', 'help'=>"Help text for amount",), - 'qty' => array('type'=>'real', 'label'=>'Qty', 'enabled'=>'1', 'position'=>45, 'notnull'=>0, 'visible'=>1, 'default'=>'0', 'isameasure'=>'1', 'css'=>'maxwidth75imp', 'help'=>"Help text for quantity",), - 'fk_warehouse_destination' => array('type'=>'integer:Entrepot:product/stock/class/entrepot.class.php', 'label'=>'Entrepôt de destination', 'enabled'=>'1', 'position'=>50, 'notnull'=>1, 'visible'=>1,), - 'fk_warehouse_source' => array('type'=>'integer:Entrepot:product/stock/class/entrepot.class.php', 'label'=>'Entrepôt source', 'enabled'=>'1', 'position'=>50, 'notnull'=>1, 'visible'=>1,), - 'fk_stocktransfer' => array('type'=>'integer:StockTransfer:stocktransfer/stock/class/stocktransfer.class.php', 'label'=>'StockTransfer', 'enabled'=>'1', 'position'=>50, 'notnull'=>1, 'visible'=>0,), - 'fk_product' => array('type'=>'integer:Product:product/class/product.class.php', 'label'=>'Product', 'enabled'=>'1', 'position'=>50, 'notnull'=>1, 'visible'=>1,), - 'batch' => array('type'=>'varchar(128)', 'label'=>'Batch', 'enabled'=>'1', 'position'=>1000, 'notnull'=>-1, 'visible'=>1,), - 'pmp' => array('type'=>'double'/*, 'help'=>'THMEstimatedHelp'*/, 'label'=>'PMP', 'enabled'=>'1', 'position'=>50, 'notnull'=>0, 'visible'=>1,), - 'rang' => array('type'=>'integer', 'label'=>'Qty', 'enabled'=>'1', 'position'=>45, 'notnull'=>0, 'visible'=>0, 'default'=>'0', 'isameasure'=>'1', 'css'=>'maxwidth75imp', 'help'=>"Help text for quantity",), + public $fields = array( + 'rowid' => array('type' => 'integer', 'label' => 'TechnicalID', 'enabled' => 1, 'position' => 1, 'notnull' => 1, 'visible' => 0, 'noteditable' => 1, 'index' => 1, 'comment' => "Id"), + 'amount' => array('type' => 'price', 'label' => 'Amount', 'enabled' => 1, 'position' => 40, 'notnull' => 0, 'visible' => 1, 'default' => 'null', 'isameasure' => 1, 'help' => "Help text for amount",), + 'qty' => array('type' => 'real', 'label' => 'Qty', 'enabled' => 1, 'position' => 45, 'notnull' => 0, 'visible' => 1, 'default' => '0', 'isameasure' => 1, 'css' => 'maxwidth75imp', 'help' => "Help text for quantity",), + 'fk_warehouse_destination' => array('type' => 'integer:Entrepot:product/stock/class/entrepot.class.php', 'label' => 'Entrepôt de destination', 'enabled' => 1, 'position' => 50, 'notnull' => 1, 'visible' => 1,), + 'fk_warehouse_source' => array('type' => 'integer:Entrepot:product/stock/class/entrepot.class.php', 'label' => 'Entrepôt source', 'enabled' => 1, 'position' => 50, 'notnull' => 1, 'visible' => 1,), + 'fk_stocktransfer' => array('type' => 'integer:StockTransfer:stocktransfer/stock/class/stocktransfer.class.php', 'label' => 'StockTransfer', 'enabled' => 1, 'position' => 50, 'notnull' => 1, 'visible' => 0,), + 'fk_product' => array('type' => 'integer:Product:product/class/product.class.php', 'label' => 'Product', 'enabled' => 1, 'position' => 50, 'notnull' => 1, 'visible' => 1,), + 'batch' => array('type' => 'varchar(128)', 'label' => 'Batch', 'enabled' => 1, 'position' => 1000, 'notnull' => -1, 'visible' => 1,), + 'pmp' => array('type' => 'double'/*, 'help'=>'THMEstimatedHelp'*/, 'label' => 'PMP', 'enabled' => 1, 'position' => 50, 'notnull' => 0, 'visible' => 1,), + 'rang' => array('type' => 'integer', 'label' => 'Qty', 'enabled' => 1, 'position' => 45, 'notnull' => 0, 'visible' => 0, 'default' => '0', 'isameasure' => 1, 'css' => 'maxwidth75imp', 'help' => "Help text for quantity",), ); public $rowid; public $amount; @@ -298,15 +300,16 @@ class StockTransferLine extends CommonObjectLine /** * Load list of objects in memory from the database. * - * @param string $sortorder Sort Order - * @param string $sortfield Sort field - * @param int $limit limit - * @param int $offset Offset - * @param array $filter Filter array. Example array('field'=>'valueforlike', 'customurl'=>...) - * @param string $filtermode Filter mode (AND or OR) - * @return array|int int <0 if KO, array of pages if OK + * @param string $sortorder Sort Order + * @param string $sortfield Sort field + * @param int $limit limit + * @param int $offset Offset + * @param string $filter Filter as an Universal Search string. + * Example: '((client:=:1) OR ((client:>=:2) AND (client:<=:3))) AND (client:!=:8) AND (nom:like:'a%')' + * @param string $filtermode No more used + * @return array|int int <0 if KO, array of pages if OK */ - public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND') + public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, $filter = '', $filtermode = 'AND') { dol_syslog(__METHOD__, LOG_DEBUG); @@ -320,23 +323,14 @@ class StockTransferLine extends CommonObjectLine } else { $sql .= ' WHERE 1 = 1'; } + // Manage filter - $sqlwhere = array(); - if (count($filter) > 0) { - foreach ($filter as $key => $value) { - if ($key == 't.rowid') { - $sqlwhere[] = $key.'='.$value; - } elseif (strpos($key, 'date') !== false) { - $sqlwhere[] = $key.' = \''.$this->db->idate($value).'\''; - } elseif ($key == 'customsql') { - $sqlwhere[] = $value; - } else { - $sqlwhere[] = $key.' LIKE \'%'.$this->db->escape($value).'%\''; - } - } - } - if (count($sqlwhere) > 0) { - $sql .= " AND (".implode(" ".$filtermode." ", $sqlwhere).")"; + $errormessage = ''; + $sql .= forgeSQLFromUniversalSearchCriteria($filter, $errormessage); + if ($errormessage) { + $this->errors[] = $errormessage; + dol_syslog(__METHOD__.' '.implode(',', $this->errors), LOG_ERR); + return -1; } if (!empty($sortfield)) { @@ -434,6 +428,7 @@ class StockTransferLine extends CommonObjectLine $p = new Product($this->db); $p->fetch($this->fk_product); + $op = array(); $op[0] = "+".trim($this->qty); $op[1] = "-".trim($this->qty); $movementstock = new MouvementStock($this->db); @@ -824,7 +819,7 @@ class StockTransferLine extends CommonObjectLine global $action, $hookmanager; $hookmanager->initHooks(array('stocktransferlinedao')); - $parameters = array('id'=>$this->id, 'getnomurl'=>$result); + $parameters = array('id' => $this->id, 'getnomurl' => $result); $reshook = $hookmanager->executeHooks('getNomUrl', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks if ($reshook > 0) { $result = $hookmanager->resPrint; @@ -911,11 +906,11 @@ class StockTransferLine extends CommonObjectLine * Initialise object with example values * Id must be 0 if object instance is a specimen * - * @return void + * @return int */ public function initAsSpecimen() { - $this->initAsSpecimenCommon(); + return $this->initAsSpecimenCommon(); } /** diff --git a/htdocs/product/stock/stocktransfer/stocktransfer_agenda.php b/htdocs/product/stock/stocktransfer/stocktransfer_agenda.php index ada61f4f791..9f328000513 100644 --- a/htdocs/product/stock/stocktransfer/stocktransfer_agenda.php +++ b/htdocs/product/stock/stocktransfer/stocktransfer_agenda.php @@ -35,7 +35,7 @@ require_once DOL_DOCUMENT_ROOT.'/product/stock/stocktransfer/lib/stocktransfer_s $langs->loadLangs(array("stocks", "other")); // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'alpha'); $cancel = GETPOST('cancel', 'aZ09'); @@ -52,10 +52,10 @@ if (GETPOST('actioncode', 'array')) { $search_rowid = GETPOST('search_rowid'); $search_agenda_label = GETPOST('search_agenda_label'); -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST("sortfield", 'alpha'); $sortorder = GETPOST("sortorder", 'alpha'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 diff --git a/htdocs/product/stock/stocktransfer/stocktransfer_card.php b/htdocs/product/stock/stocktransfer/stocktransfer_card.php index 65ce35d6aa0..7521fb2ef3b 100644 --- a/htdocs/product/stock/stocktransfer/stocktransfer_card.php +++ b/htdocs/product/stock/stocktransfer/stocktransfer_card.php @@ -1,6 +1,7 @@ * Copyright (C) ---Put here your own copyright and developer email--- + * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -43,7 +44,7 @@ if (isModEnabled('incoterm')) { // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm', 'alpha'); @@ -51,11 +52,11 @@ $cancel = GETPOST('cancel', 'aZ09'); $contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : str_replace('_', '', basename(dirname(__FILE__)).basename(__FILE__, '.php')); // To manage different context of search $backtopage = GETPOST('backtopage', 'alpha'); // if not set, a default page will be used $backtopageforcancel = GETPOST('backtopageforcancel', 'alpha'); // if not set, $backtopage will be used -$qty = GETPOST('qty', 'int'); -$fk_product = GETPOST('fk_product', 'int'); -$fk_warehouse_source = GETPOST('fk_warehouse_source', 'int'); -$fk_warehouse_destination = GETPOST('fk_warehouse_destination', 'int'); -$lineid = GETPOST('lineid', 'int'); +$qty = GETPOSTINT('qty'); +$fk_product = GETPOSTINT('fk_product'); +$fk_warehouse_source = GETPOSTINT('fk_warehouse_source'); +$fk_warehouse_destination = GETPOSTINT('fk_warehouse_destination'); +$lineid = GETPOSTINT('lineid'); $label = GETPOST('label', 'alpha'); $batch = GETPOST('batch', 'alpha'); $code_inv = GETPOST('inventorycode', 'alphanohtml'); @@ -152,10 +153,10 @@ if (empty($reshook)) { include DOL_DOCUMENT_ROOT.'/core/actions_builddoc.inc.php'; if ($action == 'set_thirdparty' && $permissiontoadd) { - $object->setValueFrom('fk_soc', GETPOST('fk_soc', 'int'), '', '', 'date', '', $user, $triggermodname); + $object->setValueFrom('fk_soc', GETPOSTINT('fk_soc'), '', '', 'date', '', $user, $triggermodname); } if ($action == 'classin' && $permissiontoadd) { - $object->setProject(GETPOST('projectid', 'int')); + $object->setProject(GETPOSTINT('projectid')); } if ($action == 'addline' && $permissiontoadd) { @@ -194,7 +195,7 @@ if (empty($reshook)) { if (empty($error)) { $line = new StockTransferLine($db); - $records = $line->fetchAll('', '', 0, 0, array('customsql'=>' fk_stocktransfer = '.((int) $id).' AND fk_product = '.((int) $fk_product).' AND fk_warehouse_source = '.((int) $fk_warehouse_source).' AND fk_warehouse_destination = '.((int) $fk_warehouse_destination).' AND ('.(empty($batch) ? 'batch = "" or batch IS NULL' : "batch = '".$db->escape($batch)."'").')')); + $records = $line->fetchAll('', '', 0, 0, '(fk_stocktransfer:=:'.((int) $id).') AND (fk_product:=:'.((int) $fk_product).') AND (fk_warehouse_source:=:'.((int) $fk_warehouse_source).') AND (fk_warehouse_destination:=:'.((int) $fk_warehouse_destination).') AND ('.(empty($batch) ? "(batch:=:'') OR (batch:IS:NULL)" : "batch:=:'".$db->escape($batch)."'").')'); if (!empty($records[key($records)])) { $line = $records[key($records)]; } @@ -371,7 +372,7 @@ if (empty($reshook)) { // Set incoterm if ($action == 'set_incoterms' && isModEnabled('incoterm') && $permissiontoadd) { - $result = $object->setIncoterms(GETPOST('incoterm_id', 'int'), GETPOST('location_incoterms', 'alpha')); + $result = $object->setIncoterms(GETPOSTINT('incoterm_id'), GETPOSTINT('location_incoterms')); } // Actions to send emails $triggersendname = 'STOCKTRANSFER_SENTBYMAIL'; @@ -537,29 +538,29 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } elseif ($action == 'destock') { // Destock confirmation // Create an array for form $formquestion = array( 'text' => '', - array('type' => 'text', 'name' => 'label', 'label' => $langs->trans("Label"), 'value' => $langs->trans('ConfirmDestock', $object->ref), 'size'=>40), - array('type' => 'text', 'name' => 'inventorycode', 'label' => $langs->trans("InventoryCode"), 'value' => dol_print_date(dol_now(), '%y%m%d%H%M%S'), 'size'=>25) + 0 => array('type' => 'text', 'name' => 'label', 'label' => $langs->trans("Label"), 'value' => $langs->trans('ConfirmDestock', $object->ref), 'size' => 40), + 1 => array('type' => 'text', 'name' => 'inventorycode', 'label' => $langs->trans("InventoryCode"), 'value' => dol_print_date(dol_now(), '%y%m%d%H%M%S'), 'size' => 25) ); $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('DestockAllProduct'), '', 'confirm_destock', $formquestion, 'yes', 1); } elseif ($action == 'destockcancel') { // Destock confirmation cancel // Create an array for form $formquestion = array( 'text' => '', - array('type' => 'text', 'name' => 'label', 'label' => $langs->trans("Label"), 'value' => $langs->trans('ConfirmDestockCancel', $object->ref), 'size'=>40), - array('type' => 'text', 'name' => 'inventorycode', 'label' => $langs->trans("InventoryCode"), 'value' => dol_print_date(dol_now(), '%y%m%d%H%M%S'), 'size'=>25) + 0 => array('type' => 'text', 'name' => 'label', 'label' => $langs->trans("Label"), 'value' => $langs->trans('ConfirmDestockCancel', $object->ref), 'size' => 40), + 1 => array('type' => 'text', 'name' => 'inventorycode', 'label' => $langs->trans("InventoryCode"), 'value' => dol_print_date(dol_now(), '%y%m%d%H%M%S'), 'size' => 25) ); $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('DestockAllProductCancel'), '', 'confirm_destockcancel', $formquestion, 'yes', 1); } elseif ($action == 'addstock') { // Addstock confirmation // Create an array for form $formquestion = array( 'text' => '', - array('type' => 'text', 'name' => 'label', 'label' => $langs->trans("Label").' :', 'value' => $langs->trans('ConfirmAddStock', $object->ref), 'size'=>40), - array('type' => 'text', 'name' => 'inventorycode', 'label' => $langs->trans("InventoryCode"), 'value' => dol_print_date(dol_now(), '%y%m%d%H%M%S'), 'size'=>25) + 0 => array('type' => 'text', 'name' => 'label', 'label' => $langs->trans("Label").' :', 'value' => $langs->trans('ConfirmAddStock', $object->ref), 'size' => 40), + 1 => array('type' => 'text', 'name' => 'inventorycode', 'label' => $langs->trans("InventoryCode"), 'value' => dol_print_date(dol_now(), '%y%m%d%H%M%S'), 'size' => 25) ); $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('AddStockAllProduct'), '', 'confirm_addstock', $formquestion, 'yes', 1); } elseif ($action == 'addstockcancel') { // Addstock confirmation cancel // Create an array for form $formquestion = array( 'text' => '', - array('type' => 'text', 'name' => 'label', 'label' => $langs->trans("Label").' :', 'value' => $langs->trans('ConfirmAddStockCancel', $object->ref), 'size'=>40), - array('type' => 'text', 'name' => 'inventorycode', 'label' => $langs->trans("InventoryCode"), 'value' => dol_print_date(dol_now(), '%y%m%d%H%M%S'), 'size'=>25) + 0 => array('type' => 'text', 'name' => 'label', 'label' => $langs->trans("Label").' :', 'value' => $langs->trans('ConfirmAddStockCancel', $object->ref), 'size' => 40), + 1 => array('type' => 'text', 'name' => 'inventorycode', 'label' => $langs->trans("InventoryCode"), 'value' => dol_print_date(dol_now(), '%y%m%d%H%M%S'), 'size' => 25) ); $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('AddStockAllProductCancel'), '', 'confirm_addstockcancel', $formquestion, 'yes', 1); } @@ -582,7 +583,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea if ($action == 'valid' && $permissiontoadd) { - $nextref=$object->getNextNumRef(); + $nextref = $object->getNextNumRef(); $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('Validate'), $langs->transnoentities('ConfirmValidateStockTransfer', $nextref), 'confirm_validate', $formquestion, 0, 2); } @@ -646,8 +647,8 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea //unset($object->fields['fk_project']); // Hide field already shown in banner //unset($object->fields['fk_soc']); // Hide field already shown in banner - $object->fields['fk_soc']['visible']=0; // Already available in banner - $object->fields['fk_project']['visible']=0; // Already available in banner + $object->fields['fk_soc']['visible'] = 0; // Already available in banner + $object->fields['fk_project']['visible'] = 0; // Already available in banner include DOL_DOCUMENT_ROOT.'/core/tpl/commonfields_view.tpl.php'; // Incoterms @@ -749,7 +750,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea $formproduct = new FormProduct($db); print '
'; - print ' + print ' @@ -763,7 +764,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea $param = ''; - $conf->global->MAIN_DISABLE_WRAPPING_ON_COLUMN_TITLE=true; // Full display needed to see all column title details + $conf->global->MAIN_DISABLE_WRAPPING_ON_COLUMN_TITLE = true; // Full display needed to see all column title details print '
'; print $formproduct->selectWarehouses(empty($fk_warehouse_source) ? $object->fk_warehouse_source : $fk_warehouse_source, 'fk_warehouse_source', 'warehouseopen,warehouseinternal', 1, 0, 0, '', 0, 0, array(), 'minwidth200imp maxwidth200', $TExcludedWarehouseSource); print ''; print $formproduct->selectWarehouses(empty($fk_warehouse_destination) ? $object->fk_warehouse_destination : $fk_warehouse_destination, 'fk_warehouse_destination', 'warehouseopen,warehouseinternal', 1, 0, 0, '', 0, 0, array(), 'minwidth200imp maxwidth200', $TExcludedWarehouseDestination); diff --git a/htdocs/product/stock/stocktransfer/stocktransfer_contact.php b/htdocs/product/stock/stocktransfer/stocktransfer_contact.php index 95fae85acb2..33d2ff92f04 100644 --- a/htdocs/product/stock/stocktransfer/stocktransfer_contact.php +++ b/htdocs/product/stock/stocktransfer/stocktransfer_contact.php @@ -37,9 +37,9 @@ require_once DOL_DOCUMENT_ROOT.'/product/stock/stocktransfer/lib/stocktransfer_s // Load translation files required by the page $langs->loadLangs(array('facture', 'orders', 'sendings', 'companies', 'stocks')); -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); -$lineid = GETPOST('lineid', 'int'); +$lineid = GETPOSTINT('lineid'); $action = GETPOST('action', 'alpha'); $object = new StockTransfer($db); @@ -77,7 +77,7 @@ $result = restrictedArea($user, 'stocktransfer', $id, '', 'stocktransfer'); if ($action == 'addcontact' && $user->hasRight('stocktransfer', 'stocktransfer', 'write')) { if ($object->id > 0) { - $contactid = (GETPOST('userid', 'int') ? GETPOST('userid', 'int') : GETPOST('contactid', 'int')); + $contactid = (GETPOSTINT('userid') ? GETPOSTINT('userid') : GETPOSTINT('contactid')); $result = $object->add_contact($contactid, !empty($_POST["typecontact"]) ? $_POST["typecontact"] : $_POST["type"], $_POST["source"]); } diff --git a/htdocs/product/stock/stocktransfer/stocktransfer_document.php b/htdocs/product/stock/stocktransfer/stocktransfer_document.php index 72b5352f740..7e851677dc1 100644 --- a/htdocs/product/stock/stocktransfer/stocktransfer_document.php +++ b/htdocs/product/stock/stocktransfer/stocktransfer_document.php @@ -37,14 +37,14 @@ $langs->loadLangs(array("stocks", "companies", "other", "mails")); $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm'); -$id = (GETPOST('socid', 'int') ? GETPOST('socid', 'int') : GETPOST('id', 'int')); +$id = (GETPOSTINT('socid') ? GETPOSTINT('socid') : GETPOSTINT('id')); $ref = GETPOST('ref', 'alpha'); // Get parameters -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST("sortfield", 'alpha'); $sortorder = GETPOST("sortorder", 'alpha'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 diff --git a/htdocs/product/stock/stocktransfer/stocktransfer_list.php b/htdocs/product/stock/stocktransfer/stocktransfer_list.php index 6ff09720df5..d798b7556ac 100644 --- a/htdocs/product/stock/stocktransfer/stocktransfer_list.php +++ b/htdocs/product/stock/stocktransfer/stocktransfer_list.php @@ -37,7 +37,7 @@ $langs->loadLangs(array("stocks", "other")); // Get parameters $action = GETPOST('action', 'aZ09') ? GETPOST('action', 'aZ09') : 'view'; // The action 'add', 'create', 'edit', 'update', 'view', ... $massaction = GETPOST('massaction', 'alpha'); // The bulk action (combo box choice into lists) -$show_files = GETPOST('show_files', 'int'); // Show files area generated by bulk actions ? +$show_files = GETPOSTINT('show_files'); // Show files area generated by bulk actions ? $confirm = GETPOST('confirm', 'alpha'); // Result of a confirmation $cancel = GETPOST('cancel', 'alpha'); // We click on a Cancel button $toselect = GETPOST('toselect', 'array'); // Array of ids of elements selected into a list @@ -45,13 +45,13 @@ $contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'st $backtopage = GETPOST('backtopage', 'alpha'); // Go back to a dedicated page $optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print') -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); // Load variable for pagination -$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit; +$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; $sortfield = GETPOST('sortfield', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma'); -$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); +$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // If $page is not defined, or '' or -1 or if we click on clear filters $page = 0; @@ -89,8 +89,8 @@ foreach ($object->fields as $key => $val) { $search[$key] = GETPOST('search_'.$key, 'alpha'); } if (preg_match('/^(date|timestamp|datetime)/', $val['type'])) { - $search[$key.'_dtstart'] = dol_mktime(0, 0, 0, GETPOST('search_'.$key.'_dtstartmonth', 'int'), GETPOST('search_'.$key.'_dtstartday', 'int'), GETPOST('search_'.$key.'_dtstartyear', 'int')); - $search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOST('search_'.$key.'_dtendmonth', 'int'), GETPOST('search_'.$key.'_dtendday', 'int'), GETPOST('search_'.$key.'_dtendyear', 'int')); + $search[$key.'_dtstart'] = dol_mktime(0, 0, 0, GETPOSTINT('search_'.$key.'_dtstartmonth'), GETPOSTINT('search_'.$key.'_dtstartday'), GETPOSTINT('search_'.$key.'_dtstartyear')); + $search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOSTINT('search_'.$key.'_dtendmonth'), GETPOSTINT('search_'.$key.'_dtendday'), GETPOSTINT('search_'.$key.'_dtendyear')); } } @@ -111,7 +111,7 @@ foreach ($object->fields as $key => $val) { $arrayfields['t.'.$key] = array( 'label'=>$val['label'], 'checked'=>(($visible < 0) ? 0 : 1), - 'enabled'=>(abs($visible) != 3 && dol_eval($val['enabled'], 1)), + 'enabled'=>(abs($visible) != 3 && (int) dol_eval($val['enabled'], 1)), 'position'=>$val['position'], 'help'=> isset($val['help']) ? $val['help'] : '' ); @@ -233,7 +233,7 @@ $parameters = array(); $reshook = $hookmanager->executeHooks('printFieldListFrom', $parameters, $object, $action); // Note that $action and $object may have been modified by hook $sql .= $hookmanager->resPrint; if ($object->ismultientitymanaged == 1) { - $sql .= " WHERE t.entity IN (".getEntity($object->element, (GETPOST('search_current_entity', 'int') ? 0 : 1)).")"; + $sql .= " WHERE t.entity IN (".getEntity($object->element, (GETPOSTINT('search_current_entity') ? 0 : 1)).")"; } else { $sql .= " WHERE 1 = 1"; } @@ -382,9 +382,9 @@ foreach ($search as $key => $val) { } } } elseif (preg_match('/(_dtstart|_dtend)$/', $key) && !empty($val)) { - $param .= '&search_'.$key.'month='.((int) GETPOST('search_'.$key.'month', 'int')); - $param .= '&search_'.$key.'day='.((int) GETPOST('search_'.$key.'day', 'int')); - $param .= '&search_'.$key.'year='.((int) GETPOST('search_'.$key.'year', 'int')); + $param .= '&search_'.$key.'month='.(GETPOSTINT('search_'.$key.'month')); + $param .= '&search_'.$key.'day='.(GETPOSTINT('search_'.$key.'day')); + $param .= '&search_'.$key.'year='.(GETPOSTINT('search_'.$key.'year')); } elseif ($search[$key] != '') { $param .= '&search_'.$key.'='.urlencode($search[$key]); } @@ -406,7 +406,7 @@ $arrayofmassactions = array( if (!empty($permissiontodelete)) { $arrayofmassactions['predelete'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete"); } -if (GETPOST('nomassaction', 'int') || in_array($massaction, array('presend', 'predelete'))) { +if (GETPOSTINT('nomassaction') || in_array($massaction, array('presend', 'predelete'))) { $arrayofmassactions = array(); } $massactionbutton = $form->selectMassAction('', $arrayofmassactions); @@ -470,7 +470,7 @@ if (!empty($moreforfilter)) { } $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; -$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')) : ''); // This also change content of $arrayfields +$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) : ''); // This also change content of $arrayfields $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); print '
'; // You can use div-table-responsive-no-min if you don't need reserved height for your table diff --git a/htdocs/product/stock/stocktransfer/stocktransfer_note.php b/htdocs/product/stock/stocktransfer/stocktransfer_note.php index cef7273128d..a4b8128602e 100644 --- a/htdocs/product/stock/stocktransfer/stocktransfer_note.php +++ b/htdocs/product/stock/stocktransfer/stocktransfer_note.php @@ -31,7 +31,7 @@ require_once DOL_DOCUMENT_ROOT.'/product/stock/stocktransfer/lib/stocktransfer_s $langs->loadLangs(array("stocks", "companies")); // Get parameters -$id = GETPOST('id', 'int'); +$id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'alpha'); $cancel = GETPOST('cancel', 'aZ09'); diff --git a/htdocs/product/stock/tpl/extrafields_add.tpl.php b/htdocs/product/stock/tpl/extrafields_add.tpl.php index 782d14bdcbd..d880e516500 100644 --- a/htdocs/product/stock/tpl/extrafields_add.tpl.php +++ b/htdocs/product/stock/tpl/extrafields_add.tpl.php @@ -28,7 +28,7 @@ // Protection to avoid direct call of template if (empty($conf) || !is_object($conf)) { print "Error, template page can't be called as URL"; - exit; + exit(1); } ?> @@ -39,6 +39,13 @@ if (empty($conf) || !is_object($conf)) { if (!isset($parameters)) { $parameters = array(); } +' +@phan-var-force CommonObject $object +@phan-var-force string $action +@phan-var-force Conf $conf +@phan-var-force Translate $conf +@phan-var-force array $parameters +'; $reshook = $hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; diff --git a/htdocs/product/stock/tpl/stockcorrection.tpl.php b/htdocs/product/stock/tpl/stockcorrection.tpl.php index 54ae8157210..708c527ee6a 100644 --- a/htdocs/product/stock/tpl/stockcorrection.tpl.php +++ b/htdocs/product/stock/tpl/stockcorrection.tpl.php @@ -22,7 +22,7 @@ // Protection to avoid direct call of template if (empty($conf) || !is_object($conf)) { print "Error, template page can't be called as URL"; - exit; + exit(1); } ?> @@ -45,7 +45,7 @@ if (empty($id)) { $id = $object->id; } -$pdluoid = GETPOST('pdluoid', 'int'); +$pdluoid = GETPOSTINT('pdluoid'); $pdluo = new Productbatch($db); @@ -105,7 +105,7 @@ print '"; - if ($nbofsuggested>0) { + if ($nbofsuggested > 0) { + $quantityToBeDelivered = 0; echo "
".$langs->trans("SearchIntoBatch").": $nbofsuggested

"; foreach ($prod->stock_warehouse[getDolGlobalString($constantforkey)]->detail_batch as $dbatch) { // $dbatch is instance of Productbatch $batchStock = + $dbatch->qty; // To get a numeric @@ -622,7 +629,7 @@ if (empty($reshook)) { if (getDolGlobalString('TAKEPOS_GROUP_SAME_PRODUCT')) { foreach ($invoice->lines as $line) { if ($line->product_ref == $prod->ref) { - if ($line->special_code==4) { + if ($line->special_code == 4) { continue; } // If this line is sended to printer create new line // check if qty in stock @@ -672,7 +679,7 @@ if (empty($reshook)) { // complete line by hook $parameters = array('prod' => $prod, 'line' => $line); - $reshook=$hookmanager->executeHooks('completeTakePosAddLine', $parameters, $invoice, $action); // Note that $action and $line may have been modified by some hooks + $reshook = $hookmanager->executeHooks('completeTakePosAddLine', $parameters, $invoice, $action); // Note that $action and $line may have been modified by some hooks if ($reshook < 0) { setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); } @@ -727,7 +734,7 @@ if (empty($reshook)) { if ($action == "addnote" && ($user->hasRight('takepos', 'run') || defined('INCLUDE_PHONEPAGE_FROM_PUBLIC_PAGE'))) { $desc = GETPOST('addnote', 'alpha'); - if ($idline==0) { + if ($idline == 0) { $invoice->update_note($desc, '_public'); } else { foreach ($invoice->lines as $line) { @@ -785,6 +792,7 @@ if (empty($reshook)) { // We delete the lines $resdeletelines = 1; foreach ($invoice->lines as $line) { + // @phan-suppress-next-line PhanPluginSuspiciousParamPosition $tmpres = $invoice->deleteLine($line->id); if ($tmpres < 0) { $resdeletelines = 0; @@ -922,7 +930,7 @@ if (empty($reshook)) { $invoice->fetch($placeid); } - if ($action=="setbatch" && ($user->hasRight('takepos', 'run') || defined('INCLUDE_PHONEPAGE_FROM_PUBLIC_PAGE'))) { + if ($action == "setbatch" && ($user->hasRight('takepos', 'run') || defined('INCLUDE_PHONEPAGE_FROM_PUBLIC_PAGE'))) { $constantforkey = 'CASHDESK_ID_WAREHOUSE'.$_SESSION["takeposterminal"]; $sql = "UPDATE ".MAIN_DB_PREFIX."facturedet set batch=".$db->escape($batch).", fk_warehouse=".getDolGlobalString($constantforkey)." where rowid=".((int) $idoflineadded); $db->query($sql); @@ -1133,7 +1141,7 @@ if ((getDolGlobalString('TAKEPOS_PHONE_BASIC_LAYOUT') == 1 && $conf->browser->la +currency != $_SESSION["takeposcustomercurrency"]) { + //Only show customer currency if multicurrency module is enabled, if currency selected and if this currency selected is not the same as main currency + $showothercurrency = 1; + include_once DOL_DOCUMENT_ROOT . '/multicurrency/class/multicurrency.class.php'; + $multicurrency = new MultiCurrency($db); + $multicurrency->fetch(0, $_SESSION["takeposcustomercurrency"]); +} +?> +
- trans('TotalTTC'); ?>: total_ttc, 1, '', 1, -1, -1, $invoice->multicurrency_code); ?> + trans('TotalTTC'); ?>: total_ttc, 1, '', 1, -1, -1, $conf->currency); + if ($showothercurrency) { + print '   (' . price($invoice->total_ht * $multicurrency->rate->rate) . ' ' . $_SESSION["takeposcustomercurrency"] . ')'; + } + ?>
total_ttc) { ?>
- trans('RemainToPay'); ?>: multicurrency_code); ?> + trans('RemainToPay'); ?>: multicurrency_code); + if ($showothercurrency) { + print '   (' . price($remaintopay * $multicurrency->rate->rate) . ' ' . $_SESSION["takeposcustomercurrency"] . ')'; + } + ?>
- trans("Received"); ?>: multicurrency_code); ?> + trans("Received"); ?>: multicurrency_code); + if ($showothercurrency) { + print '   (' . price(0 * $multicurrency->rate->rate) . ' ' . $_SESSION["takeposcustomercurrency"] . ')'; + } + ?>
- trans("Change"); ?>: multicurrency_code); ?> + trans("Change"); ?>: multicurrency_code); + if ($showothercurrency) { + print '   (' . price(0 * $multicurrency->rate->rate) . ' ' . $_SESSION["takeposcustomercurrency"] . ')'; + } + ?>
"reset()", - "span" => "style='font-size: 150%;'", - "text" => "C", - "class" => "poscolorblue" - ), - array( - "function" => "parent.$.colorbox.close();", - "span" => "id='printtext' style='font-weight: bold; font-size: 18pt;'", - "text" => "X", - "class" => "poscolordelete" - ), +array( + "function" => "reset()", + "span" => "style='font-size: 150%;'", + "text" => "C", + "class" => "poscolorblue" +), +array( + "function" => "parent.$.colorbox.close();", + "span" => "id='printtext' style='font-weight: bold; font-size: 18pt;'", + "text" => "X", + "class" => "poscolordelete" +), ); $numpad = getDolGlobalString('TAKEPOS_NUMPAD'); if (isModEnabled('stripe') && isset($keyforstripeterminalbank) && getDolGlobalString('STRIPE_CARD_PRESENT')) { @@ -716,7 +748,7 @@ if (getDolGlobalString('TAKEPOS_DELAYED_PAYMENT')) { executeHooks('completePayment', $parameters, $invoice); print $hookmanager->resPrint; ?> diff --git a/htdocs/takepos/phone.php b/htdocs/takepos/phone.php index 4f11672982e..97dde7a45bf 100644 --- a/htdocs/takepos/phone.php +++ b/htdocs/takepos/phone.php @@ -53,8 +53,8 @@ if (defined('INCLUDE_PHONEPAGE_FROM_PUBLIC_PAGE')) { $place = (GETPOST('place', 'aZ09') ? GETPOST('place', 'aZ09') : 0); // $place is id of table for Ba or Restaurant } $action = GETPOST('action', 'aZ09'); -$setterminal = GETPOST('setterminal', 'int'); -$idproduct = GETPOST('idproduct', 'int'); +$setterminal = GETPOSTINT('setterminal'); +$idproduct = GETPOSTINT('idproduct'); $mobilepage = GETPOST('mobilepage', 'alphanohtml'); // Set when page is loaded by a js .load() if ($setterminal > 0) { @@ -150,8 +150,8 @@ if ($action == "productinfo") { print '
'; } } elseif ($action == "editline") { - $placeid = GETPOST('placeid', 'int'); - $selectedline = GETPOST('selectedline', 'int'); + $placeid = GETPOSTINT('placeid'); + $selectedline = GETPOSTINT('selectedline'); $invoice = new Facture($db); $invoice->fetch($placeid); foreach ($invoice->lines as $line) { diff --git a/htdocs/takepos/printbox.php b/htdocs/takepos/printbox.php index 02192ba19f2..0f3ea149e8c 100644 --- a/htdocs/takepos/printbox.php +++ b/htdocs/takepos/printbox.php @@ -47,7 +47,7 @@ global $langs, $db; $langs->loadLangs(array("bills", "cashdesk")); -$facid = GETPOST('facid', 'int'); +$facid = GETPOSTINT('facid'); $action = GETPOST('action', 'aZ09'); diff --git a/htdocs/takepos/receipt.php b/htdocs/takepos/receipt.php index f1020ad1348..df30a68acdb 100644 --- a/htdocs/takepos/receipt.php +++ b/htdocs/takepos/receipt.php @@ -53,10 +53,10 @@ $langs->loadLangs(array("main", "bills", "cashdesk", "companies")); $place = (GETPOST('place', 'aZ09') ? GETPOST('place', 'aZ09') : 0); // $place is id of table for Bar or Restaurant -$facid = GETPOST('facid', 'int'); +$facid = GETPOSTINT('facid'); $action = GETPOST('action', 'aZ09'); -$gift = GETPOST('gift', 'int'); +$gift = GETPOSTINT('gift'); if (!$user->hasRight('takepos', 'run')) { accessforbidden(); @@ -175,7 +175,7 @@ if (getDolGlobalString('TAKEPOS_SHOW_DATE_OF_PRINING')) {
0 ? GETPOST('qty', 'int') : 1; + $qty = GETPOSTINT('qty') > 0 ? GETPOSTINT('qty') : 1; print ''; print ''; print ''; diff --git a/htdocs/takepos/reduction.php b/htdocs/takepos/reduction.php index 22012b79763..2d9b3d96e6e 100644 --- a/htdocs/takepos/reduction.php +++ b/htdocs/takepos/reduction.php @@ -44,7 +44,7 @@ require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; $place = (GETPOST('place', 'aZ09') ? GETPOST('place', 'aZ09') : 0); // $place is id of table for Ba or Restaurant -$invoiceid = GETPOST('invoiceid', 'int'); +$invoiceid = GETPOSTINT('invoiceid'); if (!$user->hasRight('takepos', 'run')) { accessforbidden(); diff --git a/htdocs/takepos/send.php b/htdocs/takepos/send.php index 8164c4bae96..708dcf713cc 100644 --- a/htdocs/takepos/send.php +++ b/htdocs/takepos/send.php @@ -44,7 +44,7 @@ require '../main.inc.php'; // Load $user and permissions require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; -$facid = GETPOST('facid', 'int'); +$facid = GETPOSTINT('facid'); $action = GETPOST('action', 'aZ09'); $email = GETPOST('email', 'alpha'); diff --git a/htdocs/takepos/split.php b/htdocs/takepos/split.php index 5972e0f0367..df8342bcf38 100644 --- a/htdocs/takepos/split.php +++ b/htdocs/takepos/split.php @@ -57,8 +57,8 @@ if (!$user->hasRight('takepos', 'run')) { */ if ($action=="split") { - $line = GETPOST('line', 'int'); - $split = GETPOST('split', 'int'); + $line = GETPOSTINT('line'); + $split = GETPOSTINT('split'); if ($split==1) { // Split line $invoice = new Facture($db); $ret = $invoice->fetch('', '(PROV-POS'.$_SESSION["takeposterminal"].'-SPLIT)'); diff --git a/htdocs/theme/eldy/dropdown.inc.php b/htdocs/theme/eldy/dropdown.inc.php index de150845d05..d4d38d82a81 100644 --- a/htdocs/theme/eldy/dropdown.inc.php +++ b/htdocs/theme/eldy/dropdown.inc.php @@ -156,8 +156,9 @@ div#topmenu-global-search-dropdown a::after, div#topmenu-quickadd-dropdown a::af } /* -* MENU Dropdown -*/ + * MENU Dropdown + */ + .login_block.usedropdown .logout-btn{ display: none; } @@ -207,7 +208,7 @@ div#topmenu-global-search-dropdown a::after, div#topmenu-quickadd-dropdown a::af } div#topmenu-global-search-dropdown, div#topmenu-bookmark-dropdown, div#topmenu-quickadd-dropdown { - + line-height: 46px; } diff --git a/htdocs/theme/eldy/flags-sprite.inc.php b/htdocs/theme/eldy/flags-sprite.inc.php index 56300e37e3f..274235f844a 100644 --- a/htdocs/theme/eldy/flags-sprite.inc.php +++ b/htdocs/theme/eldy/flags-sprite.inc.php @@ -1,6 +1,28 @@ + * Copyright (C) 2024 Frédéric France + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file htdocs/theme/eldy/flag-sprite.inc.php + * \brief File for CSS style sheet Eldy + */ if (!defined('ISLOADEDBYSTEELSHEET')) { - die('Must be call by steelsheet'); + die('Must be call by stylesheet'); } ?> /*
' . GETPOST('label', 'alphanohtml') . '' . $qty . '