mirror of
https://github.com/HendrikRauh/inventree-app.git
synced 2026-01-13 03:26:24 +00:00
Compare commits
10 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
96627adf7b | ||
|
|
0546fba37f | ||
|
|
5f623c0594 | ||
|
|
bf19ace3e9 | ||
|
|
8c15bdafdf | ||
|
|
571ff1880f | ||
|
|
864c3eea76 | ||
|
|
346b1a150f | ||
|
|
bb10117f01 | ||
|
|
0f31638bdc |
45 changed files with 2063 additions and 1607 deletions
14
.envrc
Normal file
14
.envrc
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
# Check if nix is available
|
||||
if command -v nix &> /dev/null; then
|
||||
use flake
|
||||
|
||||
echo "✅ Nix development environment loaded"
|
||||
else
|
||||
# Nix is not available - show instructions for non-Nix users
|
||||
echo "⚠️ Nix not detected. Please ensure the following are installed manually:"
|
||||
echo " - Java JDK 17"
|
||||
echo " - Python 3 with invoke package"
|
||||
echo " - Android SDK"
|
||||
echo " - FVM (Flutter Version Management)"
|
||||
echo "💡 To use Nix: Install from https://nixos.org/download.html"
|
||||
fi
|
||||
5
.github/workflows/android.yaml
vendored
5
.github/workflows/android.yaml
vendored
|
|
@ -3,6 +3,9 @@
|
|||
name: Android
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
|
|
@ -30,7 +33,7 @@ jobs:
|
|||
with:
|
||||
flutter-version: ${{ steps.fvm-config-action.outputs.FLUTTER_VERSION }}
|
||||
channel: ${{ steps.fvm-config-action.outputs.FLUTTER_CHANNEL }}
|
||||
cache: true
|
||||
cache: false
|
||||
cache-key: "flutter-:os:-:channel:-:version:-:arch:-:hash:"
|
||||
cache-path: "${{ runner.tool_cache }}/flutter/:channel:-:version:-:arch:"
|
||||
pub-cache-key: "flutter-pub:os:-:channel:-:version:-:arch:-:hash:"
|
||||
|
|
|
|||
6
.github/workflows/ios.yaml
vendored
6
.github/workflows/ios.yaml
vendored
|
|
@ -3,6 +3,9 @@
|
|||
name: iOS
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
|
|
@ -33,7 +36,7 @@ jobs:
|
|||
with:
|
||||
flutter-version: ${{ steps.fvm-config-action.outputs.FLUTTER_VERSION }}
|
||||
channel: ${{ steps.fvm-config-action.outputs.FLUTTER_CHANNEL }}
|
||||
cache: true
|
||||
cache: false
|
||||
cache-key: "flutter-:os:-:channel:-:version:-:arch:-:hash:"
|
||||
cache-path: "${{ runner.tool_cache }}/flutter/:channel:-:version:-:arch:"
|
||||
pub-cache-key: "flutter-pub:os:-:channel:-:version:-:arch:-:hash:"
|
||||
|
|
@ -49,6 +52,7 @@ jobs:
|
|||
dart pub global activate fvm
|
||||
fvm install
|
||||
fvm flutter pub get
|
||||
fvm flutter precache --ios
|
||||
cd ios
|
||||
pod repo update
|
||||
pod install
|
||||
|
|
|
|||
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -8,6 +8,8 @@
|
|||
.buildlog/
|
||||
.history
|
||||
.svn/
|
||||
.direnv
|
||||
flake.nix.bak
|
||||
|
||||
coverage/*
|
||||
|
||||
|
|
|
|||
47
NOTE.md
Normal file
47
NOTE.md
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
## Codeänderung
|
||||
|
||||
- android/app/build.gradle: compileSdkVersion/targetSdkVersion auf 36 angehoben,
|
||||
weil mehrere Plugins SDK 36 voraussetzen.
|
||||
|
||||
## Devbuild (out of the box)
|
||||
|
||||
```sh
|
||||
invoke translate
|
||||
flutter build apk --debug
|
||||
```
|
||||
|
||||
## Releasebuild (benötigt Signatur; interaktiv)
|
||||
|
||||
Signatur erstellen; Passwörter merken!:
|
||||
|
||||
```sh
|
||||
keytool -genkey -v -keystore ~/inventree-release-key.jks \
|
||||
-keyalg RSA -keysize 2048 \
|
||||
-alias inventree
|
||||
```
|
||||
|
||||
android/key.properties anlegen mit:
|
||||
|
||||
```properties
|
||||
storePassword=DEIN_STORE_PASSWORD
|
||||
keyPassword=DEIN_KEY_PASSWORD
|
||||
keyAlias=inventree
|
||||
storeFile=/.../inventree-release-key.jks
|
||||
```
|
||||
|
||||
```sh
|
||||
invoke translate
|
||||
fvm flutter build apk --release --no-tree-shake-icons
|
||||
```
|
||||
|
||||
## Pipe
|
||||
|
||||
1. nix installieren (für flake nutzung) (optional aber dann reproduzierbar)
|
||||
2. flake anwenden
|
||||
|
||||
## Problems that occurred
|
||||
|
||||
### Flutter Java Version Problem
|
||||
|
||||
- unset flutter jdk-dir (`flutter config --jdk-dir=""`)
|
||||
- a specified java version in the flutter config leads to a java
|
||||
|
|
@ -1,3 +1,8 @@
|
|||
### x.xx.x - Month Year
|
||||
---
|
||||
|
||||
- Fixes bug which launched camera twice when uploading an attachment
|
||||
|
||||
### 0.21.1 - November 2025
|
||||
---
|
||||
|
||||
|
|
|
|||
78
flake.lock
generated
Normal file
78
flake.lock
generated
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
{
|
||||
"nodes": {
|
||||
"flake-utils": {
|
||||
"inputs": {
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1731533236,
|
||||
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1767892417,
|
||||
"narHash": "sha256-dhhvQY67aboBk8b0/u0XB6vwHdgbROZT3fJAjyNh5Ww=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "3497aa5c9457a9d88d71fa93a4a8368816fbeeba",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs-flutter": {
|
||||
"locked": {
|
||||
"lastModified": 1751285371,
|
||||
"narHash": "sha256-/hDU+2AUeFFu5qGHO/UyFMc4UG/x5Cw5uXO36KGTk6c=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "b9c03fbbaf84d85bb28eee530c7e9edc4021ca1b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "b9c03fbbaf84d85bb28eee530c7e9edc4021ca1b",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": "nixpkgs",
|
||||
"nixpkgs-flutter": "nixpkgs-flutter"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
||||
137
flake.nix
Normal file
137
flake.nix
Normal file
|
|
@ -0,0 +1,137 @@
|
|||
{
|
||||
description = "InvenTree App Development Environment - CTBK";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
flake-utils.url = "github:numtide/flake-utils";
|
||||
nixpkgs-flutter.url = "github:NixOS/nixpkgs/b9c03fbbaf84d85bb28eee530c7e9edc4021ca1b";
|
||||
};
|
||||
|
||||
outputs =
|
||||
{
|
||||
self,
|
||||
nixpkgs,
|
||||
flake-utils,
|
||||
nixpkgs-flutter,
|
||||
}:
|
||||
flake-utils.lib.eachDefaultSystem (
|
||||
system:
|
||||
let
|
||||
|
||||
pkgs = import nixpkgs {
|
||||
inherit system;
|
||||
config = {
|
||||
allowUnfree = true;
|
||||
android_sdk.accept_license = true;
|
||||
};
|
||||
overlays = [
|
||||
(final: prev: {
|
||||
flutter-pkg = import (self.inputs.nixpkgs-flutter) { inherit system; };
|
||||
})
|
||||
];
|
||||
};
|
||||
|
||||
androidSdk =
|
||||
(pkgs.androidenv.composeAndroidPackages {
|
||||
platformVersions = [
|
||||
"36"
|
||||
"35"
|
||||
"34"
|
||||
];
|
||||
buildToolsVersions = [
|
||||
"36.0.0"
|
||||
"34.0.0"
|
||||
];
|
||||
includeEmulator = true;
|
||||
includeNDK = true;
|
||||
ndkVersions = [ "26.1.10909125" ];
|
||||
cmakeVersions = [
|
||||
"3.31.6"
|
||||
"3.22.1"
|
||||
];
|
||||
}).androidsdk;
|
||||
|
||||
# FVM wrapper for NixOS - maps fvm commands to Nix-managed Flutter
|
||||
fvm-wrapper = pkgs.writeShellScriptBin "fvm" ''
|
||||
case "$1" in
|
||||
use)
|
||||
# 'fvm use' is a no-op on NixOS since Flutter is version-managed by Nix
|
||||
echo "✓ Using Flutter from Nix ($(flutter --version | head -n1))"
|
||||
exit 0
|
||||
;;
|
||||
flutter)
|
||||
# 'fvm flutter ...' becomes 'flutter ...'
|
||||
shift
|
||||
exec flutter "$@"
|
||||
;;
|
||||
*)
|
||||
echo "fvm wrapper: command '$1' not implemented (using Nix-managed Flutter)" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
'';
|
||||
in
|
||||
{
|
||||
devShells.default = pkgs.mkShell {
|
||||
buildInputs =
|
||||
with pkgs;
|
||||
[
|
||||
# Mobile development
|
||||
pkgs.flutter-pkg.flutter
|
||||
fvm-wrapper
|
||||
jdk17
|
||||
|
||||
# Build tools
|
||||
android-tools
|
||||
gradle
|
||||
|
||||
# Python & task runner
|
||||
python3
|
||||
python3Packages.invoke
|
||||
jq
|
||||
|
||||
# System dependencies for Flutter on Linux
|
||||
git
|
||||
curl
|
||||
unzip
|
||||
which
|
||||
]
|
||||
++ lib.optionals stdenv.isLinux [
|
||||
gtk3
|
||||
glib
|
||||
pcre
|
||||
libepoxy
|
||||
libxkbcommon
|
||||
dbus
|
||||
at-spi2-core
|
||||
file
|
||||
];
|
||||
|
||||
shellHook = ''
|
||||
export ANDROID_HOME="${androidSdk}/libexec/android-sdk"
|
||||
export ANDROID_SDK_ROOT="$ANDROID_HOME"
|
||||
export PATH="$ANDROID_HOME/platform-tools:$ANDROID_HOME/tools/bin:$PATH"
|
||||
export JAVA_HOME="${pkgs.jdk17}"
|
||||
export GRADLE_OPTS="-Dorg.gradle.project.android.aapt2FromMavenOverride=$ANDROID_HOME/build-tools/34.0.0/aapt2"
|
||||
|
||||
echo "🚀 InvenTree App Development Environment - CTBK"
|
||||
echo "📦 Tools: Flutter, FVM, JDK17, Android SDK"
|
||||
echo "📋 Run: invoke android # Build Android app"
|
||||
'';
|
||||
|
||||
LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath (
|
||||
with pkgs;
|
||||
[
|
||||
gtk3
|
||||
glib
|
||||
pcre
|
||||
libepoxy
|
||||
libxkbcommon
|
||||
dbus
|
||||
at-spi2-core
|
||||
]
|
||||
);
|
||||
};
|
||||
}
|
||||
);
|
||||
}
|
||||
|
|
@ -353,6 +353,10 @@ class InvenTreeAPI {
|
|||
// Supports separate search against "supplier" / "customer" / "manufacturer"
|
||||
bool get supportsSplitCompanySearch => apiVersion >= 315;
|
||||
|
||||
// Does the server support the "modern" (consolidated) parameter API?
|
||||
// Ref: https://github.com/inventree/InvenTree/pull/10699
|
||||
bool get supportsModernParameters => apiVersion >= 429;
|
||||
|
||||
// Cached list of plugins (refreshed when we connect to the server)
|
||||
List<InvenTreePlugin> _plugins = [];
|
||||
|
||||
|
|
|
|||
176
lib/inventree/attachment.dart
Normal file
176
lib/inventree/attachment.dart
Normal file
|
|
@ -0,0 +1,176 @@
|
|||
import "dart:io";
|
||||
|
||||
import "package:flutter/cupertino.dart";
|
||||
import "package:flutter_tabler_icons/flutter_tabler_icons.dart";
|
||||
import "package:inventree/api.dart";
|
||||
import "package:inventree/inventree/model.dart";
|
||||
import "package:inventree/inventree/sentry.dart";
|
||||
import "package:inventree/l10.dart";
|
||||
import "package:inventree/widget/fields.dart";
|
||||
import "package:inventree/widget/snacks.dart";
|
||||
import "package:path/path.dart" as path;
|
||||
|
||||
class InvenTreeAttachment extends InvenTreeModel {
|
||||
// Class representing an "attachment" file
|
||||
InvenTreeAttachment() : super();
|
||||
|
||||
InvenTreeAttachment.fromJson(Map<String, dynamic> json)
|
||||
: super.fromJson(json);
|
||||
|
||||
@override
|
||||
InvenTreeAttachment createFromJson(Map<String, dynamic> json) =>
|
||||
InvenTreeAttachment.fromJson(json);
|
||||
|
||||
@override
|
||||
String get URL => "attachment/";
|
||||
|
||||
@override
|
||||
Map<String, Map<String, dynamic>> formFields() {
|
||||
Map<String, Map<String, dynamic>> fields = {"link": {}, "comment": {}};
|
||||
|
||||
if (!hasLink) {
|
||||
fields.remove("link");
|
||||
}
|
||||
|
||||
return fields;
|
||||
}
|
||||
|
||||
// The model type of the instance this attachment is associated with
|
||||
String get modelType => getString("model_type");
|
||||
|
||||
// The ID of the instance this attachment is associated with
|
||||
int get modelId => getInt("model_id");
|
||||
|
||||
String get attachment => getString("attachment");
|
||||
|
||||
bool get hasAttachment => attachment.isNotEmpty;
|
||||
|
||||
// Return the filename of the attachment
|
||||
String get filename {
|
||||
return attachment.split("/").last;
|
||||
}
|
||||
|
||||
IconData get icon {
|
||||
String fn = filename.toLowerCase();
|
||||
|
||||
if (fn.endsWith(".pdf")) {
|
||||
return TablerIcons.file_type_pdf;
|
||||
} else if (fn.endsWith(".csv")) {
|
||||
return TablerIcons.file_type_csv;
|
||||
} else if (fn.endsWith(".doc") || fn.endsWith(".docx")) {
|
||||
return TablerIcons.file_type_doc;
|
||||
} else if (fn.endsWith(".xls") || fn.endsWith(".xlsx")) {
|
||||
return TablerIcons.file_type_xls;
|
||||
}
|
||||
|
||||
// Image formats
|
||||
final List<String> img_formats = [".png", ".jpg", ".gif", ".bmp", ".svg"];
|
||||
|
||||
for (String fmt in img_formats) {
|
||||
if (fn.endsWith(fmt)) {
|
||||
return TablerIcons.file_type_jpg;
|
||||
}
|
||||
}
|
||||
|
||||
return TablerIcons.file;
|
||||
}
|
||||
|
||||
String get comment => getString("comment");
|
||||
|
||||
DateTime? get uploadDate {
|
||||
if (jsondata.containsKey("upload_date")) {
|
||||
return DateTime.tryParse((jsondata["upload_date"] ?? "") as String);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// Return a count of how many attachments exist against the specified model ID
|
||||
Future<int> countAttachments(String modelType, int modelId) async {
|
||||
Map<String, String> filters = {};
|
||||
|
||||
if (!api.supportsModernAttachments) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
filters["model_type"] = modelType;
|
||||
filters["model_id"] = modelId.toString();
|
||||
|
||||
return count(filters: filters);
|
||||
}
|
||||
|
||||
Future<bool> uploadAttachment(
|
||||
File attachment,
|
||||
String modelType,
|
||||
int modelId, {
|
||||
String comment = "",
|
||||
Map<String, String> fields = const {},
|
||||
}) async {
|
||||
// Ensure that the correct reference field is set
|
||||
Map<String, String> data = Map<String, String>.from(fields);
|
||||
|
||||
String url = URL;
|
||||
|
||||
if (comment.isNotEmpty) {
|
||||
data["comment"] = comment;
|
||||
}
|
||||
|
||||
data["model_type"] = modelType;
|
||||
data["model_id"] = modelId.toString();
|
||||
|
||||
final APIResponse response = await InvenTreeAPI().uploadFile(
|
||||
url,
|
||||
attachment,
|
||||
method: "POST",
|
||||
name: "attachment",
|
||||
fields: data,
|
||||
);
|
||||
|
||||
return response.successful();
|
||||
}
|
||||
|
||||
Future<bool> uploadImage(
|
||||
String modelType,
|
||||
int modelId, {
|
||||
String prefix = "InvenTree",
|
||||
}) async {
|
||||
bool result = false;
|
||||
|
||||
await FilePickerDialog.pickImageFromCamera().then((File? file) {
|
||||
if (file != null) {
|
||||
String dir = path.dirname(file.path);
|
||||
String ext = path.extension(file.path);
|
||||
String now = DateTime.now().toIso8601String().replaceAll(":", "-");
|
||||
|
||||
// Rename the file with a unique name
|
||||
String filename = "${dir}/${prefix}_image_${now}${ext}";
|
||||
|
||||
try {
|
||||
return file.rename(filename).then((File renamed) {
|
||||
return uploadAttachment(renamed, modelType, modelId).then((
|
||||
success,
|
||||
) {
|
||||
result = success;
|
||||
showSnackIcon(
|
||||
result ? L10().imageUploadSuccess : L10().imageUploadFailure,
|
||||
success: result,
|
||||
);
|
||||
});
|
||||
});
|
||||
} catch (error, stackTrace) {
|
||||
sentryReportError("uploadImage", error, stackTrace);
|
||||
showSnackIcon(L10().imageUploadFailure, success: false);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
* Download this attachment file
|
||||
*/
|
||||
Future<void> downloadAttachment() async {
|
||||
await InvenTreeAPI().downloadFile(attachment);
|
||||
}
|
||||
}
|
||||
|
|
@ -111,31 +111,6 @@ class InvenTreeCompany extends InvenTreeModel {
|
|||
InvenTreeCompany.fromJson(json);
|
||||
}
|
||||
|
||||
/*
|
||||
* Class representing an attachment file against a Company object
|
||||
*/
|
||||
class InvenTreeCompanyAttachment extends InvenTreeAttachment {
|
||||
InvenTreeCompanyAttachment() : super();
|
||||
|
||||
InvenTreeCompanyAttachment.fromJson(Map<String, dynamic> json)
|
||||
: super.fromJson(json);
|
||||
|
||||
@override
|
||||
String get REFERENCE_FIELD => "company";
|
||||
|
||||
@override
|
||||
String get REF_MODEL_TYPE => "company";
|
||||
|
||||
@override
|
||||
String get URL => InvenTreeAPI().supportsModernAttachments
|
||||
? "attachment/"
|
||||
: "company/attachment/";
|
||||
|
||||
@override
|
||||
InvenTreeModel createFromJson(Map<String, dynamic> json) =>
|
||||
InvenTreeCompanyAttachment.fromJson(json);
|
||||
}
|
||||
|
||||
/*
|
||||
* The InvenTreeSupplierPart class represents the SupplierPart model in the InvenTree database
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
import "dart:async";
|
||||
import "dart:io";
|
||||
|
||||
import "package:flutter_tabler_icons/flutter_tabler_icons.dart";
|
||||
import "package:flutter/material.dart";
|
||||
|
|
@ -15,7 +14,6 @@ import "package:inventree/helpers.dart";
|
|||
import "package:inventree/inventree/sentry.dart";
|
||||
|
||||
import "package:inventree/widget/dialogs.dart";
|
||||
import "package:inventree/widget/fields.dart";
|
||||
|
||||
// Paginated response object
|
||||
class InvenTreePageResponse {
|
||||
|
|
@ -934,171 +932,3 @@ class InvenTreeUserSetting extends InvenTreeGlobalSetting {
|
|||
@override
|
||||
String get URL => "settings/user/";
|
||||
}
|
||||
|
||||
class InvenTreeAttachment extends InvenTreeModel {
|
||||
// Class representing an "attachment" file
|
||||
InvenTreeAttachment() : super();
|
||||
|
||||
InvenTreeAttachment.fromJson(Map<String, dynamic> json)
|
||||
: super.fromJson(json);
|
||||
|
||||
@override
|
||||
String get URL => "attachment/";
|
||||
|
||||
@override
|
||||
Map<String, Map<String, dynamic>> formFields() {
|
||||
Map<String, Map<String, dynamic>> fields = {"link": {}, "comment": {}};
|
||||
|
||||
if (!hasLink) {
|
||||
fields.remove("link");
|
||||
}
|
||||
|
||||
return fields;
|
||||
}
|
||||
|
||||
// Override this reference field for any subclasses
|
||||
// Note: This is used for the *legacy* attachment API
|
||||
String get REFERENCE_FIELD => "";
|
||||
|
||||
// Override this reference field for any subclasses
|
||||
// Note: This is used for the *modern* attachment API
|
||||
String get REF_MODEL_TYPE => "";
|
||||
|
||||
String get attachment => getString("attachment");
|
||||
|
||||
bool get hasAttachment => attachment.isNotEmpty;
|
||||
|
||||
// Return the filename of the attachment
|
||||
String get filename {
|
||||
return attachment.split("/").last;
|
||||
}
|
||||
|
||||
IconData get icon {
|
||||
String fn = filename.toLowerCase();
|
||||
|
||||
if (fn.endsWith(".pdf")) {
|
||||
return TablerIcons.file_type_pdf;
|
||||
} else if (fn.endsWith(".csv")) {
|
||||
return TablerIcons.file_type_csv;
|
||||
} else if (fn.endsWith(".doc") || fn.endsWith(".docx")) {
|
||||
return TablerIcons.file_type_doc;
|
||||
} else if (fn.endsWith(".xls") || fn.endsWith(".xlsx")) {
|
||||
return TablerIcons.file_type_xls;
|
||||
}
|
||||
|
||||
// Image formats
|
||||
final List<String> img_formats = [".png", ".jpg", ".gif", ".bmp", ".svg"];
|
||||
|
||||
for (String fmt in img_formats) {
|
||||
if (fn.endsWith(fmt)) {
|
||||
return TablerIcons.file_type_jpg;
|
||||
}
|
||||
}
|
||||
|
||||
return TablerIcons.file;
|
||||
}
|
||||
|
||||
String get comment => getString("comment");
|
||||
|
||||
DateTime? get uploadDate {
|
||||
if (jsondata.containsKey("upload_date")) {
|
||||
return DateTime.tryParse((jsondata["upload_date"] ?? "") as String);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// Return a count of how many attachments exist against the specified model ID
|
||||
Future<int> countAttachments(int modelId) {
|
||||
Map<String, String> filters = {};
|
||||
|
||||
if (InvenTreeAPI().supportsModernAttachments) {
|
||||
filters["model_type"] = REF_MODEL_TYPE;
|
||||
filters["model_id"] = modelId.toString();
|
||||
} else {
|
||||
filters[REFERENCE_FIELD] = modelId.toString();
|
||||
}
|
||||
|
||||
return count(filters: filters);
|
||||
}
|
||||
|
||||
Future<bool> uploadAttachment(
|
||||
File attachment,
|
||||
int modelId, {
|
||||
String comment = "",
|
||||
Map<String, String> fields = const {},
|
||||
}) async {
|
||||
// Ensure that the correct reference field is set
|
||||
Map<String, String> data = Map<String, String>.from(fields);
|
||||
|
||||
String url = URL;
|
||||
|
||||
if (comment.isNotEmpty) {
|
||||
data["comment"] = comment;
|
||||
}
|
||||
|
||||
if (InvenTreeAPI().supportsModernAttachments) {
|
||||
url = "attachment/";
|
||||
data["model_id"] = modelId.toString();
|
||||
data["model_type"] = REF_MODEL_TYPE;
|
||||
} else {
|
||||
if (REFERENCE_FIELD.isEmpty) {
|
||||
sentryReportMessage(
|
||||
"uploadAttachment called with empty 'REFERENCE_FIELD'",
|
||||
);
|
||||
return false;
|
||||
}
|
||||
|
||||
data[REFERENCE_FIELD] = modelId.toString();
|
||||
}
|
||||
|
||||
final APIResponse response = await InvenTreeAPI().uploadFile(
|
||||
url,
|
||||
attachment,
|
||||
method: "POST",
|
||||
name: "attachment",
|
||||
fields: data,
|
||||
);
|
||||
|
||||
return response.successful();
|
||||
}
|
||||
|
||||
Future<bool> uploadImage(int modelId, {String prefix = "InvenTree"}) async {
|
||||
bool result = false;
|
||||
|
||||
await FilePickerDialog.pickImageFromCamera().then((File? file) {
|
||||
if (file != null) {
|
||||
String dir = path.dirname(file.path);
|
||||
String ext = path.extension(file.path);
|
||||
String now = DateTime.now().toIso8601String().replaceAll(":", "-");
|
||||
|
||||
// Rename the file with a unique name
|
||||
String filename = "${dir}/${prefix}_image_${now}${ext}";
|
||||
|
||||
try {
|
||||
file.rename(filename).then((File renamed) {
|
||||
uploadAttachment(renamed, modelId).then((success) {
|
||||
result = success;
|
||||
showSnackIcon(
|
||||
result ? L10().imageUploadSuccess : L10().imageUploadFailure,
|
||||
success: result,
|
||||
);
|
||||
});
|
||||
});
|
||||
} catch (error, stackTrace) {
|
||||
sentryReportError("uploadImage", error, stackTrace);
|
||||
showSnackIcon(L10().imageUploadFailure, success: false);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
* Download this attachment file
|
||||
*/
|
||||
Future<void> downloadAttachment() async {
|
||||
await InvenTreeAPI().downloadFile(attachment);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
77
lib/inventree/parameter.dart
Normal file
77
lib/inventree/parameter.dart
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
import "package:inventree/inventree/model.dart";
|
||||
|
||||
class InvenTreeParameter extends InvenTreeModel {
|
||||
InvenTreeParameter() : super();
|
||||
|
||||
InvenTreeParameter.fromJson(Map<String, dynamic> json) : super.fromJson(json);
|
||||
|
||||
@override
|
||||
InvenTreeParameter createFromJson(Map<String, dynamic> json) =>
|
||||
InvenTreeParameter.fromJson(json);
|
||||
|
||||
@override
|
||||
String get URL => "parameter/";
|
||||
|
||||
@override
|
||||
Map<String, Map<String, dynamic>> formFields() {
|
||||
Map<String, Map<String, dynamic>> fields = {
|
||||
"header": {
|
||||
"type": "string",
|
||||
"read_only": true,
|
||||
"label": name,
|
||||
"help_text": description,
|
||||
"value": "",
|
||||
},
|
||||
"data": {"type": "string"},
|
||||
"note": {},
|
||||
};
|
||||
|
||||
return fields;
|
||||
}
|
||||
|
||||
@override
|
||||
String get name => getString("name", subKey: "template_detail");
|
||||
|
||||
@override
|
||||
String get description => getString("description", subKey: "template_detail");
|
||||
|
||||
String get value => getString("data");
|
||||
|
||||
String get valueString {
|
||||
String v = value;
|
||||
|
||||
if (units.isNotEmpty) {
|
||||
v += " ";
|
||||
v += units;
|
||||
}
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
bool get as_bool => value.toLowerCase() == "true";
|
||||
|
||||
String get units => getString("units", subKey: "template_detail");
|
||||
|
||||
bool get is_checkbox =>
|
||||
getBool("checkbox", subKey: "template_detail", backup: false);
|
||||
|
||||
// The model type of the instance this attachment is associated with
|
||||
String get modelType => getString("model_type");
|
||||
|
||||
// The ID of the instance this attachment is associated with
|
||||
int get modelId => getInt("model_id");
|
||||
|
||||
// Return a count of how many parameters exist against the specified model ID
|
||||
Future<int> countParameters(String modelType, int modelId) async {
|
||||
Map<String, String> filters = {};
|
||||
|
||||
if (!api.supportsModernParameters) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
filters["model_type"] = modelType;
|
||||
filters["model_id"] = modelId.toString();
|
||||
|
||||
return count(filters: filters);
|
||||
}
|
||||
}
|
||||
|
|
@ -132,68 +132,6 @@ class InvenTreePartTestTemplate extends InvenTreeModel {
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Class representing the PartParameter database model
|
||||
*/
|
||||
class InvenTreePartParameter extends InvenTreeModel {
|
||||
InvenTreePartParameter() : super();
|
||||
|
||||
InvenTreePartParameter.fromJson(Map<String, dynamic> json)
|
||||
: super.fromJson(json);
|
||||
|
||||
@override
|
||||
String get URL => "part/parameter/";
|
||||
|
||||
@override
|
||||
List<String> get rolesRequired => ["part"];
|
||||
|
||||
@override
|
||||
InvenTreeModel createFromJson(Map<String, dynamic> json) =>
|
||||
InvenTreePartParameter.fromJson(json);
|
||||
|
||||
@override
|
||||
Map<String, Map<String, dynamic>> formFields() {
|
||||
Map<String, Map<String, dynamic>> fields = {
|
||||
"header": {
|
||||
"type": "string",
|
||||
"read_only": true,
|
||||
"label": name,
|
||||
"help_text": description,
|
||||
"value": "",
|
||||
},
|
||||
"data": {"type": "string"},
|
||||
};
|
||||
|
||||
return fields;
|
||||
}
|
||||
|
||||
@override
|
||||
String get name => getString("name", subKey: "template_detail");
|
||||
|
||||
@override
|
||||
String get description => getString("description", subKey: "template_detail");
|
||||
|
||||
String get value => getString("data");
|
||||
|
||||
String get valueString {
|
||||
String v = value;
|
||||
|
||||
if (units.isNotEmpty) {
|
||||
v += " ";
|
||||
v += units;
|
||||
}
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
bool get as_bool => value.toLowerCase() == "true";
|
||||
|
||||
String get units => getString("units", subKey: "template_detail");
|
||||
|
||||
bool get is_checkbox =>
|
||||
getBool("checkbox", subKey: "template_detail", backup: false);
|
||||
}
|
||||
|
||||
/*
|
||||
* Class representing the Part database model
|
||||
*/
|
||||
|
|
@ -547,28 +485,3 @@ class InvenTreePartPricing extends InvenTreeModel {
|
|||
double? get saleHistoryMin => getDoubleOrNull("sale_history_min");
|
||||
double? get saleHistoryMax => getDoubleOrNull("sale_history_max");
|
||||
}
|
||||
|
||||
/*
|
||||
* Class representing an attachment file against a Part object
|
||||
*/
|
||||
class InvenTreePartAttachment extends InvenTreeAttachment {
|
||||
InvenTreePartAttachment() : super();
|
||||
|
||||
InvenTreePartAttachment.fromJson(Map<String, dynamic> json)
|
||||
: super.fromJson(json);
|
||||
|
||||
@override
|
||||
String get REFERENCE_FIELD => "part";
|
||||
|
||||
@override
|
||||
String get REF_MODEL_TYPE => "part";
|
||||
|
||||
@override
|
||||
String get URL => InvenTreeAPI().supportsModernAttachments
|
||||
? "attachment/"
|
||||
: "part/attachment/";
|
||||
|
||||
@override
|
||||
InvenTreeModel createFromJson(Map<String, dynamic> json) =>
|
||||
InvenTreePartAttachment.fromJson(json);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -336,28 +336,3 @@ class InvenTreePOExtraLineItem extends InvenTreeExtraLineItem {
|
|||
);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Class representing an attachment file against a PurchaseOrder object
|
||||
*/
|
||||
class InvenTreePurchaseOrderAttachment extends InvenTreeAttachment {
|
||||
InvenTreePurchaseOrderAttachment() : super();
|
||||
|
||||
InvenTreePurchaseOrderAttachment.fromJson(Map<String, dynamic> json)
|
||||
: super.fromJson(json);
|
||||
|
||||
@override
|
||||
String get REFERENCE_FIELD => "order";
|
||||
|
||||
@override
|
||||
String get REF_MODEL_TYPE => "purchaseorder";
|
||||
|
||||
@override
|
||||
String get URL => InvenTreeAPI().supportsModernAttachments
|
||||
? "attachment/"
|
||||
: "order/po/attachment/";
|
||||
|
||||
@override
|
||||
InvenTreeModel createFromJson(Map<String, dynamic> json) =>
|
||||
InvenTreePurchaseOrderAttachment.fromJson(json);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -334,7 +334,7 @@ class InvenTreeSalesOrderShipment extends InvenTreeModel {
|
|||
/*
|
||||
* Class representing an allocation of stock against a SalesOrderShipment
|
||||
*/
|
||||
class InvenTreeSalesOrderAllocation extends InvenTreeAttachment {
|
||||
class InvenTreeSalesOrderAllocation extends InvenTreeModel {
|
||||
InvenTreeSalesOrderAllocation() : super();
|
||||
|
||||
InvenTreeSalesOrderAllocation.fromJson(Map<String, dynamic> json)
|
||||
|
|
@ -428,48 +428,3 @@ class InvenTreeSalesOrderAllocation extends InvenTreeAttachment {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Class representing an attachment file against a SalesOrder object
|
||||
*/
|
||||
class InvenTreeSalesOrderAttachment extends InvenTreeAttachment {
|
||||
InvenTreeSalesOrderAttachment() : super();
|
||||
|
||||
InvenTreeSalesOrderAttachment.fromJson(Map<String, dynamic> json)
|
||||
: super.fromJson(json);
|
||||
|
||||
@override
|
||||
InvenTreeModel createFromJson(Map<String, dynamic> json) =>
|
||||
InvenTreeSalesOrderAttachment.fromJson(json);
|
||||
|
||||
@override
|
||||
String get REFERENCE_FIELD => "order";
|
||||
|
||||
@override
|
||||
String get REF_MODEL_TYPE => "salesorder";
|
||||
|
||||
@override
|
||||
String get URL => InvenTreeAPI().supportsModernAttachments
|
||||
? "attachment/"
|
||||
: "order/so/attachment/";
|
||||
}
|
||||
|
||||
class InvenTreeSalesOrderShipmentAttachment extends InvenTreeAttachment {
|
||||
InvenTreeSalesOrderShipmentAttachment() : super();
|
||||
|
||||
InvenTreeSalesOrderShipmentAttachment.fromJson(Map<String, dynamic> json)
|
||||
: super.fromJson(json);
|
||||
|
||||
@override
|
||||
InvenTreeModel createFromJson(Map<String, dynamic> json) =>
|
||||
InvenTreeSalesOrderShipmentAttachment.fromJson(json);
|
||||
|
||||
@override
|
||||
String get REFERENCE_FIELD => "shipment";
|
||||
|
||||
@override
|
||||
String get REF_MODEL_TYPE => "salesordershipment";
|
||||
|
||||
@override
|
||||
String get URL => "attachment/";
|
||||
}
|
||||
|
|
|
|||
|
|
@ -575,31 +575,6 @@ class InvenTreeStockItem extends InvenTreeModel {
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Class representing an attachment file against a StockItem object
|
||||
*/
|
||||
class InvenTreeStockItemAttachment extends InvenTreeAttachment {
|
||||
InvenTreeStockItemAttachment() : super();
|
||||
|
||||
InvenTreeStockItemAttachment.fromJson(Map<String, dynamic> json)
|
||||
: super.fromJson(json);
|
||||
|
||||
@override
|
||||
String get REFERENCE_FIELD => "stock_item";
|
||||
|
||||
@override
|
||||
String get REF_MODEL_TYPE => "stockitem";
|
||||
|
||||
@override
|
||||
String get URL => InvenTreeAPI().supportsModernAttachments
|
||||
? "attachment/"
|
||||
: "stock/attachment/";
|
||||
|
||||
@override
|
||||
InvenTreeModel createFromJson(Map<String, dynamic> json) =>
|
||||
InvenTreeStockItemAttachment.fromJson(json);
|
||||
}
|
||||
|
||||
class InvenTreeStockLocation extends InvenTreeModel {
|
||||
InvenTreeStockLocation() : super();
|
||||
|
||||
|
|
|
|||
|
|
@ -102,7 +102,7 @@
|
|||
"@barcodeReceivePart": {},
|
||||
"barcodeScanPaused": "Skenování čárových kódů pozastaveno",
|
||||
"@barodeScanPaused": {},
|
||||
"barcodeScanPause": "Tap to pause scanning",
|
||||
"barcodeScanPause": "Kliknutím pozastavíte skenování",
|
||||
"@barcodeScanPause": {},
|
||||
"barcodeScanAssign": "Skenovat pro přiřazení čárového kódu",
|
||||
"@barcodeScanAssign": {},
|
||||
|
|
@ -472,9 +472,9 @@
|
|||
"@itemUpdated": {},
|
||||
"keywords": "Klíčová slova",
|
||||
"@keywords": {},
|
||||
"labelDriver": "Label Driver",
|
||||
"labelDriver": "Ovladač pro popisky",
|
||||
"@labelDriver": {},
|
||||
"labelSelectDriver": "Select Label Printer Driver",
|
||||
"labelSelectDriver": "Vyberte ovladač pro tiskárnu štítků",
|
||||
"@labelSelectDriver": {},
|
||||
"labelPrinting": "Tisk štítku",
|
||||
"@labelPrinting": {},
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -102,7 +102,7 @@
|
|||
"@barcodeReceivePart": {},
|
||||
"barcodeScanPaused": "Barcode-Scannen angehalten",
|
||||
"@barodeScanPaused": {},
|
||||
"barcodeScanPause": "Tap to pause scanning",
|
||||
"barcodeScanPause": "Tippen um das Scannen zu pausieren",
|
||||
"@barcodeScanPause": {},
|
||||
"barcodeScanAssign": "Scannen um Barcode zuzuweisen",
|
||||
"@barcodeScanAssign": {},
|
||||
|
|
@ -472,9 +472,9 @@
|
|||
"@itemUpdated": {},
|
||||
"keywords": "Schlüsselwörter",
|
||||
"@keywords": {},
|
||||
"labelDriver": "Label Driver",
|
||||
"labelDriver": "Etikettendrucker Treiber",
|
||||
"@labelDriver": {},
|
||||
"labelSelectDriver": "Select Label Printer Driver",
|
||||
"labelSelectDriver": "Etikettendrucker Treiber auswählen",
|
||||
"@labelSelectDriver": {},
|
||||
"labelPrinting": "Etikettendruck",
|
||||
"@labelPrinting": {},
|
||||
|
|
@ -944,29 +944,29 @@
|
|||
"@shipment": {},
|
||||
"shipments": "Lieferungen",
|
||||
"@shipments": {},
|
||||
"shipmentsPending": "Ausstehende Sendungen",
|
||||
"shipmentsPending": "Ausstehende Lieferungen",
|
||||
"@shipmentsPending": {},
|
||||
"shipmentAdd": "Lieferung hinzufügen",
|
||||
"@shipmentAdd": {},
|
||||
"shipmentCheck": "Sendung prüfen",
|
||||
"shipmentCheck": "Lieferung überprüfen",
|
||||
"@shipmentCheck": {},
|
||||
"shipmentCheckDetail": "Diese Sendung als geprüft markieren",
|
||||
"shipmentCheckDetail": "Diese Lieferung als geprüft markieren",
|
||||
"@shipmentCheckDetail": {},
|
||||
"shipmentChecked": "Sendung geprüft",
|
||||
"shipmentChecked": "Lieferung überprüft",
|
||||
"@shipmentChecked": {},
|
||||
"shipmentDate": "Versanddatum",
|
||||
"@shipmentDate": {},
|
||||
"shipmentEdit": "Sendung bearbeiten",
|
||||
"shipmentEdit": "Lieferung bearbeiten",
|
||||
"@shipmentEdit": {},
|
||||
"shipmentReference": "Shipment Reference",
|
||||
"shipmentReference": "Sendungsreferenz",
|
||||
"@shipmentReference": {},
|
||||
"shipmentSend": "Lieferung versenden",
|
||||
"@shipmentSend": {},
|
||||
"shipmentUncheck": "Uncheck Shipment",
|
||||
"shipmentUncheck": "Lieferung ungeprüft markieren",
|
||||
"@shipmentUncheck": {},
|
||||
"shipmentUncheckDetail": "Mark this shipment as unchecked",
|
||||
"shipmentUncheckDetail": "Diese Lieferung als ungeprüft markieren",
|
||||
"@shipmentUncheckDetail": {},
|
||||
"shipmentUpdated": "Shipment Updated",
|
||||
"shipmentUpdated": "Lieferung Aktualisiert",
|
||||
"@shipmentUpdated": {},
|
||||
"shipped": "Versandt",
|
||||
"@shipped": {},
|
||||
|
|
@ -1102,7 +1102,7 @@
|
|||
"@timeout": {
|
||||
"description": ""
|
||||
},
|
||||
"toggleTorch": "Toggle Torch",
|
||||
"toggleTorch": "Taschenlampe umschalten",
|
||||
"@toggleTorch": {},
|
||||
"tokenError": "Token-Fehler",
|
||||
"@tokenError": {},
|
||||
|
|
@ -1182,7 +1182,7 @@
|
|||
"@priceRange": {},
|
||||
"priceOverrideMin": "Mindestpreis überschreiben",
|
||||
"@priceOverrideMin": {},
|
||||
"priceOverrideMax": "Maximum Price Override",
|
||||
"priceOverrideMax": "Maximalen Preis ignorieren",
|
||||
"@priceOverrideMax": {},
|
||||
"salePrice": "Verkaufspreis",
|
||||
"@salePrice": {},
|
||||
|
|
@ -1198,7 +1198,7 @@
|
|||
"@variantCost": {},
|
||||
"overallPricing": "Gesamt Preise",
|
||||
"@overallPricing": {},
|
||||
"pricingOverrides": "Pricing Overrides",
|
||||
"pricingOverrides": "Preisgestaltung ignorieren",
|
||||
"@pricingOverrides": {},
|
||||
"currency": "Währung",
|
||||
"@currency": {},
|
||||
|
|
|
|||
|
|
@ -962,7 +962,7 @@
|
|||
"@shipmentReference": {},
|
||||
"shipmentSend": "Send Shipment",
|
||||
"@shipmentSend": {},
|
||||
"shipmentUncheck": "Uncheck Shipment",
|
||||
"shipmentUncheck": "Deseleccionar Envío",
|
||||
"@shipmentUncheck": {},
|
||||
"shipmentUncheckDetail": "Mark this shipment as unchecked",
|
||||
"@shipmentUncheckDetail": {},
|
||||
|
|
@ -1068,7 +1068,7 @@
|
|||
"@suppliers": {},
|
||||
"supplierReference": "Referencia del proveedor",
|
||||
"@supplierReference": {},
|
||||
"switchCamera": "Switch Camera",
|
||||
"switchCamera": "Cambiar Cámara",
|
||||
"@switchCamera": {},
|
||||
"takePicture": "Tomar una foto",
|
||||
"@takePicture": {},
|
||||
|
|
@ -1148,7 +1148,7 @@
|
|||
"@uploadFailed": {},
|
||||
"uploadSuccess": "Archivo subido",
|
||||
"@uploadSuccess": {},
|
||||
"uploadImage": "Upload Image",
|
||||
"uploadImage": "Subir Imagen",
|
||||
"@uploadImage": {},
|
||||
"usedIn": "Usado en",
|
||||
"@usedIn": {},
|
||||
|
|
|
|||
|
|
@ -36,17 +36,17 @@
|
|||
"@appDetails": {},
|
||||
"allocated": "اختصاص داده شده",
|
||||
"@allocated": {},
|
||||
"aspectRatio16x9": "16:9",
|
||||
"aspectRatio16x9": "۱۶ به ۹",
|
||||
"@aspectRatio16x9": {},
|
||||
"aspectRatio3x2": "3:2",
|
||||
"aspectRatio3x2": "۳ به ۲",
|
||||
"@aspectRatio3x2": {},
|
||||
"aspectRatio4x3": "4:3",
|
||||
"aspectRatio4x3": "۴ به ۳",
|
||||
"@aspectRatio4x3": {},
|
||||
"aspectRatioSquare": "Square (1:1)",
|
||||
"aspectRatioSquare": "مربعی (۱ به ۱)",
|
||||
"@aspectRatioSquare": {},
|
||||
"allocateStock": "موجودی اختصاص داده شده",
|
||||
"@allocateStock": {},
|
||||
"allocatedStock": "Allocated Stock",
|
||||
"allocatedStock": "موجودی اختصاص داده شده",
|
||||
"@allocatedStock": {},
|
||||
"appReleaseNotes": "نمایش یادداشت های انتشار برنامه",
|
||||
"@appReleaseNotes": {},
|
||||
|
|
@ -102,7 +102,7 @@
|
|||
"@barcodeReceivePart": {},
|
||||
"barcodeScanPaused": "اسکن بارکد متوقف شد",
|
||||
"@barodeScanPaused": {},
|
||||
"barcodeScanPause": "Tap to pause scanning",
|
||||
"barcodeScanPause": "برای توقف اسکن لمس کنید",
|
||||
"@barcodeScanPause": {},
|
||||
"barcodeScanAssign": "برای اختصاص بارکد اسکن کنید",
|
||||
"@barcodeScanAssign": {},
|
||||
|
|
@ -180,9 +180,9 @@
|
|||
"@companyUpdated": {},
|
||||
"companies": "شرکتها",
|
||||
"@companies": {},
|
||||
"complete": "Complete",
|
||||
"complete": "تکمیل",
|
||||
"@complete": {},
|
||||
"completeOrder": "Complete Order",
|
||||
"completeOrder": "تکمیل سفارش",
|
||||
"@completeOrder": {},
|
||||
"completionDate": "تاریخ تکمیل",
|
||||
"@completionDate": {},
|
||||
|
|
@ -204,9 +204,9 @@
|
|||
},
|
||||
"credits": "اعتبارات",
|
||||
"@credits": {},
|
||||
"crop": "Crop",
|
||||
"crop": "برش",
|
||||
"@crop": {},
|
||||
"cropImage": "Crop Image",
|
||||
"cropImage": "برش تصویر",
|
||||
"@cropImage": {},
|
||||
"customer": "مشتری",
|
||||
"@customer": {},
|
||||
|
|
@ -228,11 +228,11 @@
|
|||
"@delete": {},
|
||||
"deleteFailed": "عملیات حذف ناموفق بوده است",
|
||||
"@deleteFailed": {},
|
||||
"deleteImageConfirmation": "Are you sure you want to delete this image?",
|
||||
"deleteImageConfirmation": "آیا مطمئن هستید که میخواهید این تصویر را حذف کنید؟",
|
||||
"@deleteImageConfirmation": {},
|
||||
"deleteImageTooltip": "Delete Image",
|
||||
"deleteImageTooltip": "حذف تصویر",
|
||||
"@deleteImageTooltip": {},
|
||||
"deleteImage": "Delete Image",
|
||||
"deleteImage": "حذف تصویر",
|
||||
"@deleteImage": {},
|
||||
"deletePart": "حذف قسمت",
|
||||
"@deletePart": {},
|
||||
|
|
@ -240,7 +240,7 @@
|
|||
"@deletePartDetail": {},
|
||||
"deleteSuccess": "عملیات حذف با موفقیت انجام شد",
|
||||
"@deleteSuccess": {},
|
||||
"deliveryDate": "Delivery Date",
|
||||
"deliveryDate": "تاریخ تحویل",
|
||||
"@deliveryDate": {},
|
||||
"description": "توضیحات",
|
||||
"@description": {},
|
||||
|
|
@ -254,9 +254,9 @@
|
|||
},
|
||||
"documentation": "مستندات",
|
||||
"@documentation": {},
|
||||
"downloadComplete": "Download Complete",
|
||||
"downloadComplete": "دانلود انجام شد",
|
||||
"@downloadComplete": {},
|
||||
"downloadError": "Error downloading image",
|
||||
"downloadError": "خطای دانلود تصویر",
|
||||
"@downloadError": {},
|
||||
"downloading": "در حال دانلود فایل",
|
||||
"@downloading": {},
|
||||
|
|
@ -282,7 +282,7 @@
|
|||
"@editItem": {},
|
||||
"editLineItem": "ویرایش ایتم خط",
|
||||
"@editLineItem": {},
|
||||
"email": "Email",
|
||||
"email": "پست الکترونیکی",
|
||||
"@email": {},
|
||||
"enterPassword": "رمز عبور را وارد کنید",
|
||||
"@enterPassword": {},
|
||||
|
|
@ -384,9 +384,9 @@
|
|||
"@homeShowPo": {},
|
||||
"homeShowPoDescription": "نمایش دکمه سفارش خرید در صفحه خانه",
|
||||
"@homeShowPoDescription": {},
|
||||
"homeShowShipments": "Show Shipments",
|
||||
"homeShowShipments": "نمایش محموله",
|
||||
"@homeShowShipments": {},
|
||||
"homeShowShipmentsDescription": "Show pending shipments on the home screen",
|
||||
"homeShowShipmentsDescription": "نمایش محموله در انتظار ارسال بر روی صفحه اصلی",
|
||||
"@homeShowShipmentsDescription": {},
|
||||
"homeShowSo": "نمایش سفارش های فروش",
|
||||
"@homeShowSo": {},
|
||||
|
|
@ -454,9 +454,9 @@
|
|||
"@invalidSupplierPart": {},
|
||||
"invalidUsernamePassword": "ترکیب نام کاربری / رمز عبور نامعتبر",
|
||||
"@invalidUsernamePassword": {},
|
||||
"invoice": "Invoice",
|
||||
"invoice": "صورتحساب",
|
||||
"@invoice": {},
|
||||
"invoiceNumber": "Invoice Number",
|
||||
"invoiceNumber": "شماره صورتحساب",
|
||||
"@invoiceNumber": {},
|
||||
"issue": "موضوع",
|
||||
"@issue": {},
|
||||
|
|
@ -472,9 +472,9 @@
|
|||
"@itemUpdated": {},
|
||||
"keywords": "کلمات کلیدی",
|
||||
"@keywords": {},
|
||||
"labelDriver": "Label Driver",
|
||||
"labelDriver": "درایور چاپگر برچسب",
|
||||
"@labelDriver": {},
|
||||
"labelSelectDriver": "Select Label Printer Driver",
|
||||
"labelSelectDriver": "انتخاب درایور چاپگر برچسب",
|
||||
"@labelSelectDriver": {},
|
||||
"labelPrinting": "چاپ لیبل",
|
||||
"@labelPrinting": {},
|
||||
|
|
@ -514,7 +514,7 @@
|
|||
"@locationCreate": {},
|
||||
"locationCreateDetail": "مکان سهام جدید ایجاد کنید",
|
||||
"@locationCreateDetail": {},
|
||||
"locationDefault": "Default Location",
|
||||
"locationDefault": "مکان پیشفرض",
|
||||
"@locationDefault": {},
|
||||
"locationNotSet": "هیچ مکانی مشخص نشده است",
|
||||
"@locationNotSet": {},
|
||||
|
|
@ -544,9 +544,9 @@
|
|||
"@missingData": {},
|
||||
"name": "نام",
|
||||
"@name": {},
|
||||
"no": "No",
|
||||
"no": "خیر",
|
||||
"@no": {},
|
||||
"notApplicable": "N/A",
|
||||
"notApplicable": "موجود نیست",
|
||||
"@notApplicable": {},
|
||||
"notConnected": "متصل نیست",
|
||||
"@notConnected": {},
|
||||
|
|
@ -562,11 +562,11 @@
|
|||
"@noResponse": {},
|
||||
"noResults": "بدون نتیجه",
|
||||
"@noResults": {},
|
||||
"noImageAvailable": "No image available",
|
||||
"noImageAvailable": "هیچ تصویری موجود نیست",
|
||||
"@noImageAvailable": {},
|
||||
"noPricingAvailable": "No pricing available",
|
||||
"noPricingAvailable": "هیچ قیمتی موجود نیست",
|
||||
"@noPricingAvailable": {},
|
||||
"noPricingDataFound": "No pricing data found for this part",
|
||||
"noPricingDataFound": "هیچ اطلاعات قیمتی برای این قطعه یافت نشد",
|
||||
"@noPricingDataFound": {},
|
||||
"noSubcategories": "بدون زیر دسته بندی",
|
||||
"@noSubcategories": {},
|
||||
|
|
@ -630,9 +630,9 @@
|
|||
"@partsNone": {},
|
||||
"partNoResults": "هیچ قطعه ای مطابق با جست و جو یافت نشد",
|
||||
"@partNoResults": {},
|
||||
"partPricing": "Part Pricing",
|
||||
"partPricing": "قیمتگذاری قطعات",
|
||||
"@partPricing": {},
|
||||
"partPricingSettingDetail": "Display part pricing information",
|
||||
"partPricingSettingDetail": "نمایش اطلاعات قیمتگذاری قطعات",
|
||||
"@pricingSettingDetail": {},
|
||||
"partSettings": "تنظیمات قطعه",
|
||||
"@partSettings": {},
|
||||
|
|
@ -660,13 +660,13 @@
|
|||
"@password": {},
|
||||
"passwordEmpty": "رمز عبور نمی تواند خالی باشد",
|
||||
"@passwordEmpty": {},
|
||||
"pending": "Pending",
|
||||
"pending": "در حال بررسی",
|
||||
"@pending": {},
|
||||
"permissionAccountDenied": "حساب شما مجوزهای لازم برای انجام این عمل را ندارد",
|
||||
"@permissionAccountDenied": {},
|
||||
"permissionRequired": "نیازمند مجوز",
|
||||
"@permissionRequired": {},
|
||||
"phone": "Phone",
|
||||
"phone": "تماس",
|
||||
"@phone": {},
|
||||
"printLabel": "پرینت برچسب",
|
||||
"@printLabel": {},
|
||||
|
|
@ -762,7 +762,7 @@
|
|||
"@reference": {},
|
||||
"refresh": "تازه سازی",
|
||||
"@refresh": {},
|
||||
"rotateClockwise": "Rotate 90° clockwise",
|
||||
"rotateClockwise": "چرخش °90 درجه در جهت عقربه های ساعت",
|
||||
"@rotateClockwise": {},
|
||||
"refreshing": "در حال تازه سازی",
|
||||
"@refreshing": {},
|
||||
|
|
@ -940,33 +940,33 @@
|
|||
"@serverNotConnected": {},
|
||||
"serverNotSelected": "سرور انتخاب نشده است",
|
||||
"@serverNotSelected": {},
|
||||
"shipment": "Shipment",
|
||||
"shipment": "محموله",
|
||||
"@shipment": {},
|
||||
"shipments": "محموله ها",
|
||||
"@shipments": {},
|
||||
"shipmentsPending": "Pending Shipments",
|
||||
"shipmentsPending": "محموله در انتظار ارسال",
|
||||
"@shipmentsPending": {},
|
||||
"shipmentAdd": "افزودن محموله",
|
||||
"@shipmentAdd": {},
|
||||
"shipmentCheck": "Check Shipment",
|
||||
"shipmentCheck": "بررسی محموله",
|
||||
"@shipmentCheck": {},
|
||||
"shipmentCheckDetail": "Mark this shipment as checked",
|
||||
"shipmentCheckDetail": "این محموله را بررسی شده علامت گذاری کن",
|
||||
"@shipmentCheckDetail": {},
|
||||
"shipmentChecked": "Shipment Checked",
|
||||
"shipmentChecked": "محموله بررسی شده",
|
||||
"@shipmentChecked": {},
|
||||
"shipmentDate": "Shipment Date",
|
||||
"shipmentDate": "تاریخ ارسال",
|
||||
"@shipmentDate": {},
|
||||
"shipmentEdit": "Edit Shipment",
|
||||
"shipmentEdit": "تغییر محموله",
|
||||
"@shipmentEdit": {},
|
||||
"shipmentReference": "Shipment Reference",
|
||||
"shipmentReference": "کد محموله",
|
||||
"@shipmentReference": {},
|
||||
"shipmentSend": "Send Shipment",
|
||||
"shipmentSend": "ارسال محموله",
|
||||
"@shipmentSend": {},
|
||||
"shipmentUncheck": "Uncheck Shipment",
|
||||
"shipmentUncheck": "محموله بررسی نشده",
|
||||
"@shipmentUncheck": {},
|
||||
"shipmentUncheckDetail": "Mark this shipment as unchecked",
|
||||
"shipmentUncheckDetail": "این محموله را بررسی نشده علامت گذاری کن",
|
||||
"@shipmentUncheckDetail": {},
|
||||
"shipmentUpdated": "Shipment Updated",
|
||||
"shipmentUpdated": "محموله به روز رسانی شد",
|
||||
"@shipmentUpdated": {},
|
||||
"shipped": "ارسال شده",
|
||||
"@shipped": {},
|
||||
|
|
@ -1112,7 +1112,7 @@
|
|||
"@tokenMissingFromResponse": {},
|
||||
"totalPrice": "قیمت کل",
|
||||
"@totalPrice": {},
|
||||
"trackingNumber": "Tracking Number",
|
||||
"trackingNumber": "کد رهگیری",
|
||||
"@trackingNumber": {},
|
||||
"transfer": "انتقال",
|
||||
"@transfer": {
|
||||
|
|
@ -1148,7 +1148,7 @@
|
|||
"@uploadFailed": {},
|
||||
"uploadSuccess": "فایل اپلود شد",
|
||||
"@uploadSuccess": {},
|
||||
"uploadImage": "Upload Image",
|
||||
"uploadImage": "بارگذاری تصویر",
|
||||
"@uploadImage": {},
|
||||
"usedIn": "استفاده شده در",
|
||||
"@usedIn": {},
|
||||
|
|
@ -1174,34 +1174,34 @@
|
|||
"@viewSupplierPart": {},
|
||||
"website": "وب سایت",
|
||||
"@website": {},
|
||||
"yes": "Yes",
|
||||
"yes": "بله",
|
||||
"@yes": {},
|
||||
"price": "Price",
|
||||
"price": "قیمت",
|
||||
"@price": {},
|
||||
"priceRange": "Price Range",
|
||||
"priceRange": "بازه قیمت",
|
||||
"@priceRange": {},
|
||||
"priceOverrideMin": "Minimum Price Override",
|
||||
"priceOverrideMin": "قیمت دستی مینیمم",
|
||||
"@priceOverrideMin": {},
|
||||
"priceOverrideMax": "Maximum Price Override",
|
||||
"priceOverrideMax": "قیمت دستی ماکزیمم",
|
||||
"@priceOverrideMax": {},
|
||||
"salePrice": "Sale Price",
|
||||
"salePrice": "قیمت حراج",
|
||||
"@salePrice": {},
|
||||
"saleHistory": "Sale History",
|
||||
"saleHistory": "تاریخچه حراج",
|
||||
"@saleHistory": {},
|
||||
"supplierPricing": "Supplier Pricing",
|
||||
"supplierPricing": "قیمت تامین کننده",
|
||||
"@supplierPricing": {},
|
||||
"bomCost": "BOM Cost",
|
||||
"bomCost": "هزینه تمام شده",
|
||||
"@bomCost": {},
|
||||
"internalCost": "Internal Cost",
|
||||
"internalCost": "هزینه داخلی",
|
||||
"@internalCost": {},
|
||||
"variantCost": "Variant Cost",
|
||||
"variantCost": "هزینه متغیر",
|
||||
"@variantCost": {},
|
||||
"overallPricing": "Overall Pricing",
|
||||
"overallPricing": "قیمت نهایی",
|
||||
"@overallPricing": {},
|
||||
"pricingOverrides": "Pricing Overrides",
|
||||
"pricingOverrides": "قیمت دستی",
|
||||
"@pricingOverrides": {},
|
||||
"currency": "Currency",
|
||||
"currency": "واحد پول",
|
||||
"@currency": {},
|
||||
"priceBreaks": "Price Breaks",
|
||||
"priceBreaks": "کاهش قیمت",
|
||||
"@priceBreaks": {}
|
||||
}
|
||||
|
|
@ -46,7 +46,7 @@
|
|||
"@aspectRatioSquare": {},
|
||||
"allocateStock": "Készlet foglalása",
|
||||
"@allocateStock": {},
|
||||
"allocatedStock": "Allocated Stock",
|
||||
"allocatedStock": "Lefoglalt Készlet",
|
||||
"@allocatedStock": {},
|
||||
"appReleaseNotes": "Kiadási közlemények",
|
||||
"@appReleaseNotes": {},
|
||||
|
|
@ -102,7 +102,7 @@
|
|||
"@barcodeReceivePart": {},
|
||||
"barcodeScanPaused": "Vonalkód olvasás megállítva",
|
||||
"@barodeScanPaused": {},
|
||||
"barcodeScanPause": "Tap to pause scanning",
|
||||
"barcodeScanPause": "Érintse meg a szkennelés szüneteltetéséhez",
|
||||
"@barcodeScanPause": {},
|
||||
"barcodeScanAssign": "Kódolvasás a hozzárendeléshez",
|
||||
"@barcodeScanAssign": {},
|
||||
|
|
@ -240,7 +240,7 @@
|
|||
"@deletePartDetail": {},
|
||||
"deleteSuccess": "Törlés sikeres",
|
||||
"@deleteSuccess": {},
|
||||
"deliveryDate": "Delivery Date",
|
||||
"deliveryDate": "Szállítási Dátum",
|
||||
"@deliveryDate": {},
|
||||
"description": "Leírás",
|
||||
"@description": {},
|
||||
|
|
@ -384,9 +384,9 @@
|
|||
"@homeShowPo": {},
|
||||
"homeShowPoDescription": "Beszerzési rendelések gomb megjelenítése a főoldalon",
|
||||
"@homeShowPoDescription": {},
|
||||
"homeShowShipments": "Show Shipments",
|
||||
"homeShowShipments": "Szállítmányok Mutatása",
|
||||
"@homeShowShipments": {},
|
||||
"homeShowShipmentsDescription": "Show pending shipments on the home screen",
|
||||
"homeShowShipmentsDescription": "Függőben lévő szállítmányok megjelenítése a kezdőképernyőn",
|
||||
"@homeShowShipmentsDescription": {},
|
||||
"homeShowSo": "Vevői rendelések megmutatása",
|
||||
"@homeShowSo": {},
|
||||
|
|
@ -454,9 +454,9 @@
|
|||
"@invalidSupplierPart": {},
|
||||
"invalidUsernamePassword": "Érvénytelen felhasználónév/jelszó kombináció",
|
||||
"@invalidUsernamePassword": {},
|
||||
"invoice": "Invoice",
|
||||
"invoice": "Számla",
|
||||
"@invoice": {},
|
||||
"invoiceNumber": "Invoice Number",
|
||||
"invoiceNumber": "Számlaszám",
|
||||
"@invoiceNumber": {},
|
||||
"issue": "Kiküldés",
|
||||
"@issue": {},
|
||||
|
|
@ -472,9 +472,9 @@
|
|||
"@itemUpdated": {},
|
||||
"keywords": "Kulcsszavak",
|
||||
"@keywords": {},
|
||||
"labelDriver": "Label Driver",
|
||||
"labelDriver": "Címke Meghajtó",
|
||||
"@labelDriver": {},
|
||||
"labelSelectDriver": "Select Label Printer Driver",
|
||||
"labelSelectDriver": "Címkenyomtató Meghajtó Kiválasztása",
|
||||
"@labelSelectDriver": {},
|
||||
"labelPrinting": "Címke nyomtatás",
|
||||
"@labelPrinting": {},
|
||||
|
|
@ -514,7 +514,7 @@
|
|||
"@locationCreate": {},
|
||||
"locationCreateDetail": "Új készlet hely létrehozása",
|
||||
"@locationCreateDetail": {},
|
||||
"locationDefault": "Default Location",
|
||||
"locationDefault": "Alapértelmezett Hely",
|
||||
"@locationDefault": {},
|
||||
"locationNotSet": "Nincs megadva hely",
|
||||
"@locationNotSet": {},
|
||||
|
|
@ -544,7 +544,7 @@
|
|||
"@missingData": {},
|
||||
"name": "Név",
|
||||
"@name": {},
|
||||
"no": "No",
|
||||
"no": "Nem",
|
||||
"@no": {},
|
||||
"notApplicable": "N/A",
|
||||
"@notApplicable": {},
|
||||
|
|
@ -660,7 +660,7 @@
|
|||
"@password": {},
|
||||
"passwordEmpty": "Jelszó nem lehet üres",
|
||||
"@passwordEmpty": {},
|
||||
"pending": "Pending",
|
||||
"pending": "Függőben",
|
||||
"@pending": {},
|
||||
"permissionAccountDenied": "Nincs meg a szükséges jogosultságod, hogy végrehajtsd ezt a műveletet",
|
||||
"@permissionAccountDenied": {},
|
||||
|
|
@ -940,33 +940,33 @@
|
|||
"@serverNotConnected": {},
|
||||
"serverNotSelected": "Nincs kiszolgáló választva",
|
||||
"@serverNotSelected": {},
|
||||
"shipment": "Shipment",
|
||||
"shipment": "Szállítmány",
|
||||
"@shipment": {},
|
||||
"shipments": "Szállítmányok",
|
||||
"@shipments": {},
|
||||
"shipmentsPending": "Pending Shipments",
|
||||
"shipmentsPending": "Függőben Lévő Szállítmányok",
|
||||
"@shipmentsPending": {},
|
||||
"shipmentAdd": "Szállítmány hozzáadása",
|
||||
"@shipmentAdd": {},
|
||||
"shipmentCheck": "Check Shipment",
|
||||
"shipmentCheck": "Szállítmány Ellenőrzése",
|
||||
"@shipmentCheck": {},
|
||||
"shipmentCheckDetail": "Mark this shipment as checked",
|
||||
"shipmentCheckDetail": "Jelölje meg ezt a szállítmányt ellenőrzöttként",
|
||||
"@shipmentCheckDetail": {},
|
||||
"shipmentChecked": "Shipment Checked",
|
||||
"shipmentChecked": "Szállítmány Ellenőrizve",
|
||||
"@shipmentChecked": {},
|
||||
"shipmentDate": "Shipment Date",
|
||||
"shipmentDate": "Szállítmány Dátuma",
|
||||
"@shipmentDate": {},
|
||||
"shipmentEdit": "Edit Shipment",
|
||||
"shipmentEdit": "Szállítmány Szerkesztése",
|
||||
"@shipmentEdit": {},
|
||||
"shipmentReference": "Shipment Reference",
|
||||
"shipmentReference": "Szállítmány Hivatkozás",
|
||||
"@shipmentReference": {},
|
||||
"shipmentSend": "Send Shipment",
|
||||
"shipmentSend": "Szállítmány Küldése",
|
||||
"@shipmentSend": {},
|
||||
"shipmentUncheck": "Uncheck Shipment",
|
||||
"shipmentUncheck": "Szállítmány Ellenőrzés Visszavonása",
|
||||
"@shipmentUncheck": {},
|
||||
"shipmentUncheckDetail": "Mark this shipment as unchecked",
|
||||
"shipmentUncheckDetail": "Jelölje meg ezt a szállítmányt nem ellenőrzöttként",
|
||||
"@shipmentUncheckDetail": {},
|
||||
"shipmentUpdated": "Shipment Updated",
|
||||
"shipmentUpdated": "Szállítmány Frissítve",
|
||||
"@shipmentUpdated": {},
|
||||
"shipped": "Kiszállítva",
|
||||
"@shipped": {},
|
||||
|
|
@ -1112,7 +1112,7 @@
|
|||
"@tokenMissingFromResponse": {},
|
||||
"totalPrice": "Teljes ár",
|
||||
"@totalPrice": {},
|
||||
"trackingNumber": "Tracking Number",
|
||||
"trackingNumber": "Nyomkövetési Szám",
|
||||
"@trackingNumber": {},
|
||||
"transfer": "Áthelyezés",
|
||||
"@transfer": {
|
||||
|
|
@ -1174,7 +1174,7 @@
|
|||
"@viewSupplierPart": {},
|
||||
"website": "Weboldal",
|
||||
"@website": {},
|
||||
"yes": "Yes",
|
||||
"yes": "Igen",
|
||||
"@yes": {},
|
||||
"price": "Ár",
|
||||
"@price": {},
|
||||
|
|
|
|||
|
|
@ -102,7 +102,7 @@
|
|||
"@barcodeReceivePart": {},
|
||||
"barcodeScanPaused": "Scansione codice a barre in pausa",
|
||||
"@barodeScanPaused": {},
|
||||
"barcodeScanPause": "Tap to pause scanning",
|
||||
"barcodeScanPause": "Tocca per mettere in pausa la scansione",
|
||||
"@barcodeScanPause": {},
|
||||
"barcodeScanAssign": "Scansiona per assegnare codice a barre",
|
||||
"@barcodeScanAssign": {},
|
||||
|
|
@ -472,9 +472,9 @@
|
|||
"@itemUpdated": {},
|
||||
"keywords": "Parole Chiave",
|
||||
"@keywords": {},
|
||||
"labelDriver": "Label Driver",
|
||||
"labelDriver": "Driver Etichetta",
|
||||
"@labelDriver": {},
|
||||
"labelSelectDriver": "Select Label Printer Driver",
|
||||
"labelSelectDriver": "Seleziona Il Driver Della Stampante Etichette",
|
||||
"@labelSelectDriver": {},
|
||||
"labelPrinting": "Etichetta in stampa",
|
||||
"@labelPrinting": {},
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@
|
|||
"@aspectRatioSquare": {},
|
||||
"allocateStock": "Voorraad Toewijzen",
|
||||
"@allocateStock": {},
|
||||
"allocatedStock": "Allocated Stock",
|
||||
"allocatedStock": "Toegewezen voorraad",
|
||||
"@allocatedStock": {},
|
||||
"appReleaseNotes": "App release notities weergeven",
|
||||
"@appReleaseNotes": {},
|
||||
|
|
@ -102,7 +102,7 @@
|
|||
"@barcodeReceivePart": {},
|
||||
"barcodeScanPaused": "Barcode scannen gepauzeerd",
|
||||
"@barodeScanPaused": {},
|
||||
"barcodeScanPause": "Tap to pause scanning",
|
||||
"barcodeScanPause": "Klik om scannen te pauzeren",
|
||||
"@barcodeScanPause": {},
|
||||
"barcodeScanAssign": "Scan om streepjescode toe te wijzen",
|
||||
"@barcodeScanAssign": {},
|
||||
|
|
@ -240,7 +240,7 @@
|
|||
"@deletePartDetail": {},
|
||||
"deleteSuccess": "Succesvol verwijderd",
|
||||
"@deleteSuccess": {},
|
||||
"deliveryDate": "Delivery Date",
|
||||
"deliveryDate": "Leveringsdatum",
|
||||
"@deliveryDate": {},
|
||||
"description": "Omschrijving",
|
||||
"@description": {},
|
||||
|
|
@ -384,9 +384,9 @@
|
|||
"@homeShowPo": {},
|
||||
"homeShowPoDescription": "Inkooporder knop op startscherm weergeven",
|
||||
"@homeShowPoDescription": {},
|
||||
"homeShowShipments": "Show Shipments",
|
||||
"homeShowShipments": "Verzending weergeven",
|
||||
"@homeShowShipments": {},
|
||||
"homeShowShipmentsDescription": "Show pending shipments on the home screen",
|
||||
"homeShowShipmentsDescription": "Toon Leveringen in afwachting op het startscherm",
|
||||
"@homeShowShipmentsDescription": {},
|
||||
"homeShowSo": "Toon Verkooporders",
|
||||
"@homeShowSo": {},
|
||||
|
|
@ -454,9 +454,9 @@
|
|||
"@invalidSupplierPart": {},
|
||||
"invalidUsernamePassword": "Ongeldige gebruikersnaam / wachtwoord combinatie",
|
||||
"@invalidUsernamePassword": {},
|
||||
"invoice": "Invoice",
|
||||
"invoice": "Factuur",
|
||||
"@invoice": {},
|
||||
"invoiceNumber": "Invoice Number",
|
||||
"invoiceNumber": "Factuur nummer",
|
||||
"@invoiceNumber": {},
|
||||
"issue": "Probleem",
|
||||
"@issue": {},
|
||||
|
|
@ -472,9 +472,9 @@
|
|||
"@itemUpdated": {},
|
||||
"keywords": "Trefwoorden",
|
||||
"@keywords": {},
|
||||
"labelDriver": "Label Driver",
|
||||
"labelDriver": "Label printer",
|
||||
"@labelDriver": {},
|
||||
"labelSelectDriver": "Select Label Printer Driver",
|
||||
"labelSelectDriver": "Selecteer Label Printer Driver",
|
||||
"@labelSelectDriver": {},
|
||||
"labelPrinting": "Label afdrukken",
|
||||
"@labelPrinting": {},
|
||||
|
|
@ -514,7 +514,7 @@
|
|||
"@locationCreate": {},
|
||||
"locationCreateDetail": "Creëer nieuwe voorraadlocatie",
|
||||
"@locationCreateDetail": {},
|
||||
"locationDefault": "Default Location",
|
||||
"locationDefault": "Standaard locatie",
|
||||
"@locationDefault": {},
|
||||
"locationNotSet": "Geen locatie opgegeven",
|
||||
"@locationNotSet": {},
|
||||
|
|
@ -544,9 +544,9 @@
|
|||
"@missingData": {},
|
||||
"name": "Naam",
|
||||
"@name": {},
|
||||
"no": "No",
|
||||
"no": "Nee",
|
||||
"@no": {},
|
||||
"notApplicable": "N/A",
|
||||
"notApplicable": "N.v.t. ",
|
||||
"@notApplicable": {},
|
||||
"notConnected": "Niet verbonden",
|
||||
"@notConnected": {},
|
||||
|
|
@ -660,7 +660,7 @@
|
|||
"@password": {},
|
||||
"passwordEmpty": "Wachtwoord mag niet leeg zijn",
|
||||
"@passwordEmpty": {},
|
||||
"pending": "Pending",
|
||||
"pending": "In behandeling",
|
||||
"@pending": {},
|
||||
"permissionAccountDenied": "U heeft niet de vereiste rechten om deze actie uit te voeren",
|
||||
"@permissionAccountDenied": {},
|
||||
|
|
@ -940,33 +940,33 @@
|
|||
"@serverNotConnected": {},
|
||||
"serverNotSelected": "Server niet geselecteerd",
|
||||
"@serverNotSelected": {},
|
||||
"shipment": "Shipment",
|
||||
"shipment": "Levering",
|
||||
"@shipment": {},
|
||||
"shipments": "Verzendingen",
|
||||
"@shipments": {},
|
||||
"shipmentsPending": "Pending Shipments",
|
||||
"shipmentsPending": "Leveringen in behandeling",
|
||||
"@shipmentsPending": {},
|
||||
"shipmentAdd": "Verzending toevoegen",
|
||||
"@shipmentAdd": {},
|
||||
"shipmentCheck": "Check Shipment",
|
||||
"shipmentCheck": "Controleer Levering",
|
||||
"@shipmentCheck": {},
|
||||
"shipmentCheckDetail": "Mark this shipment as checked",
|
||||
"shipmentCheckDetail": "Markeer deze levering als gecontroleerd",
|
||||
"@shipmentCheckDetail": {},
|
||||
"shipmentChecked": "Shipment Checked",
|
||||
"shipmentChecked": "Levering gecontroleerd",
|
||||
"@shipmentChecked": {},
|
||||
"shipmentDate": "Shipment Date",
|
||||
"shipmentDate": "Leverings Datum",
|
||||
"@shipmentDate": {},
|
||||
"shipmentEdit": "Edit Shipment",
|
||||
"shipmentEdit": "Wijzig levering",
|
||||
"@shipmentEdit": {},
|
||||
"shipmentReference": "Shipment Reference",
|
||||
"@shipmentReference": {},
|
||||
"shipmentSend": "Send Shipment",
|
||||
"shipmentSend": "Verzending versturen",
|
||||
"@shipmentSend": {},
|
||||
"shipmentUncheck": "Uncheck Shipment",
|
||||
"shipmentUncheck": "Verzending uitvinken",
|
||||
"@shipmentUncheck": {},
|
||||
"shipmentUncheckDetail": "Mark this shipment as unchecked",
|
||||
"shipmentUncheckDetail": "Markeer deze levering als niet gecontroleerd",
|
||||
"@shipmentUncheckDetail": {},
|
||||
"shipmentUpdated": "Shipment Updated",
|
||||
"shipmentUpdated": "Verzending bijgewerkt",
|
||||
"@shipmentUpdated": {},
|
||||
"shipped": "Verzonden",
|
||||
"@shipped": {},
|
||||
|
|
@ -1112,7 +1112,7 @@
|
|||
"@tokenMissingFromResponse": {},
|
||||
"totalPrice": "Totaalprijs",
|
||||
"@totalPrice": {},
|
||||
"trackingNumber": "Tracking Number",
|
||||
"trackingNumber": "Traceernummer",
|
||||
"@trackingNumber": {},
|
||||
"transfer": "Verplaats",
|
||||
"@transfer": {
|
||||
|
|
@ -1174,7 +1174,7 @@
|
|||
"@viewSupplierPart": {},
|
||||
"website": "Website",
|
||||
"@website": {},
|
||||
"yes": "Yes",
|
||||
"yes": "Ja",
|
||||
"@yes": {},
|
||||
"price": "Prijs",
|
||||
"@price": {},
|
||||
|
|
|
|||
|
|
@ -1202,6 +1202,6 @@
|
|||
"@pricingOverrides": {},
|
||||
"currency": "Waluta",
|
||||
"@currency": {},
|
||||
"priceBreaks": "Price Breaks",
|
||||
"priceBreaks": "Widełki cenowe",
|
||||
"@priceBreaks": {}
|
||||
}
|
||||
|
|
@ -102,7 +102,7 @@
|
|||
"@barcodeReceivePart": {},
|
||||
"barcodeScanPaused": "Scanare cod de bare întreruptă",
|
||||
"@barodeScanPaused": {},
|
||||
"barcodeScanPause": "Tap to pause scanning",
|
||||
"barcodeScanPause": "Atingeți pentru a întrerupe scanarea",
|
||||
"@barcodeScanPause": {},
|
||||
"barcodeScanAssign": "Scanează pentru a atribui cod de bare",
|
||||
"@barcodeScanAssign": {},
|
||||
|
|
@ -472,9 +472,9 @@
|
|||
"@itemUpdated": {},
|
||||
"keywords": "Cuvinte cheie",
|
||||
"@keywords": {},
|
||||
"labelDriver": "Label Driver",
|
||||
"labelDriver": "Etichetează șofer",
|
||||
"@labelDriver": {},
|
||||
"labelSelectDriver": "Select Label Printer Driver",
|
||||
"labelSelectDriver": "Selectați șofer de imprimante etichetă",
|
||||
"@labelSelectDriver": {},
|
||||
"labelPrinting": "Printare etichete",
|
||||
"@labelPrinting": {},
|
||||
|
|
@ -822,386 +822,386 @@
|
|||
"@response504": {},
|
||||
"response505": "Versiunea HTTP nu este suportată",
|
||||
"@response505": {},
|
||||
"responseData": "Response data",
|
||||
"responseData": "Date Răspuns",
|
||||
"@responseData": {},
|
||||
"responseInvalid": "Invalid Response Code",
|
||||
"responseInvalid": "Cod de răspuns nevalid",
|
||||
"@responseInvalid": {},
|
||||
"responseUnknown": "Unknown Response",
|
||||
"responseUnknown": "Răspuns necunoscut",
|
||||
"@responseUnknown": {},
|
||||
"result": "Result",
|
||||
"result": "Rezultat",
|
||||
"@result": {
|
||||
"description": ""
|
||||
},
|
||||
"returned": "Returned",
|
||||
"returned": "Returnat",
|
||||
"@returned": {},
|
||||
"salesOrder": "Sales Order",
|
||||
"salesOrder": "Comenzi de Vânzare",
|
||||
"@salesOrder": {},
|
||||
"salesOrders": "Sales Orders",
|
||||
"salesOrders": "Comenzi de Vânzare",
|
||||
"@salesOrders": {},
|
||||
"salesOrderEnable": "Enable Sales Orders",
|
||||
"salesOrderEnable": "Activează Comenzile de Vânzări",
|
||||
"@salesOrderEnable": {},
|
||||
"salesOrderEnableDetail": "Enable sales order functionality",
|
||||
"salesOrderEnableDetail": "Activați funcționalitatea comenzilor de vânzare",
|
||||
"@salesOrderEnableDetail": {},
|
||||
"salesOrderShowCamera": "Camera Shortcut",
|
||||
"salesOrderShowCamera": "Scurtătura Cameră",
|
||||
"@salesOrderShowCamera": {},
|
||||
"salesOrderShowCameraDetail": "Enable image upload shortcut on sales order screen",
|
||||
"salesOrderShowCameraDetail": "Activează scurtătura de încărcare a imaginilor pe ecranul comenzii de vânzare",
|
||||
"@salesOrderShowCameraDetail": {},
|
||||
"salesOrderSettings": "Sales order settings",
|
||||
"salesOrderSettings": "Setările comenzii de vânzare",
|
||||
"@salesOrderSettings": {},
|
||||
"salesOrderCreate": "New Sales Order",
|
||||
"salesOrderCreate": "Comandă de vânzări nouă",
|
||||
"@saleOrderCreate": {},
|
||||
"salesOrderEdit": "Edit Sales Order",
|
||||
"salesOrderEdit": "Editează Comanda de Vânzare",
|
||||
"@salesOrderEdit": {},
|
||||
"salesOrderUpdated": "Sales order updated",
|
||||
"salesOrderUpdated": "Comanda de vanzare actualizată",
|
||||
"@salesOrderUpdated": {},
|
||||
"save": "Save",
|
||||
"save": "Salvaţi",
|
||||
"@save": {
|
||||
"description": "Save"
|
||||
},
|
||||
"scanBarcode": "Scan Barcode",
|
||||
"scanBarcode": "Scanați codul de bare",
|
||||
"@scanBarcode": {},
|
||||
"scanSupplierPart": "Scan supplier part barcode",
|
||||
"scanSupplierPart": "Scanare cod de bare furnizor",
|
||||
"@scanSupplierPart": {},
|
||||
"scanIntoLocation": "Scan Into Location",
|
||||
"scanIntoLocation": "Scanare în locație",
|
||||
"@scanIntoLocation": {},
|
||||
"scanIntoLocationDetail": "Scan this item into location",
|
||||
"scanIntoLocationDetail": "Scanează acest articol în locație",
|
||||
"@scanIntoLocationDetail": {},
|
||||
"scannerExternal": "External Scanner",
|
||||
"scannerExternal": "Scanner extern",
|
||||
"@scannerExternal": {},
|
||||
"scannerExternalDetail": "Use external scanner to read barcodes (wedge mode)",
|
||||
"scannerExternalDetail": "Utilizează scanerul extern pentru a citi codurile de bare (modul wedge)",
|
||||
"@scannerExternalDetail": {},
|
||||
"scanReceivedParts": "Scan Received Parts",
|
||||
"scanReceivedParts": "Scanați capitolele primite",
|
||||
"@scanReceivedParts": {},
|
||||
"search": "Search",
|
||||
"search": "Caută",
|
||||
"@search": {
|
||||
"description": "search"
|
||||
},
|
||||
"searching": "Searching",
|
||||
"searching": "Căutare",
|
||||
"@searching": {},
|
||||
"searchLocation": "Search for location",
|
||||
"searchLocation": "Căutați locația",
|
||||
"@searchLocation": {},
|
||||
"searchParts": "Search Parts",
|
||||
"searchParts": "Caută componente",
|
||||
"@searchParts": {},
|
||||
"searchStock": "Search Stock",
|
||||
"searchStock": "Căutare Stoc",
|
||||
"@searchStock": {},
|
||||
"select": "Select",
|
||||
"select": "Selectează",
|
||||
"@select": {},
|
||||
"selectFile": "Select File",
|
||||
"selectFile": "Selectează fișier",
|
||||
"@selectFile": {},
|
||||
"selectImage": "Select Image",
|
||||
"selectImage": "Selectează imagine",
|
||||
"@selectImage": {},
|
||||
"selectLocation": "Select a location",
|
||||
"selectLocation": "Selectați o locație",
|
||||
"@selectLocation": {},
|
||||
"send": "Send",
|
||||
"send": "Trimite",
|
||||
"@send": {},
|
||||
"serialNumber": "Serial Number",
|
||||
"serialNumber": "Număr de serie",
|
||||
"@serialNumber": {},
|
||||
"serialNumbers": "Serial Numbers",
|
||||
"serialNumbers": "Număr de serie",
|
||||
"@serialNumbers": {},
|
||||
"server": "Server",
|
||||
"@server": {},
|
||||
"serverAddress": "Server Address",
|
||||
"serverAddress": "Adresă server",
|
||||
"@serverAddress": {},
|
||||
"serverApiRequired": "Required API Version",
|
||||
"serverApiRequired": "Versiunea API necesară",
|
||||
"@serverApiRequired": {},
|
||||
"serverApiVersion": "Server API Version",
|
||||
"serverApiVersion": "Versiune API server",
|
||||
"@serverApiVersion": {},
|
||||
"serverAuthenticationError": "Authentication Error",
|
||||
"serverAuthenticationError": "Eroare autentificare",
|
||||
"@serverAuthenticationError": {},
|
||||
"serverCertificateError": "Cerficate Error",
|
||||
"@serverCertificateError": {},
|
||||
"serverCertificateInvalid": "Server HTTPS certificate is invalid",
|
||||
"serverCertificateInvalid": "Certificatul HTTPS al serverului nu este valid",
|
||||
"@serverCertificateInvalid": {},
|
||||
"serverConnected": "Connected to Server",
|
||||
"serverConnected": "Conectare la server",
|
||||
"@serverConnected": {},
|
||||
"serverConnecting": "Connecting to server",
|
||||
"serverConnecting": "Se conecteaza la server",
|
||||
"@serverConnecting": {},
|
||||
"serverCouldNotConnect": "Could not connect to server",
|
||||
"serverCouldNotConnect": "Nu s-a putut conecta la server",
|
||||
"@serverCouldNotConnect": {},
|
||||
"serverEmpty": "Server cannot be empty",
|
||||
"serverEmpty": "Serverul nu poate fi gol",
|
||||
"@serverEmpty": {},
|
||||
"serverError": "Server Error",
|
||||
"serverError": "Eroare de server",
|
||||
"@serverError": {},
|
||||
"serverDetails": "Server Details",
|
||||
"serverDetails": "Detalii despre server",
|
||||
"@serverDetails": {},
|
||||
"serverMissingData": "Server response missing required fields",
|
||||
"serverMissingData": "Răspuns server lipsă câmpuri obligatorii",
|
||||
"@serverMissingData": {},
|
||||
"serverOld": "Old Server Version",
|
||||
"serverOld": "Versiunea veche a serverului",
|
||||
"@serverOld": {},
|
||||
"serverSettings": "Server Settings",
|
||||
"serverSettings": "Setări server",
|
||||
"@serverSettings": {},
|
||||
"serverStart": "Server must start with http[s]",
|
||||
"serverStart": "Serverul trebuie să înceapă cu http[s]",
|
||||
"@serverStart": {},
|
||||
"settings": "Settings",
|
||||
"settings": "Setări",
|
||||
"@settings": {},
|
||||
"serverInstance": "Server Instance",
|
||||
"serverInstance": "Instanță server",
|
||||
"@serverInstance": {},
|
||||
"serverNotConnected": "Server not connected",
|
||||
"serverNotConnected": "Serverul nu este conectat",
|
||||
"@serverNotConnected": {},
|
||||
"serverNotSelected": "Server not selected",
|
||||
"serverNotSelected": "Serverul nu este selectat",
|
||||
"@serverNotSelected": {},
|
||||
"shipment": "Shipment",
|
||||
"shipment": "Expediere",
|
||||
"@shipment": {},
|
||||
"shipments": "Shipments",
|
||||
"shipments": "Livrări",
|
||||
"@shipments": {},
|
||||
"shipmentsPending": "Pending Shipments",
|
||||
"shipmentsPending": "Livrări în așteptare",
|
||||
"@shipmentsPending": {},
|
||||
"shipmentAdd": "Add Shipment",
|
||||
"shipmentAdd": "Adaugă livrare",
|
||||
"@shipmentAdd": {},
|
||||
"shipmentCheck": "Check Shipment",
|
||||
"shipmentCheck": "Verifica livrare",
|
||||
"@shipmentCheck": {},
|
||||
"shipmentCheckDetail": "Mark this shipment as checked",
|
||||
"shipmentCheckDetail": "Marchează livrarea ca verificată",
|
||||
"@shipmentCheckDetail": {},
|
||||
"shipmentChecked": "Shipment Checked",
|
||||
"shipmentChecked": "Livrare verificată",
|
||||
"@shipmentChecked": {},
|
||||
"shipmentDate": "Shipment Date",
|
||||
"shipmentDate": "Data livrării",
|
||||
"@shipmentDate": {},
|
||||
"shipmentEdit": "Edit Shipment",
|
||||
"shipmentEdit": "Editare livrare",
|
||||
"@shipmentEdit": {},
|
||||
"shipmentReference": "Shipment Reference",
|
||||
"shipmentReference": "Referință livrare",
|
||||
"@shipmentReference": {},
|
||||
"shipmentSend": "Send Shipment",
|
||||
"shipmentSend": "Livrare Trimisa",
|
||||
"@shipmentSend": {},
|
||||
"shipmentUncheck": "Uncheck Shipment",
|
||||
"shipmentUncheck": "Debifează livrare",
|
||||
"@shipmentUncheck": {},
|
||||
"shipmentUncheckDetail": "Mark this shipment as unchecked",
|
||||
"shipmentUncheckDetail": "Marchează livrarea ca nebifat",
|
||||
"@shipmentUncheckDetail": {},
|
||||
"shipmentUpdated": "Shipment Updated",
|
||||
"shipmentUpdated": "Livrare actualizată",
|
||||
"@shipmentUpdated": {},
|
||||
"shipped": "Shipped",
|
||||
"shipped": "Livrat",
|
||||
"@shipped": {},
|
||||
"sku": "SKU",
|
||||
"@sku": {},
|
||||
"sounds": "Sounds",
|
||||
"sounds": "Sunete",
|
||||
"@sounds": {},
|
||||
"soundOnBarcodeAction": "Play audible tone on barcode action",
|
||||
"soundOnBarcodeAction": "Redă ton sonor la acțiunea codului de bare",
|
||||
"@soundOnBarcodeAction": {},
|
||||
"soundOnServerError": "Play audible tone on server error",
|
||||
"soundOnServerError": "Redă sunetul sonor la eroarea serverului",
|
||||
"@soundOnServerError": {},
|
||||
"startDate": "Start Date",
|
||||
"startDate": "Data inceput",
|
||||
"@startDate": {},
|
||||
"status": "Status",
|
||||
"@status": {},
|
||||
"statusCode": "Status Code",
|
||||
"@statusCode": {},
|
||||
"stock": "Stock",
|
||||
"stock": "Stoc",
|
||||
"@stock": {
|
||||
"description": "stock"
|
||||
},
|
||||
"stockDetails": "Current available stock quantity",
|
||||
"stockDetails": "Stoc disponibil curent",
|
||||
"@stockDetails": {},
|
||||
"stockItem": "Stock Item",
|
||||
"stockItem": "Articol Stoc",
|
||||
"@stockItem": {
|
||||
"description": "stock item title"
|
||||
},
|
||||
"stockItems": "Stock Items",
|
||||
"stockItems": "Articol Stoc",
|
||||
"@stockItems": {},
|
||||
"stockItemCreate": "New Stock Item",
|
||||
"stockItemCreate": "Element nou în stoc",
|
||||
"@stockItemCreate": {},
|
||||
"stockItemCreateDetail": "Create new stock item in this location",
|
||||
"stockItemCreateDetail": "Crează element nou în stoc în această locație",
|
||||
"@stockItemCreateDetail": {},
|
||||
"stockItemDelete": "Delete Stock Item",
|
||||
"stockItemDelete": "Şterge elementul din stoc",
|
||||
"@stockItemDelete": {},
|
||||
"stockItemDeleteConfirm": "Are you sure you want to delete this stock item?",
|
||||
"stockItemDeleteConfirm": "Sunteţi sigur că doriţi să ştergeţi acest articol din stoc?",
|
||||
"@stockItemDeleteConfirm": {},
|
||||
"stockItemDeleteFailure": "Could not delete stock item",
|
||||
"stockItemDeleteFailure": "Nu s-a putut șterge articolul din stoc",
|
||||
"@stockItemDeleteFailure": {},
|
||||
"stockItemDeleteSuccess": "Stock item deleted",
|
||||
"stockItemDeleteSuccess": "Articol șters",
|
||||
"@stockItemDeleteSuccess": {},
|
||||
"stockItemHistory": "Stock History",
|
||||
"stockItemHistory": "Istoric Stoc",
|
||||
"@stockItemHistory": {},
|
||||
"stockItemHistoryDetail": "Display historical stock tracking information",
|
||||
"stockItemHistoryDetail": "Afişează informaţii istorice de urmărire stoc",
|
||||
"@stockItemHistoryDetail": {},
|
||||
"stockItemTransferred": "Stock item transferred",
|
||||
"stockItemTransferred": "Articol stoc transferat",
|
||||
"@stockItemTransferred": {},
|
||||
"stockItemUpdated": "Stock item updated",
|
||||
"stockItemUpdated": "Articol stoc actualizat",
|
||||
"@stockItemUpdated": {},
|
||||
"stockItemsNotAvailable": "No stock items available",
|
||||
"stockItemsNotAvailable": "Nu sunt articole disponibile în stoc",
|
||||
"@stockItemsNotAvailable": {},
|
||||
"stockItemNotes": "Stock Item Notes",
|
||||
"stockItemNotes": "Note element de stoc",
|
||||
"@stockItemNotes": {},
|
||||
"stockItemUpdateSuccess": "Stock item updated",
|
||||
"stockItemUpdateSuccess": "Articol stoc actualizat",
|
||||
"@stockItemUpdateSuccess": {},
|
||||
"stockItemUpdateFailure": "Stock item update failed",
|
||||
"stockItemUpdateFailure": "Actualizarea articolului stoc a eșuat",
|
||||
"@stockItemUpdateFailure": {},
|
||||
"stockLocation": "Stock Location",
|
||||
"stockLocation": "Locația stocului",
|
||||
"@stockLocation": {
|
||||
"description": "stock location"
|
||||
},
|
||||
"stockLocations": "Stock Locations",
|
||||
"stockLocations": "Locația stocului",
|
||||
"@stockLocations": {},
|
||||
"stockTopLevel": "Top level stock location",
|
||||
"stockTopLevel": "Locație stoc nivel superior",
|
||||
"@stockTopLevel": {},
|
||||
"strictHttps": "Use Strict HTTPS",
|
||||
"strictHttps": "Folosește HTTPS Strict",
|
||||
"@strictHttps": {},
|
||||
"strictHttpsDetails": "Enforce strict checking of HTTPs certificates",
|
||||
"strictHttpsDetails": "Impune controlul strict al certificatelor HTTP",
|
||||
"@strictHttpsDetails": {},
|
||||
"subcategory": "Subcategory",
|
||||
"subcategory": "Subcategorie",
|
||||
"@subcategory": {},
|
||||
"subcategories": "Subcategories",
|
||||
"subcategories": "Subcategorii",
|
||||
"@subcategories": {},
|
||||
"sublocation": "Sublocation",
|
||||
"sublocation": "Sublocare",
|
||||
"@sublocation": {},
|
||||
"sublocations": "Sublocations",
|
||||
"sublocations": "Sublocare",
|
||||
"@sublocations": {},
|
||||
"sublocationNone": "No Sublocations",
|
||||
"sublocationNone": "Fără sublocări",
|
||||
"@sublocationNone": {},
|
||||
"sublocationNoneDetail": "No sublocations available",
|
||||
"sublocationNoneDetail": "Nu există sublocații disponibile",
|
||||
"@sublocationNoneDetail": {},
|
||||
"submitFeedback": "Submit Feedback",
|
||||
"submitFeedback": "Trimiteți feedback",
|
||||
"@submitFeedback": {},
|
||||
"suppliedParts": "Supplied Parts",
|
||||
"suppliedParts": "Piese furnizate",
|
||||
"@suppliedParts": {},
|
||||
"supplier": "Supplier",
|
||||
"supplier": "Furnizor",
|
||||
"@supplier": {},
|
||||
"supplierPart": "Supplier Part",
|
||||
"supplierPart": "Piesă Furnizor",
|
||||
"@supplierPart": {},
|
||||
"supplierPartEdit": "Edit Supplier Part",
|
||||
"supplierPartEdit": "Editați articol furnizorului",
|
||||
"@supplierPartEdit": {},
|
||||
"supplierPartNumber": "Supplier Part Number",
|
||||
"supplierPartNumber": "Cod furnizor",
|
||||
"@supplierPartNumber": {},
|
||||
"supplierPartUpdated": "Supplier Part Updated",
|
||||
"supplierPartUpdated": "Cod furnizor actualizat",
|
||||
"@supplierPartUpdated": {},
|
||||
"supplierParts": "Supplier Parts",
|
||||
"supplierParts": "Piese Furnizor",
|
||||
"@supplierParts": {},
|
||||
"suppliers": "Suppliers",
|
||||
"suppliers": "Furnizori",
|
||||
"@suppliers": {},
|
||||
"supplierReference": "Supplier Reference",
|
||||
"supplierReference": "Cod furnizor",
|
||||
"@supplierReference": {},
|
||||
"switchCamera": "Switch Camera",
|
||||
"switchCamera": "Comutați Camera",
|
||||
"@switchCamera": {},
|
||||
"takePicture": "Take Picture",
|
||||
"takePicture": "Faceți o fotografie",
|
||||
"@takePicture": {},
|
||||
"targetDate": "Target Date",
|
||||
"targetDate": "Data țintă",
|
||||
"@targetDate": {},
|
||||
"templatePart": "Parent Template Part",
|
||||
"templatePart": "Capitol șablon părinte",
|
||||
"@templatePart": {},
|
||||
"testName": "Test Name",
|
||||
"testName": "Nume test",
|
||||
"@testName": {},
|
||||
"testPassedOrFailed": "Test passed or failed",
|
||||
"testPassedOrFailed": "Testul a trecut sau a eșuat",
|
||||
"@testPassedOrFailed": {},
|
||||
"testsRequired": "Required Tests",
|
||||
"testsRequired": "Teste necesare",
|
||||
"@testsRequired": {},
|
||||
"testResults": "Test Results",
|
||||
"testResults": "Rezultatele testului",
|
||||
"@testResults": {
|
||||
"description": ""
|
||||
},
|
||||
"testResultsDetail": "Display stock item test results",
|
||||
"testResultsDetail": "Afișează rezultatele testului produsului în stoc",
|
||||
"@testResultsDetail": {},
|
||||
"testResultAdd": "Add Test Result",
|
||||
"testResultAdd": "Adăugare rezultat test",
|
||||
"@testResultAdd": {},
|
||||
"testResultNone": "No Test Results",
|
||||
"testResultNone": "Niciun rezultat de test",
|
||||
"@testResultNone": {},
|
||||
"testResultNoneDetail": "No test results available",
|
||||
"testResultNoneDetail": "Nici un rezultat de test disponibil",
|
||||
"@testResultNoneDetail": {},
|
||||
"testResultUploadFail": "Error uploading test result",
|
||||
"testResultUploadFail": "Eroare încărcare rezultat test",
|
||||
"@testResultUploadFail": {},
|
||||
"testResultUploadPass": "Test result uploaded",
|
||||
"testResultUploadPass": "Rezultat test încărcat",
|
||||
"@testResultUploadPass": {},
|
||||
"timeout": "Timeout",
|
||||
"@timeout": {
|
||||
"description": ""
|
||||
},
|
||||
"toggleTorch": "Toggle Torch",
|
||||
"toggleTorch": "Comutare lanternă",
|
||||
"@toggleTorch": {},
|
||||
"tokenError": "Token Error",
|
||||
"tokenError": "Eroare token",
|
||||
"@tokenError": {},
|
||||
"tokenMissing": "Missing Token",
|
||||
"tokenMissing": "Token lipsă",
|
||||
"@tokenMissing": {},
|
||||
"tokenMissingFromResponse": "Access token missing from response",
|
||||
"tokenMissingFromResponse": "Token-ul de acces lipsește din răspuns",
|
||||
"@tokenMissingFromResponse": {},
|
||||
"totalPrice": "Total Price",
|
||||
"totalPrice": "Preț total",
|
||||
"@totalPrice": {},
|
||||
"trackingNumber": "Tracking Number",
|
||||
"trackingNumber": "Număr de urmărire",
|
||||
"@trackingNumber": {},
|
||||
"transfer": "Transfer",
|
||||
"@transfer": {
|
||||
"description": "transfer"
|
||||
},
|
||||
"transferStock": "Transfer Stock",
|
||||
"transferStock": "Transfera stoc",
|
||||
"@transferStock": {
|
||||
"description": "transfer stock"
|
||||
},
|
||||
"transferStockDetail": "Transfer item to a different location",
|
||||
"transferStockDetail": "Transferați articolul într-o locație diferită",
|
||||
"@transferStockDetail": {},
|
||||
"transferStockLocation": "Transfer Stock Location",
|
||||
"transferStockLocation": "Transfer locație stoc",
|
||||
"@transferStockLocation": {},
|
||||
"transferStockLocationDetail": "Transfer this stock location into another",
|
||||
"transferStockLocationDetail": "Transferați această locație a stocului în alta",
|
||||
"@transferStockLocationDetail": {},
|
||||
"translate": "Translate",
|
||||
"translate": "Traduceți",
|
||||
"@translate": {},
|
||||
"translateHelp": "Help translate the InvenTree app",
|
||||
"translateHelp": "Ajută la traducerea aplicației InvenTree",
|
||||
"@translateHelp": {},
|
||||
"unavailable": "Unavailable",
|
||||
"unavailable": "Indisponibil",
|
||||
"@unavailable": {},
|
||||
"unavailableDetail": "Item is not available",
|
||||
"unavailableDetail": "Articolul nu este disponibil",
|
||||
"@unavailableDetail": {},
|
||||
"unitPrice": "Unit Price",
|
||||
"unitPrice": "Preţ Unitar",
|
||||
"@unitPrice": {},
|
||||
"units": "Units",
|
||||
"units": "Unități",
|
||||
"@units": {},
|
||||
"unknownResponse": "Unknown Response",
|
||||
"unknownResponse": "Răspuns necunoscut",
|
||||
"@unknownResponse": {},
|
||||
"upload": "Upload",
|
||||
"upload": "Încărcaţi",
|
||||
"@upload": {},
|
||||
"uploadFailed": "File upload failed",
|
||||
"uploadFailed": "Încărcare fișier eșuată",
|
||||
"@uploadFailed": {},
|
||||
"uploadSuccess": "File uploaded",
|
||||
"uploadSuccess": "Fişier încărcat",
|
||||
"@uploadSuccess": {},
|
||||
"uploadImage": "Upload Image",
|
||||
"uploadImage": "Încărcare imagine",
|
||||
"@uploadImage": {},
|
||||
"usedIn": "Used In",
|
||||
"usedIn": "Folosite în",
|
||||
"@usedIn": {},
|
||||
"usedInDetails": "Assemblies which require this part",
|
||||
"usedInDetails": "Ansambluri care necesită aceast articol",
|
||||
"@usedInDetails": {},
|
||||
"username": "Nume utilizator",
|
||||
"@username": {},
|
||||
"usernameEmpty": "Numele de utilizator nu poate fi gol",
|
||||
"@usernameEmpty": {},
|
||||
"value": "Value",
|
||||
"value": "Valoare",
|
||||
"@value": {
|
||||
"description": "value"
|
||||
},
|
||||
"valueCannotBeEmpty": "Value cannot be empty",
|
||||
"valueCannotBeEmpty": "Valoarea nu poate fi goală",
|
||||
"@valueCannotBeEmpty": {},
|
||||
"valueRequired": "Value is required",
|
||||
"valueRequired": "Valoarea este obligatorie",
|
||||
"@valueRequired": {},
|
||||
"variants": "Variants",
|
||||
"variants": "Variante",
|
||||
"@variants": {},
|
||||
"version": "Version",
|
||||
"version": "Verisune",
|
||||
"@version": {},
|
||||
"viewSupplierPart": "View Supplier Part",
|
||||
"viewSupplierPart": "Vezi capitol furnizor",
|
||||
"@viewSupplierPart": {},
|
||||
"website": "Website",
|
||||
"@website": {},
|
||||
"yes": "Yes",
|
||||
"yes": "Da",
|
||||
"@yes": {},
|
||||
"price": "Price",
|
||||
"price": "Preț",
|
||||
"@price": {},
|
||||
"priceRange": "Price Range",
|
||||
"priceRange": "Interval de preț",
|
||||
"@priceRange": {},
|
||||
"priceOverrideMin": "Minimum Price Override",
|
||||
"priceOverrideMin": "Suprascriere Preț Minim",
|
||||
"@priceOverrideMin": {},
|
||||
"priceOverrideMax": "Maximum Price Override",
|
||||
"priceOverrideMax": "Suprascriere de preț maximă",
|
||||
"@priceOverrideMax": {},
|
||||
"salePrice": "Sale Price",
|
||||
"salePrice": "Preț de vânzare",
|
||||
"@salePrice": {},
|
||||
"saleHistory": "Sale History",
|
||||
"saleHistory": "Istoric vanzari",
|
||||
"@saleHistory": {},
|
||||
"supplierPricing": "Supplier Pricing",
|
||||
"supplierPricing": "Prețurile furnizorului",
|
||||
"@supplierPricing": {},
|
||||
"bomCost": "BOM Cost",
|
||||
"bomCost": "Cost BOM",
|
||||
"@bomCost": {},
|
||||
"internalCost": "Internal Cost",
|
||||
"internalCost": "Cost intern",
|
||||
"@internalCost": {},
|
||||
"variantCost": "Variant Cost",
|
||||
"variantCost": "Cost variantă",
|
||||
"@variantCost": {},
|
||||
"overallPricing": "Overall Pricing",
|
||||
"overallPricing": "Preț general",
|
||||
"@overallPricing": {},
|
||||
"pricingOverrides": "Pricing Overrides",
|
||||
"pricingOverrides": "Suprascrieri preturi",
|
||||
"@pricingOverrides": {},
|
||||
"currency": "Currency",
|
||||
"currency": "Monedă",
|
||||
"@currency": {},
|
||||
"priceBreaks": "Price Breaks",
|
||||
"priceBreaks": "Reduceri de preț",
|
||||
"@priceBreaks": {}
|
||||
}
|
||||
|
|
@ -46,7 +46,7 @@
|
|||
"@aspectRatioSquare": {},
|
||||
"allocateStock": "Выделить запас",
|
||||
"@allocateStock": {},
|
||||
"allocatedStock": "Allocated Stock",
|
||||
"allocatedStock": "Зарезервированные остатки",
|
||||
"@allocatedStock": {},
|
||||
"appReleaseNotes": "Показать заметки о выпуске приложения",
|
||||
"@appReleaseNotes": {},
|
||||
|
|
@ -102,7 +102,7 @@
|
|||
"@barcodeReceivePart": {},
|
||||
"barcodeScanPaused": "Сканирование штрих-кода приостановлено",
|
||||
"@barodeScanPaused": {},
|
||||
"barcodeScanPause": "Tap to pause scanning",
|
||||
"barcodeScanPause": "Нажмите, чтобы приостановить сканирование",
|
||||
"@barcodeScanPause": {},
|
||||
"barcodeScanAssign": "Сканировать для присвоения штрих-кода",
|
||||
"@barcodeScanAssign": {},
|
||||
|
|
@ -240,7 +240,7 @@
|
|||
"@deletePartDetail": {},
|
||||
"deleteSuccess": "Удаление успешно завершено",
|
||||
"@deleteSuccess": {},
|
||||
"deliveryDate": "Delivery Date",
|
||||
"deliveryDate": "Дата доставки",
|
||||
"@deliveryDate": {},
|
||||
"description": "Описание",
|
||||
"@description": {},
|
||||
|
|
@ -384,9 +384,9 @@
|
|||
"@homeShowPo": {},
|
||||
"homeShowPoDescription": "Показывать кнопку заказа на главном экране",
|
||||
"@homeShowPoDescription": {},
|
||||
"homeShowShipments": "Show Shipments",
|
||||
"homeShowShipments": "Показать отгрузки",
|
||||
"@homeShowShipments": {},
|
||||
"homeShowShipmentsDescription": "Show pending shipments on the home screen",
|
||||
"homeShowShipmentsDescription": "Показывать ожидающие отгрузки на главном экране",
|
||||
"@homeShowShipmentsDescription": {},
|
||||
"homeShowSo": "Показать заказы на продажу",
|
||||
"@homeShowSo": {},
|
||||
|
|
@ -454,9 +454,9 @@
|
|||
"@invalidSupplierPart": {},
|
||||
"invalidUsernamePassword": "Неверная комбинация имени пользователя и пароля",
|
||||
"@invalidUsernamePassword": {},
|
||||
"invoice": "Invoice",
|
||||
"invoice": "Счет",
|
||||
"@invoice": {},
|
||||
"invoiceNumber": "Invoice Number",
|
||||
"invoiceNumber": "Номер счета",
|
||||
"@invoiceNumber": {},
|
||||
"issue": "Оформить",
|
||||
"@issue": {},
|
||||
|
|
@ -472,9 +472,9 @@
|
|||
"@itemUpdated": {},
|
||||
"keywords": "Ключевые слова",
|
||||
"@keywords": {},
|
||||
"labelDriver": "Label Driver",
|
||||
"labelDriver": "Драйвер принтера этикеток",
|
||||
"@labelDriver": {},
|
||||
"labelSelectDriver": "Select Label Printer Driver",
|
||||
"labelSelectDriver": "Выберите драйвер принтера этикеток",
|
||||
"@labelSelectDriver": {},
|
||||
"labelPrinting": "Печать этикеток",
|
||||
"@labelPrinting": {},
|
||||
|
|
@ -514,7 +514,7 @@
|
|||
"@locationCreate": {},
|
||||
"locationCreateDetail": "Создать новое расположение склада",
|
||||
"@locationCreateDetail": {},
|
||||
"locationDefault": "Default Location",
|
||||
"locationDefault": "Расположение по умолчанию",
|
||||
"@locationDefault": {},
|
||||
"locationNotSet": "Не указано месторасположение",
|
||||
"@locationNotSet": {},
|
||||
|
|
@ -544,9 +544,9 @@
|
|||
"@missingData": {},
|
||||
"name": "Название",
|
||||
"@name": {},
|
||||
"no": "No",
|
||||
"no": "Нет",
|
||||
"@no": {},
|
||||
"notApplicable": "N/A",
|
||||
"notApplicable": "Н/Д",
|
||||
"@notApplicable": {},
|
||||
"notConnected": "Соединение не установлено",
|
||||
"@notConnected": {},
|
||||
|
|
@ -660,7 +660,7 @@
|
|||
"@password": {},
|
||||
"passwordEmpty": "Пароль не может быть пустым",
|
||||
"@passwordEmpty": {},
|
||||
"pending": "Pending",
|
||||
"pending": "В обработке",
|
||||
"@pending": {},
|
||||
"permissionAccountDenied": "Ваш аккаунт не имеет разрешения на выполнение этого действия",
|
||||
"@permissionAccountDenied": {},
|
||||
|
|
@ -940,33 +940,33 @@
|
|||
"@serverNotConnected": {},
|
||||
"serverNotSelected": "Сервер не выбран",
|
||||
"@serverNotSelected": {},
|
||||
"shipment": "Shipment",
|
||||
"shipment": "Отгрузка",
|
||||
"@shipment": {},
|
||||
"shipments": "Поставки",
|
||||
"@shipments": {},
|
||||
"shipmentsPending": "Pending Shipments",
|
||||
"shipmentsPending": "Ожидающие отгрузки",
|
||||
"@shipmentsPending": {},
|
||||
"shipmentAdd": "Новое Отправление",
|
||||
"@shipmentAdd": {},
|
||||
"shipmentCheck": "Check Shipment",
|
||||
"shipmentCheck": "Проверить отгрузку",
|
||||
"@shipmentCheck": {},
|
||||
"shipmentCheckDetail": "Mark this shipment as checked",
|
||||
"shipmentCheckDetail": "Отметить этот груз как проверенный",
|
||||
"@shipmentCheckDetail": {},
|
||||
"shipmentChecked": "Shipment Checked",
|
||||
"shipmentChecked": "Отгрузка проверена",
|
||||
"@shipmentChecked": {},
|
||||
"shipmentDate": "Shipment Date",
|
||||
"shipmentDate": "Дата отгрузки",
|
||||
"@shipmentDate": {},
|
||||
"shipmentEdit": "Edit Shipment",
|
||||
"shipmentEdit": "Редактировать отгрузку",
|
||||
"@shipmentEdit": {},
|
||||
"shipmentReference": "Shipment Reference",
|
||||
"shipmentReference": "Ссылка на отгрузку",
|
||||
"@shipmentReference": {},
|
||||
"shipmentSend": "Send Shipment",
|
||||
"shipmentSend": "Отправить отгрузку",
|
||||
"@shipmentSend": {},
|
||||
"shipmentUncheck": "Uncheck Shipment",
|
||||
"shipmentUncheck": "Снять отметку с отгрузки",
|
||||
"@shipmentUncheck": {},
|
||||
"shipmentUncheckDetail": "Mark this shipment as unchecked",
|
||||
"shipmentUncheckDetail": "Отметить этот груз как непроверенный",
|
||||
"@shipmentUncheckDetail": {},
|
||||
"shipmentUpdated": "Shipment Updated",
|
||||
"shipmentUpdated": "Отгрузка обновлена",
|
||||
"@shipmentUpdated": {},
|
||||
"shipped": "Отгружено",
|
||||
"@shipped": {},
|
||||
|
|
@ -1112,7 +1112,7 @@
|
|||
"@tokenMissingFromResponse": {},
|
||||
"totalPrice": "Общая стоимость",
|
||||
"@totalPrice": {},
|
||||
"trackingNumber": "Tracking Number",
|
||||
"trackingNumber": "Номер отслеживания",
|
||||
"@trackingNumber": {},
|
||||
"transfer": "Перемещение",
|
||||
"@transfer": {
|
||||
|
|
@ -1174,7 +1174,7 @@
|
|||
"@viewSupplierPart": {},
|
||||
"website": "Сайт",
|
||||
"@website": {},
|
||||
"yes": "Yes",
|
||||
"yes": "Да",
|
||||
"@yes": {},
|
||||
"price": "Цена",
|
||||
"@price": {},
|
||||
|
|
|
|||
|
|
@ -102,7 +102,7 @@
|
|||
"@barcodeReceivePart": {},
|
||||
"barcodeScanPaused": "Streckkodsskanning pausad",
|
||||
"@barodeScanPaused": {},
|
||||
"barcodeScanPause": "Tap to pause scanning",
|
||||
"barcodeScanPause": "Tryck för att pausa skanning",
|
||||
"@barcodeScanPause": {},
|
||||
"barcodeScanAssign": "Skanna för att tilldela streckkod",
|
||||
"@barcodeScanAssign": {},
|
||||
|
|
@ -228,7 +228,7 @@
|
|||
"@delete": {},
|
||||
"deleteFailed": "Borttagning misslyckades",
|
||||
"@deleteFailed": {},
|
||||
"deleteImageConfirmation": "Are you sure you want to delete this image?",
|
||||
"deleteImageConfirmation": "Är du säker på att du vill radera denna bild?",
|
||||
"@deleteImageConfirmation": {},
|
||||
"deleteImageTooltip": "Radera bild",
|
||||
"@deleteImageTooltip": {},
|
||||
|
|
@ -240,7 +240,7 @@
|
|||
"@deletePartDetail": {},
|
||||
"deleteSuccess": "Borttagning lyckad",
|
||||
"@deleteSuccess": {},
|
||||
"deliveryDate": "Delivery Date",
|
||||
"deliveryDate": "Leveransdatum",
|
||||
"@deliveryDate": {},
|
||||
"description": "Beskrivning",
|
||||
"@description": {},
|
||||
|
|
@ -384,9 +384,9 @@
|
|||
"@homeShowPo": {},
|
||||
"homeShowPoDescription": "Visa knappen för inköpsorder på startskärmen",
|
||||
"@homeShowPoDescription": {},
|
||||
"homeShowShipments": "Show Shipments",
|
||||
"homeShowShipments": "Visa leveranser",
|
||||
"@homeShowShipments": {},
|
||||
"homeShowShipmentsDescription": "Show pending shipments on the home screen",
|
||||
"homeShowShipmentsDescription": "Visa väntande leveranser på startskärmen",
|
||||
"@homeShowShipmentsDescription": {},
|
||||
"homeShowSo": "Visa försäljningsorder",
|
||||
"@homeShowSo": {},
|
||||
|
|
@ -514,7 +514,7 @@
|
|||
"@locationCreate": {},
|
||||
"locationCreateDetail": "Skapa ny lagerplats",
|
||||
"@locationCreateDetail": {},
|
||||
"locationDefault": "Default Location",
|
||||
"locationDefault": "Förvald plats",
|
||||
"@locationDefault": {},
|
||||
"locationNotSet": "Ingen plats specificerad",
|
||||
"@locationNotSet": {},
|
||||
|
|
@ -564,9 +564,9 @@
|
|||
"@noResults": {},
|
||||
"noImageAvailable": "Ingen bild tillgänglig",
|
||||
"@noImageAvailable": {},
|
||||
"noPricingAvailable": "No pricing available",
|
||||
"noPricingAvailable": "Ingen prisinformation tillgänglig",
|
||||
"@noPricingAvailable": {},
|
||||
"noPricingDataFound": "No pricing data found for this part",
|
||||
"noPricingDataFound": "Inga prisuppgifter hittades för denna artikel",
|
||||
"@noPricingDataFound": {},
|
||||
"noSubcategories": "Inga underkategorier",
|
||||
"@noSubcategories": {},
|
||||
|
|
@ -630,7 +630,7 @@
|
|||
"@partsNone": {},
|
||||
"partNoResults": "Inga artiklar som matchar sökfrågan",
|
||||
"@partNoResults": {},
|
||||
"partPricing": "Part Pricing",
|
||||
"partPricing": "Artikelpris",
|
||||
"@partPricing": {},
|
||||
"partPricingSettingDetail": "Display part pricing information",
|
||||
"@pricingSettingDetail": {},
|
||||
|
|
@ -762,7 +762,7 @@
|
|||
"@reference": {},
|
||||
"refresh": "Uppdatera",
|
||||
"@refresh": {},
|
||||
"rotateClockwise": "Rotate 90° clockwise",
|
||||
"rotateClockwise": "Rotera 90° medurs",
|
||||
"@rotateClockwise": {},
|
||||
"refreshing": "Uppdaterar",
|
||||
"@refreshing": {},
|
||||
|
|
@ -940,7 +940,7 @@
|
|||
"@serverNotConnected": {},
|
||||
"serverNotSelected": "Servern är inte vald",
|
||||
"@serverNotSelected": {},
|
||||
"shipment": "Shipment",
|
||||
"shipment": "Försändelse",
|
||||
"@shipment": {},
|
||||
"shipments": "Frakt",
|
||||
"@shipments": {},
|
||||
|
|
@ -954,7 +954,7 @@
|
|||
"@shipmentCheckDetail": {},
|
||||
"shipmentChecked": "Shipment Checked",
|
||||
"@shipmentChecked": {},
|
||||
"shipmentDate": "Shipment Date",
|
||||
"shipmentDate": "Leveransdatum",
|
||||
"@shipmentDate": {},
|
||||
"shipmentEdit": "Edit Shipment",
|
||||
"@shipmentEdit": {},
|
||||
|
|
@ -1112,7 +1112,7 @@
|
|||
"@tokenMissingFromResponse": {},
|
||||
"totalPrice": "Totalpris",
|
||||
"@totalPrice": {},
|
||||
"trackingNumber": "Tracking Number",
|
||||
"trackingNumber": "Sändningsnummer",
|
||||
"@trackingNumber": {},
|
||||
"transfer": "Överföring",
|
||||
"@transfer": {
|
||||
|
|
@ -1184,11 +1184,11 @@
|
|||
"@priceOverrideMin": {},
|
||||
"priceOverrideMax": "Maximum Price Override",
|
||||
"@priceOverrideMax": {},
|
||||
"salePrice": "Sale Price",
|
||||
"salePrice": "Försäljningspris",
|
||||
"@salePrice": {},
|
||||
"saleHistory": "Sale History",
|
||||
"@saleHistory": {},
|
||||
"supplierPricing": "Supplier Pricing",
|
||||
"supplierPricing": "Leverantörspriser",
|
||||
"@supplierPricing": {},
|
||||
"bomCost": "BOM Cost",
|
||||
"@bomCost": {},
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
},
|
||||
"about": "Hakkında",
|
||||
"@about": {},
|
||||
"accountDetails": "Hesap Detayları",
|
||||
"accountDetails": "Hesap Ayrıntıları",
|
||||
"@accountDetails": {},
|
||||
"actions": "Eylemler",
|
||||
"@actions": {
|
||||
|
|
@ -34,7 +34,7 @@
|
|||
"@appCredits": {},
|
||||
"appDetails": "Uygulama Ayrıntıları",
|
||||
"@appDetails": {},
|
||||
"allocated": "Tahsis edildi",
|
||||
"allocated": "Tahsis Edildi",
|
||||
"@allocated": {},
|
||||
"aspectRatio16x9": "16:9",
|
||||
"@aspectRatio16x9": {},
|
||||
|
|
@ -44,11 +44,11 @@
|
|||
"@aspectRatio4x3": {},
|
||||
"aspectRatioSquare": "Kare (1:1)",
|
||||
"@aspectRatioSquare": {},
|
||||
"allocateStock": "Tahsisli stok",
|
||||
"allocateStock": "Stoku Tahsis Et",
|
||||
"@allocateStock": {},
|
||||
"allocatedStock": "Tahsis Edilen Stok",
|
||||
"@allocatedStock": {},
|
||||
"appReleaseNotes": "Uygulama yayınlama notlarını göster",
|
||||
"appReleaseNotes": "Uygulama yayınlama notlarını görüntüle",
|
||||
"@appReleaseNotes": {},
|
||||
"appSettings": "Uygulama Ayarları",
|
||||
"@appSettings": {},
|
||||
|
|
@ -60,7 +60,7 @@
|
|||
"@assignedToMeDetail": {},
|
||||
"attachments": "Ekler",
|
||||
"@attachments": {},
|
||||
"attachImage": "Resim ekle",
|
||||
"attachImage": "Görsel Ekle",
|
||||
"@attachImage": {
|
||||
"description": "Attach an image"
|
||||
},
|
||||
|
|
@ -98,11 +98,11 @@
|
|||
"@barcodeNotAssigned": {},
|
||||
"barcodeScanPart": "Parça barkodnu tara",
|
||||
"@barcodeScanPart": {},
|
||||
"barcodeReceivePart": "Tesellüm barkodunu tara",
|
||||
"barcodeReceivePart": "Parçayı teslim almak için barkodu tarayın",
|
||||
"@barcodeReceivePart": {},
|
||||
"barcodeScanPaused": "Barkod tarama duraklatıldı",
|
||||
"@barodeScanPaused": {},
|
||||
"barcodeScanPause": "Tap to pause scanning",
|
||||
"barcodeScanPause": "Taramayı duraklatmak için dokunun",
|
||||
"@barcodeScanPause": {},
|
||||
"barcodeScanAssign": "Atanmış barkodu tara",
|
||||
"@barcodeScanAssign": {},
|
||||
|
|
@ -116,7 +116,7 @@
|
|||
"@barcodeScanDelayDetail": {},
|
||||
"barcodeScanGeneral": "Bir InvenTree barkodu tara",
|
||||
"@barcodeScanGeneral": {},
|
||||
"barcodeScanInItems": "Stok ögelerini bu konum içine tara",
|
||||
"barcodeScanInItems": "Stok kalemlerini bu konumun içine tara",
|
||||
"@barcodeScanInItems": {},
|
||||
"barcodeScanLocation": "Stok konumu tara",
|
||||
"@barcodeScanLocation": {},
|
||||
|
|
@ -128,7 +128,7 @@
|
|||
"@barcodeScanIntoLocationSuccess": {},
|
||||
"barcodeScanIntoLocationFailure": "Madde taranmış değil",
|
||||
"@barcodeScanIntoLocationFailure": {},
|
||||
"barcodeScanItem": "Stok öğesi tara",
|
||||
"barcodeScanItem": "Stok kalemi tara",
|
||||
"@barcodeScanItem": {},
|
||||
"barcodeTones": "Barkod Tonları",
|
||||
"@barcodeTones": {},
|
||||
|
|
@ -138,15 +138,15 @@
|
|||
"@barcodeUnknown": {},
|
||||
"batchCode": "Grup kodu",
|
||||
"@batchCode": {},
|
||||
"billOfMaterials": "Fatura materyalleri",
|
||||
"billOfMaterials": "Ürün Ağacı",
|
||||
"@billOfMaterials": {},
|
||||
"bom": "BOM",
|
||||
"@bom": {},
|
||||
"bomEnable": "Malzeme Listesini Görüntüle",
|
||||
"bomEnable": "Ürün Ağacını Görüntüle",
|
||||
"@bomEnable": {},
|
||||
"build": "Oluştur",
|
||||
"build": "Üret",
|
||||
"@build": {},
|
||||
"building": "Oluşturma",
|
||||
"building": "Üretiliyor",
|
||||
"@building": {},
|
||||
"cameraCreationError": "Kamera Kontrolcüsü Açılamadı",
|
||||
"@cameraCreationError": {},
|
||||
|
|
@ -176,7 +176,7 @@
|
|||
"@companyEdit": {},
|
||||
"companyNoResults": "Sorguyla eşleşen şirket yok",
|
||||
"@companyNoResults": {},
|
||||
"companyUpdated": "Firma bilgileri güncellendi",
|
||||
"companyUpdated": "Şirket bilgileri güncellendi",
|
||||
"@companyUpdated": {},
|
||||
"companies": "Şirketler",
|
||||
"@companies": {},
|
||||
|
|
@ -206,7 +206,7 @@
|
|||
"@credits": {},
|
||||
"crop": "Kırp",
|
||||
"@crop": {},
|
||||
"cropImage": "Resmi Kırp",
|
||||
"cropImage": "Görseli Kırp",
|
||||
"@cropImage": {},
|
||||
"customer": "Müşteri",
|
||||
"@customer": {},
|
||||
|
|
@ -228,11 +228,11 @@
|
|||
"@delete": {},
|
||||
"deleteFailed": "Silme işlemi başarısız",
|
||||
"@deleteFailed": {},
|
||||
"deleteImageConfirmation": "Bu resmi silmek istediğinizden emin misiniz?",
|
||||
"deleteImageConfirmation": "Bu görseli silmek istediğinize emin misiniz?",
|
||||
"@deleteImageConfirmation": {},
|
||||
"deleteImageTooltip": "Görüntüyü Sil",
|
||||
"deleteImageTooltip": "Görseli Sil",
|
||||
"@deleteImageTooltip": {},
|
||||
"deleteImage": "Resmi sil",
|
||||
"deleteImage": "Görseli sil",
|
||||
"@deleteImage": {},
|
||||
"deletePart": "Parça Sil",
|
||||
"@deletePart": {},
|
||||
|
|
@ -244,11 +244,11 @@
|
|||
"@deliveryDate": {},
|
||||
"description": "Açıklama",
|
||||
"@description": {},
|
||||
"destination": "Varış Yeri",
|
||||
"destination": "Hedef",
|
||||
"@destination": {},
|
||||
"destroyed": "Yok edildi",
|
||||
"@destroyed": {},
|
||||
"details": "Detaylar",
|
||||
"details": "Ayrıntılar",
|
||||
"@details": {
|
||||
"description": "details"
|
||||
},
|
||||
|
|
@ -278,9 +278,9 @@
|
|||
"@editPart": {
|
||||
"description": "edit part"
|
||||
},
|
||||
"editItem": "Parçayı Düzenle",
|
||||
"editItem": "Stok kalemi düzenle",
|
||||
"@editItem": {},
|
||||
"editLineItem": "Satır Ögesini Düzenle",
|
||||
"editLineItem": "Satırı Düzenle",
|
||||
"@editLineItem": {},
|
||||
"email": "E-posta",
|
||||
"@email": {},
|
||||
|
|
@ -316,9 +316,9 @@
|
|||
"@expiryExpired": {},
|
||||
"expiryStale": "Eskimiş",
|
||||
"@expiryStale": {},
|
||||
"extraLineItem": "Fazladan Satır Ögesi",
|
||||
"extraLineItem": "Ek Kalem",
|
||||
"@extraLineItem": {},
|
||||
"extraLineItems": "Fazladan Satır Ögeleri",
|
||||
"extraLineItems": "Ek Kalemler",
|
||||
"@extraLineItems": {},
|
||||
"feedback": "Geri Bildirim",
|
||||
"@feedback": {},
|
||||
|
|
@ -348,7 +348,7 @@
|
|||
"@filterInStockDetail": {},
|
||||
"filterSerialized": "Sıralandırılmış",
|
||||
"@filterSerialized": {},
|
||||
"filterSerializedDetail": "Sıralandırılmış stok ürünkerini göster",
|
||||
"filterSerializedDetail": "Seri numaralı stok kalemlerini göster",
|
||||
"@filterSerializedDetail": {},
|
||||
"filterTemplate": "Şablon",
|
||||
"@filterTemplate": {},
|
||||
|
|
@ -392,9 +392,9 @@
|
|||
"@homeShowSo": {},
|
||||
"homeShowSoDescription": "Satış siparişleri tuşunu giriş ekranında göster",
|
||||
"@homeShowSoDescription": {},
|
||||
"homeShowSubscribed": "Parça bildirimlerine abone ol",
|
||||
"homeShowSubscribed": "Takip Edilen Parçalar",
|
||||
"@homeShowSubscribed": {},
|
||||
"homeShowSubscribedDescription": "Abone olunan bölümleri ana ekranda göster",
|
||||
"homeShowSubscribedDescription": "Takip edilen parçaları ana ekranda göster",
|
||||
"@homeShowSubscsribedDescription": {},
|
||||
"homeShowSuppliers": "Tedarikçileri Göster",
|
||||
"@homeShowSuppliers": {},
|
||||
|
|
@ -408,13 +408,13 @@
|
|||
"@homeShowCustomers": {},
|
||||
"homeShowCustomersDescription": "Müşteri butonunu ana ekranda göster",
|
||||
"@homeShowCustomersDescription": {},
|
||||
"imageUploadFailure": "Fotoğraf yükleme başarısız",
|
||||
"imageUploadFailure": "Görsel yükleme başarısız",
|
||||
"@imageUploadFailure": {},
|
||||
"imageUploadSuccess": "Resim yüklendi",
|
||||
"imageUploadSuccess": "Görsel yüklendi",
|
||||
"@imageUploadSuccess": {},
|
||||
"inactive": "Pasif",
|
||||
"@inactive": {},
|
||||
"inactiveCompany": "Bu şirket inaktif olarak imlendi",
|
||||
"inactiveCompany": "Bu şirket pasif olarak işaretlendi",
|
||||
"@inactiveCompany": {},
|
||||
"inactiveDetail": "Bu parça pasif olarak işaretlendi",
|
||||
"@inactiveDetail": {},
|
||||
|
|
@ -432,9 +432,9 @@
|
|||
"@internalPartNumber": {},
|
||||
"info": "Bilgi",
|
||||
"@info": {},
|
||||
"inProduction": "Yapım Aşamasında",
|
||||
"inProduction": "Üretimde",
|
||||
"@inProduction": {},
|
||||
"inProductionDetail": "Bu ürün üretim aşamasında",
|
||||
"inProductionDetail": "Bu stok kalemi üretimdedir",
|
||||
"@inProductionDetail": {},
|
||||
"internalPart": "İç Parça",
|
||||
"@internalPart": {},
|
||||
|
|
@ -448,7 +448,7 @@
|
|||
"@invalidPartCategory": {},
|
||||
"invalidStockLocation": "Geçersiz Stok Konumu",
|
||||
"@invalidStockLocation": {},
|
||||
"invalidStockItem": "Geçersiz Stok Parçası",
|
||||
"invalidStockItem": "Geçersiz Stok Kalemi",
|
||||
"@invalidStockItem": {},
|
||||
"invalidSupplierPart": "Geçersiz Tedarikçi Parçası",
|
||||
"@invalidSupplierPart": {},
|
||||
|
|
@ -462,7 +462,7 @@
|
|||
"@issue": {},
|
||||
"issueDate": "Sorun Tarihi",
|
||||
"@issueDate": {},
|
||||
"issueOrder": "Sipariş Ver",
|
||||
"issueOrder": "Sipariş Düzenle",
|
||||
"@issueOrder": {},
|
||||
"itemInLocation": "Parça zaten konumda",
|
||||
"@itemInLocation": {},
|
||||
|
|
@ -472,13 +472,13 @@
|
|||
"@itemUpdated": {},
|
||||
"keywords": "Anahtar kelimeler",
|
||||
"@keywords": {},
|
||||
"labelDriver": "Label Driver",
|
||||
"labelDriver": "Etiket Sürücü",
|
||||
"@labelDriver": {},
|
||||
"labelSelectDriver": "Select Label Printer Driver",
|
||||
"labelSelectDriver": "Etiket Yazıcı Sürücüsü Seçin",
|
||||
"@labelSelectDriver": {},
|
||||
"labelPrinting": "Etiket Yazdırma",
|
||||
"@labelPrinting": {},
|
||||
"labelPrintingDetail": "Etiket yazdırmayı aktifleştir",
|
||||
"labelPrintingDetail": "Etiket yazdırmayı etkinleştir",
|
||||
"@labelPrintingDetail": {},
|
||||
"labelTemplate": "Etiket Şablonu",
|
||||
"@labelTemplate": {},
|
||||
|
|
@ -492,21 +492,21 @@
|
|||
"@languageDefault": {},
|
||||
"languageSelect": "Dil Seçin",
|
||||
"@languageSelect": {},
|
||||
"lastStocktake": "Son stok tutma",
|
||||
"lastStocktake": "Son Stok Sayımı",
|
||||
"@lastStocktake": {},
|
||||
"lastUpdated": "Son güncelleme",
|
||||
"@lastUpdated": {},
|
||||
"level": "Düzey",
|
||||
"level": "Seviye",
|
||||
"@level": {},
|
||||
"lineItemAdd": "Satır Ögesi Ekle",
|
||||
"lineItemAdd": "Satır Ekle",
|
||||
"@lineItemAdd": {},
|
||||
"lineItem": "Parça Sırası",
|
||||
"lineItem": "Satır",
|
||||
"@lineItem": {},
|
||||
"lineItems": "Parçalar Sırası",
|
||||
"lineItems": "Satırlar",
|
||||
"@lineItems": {},
|
||||
"lineItemUpdated": "Satır ögesi güncellendi",
|
||||
"lineItemUpdated": "Satır güncellendi",
|
||||
"@lineItemUpdated": {},
|
||||
"locateItem": "Stok ögesi bul",
|
||||
"locateItem": "Stok kalemi bul",
|
||||
"@locateItem": {},
|
||||
"locateLocation": "Stok konumu bul",
|
||||
"@locateLocation": {},
|
||||
|
|
@ -514,7 +514,7 @@
|
|||
"@locationCreate": {},
|
||||
"locationCreateDetail": "Yeni stok konumu oluştur",
|
||||
"@locationCreateDetail": {},
|
||||
"locationDefault": "Default Location",
|
||||
"locationDefault": "Varsayılan Konum",
|
||||
"@locationDefault": {},
|
||||
"locationNotSet": "Belirtilmiş konum yok",
|
||||
"@locationNotSet": {},
|
||||
|
|
@ -562,7 +562,7 @@
|
|||
"@noResponse": {},
|
||||
"noResults": "Sonuç Yok",
|
||||
"@noResults": {},
|
||||
"noImageAvailable": "Kullanılabilir resim yok",
|
||||
"noImageAvailable": "Görsel yok",
|
||||
"@noImageAvailable": {},
|
||||
"noPricingAvailable": "Fiyatlandırma mevcut değil",
|
||||
"@noPricingAvailable": {},
|
||||
|
|
@ -588,9 +588,9 @@
|
|||
"@orientationPortrait": {},
|
||||
"orientationSystem": "Sistem",
|
||||
"@orientationSystem": {},
|
||||
"outstanding": "Beklemede",
|
||||
"outstanding": "Açık",
|
||||
"@outstanding": {},
|
||||
"outstandingOrderDetail": "Bekleyen siparişleri göster",
|
||||
"outstandingOrderDetail": "Açık siparişleri göster",
|
||||
"@outstandingOrderDetail": {},
|
||||
"overdue": "Gecikmede",
|
||||
"@overdue": {},
|
||||
|
|
@ -602,7 +602,7 @@
|
|||
"@packageName": {},
|
||||
"parameters": "Parametreler",
|
||||
"@parameters": {},
|
||||
"parametersSettingDetail": "Parça parametrelerini göster",
|
||||
"parametersSettingDetail": "Parça parametrelerini görüntüle",
|
||||
"@parametersSettingDetail": {},
|
||||
"parent": "Üst",
|
||||
"@parent": {},
|
||||
|
|
@ -624,7 +624,7 @@
|
|||
"@parts": {
|
||||
"description": "Part (multiple)"
|
||||
},
|
||||
"partNotSalable": "Parça satılabilir olarak imlenmemiş",
|
||||
"partNotSalable": "Parça satılabilir olarak işaretli değil",
|
||||
"@partNotSalable": {},
|
||||
"partsNone": "Parça Yok",
|
||||
"@partsNone": {},
|
||||
|
|
@ -636,7 +636,7 @@
|
|||
"@pricingSettingDetail": {},
|
||||
"partSettings": "Parça Ayarları",
|
||||
"@partSettings": {},
|
||||
"partsStarred": "Sürekli Gelen parçalar",
|
||||
"partsStarred": "Takip Edilen Parçalar",
|
||||
"@partsStarred": {},
|
||||
"partsStarredNone": "Yıldızlı parça yok",
|
||||
"@partsStarredNone": {},
|
||||
|
|
@ -648,7 +648,7 @@
|
|||
"@partCategoryTopLevel": {},
|
||||
"partCategories": "Parça Kategorileri",
|
||||
"@partCategories": {},
|
||||
"partDetails": "Parça detayları",
|
||||
"partDetails": "Parça Ayrıntıları",
|
||||
"@partDetails": {},
|
||||
"partNotes": "Parça notları",
|
||||
"@partNotes": {},
|
||||
|
|
@ -710,15 +710,15 @@
|
|||
"@projectCode": {},
|
||||
"purchaseOrderConfirmScan": "Tarama Verisini Onayla",
|
||||
"@purchaseOrderConfirmScan": {},
|
||||
"purchaseOrderConfirmScanDetail": "Taranan Ürünlerin Detaylarını Onayla",
|
||||
"purchaseOrderConfirmScanDetail": "Kalemleri tararken ayrıntıları onayla",
|
||||
"@purchaseOrderConfirmScanDetail": {},
|
||||
"purchaseOrderEnable": "Satın Alma Emirlerini Etkinleştir",
|
||||
"purchaseOrderEnable": "Satın Alma Siparişlerini Etkinleştir",
|
||||
"@purchaseOrderEnable": {},
|
||||
"purchaseOrderEnableDetail": "Satın Alma Emirlerinin İşlevselliğini Etkinleştir",
|
||||
"@purchaseOrderEnableDetail": {},
|
||||
"purchaseOrderShowCamera": "Kamera Kısayolu",
|
||||
"@purchaseOrderShowCamera": {},
|
||||
"purchaseOrderShowCameraDetail": "Satın alma emirleri ekranında fotoğraf yükleme kısayolunu etkinleştir",
|
||||
"purchaseOrderShowCameraDetail": "Satın alma siparişi ekranında görsel yükleme kısayolunu etkinleştir",
|
||||
"@purchaseOrderShowCameraDetail": {},
|
||||
"purchaseOrder": "Satınalma Siparişi",
|
||||
"@purchaseOrder": {},
|
||||
|
|
@ -728,7 +728,7 @@
|
|||
"@purchaseOrderEdit": {},
|
||||
"purchaseOrderSettings": "Satın Alma Emri Ayarları",
|
||||
"@purchaseOrderSettings": {},
|
||||
"purchaseOrders": "Satınalma Siparişleri",
|
||||
"purchaseOrders": "Satın Alma Siparişleri",
|
||||
"@purchaseOrders": {},
|
||||
"purchaseOrderUpdated": "Satın Alma Siparişi güncellendi",
|
||||
"@purchaseOrderUpdated": {},
|
||||
|
|
@ -750,13 +750,13 @@
|
|||
"@queryEmpty": {},
|
||||
"queryNoResults": "Sorgu için sonuç yok",
|
||||
"@queryNoResults": {},
|
||||
"received": "Alınan",
|
||||
"received": "Teslim Alındı",
|
||||
"@received": {},
|
||||
"receivedFilterDetail": "Alınan ögeleri göster",
|
||||
"receivedFilterDetail": "Teslim alınan kalemleri göster",
|
||||
"@receivedFilterDetail": {},
|
||||
"receiveItem": "Alınan Öğeler",
|
||||
"receiveItem": "Kalemi Teslim Al",
|
||||
"@receiveItem": {},
|
||||
"receivedItem": "Alınan stok parçaları",
|
||||
"receivedItem": "Teslim alınan stok kalemleri",
|
||||
"@receivedItem": {},
|
||||
"reference": "Referans",
|
||||
"@reference": {},
|
||||
|
|
@ -838,13 +838,13 @@
|
|||
"@salesOrder": {},
|
||||
"salesOrders": "Satış Siparişleri",
|
||||
"@salesOrders": {},
|
||||
"salesOrderEnable": "Satış Emirlerini Etkinleştir",
|
||||
"salesOrderEnable": "Satış Siparişlerini Etkinleştir",
|
||||
"@salesOrderEnable": {},
|
||||
"salesOrderEnableDetail": "Satış Siparişlerinin İşlevselliğini Etkinleştir",
|
||||
"@salesOrderEnableDetail": {},
|
||||
"salesOrderShowCamera": "Kamera Kısayolu",
|
||||
"@salesOrderShowCamera": {},
|
||||
"salesOrderShowCameraDetail": "Satış emirleri ekranında fotoğraf yükleme kısayolunu etkinleştir",
|
||||
"salesOrderShowCameraDetail": "Satış siparişi ekranında görsel yükleme kısayolunu etkinleştir",
|
||||
"@salesOrderShowCameraDetail": {},
|
||||
"salesOrderSettings": "Satış emirleri ayarları",
|
||||
"@salesOrderSettings": {},
|
||||
|
|
@ -860,7 +860,7 @@
|
|||
},
|
||||
"scanBarcode": "Barkod Tara",
|
||||
"@scanBarcode": {},
|
||||
"scanSupplierPart": "Sağlayıcı parça barkodunu tara",
|
||||
"scanSupplierPart": "Tedarikçi parça barkodunu tara",
|
||||
"@scanSupplierPart": {},
|
||||
"scanIntoLocation": "Konuma Tara",
|
||||
"@scanIntoLocation": {},
|
||||
|
|
@ -870,7 +870,7 @@
|
|||
"@scannerExternal": {},
|
||||
"scannerExternalDetail": "Barkodları okumak için harici tarayıcı kullan (keyboard wedge modu)",
|
||||
"@scannerExternalDetail": {},
|
||||
"scanReceivedParts": "Alınan Parçaları Tara",
|
||||
"scanReceivedParts": "Teslim Alınan Parçaları Tara",
|
||||
"@scanReceivedParts": {},
|
||||
"search": "Ara",
|
||||
"@search": {
|
||||
|
|
@ -888,7 +888,7 @@
|
|||
"@select": {},
|
||||
"selectFile": "Dosya Seç",
|
||||
"@selectFile": {},
|
||||
"selectImage": "Resim Seç",
|
||||
"selectImage": "Görsel Seç",
|
||||
"@selectImage": {},
|
||||
"selectLocation": "Bir yer seçin",
|
||||
"@selectLocation": {},
|
||||
|
|
@ -922,7 +922,7 @@
|
|||
"@serverEmpty": {},
|
||||
"serverError": "Sunucu Hatası",
|
||||
"@serverError": {},
|
||||
"serverDetails": "Sunucu Detayları",
|
||||
"serverDetails": "Sunucu Ayrıntıları",
|
||||
"@serverDetails": {},
|
||||
"serverMissingData": "Sunucu yanıtında gerekli alanlar eksik",
|
||||
"@serverMissingData": {},
|
||||
|
|
@ -948,11 +948,11 @@
|
|||
"@shipmentsPending": {},
|
||||
"shipmentAdd": "Gönderi Ekle",
|
||||
"@shipmentAdd": {},
|
||||
"shipmentCheck": "Teslimatı Kontrol Et",
|
||||
"shipmentCheck": "Sevkiyatı Kontrol Et",
|
||||
"@shipmentCheck": {},
|
||||
"shipmentCheckDetail": "Bu teslimatı kontrol edildi olarak işaretle",
|
||||
"shipmentCheckDetail": "Bu sevkiyatı kontrol edildi olarak işaretle",
|
||||
"@shipmentCheckDetail": {},
|
||||
"shipmentChecked": "Teslimat Kontrol Edildi",
|
||||
"shipmentChecked": "Sevkiyat Kontrol Edildi",
|
||||
"@shipmentChecked": {},
|
||||
"shipmentDate": "Teslimat Tarihi",
|
||||
"@shipmentDate": {},
|
||||
|
|
@ -962,7 +962,7 @@
|
|||
"@shipmentReference": {},
|
||||
"shipmentSend": "Teslimatı Gönder",
|
||||
"@shipmentSend": {},
|
||||
"shipmentUncheck": "Teslimat İşaretini Kaldır",
|
||||
"shipmentUncheck": "Sevkiyat Kontrolünü Kaldır",
|
||||
"@shipmentUncheck": {},
|
||||
"shipmentUncheckDetail": "Bu teslimatı kontrol edilmedi olarak işaretle",
|
||||
"@shipmentUncheckDetail": {},
|
||||
|
|
@ -998,25 +998,25 @@
|
|||
"@stockItems": {},
|
||||
"stockItemCreate": "Yeni Stok Kalemi",
|
||||
"@stockItemCreate": {},
|
||||
"stockItemCreateDetail": "Bu konuma yeni stok kalemi oluştur",
|
||||
"stockItemCreateDetail": "Bu konumda yeni stok kalemi oluştur",
|
||||
"@stockItemCreateDetail": {},
|
||||
"stockItemDelete": "Stok parçasını sil",
|
||||
"@stockItemDelete": {},
|
||||
"stockItemDeleteConfirm": "Bu stock ögesini silmek istediğinize emin misiniz?",
|
||||
"stockItemDeleteConfirm": "Bu stok kalemini silmek istediğinize emin misiniz?",
|
||||
"@stockItemDeleteConfirm": {},
|
||||
"stockItemDeleteFailure": "Stok parçası silinemedi",
|
||||
"stockItemDeleteFailure": "Stok kalemi silinemedi",
|
||||
"@stockItemDeleteFailure": {},
|
||||
"stockItemDeleteSuccess": "Stok ögesi silindi",
|
||||
"stockItemDeleteSuccess": "Stok kalemi silindi",
|
||||
"@stockItemDeleteSuccess": {},
|
||||
"stockItemHistory": "Stok Geçmişi",
|
||||
"@stockItemHistory": {},
|
||||
"stockItemHistoryDetail": "Geçmiş stok takip bilgisini göster",
|
||||
"stockItemHistoryDetail": "Geçmiş stok takip bilgisini görüntüle",
|
||||
"@stockItemHistoryDetail": {},
|
||||
"stockItemTransferred": "Stok ögesi aktarıldı",
|
||||
"stockItemTransferred": "Stok kalemi aktarıldı",
|
||||
"@stockItemTransferred": {},
|
||||
"stockItemUpdated": "Stok ögesi güncellendi",
|
||||
"stockItemUpdated": "Stok kalemi güncellendi",
|
||||
"@stockItemUpdated": {},
|
||||
"stockItemsNotAvailable": "Kullanılabilir stok ögesi yok",
|
||||
"stockItemsNotAvailable": "Stok kalemi bulunmamaktadır",
|
||||
"@stockItemsNotAvailable": {},
|
||||
"stockItemNotes": "Stok Kalemi Notları",
|
||||
"@stockItemNotes": {},
|
||||
|
|
@ -1056,11 +1056,11 @@
|
|||
"@supplier": {},
|
||||
"supplierPart": "Tedarikçi Parçası",
|
||||
"@supplierPart": {},
|
||||
"supplierPartEdit": "Sağlayıcı Parçasını Düzenle",
|
||||
"supplierPartEdit": "Tedarikçi Parçasını Düzenle",
|
||||
"@supplierPartEdit": {},
|
||||
"supplierPartNumber": "Sağlayıcı Parça Numarası",
|
||||
"supplierPartNumber": "Tedarikçi Parça Numarası",
|
||||
"@supplierPartNumber": {},
|
||||
"supplierPartUpdated": "Sağlayıcı Parçası Güncellendi",
|
||||
"supplierPartUpdated": "Tedarikçi Parçası Güncellendi",
|
||||
"@supplierPartUpdated": {},
|
||||
"supplierParts": "Tedarikçi Parçaları",
|
||||
"@supplierParts": {},
|
||||
|
|
@ -1086,7 +1086,7 @@
|
|||
"@testResults": {
|
||||
"description": ""
|
||||
},
|
||||
"testResultsDetail": "Stok ögesi test sonuçlarını görüntüle",
|
||||
"testResultsDetail": "Stok kalemi test sonuçlarını görüntüle",
|
||||
"@testResultsDetail": {},
|
||||
"testResultAdd": "Test Sonucu Ekle",
|
||||
"@testResultAdd": {},
|
||||
|
|
@ -1148,7 +1148,7 @@
|
|||
"@uploadFailed": {},
|
||||
"uploadSuccess": "Dosya yüklendi",
|
||||
"@uploadSuccess": {},
|
||||
"uploadImage": "Resim Yükleyin",
|
||||
"uploadImage": "Görsel Yükle",
|
||||
"@uploadImage": {},
|
||||
"usedIn": "Burada Kullanıldı",
|
||||
"@usedIn": {},
|
||||
|
|
@ -1166,7 +1166,7 @@
|
|||
"@valueCannotBeEmpty": {},
|
||||
"valueRequired": "Değer gereklidir",
|
||||
"@valueRequired": {},
|
||||
"variants": "Türevler",
|
||||
"variants": "Varyantlar",
|
||||
"@variants": {},
|
||||
"version": "Sürüm",
|
||||
"@version": {},
|
||||
|
|
@ -1188,13 +1188,13 @@
|
|||
"@salePrice": {},
|
||||
"saleHistory": "Satış Geçmişi",
|
||||
"@saleHistory": {},
|
||||
"supplierPricing": "Sağlayıcı Fiyatlandırması",
|
||||
"supplierPricing": "Tedarikçi Fiyatlandırması",
|
||||
"@supplierPricing": {},
|
||||
"bomCost": "BoM Maliyeti",
|
||||
"@bomCost": {},
|
||||
"internalCost": "Dahili Maliyet",
|
||||
"@internalCost": {},
|
||||
"variantCost": "Türev Maliyeti",
|
||||
"variantCost": "Varyant Maliyeti",
|
||||
"@variantCost": {},
|
||||
"overallPricing": "Genel Fiyatlandırma",
|
||||
"@overallPricing": {},
|
||||
|
|
@ -1202,6 +1202,6 @@
|
|||
"@pricingOverrides": {},
|
||||
"currency": "Para Birimi",
|
||||
"@currency": {},
|
||||
"priceBreaks": "Fiyat Aralığı",
|
||||
"priceBreaks": "Fiyat Kademeleri",
|
||||
"@priceBreaks": {}
|
||||
}
|
||||
|
|
@ -46,7 +46,7 @@
|
|||
"@aspectRatioSquare": {},
|
||||
"allocateStock": "Виділити запас",
|
||||
"@allocateStock": {},
|
||||
"allocatedStock": "Allocated Stock",
|
||||
"allocatedStock": "Виділений Запас",
|
||||
"@allocatedStock": {},
|
||||
"appReleaseNotes": "Показати примітки до випуску",
|
||||
"@appReleaseNotes": {},
|
||||
|
|
@ -102,7 +102,7 @@
|
|||
"@barcodeReceivePart": {},
|
||||
"barcodeScanPaused": "Сканування штрих-кодів призупинено",
|
||||
"@barodeScanPaused": {},
|
||||
"barcodeScanPause": "Tap to pause scanning",
|
||||
"barcodeScanPause": "Торкніться або утримуйте, щоб призупинити сканування",
|
||||
"@barcodeScanPause": {},
|
||||
"barcodeScanAssign": "Сканувати щоб призначити штрих-код",
|
||||
"@barcodeScanAssign": {},
|
||||
|
|
@ -228,11 +228,11 @@
|
|||
"@delete": {},
|
||||
"deleteFailed": "Помилка видалення",
|
||||
"@deleteFailed": {},
|
||||
"deleteImageConfirmation": "Are you sure you want to delete this image?",
|
||||
"deleteImageConfirmation": "Ви дійсно хочете видалити це зображення?",
|
||||
"@deleteImageConfirmation": {},
|
||||
"deleteImageTooltip": "Delete Image",
|
||||
"deleteImageTooltip": "Видалити Зображення",
|
||||
"@deleteImageTooltip": {},
|
||||
"deleteImage": "Delete Image",
|
||||
"deleteImage": "Видалити Зображення",
|
||||
"@deleteImage": {},
|
||||
"deletePart": "Видалити деталь",
|
||||
"@deletePart": {},
|
||||
|
|
@ -240,7 +240,7 @@
|
|||
"@deletePartDetail": {},
|
||||
"deleteSuccess": "Операція видалення пройшла успішно",
|
||||
"@deleteSuccess": {},
|
||||
"deliveryDate": "Delivery Date",
|
||||
"deliveryDate": "Дата Доставки",
|
||||
"@deliveryDate": {},
|
||||
"description": "Опис",
|
||||
"@description": {},
|
||||
|
|
@ -384,9 +384,9 @@
|
|||
"@homeShowPo": {},
|
||||
"homeShowPoDescription": "Показувати кнопку замовлення на домашньому екрані",
|
||||
"@homeShowPoDescription": {},
|
||||
"homeShowShipments": "Show Shipments",
|
||||
"homeShowShipments": "Показати відправлення",
|
||||
"@homeShowShipments": {},
|
||||
"homeShowShipmentsDescription": "Show pending shipments on the home screen",
|
||||
"homeShowShipmentsDescription": "Показати відкладені відправлення на головному екрані",
|
||||
"@homeShowShipmentsDescription": {},
|
||||
"homeShowSo": "Показати замовлення",
|
||||
"@homeShowSo": {},
|
||||
|
|
@ -454,15 +454,15 @@
|
|||
"@invalidSupplierPart": {},
|
||||
"invalidUsernamePassword": "Неправильна комбінація імені користувача та пароля",
|
||||
"@invalidUsernamePassword": {},
|
||||
"invoice": "Invoice",
|
||||
"invoice": "Інвойс",
|
||||
"@invoice": {},
|
||||
"invoiceNumber": "Invoice Number",
|
||||
"invoiceNumber": "Номер Інвойсу",
|
||||
"@invoiceNumber": {},
|
||||
"issue": "Issue",
|
||||
"issue": "Видача",
|
||||
"@issue": {},
|
||||
"issueDate": "Issue Date",
|
||||
"issueDate": "Дата Видачі",
|
||||
"@issueDate": {},
|
||||
"issueOrder": "Issue Order",
|
||||
"issueOrder": "Оформити Замовлення",
|
||||
"@issueOrder": {},
|
||||
"itemInLocation": "Товар вже на місці",
|
||||
"@itemInLocation": {},
|
||||
|
|
@ -472,9 +472,9 @@
|
|||
"@itemUpdated": {},
|
||||
"keywords": "Ключові слова",
|
||||
"@keywords": {},
|
||||
"labelDriver": "Label Driver",
|
||||
"labelDriver": "Драйвер Етикеток",
|
||||
"@labelDriver": {},
|
||||
"labelSelectDriver": "Select Label Printer Driver",
|
||||
"labelSelectDriver": "Вибрати Драйвер Принтера Етикеток",
|
||||
"@labelSelectDriver": {},
|
||||
"labelPrinting": "Друк Ярликів",
|
||||
"@labelPrinting": {},
|
||||
|
|
@ -482,9 +482,9 @@
|
|||
"@labelPrintingDetail": {},
|
||||
"labelTemplate": "Шаблон Ярлика",
|
||||
"@labelTemplate": {},
|
||||
"labelSelectTemplate": "Select Label Template",
|
||||
"labelSelectTemplate": "Вибрати Шаблон Етикетки",
|
||||
"@labelSelectTemplate": {},
|
||||
"labelSelectPrinter": "Select Label Printer",
|
||||
"labelSelectPrinter": "Вибрати Принтер Етикеток",
|
||||
"@labelSelectPrinter": {},
|
||||
"language": "Мова",
|
||||
"@language": {},
|
||||
|
|
@ -492,19 +492,19 @@
|
|||
"@languageDefault": {},
|
||||
"languageSelect": "Вибір мови",
|
||||
"@languageSelect": {},
|
||||
"lastStocktake": "Last Stocktake",
|
||||
"lastStocktake": "Остання інвентаризація",
|
||||
"@lastStocktake": {},
|
||||
"lastUpdated": "Останнє оновлення",
|
||||
"@lastUpdated": {},
|
||||
"level": "Рівень",
|
||||
"@level": {},
|
||||
"lineItemAdd": "Add Line Item",
|
||||
"lineItemAdd": "Додати Позицію",
|
||||
"@lineItemAdd": {},
|
||||
"lineItem": "Line Item",
|
||||
"lineItem": "Позиція",
|
||||
"@lineItem": {},
|
||||
"lineItems": "Line Items",
|
||||
"lineItems": "Позиції",
|
||||
"@lineItems": {},
|
||||
"lineItemUpdated": "Line item updated",
|
||||
"lineItemUpdated": "Позицію оновлено",
|
||||
"@lineItemUpdated": {},
|
||||
"locateItem": "Знайти елемент запасів",
|
||||
"@locateItem": {},
|
||||
|
|
@ -514,7 +514,7 @@
|
|||
"@locationCreate": {},
|
||||
"locationCreateDetail": "Створити нове розташування на складі",
|
||||
"@locationCreateDetail": {},
|
||||
"locationDefault": "Default Location",
|
||||
"locationDefault": "Розташування за замовчуванням",
|
||||
"@locationDefault": {},
|
||||
"locationNotSet": "Розташування не вказано",
|
||||
"@locationNotSet": {},
|
||||
|
|
@ -544,9 +544,9 @@
|
|||
"@missingData": {},
|
||||
"name": "Назва",
|
||||
"@name": {},
|
||||
"no": "No",
|
||||
"no": "Ні",
|
||||
"@no": {},
|
||||
"notApplicable": "N/A",
|
||||
"notApplicable": "Н/Д",
|
||||
"@notApplicable": {},
|
||||
"notConnected": "Не під’єднано",
|
||||
"@notConnected": {},
|
||||
|
|
@ -564,19 +564,19 @@
|
|||
"@noResults": {},
|
||||
"noImageAvailable": "Немає доступного зображення",
|
||||
"@noImageAvailable": {},
|
||||
"noPricingAvailable": "No pricing available",
|
||||
"noPricingAvailable": "Ціни не вказано",
|
||||
"@noPricingAvailable": {},
|
||||
"noPricingDataFound": "No pricing data found for this part",
|
||||
"noPricingDataFound": "Для цієї деталі не знайдено даних про ціну",
|
||||
"@noPricingDataFound": {},
|
||||
"noSubcategories": "No Subcategories",
|
||||
"noSubcategories": "Немає Підкатегорій",
|
||||
"@noSubcategories": {},
|
||||
"noSubcategoriesAvailable": "No subcategories available",
|
||||
"noSubcategoriesAvailable": "Немає доступних підкатегорій",
|
||||
"@noSubcategoriesAvailable": {},
|
||||
"numberInvalid": "Некоректний номер",
|
||||
"@numberInvalid": {},
|
||||
"onOrder": "On Order",
|
||||
"onOrder": "У замовленні",
|
||||
"@onOrder": {},
|
||||
"onOrderDetails": "Items currently on order",
|
||||
"onOrderDetails": "Позиції в поточних замовленнях",
|
||||
"@onOrderDetails": {},
|
||||
"orientation": "Орієнтація екрана",
|
||||
"@orientation": {},
|
||||
|
|
@ -632,7 +632,7 @@
|
|||
"@partNoResults": {},
|
||||
"partPricing": "Ціна деталі",
|
||||
"@partPricing": {},
|
||||
"partPricingSettingDetail": "Display part pricing information",
|
||||
"partPricingSettingDetail": "Відображати інформацію про ціни на деталь",
|
||||
"@pricingSettingDetail": {},
|
||||
"partSettings": "Налаштування позиції",
|
||||
"@partSettings": {},
|
||||
|
|
@ -652,7 +652,7 @@
|
|||
"@partDetails": {},
|
||||
"partNotes": "Примітки до позиції",
|
||||
"@partNotes": {},
|
||||
"partStock": "Part Stock",
|
||||
"partStock": "Наявність На Складі",
|
||||
"@partStock": {
|
||||
"description": "part stock"
|
||||
},
|
||||
|
|
@ -660,7 +660,7 @@
|
|||
"@password": {},
|
||||
"passwordEmpty": "Пароль не може бути порожнім",
|
||||
"@passwordEmpty": {},
|
||||
"pending": "Pending",
|
||||
"pending": "В очікуванні",
|
||||
"@pending": {},
|
||||
"permissionAccountDenied": "Ваш обліковий запис не має необхідних прав для виконання цієї дії",
|
||||
"@permissionAccountDenied": {},
|
||||
|
|
@ -712,27 +712,27 @@
|
|||
"@purchaseOrderConfirmScan": {},
|
||||
"purchaseOrderConfirmScanDetail": "Підтвердити подробиці при скануванні в позицій",
|
||||
"@purchaseOrderConfirmScanDetail": {},
|
||||
"purchaseOrderEnable": "Enable Purchase Orders",
|
||||
"purchaseOrderEnable": "Увімкнути Закупівлю",
|
||||
"@purchaseOrderEnable": {},
|
||||
"purchaseOrderEnableDetail": "Enable purchase order functionality",
|
||||
"purchaseOrderEnableDetail": "Увімкнути функціонал закупівлі",
|
||||
"@purchaseOrderEnableDetail": {},
|
||||
"purchaseOrderShowCamera": "Camera Shortcut",
|
||||
"purchaseOrderShowCamera": "Швидкий Доступ до Камери",
|
||||
"@purchaseOrderShowCamera": {},
|
||||
"purchaseOrderShowCameraDetail": "Enable image upload shortcut on purchase order screen",
|
||||
"purchaseOrderShowCameraDetail": "Увімкнути ярлик для завантаження зображень на екрані закупівель",
|
||||
"@purchaseOrderShowCameraDetail": {},
|
||||
"purchaseOrder": "Purchase Order",
|
||||
"purchaseOrder": "Замовлення на Закупівлю",
|
||||
"@purchaseOrder": {},
|
||||
"purchaseOrderCreate": "New Purchase Order",
|
||||
"purchaseOrderCreate": "Нове Замовлення на Закупівлю",
|
||||
"@purchaseOrderCreate": {},
|
||||
"purchaseOrderEdit": "Edit Purchase Order",
|
||||
"purchaseOrderEdit": "Редагувати Замовлення на Закупівлю",
|
||||
"@purchaseOrderEdit": {},
|
||||
"purchaseOrderSettings": "Purchase order settings",
|
||||
"purchaseOrderSettings": "Налаштування замовлення на закупівлю",
|
||||
"@purchaseOrderSettings": {},
|
||||
"purchaseOrders": "Purchase Orders",
|
||||
"purchaseOrders": "Закупівлі",
|
||||
"@purchaseOrders": {},
|
||||
"purchaseOrderUpdated": "Purchase order updated",
|
||||
"purchaseOrderUpdated": "Замовлення на закупівлю оновлено",
|
||||
"@purchaseOrderUpdated": {},
|
||||
"purchasePrice": "Purchase Price",
|
||||
"purchasePrice": "Закупівельна Ціна",
|
||||
"@purchasePrice": {},
|
||||
"quantity": "Кількість",
|
||||
"@quantity": {
|
||||
|
|
@ -740,7 +740,7 @@
|
|||
},
|
||||
"quantityAvailable": "Доступна кількість",
|
||||
"@quantityAvailable": {},
|
||||
"quantityEmpty": "Quantity is empty",
|
||||
"quantityEmpty": "Кількість не вказана",
|
||||
"@quantityEmpty": {},
|
||||
"quantityInvalid": "Некоректна кількість",
|
||||
"@quantityInvalid": {},
|
||||
|
|
@ -752,13 +752,13 @@
|
|||
"@queryNoResults": {},
|
||||
"received": "Отримано",
|
||||
"@received": {},
|
||||
"receivedFilterDetail": "Show received items",
|
||||
"receivedFilterDetail": "Показувати отримані позиції",
|
||||
"@receivedFilterDetail": {},
|
||||
"receiveItem": "Receive Item",
|
||||
"receiveItem": "Прийняти Позицію",
|
||||
"@receiveItem": {},
|
||||
"receivedItem": "Received Stock Item",
|
||||
"receivedItem": "Отримана Складська Позиція",
|
||||
"@receivedItem": {},
|
||||
"reference": "Reference",
|
||||
"reference": "Номер документа",
|
||||
"@reference": {},
|
||||
"refresh": "Оновити",
|
||||
"@refresh": {},
|
||||
|
|
@ -766,7 +766,7 @@
|
|||
"@rotateClockwise": {},
|
||||
"refreshing": "Оновлення",
|
||||
"@refreshing": {},
|
||||
"rejected": "Rejected",
|
||||
"rejected": "Відхилено",
|
||||
"@rejected": {},
|
||||
"releaseNotes": "Замітки до випуску",
|
||||
"@releaseNotes": {},
|
||||
|
|
|
|||
|
|
@ -102,7 +102,7 @@
|
|||
"@barcodeReceivePart": {},
|
||||
"barcodeScanPaused": "条形码扫描已暂停",
|
||||
"@barodeScanPaused": {},
|
||||
"barcodeScanPause": "Tap to pause scanning",
|
||||
"barcodeScanPause": "点击以暂停扫描",
|
||||
"@barcodeScanPause": {},
|
||||
"barcodeScanAssign": "扫描以分配条形码",
|
||||
"@barcodeScanAssign": {},
|
||||
|
|
@ -472,9 +472,9 @@
|
|||
"@itemUpdated": {},
|
||||
"keywords": "关键词",
|
||||
"@keywords": {},
|
||||
"labelDriver": "Label Driver",
|
||||
"labelDriver": "标签打印机",
|
||||
"@labelDriver": {},
|
||||
"labelSelectDriver": "Select Label Printer Driver",
|
||||
"labelSelectDriver": "选择标签打印机",
|
||||
"@labelSelectDriver": {},
|
||||
"labelPrinting": "打印标签",
|
||||
"@labelPrinting": {},
|
||||
|
|
@ -514,7 +514,7 @@
|
|||
"@locationCreate": {},
|
||||
"locationCreateDetail": "创建新库存地点",
|
||||
"@locationCreateDetail": {},
|
||||
"locationDefault": "Default Location",
|
||||
"locationDefault": "默认位置",
|
||||
"@locationDefault": {},
|
||||
"locationNotSet": "没有指定仓储位置",
|
||||
"@locationNotSet": {},
|
||||
|
|
|
|||
|
|
@ -32,7 +32,6 @@ const String INV_LABEL_DEFAULT_PRINTER = "defaultLabelPrinter";
|
|||
const String INV_LABEL_DEFAULT_PLUGIN = "defaultLabelPlugin";
|
||||
|
||||
// Part settings
|
||||
const String INV_PART_SHOW_PARAMETERS = "partShowParameters";
|
||||
const String INV_PART_SHOW_BOM = "partShowBom";
|
||||
const String INV_PART_SHOW_PRICING = "partShowPricing";
|
||||
|
||||
|
|
|
|||
|
|
@ -13,7 +13,6 @@ class InvenTreePartSettingsWidget extends StatefulWidget {
|
|||
class _InvenTreePartSettingsState extends State<InvenTreePartSettingsWidget> {
|
||||
_InvenTreePartSettingsState();
|
||||
|
||||
bool partShowParameters = true;
|
||||
bool partShowBom = true;
|
||||
bool partShowPricing = true;
|
||||
bool stockShowHistory = false;
|
||||
|
|
@ -28,10 +27,6 @@ class _InvenTreePartSettingsState extends State<InvenTreePartSettingsWidget> {
|
|||
}
|
||||
|
||||
Future<void> loadSettings() async {
|
||||
partShowParameters = await InvenTreeSettingsManager().getBool(
|
||||
INV_PART_SHOW_PARAMETERS,
|
||||
true,
|
||||
);
|
||||
partShowBom = await InvenTreeSettingsManager().getBool(
|
||||
INV_PART_SHOW_BOM,
|
||||
true,
|
||||
|
|
@ -68,23 +63,6 @@ class _InvenTreePartSettingsState extends State<InvenTreePartSettingsWidget> {
|
|||
body: Container(
|
||||
child: ListView(
|
||||
children: [
|
||||
ListTile(
|
||||
title: Text(L10().parameters),
|
||||
subtitle: Text(L10().parametersSettingDetail),
|
||||
leading: Icon(TablerIcons.list),
|
||||
trailing: Switch(
|
||||
value: partShowParameters,
|
||||
onChanged: (bool value) {
|
||||
InvenTreeSettingsManager().setValue(
|
||||
INV_PART_SHOW_PARAMETERS,
|
||||
value,
|
||||
);
|
||||
setState(() {
|
||||
partShowParameters = value;
|
||||
});
|
||||
},
|
||||
),
|
||||
),
|
||||
ListTile(
|
||||
title: Text(L10().bom),
|
||||
subtitle: Text(L10().bomEnable),
|
||||
|
|
|
|||
|
|
@ -2,14 +2,13 @@ import "dart:io";
|
|||
|
||||
import "package:flutter/material.dart";
|
||||
import "package:flutter_tabler_icons/flutter_tabler_icons.dart";
|
||||
import "package:inventree/api.dart";
|
||||
import "package:inventree/inventree/attachment.dart";
|
||||
import "package:inventree/widget/link_icon.dart";
|
||||
import "package:one_context/one_context.dart";
|
||||
|
||||
import "package:inventree/api.dart";
|
||||
import "package:inventree/l10.dart";
|
||||
import "package:inventree/app_colors.dart";
|
||||
|
||||
import "package:inventree/inventree/model.dart";
|
||||
|
||||
import "package:inventree/widget/fields.dart";
|
||||
import "package:inventree/widget/progress.dart";
|
||||
import "package:inventree/widget/snacks.dart";
|
||||
|
|
@ -23,13 +22,13 @@ import "package:inventree/widget/refreshable_state.dart";
|
|||
*/
|
||||
class AttachmentWidget extends StatefulWidget {
|
||||
const AttachmentWidget(
|
||||
this.attachmentClass,
|
||||
this.modelType,
|
||||
this.modelId,
|
||||
this.imagePrefix,
|
||||
this.hasUploadPermission,
|
||||
) : super();
|
||||
|
||||
final InvenTreeAttachment attachmentClass;
|
||||
final String modelType;
|
||||
final int modelId;
|
||||
final bool hasUploadPermission;
|
||||
final String imagePrefix;
|
||||
|
|
@ -54,15 +53,15 @@ class _AttachmentWidgetState extends RefreshableState<AttachmentWidget> {
|
|||
IconButton(
|
||||
icon: Icon(TablerIcons.camera),
|
||||
onPressed: () async {
|
||||
widget.attachmentClass.uploadImage(
|
||||
widget.modelId,
|
||||
prefix: widget.imagePrefix,
|
||||
);
|
||||
FilePickerDialog.pickImageFromCamera().then((File? file) {
|
||||
upload(context, file).then((_) {
|
||||
refresh(context);
|
||||
});
|
||||
});
|
||||
InvenTreeAttachment()
|
||||
.uploadImage(
|
||||
widget.modelType,
|
||||
widget.modelId,
|
||||
prefix: widget.imagePrefix,
|
||||
)
|
||||
.then((_) {
|
||||
refresh(context);
|
||||
});
|
||||
},
|
||||
),
|
||||
IconButton(
|
||||
|
|
@ -83,8 +82,9 @@ class _AttachmentWidgetState extends RefreshableState<AttachmentWidget> {
|
|||
|
||||
showLoadingOverlay();
|
||||
|
||||
final bool result = await widget.attachmentClass.uploadAttachment(
|
||||
final bool result = await InvenTreeAttachment().uploadAttachment(
|
||||
file,
|
||||
widget.modelType,
|
||||
widget.modelId,
|
||||
);
|
||||
|
||||
|
|
@ -168,25 +168,24 @@ class _AttachmentWidgetState extends RefreshableState<AttachmentWidget> {
|
|||
Future<void> request(BuildContext context) async {
|
||||
Map<String, String> filters = {};
|
||||
|
||||
if (InvenTreeAPI().supportsModernAttachments) {
|
||||
filters["model_type"] = widget.attachmentClass.REF_MODEL_TYPE;
|
||||
filters["model_id"] = widget.modelId.toString();
|
||||
} else {
|
||||
filters[widget.attachmentClass.REFERENCE_FIELD] = widget.modelId
|
||||
.toString();
|
||||
}
|
||||
filters["model_type"] = widget.modelType;
|
||||
filters["model_id"] = widget.modelId.toString();
|
||||
|
||||
await widget.attachmentClass.list(filters: filters).then((var results) {
|
||||
attachments.clear();
|
||||
List<InvenTreeAttachment> _attachments = [];
|
||||
|
||||
InvenTreeAttachment().list(filters: filters).then((var results) {
|
||||
for (var result in results) {
|
||||
if (result is InvenTreeAttachment) {
|
||||
attachments.add(result);
|
||||
_attachments.add(result);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
setState(() {});
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
attachments = _attachments;
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
|
|
@ -240,3 +239,40 @@ class _AttachmentWidgetState extends RefreshableState<AttachmentWidget> {
|
|||
return tiles;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Return a ListTile to display attachments for the specified model
|
||||
*/
|
||||
ListTile? ShowAttachmentsItem(
|
||||
BuildContext context,
|
||||
String modelType,
|
||||
int modelId,
|
||||
String imagePrefix,
|
||||
int attachmentCount,
|
||||
bool hasUploadPermission,
|
||||
) {
|
||||
if (!InvenTreeAPI().supportsModernAttachments) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return ListTile(
|
||||
title: Text(L10().attachments),
|
||||
leading: Icon(TablerIcons.file, color: COLOR_ACTION),
|
||||
trailing: LinkIcon(
|
||||
text: attachmentCount > 0 ? attachmentCount.toString() : null,
|
||||
),
|
||||
onTap: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) => AttachmentWidget(
|
||||
modelType,
|
||||
modelId,
|
||||
imagePrefix,
|
||||
hasUploadPermission,
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
import "package:flutter/material.dart";
|
||||
import "package:flutter_speed_dial/flutter_speed_dial.dart";
|
||||
import "package:flutter_tabler_icons/flutter_tabler_icons.dart";
|
||||
import "package:inventree/inventree/attachment.dart";
|
||||
import "package:inventree/inventree/parameter.dart";
|
||||
|
||||
import "package:inventree/l10.dart";
|
||||
import "package:inventree/api.dart";
|
||||
|
|
@ -13,6 +15,7 @@ import "package:inventree/widget/attachment_widget.dart";
|
|||
import "package:inventree/widget/link_icon.dart";
|
||||
import "package:inventree/widget/order/purchase_order_list.dart";
|
||||
import "package:inventree/widget/order/sales_order_list.dart";
|
||||
import "package:inventree/widget/parameter_widget.dart";
|
||||
import "package:inventree/widget/refreshable_state.dart";
|
||||
import "package:inventree/widget/snacks.dart";
|
||||
import "package:inventree/widget/company/supplier_part_list.dart";
|
||||
|
|
@ -37,6 +40,7 @@ class _CompanyDetailState extends RefreshableState<CompanyDetailWidget> {
|
|||
int outstandingPurchaseOrders = 0;
|
||||
int outstandingSalesOrders = 0;
|
||||
|
||||
int parameterCount = 0;
|
||||
int attachmentCount = 0;
|
||||
|
||||
@override
|
||||
|
|
@ -184,15 +188,25 @@ class _CompanyDetailState extends RefreshableState<CompanyDetailWidget> {
|
|||
}
|
||||
});
|
||||
|
||||
InvenTreeCompanyAttachment().countAttachments(widget.company.pk).then((
|
||||
value,
|
||||
) {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
attachmentCount = value;
|
||||
InvenTreeParameter()
|
||||
.countParameters(InvenTreeCompany.MODEL_TYPE, widget.company.pk)
|
||||
.then((value) {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
parameterCount = value;
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
InvenTreeAttachment()
|
||||
.countAttachments(InvenTreeCompany.MODEL_TYPE, widget.company.pk)
|
||||
.then((value) {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
attachmentCount = value;
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Future<void> editCompany(BuildContext context) async {
|
||||
|
|
@ -393,29 +407,31 @@ class _CompanyDetailState extends RefreshableState<CompanyDetailWidget> {
|
|||
);
|
||||
}
|
||||
|
||||
tiles.add(
|
||||
ListTile(
|
||||
title: Text(L10().attachments),
|
||||
leading: Icon(TablerIcons.file, color: COLOR_ACTION),
|
||||
trailing: LinkIcon(
|
||||
text: attachmentCount > 0 ? attachmentCount.toString() : null,
|
||||
),
|
||||
onTap: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) => AttachmentWidget(
|
||||
InvenTreeCompanyAttachment(),
|
||||
widget.company.pk,
|
||||
widget.company.name,
|
||||
InvenTreeCompany().canEdit,
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
ListTile? parameterTile = ShowParametersItem(
|
||||
context,
|
||||
InvenTreeCompany.MODEL_TYPE,
|
||||
widget.company.pk,
|
||||
parameterCount,
|
||||
widget.company.canEdit,
|
||||
);
|
||||
|
||||
if (parameterTile != null) {
|
||||
tiles.add(parameterTile);
|
||||
}
|
||||
|
||||
ListTile? attachmentTile = ShowAttachmentsItem(
|
||||
context,
|
||||
InvenTreeCompany.MODEL_TYPE,
|
||||
widget.company.pk,
|
||||
widget.company.name,
|
||||
attachmentCount,
|
||||
widget.company.canEdit,
|
||||
);
|
||||
|
||||
if (attachmentTile != null) {
|
||||
tiles.add(attachmentTile);
|
||||
}
|
||||
|
||||
return tiles;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
import "package:flutter/material.dart";
|
||||
import "package:flutter_speed_dial/flutter_speed_dial.dart";
|
||||
import "package:flutter_tabler_icons/flutter_tabler_icons.dart";
|
||||
import "package:inventree/inventree/attachment.dart";
|
||||
import "package:inventree/inventree/parameter.dart";
|
||||
|
||||
import "package:inventree/l10.dart";
|
||||
import "package:inventree/api.dart";
|
||||
|
|
@ -8,6 +10,8 @@ import "package:inventree/app_colors.dart";
|
|||
|
||||
import "package:inventree/inventree/company.dart";
|
||||
import "package:inventree/inventree/part.dart";
|
||||
import "package:inventree/widget/attachment_widget.dart";
|
||||
import "package:inventree/widget/parameter_widget.dart";
|
||||
|
||||
import "package:inventree/widget/refreshable_state.dart";
|
||||
import "package:inventree/widget/snacks.dart";
|
||||
|
|
@ -31,6 +35,9 @@ class _ManufacturerPartDisplayState
|
|||
extends RefreshableState<ManufacturerPartDetailWidget> {
|
||||
_ManufacturerPartDisplayState();
|
||||
|
||||
int parameterCount = 0;
|
||||
int attachmentCount = 0;
|
||||
|
||||
@override
|
||||
String getAppBarTitle() => L10().manufacturerPart;
|
||||
|
||||
|
|
@ -42,7 +49,34 @@ class _ManufacturerPartDisplayState
|
|||
|
||||
if (!result) {
|
||||
Navigator.of(context).pop();
|
||||
return;
|
||||
}
|
||||
|
||||
InvenTreeParameter()
|
||||
.countParameters(
|
||||
InvenTreeManufacturerPart.MODEL_TYPE,
|
||||
widget.manufacturerPart.pk,
|
||||
)
|
||||
.then((value) {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
parameterCount = value;
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
InvenTreeAttachment()
|
||||
.countAttachments(
|
||||
InvenTreeManufacturerPart.MODEL_TYPE,
|
||||
widget.manufacturerPart.pk,
|
||||
)
|
||||
.then((value) {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
attachmentCount = value;
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Future<void> editManufacturerPart(BuildContext context) async {
|
||||
|
|
@ -91,11 +125,6 @@ class _ManufacturerPartDisplayState
|
|||
List<Widget> getTiles(BuildContext context) {
|
||||
List<Widget> tiles = [];
|
||||
|
||||
if (loading) {
|
||||
tiles.add(progressIndicator());
|
||||
return tiles;
|
||||
}
|
||||
|
||||
// Internal Part
|
||||
tiles.add(
|
||||
ListTile(
|
||||
|
|
@ -174,6 +203,31 @@ class _ManufacturerPartDisplayState
|
|||
);
|
||||
}
|
||||
|
||||
ListTile? parameterTile = ShowParametersItem(
|
||||
context,
|
||||
InvenTreeManufacturerPart.MODEL_TYPE,
|
||||
widget.manufacturerPart.pk,
|
||||
parameterCount,
|
||||
widget.manufacturerPart.canEdit,
|
||||
);
|
||||
|
||||
if (parameterTile != null) {
|
||||
tiles.add(parameterTile);
|
||||
}
|
||||
|
||||
ListTile? attachmentTile = ShowAttachmentsItem(
|
||||
context,
|
||||
InvenTreeManufacturerPart.MODEL_TYPE,
|
||||
widget.manufacturerPart.pk,
|
||||
widget.manufacturerPart.MPN,
|
||||
attachmentCount,
|
||||
widget.manufacturerPart.canEdit,
|
||||
);
|
||||
|
||||
if (attachmentTile != null) {
|
||||
tiles.add(attachmentTile);
|
||||
}
|
||||
|
||||
return tiles;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,9 @@ import "package:flutter/material.dart";
|
|||
import "package:flutter_speed_dial/flutter_speed_dial.dart";
|
||||
import "package:flutter_tabler_icons/flutter_tabler_icons.dart";
|
||||
import "package:inventree/helpers.dart";
|
||||
import "package:inventree/inventree/attachment.dart";
|
||||
import "package:inventree/inventree/parameter.dart";
|
||||
import "package:inventree/widget/attachment_widget.dart";
|
||||
import "package:inventree/widget/link_icon.dart";
|
||||
|
||||
import "package:inventree/app_colors.dart";
|
||||
|
|
@ -11,6 +14,7 @@ import "package:inventree/barcode/barcode.dart";
|
|||
|
||||
import "package:inventree/inventree/part.dart";
|
||||
import "package:inventree/inventree/company.dart";
|
||||
import "package:inventree/widget/parameter_widget.dart";
|
||||
|
||||
import "package:inventree/widget/progress.dart";
|
||||
import "package:inventree/widget/refreshable_state.dart";
|
||||
|
|
@ -35,6 +39,9 @@ class _SupplierPartDisplayState
|
|||
extends RefreshableState<SupplierPartDetailWidget> {
|
||||
_SupplierPartDisplayState();
|
||||
|
||||
int parameterCount = 0;
|
||||
int attachmentCount = 0;
|
||||
|
||||
@override
|
||||
String getAppBarTitle() => L10().supplierPart;
|
||||
|
||||
|
|
@ -97,7 +104,34 @@ class _SupplierPartDisplayState
|
|||
|
||||
if (!result) {
|
||||
Navigator.of(context).pop();
|
||||
return;
|
||||
}
|
||||
|
||||
InvenTreeParameter()
|
||||
.countParameters(
|
||||
InvenTreeSupplierPart.MODEL_TYPE,
|
||||
widget.supplierPart.pk,
|
||||
)
|
||||
.then((value) {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
parameterCount = value;
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
InvenTreeAttachment()
|
||||
.countAttachments(
|
||||
InvenTreeSupplierPart.MODEL_TYPE,
|
||||
widget.supplierPart.pk,
|
||||
)
|
||||
.then((value) {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
attachmentCount = value;
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -286,6 +320,31 @@ class _SupplierPartDisplayState
|
|||
);
|
||||
}
|
||||
|
||||
ListTile? parameterTile = ShowParametersItem(
|
||||
context,
|
||||
InvenTreeSupplierPart.MODEL_TYPE,
|
||||
widget.supplierPart.pk,
|
||||
parameterCount,
|
||||
widget.supplierPart.canEdit,
|
||||
);
|
||||
|
||||
if (parameterTile != null) {
|
||||
tiles.add(parameterTile);
|
||||
}
|
||||
|
||||
ListTile? attachmentTile = ShowAttachmentsItem(
|
||||
context,
|
||||
InvenTreeSupplierPart.MODEL_TYPE,
|
||||
widget.supplierPart.pk,
|
||||
widget.supplierPart.SKU,
|
||||
attachmentCount,
|
||||
widget.supplierPart.canEdit,
|
||||
);
|
||||
|
||||
if (attachmentTile != null) {
|
||||
tiles.add(attachmentTile);
|
||||
}
|
||||
|
||||
return tiles;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,6 +7,8 @@ import "package:inventree/app_colors.dart";
|
|||
import "package:inventree/barcode/barcode.dart";
|
||||
import "package:inventree/barcode/purchase_order.dart";
|
||||
import "package:inventree/helpers.dart";
|
||||
import "package:inventree/inventree/attachment.dart";
|
||||
import "package:inventree/inventree/parameter.dart";
|
||||
import "package:inventree/l10.dart";
|
||||
|
||||
import "package:inventree/inventree/model.dart";
|
||||
|
|
@ -21,6 +23,7 @@ import "package:inventree/widget/order/po_line_list.dart";
|
|||
|
||||
import "package:inventree/widget/attachment_widget.dart";
|
||||
import "package:inventree/widget/notes_widget.dart";
|
||||
import "package:inventree/widget/parameter_widget.dart";
|
||||
import "package:inventree/widget/progress.dart";
|
||||
import "package:inventree/widget/refreshable_state.dart";
|
||||
import "package:inventree/widget/snacks.dart";
|
||||
|
|
@ -50,6 +53,7 @@ class _PurchaseOrderDetailState
|
|||
|
||||
int completedLines = 0;
|
||||
int attachmentCount = 0;
|
||||
int parameterCount = 0;
|
||||
|
||||
bool showCameraShortcut = true;
|
||||
bool supportProjectCodes = false;
|
||||
|
|
@ -174,8 +178,12 @@ class _PurchaseOrderDetailState
|
|||
|
||||
/// Upload an image against the current PurchaseOrder
|
||||
Future<void> _uploadImage(BuildContext context) async {
|
||||
InvenTreePurchaseOrderAttachment()
|
||||
.uploadImage(widget.order.pk, prefix: widget.order.reference)
|
||||
InvenTreeAttachment()
|
||||
.uploadImage(
|
||||
InvenTreePurchaseOrder.MODEL_TYPE,
|
||||
widget.order.pk,
|
||||
prefix: widget.order.reference,
|
||||
)
|
||||
.then((result) => refresh(context));
|
||||
}
|
||||
|
||||
|
|
@ -295,15 +303,25 @@ class _PurchaseOrderDetailState
|
|||
}
|
||||
}
|
||||
|
||||
InvenTreePurchaseOrderAttachment().countAttachments(widget.order.pk).then((
|
||||
int value,
|
||||
) {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
attachmentCount = value;
|
||||
InvenTreeParameter()
|
||||
.countParameters(InvenTreePurchaseOrder.MODEL_TYPE, widget.order.pk)
|
||||
.then((int value) {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
parameterCount = value;
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
InvenTreeAttachment()
|
||||
.countAttachments(InvenTreePurchaseOrder.MODEL_TYPE, widget.order.pk)
|
||||
.then((int value) {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
attachmentCount = value;
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
if (api.supportsPurchaseOrderDestination &&
|
||||
widget.order.destinationId > 0) {
|
||||
|
|
@ -565,30 +583,31 @@ class _PurchaseOrderDetailState
|
|||
),
|
||||
);
|
||||
|
||||
// Attachments
|
||||
tiles.add(
|
||||
ListTile(
|
||||
title: Text(L10().attachments),
|
||||
leading: Icon(TablerIcons.file, color: COLOR_ACTION),
|
||||
trailing: LinkIcon(
|
||||
text: attachmentCount > 0 ? attachmentCount.toString() : null,
|
||||
),
|
||||
onTap: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) => AttachmentWidget(
|
||||
InvenTreePurchaseOrderAttachment(),
|
||||
widget.order.pk,
|
||||
widget.order.reference,
|
||||
widget.order.canEdit,
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
ListTile? parameterTile = ShowParametersItem(
|
||||
context,
|
||||
InvenTreePurchaseOrder.MODEL_TYPE,
|
||||
widget.order.pk,
|
||||
parameterCount,
|
||||
widget.order.canEdit,
|
||||
);
|
||||
|
||||
if (parameterTile != null) {
|
||||
tiles.add(parameterTile);
|
||||
}
|
||||
|
||||
ListTile? attachmentTile = ShowAttachmentsItem(
|
||||
context,
|
||||
InvenTreePurchaseOrder.MODEL_TYPE,
|
||||
widget.order.pk,
|
||||
widget.order.reference,
|
||||
attachmentCount,
|
||||
widget.order.canEdit,
|
||||
);
|
||||
|
||||
if (attachmentTile != null) {
|
||||
tiles.add(attachmentTile);
|
||||
}
|
||||
|
||||
return tiles;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,13 +3,16 @@ import "package:flutter_speed_dial/flutter_speed_dial.dart";
|
|||
import "package:flutter_tabler_icons/flutter_tabler_icons.dart";
|
||||
import "package:inventree/barcode/barcode.dart";
|
||||
import "package:inventree/barcode/sales_order.dart";
|
||||
import "package:inventree/inventree/attachment.dart";
|
||||
import "package:inventree/inventree/company.dart";
|
||||
import "package:inventree/inventree/parameter.dart";
|
||||
import "package:inventree/inventree/sales_order.dart";
|
||||
import "package:inventree/preferences.dart";
|
||||
import "package:inventree/widget/link_icon.dart";
|
||||
import "package:inventree/widget/order/so_extra_line_list.dart";
|
||||
import "package:inventree/widget/order/so_line_list.dart";
|
||||
import "package:inventree/widget/order/so_shipment_list.dart";
|
||||
import "package:inventree/widget/parameter_widget.dart";
|
||||
import "package:inventree/widget/refreshable_state.dart";
|
||||
|
||||
import "package:inventree/l10.dart";
|
||||
|
|
@ -42,6 +45,7 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> {
|
|||
bool showCameraShortcut = true;
|
||||
bool supportsProjectCodes = false;
|
||||
int attachmentCount = 0;
|
||||
int parameterCount = 0;
|
||||
|
||||
@override
|
||||
String getAppBarTitle() {
|
||||
|
|
@ -108,8 +112,12 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> {
|
|||
|
||||
/// Upload an image for this order
|
||||
Future<void> _uploadImage(BuildContext context) async {
|
||||
InvenTreeSalesOrderAttachment()
|
||||
.uploadImage(widget.order.pk, prefix: widget.order.reference)
|
||||
InvenTreeAttachment()
|
||||
.uploadImage(
|
||||
InvenTreeSalesOrder.MODEL_TYPE,
|
||||
widget.order.pk,
|
||||
prefix: widget.order.reference,
|
||||
)
|
||||
.then((result) => refresh(context));
|
||||
}
|
||||
|
||||
|
|
@ -266,15 +274,25 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> {
|
|||
true,
|
||||
);
|
||||
|
||||
InvenTreeSalesOrderAttachment().countAttachments(widget.order.pk).then((
|
||||
int value,
|
||||
) {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
attachmentCount = value;
|
||||
InvenTreeParameter()
|
||||
.countParameters(InvenTreeSalesOrder.MODEL_TYPE, widget.order.pk)
|
||||
.then((int value) {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
parameterCount = value;
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
InvenTreeAttachment()
|
||||
.countAttachments(InvenTreeSalesOrder.MODEL_TYPE, widget.order.pk)
|
||||
.then((int value) {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
attachmentCount = value;
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// Count number of "extra line items" against this order
|
||||
InvenTreeSOExtraLineItem()
|
||||
|
|
@ -492,30 +510,31 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> {
|
|||
),
|
||||
);
|
||||
|
||||
// Attachments
|
||||
tiles.add(
|
||||
ListTile(
|
||||
title: Text(L10().attachments),
|
||||
leading: Icon(TablerIcons.file, color: COLOR_ACTION),
|
||||
trailing: LinkIcon(
|
||||
text: attachmentCount > 0 ? attachmentCount.toString() : null,
|
||||
),
|
||||
onTap: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) => AttachmentWidget(
|
||||
InvenTreeSalesOrderAttachment(),
|
||||
widget.order.pk,
|
||||
widget.order.reference,
|
||||
widget.order.canEdit,
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
ListTile? parameterTile = ShowParametersItem(
|
||||
context,
|
||||
InvenTreeSalesOrder.MODEL_TYPE,
|
||||
widget.order.pk,
|
||||
parameterCount,
|
||||
widget.order.canEdit,
|
||||
);
|
||||
|
||||
if (parameterTile != null) {
|
||||
tiles.add(parameterTile);
|
||||
}
|
||||
|
||||
ListTile? attachmentTile = ShowAttachmentsItem(
|
||||
context,
|
||||
InvenTreeSalesOrder.MODEL_TYPE,
|
||||
widget.order.pk,
|
||||
widget.order.reference,
|
||||
attachmentCount,
|
||||
widget.order.canEdit,
|
||||
);
|
||||
|
||||
if (attachmentTile != null) {
|
||||
tiles.add(attachmentTile);
|
||||
}
|
||||
|
||||
return tiles;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ import "package:flutter_tabler_icons/flutter_tabler_icons.dart";
|
|||
import "package:inventree/api.dart";
|
||||
import "package:inventree/api_form.dart";
|
||||
import "package:inventree/app_colors.dart";
|
||||
import "package:inventree/inventree/attachment.dart";
|
||||
import "package:inventree/inventree/sales_order.dart";
|
||||
import "package:inventree/l10.dart";
|
||||
import "package:inventree/preferences.dart";
|
||||
|
|
@ -91,8 +92,11 @@ class _SOShipmentDetailWidgetState
|
|||
});
|
||||
}
|
||||
|
||||
InvenTreeSalesOrderShipmentAttachment()
|
||||
.countAttachments(widget.shipment.pk)
|
||||
InvenTreeAttachment()
|
||||
.countAttachments(
|
||||
InvenTreeSalesOrderShipment.MODEL_TYPE,
|
||||
widget.shipment.pk,
|
||||
)
|
||||
.then((int value) {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
|
|
@ -104,8 +108,12 @@ class _SOShipmentDetailWidgetState
|
|||
|
||||
/// Upload an image for this shipment
|
||||
Future<void> _uploadImage(BuildContext context) async {
|
||||
InvenTreeSalesOrderShipmentAttachment()
|
||||
.uploadImage(widget.shipment.pk, prefix: widget.shipment.reference)
|
||||
InvenTreeAttachment()
|
||||
.uploadImage(
|
||||
InvenTreeSalesOrderShipment.MODEL_TYPE,
|
||||
widget.shipment.pk,
|
||||
prefix: widget.shipment.reference,
|
||||
)
|
||||
.then((result) => refresh(context));
|
||||
}
|
||||
|
||||
|
|
@ -339,30 +347,19 @@ class _SOShipmentDetailWidgetState
|
|||
),
|
||||
);
|
||||
|
||||
// Attachments
|
||||
tiles.add(
|
||||
ListTile(
|
||||
title: Text(L10().attachments),
|
||||
leading: Icon(TablerIcons.file, color: COLOR_ACTION),
|
||||
trailing: LinkIcon(
|
||||
text: attachmentCount > 0 ? attachmentCount.toString() : null,
|
||||
),
|
||||
onTap: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) => AttachmentWidget(
|
||||
InvenTreeSalesOrderShipmentAttachment(),
|
||||
widget.shipment.pk,
|
||||
widget.shipment.reference,
|
||||
widget.shipment.canEdit,
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
ListTile? attachmentTile = ShowAttachmentsItem(
|
||||
context,
|
||||
InvenTreeSalesOrderShipment.MODEL_TYPE,
|
||||
widget.shipment.pk,
|
||||
widget.shipment.reference,
|
||||
attachmentCount,
|
||||
widget.shipment.canEdit,
|
||||
);
|
||||
|
||||
if (attachmentTile != null) {
|
||||
tiles.add(attachmentTile);
|
||||
}
|
||||
|
||||
return tiles;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,8 +1,12 @@
|
|||
import "package:flutter/material.dart";
|
||||
import "package:flutter_tabler_icons/flutter_tabler_icons.dart";
|
||||
import "package:inventree/api.dart";
|
||||
import "package:inventree/app_colors.dart";
|
||||
import "package:inventree/inventree/model.dart";
|
||||
import "package:inventree/inventree/parameter.dart";
|
||||
|
||||
import "package:inventree/l10.dart";
|
||||
import "package:inventree/inventree/part.dart";
|
||||
import "package:inventree/widget/link_icon.dart";
|
||||
import "package:inventree/widget/paginator.dart";
|
||||
import "package:inventree/widget/progress.dart";
|
||||
import "package:inventree/widget/refreshable_state.dart";
|
||||
|
|
@ -10,16 +14,18 @@ import "package:inventree/widget/refreshable_state.dart";
|
|||
/*
|
||||
* Widget for displaying a list of parameters associated with a given Part instance
|
||||
*/
|
||||
class PartParameterWidget extends StatefulWidget {
|
||||
const PartParameterWidget(this.part);
|
||||
class ParameterWidget extends StatefulWidget {
|
||||
const ParameterWidget(this.modelType, this.modelId, this.editable) : super();
|
||||
|
||||
final InvenTreePart part;
|
||||
final String modelType;
|
||||
final int modelId;
|
||||
final bool editable;
|
||||
|
||||
@override
|
||||
_ParameterWidgetState createState() => _ParameterWidgetState();
|
||||
}
|
||||
|
||||
class _ParameterWidgetState extends RefreshableState<PartParameterWidget> {
|
||||
class _ParameterWidgetState extends RefreshableState<ParameterWidget> {
|
||||
_ParameterWidgetState();
|
||||
|
||||
@override
|
||||
|
|
@ -34,9 +40,16 @@ class _ParameterWidgetState extends RefreshableState<PartParameterWidget> {
|
|||
|
||||
@override
|
||||
Widget getBody(BuildContext context) {
|
||||
Map<String, String> filters = {"part": widget.part.pk.toString()};
|
||||
Map<String, String> filters = {
|
||||
"model_type": widget.modelType,
|
||||
"model_id": widget.modelId.toString(),
|
||||
};
|
||||
|
||||
return Column(children: [Expanded(child: PaginatedParameterList(filters))]);
|
||||
return Column(
|
||||
children: [
|
||||
Expanded(child: PaginatedParameterList(filters, widget.editable)),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -44,9 +57,11 @@ class _ParameterWidgetState extends RefreshableState<PartParameterWidget> {
|
|||
* Widget for displaying a paginated list of Part parameters
|
||||
*/
|
||||
class PaginatedParameterList extends PaginatedSearchWidget {
|
||||
const PaginatedParameterList(Map<String, String> filters)
|
||||
const PaginatedParameterList(Map<String, String> filters, this.editable)
|
||||
: super(filters: filters);
|
||||
|
||||
final bool editable;
|
||||
|
||||
@override
|
||||
String get searchTitle => L10().parameters;
|
||||
|
||||
|
|
@ -75,7 +90,7 @@ class _PaginatedParameterState
|
|||
int offset,
|
||||
Map<String, String> params,
|
||||
) async {
|
||||
final page = await InvenTreePartParameter().listPaginated(
|
||||
final page = await InvenTreeParameter().listPaginated(
|
||||
limit,
|
||||
offset,
|
||||
filters: params,
|
||||
|
|
@ -84,7 +99,7 @@ class _PaginatedParameterState
|
|||
return page;
|
||||
}
|
||||
|
||||
Future<void> editParameter(InvenTreePartParameter parameter) async {
|
||||
Future<void> editParameter(InvenTreeParameter parameter) async {
|
||||
// Checkbox values are handled separately
|
||||
if (parameter.is_checkbox) {
|
||||
return;
|
||||
|
|
@ -101,7 +116,7 @@ class _PaginatedParameterState
|
|||
|
||||
@override
|
||||
Widget buildItem(BuildContext context, InvenTreeModel model) {
|
||||
InvenTreePartParameter parameter = model as InvenTreePartParameter;
|
||||
InvenTreeParameter parameter = model as InvenTreeParameter;
|
||||
|
||||
String title = parameter.name;
|
||||
|
||||
|
|
@ -116,7 +131,7 @@ class _PaginatedParameterState
|
|||
? Switch(
|
||||
value: parameter.as_bool,
|
||||
onChanged: (bool value) {
|
||||
if (parameter.canEdit) {
|
||||
if (widget.editable) {
|
||||
showLoadingOverlay();
|
||||
parameter.update(values: {"data": value.toString()}).then((
|
||||
value,
|
||||
|
|
@ -131,10 +146,47 @@ class _PaginatedParameterState
|
|||
onTap: parameter.is_checkbox
|
||||
? null
|
||||
: () async {
|
||||
if (parameter.canEdit) {
|
||||
if (widget.editable) {
|
||||
editParameter(parameter);
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Return a ListTile to display parameters for the specified model
|
||||
*/
|
||||
ListTile? ShowParametersItem(
|
||||
BuildContext context,
|
||||
String modelType,
|
||||
int modelId,
|
||||
int parameterCount,
|
||||
bool editable,
|
||||
) {
|
||||
// Note: Currently cannot add parameters from the app,
|
||||
// So, if there are no parameters, do not show the item
|
||||
if (parameterCount == 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (!InvenTreeAPI().supportsModernParameters) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return ListTile(
|
||||
title: Text(L10().parameters),
|
||||
leading: Icon(TablerIcons.list_details, color: COLOR_ACTION),
|
||||
trailing: LinkIcon(
|
||||
text: parameterCount > 0 ? parameterCount.toString() : null,
|
||||
),
|
||||
onTap: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) => ParameterWidget(modelType, modelId, editable),
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
|
@ -4,6 +4,8 @@ import "package:flutter_tabler_icons/flutter_tabler_icons.dart";
|
|||
|
||||
import "package:inventree/app_colors.dart";
|
||||
import "package:inventree/barcode/barcode.dart";
|
||||
import "package:inventree/inventree/attachment.dart";
|
||||
import "package:inventree/inventree/parameter.dart";
|
||||
import "package:inventree/l10.dart";
|
||||
import "package:inventree/helpers.dart";
|
||||
|
||||
|
|
@ -15,10 +17,10 @@ import "package:inventree/preferences.dart";
|
|||
|
||||
import "package:inventree/widget/attachment_widget.dart";
|
||||
import "package:inventree/widget/link_icon.dart";
|
||||
import "package:inventree/widget/parameter_widget.dart";
|
||||
import "package:inventree/widget/part/bom_list.dart";
|
||||
import "package:inventree/widget/part/part_list.dart";
|
||||
import "package:inventree/widget/notes_widget.dart";
|
||||
import "package:inventree/widget/part/part_parameter_widget.dart";
|
||||
import "package:inventree/widget/part/part_pricing.dart";
|
||||
import "package:inventree/widget/progress.dart";
|
||||
import "package:inventree/widget/part/category_display.dart";
|
||||
|
|
@ -49,13 +51,11 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> {
|
|||
|
||||
InvenTreeStockLocation? defaultLocation;
|
||||
|
||||
int parameterCount = 0;
|
||||
|
||||
bool allowLabelPrinting = false;
|
||||
bool showParameters = false;
|
||||
bool showBom = false;
|
||||
bool showPricing = false;
|
||||
|
||||
int parameterCount = 0;
|
||||
int attachmentCount = 0;
|
||||
int bomCount = 0;
|
||||
int usedInCount = 0;
|
||||
|
|
@ -152,10 +152,6 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> {
|
|||
INV_PART_SHOW_PRICING,
|
||||
true,
|
||||
);
|
||||
showParameters = await InvenTreeSettingsManager().getBool(
|
||||
INV_PART_SHOW_PARAMETERS,
|
||||
true,
|
||||
);
|
||||
showBom = await InvenTreeSettingsManager().getBool(INV_PART_SHOW_BOM, true);
|
||||
allowLabelPrinting = await InvenTreeSettingsManager().getBool(
|
||||
INV_ENABLE_LABEL_PRINTING,
|
||||
|
|
@ -212,13 +208,30 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> {
|
|||
}
|
||||
|
||||
// Request the number of attachments
|
||||
InvenTreePartAttachment().countAttachments(part.pk).then((int value) {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
attachmentCount = value;
|
||||
});
|
||||
}
|
||||
});
|
||||
if (api.supportsModernAttachments) {
|
||||
InvenTreeAttachment()
|
||||
.countAttachments(InvenTreePart.MODEL_TYPE, part.pk)
|
||||
.then((int value) {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
attachmentCount = value;
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Request the number of parameters
|
||||
if (api.supportsModernParameters) {
|
||||
InvenTreeParameter()
|
||||
.countParameters(InvenTreePart.MODEL_TYPE, part.pk)
|
||||
.then((int value) {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
parameterCount = value;
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// If show pricing information?
|
||||
if (showPricing) {
|
||||
|
|
@ -596,29 +609,31 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> {
|
|||
),
|
||||
);
|
||||
|
||||
tiles.add(
|
||||
ListTile(
|
||||
title: Text(L10().attachments),
|
||||
leading: Icon(TablerIcons.file, color: COLOR_ACTION),
|
||||
trailing: LinkIcon(
|
||||
text: attachmentCount > 0 ? attachmentCount.toString() : null,
|
||||
),
|
||||
onTap: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) => AttachmentWidget(
|
||||
InvenTreePartAttachment(),
|
||||
part.pk,
|
||||
L10().part,
|
||||
part.canEdit,
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
ListTile? parameterTile = ShowParametersItem(
|
||||
context,
|
||||
InvenTreePart.MODEL_TYPE,
|
||||
part.pk,
|
||||
parameterCount,
|
||||
part.canEdit,
|
||||
);
|
||||
|
||||
if (parameterTile != null) {
|
||||
tiles.add(parameterTile);
|
||||
}
|
||||
|
||||
ListTile? attachmentTile = ShowAttachmentsItem(
|
||||
context,
|
||||
InvenTreePart.MODEL_TYPE,
|
||||
part.pk,
|
||||
L10().part,
|
||||
attachmentCount,
|
||||
part.canEdit,
|
||||
);
|
||||
|
||||
if (attachmentTile != null) {
|
||||
tiles.add(attachmentTile);
|
||||
}
|
||||
|
||||
return tiles;
|
||||
}
|
||||
|
||||
|
|
@ -712,10 +727,6 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> {
|
|||
List<Widget> getTabIcons(BuildContext context) {
|
||||
List<Widget> icons = [Tab(text: L10().details), Tab(text: L10().stock)];
|
||||
|
||||
if (showParameters) {
|
||||
icons.add(Tab(text: L10().parameters));
|
||||
}
|
||||
|
||||
return icons;
|
||||
}
|
||||
|
||||
|
|
@ -728,11 +739,6 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> {
|
|||
),
|
||||
PaginatedStockItemList({"part": part.pk.toString()}),
|
||||
];
|
||||
|
||||
if (showParameters) {
|
||||
tabs.add(PaginatedParameterList({"part": part.pk.toString()}));
|
||||
}
|
||||
|
||||
return tabs;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import "package:inventree/app_colors.dart";
|
|||
import "package:inventree/barcode/barcode.dart";
|
||||
import "package:inventree/barcode/stock.dart";
|
||||
import "package:inventree/helpers.dart";
|
||||
import "package:inventree/inventree/attachment.dart";
|
||||
import "package:inventree/inventree/sales_order.dart";
|
||||
import "package:inventree/l10.dart";
|
||||
import "package:inventree/api.dart";
|
||||
|
|
@ -255,15 +256,15 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
|
|||
}
|
||||
|
||||
// Request the number of attachments
|
||||
InvenTreeStockItemAttachment().countAttachments(widget.item.pk).then((
|
||||
int value,
|
||||
) {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
attachmentCount = value;
|
||||
InvenTreeAttachment()
|
||||
.countAttachments(InvenTreeStockItem.MODEL_TYPE, widget.item.pk)
|
||||
.then((int value) {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
attachmentCount = value;
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// Request SalesOrder information
|
||||
if (widget.item.hasSalesOrder) {
|
||||
|
|
@ -837,29 +838,19 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
|
|||
),
|
||||
);
|
||||
|
||||
tiles.add(
|
||||
ListTile(
|
||||
title: Text(L10().attachments),
|
||||
leading: Icon(TablerIcons.file, color: COLOR_ACTION),
|
||||
trailing: LinkIcon(
|
||||
text: attachmentCount > 0 ? attachmentCount.toString() : null,
|
||||
),
|
||||
onTap: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) => AttachmentWidget(
|
||||
InvenTreeStockItemAttachment(),
|
||||
widget.item.pk,
|
||||
L10().stockItem,
|
||||
widget.item.canEdit,
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
ListTile? attachmentTile = ShowAttachmentsItem(
|
||||
context,
|
||||
InvenTreeStockItem.MODEL_TYPE,
|
||||
widget.item.pk,
|
||||
L10().stockItem,
|
||||
attachmentCount,
|
||||
widget.item.canEdit,
|
||||
);
|
||||
|
||||
if (attachmentTile != null) {
|
||||
tiles.add(attachmentTile);
|
||||
}
|
||||
|
||||
return tiles;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
60
update-flutter-nix.sh
Normal file
60
update-flutter-nix.sh
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
|
||||
# 0. Abhängigkeiten prüfen
|
||||
for cmd in jq curl sed nix; do
|
||||
command -v $cmd >/dev/null 2>&1 || { echo "Fehler: $cmd nicht installiert!"; exit 1; }
|
||||
done
|
||||
|
||||
# 1. Version aus .fvmrc extrahieren
|
||||
if [ ! -f .fvmrc ]; then
|
||||
echo "Fehler: .fvmrc nicht gefunden!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
FLUTTER_VERSION=$(jq -r .flutter .fvmrc)
|
||||
echo "Gesuchte Flutter Version: $FLUTTER_VERSION"
|
||||
|
||||
# 2. Commit-Hash und Version aus Devbox-API holen
|
||||
API_URL="https://search.devbox.sh/v2/pkg?name=flutter"
|
||||
RELEASES_JSON=$(curl -s "$API_URL")
|
||||
|
||||
# Alle Versionen extrahieren und sortieren
|
||||
ALL_VERSIONS=$(echo "$RELEASES_JSON" | jq -r '.releases[].version' | sort -V)
|
||||
|
||||
# Finde die gewünschte oder nächsthöhere Version
|
||||
FOUND_VERSION=$(echo "$ALL_VERSIONS" | awk -v v="$FLUTTER_VERSION" '$0 >= v { print; exit }')
|
||||
|
||||
if [ -z "$FOUND_VERSION" ]; then
|
||||
echo "Fehler: Keine passende Flutter-Version gefunden."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$FOUND_VERSION" != "$FLUTTER_VERSION" ]; then
|
||||
echo "Hinweis: Exakte Version nicht gefunden, benutze stattdessen Version $FOUND_VERSION."
|
||||
fi
|
||||
|
||||
# Commit-Hash für x86_64-linux extrahieren
|
||||
COMMIT=$(echo "$RELEASES_JSON" | jq -r --arg v "$FOUND_VERSION" '.releases[] | select(.version==$v) | .platforms[] | select(.system=="x86_64-linux") | .commit_hash' | head -n 1)
|
||||
|
||||
if [ -z "$COMMIT" ] || [ "$COMMIT" == "null" ]; then
|
||||
echo "Fehler: Kein Commit-Hash für Version $FOUND_VERSION und Plattform x86_64-linux gefunden."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Gefundener Commit: $COMMIT (Version: $FOUND_VERSION)"
|
||||
|
||||
|
||||
# 3. Die flake.nix patchen (Backup anlegen)
|
||||
sed -i.bak "s|nixpkgs-flutter.url = \"github:NixOS/nixpkgs/[a-f0-9]*\";|nixpkgs-flutter.url = \"github:NixOS/nixpkgs/$COMMIT\";|" flake.nix
|
||||
|
||||
# 4. Den Flake-Lock aktualisieren
|
||||
nix flake update nixpkgs-flutter
|
||||
|
||||
# 5. Optional: direnv reload
|
||||
if command -v direnv >/dev/null 2>&1; then
|
||||
direnv reload
|
||||
fi
|
||||
|
||||
echo "Erfolgreich! Die flake.nix nutzt nun den Commit für Flutter $FLUTTER_VERSION (oder höher)."
|
||||
Loading…
Add table
Add a link
Reference in a new issue