Initial version
|
|
@ -0,0 +1,160 @@
|
|||
# Byte-compiled / optimized / DLL files
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
*$py.class
|
||||
|
||||
# C extensions
|
||||
*.so
|
||||
|
||||
# Distribution / packaging
|
||||
.Python
|
||||
build/
|
||||
develop-eggs/
|
||||
dist/
|
||||
downloads/
|
||||
eggs/
|
||||
.eggs/
|
||||
lib/
|
||||
lib64/
|
||||
parts/
|
||||
sdist/
|
||||
var/
|
||||
wheels/
|
||||
share/python-wheels/
|
||||
*.egg-info/
|
||||
.installed.cfg
|
||||
*.egg
|
||||
MANIFEST
|
||||
|
||||
# PyInstaller
|
||||
# Usually these files are written by a python script from a template
|
||||
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
||||
*.manifest
|
||||
*.spec
|
||||
|
||||
# Installer logs
|
||||
pip-log.txt
|
||||
pip-delete-this-directory.txt
|
||||
|
||||
# Unit test / coverage reports
|
||||
htmlcov/
|
||||
.tox/
|
||||
.nox/
|
||||
.coverage
|
||||
.coverage.*
|
||||
.cache
|
||||
nosetests.xml
|
||||
coverage.xml
|
||||
*.cover
|
||||
*.py,cover
|
||||
.hypothesis/
|
||||
.pytest_cache/
|
||||
cover/
|
||||
|
||||
# Translations
|
||||
*.mo
|
||||
*.pot
|
||||
|
||||
# Django stuff:
|
||||
*.log
|
||||
local_settings.py
|
||||
db.sqlite3
|
||||
db.sqlite3-journal
|
||||
|
||||
# Flask stuff:
|
||||
instance/
|
||||
.webassets-cache
|
||||
|
||||
# Scrapy stuff:
|
||||
.scrapy
|
||||
|
||||
# Sphinx documentation
|
||||
docs/_build/
|
||||
|
||||
# PyBuilder
|
||||
.pybuilder/
|
||||
target/
|
||||
|
||||
# Jupyter Notebook
|
||||
.ipynb_checkpoints
|
||||
|
||||
# IPython
|
||||
profile_default/
|
||||
ipython_config.py
|
||||
|
||||
# pyenv
|
||||
# For a library or package, you might want to ignore these files since the code is
|
||||
# intended to run in multiple environments; otherwise, check them in:
|
||||
# .python-version
|
||||
|
||||
# pipenv
|
||||
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
||||
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
||||
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
||||
# install all needed dependencies.
|
||||
#Pipfile.lock
|
||||
|
||||
# poetry
|
||||
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
||||
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
||||
# commonly ignored for libraries.
|
||||
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
||||
#poetry.lock
|
||||
|
||||
# pdm
|
||||
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
||||
#pdm.lock
|
||||
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
|
||||
# in version control.
|
||||
# https://pdm.fming.dev/#use-with-ide
|
||||
.pdm.toml
|
||||
|
||||
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
||||
__pypackages__/
|
||||
|
||||
# Celery stuff
|
||||
celerybeat-schedule
|
||||
celerybeat.pid
|
||||
|
||||
# SageMath parsed files
|
||||
*.sage.py
|
||||
|
||||
# Environments
|
||||
.env
|
||||
.venv
|
||||
env/
|
||||
venv/
|
||||
ENV/
|
||||
env.bak/
|
||||
venv.bak/
|
||||
|
||||
# Spyder project settings
|
||||
.spyderproject
|
||||
.spyproject
|
||||
|
||||
# Rope project settings
|
||||
.ropeproject
|
||||
|
||||
# mkdocs documentation
|
||||
/site
|
||||
|
||||
# mypy
|
||||
.mypy_cache/
|
||||
.dmypy.json
|
||||
dmypy.json
|
||||
|
||||
# Pyre type checker
|
||||
.pyre/
|
||||
|
||||
# pytype static type analyzer
|
||||
.pytype/
|
||||
|
||||
# Cython debug symbols
|
||||
cython_debug/
|
||||
|
||||
# PyCharm
|
||||
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
||||
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
||||
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
||||
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
||||
#.idea/
|
||||
|
|
@ -0,0 +1,106 @@
|
|||
from fogbugz import FogBugz
|
||||
import sys
|
||||
from jinja2 import Template
|
||||
import os
|
||||
import urllib
|
||||
|
||||
def main():
|
||||
|
||||
S_FOGBUGZ_URL = 'https://mobileretail.fogbugz.com/'
|
||||
S_EMAIL = 'frederik.benoist@gfi.fr'
|
||||
S_PASSWORD = '6brOc-gAr6'
|
||||
MAX_BUGS = 10
|
||||
|
||||
TEMPLATE_FILE = '/Users/fbenoist68/Code/python/fogbugz/fbBackupTemplate.html'
|
||||
|
||||
fb = FogBugz(S_FOGBUGZ_URL)
|
||||
fb.logon(S_EMAIL, S_PASSWORD)
|
||||
|
||||
resp = fb.search(q='type:"Cases"',
|
||||
cols='ixBug',
|
||||
max=MAX_BUGS)
|
||||
|
||||
tmpl = Template(open(TEMPLATE_FILE,'r').read())
|
||||
|
||||
for case in resp.cases.findAll('case'):
|
||||
ixBug = int(case['ixBug'])
|
||||
print(ixBug)
|
||||
|
||||
respBug = fb.search(q='%s' % ixBug,cols ='sTitle,sPersonAssignedTo,sProject,sArea,sCategory,sPriority,events')
|
||||
xmlBug = respBug.cases.findAll('case')[0]
|
||||
|
||||
|
||||
|
||||
bug = {}
|
||||
bug['ixBug'] = int(xmlBug['ixBug'])
|
||||
bug['sTitle'] = xmlBug.sTitle.string if xmlBug.sTitle.string else ''
|
||||
bug['sPersonAssignedTo'] = xmlBug.sPersonAssignedTo.string if xmlBug.sPersonAssignedTo.string else ''
|
||||
bug['sProject'] = xmlBug.sProject.string if xmlBug.sProject.string else ''
|
||||
bug['sArea'] = xmlBug.sArea.string if xmlBug.sArea.string else ''
|
||||
bug['sCategory'] = xmlBug.sCategory.string if xmlBug.sCategory.string else ''
|
||||
bug['sPriority'] = xmlBug.sPriority.string if xmlBug.sPriority.string else ''
|
||||
bug['events'] = []
|
||||
|
||||
BACKUP_DIR = '/Users/fbenoist68/Code/python/fogbugz/fogbackup'
|
||||
BACKUP_DIR += '/' + xmlBug.sProject.string if xmlBug.sProject.string else ''
|
||||
|
||||
if not os.path.exists(BACKUP_DIR):
|
||||
os.makedirs(BACKUP_DIR)
|
||||
|
||||
BACKUP_DIR += '/' + str(xmlBug['ixBug'])
|
||||
|
||||
if not os.path.exists(BACKUP_DIR):
|
||||
os.makedirs(BACKUP_DIR)
|
||||
|
||||
for event in xmlBug.events.findAll('event'):
|
||||
bugEvent = {}
|
||||
bugEvent['ixBugEvent'] = int(event['ixBugEvent'])
|
||||
bugEvent['sVerb'] = event.sVerb.string if event.sVerb.string else ''
|
||||
bugEvent['dt'] = event.dt.string if event.dt.string else ''
|
||||
bugEvent['s'] = event.s.string if event.s.string else ''
|
||||
bugEvent['sChanges'] = event.sChanges.string if event.sChanges.string else ''
|
||||
bugEvent['evtDescription'] = event.evtDescription.string if event.evtDescription.string else ''
|
||||
bugEvent['sPerson'] = event.sPerson.string if event.sPerson.string else ''
|
||||
bugEvent['s'] = event.s.string.encode('ascii', 'ignore').decode('utf-8') if event.s.string else ''
|
||||
theAttachments = ''
|
||||
|
||||
for att in event.rgAttachments:
|
||||
theAttachments += 'Attachment: ' +att.sFileName.string + '\n'
|
||||
|
||||
print('Downloading attachment: ' + att.sFileName.string)
|
||||
str1 = att.sURL.string
|
||||
str2 = 'ixAttachment='
|
||||
loc1 = str1.find(str2) + len(str2)
|
||||
loc2 = str1.find('&sFileName')
|
||||
|
||||
str3 = ';sFileName='
|
||||
loc3 = str1.find(str3) + len(str3)
|
||||
loc4 = str1.find('&sTicket')
|
||||
|
||||
theURL = S_FOGBUGZ_URL #+ att.sURL.string
|
||||
theURL += 'default.asp?'
|
||||
theURL += 'ixAttachment=' + str1[loc1:loc2]
|
||||
theURL += '&pg=pgDownload&pgType=pgFile&sFilename=' + str1[loc3:loc4]
|
||||
theURL += '&token=rnl0t87rp34rfg6q0u0rgbhe85v5r8'
|
||||
|
||||
#fix the replace
|
||||
newFileName = att.sFileName.string.replace('/','')
|
||||
newFileName = newFileName.replace(':','')
|
||||
newFileName = BACKUP_DIR+'/'+newFileName
|
||||
print(newFileName)
|
||||
urllib.request.urlretrieve(theURL, newFileName)
|
||||
bugEvent['attachment'] = theAttachments
|
||||
bug['events'].append(bugEvent)
|
||||
|
||||
|
||||
|
||||
|
||||
f = open('%s\\%s.html' % (BACKUP_DIR,bug['ixBug']),'w')
|
||||
f.write(tmpl.render(bug=bug))
|
||||
f.close()
|
||||
fb.view(ixBug=ixBug)
|
||||
|
||||
|
||||
main()
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,232 @@
|
|||
import requests
|
||||
from fogbugz import FogBugz
|
||||
import os
|
||||
import urllib
|
||||
import mimetypes
|
||||
import re
|
||||
|
||||
GITEA_INSTANCE_URL = 'https://gitea.q2ii.fr'
|
||||
GITEA_API_TOKEN = 'e5595a8807eb22fed9663c67553609832aaac909'
|
||||
OWNER = 'fbenoist68'
|
||||
REPO = 'mobileportal'
|
||||
S_FOGBUGZ_URL = 'https://mobileretail.fogbugz.com/'
|
||||
S_EMAIL = 'frederik.benoist@gfi.fr'
|
||||
S_PASSWORD = '6brOc-gAr6'
|
||||
MAX_BUGS = 999
|
||||
|
||||
def create_gitea_issue(title, body):
|
||||
headers = {
|
||||
'Authorization': 'token ' + GITEA_API_TOKEN
|
||||
}
|
||||
|
||||
data = {
|
||||
'title': title,
|
||||
'body': body
|
||||
}
|
||||
|
||||
url = f'{GITEA_INSTANCE_URL}/api/v1/repos/{OWNER}/{REPO}/issues'
|
||||
response = requests.post(url, json=data, headers=headers)
|
||||
|
||||
if response.status_code == 201:
|
||||
print('Issue created successfully.')
|
||||
return response.json()['number']
|
||||
else:
|
||||
print('Failed to create issue:', response.text)
|
||||
return None
|
||||
|
||||
def create_gitea_comment(issue_number, comment):
|
||||
headers = {
|
||||
'Authorization': 'token ' + GITEA_API_TOKEN
|
||||
}
|
||||
|
||||
data = {
|
||||
'body': comment
|
||||
}
|
||||
|
||||
url = f'{GITEA_INSTANCE_URL}/api/v1/repos/{OWNER}/{REPO}/issues/{issue_number}/comments'
|
||||
response = requests.post(url, json=data, headers=headers)
|
||||
|
||||
if response.status_code == 201:
|
||||
print('Comment created successfully.')
|
||||
comment_id = response.json()['id']
|
||||
return comment_id
|
||||
else:
|
||||
print('Failed to create comment:', response.text)
|
||||
return None
|
||||
|
||||
|
||||
def upload_attachment_to_gitea_event(filename, attachment_data, comment_id):
|
||||
headers = {
|
||||
'Authorization': 'token ' + GITEA_API_TOKEN
|
||||
}
|
||||
|
||||
# Determine the content type based on the file extension
|
||||
content_type, _ = mimetypes.guess_type(filename)
|
||||
if not content_type:
|
||||
content_type = 'application/octet-stream'
|
||||
|
||||
data = {
|
||||
'name': filename,
|
||||
'attachment': (filename, attachment_data, content_type), # Provide the content type here
|
||||
}
|
||||
|
||||
url = f'{GITEA_INSTANCE_URL}/api/v1/repos/{OWNER}/{REPO}/issues/comments/{comment_id}/assets'
|
||||
response = requests.post(url, files=data, headers=headers)
|
||||
|
||||
if response.status_code == 201:
|
||||
print('Attachment linked successfully to the event.')
|
||||
|
||||
# Get the browser_download_url from the response
|
||||
download_url = response.json().get('browser_download_url')
|
||||
print('Download URL:', download_url)
|
||||
return download_url
|
||||
else:
|
||||
print('Failed to link attachment:', response.text)
|
||||
return None
|
||||
|
||||
def update_gitea_comment(comment_id, updated_sHtml):
|
||||
headers = {
|
||||
'Authorization': 'token ' + GITEA_API_TOKEN
|
||||
}
|
||||
|
||||
GITEA_PATCH_URL = f'{GITEA_INSTANCE_URL}/api/v1/repos/{OWNER}/{REPO}/issues/comments/{comment_id}'
|
||||
patch_data = {
|
||||
'body': updated_sHtml
|
||||
}
|
||||
response = requests.patch(GITEA_PATCH_URL, json=patch_data, headers=headers)
|
||||
|
||||
if response.status_code == 200:
|
||||
print('Comment updated successfully.')
|
||||
else:
|
||||
print('Failed to update comment:', response.text)
|
||||
|
||||
def get_issue_id(issue):
|
||||
return int(issue['ixBug'])
|
||||
|
||||
def get_event_id(event):
|
||||
return int(event['ixBugEvent'])
|
||||
|
||||
def main():
|
||||
fb = FogBugz(S_FOGBUGZ_URL)
|
||||
fb.logon(S_EMAIL, S_PASSWORD)
|
||||
|
||||
resp = fb.search(q='type:"Cases"',
|
||||
cols='ixBug',
|
||||
max=MAX_BUGS)
|
||||
|
||||
for case in sorted(resp.cases.findAll('case'), key=get_issue_id, reverse=False):
|
||||
ixBug = int(case['ixBug'])
|
||||
|
||||
if ixBug >= 242: # 93,242
|
||||
print(ixBug)
|
||||
|
||||
respBug = fb.search(q='%s' % ixBug, cols='sTitle,sPersonAssignedTo,sProject,sArea,sCategory,sPriority,events')
|
||||
xmlBug = respBug.cases.findAll('case')[0]
|
||||
|
||||
BACKUP_DIR = '/Users/fbenoist68/Code/python/fogbugz/fogbackup'
|
||||
BACKUP_DIR += '/' + xmlBug.sProject.string if xmlBug.sProject.string else ''
|
||||
|
||||
if not os.path.exists(BACKUP_DIR):
|
||||
os.makedirs(BACKUP_DIR)
|
||||
|
||||
BACKUP_DIR += '/' + str(xmlBug['ixBug'])
|
||||
|
||||
if not os.path.exists(BACKUP_DIR):
|
||||
os.makedirs(BACKUP_DIR)
|
||||
|
||||
# Create Gitea issue
|
||||
issue_title = f"[FogBugz #{ixBug}] {xmlBug.sTitle.string if xmlBug.sTitle.string else ''}"
|
||||
issue_body = f"Assigned To: {xmlBug.sPersonAssignedTo.string}\n"
|
||||
issue_body += f"Project: {xmlBug.sProject.string}\n"
|
||||
issue_body += f"Area: {xmlBug.sArea.string}\n"
|
||||
issue_body += f"Category: {xmlBug.sCategory.string}\n"
|
||||
issue_body += f"Priority: {xmlBug.sPriority.string}\n"
|
||||
|
||||
issue_number = create_gitea_issue(issue_title, issue_body)
|
||||
|
||||
if issue_number is not None:
|
||||
# Create Gitea comment for each event in reverse !!
|
||||
for event in sorted(xmlBug.events.findAll('event'), key=get_event_id, reverse=True):
|
||||
bugEvent = {}
|
||||
bugEvent['ixBugEvent'] = int(event['ixBugEvent'])
|
||||
bugEvent['sVerb'] = event.sVerb.string if event.sVerb.string else ''
|
||||
bugEvent['dt'] = event.dt.string if event.dt.string else ''
|
||||
bugEvent['s'] = event.s.string if event.s.string else ''
|
||||
bugEvent['sChanges'] = event.sChanges.string if event.sChanges.string else ''
|
||||
bugEvent['evtDescription'] = event.evtDescription.string if event.evtDescription.string else ''
|
||||
bugEvent['sPerson'] = event.sPerson.string if event.sPerson.string else ''
|
||||
|
||||
if event.s and event.s.string:
|
||||
bugEvent['s'] = event.s.string.encode('ascii', 'ignore').decode('utf-8')
|
||||
else:
|
||||
bugEvent['s'] = ''
|
||||
|
||||
if event.sHtml and event.sHtml.string:
|
||||
bugEvent['sHtml'] = event.sHtml.string.encode('ascii', 'ignore').decode('utf-8')
|
||||
else:
|
||||
bugEvent['sHtml'] = ''
|
||||
|
||||
comment = f"Event ID: {bugEvent['ixBugEvent']}\n"
|
||||
comment += f"Date: {bugEvent['dt']}\n"
|
||||
comment += f"Person: {bugEvent['sPerson']}\n"
|
||||
comment += f"Description: {bugEvent['evtDescription']}\n\n\n"
|
||||
|
||||
# Afficher sHtml s'il n'est pas vide, sinon afficher s
|
||||
content = bugEvent['sHtml'] if bugEvent['sHtml'] else bugEvent['s']
|
||||
comment += f"{content}"
|
||||
|
||||
comment_id = create_gitea_comment(issue_number=issue_number, comment=comment)
|
||||
print('comment id',comment_id);
|
||||
|
||||
if comment_id is not None:
|
||||
new_links = {}
|
||||
|
||||
for att in event.rgAttachments:
|
||||
print('Downloading attachment: ' + att.sFileName.string)
|
||||
str1 = att.sURL.string
|
||||
str2 = 'ixAttachment='
|
||||
loc1 = str1.find(str2) + len(str2)
|
||||
loc2 = str1.find('&sFileName')
|
||||
|
||||
str3 = ';sFileName='
|
||||
loc3 = str1.find(str3) + len(str3)
|
||||
loc4 = str1.find('&sTicket')
|
||||
|
||||
theURL = S_FOGBUGZ_URL # + att.sURL.string
|
||||
theURL += 'default.asp?'
|
||||
theURL += 'ixAttachment=' + str1[loc1:loc2]
|
||||
theURL += '&pg=pgDownload&pgType=pgFile&sFilename=' + str1[loc3:loc4]
|
||||
theURL += '&token=rnl0t87rp34rfg6q0u0rgbhe85v5r8'
|
||||
|
||||
# fix the replace
|
||||
newFileName = att.sFileName.string.replace('/', '')
|
||||
newFileName = newFileName.replace(':', '')
|
||||
newFileName = BACKUP_DIR + '/' + newFileName
|
||||
print(newFileName)
|
||||
urllib.request.urlretrieve(theURL, newFileName)
|
||||
|
||||
with open(newFileName, 'rb') as attachment_file:
|
||||
attachment_data = attachment_file.read()
|
||||
|
||||
print('Uploading screenshot:', att.sFileName.string)
|
||||
download_url = upload_attachment_to_gitea_event(att.sFileName.string, attachment_data, comment_id)
|
||||
|
||||
if download_url:
|
||||
# Stocker le nouveau lien avec l'ID de l'attachement comme clé
|
||||
new_links[str1[loc1:loc2]] = download_url
|
||||
|
||||
if new_links:
|
||||
# Remplacer les liens d'attachement dans sHtml avec les nouvelles URLs
|
||||
updated_sHtml = comment
|
||||
|
||||
for att_id, download_url in new_links.items():
|
||||
# Utilisation d'une expression régulière pour trouver les liens img avec ixAttachment=574
|
||||
pattern = fr'<img[^>]*?ixAttachment={att_id}[^>]*>'
|
||||
|
||||
# Remplacement de tous les liens correspondant au modèle par le nouveau download_url
|
||||
updated_sHtml = re.sub(pattern, f'<img src="{download_url}"/>', updated_sHtml)
|
||||
|
||||
update_gitea_comment(comment_id, updated_sHtml)
|
||||
|
||||
fb.view(ixBug=ixBug)
|
||||
main()
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>{{bug.ixBug|e}} | {{bug.sTitle|e}}</title>
|
||||
<style type="text/css">
|
||||
.bugHeader {
|
||||
outline-width: 2px;
|
||||
outline-style: solid;
|
||||
width: 90%;
|
||||
padding: 5px;
|
||||
background: #B8DDFF;
|
||||
font: 24px "Trebuchet MS", Arial, Helvetica, sans-serif;
|
||||
}
|
||||
.bugEvent {
|
||||
outline-width: 2px;
|
||||
outline-style: solid;
|
||||
outline-color: blue;
|
||||
width: 90%;
|
||||
padding: 5px;
|
||||
background: #D2E9FF;
|
||||
font: 12px Arial, Helvetica, sans-serif;
|
||||
}
|
||||
|
||||
pre.s {
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="bugHeader">
|
||||
<span class="ixBug">Bug ID: {{bug.ixBug|e}}</span><br>
|
||||
<span class="sTitle">Title: {{bug.sTitle|e}}</span><br>
|
||||
<span class="sPersonAssignedTo">Assigned To: {{bug.sPersonAssignedTo|e}}</span><br>
|
||||
<span class="sProject">Project: {{bug.sProject|e}}</span><br>
|
||||
<span class="sArea">Area: {{bug.sArea|e}}</span><br>
|
||||
<span class="sCategory">Category: {{bug.sCategory|e}}</span><br>
|
||||
<span class="sPriority">Title: {{bug.sPriority|e}}</span><br>
|
||||
</div>
|
||||
<div class="bugEvents">
|
||||
{% for event in bug.events %}
|
||||
<div class="bugEvent">
|
||||
<span class="ixBugEvent">BugEvent ID: {{event.ixBugEvent|e}}</span><br>
|
||||
<span class="dt">Date/Time: {{event.dt|e}}</span><br>
|
||||
<span class="sVerb">Verb: {{event.sVerb|e}}</span><br>
|
||||
<span class="evtDescription">Event Description: {{event.evtDescription|e}}</span><br>
|
||||
<span class="sChanges">Changes: {{event.sChanges|e}}</span><br>
|
||||
<span class="sPerson">Person: {{event.sPerson|e}}</span><br>
|
||||
<span class="Text">Text: </span><br>
|
||||
<pre class="s">{{event.s|e}}</pre><br>
|
||||
<pre class="s">{{event.attachment|e}}</pre><br>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
After Width: | Height: | Size: 51 KiB |
|
|
@ -0,0 +1,415 @@
|
|||
/* Formatted on 19/02/2013 16:27:45 (QP5 v5.206) */
|
||||
SELECT a0a1a0a0.id_produit AS a0a1a0a0a1,
|
||||
a0a1a0a0.id_famille AS a0a1a0a0a4,
|
||||
a0a1a0a0.code_modele AS a0a1a0a0a3,
|
||||
a0a1a0a0.id_type_produit AS a0a1a0a0a2,
|
||||
a0a1a0a0.id_type_axe_valeur1 AS a0a1a0a0a6,
|
||||
a0a1a0a0.id_type_axe_valeur2 AS a0a1a0a0a7,
|
||||
a0a1a0a0.id_type_axe_valeur3 AS a0a1a0a0a8,
|
||||
a0a1a0a0.id_type_axe_valeur4 AS a0a1a0a0a9,
|
||||
a0a1a0a0.id_taxe AS a0a1a0a0a10,
|
||||
a0a1a0a0.id_marque AS a0a1a0a0a21,
|
||||
a0a1a0a0.id_structure AS a0a1a0a0a28,
|
||||
a0a1a0a0.code_reference AS a0a1a0a0a11,
|
||||
a0a1a0a0.nom AS a0a1a0a0a5,
|
||||
a0a1a0a0.garantie_plantation AS a0a1a0a0a12,
|
||||
a0a1a0a0.troc_axe1 AS a0a1a0a0a13,
|
||||
a0a1a0a0.troc_axe2 AS a0a1a0a0a14,
|
||||
a0a1a0a0.troc_axe3 AS a0a1a0a0a15,
|
||||
a0a1a0a0.troc_axe4 AS a0a1a0a0a16,
|
||||
a0a1a0a0.messagecentrale AS a0a1a0a0a17,
|
||||
a0a1a0a0.ecotaxe AS a0a1a0a0a18,
|
||||
a0a1a0a0.ecotaxe_tva AS a0a1a0a0a19,
|
||||
a0a1a0a0.prix_vente AS a0a1a0a0a20,
|
||||
a0a1a0a0.reference_constructeur AS a0a1a0a0a22,
|
||||
a0a1a0a0.garantie_5_ans AS a0a1a0a0a26,
|
||||
a0a1a0a0.garantieenpourcent AS a0a1a0a0a27,
|
||||
a0a1a0a0.gestion_valeur AS a0a1a0a0a29,
|
||||
a0a1a0a0.prochaine_reference AS a0a1a0a0a30,
|
||||
a0a1a0a0.id_etat AS a0a1a0a0a31,
|
||||
a0a1a0a0.annules AS a0a1a0a0a32,
|
||||
a0a1a0a0.abandonnes AS a0a1a0a0a33,
|
||||
a1a154a1a0.id_type_carte AS a1a154a1a0a6941,
|
||||
a1a154a1a0.id_produit AS a1a154a1a0a6942,
|
||||
a1a154a1a0.capoint AS a1a154a1a0a6943,
|
||||
a1a154a1a0.capointremise AS a1a154a1a0a6944,
|
||||
a1a134a1a0.id_marque AS a1a134a1a0a6141,
|
||||
a1a134a1a0.nom AS a1a134a1a0a6142,
|
||||
a1a20a1a0.produit_bipable AS a1a20a1a0a722,
|
||||
a1a20a1a0.id_type_produit AS a1a20a1a0a721,
|
||||
a20a21a2a0.id_type_produit AS a20a21a2a0a761,
|
||||
a20a21a2a0.id_distrib AS a20a21a2a0a762,
|
||||
a20a21a2a0.accept_repart_remis_pd_tick AS a20a21a2a0a782,
|
||||
a20a21a2a0.afficher_dans_panneau_bouton AS a20a21a2a0a777,
|
||||
a20a21a2a0.autoriser_retour AS a20a21a2a0a775,
|
||||
a20a21a2a0.couleur AS a20a21a2a0a776,
|
||||
a20a21a2a0.dispo_mode_deconnecte AS a20a21a2a0a781,
|
||||
a20a21a2a0.exclure_calcul_fidelisation AS a20a21a2a0a784,
|
||||
a20a21a2a0.exclure_calcul_op_commercial AS a20a21a2a0a785,
|
||||
a20a21a2a0.forcer_selection_consommateur AS a20a21a2a0a763,
|
||||
a20a21a2a0.forcer_selection_motif AS a20a21a2a0a765,
|
||||
a20a21a2a0.print_comme_ligne_sur_ticket AS a20a21a2a0a766,
|
||||
a20a21a2a0.imprimer_en_pied_ticket AS a20a21a2a0a768,
|
||||
a20a21a2a0.montant_mini AS a20a21a2a0a770,
|
||||
a20a21a2a0.montant_modifiable AS a20a21a2a0a773,
|
||||
a20a21a2a0.pourcentage_mini_total_ticket AS a20a21a2a0a771,
|
||||
a20a21a2a0.quantite_modifiable AS a20a21a2a0a774,
|
||||
a20a21a2a0.remise_interdite AS a20a21a2a0a783,
|
||||
a20a21a2a0.saisie_montant AS a20a21a2a0a764,
|
||||
a20a21a2a0.sens_accepte AS a20a21a2a0a769,
|
||||
a20a21a2a0.texte_remplacement_mt_null AS a20a21a2a0a772,
|
||||
a20a21a2a0.total_en_pied_ticket AS a20a21a2a0a767,
|
||||
a20a21a2a0.type_remise_maxi AS a20a21a2a0a778,
|
||||
a20a21a2a0.un_seul_par_ticket AS a20a21a2a0a780,
|
||||
a20a21a2a0.valeur_remise_maxi AS a20a21a2a0a779,
|
||||
a20a21a2a0.prefix_code_barre AS a20a21a2a0a786,
|
||||
a20a21a2a0.longueur_code_barre AS a20a21a2a0a787,
|
||||
a20a21a2a0.type_code_barre AS a20a21a2a0a788,
|
||||
a20a21a2a0.id_type_bon_achat AS a20a21a2a0a789,
|
||||
a20a21a2a0.gestion_stock AS a20a21a2a0a792,
|
||||
a20a21a2a0.impressionba AS a20a21a2a0a791,
|
||||
a21a26a3a0.id_type_produit AS a21a26a3a0a1001,
|
||||
a21a26a3a0.id_distrib AS a21a26a3a0a1002,
|
||||
a21a26a3a0.code_motif AS a21a26a3a0a1003,
|
||||
a21a26a3a0.date_deb AS a21a26a3a0a1004,
|
||||
a21a26a3a0.date_fin AS a21a26a3a0a1005,
|
||||
a21a26a3a0.id_pays AS a21a26a3a0a1006,
|
||||
a26a27a4a0.code_motif AS a26a27a4a0a1041,
|
||||
a26a27a4a0.forcer_selection_vendeur AS a26a27a4a0a1044,
|
||||
a26a27a4a0.autoris_saisie_nouveau_prix AS a26a27a4a0a1050,
|
||||
a26a27a4a0.deductible_du_total_ticket AS a26a27a4a0a1049,
|
||||
a26a27a4a0.deduire_remise_pour_retour AS a26a27a4a0a1048,
|
||||
a26a27a4a0.detail_par_ligne_article AS a26a27a4a0a1046,
|
||||
a26a27a4a0.libelle AS a26a27a4a0a1042,
|
||||
a26a27a4a0.libellecourt AS a26a27a4a0a1043,
|
||||
a26a27a4a0.message_sur_ticket AS a26a27a4a0a1051,
|
||||
a26a27a4a0.possible_pour_pied_ticket AS a26a27a4a0a1056,
|
||||
a26a27a4a0.possible_pour_sous_total AS a26a27a4a0a1055,
|
||||
a26a27a4a0.saisie_commentaire AS a26a27a4a0a1045,
|
||||
a26a27a4a0.sens_valeur_accepte AS a26a27a4a0a1052,
|
||||
a26a27a4a0.total_en_pied_de_ticket AS a26a27a4a0a1047,
|
||||
a26a27a4a0.type_valeur AS a26a27a4a0a1053,
|
||||
a26a27a4a0.valeur_defaut AS a26a27a4a0a1054,
|
||||
a26a27a4a0.restockage_produit_retour AS a26a27a4a0a1057,
|
||||
a26a27a4a0.alimenter_panier_litige AS a26a27a4a0a1058,
|
||||
a26a27a4a0.valeur_maxi AS a26a27a4a0a1059,
|
||||
a27a103a5a0.code_motif AS a27a103a5a0a4901,
|
||||
a27a103a5a0.code AS a27a103a5a0a4902,
|
||||
a27a103a5a0.libelle AS a27a103a5a0a4903,
|
||||
a27a103a5a0.libellecourt AS a27a103a5a0a4904,
|
||||
a21a57a3a0.id_type_bon_achat AS a21a57a3a0a2241,
|
||||
a21a57a3a0.prefix_code_barre AS a21a57a3a0a2242,
|
||||
a21a57a3a0.libelle AS a21a57a3a0a2243,
|
||||
a21a57a3a0.longueur AS a21a57a3a0a2244,
|
||||
a21a57a3a0.TYPE AS a21a57a3a0a2245,
|
||||
a21a57a3a0.duree_validite_en_jours AS a21a57a3a0a2246,
|
||||
a21a57a3a0.remonter_client AS a21a57a3a0a2247,
|
||||
a57a120a4a0.id_type_bon_achat AS a57a120a4a0a5581,
|
||||
a57a120a4a0.id_distrib AS a57a120a4a0a5582,
|
||||
a57a120a4a0.duree_validite_en_jours AS a57a120a4a0a5583,
|
||||
a57a120a4a0.secable AS a57a120a4a0a5584,
|
||||
a1a99a1a0.id_produit AS a1a99a1a0a4741,
|
||||
a1a99a1a0.code AS a1a99a1a0a4742,
|
||||
a1a99a1a0.nom AS a1a99a1a0a4743,
|
||||
a1a99a1a0.troc_axe1 AS a1a99a1a0a4744,
|
||||
a1a99a1a0.troc_axe2 AS a1a99a1a0a4745,
|
||||
a1a99a1a0.troc_axe3 AS a1a99a1a0a4746,
|
||||
a1a99a1a0.troc_axe4 AS a1a99a1a0a4747,
|
||||
a1a99a1a0.messagecentrale AS a1a99a1a0a4748,
|
||||
a1a15a1a0.id_produit AS a1a15a1a0a562,
|
||||
a1a15a1a0.code_barre AS a1a15a1a0a561,
|
||||
a1a24a1a0.id_taxe AS a1a24a1a0a921,
|
||||
a1a24a1a0.nom AS a1a24a1a0a922,
|
||||
a24a25a2a0.id_pays AS a24a25a2a0a961,
|
||||
a24a25a2a0.id_taxe AS a24a25a2a0a962,
|
||||
a24a25a2a0.pourcentage AS a24a25a2a0a963,
|
||||
a24a25a2a0.nom AS a24a25a2a0a964,
|
||||
a25a161a3a0.id_pays AS a25a161a3a0a7122,
|
||||
a25a161a3a0.id_taxe AS a25a161a3a0a7121,
|
||||
a25a161a3a0.date_deb AS a25a161a3a0a7123,
|
||||
a25a161a3a0.pourcentage AS a25a161a3a0a7125,
|
||||
a25a161a3a0.date_fin AS a25a161a3a0a7124,
|
||||
a1a119a1a0.id_pays AS a1a119a1a0a5541,
|
||||
a1a119a1a0.id_produit AS a1a119a1a0a5542,
|
||||
a1a119a1a0.id_taxe AS a1a119a1a0a5543,
|
||||
a119a24a2a1.id_taxe AS a119a24a2a1a921,
|
||||
a119a24a2a1.nom AS a119a24a2a1a922,
|
||||
a24a25a3a1.id_pays AS a24a25a3a1a961,
|
||||
a24a25a3a1.id_taxe AS a24a25a3a1a962,
|
||||
a24a25a3a1.pourcentage AS a24a25a3a1a963,
|
||||
a24a25a3a1.nom AS a24a25a3a1a964,
|
||||
a25a161a4a1.id_pays AS a25a161a4a1a7122,
|
||||
a25a161a4a1.id_taxe AS a25a161a4a1a7121,
|
||||
a25a161a4a1.date_deb AS a25a161a4a1a7123,
|
||||
a25a161a4a1.pourcentage AS a25a161a4a1a7125,
|
||||
a25a161a4a1.date_fin AS a25a161a4a1a7124,
|
||||
a1a126a1a0.id_distrib AS a1a126a1a0a5821,
|
||||
a1a126a1a0.id_structure AS a1a126a1a0a5822,
|
||||
a1a126a1a0.id_produit AS a1a126a1a0a5823,
|
||||
a1a126a1a0.id_carte_fidelite_type AS a1a126a1a0a5825,
|
||||
a1a126a1a0.garantie AS a1a126a1a0a5824,
|
||||
a1a4a1a0.id_famille AS a1a4a1a0a81,
|
||||
a1a4a1a0.id_famille_parent AS a1a4a1a0a82,
|
||||
a1a4a1a0.id_type_axe1 AS a1a4a1a0a83,
|
||||
a1a4a1a0.id_type_axe2 AS a1a4a1a0a84,
|
||||
a1a4a1a0.id_type_axe3 AS a1a4a1a0a85,
|
||||
a1a4a1a0.id_type_axe4 AS a1a4a1a0a86,
|
||||
a1a4a1a0.niveau AS a1a4a1a0a87,
|
||||
a1a4a1a0.id_couleur AS a1a4a1a0a89,
|
||||
a1a4a1a0.nom AS a1a4a1a0a88,
|
||||
a1a4a1a0.ecotaxe AS a1a4a1a0a90,
|
||||
a1a4a1a0.garantie_par_defaut AS a1a4a1a0a91,
|
||||
a1a4a1a0.saisie_serie AS a1a4a1a0a92,
|
||||
a1a4a1a0.extension_garantie AS a1a4a1a0a93,
|
||||
a1a4a1a0.code_externe AS a1a4a1a0a94,
|
||||
a4a137a2a0.id_type_carte AS a4a137a2a0a6261,
|
||||
a4a137a2a0.id_famille AS a4a137a2a0a6262,
|
||||
a4a137a2a0.capoint AS a4a137a2a0a6263,
|
||||
a4a137a2a0.capointremise AS a4a137a2a0a6264,
|
||||
a1a4a1a1.id_famille AS a1a4a1a1a81,
|
||||
a1a4a1a1.id_famille_parent AS a1a4a1a1a82,
|
||||
a1a4a1a1.id_type_axe1 AS a1a4a1a1a83,
|
||||
a1a4a1a1.id_type_axe2 AS a1a4a1a1a84,
|
||||
a1a4a1a1.id_type_axe3 AS a1a4a1a1a85,
|
||||
a1a4a1a1.id_type_axe4 AS a1a4a1a1a86,
|
||||
a1a4a1a1.niveau AS a1a4a1a1a87,
|
||||
a1a4a1a1.id_couleur AS a1a4a1a1a89,
|
||||
a1a4a1a1.nom AS a1a4a1a1a88,
|
||||
a1a4a1a1.ecotaxe AS a1a4a1a1a90,
|
||||
a1a4a1a1.garantie_par_defaut AS a1a4a1a1a91,
|
||||
a1a4a1a1.saisie_serie AS a1a4a1a1a92,
|
||||
a1a4a1a1.extension_garantie AS a1a4a1a1a93,
|
||||
a1a4a1a1.code_externe AS a1a4a1a1a94,
|
||||
a1a4a1a2.id_famille AS a1a4a1a2a81,
|
||||
a1a4a1a2.id_famille_parent AS a1a4a1a2a82,
|
||||
a1a4a1a2.id_type_axe1 AS a1a4a1a2a83,
|
||||
a1a4a1a2.id_type_axe2 AS a1a4a1a2a84,
|
||||
a1a4a1a2.id_type_axe3 AS a1a4a1a2a85,
|
||||
a1a4a1a2.id_type_axe4 AS a1a4a1a2a86,
|
||||
a1a4a1a2.niveau AS a1a4a1a2a87,
|
||||
a1a4a1a2.id_couleur AS a1a4a1a2a89,
|
||||
a1a4a1a2.nom AS a1a4a1a2a88,
|
||||
a1a4a1a2.ecotaxe AS a1a4a1a2a90,
|
||||
a1a4a1a2.garantie_par_defaut AS a1a4a1a2a91,
|
||||
a1a4a1a2.saisie_serie AS a1a4a1a2a92,
|
||||
a1a4a1a2.extension_garantie AS a1a4a1a2a93,
|
||||
a1a4a1a2.code_externe AS a1a4a1a2a94,
|
||||
a1a4a1a3.id_famille AS a1a4a1a3a81,
|
||||
a1a4a1a3.id_famille_parent AS a1a4a1a3a82,
|
||||
a1a4a1a3.id_type_axe1 AS a1a4a1a3a83,
|
||||
a1a4a1a3.id_type_axe2 AS a1a4a1a3a84,
|
||||
a1a4a1a3.id_type_axe3 AS a1a4a1a3a85,
|
||||
a1a4a1a3.id_type_axe4 AS a1a4a1a3a86,
|
||||
a1a4a1a3.niveau AS a1a4a1a3a87,
|
||||
a1a4a1a3.id_couleur AS a1a4a1a3a89,
|
||||
a1a4a1a3.nom AS a1a4a1a3a88,
|
||||
a1a4a1a3.ecotaxe AS a1a4a1a3a90,
|
||||
a1a4a1a3.garantie_par_defaut AS a1a4a1a3a91,
|
||||
a1a4a1a3.saisie_serie AS a1a4a1a3a92,
|
||||
a1a4a1a3.extension_garantie AS a1a4a1a3a93,
|
||||
a1a4a1a3.code_externe AS a1a4a1a3a94,
|
||||
a1a17a1a0.id AS a1a17a1a0a641,
|
||||
a1a17a1a0.id_type_axe AS a1a17a1a0a642,
|
||||
a1a17a1a0.id_principal AS a1a17a1a0a643,
|
||||
a1a17a1a0.valeur AS a1a17a1a0a644,
|
||||
a1a17a1a0.code_externe AS a1a17a1a0a645,
|
||||
a17a18a2a0.id AS a17a18a2a0a681,
|
||||
a17a18a2a0.code AS a17a18a2a0a682,
|
||||
a17a18a2a0.libelle AS a17a18a2a0a683,
|
||||
a17a18a2a0.valeur AS a17a18a2a0a684,
|
||||
a17a18a2a0.code_externe AS a17a18a2a0a685,
|
||||
a1a17a1a1.id AS a1a17a1a1a641,
|
||||
a1a17a1a1.id_type_axe AS a1a17a1a1a642,
|
||||
a1a17a1a1.id_principal AS a1a17a1a1a643,
|
||||
a1a17a1a1.valeur AS a1a17a1a1a644,
|
||||
a1a17a1a1.code_externe AS a1a17a1a1a645,
|
||||
a1a91a1a0.id_ligne AS a1a91a1a0a4381,
|
||||
a1a91a1a0.id_catalogue AS a1a91a1a0a4382,
|
||||
a1a91a1a0.id_produit AS a1a91a1a0a4383,
|
||||
a1a95a1a0.id_produit AS a1a95a1a0a4581,
|
||||
a1a95a1a0.id_pays AS a1a95a1a0a4582,
|
||||
a1a95a1a0.ecotaxe AS a1a95a1a0a4583,
|
||||
a1a11a1a0.id_tarif AS a1a11a1a0a401,
|
||||
a1a11a1a0.id_produit AS a1a11a1a0a402,
|
||||
a1a11a1a0.prix_vente AS a1a11a1a0a403,
|
||||
a1a11a1a0.prix_vente_points AS a1a11a1a0a404,
|
||||
a1a11a1a0.points_prix_vente AS a1a11a1a0a405,
|
||||
a1a11a1a0.points AS a1a11a1a0a406,
|
||||
a1a11a1a0.prix_minimal AS a1a11a1a0a407,
|
||||
a11a14a2a0.id_tarif AS a11a14a2a0a521,
|
||||
a11a14a2a0.id_structure AS a11a14a2a0a522,
|
||||
a11a14a2a0.datedeb AS a11a14a2a0a523,
|
||||
a11a14a2a0.datefin AS a11a14a2a0a524,
|
||||
a11a14a2a0.datecreation AS a11a14a2a0a525,
|
||||
a11a36a2a0.id_tarif AS a11a36a2a0a1441,
|
||||
a11a36a2a0.code_motif AS a11a36a2a0a1444,
|
||||
a11a36a2a0.code_saison AS a11a36a2a0a1443,
|
||||
a11a36a2a0.id_devise AS a11a36a2a0a1445,
|
||||
a11a36a2a0.solde AS a11a36a2a0a1442,
|
||||
a11a36a2a0.type_tarif AS a11a36a2a0a1446,
|
||||
a11a36a2a0.ht AS a11a36a2a0a1447,
|
||||
a36a27a3a1.code_motif AS a36a27a3a1a1041,
|
||||
a36a27a3a1.forcer_selection_vendeur AS a36a27a3a1a1044,
|
||||
a36a27a3a1.autoris_saisie_nouveau_prix AS a36a27a3a1a1050,
|
||||
a36a27a3a1.deductible_du_total_ticket AS a36a27a3a1a1049,
|
||||
a36a27a3a1.deduire_remise_pour_retour AS a36a27a3a1a1048,
|
||||
a36a27a3a1.detail_par_ligne_article AS a36a27a3a1a1046,
|
||||
a36a27a3a1.libelle AS a36a27a3a1a1042,
|
||||
a36a27a3a1.libellecourt AS a36a27a3a1a1043,
|
||||
a36a27a3a1.message_sur_ticket AS a36a27a3a1a1051,
|
||||
a36a27a3a1.possible_pour_pied_ticket AS a36a27a3a1a1056,
|
||||
a36a27a3a1.possible_pour_sous_total AS a36a27a3a1a1055,
|
||||
a36a27a3a1.saisie_commentaire AS a36a27a3a1a1045,
|
||||
a36a27a3a1.sens_valeur_accepte AS a36a27a3a1a1052,
|
||||
a36a27a3a1.total_en_pied_de_ticket AS a36a27a3a1a1047,
|
||||
a36a27a3a1.type_valeur AS a36a27a3a1a1053,
|
||||
a36a27a3a1.valeur_defaut AS a36a27a3a1a1054,
|
||||
a36a27a3a1.restockage_produit_retour AS a36a27a3a1a1057,
|
||||
a36a27a3a1.alimenter_panier_litige AS a36a27a3a1a1058,
|
||||
a36a27a3a1.valeur_maxi AS a36a27a3a1a1059,
|
||||
a27a103a4a1.code_motif AS a27a103a4a1a4901,
|
||||
a27a103a4a1.code AS a27a103a4a1a4902,
|
||||
a27a103a4a1.libelle AS a27a103a4a1a4903,
|
||||
a27a103a4a1.libellecourt AS a27a103a4a1a4904,
|
||||
a1a127a1a0.id_structure AS a1a127a1a0a5861,
|
||||
a1a127a1a0.id_produit AS a1a127a1a0a5862,
|
||||
a1a127a1a0.pvttc AS a1a127a1a0a5863,
|
||||
a127a33a2a0.id_structure AS a127a33a2a0a1321,
|
||||
a127a33a2a0.id_devise AS a127a33a2a0a1324,
|
||||
a127a33a2a0.id_pays3 AS a127a33a2a0a1325,
|
||||
a127a33a2a0.id_distrib AS a127a33a2a0a1326,
|
||||
a127a33a2a0.id_cp3 AS a127a33a2a0a1330,
|
||||
a127a33a2a0.id_taxe AS a127a33a2a0a1334,
|
||||
a127a33a2a0.num_interne AS a127a33a2a0a1336,
|
||||
a127a33a2a0.nom AS a127a33a2a0a1322,
|
||||
a127a33a2a0.enseigne AS a127a33a2a0a1323,
|
||||
a127a33a2a0.adresse1 AS a127a33a2a0a1327,
|
||||
a127a33a2a0.adresse2 AS a127a33a2a0a1328,
|
||||
a127a33a2a0.adresse3 AS a127a33a2a0a1329,
|
||||
a127a33a2a0.tel3 AS a127a33a2a0a1331,
|
||||
a127a33a2a0.fax3 AS a127a33a2a0a1332,
|
||||
a127a33a2a0.mail AS a127a33a2a0a1333,
|
||||
a127a33a2a0.droits_speciaux AS a127a33a2a0a1335,
|
||||
a127a33a2a0.cp_sur_ticket AS a127a33a2a0a1337,
|
||||
a127a33a2a0.campagne_chalandise_debut AS a127a33a2a0a1338,
|
||||
a127a33a2a0.campagne_chalandise_fin AS a127a33a2a0a1339,
|
||||
a127a33a2a0.decalage_horaire_ete AS a127a33a2a0a1340,
|
||||
a127a33a2a0.decalage_horaire_hiver AS a127a33a2a0a1341,
|
||||
a127a33a2a0.langue AS a127a33a2a0a1342,
|
||||
a127a33a2a0.tel_sav AS a127a33a2a0a1343,
|
||||
a127a33a2a0.capital_social AS a127a33a2a0a1344,
|
||||
a127a33a2a0.type_societe AS a127a33a2a0a1345,
|
||||
a127a33a2a0.num_siret AS a127a33a2a0a1346,
|
||||
a127a33a2a0.numero_rc AS a127a33a2a0a1347,
|
||||
a127a33a2a0.num_tva AS a127a33a2a0a1348,
|
||||
a127a33a2a0.numero_id_fiscale AS a127a33a2a0a1349,
|
||||
a127a33a2a0.id_niveau AS a127a33a2a0a1350,
|
||||
a127a33a2a0.id_structure_parent AS a127a33a2a0a1351,
|
||||
a127a33a2a0.structures_parents AS a127a33a2a0a1352,
|
||||
a127a33a2a0.prefix_ip AS a127a33a2a0a1353,
|
||||
a127a33a2a0.nb_factures AS a127a33a2a0a1354,
|
||||
a127a33a2a0.nbre_jour_validite_pwd AS a127a33a2a0a1355,
|
||||
a127a33a2a0.denominationsociale AS a127a33a2a0a1356,
|
||||
a127a33a2a0.mentionlegale AS a127a33a2a0a1357,
|
||||
a127a33a2a0.gpslatitude AS a127a33a2a0a1358,
|
||||
a127a33a2a0.gpslongitude AS a127a33a2a0a1359,
|
||||
a127a33a2a0.horaires_jours_ouverture AS a127a33a2a0a1360,
|
||||
a127a33a2a0.ecommerce AS a127a33a2a0a1361
|
||||
FROM produit a0a1a0a0
|
||||
LEFT OUTER JOIN carte_fidelite_type_produit a1a154a1a0
|
||||
ON (a0a1a0a0.id_produit = a1a154a1a0.id_produit)
|
||||
LEFT OUTER JOIN marque a1a134a1a0
|
||||
ON (a0a1a0a0.id_marque = a1a134a1a0.id_marque)
|
||||
INNER JOIN produit_type a1a20a1a0
|
||||
ON (a0a1a0a0.id_type_produit = a1a20a1a0.id_type_produit)
|
||||
LEFT OUTER JOIN produit_type_distrib a20a21a2a0
|
||||
ON (a1a20a1a0.id_type_produit = a20a21a2a0.id_type_produit)
|
||||
AND ( (a20a21a2a0.id_distrib = '3'))
|
||||
LEFT OUTER JOIN produit_type_distrib_motif a21a26a3a0
|
||||
ON ( a20a21a2a0.id_type_produit =
|
||||
a21a26a3a0.id_type_produit
|
||||
AND a20a21a2a0.id_distrib = a21a26a3a0.id_distrib)
|
||||
AND ( (a21a26a3a0.id_distrib = '3'))
|
||||
LEFT OUTER JOIN motif a26a27a4a0
|
||||
ON (a21a26a3a0.code_motif = a26a27a4a0.code_motif)
|
||||
LEFT OUTER JOIN language_motif a27a103a5a0
|
||||
ON (a26a27a4a0.code_motif = a27a103a5a0.code_motif)
|
||||
AND ( (a27a103a5a0.code = '3'))
|
||||
LEFT OUTER JOIN param_type_bon_achat a21a57a3a0
|
||||
ON (a20a21a2a0.id_type_bon_achat = a21a57a3a0.id_type_bon_achat)
|
||||
LEFT OUTER JOIN param_type_bon_achat_distrib a57a120a4a0
|
||||
ON (a21a57a3a0.id_type_bon_achat =
|
||||
a57a120a4a0.id_type_bon_achat)
|
||||
AND ( (a57a120a4a0.id_distrib = '3'))
|
||||
LEFT OUTER JOIN language_produit a1a99a1a0
|
||||
ON (a0a1a0a0.id_produit = a1a99a1a0.id_produit)
|
||||
AND ( (a1a99a1a0.id_produit = '1019629')
|
||||
AND (a1a99a1a0.code = '3'))
|
||||
LEFT OUTER JOIN produit_code_barre a1a15a1a0
|
||||
ON (a0a1a0a0.id_produit = a1a15a1a0.id_produit)
|
||||
LEFT OUTER JOIN param_taxes a1a24a1a0
|
||||
ON (a0a1a0a0.id_taxe = a1a24a1a0.id_taxe)
|
||||
LEFT OUTER JOIN param_taxes_valeur a24a25a2a0
|
||||
ON (a1a24a1a0.id_taxe = a24a25a2a0.id_taxe)
|
||||
AND ( (a24a25a2a0.id_pays = '59'))
|
||||
LEFT OUTER JOIN param_taxes_valeur_histo a25a161a3a0
|
||||
ON ( a24a25a2a0.id_pays = a25a161a3a0.id_pays
|
||||
AND a24a25a2a0.id_taxe = a25a161a3a0.id_taxe)
|
||||
LEFT OUTER JOIN param_taxes_produit_pays a1a119a1a0
|
||||
ON (a0a1a0a0.id_produit = a1a119a1a0.id_produit)
|
||||
AND ( (a1a119a1a0.id_pays = '59'))
|
||||
LEFT OUTER JOIN param_taxes a119a24a2a1
|
||||
ON (a1a119a1a0.id_taxe = a119a24a2a1.id_taxe)
|
||||
LEFT OUTER JOIN param_taxes_valeur a24a25a3a1
|
||||
ON (a119a24a2a1.id_taxe = a24a25a3a1.id_taxe)
|
||||
AND ( (a24a25a3a1.id_pays = '59'))
|
||||
LEFT OUTER JOIN param_taxes_valeur_histo a25a161a4a1
|
||||
ON ( a24a25a3a1.id_pays = a25a161a4a1.id_pays
|
||||
AND a24a25a3a1.id_taxe = a25a161a4a1.id_taxe)
|
||||
LEFT OUTER JOIN produit_structure_garantie a1a126a1a0
|
||||
ON (a0a1a0a0.id_produit = a1a126a1a0.id_produit)
|
||||
AND ( (a1a126a1a0.id_distrib = '3'))
|
||||
LEFT OUTER JOIN produit_famille a1a4a1a0
|
||||
ON (a0a1a0a0.id_famille = a1a4a1a0.id_famille)
|
||||
LEFT OUTER JOIN carte_fidelite_type_famille a4a137a2a0
|
||||
ON (a1a4a1a0.id_famille = a4a137a2a0.id_famille)
|
||||
LEFT OUTER JOIN produit_famille a1a4a1a1
|
||||
ON (a0a1a0a0.id_famille = a1a4a1a1.id_famille)
|
||||
LEFT OUTER JOIN produit_famille a1a4a1a2
|
||||
ON (a0a1a0a0.id_famille = a1a4a1a2.id_famille)
|
||||
LEFT OUTER JOIN produit_famille a1a4a1a3
|
||||
ON (a0a1a0a0.id_famille = a1a4a1a3.id_famille)
|
||||
LEFT OUTER JOIN param_axe_valeur a1a17a1a0
|
||||
ON (a0a1a0a0.id_type_axe_valeur1 = a1a17a1a0.id)
|
||||
LEFT OUTER JOIN language_param_axe_valeur a17a18a2a0
|
||||
ON (a1a17a1a0.id = a17a18a2a0.id)
|
||||
LEFT OUTER JOIN param_axe_valeur a1a17a1a1
|
||||
ON (a0a1a0a0.id_type_axe_valeur2 = a1a17a1a1.id)
|
||||
LEFT OUTER JOIN catalogue_ligne a1a91a1a0
|
||||
ON (a0a1a0a0.id_produit = a1a91a1a0.id_produit)
|
||||
LEFT OUTER JOIN produit_ecopart_pays a1a95a1a0
|
||||
ON (a0a1a0a0.id_produit = a1a95a1a0.id_produit)
|
||||
AND ( (a1a95a1a0.id_produit = '1019629')
|
||||
AND (a1a95a1a0.id_pays = '59'))
|
||||
INNER JOIN tarif_ligne a1a11a1a0
|
||||
ON (a0a1a0a0.id_produit = a1a11a1a0.id_produit)
|
||||
INNER JOIN tarif_structure a11a14a2a0
|
||||
ON (a1a11a1a0.id_tarif = a11a14a2a0.id_tarif)
|
||||
AND ( (a11a14a2a0.id_structure = '760'))
|
||||
INNER JOIN tarif a11a36a2a0
|
||||
ON (a1a11a1a0.id_tarif = a11a36a2a0.id_tarif)
|
||||
LEFT OUTER JOIN motif a36a27a3a1
|
||||
ON (a11a36a2a0.code_motif = a36a27a3a1.code_motif)
|
||||
LEFT OUTER JOIN language_motif a27a103a4a1
|
||||
ON (a36a27a3a1.code_motif = a27a103a4a1.code_motif)
|
||||
AND ( (a27a103a4a1.code = '3'))
|
||||
LEFT OUTER JOIN produit_structure_visu a1a127a1a0
|
||||
ON (a0a1a0a0.id_produit = a1a127a1a0.id_produit)
|
||||
AND ( ( a1a127a1a0.id_structure = '760'
|
||||
OR a1a127a1a0.id_structure = '243'
|
||||
OR a1a127a1a0.id_structure = '2'
|
||||
OR a1a127a1a0.id_structure = '1'))
|
||||
LEFT OUTER JOIN structure a127a33a2a0
|
||||
ON (a1a127a1a0.id_structure = a127a33a2a0.id_structure)
|
||||
WHERE a0a1a0a0.id_produit = 1019629
|
||||
|
||||
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 138 KiB |
|
After Width: | Height: | Size: 68 KiB |
|
After Width: | Height: | Size: 54 KiB |
|
After Width: | Height: | Size: 63 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 81 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 8.4 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 8.9 KiB |
|
After Width: | Height: | Size: 91 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 66 KiB |
|
After Width: | Height: | Size: 90 KiB |
|
After Width: | Height: | Size: 9.0 KiB |
|
After Width: | Height: | Size: 7.8 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 50 KiB |
|
After Width: | Height: | Size: 72 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 54 KiB |
|
After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 8.5 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 51 KiB |
|
After Width: | Height: | Size: 50 KiB |
|
After Width: | Height: | Size: 121 KiB |
|
After Width: | Height: | Size: 2.7 KiB |
|
After Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 202 KiB |
|
After Width: | Height: | Size: 77 KiB |
|
After Width: | Height: | Size: 908 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 7.1 KiB |
|
After Width: | Height: | Size: 107 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
|
@ -0,0 +1,186 @@
|
|||
// .///.
|
||||
// (0 o)
|
||||
//-------------0000--(_)--0000---------------
|
||||
//
|
||||
// (C) 2012-2014 Frédérik BENOIST / Garsys
|
||||
// Tout droits réservés
|
||||
//
|
||||
// oooO Oooo
|
||||
//------------( )-----( )---------------
|
||||
// \ ( ) /
|
||||
// \_) (_/
|
||||
package RestWebServices;
|
||||
|
||||
import javax.ws.rs.Consumes;
|
||||
import javax.ws.rs.DELETE;
|
||||
import javax.ws.rs.FormParam;
|
||||
import javax.ws.rs.core.Context;
|
||||
import javax.ws.rs.core.UriInfo;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.GET;
|
||||
import javax.ws.rs.PUT;
|
||||
import javax.ws.rs.PathParam;
|
||||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.QueryParam;
|
||||
import javax.ws.rs.core.Response;
|
||||
import my.lib.db.CallDB;
|
||||
import my.lib.rest.RestUtils;
|
||||
import org.json.JSONObject;
|
||||
|
||||
@Path("Concurrence")
|
||||
public class Concurrence {
|
||||
|
||||
@Context
|
||||
private UriInfo context;
|
||||
|
||||
/**
|
||||
* Creates a new instance of Concurrence
|
||||
*/
|
||||
public Concurrence() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Récupération de la liste des enseignes concurrentes
|
||||
*/
|
||||
@GET
|
||||
@Path("/liste")
|
||||
@Produces("application/json")
|
||||
public Response getListe(@QueryParam("guid") String pguid) {
|
||||
JSONObject oResult = new JSONObject();
|
||||
JSONObject oParam = new JSONObject();
|
||||
CallDB oDb = new CallDB();
|
||||
|
||||
// json des paramètres
|
||||
oParam.put("guid", pguid);
|
||||
|
||||
oResult = oDb.jsCallPROCReturnCLOB(
|
||||
"p_mportal_concurrence.ws_concurrence_ens_liste",
|
||||
oParam);
|
||||
|
||||
if (oDb.CallSuccess()) {
|
||||
return RestUtils.MakeResponse(oResult.toString());
|
||||
} else {
|
||||
return RestUtils.MakeResponse("{}");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* retourne les informations d'un concurrent
|
||||
*/
|
||||
@GET
|
||||
@Path("/info/{pid_concurrence_enseigne}")
|
||||
@Produces("application/json")
|
||||
public Response getInfo(
|
||||
@PathParam("pid_concurrence_enseigne") int pid_concurrence_enseigne,
|
||||
@QueryParam("guid") String pguid) {
|
||||
JSONObject oResult = new JSONObject();
|
||||
JSONObject oParam = new JSONObject();
|
||||
CallDB oDb = new CallDB();
|
||||
|
||||
// json des paramètres
|
||||
oParam.put("guid", pguid);
|
||||
oParam.put("id_concurrence_enseigne", pid_concurrence_enseigne);
|
||||
|
||||
oResult = oDb.jsCallPROCReturnVARCHAR2(
|
||||
"p_mportal_concurrence.ws_concurrence_ens_get",
|
||||
oParam);
|
||||
|
||||
if (oDb.CallSuccess()) {
|
||||
return RestUtils.MakeResponse(oResult.toString());
|
||||
} else {
|
||||
return RestUtils.MakeResponse("{}");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* enregistre les informations d'un nouveau concurrent
|
||||
*/
|
||||
@GET
|
||||
@Path("/nouveau")
|
||||
@Produces("application/json")
|
||||
public Response getNouveau(
|
||||
@QueryParam("guid") String pguid,
|
||||
@QueryParam("libelle") String plibelle,
|
||||
@QueryParam("site_web") String psite_web) {
|
||||
JSONObject oResult = new JSONObject();
|
||||
JSONObject oParam = new JSONObject();
|
||||
CallDB oDb = new CallDB();
|
||||
|
||||
// json des paramètres
|
||||
oParam.put("guid", pguid);
|
||||
oParam.put("libelle", plibelle);
|
||||
oParam.put("site_web", psite_web);
|
||||
|
||||
oResult = oDb.jsCallPROCReturnVARCHAR2(
|
||||
"p_mportal_concurrence.ws_concurrence_ens_new",
|
||||
oParam);
|
||||
|
||||
if (oDb.CallSuccess()) {
|
||||
return RestUtils.MakeResponse(oResult.toString());
|
||||
} else {
|
||||
return RestUtils.MakeResponse("{}");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* modifie les informations d'un concurrent
|
||||
*/
|
||||
@PUT
|
||||
@Path("/modifie/{pid_concurrence_enseigne}")
|
||||
@Consumes("application/x-www-form-urlencoded")
|
||||
@Produces("application/json")
|
||||
public Response putModifie(
|
||||
@PathParam("pid_concurrence_enseigne") int pid_concurrence_enseigne,
|
||||
@FormParam("guid") String pguid,
|
||||
@FormParam("libelle") String plibelle,
|
||||
@FormParam("site_web") String psite_web) {
|
||||
JSONObject oResult = new JSONObject();
|
||||
JSONObject oParam = new JSONObject();
|
||||
CallDB oDb = new CallDB();
|
||||
|
||||
// json des paramètres
|
||||
oParam.put("guid", pguid);
|
||||
oParam.put("id_concurrence_enseigne", pid_concurrence_enseigne);
|
||||
oParam.put("libelle", plibelle);
|
||||
oParam.put("site_web", psite_web);
|
||||
|
||||
oResult = oDb.jsCallPROCReturnVARCHAR2(
|
||||
"p_mportal_concurrence.ws_concurrence_ens_mod",
|
||||
oParam);
|
||||
|
||||
if (oDb.CallSuccess()) {
|
||||
return RestUtils.MakeResponse(oResult.toString());
|
||||
} else {
|
||||
return RestUtils.MakeResponse("{}");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* supprime un concurrent
|
||||
*/
|
||||
@DELETE
|
||||
@Path("/supprime/{pid_concurrence_enseigne}")
|
||||
@Consumes("application/x-www-form-urlencoded")
|
||||
@Produces("application/json")
|
||||
public Response delSupprime(
|
||||
@PathParam("pid_concurrence_enseigne") int pid_concurrence_enseigne,
|
||||
@FormParam("guid") String pguid) {
|
||||
JSONObject oResult = new JSONObject();
|
||||
JSONObject oParam = new JSONObject();
|
||||
CallDB oDb = new CallDB();
|
||||
|
||||
// json des paramètres
|
||||
oParam.put("guid", pguid);
|
||||
oParam.put("id_concurrence_enseigne", pid_concurrence_enseigne);
|
||||
|
||||
oResult = oDb.jsCallPROCReturnVARCHAR2(
|
||||
"p_mportal_concurrence.ws_concurrence_ens_del",
|
||||
oParam);
|
||||
|
||||
if (oDb.CallSuccess()) {
|
||||
return RestUtils.MakeResponse(oResult.toString());
|
||||
} else {
|
||||
return RestUtils.MakeResponse("{}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 600 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 9.7 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 4.4 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 66 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 114 KiB |
|
After Width: | Height: | Size: 188 KiB |
|
After Width: | Height: | Size: 116 KiB |
|
After Width: | Height: | Size: 105 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 528 KiB |
|
After Width: | Height: | Size: 9.8 KiB |
|
After Width: | Height: | Size: 46 KiB |
|
After Width: | Height: | Size: 173 KiB |
|
After Width: | Height: | Size: 56 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 60 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 103 KiB |
|
After Width: | Height: | Size: 51 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 95 KiB |
|
After Width: | Height: | Size: 313 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 183 KiB |
|
After Width: | Height: | Size: 29 KiB |