Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 65de6f61

Von Kivitendo Admin vor etwa 8 Jahren hinzugefügt

  • ID 65de6f61582fbd9e93c4a06cb11daab66ff4f308
  • Vorgänger a89af9c2
  • Nachfolger 53d15b75

Neuen Artikeltyp Sortiment in kivitendo eingebaut

  • eigenen TopQuickSearch
  • eigener Nummernkreis
  • Links und Menüeinträge gehen zu neuen Part Controller

Unterschiede anzeigen:

SL/Controller/TopQuickSearch.pm
'SL::Controller::TopQuickSearch::Part',
'SL::Controller::TopQuickSearch::Service',
'SL::Controller::TopQuickSearch::Assembly',
'SL::Controller::TopQuickSearch::Assortment',
'SL::Controller::TopQuickSearch::Contact',
'SL::Controller::TopQuickSearch::SalesQuotation',
'SL::Controller::TopQuickSearch::SalesOrder',
SL/Controller/TopQuickSearch/Article.pm
my ($self, $term) = @_;
SL::Controller::Base->new->url_for(
controller => 'ic.pl',
action => 'edit',
controller => 'controller.pl',
action => 'Part/edit',
id => $term,
);
}
SL/Controller/TopQuickSearch/Assortment.pm
package SL::Controller::TopQuickSearch::Assortment;
use strict;
use parent qw(SL::Controller::TopQuickSearch::Article);
use SL::Locale::String qw(t8);
sub name { 'assortment' }
sub description_config { t8('Assortment') }
sub description_field { t8('Assortment') }
sub part_type { 'assortment' }
1;
SL/DB/Helper/TransNumberGenerator.pm
part => { number_column => 'partnumber', number_range_column => 'articlenumber', scoping => \&parts_scoping, },
service => { number_column => 'partnumber', number_range_column => 'servicenumber', scoping => \&parts_scoping, },
assembly => { number_column => 'partnumber', number_range_column => 'assemblynumber', scoping => \&parts_scoping, },
assortment => { number_column => 'partnumber', number_range_column => 'assortmentnumber', scoping => \&parts_scoping, },
);
sub get_next_trans_number {
......
my $range_table = ($business ? $business : SL::DB::Default->get)->load(for_update => 1);
my $start_number = $range_table->$number_range_column;
$start_number = $range_table->articlenumber if ($number_range_column eq 'assemblynumber') && (length($start_number) < 1);
$start_number = $range_table->articlenumber if ($number_range_column =~ /^(assemblynumber|assortmentnumber)$/) && (length($start_number) < 1);
my $sequence = SL::PrefixedNumber->new(number => $start_number // 0);
if (!$fill_holes_in_range) {
SL/DB/Manager/Part.pm
push @filter, ($prefix . part_type => 'service');
} elsif ($type =~ m/^assembly/) {
push @filter, ($prefix . part_type => 'assembly');
} elsif ($type =~ m/^assortment/) {
push @filter, ($prefix . part_type => 'assortment');
}
}
SL/DB/Part.pm
sub is_type {
my $self = shift;
my $type = lc(shift || '');
die 'invalid type' unless $type =~ /^(?:part|service|assembly)$/;
die 'invalid type' unless $type =~ /^(?:part|service|assembly|assortment)$/;
return $self->type eq $type ? 1 : 0;
}
sub is_part { $_[0]->part_type eq 'part' }
sub is_assembly { $_[0]->part_type eq 'assembly' }
sub is_service { $_[0]->part_type eq 'service' }
sub is_part { $_[0]->part_type eq 'part' }
sub is_assembly { $_[0]->part_type eq 'assembly' }
sub is_service { $_[0]->part_type eq 'service' }
sub is_assortment { $_[0]->part_type eq 'assortment' }
sub type {
return $_[0]->part_type;
......
$class->new(%params, part_type => 'service');
}
sub new_assortment {
my ($class, %params) = @_;
$class->new(%params, part_type => 'assortment');
}
sub orphaned {
my ($self) = @_;
die 'not an accessor' if @_ > 1;
......
SL::DB::InvoiceItem
SL::DB::OrderItem
SL::DB::Inventory
SL::DB::Assembly
SL::DB::AssortmentItem
);
for my $class (@relations) {
......
=item Assembly - a collection of both parts and services
=item Assortment - a collection of parts
=back
These types are sadly represented by data inside the class and cannot be
migrated into a flag. To work around this, each C<Part> object knows what type
it currently is. Since the type is data driven, there ist no explicit setting
method for it, but you can construct them explicitly with C<new_part>,
C<new_service>, and C<new_assembly>. A Buchungsgruppe should be supplied in this
C<new_service>, C<new_assembly> and C<new_assortment>. A Buchungsgruppe should be supplied in this
case, but it will use the default Buchungsgruppe if you don't.
Matching these there are assorted helper methods dealing with types,
SL/Presenter/Part.pm
croak "Unknown display type '$params{display}'" unless $params{display} =~ m/^(?:inline|table-cell)$/;
my $text = join '', (
$params{no_link} ? '' : '<a href="ic.pl?action=edit&id=' . $self->escape($part->id) . '">',
$params{no_link} ? '' : '<a href="controller.pl?action=Part/edit&id=' . $self->escape($part->id) . '">',
$self->escape($part->partnumber),
$params{no_link} ? '' : '</a>',
);
SL/TransNumber.pm
scalar => [ qw(type id number save dbh dbh_provided business_id) ],
);
my @SUPPORTED_TYPES = qw(invoice credit_note customer vendor sales_delivery_order purchase_delivery_order sales_order purchase_order sales_quotation request_quotation part service assembly letter);
my @SUPPORTED_TYPES = qw(invoice credit_note customer vendor sales_delivery_order purchase_delivery_order sales_order purchase_order sales_quotation request_quotation part service assembly assortment letter);
sub new {
my $class = shift;
......
$filters{where} = 'COALESCE(quotation, FALSE)';
$filters{where} .= $type =~ /^sales/ ? ' AND (customer_id IS NOT NULL)' : ' AND (vendor_id IS NOT NULL)';
} elsif ($type =~ /part|service|assembly/) {
} elsif ($type =~ /^(part|service|assembly|assortment)$/) {
$filters{trans_number} = "partnumber";
$filters{numberfield} = $type eq 'service' ? 'servicenumber' : 'articlenumber';
$filters{numberfield} = $type eq 'assembly' ? 'assemblynumber' : $filters{numberfield};
my %numberfield_hash = ( service => 'servicenumber',
assembly => 'assemblynumber',
assortment => 'assortmentnumber',
part => 'articlenumber'
);
$filters{numberfield} = $numberfield_hash{$type};
$filters{table} = "parts";
} elsif ($type =~ /letter/) {
$filters{trans_number} = "letternumber";
bin/mozilla/ic.pl
$soldtotal = 0 if ($form->{sold});
}
my $edit_link = build_std_url('action=edit', 'id=' . E($ref->{id}), 'callback');
my $edit_link = build_std_url('script=controller.pl', 'action=Part/edit', 'id=' . E($ref->{id}), 'callback');
$row->{partnumber}->{link} = $edit_link;
$row->{description}->{link} = $edit_link;
locale/de/all
'Add Accounts Payables Transaction' => 'Kreditorenbuchung erfassen',
'Add Accounts Receivables Transaction' => 'Debitorenbuchung erfassen',
'Add Assembly' => 'Erzeugnis erfassen',
'Add Assortment' => 'Sortiment erfassen',
'Add Client' => 'Neuer Mandant',
'Add Credit Note' => 'Gutschrift erfassen',
'Add Customer' => 'Kunde erfassen',
......
'Assigned invoices' => 'Zugewiesene Rechnungen',
'Assignment of articles to sections' => 'Zuweisung von Artikeln zu Abschnitten',
'Assistant for general ledger corrections' => 'Assistent für die Korrektur von Hauptbucheinträgen',
'Assortment' => 'Sortiment',
'Assortment items' => 'Sortimentsartikel',
'Assortments' => 'Sortimente',
'Assume Tax Consultant Data in Tax Computation?' => 'Beraterdaten in UStVA übernehmen?',
'At least' => 'Mindestens',
'At least one Perl module that kivitendo ERP requires for running is not installed on your system.' => 'Mindestes ein Perl-Modul, das kivitendo ERP zur Ausf&uuml;hrung ben&ouml;tigt, ist auf Ihrem System nicht installiert.',
......
'Edit Accounts Payables Transaction' => 'Kreditorenbuchung bearbeiten',
'Edit Accounts Receivables Transaction' => 'Debitorenbuchung bearbeiten',
'Edit Assembly' => 'Erzeugnis bearbeiten',
'Edit Assortment' => 'Sortiment bearbeiten',
'Edit Bins' => 'Lagerpl&auml;tze bearbeiten',
'Edit Client' => 'Mandanten bearbeiten',
'Edit Credit Note' => 'Gutschrift bearbeiten',
......
'Languages and translations' => 'Sprachen und Übersetzungen',
'Last Article Number' => 'Letzte Artikelnummer',
'Last Assembly Number' => 'Letzte Erzeugnisnummer',
'Last Assortment Number' => 'Letzte Sortimentsnummer',
'Last Cost' => 'Einkaufspreis',
'Last Credit Note Number' => 'Letzte Gutschriftnummer',
'Last Customer Number' => 'Letzte Kundennummer',
......
'The application "#1" was not found on the system.' => 'Die Anwendung "#1" wurde auf dem System nicht gefunden.',
'The assembly has been created.' => 'Das Erzeugnis wurde hergestellt.',
'The assistant could not find anything wrong with #1. Maybe the problem has been solved in the meantime.' => 'Der Korrekturassistent konnte kein Problem bei #1 feststellen. Eventuell wurde das Problem in der Zwischenzeit bereits behoben.',
'The assortment doesn\'t have any items.' => 'Das Sortiment enthält keine Artikel.',
'The authentication database is not reachable at the moment. Either it hasn\'t been set up yet or the database server might be down. Please contact your administrator.' => 'Die Authentifizierungs-Datenbank kann momentan nicht erreicht werden. Entweder wurde sie noch nicht eingerichtet, oder der Datenbankserver ist momentan nicht verfügbar. Bitte wenden Sie sich an Ihren Administrator.',
'The available options depend on the varibale type:' => 'Die verf&uuml;gbaren Optionen h&auml;ngen vom Variablentypen ab:',
'The background job could not be destroyed.' => 'Der Hintergrund-Job konnte nicht gelöscht werden.',
menus/user/00-erp.yaml
icon: part_add
order: 300
access: part_service_assembly_edit
module: ic.pl
params:
action: add
part_type: part
action: Part/add_part
- parent: master_data
id: master_data_add_service
name: Add Service
icon: service_add
order: 400
access: part_service_assembly_edit
module: ic.pl
params:
action: add
part_type: service
action: Part/add_service
- parent: master_data
id: master_data_add_assembly
name: Add Assembly
icon: assembly_add
order: 500
access: part_service_assembly_edit
module: ic.pl
params:
action: add
part_type: assembly
action: Part/add_assembly
- parent: master_data
id: master_data_add_assortment
name: Add Assortment
icon: assortment_add
order: 550
access: part_service_assembly_edit
params:
action: Part/add_assortment
- parent: master_data
id: master_data_add_project
name: Add Project
......
params:
action: search
searchitems: assembly
- parent: master_data_reports
id: master_data_reports_assortments
name: Assortments
icon: assortment_report
order: 650
access: part_service_assortment_details
module: ic.pl
params:
action: search
searchitems: assortment
- parent: master_data_reports
id: master_data_reports_projects
name: Projects

Auch abrufbar als: Unified diff